From 00c64f7fb7635663bfb27a1c31eb129068ffa42e Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 11 Jul 2017 23:23:17 -0400 Subject: [PATCH] Fix Anvil Level sync to client https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/763827668e6e5cddc111f3c93a0d718fec21ff51 Was done incorrectly and is now causing level desyncs to client. Always send current level to the client, and instead make setWindowProperty set the level. --- .../0222-Fix-Anvil-Level-sync-to-client.patch | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Spigot-Server-Patches/0222-Fix-Anvil-Level-sync-to-client.patch diff --git a/Spigot-Server-Patches/0222-Fix-Anvil-Level-sync-to-client.patch b/Spigot-Server-Patches/0222-Fix-Anvil-Level-sync-to-client.patch new file mode 100644 index 0000000000..a647c26c0b --- /dev/null +++ b/Spigot-Server-Patches/0222-Fix-Anvil-Level-sync-to-client.patch @@ -0,0 +1,46 @@ +From 47043a09799165938f5ebee4b3b18fc99ec22aea Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Tue, 11 Jul 2017 23:17:57 -0400 +Subject: [PATCH] Fix Anvil Level sync to client + +https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/763827668e6e5cddc111f3c93a0d718fec21ff51 + +Was done incorrectly and is now causing level desyncs to client. + +Always send current level to the client, and instead make setWindowProperty set the level. + +diff --git a/src/main/java/net/minecraft/server/ContainerAnvil.java b/src/main/java/net/minecraft/server/ContainerAnvil.java +index 04f117ace..e3897a3f7 100644 +--- a/src/main/java/net/minecraft/server/ContainerAnvil.java ++++ b/src/main/java/net/minecraft/server/ContainerAnvil.java +@@ -376,9 +376,9 @@ public class ContainerAnvil extends Container { + for (int i = 0; i < this.listeners.size(); ++i) { + ICrafting icrafting = (ICrafting) this.listeners.get(i); + +- if (this.lastLevelCost != this.levelCost) { ++ //if (this.lastLevelCost != this.levelCost) { // Paper - this was the wrong solution to this, fixing it correctly in CraftPlayer + icrafting.setContainerData(this, 0, this.levelCost); +- } ++ //} // Paper + } + + this.lastLevelCost = this.levelCost; +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +index 28e00da32..f42bd0ced 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +@@ -1252,6 +1252,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + if (container.getBukkitView().getType() != prop.getType()) { + return false; + } ++ // Paper start ++ if (prop == Property.REPAIR_COST && container instanceof net.minecraft.server.ContainerAnvil) { ++ ((ContainerAnvil) container).levelCost = value; ++ } ++ // Paper end + getHandle().setContainerData(container, prop.getId(), value); + return true; + } +-- +2.13.0 +