From 15d239a6a9d57d0a51a8070cc301cf3356552892 Mon Sep 17 00:00:00 2001 From: SirSengir Date: Mon, 4 Jun 2012 22:45:16 +0200 Subject: [PATCH] Hopper now drops inventory contents when broken. Closes #46 --- .../src/buildcraft/core/BlockBuildCraft.java | 66 +++++++++++++++++++ .../src/buildcraft/factory/BlockHopper.java | 6 +- 2 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 common/net/minecraft/src/buildcraft/core/BlockBuildCraft.java diff --git a/common/net/minecraft/src/buildcraft/core/BlockBuildCraft.java b/common/net/minecraft/src/buildcraft/core/BlockBuildCraft.java new file mode 100644 index 00000000..87790185 --- /dev/null +++ b/common/net/minecraft/src/buildcraft/core/BlockBuildCraft.java @@ -0,0 +1,66 @@ +package net.minecraft.src.buildcraft.core; + +import java.util.Random; + +import net.minecraft.src.BlockContainer; +import net.minecraft.src.EntityItem; +import net.minecraft.src.IInventory; +import net.minecraft.src.ItemStack; +import net.minecraft.src.Material; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import net.minecraft.src.buildcraft.api.APIProxy; + +public abstract class BlockBuildCraft extends BlockContainer { + + protected static boolean keepInventory = false; + protected Random rand; + + protected BlockBuildCraft(int id, Material material) { + super(id, material); + this.rand = new Random(); + } + + @Override + public void onBlockRemoval(World world, int i, int j, int k) { + + if(APIProxy.isRemote()) + return; + + if(!keepInventory) { + + IInventory tile = (IInventory)world.getBlockTileEntity(i, j, k); + if(tile != null) + label0: + for(int l = 0; l < tile.getSizeInventory(); l++) { + + ItemStack itemstack = tile.getStackInSlot(l); + if(itemstack == null) + continue; + + float f = rand.nextFloat() * 0.8F + 0.1F; + float f1 = rand.nextFloat() * 0.8F + 0.1F; + float f2 = rand.nextFloat() * 0.8F + 0.1F; + + do { + if(itemstack.stackSize <= 0) + continue label0; + int i1 = rand.nextInt(21) + 10; + if(i1 > itemstack.stackSize) + i1 = itemstack.stackSize; + ItemStack drop = itemstack.splitStack(i1); + EntityItem entityitem = new EntityItem(world, i + f, j + f1, k + f2, drop); + float f3 = 0.05F; + entityitem.motionX = (float)rand.nextGaussian() * f3; + entityitem.motionY = (float)rand.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float)rand.nextGaussian() * f3; + world.spawnEntityInWorld(entityitem); + + } while(true); + } + } + super.onBlockRemoval(world, i, j, k); + } + + +} diff --git a/common/net/minecraft/src/buildcraft/factory/BlockHopper.java b/common/net/minecraft/src/buildcraft/factory/BlockHopper.java index 9d1855ec..a39387d7 100644 --- a/common/net/minecraft/src/buildcraft/factory/BlockHopper.java +++ b/common/net/minecraft/src/buildcraft/factory/BlockHopper.java @@ -4,17 +4,20 @@ import java.util.ArrayList; import net.minecraft.src.BlockContainer; import net.minecraft.src.BuildCraftCore; +import net.minecraft.src.EntityItem; import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; import net.minecraft.src.ItemStack; import net.minecraft.src.Material; import net.minecraft.src.TileEntity; import net.minecraft.src.World; import net.minecraft.src.mod_BuildCraftFactory; import net.minecraft.src.buildcraft.api.APIProxy; +import net.minecraft.src.buildcraft.core.BlockBuildCraft; import net.minecraft.src.buildcraft.core.GuiIds; import net.minecraft.src.buildcraft.core.IItemPipe; -public class BlockHopper extends BlockContainer{ +public class BlockHopper extends BlockBuildCraft { public BlockHopper(int blockId) { super(blockId, Material.iron); @@ -44,7 +47,6 @@ public class BlockHopper extends BlockContainer{ @Override public int getBlockTextureFromSide(int par1) { - // TODO Auto-generated method stub return 1; }