--- a/net/minecraft/server/BlockShulkerBox.java +++ b/net/minecraft/server/BlockShulkerBox.java @@ -81,7 +81,31 @@ super.a(world, blockposition, iblockdata, entityhuman); } - public void dropNaturally(IBlockData iblockdata, World world, BlockPosition blockposition, float f, int i) {} + // CraftBukkit start - override to prevent duplication when dropping + @Override + public void dropNaturally(IBlockData iblockdata, World world, BlockPosition blockposition, float f, int i) { + if (true) { + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityShulkerBox) { + TileEntityShulkerBox tileentityshulkerbox = (TileEntityShulkerBox) tileentity; + + if (!tileentityshulkerbox.s() && tileentityshulkerbox.G()) { + ItemStack itemstack = new ItemStack(this); + + itemstack.getOrCreateTag().set("BlockEntityTag", ((TileEntityShulkerBox) tileentity).g(new NBTTagCompound())); + if (tileentityshulkerbox.hasCustomName()) { + itemstack.a(tileentityshulkerbox.getCustomName()); + tileentityshulkerbox.setCustomName((IChatBaseComponent) null); + } + + a(world, blockposition, itemstack); + } + } + world.updateAdjacentComparators(blockposition, iblockdata.getBlock()); + } + } + // CraftBukkit end public void postPlace(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving, ItemStack itemstack) { if (itemstack.hasName()) { @@ -98,7 +122,7 @@ if (iblockdata.getBlock() != iblockdata1.getBlock()) { TileEntity tileentity = world.getTileEntity(blockposition); - if (tileentity instanceof TileEntityShulkerBox) { + if (false && tileentity instanceof TileEntityShulkerBox) { // CraftBukkit - moved up TileEntityShulkerBox tileentityshulkerbox = (TileEntityShulkerBox) tileentity; if (!tileentityshulkerbox.s() && tileentityshulkerbox.G()) { @@ -113,8 +137,8 @@ a(world, blockposition, itemstack); } - world.updateAdjacentComparators(blockposition, iblockdata.getBlock()); } + world.updateAdjacentComparators(blockposition, iblockdata.getBlock()); // CraftBukkit - moved down super.remove(iblockdata, world, blockposition, iblockdata1, flag); }