From a3ade6667e3204f556bb6fc4e2d2634e74107f3d Mon Sep 17 00:00:00 2001 From: Tom Erik Date: Tue, 5 Apr 2016 15:26:15 +0200 Subject: [PATCH 1/5] Store Energy in item when ccontrolelr is broken modified: src/main/java/refinedstorage/block/BlockController.java modified: src/main/java/refinedstorage/tile/TileController.java --- .../refinedstorage/block/BlockController.java | 76 ++++++++++++++++++- .../refinedstorage/tile/TileController.java | 20 +++++ 2 files changed, 95 insertions(+), 1 deletion(-) diff --git a/src/main/java/refinedstorage/block/BlockController.java b/src/main/java/refinedstorage/block/BlockController.java index 2f8e9d75e..d7cf352fe 100755 --- a/src/main/java/refinedstorage/block/BlockController.java +++ b/src/main/java/refinedstorage/block/BlockController.java @@ -1,18 +1,27 @@ package refinedstorage.block; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.EntityLivingBase; +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.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.stats.StatList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import refinedstorage.RefinedStorage; @@ -20,7 +29,9 @@ import refinedstorage.RefinedStorageGui; import refinedstorage.item.ItemBlockBase; import refinedstorage.tile.TileController; +import java.util.ArrayList; import java.util.List; +import java.util.Random; public class BlockController extends BlockBase { public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumControllerType.class); @@ -85,7 +96,68 @@ public class BlockController extends BlockBase { public void breakBlock(World world, BlockPos pos, IBlockState state) { ((TileController) world.getTileEntity(pos)).onDestroyed(); - super.breakBlock(world, pos, state); + 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); + + if (this.canSilkHarvest(worldIn, pos, state, player) && EnchantmentHelper.getEnchantmentLevel(Enchantments.silkTouch, stack) > 0) + { + java.util.List items = new java.util.ArrayList(); + ItemStack itemstack = this.createStackedBlock(state); + + if (itemstack != null) + { + items.add(itemstack); + } + + net.minecraftforge.event.ForgeEventFactory.fireBlockHarvesting(items, worldIn, pos, state, 0, 1.0f, true, player); + for (ItemStack item : items) + { + spawnAsEntity(worldIn, pos, item); + } + } + else + { + harvesters.set(player); + int i = EnchantmentHelper.getEnchantmentLevel(Enchantments.fortune, stack); + if ((te instanceof TileController)) { + List ls = new ArrayList(); + + 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); + } + } + //this.dropBlockAsItem(worldIn, pos, state, i); + harvesters.set(null); + } + } + + @Override + public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack itemStack) { + super.onBlockPlacedBy(world, pos, state, player, itemStack); + + NBTTagCompound tag = itemStack.getTagCompound(); + if(tag != null) + { + TileEntity tile = world.getTileEntity(pos); + if(tile instanceof TileController) + { + TileController controller = (TileController)tile; + controller.readItemFromNBT(tag); + } + } } @Override @@ -102,4 +174,6 @@ public class BlockController extends BlockBase { public Item createItemForBlock() { return new ItemBlockBase(this, true); } + + } diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index ebb1a3c89..d8fc88cba 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -36,6 +36,7 @@ import refinedstorage.util.InventoryUtils; import java.util.*; public class TileController extends TileBase implements IEnergyReceiver, INetworkTile, IRedstoneModeConfig { + public class ClientSideMachine { public ItemStack stack; public int energyUsage; @@ -379,6 +380,20 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor nbt.setInteger(RedstoneMode.NBT, redstoneMode.id); } + public void readItemFromNBT(NBTTagCompound nbt) { + energy.readFromNBT(nbt); + + if (nbt.hasKey(RedstoneMode.NBT)) { + redstoneMode = RedstoneMode.getById(nbt.getInteger(RedstoneMode.NBT)); + } + } + + public void writeItemToNBT(NBTTagCompound nbt) { + energy.writeToNBT(nbt); + + nbt.setInteger(RedstoneMode.NBT, redstoneMode.id); + } + @Override public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate) { return energy.receiveEnergy(maxReceive, simulate); @@ -580,4 +595,9 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor drainEnergyFromWirelessGrid(player, ItemWirelessGrid.USAGE_PUSH); } } + + public void setEnergyStored(int energyStored) { + if (energyStored > 0) this.energy.setEnergyStored(energyStored); + } + } From 5733a553a2f664b469de51ed0a64ccf27096e458 Mon Sep 17 00:00:00 2001 From: tomevoll Date: Tue, 5 Apr 2016 15:39:57 +0200 Subject: [PATCH 2/5] Update BlockController.java Can try it like this, just edited on the webpage editor so not tested, but since the controller dont have a inventory to drop there should not be a need to use a list and drop inventory content, above should work for silktouch and not silk --- .../refinedstorage/block/BlockController.java | 42 +++++-------------- 1 file changed, 10 insertions(+), 32 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockController.java b/src/main/java/refinedstorage/block/BlockController.java index d7cf352fe..f331cf9b7 100755 --- a/src/main/java/refinedstorage/block/BlockController.java +++ b/src/main/java/refinedstorage/block/BlockController.java @@ -106,42 +106,20 @@ public class BlockController extends BlockBase { player.addStat(StatList.func_188055_a(this)); player.addExhaustion(0.025F); - if (this.canSilkHarvest(worldIn, pos, state, player) && EnchantmentHelper.getEnchantmentLevel(Enchantments.silkTouch, stack) > 0) - { - java.util.List items = new java.util.ArrayList(); - ItemStack itemstack = this.createStackedBlock(state); - - if (itemstack != null) - { - items.add(itemstack); - } - - net.minecraftforge.event.ForgeEventFactory.fireBlockHarvesting(items, worldIn, pos, state, 0, 1.0f, true, player); - for (ItemStack item : items) + 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); } } - else - { - harvesters.set(player); - int i = EnchantmentHelper.getEnchantmentLevel(Enchantments.fortune, stack); - if ((te instanceof TileController)) { - List ls = new ArrayList(); - - 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); - } - } - //this.dropBlockAsItem(worldIn, pos, state, i); - harvesters.set(null); - } + harvesters.set(null); } @Override From 7f1fba678e5f891414c35a2495a1537f77e3b139 Mon Sep 17 00:00:00 2001 From: Tom Erik Date: Tue, 5 Apr 2016 17:49:00 +0200 Subject: [PATCH 3/5] 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; From e094ceaf1027c7fb3506d948bf6fdb3a7b53ba00 Mon Sep 17 00:00:00 2001 From: Tom Erik Date: Tue, 5 Apr 2016 18:39:20 +0200 Subject: [PATCH 4/5] Removed unused function, cleaned up NBT read write --- .../refinedstorage/tile/TileController.java | 32 ++++++++----------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 92b604a77..c4a60514c 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -365,7 +365,15 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); + readNBT(nbt); + } + public void readItemFromNBT(NBTTagCompound nbt) { + readNBT(nbt); + } + + private void readNBT(NBTTagCompound nbt) + { energy.readFromNBT(nbt); if (nbt.hasKey(RedstoneMode.NBT)) { @@ -376,23 +384,16 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - - energy.writeToNBT(nbt); - - nbt.setInteger(RedstoneMode.NBT, redstoneMode.id); - } - - public void readItemFromNBT(NBTTagCompound nbt) { - energy.readFromNBT(nbt); - - if (nbt.hasKey(RedstoneMode.NBT)) { - redstoneMode = RedstoneMode.getById(nbt.getInteger(RedstoneMode.NBT)); - } + writeNBT(nbt); } public void writeItemToNBT(NBTTagCompound nbt) { - energy.writeToNBT(nbt); + writeNBT(nbt); + } + private void writeNBT(NBTTagCompound nbt) + { + energy.writeToNBT(nbt); nbt.setInteger(RedstoneMode.NBT, redstoneMode.id); } @@ -597,9 +598,4 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor drainEnergyFromWirelessGrid(player, ItemWirelessGrid.USAGE_PUSH); } } - - public void setEnergyStored(int energyStored) { - if (energyStored > 0) this.energy.setEnergyStored(energyStored); - } - } From fd069c9a3e4d8a5e576f685a4cd465f85f7268a8 Mon Sep 17 00:00:00 2001 From: Tom Erik Date: Tue, 5 Apr 2016 19:05:22 +0200 Subject: [PATCH 5/5] Removed wrietItemNBT and readItemNBT, always show energy stored. modified: src/main/java/refinedstorage/block/BlockController.java modified: src/main/java/refinedstorage/item/ItemBlockController.java modified: src/main/java/refinedstorage/tile/TileController.java --- .../refinedstorage/block/BlockController.java | 4 +-- .../item/ItemBlockController.java | 29 ++++++++++++++----- .../refinedstorage/tile/TileController.java | 14 ++------- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockController.java b/src/main/java/refinedstorage/block/BlockController.java index 4ed554fe2..d4c231802 100755 --- a/src/main/java/refinedstorage/block/BlockController.java +++ b/src/main/java/refinedstorage/block/BlockController.java @@ -129,7 +129,7 @@ public class BlockController extends BlockBase { if(tile instanceof TileController) { TileController controller = (TileController)tile; - controller.readItemFromNBT(tag); + controller.readNBT(tag); } } } @@ -141,7 +141,7 @@ public class BlockController extends BlockBase { ItemStack stack = new ItemStack(RefinedStorageBlocks.CONTROLLER, 1, RefinedStorageBlocks.CONTROLLER.getMetaFromState(state)); NBTTagCompound tag = new NBTTagCompound(); - ((TileController) world.getTileEntity(pos)).writeItemToNBT(tag); + ((TileController) world.getTileEntity(pos)).writeNBT(tag); stack.setTagCompound(tag); drops.add(stack); diff --git a/src/main/java/refinedstorage/item/ItemBlockController.java b/src/main/java/refinedstorage/item/ItemBlockController.java index e1fc3897f..b6ed5b3f8 100644 --- a/src/main/java/refinedstorage/item/ItemBlockController.java +++ b/src/main/java/refinedstorage/item/ItemBlockController.java @@ -5,6 +5,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import refinedstorage.RefinedStorageBlocks; +import refinedstorage.block.EnumControllerType; import refinedstorage.block.EnumStorageType; import refinedstorage.tile.TileController; @@ -20,17 +21,25 @@ public class ItemBlockController extends ItemBlockBase { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) { + EnumControllerType type = EnumControllerType.values()[stack.getMetadata()]; - if (stack.getTagCompound() != null && stack.getTagCompound().hasKey(TileController.NBT_ENERGY)) { + int energyStored = 0; + int capacity = TileController.ENERGY_CAPACITY; + int percent = 0; + + if(type == EnumControllerType.CREATIVE) { + energyStored = capacity; + percent = 100; + } + else 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 + "%)"); + energyStored = tag.getInteger(TileController.NBT_ENERGY); + percent = (int)((float)energyStored / (capacity) * 100); } + //TODO: Format numbers ? + list.add("RF: " + energyStored + "/" + capacity + " (" + percent + "%)"); + } @Override @@ -41,6 +50,12 @@ public class ItemBlockController extends ItemBlockBase { } public static ItemStack initNBT(ItemStack stack) { + EnumControllerType type = EnumControllerType.values()[stack.getMetadata()]; + NBTTagCompound tag = stack.getTagCompound(); + if(tag == null) tag = new NBTTagCompound(); + + tag.setInteger(TileController.NBT_ENERGY, type == EnumControllerType.CREATIVE ? TileController.ENERGY_CAPACITY : 0); + return stack; } } diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index c4a60514c..9ab8eceba 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -368,12 +368,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor readNBT(nbt); } - public void readItemFromNBT(NBTTagCompound nbt) { - readNBT(nbt); - } - - private void readNBT(NBTTagCompound nbt) - { + public void readNBT(NBTTagCompound nbt) { energy.readFromNBT(nbt); if (nbt.hasKey(RedstoneMode.NBT)) { @@ -387,12 +382,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor writeNBT(nbt); } - public void writeItemToNBT(NBTTagCompound nbt) { - writeNBT(nbt); - } - - private void writeNBT(NBTTagCompound nbt) - { + public void writeNBT(NBTTagCompound nbt) { energy.writeToNBT(nbt); nbt.setInteger(RedstoneMode.NBT, redstoneMode.id); }