From 7f1fba678e5f891414c35a2495a1537f77e3b139 Mon Sep 17 00:00:00 2001 From: Tom Erik Date: Tue, 5 Apr 2016 17:49:00 +0200 Subject: [PATCH] Added ItemBlock to store energy when controller is broken. modified: src/main/java/refinedstorage/block/BlockController.java new file: src/main/java/refinedstorage/item/ItemBlockController.java modified: src/main/java/refinedstorage/tile/TileBase.java modified: src/main/java/refinedstorage/tile/TileController.java --- .../refinedstorage/block/BlockController.java | 56 +++++++++++-------- .../item/ItemBlockController.java | 46 +++++++++++++++ .../java/refinedstorage/tile/TileBase.java | 1 + .../refinedstorage/tile/TileController.java | 4 +- 4 files changed, 84 insertions(+), 23 deletions(-) create mode 100644 src/main/java/refinedstorage/item/ItemBlockController.java diff --git a/src/main/java/refinedstorage/block/BlockController.java b/src/main/java/refinedstorage/block/BlockController.java index f331cf9b7..4ed554fe2 100755 --- a/src/main/java/refinedstorage/block/BlockController.java +++ b/src/main/java/refinedstorage/block/BlockController.java @@ -14,6 +14,7 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Enchantments; import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.stats.StatList; @@ -25,8 +26,10 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageGui; import refinedstorage.item.ItemBlockBase; +import refinedstorage.item.ItemBlockController; import refinedstorage.tile.TileController; import java.util.ArrayList; @@ -44,7 +47,7 @@ public class BlockController extends BlockBase { @Override public void getSubBlocks(Item item, CreativeTabs tab, List subItems) { for (int i = 0; i <= 1; i++) { - subItems.add(new ItemStack(item, 1, i)); + subItems.add(ItemBlockController.initNBT(new ItemStack(item, 1, i))); } } @@ -99,27 +102,20 @@ public class BlockController extends BlockBase { super.breakBlock(world,pos,state); } - //Unless making a ItemBlock this seems to be the only solution to store NBT on the dropped stack - // any function called after this like get drops will not be able to get the tile - public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te, ItemStack stack) - { - player.addStat(StatList.func_188055_a(this)); - player.addExhaustion(0.025F); - - harvesters.set(player); - int i = EnchantmentHelper.getEnchantmentLevel(Enchantments.fortune, stack); - if ((te instanceof TileController)) { - TileController controller = (TileController) te; - ItemStack item = new ItemStack(getItemDropped(state, null, 0), 1, damageDropped(state)); - NBTTagCompound tag = new NBTTagCompound(); - controller.writeItemToNBT(tag); - item.setTagCompound(tag); - if (!worldIn.isRemote && !worldIn.restoringBlockSnapshots) - { - spawnAsEntity(worldIn, pos, item); - } + @Override + public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) { + if (willHarvest) { + return true; } - harvesters.set(null); + + return super.removedByPlayer(state, world, pos, player, willHarvest); + } + + @Override + public void harvestBlock(World world, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity tile, ItemStack stack) { + super.harvestBlock(world, player, pos, state, tile, stack); + + world.setBlockToAir(pos); } @Override @@ -138,6 +134,22 @@ public class BlockController extends BlockBase { } } + @Override + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) { + List drops = new ArrayList(); + + ItemStack stack = new ItemStack(RefinedStorageBlocks.CONTROLLER, 1, RefinedStorageBlocks.CONTROLLER.getMetaFromState(state)); + + NBTTagCompound tag = new NBTTagCompound(); + ((TileController) world.getTileEntity(pos)).writeItemToNBT(tag); + stack.setTagCompound(tag); + + drops.add(stack); + + return drops; + } + + @Override public boolean hasComparatorInputOverride(IBlockState state) { return true; @@ -150,7 +162,7 @@ public class BlockController extends BlockBase { @Override public Item createItemForBlock() { - return new ItemBlockBase(this, true); + return new ItemBlockController(); } diff --git a/src/main/java/refinedstorage/item/ItemBlockController.java b/src/main/java/refinedstorage/item/ItemBlockController.java new file mode 100644 index 000000000..e1fc3897f --- /dev/null +++ b/src/main/java/refinedstorage/item/ItemBlockController.java @@ -0,0 +1,46 @@ +package refinedstorage.item; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import refinedstorage.RefinedStorageBlocks; +import refinedstorage.block.EnumStorageType; +import refinedstorage.tile.TileController; + +import java.util.List; + +/** + * Created by zyberwax on 05.04.2016. + */ +public class ItemBlockController extends ItemBlockBase { + public ItemBlockController() { + super(RefinedStorageBlocks.CONTROLLER, true); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) { + + if (stack.getTagCompound() != null && stack.getTagCompound().hasKey(TileController.NBT_ENERGY)) { + NBTTagCompound tag = stack.getTagCompound(); + + int energyStored = tag.getInteger(TileController.NBT_ENERGY); + int capacity = TileController.ENERGY_CAPACITY; + int percent = (int)((float)energyStored / (capacity) * 100); + + //TODO: Format numbers ? + list.add("RF: " + energyStored + "/" + capacity + "(" + percent + "%)"); + } + } + + @Override + public void onCreated(ItemStack stack, World world, EntityPlayer player) { + super.onCreated(stack, world, player); + + initNBT(stack); + } + + public static ItemStack initNBT(ItemStack stack) { + return stack; + } +} diff --git a/src/main/java/refinedstorage/tile/TileBase.java b/src/main/java/refinedstorage/tile/TileBase.java index fb8f4c042..50ec68ee6 100755 --- a/src/main/java/refinedstorage/tile/TileBase.java +++ b/src/main/java/refinedstorage/tile/TileBase.java @@ -20,6 +20,7 @@ import refinedstorage.network.MessageTileUpdate; public abstract class TileBase extends TileEntity implements ITickable { public static final String NBT_DIRECTION = "Direction"; + public static final String NBT_ENERGY = "Energy"; public static final int UPDATE_RANGE = 32; diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index d8fc88cba..92b604a77 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -45,6 +45,8 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor public int z; } + public static final int ENERGY_CAPACITY = 32000; + private List itemGroups = new ArrayList(); private List storages = new ArrayList(); private List wirelessGridConsumers = new ArrayList(); @@ -57,7 +59,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor private List visited = new ArrayList(); - private EnergyStorage energy = new EnergyStorage(32000); + private EnergyStorage energy = new EnergyStorage(ENERGY_CAPACITY); private int energyUsage; private boolean destroyed = false;