diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java index 2aa0b1515..5863bb51f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java @@ -65,11 +65,12 @@ public class TileEntityDropper extends TileEntityInventoryBase{ } private void doWork(){ - if(StackUtil.isValid(this.removeFromInventory(false))){ - ItemStack stack = this.removeFromInventory(true); - stack = StackUtil.setStackSize(stack, 1); + ItemStack theoreticalRemove = this.removeFromInventory(false); + if(StackUtil.isValid(theoreticalRemove)){ IBlockState state = this.world.getBlockState(this.pos); - WorldUtil.dropItemAtSide(WorldUtil.getDirectionByPistonRotation(state.getBlock().getMetaFromState(state)), this.world, this.pos, stack); + if(WorldUtil.dropItemAtSide(WorldUtil.getDirectionByPistonRotation(state.getBlock().getMetaFromState(state)), this.world, this.pos, StackUtil.setStackSize(theoreticalRemove.copy(), 1))){ + this.removeFromInventory(true); + } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 1c6edf728..e901c62ab 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -181,13 +181,17 @@ public final class WorldUtil{ return stack; } - public static void dropItemAtSide(EnumFacing side, World world, BlockPos pos, ItemStack stack){ + public static boolean dropItemAtSide(EnumFacing side, World world, BlockPos pos, ItemStack stack){ BlockPos coords = pos.offset(side); - EntityItem item = new EntityItem(world, coords.getX()+0.5, coords.getY()+0.5, coords.getZ()+0.5, stack); - item.motionX = 0; - item.motionY = 0; - item.motionZ = 0; - world.spawnEntity(item); + if(world.isBlockLoaded(coords)){ + EntityItem item = new EntityItem(world, coords.getX()+0.5, coords.getY()+0.5, coords.getZ()+0.5, stack); + item.motionX = 0; + item.motionY = 0; + item.motionZ = 0; + + return world.spawnEntity(item); + } + return false; } public static EnumFacing getDirectionBySidesInOrder(int side){