From 54c12f56529b0dadf6a5d47a4a7272c84b776f7c Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Tue, 8 Aug 2017 10:09:10 +0200 Subject: [PATCH] Fixed Shulker Box dupe bug with Destructor, fixes #1402 --- CHANGELOG.md | 1 + .../network/node/NetworkNodeDestructor.java | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dcae6ccb8..3cfee9dcf 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - Added InventoryTweaks Grid sorting (cooliojazz) - Added CTM integration for Disk Manipulator (raoulvdberge) - Fixed possible rare dupe bug with Importer (raoulvdberge) +- Fixed Shulker Box dupe bug with Destructor (raoulvdberge) ### 1.5.14 - Updated Forge to 2426 (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeDestructor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeDestructor.java index 68baa9294..84593e1fd 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeDestructor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeDestructor.java @@ -14,12 +14,15 @@ import com.raoulvdberge.refinedstorage.tile.config.IType; import com.raoulvdberge.refinedstorage.util.StackUtils; import net.minecraft.block.Block; import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockShulkerBox; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityShulkerBox; import net.minecraft.util.NonNullList; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -104,7 +107,18 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I if (!frontStack.isEmpty()) { if (IFilterable.canTake(itemFilters, mode, compare, frontStack) && frontBlockState.getBlockHardness(world, front) != -1.0) { NonNullList drops = NonNullList.create(); - if (upgrades.hasUpgrade(ItemUpgrade.TYPE_SILK_TOUCH) && frontBlock.canSilkHarvest(world, front, frontBlockState, null)) { + + if (frontBlock instanceof BlockShulkerBox) { + drops.add(((BlockShulkerBox) frontBlock).getItem(world, front, frontBlockState)); + + TileEntity shulkerBoxTile = world.getTileEntity(front); + + if (shulkerBoxTile instanceof TileEntityShulkerBox) { + // Avoid dropping the shulker box when Block#breakBlock is called + ((TileEntityShulkerBox) shulkerBoxTile).setDestroyedByCreativePlayer(true); + ((TileEntityShulkerBox) shulkerBoxTile).clear(); + } + } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_SILK_TOUCH) && frontBlock.canSilkHarvest(world, front, frontBlockState, null)) { drops.add(frontStack); } else { frontBlock.getDrops(drops, world, front, frontBlockState, upgrades.getFortuneLevel());