From af4c1c6cd7cc5fa3272af280771c787cd017b4c9 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Wed, 4 Mar 2015 13:04:32 -0500 Subject: [PATCH] A few fixes, need to fix an output issue --- .../mekanism/common/block/BlockBasic.java | 14 ++- .../mekanism/common/block/BlockMachine.java | 12 +-- .../common/content/matrix/MatrixCache.java | 8 -- .../content/matrix/MatrixUpdateProtocol.java | 28 ------ .../matrix/SynchronizedMatrixData.java | 45 ++++++++- .../mekanism/common/item/ItemBlockBasic.java | 97 ++++++++++++++++--- .../common/item/ItemBlockMachine.java | 1 + .../common/multiblock/UpdateProtocol.java | 2 +- .../tile/TileEntityInductionCasing.java | 14 ++- .../common/tile/TileEntityMultiblock.java | 5 +- 10 files changed, 157 insertions(+), 69 deletions(-) diff --git a/src/main/java/mekanism/common/block/BlockBasic.java b/src/main/java/mekanism/common/block/BlockBasic.java index 222f646ea..76d7e8da1 100644 --- a/src/main/java/mekanism/common/block/BlockBasic.java +++ b/src/main/java/mekanism/common/block/BlockBasic.java @@ -7,6 +7,8 @@ import java.util.Random; import mekanism.api.Coord4D; import mekanism.api.Range4D; +import mekanism.api.energy.IEnergizedItem; +import mekanism.api.energy.IStrictEnergyStorage; import mekanism.client.ClientProxy; import mekanism.client.render.MekanismRenderer.ICustomBlockIcon; import mekanism.common.CTMData; @@ -913,6 +915,14 @@ public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon ((ItemBlockBasic)ret.getItem()).setTier(ret, tileEntity.tier.getBaseTier()); } } + + TileEntity tileEntity = world.getTileEntity(x, y, z); + + if(tileEntity instanceof IStrictEnergyStorage) + { + IEnergizedItem energizedItem = (IEnergizedItem)ret.getItem(); + energizedItem.setEnergy(ret, ((IStrictEnergyStorage)tileEntity).getEnergy()); + } return ret; } @@ -934,7 +944,7 @@ public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon double motionY = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; double motionZ = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; - EntityItem entityItem = new EntityItem(world, x + motionX, y + motionY, z + motionZ, getPickBlock(null, world, x, y, z)); + EntityItem entityItem = new EntityItem(world, x + motionX, y + motionY, z + motionZ, getPickBlock(null, world, x, y, z, player)); world.spawnEntityInWorld(entityItem); } @@ -944,7 +954,7 @@ public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon public ItemStack dismantleBlock(World world, int x, int y, int z, boolean returnBlock) { - ItemStack itemStack = getPickBlock(null, world, x, y, z); + ItemStack itemStack = getPickBlock(null, world, x, y, z, null); world.setBlockToAir(x, y, z); diff --git a/src/main/java/mekanism/common/block/BlockMachine.java b/src/main/java/mekanism/common/block/BlockMachine.java index 8912044f0..d4a07d4e8 100644 --- a/src/main/java/mekanism/common/block/BlockMachine.java +++ b/src/main/java/mekanism/common/block/BlockMachine.java @@ -8,6 +8,7 @@ import mekanism.api.MekanismConfig.client; import mekanism.api.MekanismConfig.general; import mekanism.api.MekanismConfig.usage; import mekanism.api.energy.IEnergizedItem; +import mekanism.api.energy.IStrictEnergyStorage; import mekanism.client.ClientProxy; import mekanism.common.ItemAttacher; import mekanism.common.Mekanism; @@ -43,7 +44,6 @@ import mekanism.common.tile.TileEntityCombiner; import mekanism.common.tile.TileEntityContainerBlock; import mekanism.common.tile.TileEntityCrusher; import mekanism.common.tile.TileEntityDigitalMiner; -import mekanism.common.tile.TileEntityElectricBlock; import mekanism.common.tile.TileEntityElectricChest; import mekanism.common.tile.TileEntityElectricPump; import mekanism.common.tile.TileEntityElectrolyticSeparator; @@ -709,7 +709,7 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer double motionY = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; double motionZ = (world.rand.nextFloat() * motion) + (1.0F - motion) * 0.5D; - EntityItem entityItem = new EntityItem(world, x + motionX, y + motionY, z + motionZ, getPickBlock(null, world, x, y, z)); + EntityItem entityItem = new EntityItem(world, x + motionX, y + motionY, z + motionZ, getPickBlock(null, world, x, y, z, player)); world.spawnEntityInWorld(entityItem); } @@ -861,7 +861,7 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer } @Override - public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) + public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z, EntityPlayer player) { TileEntityBasicBlock tileEntity = (TileEntityBasicBlock)world.getTileEntity(x, y, z); ItemStack itemStack = new ItemStack(this, 1, world.getBlockMetadata(x, y, z)); @@ -901,10 +901,10 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer itemStack.stackTagCompound.setInteger("controlType", control.getControlType().ordinal()); } - if(tileEntity instanceof TileEntityElectricBlock) + if(tileEntity instanceof IStrictEnergyStorage) { IEnergizedItem energizedItem = (IEnergizedItem)itemStack.getItem(); - energizedItem.setEnergy(itemStack, ((TileEntityElectricBlock)tileEntity).electricityStored); + energizedItem.setEnergy(itemStack, ((IStrictEnergyStorage)tileEntity).getEnergy()); } if(tileEntity instanceof TileEntityContainerBlock && ((TileEntityContainerBlock)tileEntity).inventory.length > 0) @@ -943,7 +943,7 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer public ItemStack dismantleBlock(World world, int x, int y, int z, boolean returnBlock) { - ItemStack itemStack = getPickBlock(null, world, x, y, z); + ItemStack itemStack = getPickBlock(null, world, x, y, z, null); world.setBlockToAir(x, y, z); diff --git a/src/main/java/mekanism/common/content/matrix/MatrixCache.java b/src/main/java/mekanism/common/content/matrix/MatrixCache.java index 8a99e36b4..67ad9b7cd 100644 --- a/src/main/java/mekanism/common/content/matrix/MatrixCache.java +++ b/src/main/java/mekanism/common/content/matrix/MatrixCache.java @@ -11,20 +11,16 @@ public class MatrixCache extends MultiblockCache { public ItemStack[] inventory = new ItemStack[2]; - public double electricityStored; - @Override public void apply(SynchronizedMatrixData data) { data.inventory = inventory; - data.electricityStored = electricityStored; } @Override public void sync(SynchronizedMatrixData data) { inventory = data.inventory; - electricityStored = data.electricityStored; } @Override @@ -43,8 +39,6 @@ public class MatrixCache extends MultiblockCache inventory[slotID] = ItemStack.loadItemStackFromNBT(tagCompound); } } - - electricityStored = nbtTags.getDouble("electricityStored"); } @Override @@ -64,7 +58,5 @@ public class MatrixCache extends MultiblockCache } nbtTags.setTag("Items", tagList); - - nbtTags.setDouble("electricityStored", electricityStored); } } diff --git a/src/main/java/mekanism/common/content/matrix/MatrixUpdateProtocol.java b/src/main/java/mekanism/common/content/matrix/MatrixUpdateProtocol.java index db6d68ef3..36e37b038 100644 --- a/src/main/java/mekanism/common/content/matrix/MatrixUpdateProtocol.java +++ b/src/main/java/mekanism/common/content/matrix/MatrixUpdateProtocol.java @@ -83,8 +83,6 @@ public class MatrixUpdateProtocol extends UpdateProtocol { structureFound.cells.add(coord); structureFound.storageCap += ((TileEntityInductionCell)tile).tier.MAX_ELECTRICITY; - structureFound.electricityStored += ((TileEntityInductionCell)tile).getEnergy(); - ((TileEntityInductionCell)tile).setEnergy(0); } else if(tile instanceof TileEntityInductionProvider) { @@ -93,30 +91,4 @@ public class MatrixUpdateProtocol extends UpdateProtocol } } } - - @Override - protected void onStructureDestroyed(SynchronizedMatrixData structure) - { - if(structure.electricityStored <= 0) - { - return; - } - - for(Coord4D coord : structure.cells) - { - if(coord.getTileEntity(pointer.getWorldObj()) instanceof TileEntityInductionCell) - { - TileEntityInductionCell cell = (TileEntityInductionCell)coord.getTileEntity(pointer.getWorldObj()); - - double toAdd = Math.min(cell.getMaxEnergy()-cell.getEnergy(), structure.electricityStored); - cell.setEnergy(cell.getEnergy()+toAdd); - structure.electricityStored -= toAdd; - } - - if(structure.electricityStored <= 0) - { - break; - } - } - } } diff --git a/src/main/java/mekanism/common/content/matrix/SynchronizedMatrixData.java b/src/main/java/mekanism/common/content/matrix/SynchronizedMatrixData.java index 31a19f251..ae1fa0ccb 100644 --- a/src/main/java/mekanism/common/content/matrix/SynchronizedMatrixData.java +++ b/src/main/java/mekanism/common/content/matrix/SynchronizedMatrixData.java @@ -5,14 +5,15 @@ import java.util.Set; import mekanism.api.Coord4D; import mekanism.common.multiblock.SynchronizedData; +import mekanism.common.tile.TileEntityInductionCell; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; public class SynchronizedMatrixData extends SynchronizedData { public ItemStack[] inventory = new ItemStack[2]; - public double electricityStored; - public Set cells = new HashSet(); public Set providers = new HashSet(); @@ -20,6 +21,7 @@ public class SynchronizedMatrixData extends SynchronizedData 0) + { + list.add(EnumColor.BRIGHT_GREEN + MekanismUtils.localize("tooltip.storedEnergy") + ": " + EnumColor.GREY + MekanismUtils.getEnergyDisplay(getEnergy(itemstack))); + } } @Override @@ -215,6 +210,13 @@ public class ItemBlockBasic extends ItemBlock } } } + + TileEntity tileEntity = world.getTileEntity(x, y, z); + + if(tileEntity instanceof IStrictEnergyStorage) + { + ((IStrictEnergyStorage)tileEntity).setEnergy(getEnergy(stack)); + } } return place; @@ -306,4 +308,69 @@ public class ItemBlockBasic extends ItemBlock return getUnlocalizedName() + "." + name; } + + @Override + public double getEnergy(ItemStack itemStack) + { + if(Block.getBlockFromItem(this) == MekanismBlocks.BasicBlock2 && itemStack.getItemDamage() == 3) + { + if(itemStack.stackTagCompound == null) + { + return 0; + } + + return itemStack.stackTagCompound.getDouble("energyStored"); + } + + return 0; + } + + @Override + public void setEnergy(ItemStack itemStack, double amount) + { + if(Block.getBlockFromItem(this) == MekanismBlocks.BasicBlock2 && itemStack.getItemDamage() == 3) + { + if(itemStack.stackTagCompound == null) + { + itemStack.setTagCompound(new NBTTagCompound()); + } + + itemStack.stackTagCompound.setDouble("energyStored", Math.max(Math.min(amount, getMaxEnergy(itemStack)), 0)); + } + } + + @Override + public double getMaxEnergy(ItemStack itemStack) + { + if(Block.getBlockFromItem(this) == MekanismBlocks.BasicBlock2 && itemStack.getItemDamage() == 3) + { + return InductionCellTier.values()[getTier(itemStack).ordinal()].MAX_ELECTRICITY; + } + + return 0; + } + + @Override + public double getMaxTransfer(ItemStack itemStack) + { + return 0; + } + + @Override + public boolean canReceive(ItemStack itemStack) + { + return false; + } + + @Override + public boolean canSend(ItemStack itemStack) + { + return false; + } + + @Override + public boolean isMetadataSpecific(ItemStack itemStack) + { + return true; + } } diff --git a/src/main/java/mekanism/common/item/ItemBlockMachine.java b/src/main/java/mekanism/common/item/ItemBlockMachine.java index d4bd8695e..ef3cf39a7 100644 --- a/src/main/java/mekanism/common/item/ItemBlockMachine.java +++ b/src/main/java/mekanism/common/item/ItemBlockMachine.java @@ -187,6 +187,7 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, ISpec if(hasTank(itemstack) && type != MachineType.PORTABLE_TANK) { FluidStack fluidStack = getFluidStack(itemstack); + if(fluidStack != null) { list.add(EnumColor.PINK + LangUtils.localizeFluidStack(fluidStack) + ": " + EnumColor.GREY + getFluidStack(itemstack).amount + "mB"); diff --git a/src/main/java/mekanism/common/multiblock/UpdateProtocol.java b/src/main/java/mekanism/common/multiblock/UpdateProtocol.java index 3e7b1f286..8a4155656 100644 --- a/src/main/java/mekanism/common/multiblock/UpdateProtocol.java +++ b/src/main/java/mekanism/common/multiblock/UpdateProtocol.java @@ -369,7 +369,7 @@ public abstract class UpdateProtocol> protected void onStructureCreated(T structure, int origX, int origY, int origZ, int xmin, int xmax, int ymin, int ymax, int zmin, int zmax) {} - protected void onStructureDestroyed(T structure) {} + public void onStructureDestroyed(T structure) {} /** * Runs the protocol and updates all nodes that make a part of the multiblock. diff --git a/src/main/java/mekanism/common/tile/TileEntityInductionCasing.java b/src/main/java/mekanism/common/tile/TileEntityInductionCasing.java index 33323ec26..e7506188d 100644 --- a/src/main/java/mekanism/common/tile/TileEntityInductionCasing.java +++ b/src/main/java/mekanism/common/tile/TileEntityInductionCasing.java @@ -54,7 +54,7 @@ public class TileEntityInductionCasing extends TileEntityMultiblock> extends TileEntityContainerBlock implements IMultiblock { /** The multiblock data for this structure. */