diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index b697378ee..4446d7a06 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -72,7 +72,7 @@ public class TileEntityBreaker extends TileEntityInventoryBase { @Override public boolean isItemValidForSlot(int i, ItemStack stack) { - return this.isPlacer; + return true; } private void doWork() { @@ -87,10 +87,9 @@ public class TileEntityBreaker extends TileEntityInventoryBase { float chance = WorldUtil.fireFakeHarvestEventsForDropChance(drops, world, breakCoords); if (chance > 0 && world.rand.nextFloat() <= chance) { - if (WorldUtil.addToInventory(slots, drops, false)) { - this.world.playEvent(2001, breakCoords, Block.getStateId(stateToBreak)); - this.world.setBlockToAir(breakCoords); - WorldUtil.addToInventory(slots, drops, true); + if (StackUtil.canAddAll(slots, drops)) { + world.destroyBlock(breakCoords, false); + StackUtil.addAll(slots, drops); this.markDirty(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StackUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StackUtil.java index 37888d9db..a1bc2364f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StackUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StackUtil.java @@ -11,11 +11,13 @@ package de.ellpeck.actuallyadditions.mod.util; import java.util.Collection; +import java.util.List; import de.ellpeck.actuallyadditions.api.misc.IDisableableItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; +import net.minecraftforge.items.IItemHandler; public final class StackUtil{ @@ -101,6 +103,31 @@ public final class StackUtil{ else for(ItemStack s : stacks) if (!s.isEmpty()) return false; return true; } + + public static boolean canAddAll(IItemHandler inv, List stacks) { + + int slotMax = inv.getSlots(); + int counter = 0; + + for(ItemStack s : stacks) { + for(int i = 0; i < slotMax; i++) { + s = inv.insertItem(i, s, true); + if(s.isEmpty()) break; + } + if(s.isEmpty()) counter++; + } + return counter == stacks.size(); + } + + public static void addAll(IItemHandler inv, List stacks) { + int slotMax = inv.getSlots(); + for(ItemStack s : stacks) { + for(int i = 0; i < slotMax; i++) { + s = inv.insertItem(i, s, false); + if(s.isEmpty()) break; + } + } + } }