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
This commit is contained in:
		| @@ -14,6 +14,7 @@ import net.minecraft.entity.item.EntityItem; | |||||||
| import net.minecraft.entity.player.EntityPlayer; | import net.minecraft.entity.player.EntityPlayer; | ||||||
| import net.minecraft.init.Enchantments; | import net.minecraft.init.Enchantments; | ||||||
| import net.minecraft.item.Item; | import net.minecraft.item.Item; | ||||||
|  | import net.minecraft.item.ItemBlock; | ||||||
| import net.minecraft.item.ItemStack; | import net.minecraft.item.ItemStack; | ||||||
| import net.minecraft.nbt.NBTTagCompound; | import net.minecraft.nbt.NBTTagCompound; | ||||||
| import net.minecraft.stats.StatList; | import net.minecraft.stats.StatList; | ||||||
| @@ -25,8 +26,10 @@ import net.minecraft.util.math.RayTraceResult; | |||||||
| import net.minecraft.world.IBlockAccess; | import net.minecraft.world.IBlockAccess; | ||||||
| import net.minecraft.world.World; | import net.minecraft.world.World; | ||||||
| import refinedstorage.RefinedStorage; | import refinedstorage.RefinedStorage; | ||||||
|  | import refinedstorage.RefinedStorageBlocks; | ||||||
| import refinedstorage.RefinedStorageGui; | import refinedstorage.RefinedStorageGui; | ||||||
| import refinedstorage.item.ItemBlockBase; | import refinedstorage.item.ItemBlockBase; | ||||||
|  | import refinedstorage.item.ItemBlockController; | ||||||
| import refinedstorage.tile.TileController; | import refinedstorage.tile.TileController; | ||||||
|  |  | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| @@ -44,7 +47,7 @@ public class BlockController extends BlockBase { | |||||||
|     @Override |     @Override | ||||||
|     public void getSubBlocks(Item item, CreativeTabs tab, List subItems) { |     public void getSubBlocks(Item item, CreativeTabs tab, List subItems) { | ||||||
|         for (int i = 0; i <= 1; i++) { |         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); |         super.breakBlock(world,pos,state); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     //Unless making a ItemBlock this seems to be the only solution to store NBT on the dropped stack |     @Override | ||||||
|     // any function called after this like get drops will not be able to get the tile |     public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) { | ||||||
|     public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te, ItemStack stack) |         if (willHarvest) { | ||||||
|     { |             return true; | ||||||
|         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); |  | ||||||
|             } |  | ||||||
|         } |         } | ||||||
|         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 |     @Override | ||||||
| @@ -138,6 +134,22 @@ public class BlockController extends BlockBase { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public List<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) { | ||||||
|  |         List<ItemStack> drops = new ArrayList<ItemStack>(); | ||||||
|  |  | ||||||
|  |         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 |     @Override | ||||||
|     public boolean hasComparatorInputOverride(IBlockState state) { |     public boolean hasComparatorInputOverride(IBlockState state) { | ||||||
|         return true; |         return true; | ||||||
| @@ -150,7 +162,7 @@ public class BlockController extends BlockBase { | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Item createItemForBlock() { |     public Item createItemForBlock() { | ||||||
|         return new ItemBlockBase(this, true); |         return new ItemBlockController(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										46
									
								
								src/main/java/refinedstorage/item/ItemBlockController.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								src/main/java/refinedstorage/item/ItemBlockController.java
									
									
									
									
									
										Normal file
									
								
							| @@ -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; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -20,6 +20,7 @@ import refinedstorage.network.MessageTileUpdate; | |||||||
|  |  | ||||||
| public abstract class TileBase extends TileEntity implements ITickable { | public abstract class TileBase extends TileEntity implements ITickable { | ||||||
|     public static final String NBT_DIRECTION = "Direction"; |     public static final String NBT_DIRECTION = "Direction"; | ||||||
|  |     public static final String NBT_ENERGY = "Energy"; | ||||||
|  |  | ||||||
|     public static final int UPDATE_RANGE = 32; |     public static final int UPDATE_RANGE = 32; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -45,6 +45,8 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor | |||||||
|         public int z; |         public int z; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public static final int ENERGY_CAPACITY = 32000; | ||||||
|  |  | ||||||
|     private List<ItemGroup> itemGroups = new ArrayList<ItemGroup>(); |     private List<ItemGroup> itemGroups = new ArrayList<ItemGroup>(); | ||||||
|     private List<IStorage> storages = new ArrayList<IStorage>(); |     private List<IStorage> storages = new ArrayList<IStorage>(); | ||||||
|     private List<WirelessGridConsumer> wirelessGridConsumers = new ArrayList<WirelessGridConsumer>(); |     private List<WirelessGridConsumer> wirelessGridConsumers = new ArrayList<WirelessGridConsumer>(); | ||||||
| @@ -57,7 +59,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor | |||||||
|  |  | ||||||
|     private List<BlockPos> visited = new ArrayList<BlockPos>(); |     private List<BlockPos> visited = new ArrayList<BlockPos>(); | ||||||
|  |  | ||||||
|     private EnergyStorage energy = new EnergyStorage(32000); |     private EnergyStorage energy = new EnergyStorage(ENERGY_CAPACITY); | ||||||
|     private int energyUsage; |     private int energyUsage; | ||||||
|  |  | ||||||
|     private boolean destroyed = false; |     private boolean destroyed = false; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Tom Erik
					Tom Erik