diff --git a/Spigot-Server-Patches/API-to-get-a-BlockState-without-a-snapshot.patch b/Spigot-Server-Patches/API-to-get-a-BlockState-without-a-snapshot.patch index 1fcef2100f..48bfa5c710 100644 --- a/Spigot-Server-Patches/API-to-get-a-BlockState-without-a-snapshot.patch +++ b/Spigot-Server-Patches/API-to-get-a-BlockState-without-a-snapshot.patch @@ -39,7 +39,7 @@ index 6021a3401f..536fd37254 100644 return null; } diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -index d6e4adf147..8cb08c5584 100644 +index c48b394d52..7ccfa93b94 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java @@ -0,0 +0,0 @@ public class CraftBlock implements Block { diff --git a/Spigot-Server-Patches/ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch b/Spigot-Server-Patches/ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch index 851afa85cd..598555a1f2 100644 --- a/Spigot-Server-Patches/ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch +++ b/Spigot-Server-Patches/ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch @@ -186,7 +186,7 @@ index 4a128f707b..b870964674 100644 // CraftBukkit end } diff --git a/src/main/java/net/minecraft/server/PlayerInteractManager.java b/src/main/java/net/minecraft/server/PlayerInteractManager.java -index f455317eb6..55e45f84ca 100644 +index 54ee305eba..6e524353b5 100644 --- a/src/main/java/net/minecraft/server/PlayerInteractManager.java +++ b/src/main/java/net/minecraft/server/PlayerInteractManager.java @@ -0,0 +0,0 @@ public class PlayerInteractManager { diff --git a/Spigot-Server-Patches/Extend-Player-Interact-cancellation.patch b/Spigot-Server-Patches/Extend-Player-Interact-cancellation.patch index 13983854c1..f69c1a655b 100644 --- a/Spigot-Server-Patches/Extend-Player-Interact-cancellation.patch +++ b/Spigot-Server-Patches/Extend-Player-Interact-cancellation.patch @@ -13,64 +13,21 @@ Update adjacent blocks of doors, double plants, pistons and beds when cancelling interaction. diff --git a/src/main/java/net/minecraft/server/PlayerInteractManager.java b/src/main/java/net/minecraft/server/PlayerInteractManager.java -index 55e45f84ca..e83b4fb4b0 100644 +index 6e524353b5..4a439ef4ca 100644 --- a/src/main/java/net/minecraft/server/PlayerInteractManager.java +++ b/src/main/java/net/minecraft/server/PlayerInteractManager.java @@ -0,0 +0,0 @@ public class PlayerInteractManager { if (event.isCancelled()) { // Let the client know the block still exists ((EntityPlayer) this.player).playerConnection.sendPacket(new PacketPlayOutBlockChange(this.world, blockposition)); -+ cancelBreakBlock(blockposition, this.world.getType(blockposition)); // Paper - Avoid visual issues on the client ++ // Paper start - brute force neighbor blocks for any attached blocks ++ for (EnumDirection dir : EnumDirection.values()) { ++ ((EntityPlayer) this.player).playerConnection.sendPacket(new PacketPlayOutBlockChange(world, blockposition.shift(dir))); ++ } ++ // Paper end // Update any tile entity data for this block TileEntity tileentity = this.world.getTileEntity(blockposition); if (tileentity != null) { -@@ -0,0 +0,0 @@ public class PlayerInteractManager { - return flag; - } - -+ // Paper start - Extra method to avoid visual issues on the client when cancelling block breaks -+ private void cancelBreakBlock(BlockPosition position, IBlockData data) { -+ Block block = data.getBlock(); -+ // Send other half of the door -+ if (block instanceof BlockDoor) { -+ boolean bottom = data.get(BlockDoor.HALF) == BlockPropertyDoubleBlockHalf.LOWER; -+ this.player.playerConnection.sendPacket(new PacketPlayOutBlockChange(world, bottom ? position.up() : position.down())); -+ } else if (block instanceof BlockTallPlant) { -+ boolean bottom = data.get(BlockTallPlant.HALF) == BlockPropertyDoubleBlockHalf.LOWER; -+ this.player.playerConnection.sendPacket(new PacketPlayOutBlockChange(world, bottom ? position.up() : position.down())); -+ } else if (block instanceof BlockPistonExtension) { -+ BlockPosition piston = position.shift(data.get(BlockPistonExtension.FACING).opposite()); -+ this.player.playerConnection.sendPacket(new PacketPlayOutBlockChange(world, piston)); -+ } else if (block instanceof BlockBed) { -+ // Restore other half of bed -+ boolean foot = data.get(BlockBed.PART) == BlockPropertyBedPart.FOOT; -+ BlockPosition otherBlock = position.shift(foot ? data.get(BlockBed.FACING) : data.get(BlockBed.FACING).opposite()); -+ this.player.playerConnection.sendPacket(new PacketPlayOutBlockChange(world, otherBlock)); -+ -+ TileEntity tileentity = this.world.getTileEntity(otherBlock); -+ if (tileentity != null) { -+ this.player.playerConnection.sendPacket(tileentity.getUpdatePacket()); -+ } -+ } -+ } -+ // Paper end -+ - public boolean breakBlock(BlockPosition blockposition) { - IBlockData iblockdata = this.world.getType(blockposition); - // CraftBukkit start - fire BlockBreakEvent -@@ -0,0 +0,0 @@ public class PlayerInteractManager { - } - // Let the client know the block still exists - ((EntityPlayer) this.player).playerConnection.sendPacket(new PacketPlayOutBlockChange(this.world, blockposition)); -- // Send other half of the door -- if (nmsBlock instanceof BlockDoor) { -- boolean bottom = nmsData.get(BlockDoor.HALF) == BlockPropertyDoubleBlockHalf.LOWER; -- ((EntityPlayer) this.player).playerConnection.sendPacket(new PacketPlayOutBlockChange(world, bottom ? blockposition.up() : blockposition.down())); -- } -+ cancelBreakBlock(blockposition, nmsData); // Paper - Move cancellation code to extra "cancelBreakBlock" method - // Update any tile entity data for this block - TileEntity tileentity = this.world.getTileEntity(blockposition); - if (tileentity != null) { @@ -0,0 +0,0 @@ public class PlayerInteractManager { ((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutBlockChange(world, bottom ? blockposition.up() : blockposition.down())); } else if (iblockdata.getBlock() instanceof BlockCake) { diff --git a/Spigot-Server-Patches/Handle-Item-Meta-Inconsistencies.patch b/Spigot-Server-Patches/Handle-Item-Meta-Inconsistencies.patch index b8c0c2c61d..9ffca0588b 100644 --- a/Spigot-Server-Patches/Handle-Item-Meta-Inconsistencies.patch +++ b/Spigot-Server-Patches/Handle-Item-Meta-Inconsistencies.patch @@ -18,7 +18,7 @@ For consistency, the old API methods now forward to use the ItemMeta API equivalents, and should deprecate the old API's. diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index e7b5daf28e..6e7b2e721d 100644 +index 0c54eaa529..c7ef9c6890 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -0,0 +0,0 @@ import com.mojang.brigadier.StringReader; @@ -204,7 +204,7 @@ index f4672b9a48..e2699564af 100644 static Map getEnchantments(net.minecraft.server.ItemStack item) { diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java -index f10de8550c..f21c1e846d 100644 +index 5464923759..94b19d1095 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java @@ -0,0 +0,0 @@ import java.lang.reflect.Constructor; diff --git a/Spigot-Server-Patches/ItemStack-getMaxItemUseDuration.patch b/Spigot-Server-Patches/ItemStack-getMaxItemUseDuration.patch index 472925579a..5723b389fb 100644 --- a/Spigot-Server-Patches/ItemStack-getMaxItemUseDuration.patch +++ b/Spigot-Server-Patches/ItemStack-getMaxItemUseDuration.patch @@ -6,7 +6,7 @@ Subject: [PATCH] ItemStack#getMaxItemUseDuration Allows you to determine how long it takes to use a usable/consumable item diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index 33e82f5377..0952bf0b82 100644 +index 4f230975aa..e52014fd8f 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -0,0 +0,0 @@ public final class ItemStack { diff --git a/Spigot-Server-Patches/MC-Utils.patch b/Spigot-Server-Patches/MC-Utils.patch index 3796fae0c5..b37cf5e7e9 100644 --- a/Spigot-Server-Patches/MC-Utils.patch +++ b/Spigot-Server-Patches/MC-Utils.patch @@ -54,7 +54,7 @@ index 9f3aa24590..7dbea90902 100644 return this.c(MathHelper.floor(d0), MathHelper.floor(d1), MathHelper.floor(d2)); } diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 411ab6061b..cd4fbee0ca 100644 +index 03c96de98b..2d06202da7 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -0,0 +0,0 @@ import com.google.common.collect.Lists; // CraftBukkit @@ -131,7 +131,7 @@ index ca2a14d7ac..9a513b4e3a 100644 private boolean c = true; private boolean d = true; diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index 0d26fc56dd..e7b5daf28e 100644 +index 359979cc1c..0c54eaa529 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -0,0 +0,0 @@ import org.bukkit.TreeType; diff --git a/work/Bukkit b/work/Bukkit index 4e075fb1f1..14527e6623 160000 --- a/work/Bukkit +++ b/work/Bukkit @@ -1 +1 @@ -Subproject commit 4e075fb1f1d195a006579b6d29023cdd9f47d29b +Subproject commit 14527e6623aa40fa6fbb74013cb16e8a6bfff737 diff --git a/work/CraftBukkit b/work/CraftBukkit index 2f17f677aa..69970127c1 160000 --- a/work/CraftBukkit +++ b/work/CraftBukkit @@ -1 +1 @@ -Subproject commit 2f17f677aae3db7e10ee61a676aa9aee01c30ecb +Subproject commit 69970127c11e52c579cc17d4ce263a344735940a