Paper/Spigot-Server-Patches/0224-Fix-Recipe-Books.patch
2017-07-28 00:04:01 -04:00

85 Zeilen
4.5 KiB
Diff

From 3f62fddb4eedc5054286eaa7036099424d66ee03 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Wed, 26 Jul 2017 21:12:15 -0400
Subject: [PATCH] Fix Recipe Books
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index 682211cdd..5b9021939 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -2027,12 +2027,6 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
public void a(PacketPlayInAutoRecipe packetplayinautorecipe) {
PlayerConnectionUtils.ensureMainThread(packetplayinautorecipe, this, this.player.x());
this.player.resetIdleTimer();
- // CraftBukkit start
- if (!player.getBukkitEntity().hasPermission("minecraft.autocraft")) {
- player.getBukkitEntity().updateInventory();
- return;
- }
- // CraftBukkit end
if (this.player.activeContainer.windowId == packetplayinautorecipe.a() && this.player.activeContainer.c(this.player)) {
this.player.playerConnection.sendPacket(new PacketPlayOutTransaction(packetplayinautorecipe.a(), packetplayinautorecipe.b(), true));
Iterator iterator;
@@ -2046,7 +2040,11 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
while (iterator.hasNext()) {
packetplayinautorecipe_a = (PacketPlayInAutoRecipe.a) iterator.next();
itemstack = this.player.activeContainer.getSlot(packetplayinautorecipe_a.b).getItem();
- if (this.a(packetplayinautorecipe_a.a, itemstack)) {
+ // Paper start - improve validation
+ ItemStack to = this.player.inventory.getItem(packetplayinautorecipe_a.c);
+ ItemStack ref = packetplayinautorecipe_a.a;
+ if (this.a(ref, itemstack) && (to.isEmpty() || this.a(ref, to)) && (ref.getCount() + to.getCount() <= ref.getMaxStackSize())) {
+ // Paper end
i = packetplayinautorecipe_a.a.getCount();
if (packetplayinautorecipe_a.c == -1) {
this.player.drop(packetplayinautorecipe_a.a, true);
@@ -2066,6 +2064,12 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
itemstack.subtract(i);
}
}
+ // Paper start
+ else {
+ this.player.getBukkitEntity().updateInventory();
+ return;
+ }
+ // Paper end
}
}
@@ -2075,7 +2079,11 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
while (iterator.hasNext()) {
packetplayinautorecipe_a = (PacketPlayInAutoRecipe.a) iterator.next();
itemstack = this.player.inventory.getItem(packetplayinautorecipe_a.c);
- if (this.a(packetplayinautorecipe_a.a, itemstack)) {
+ // Paper start
+ ItemStack ref = packetplayinautorecipe_a.a;
+ ItemStack to = this.player.activeContainer.getSlot(packetplayinautorecipe_a.b).getItem();
+ if (this.a(ref, itemstack) && (ref.getCount() + to.getCount() <= ref.getMaxStackSize())) {
+ // Paper end
i = packetplayinautorecipe_a.a.getCount();
if (itemstack.getCount() == i) {
this.player.inventory.splitWithoutUpdate(packetplayinautorecipe_a.c);
@@ -2083,8 +2091,17 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
itemstack.subtract(i);
}
- this.player.activeContainer.b(packetplayinautorecipe_a.b, packetplayinautorecipe_a.a);
+ // Paper start
+ if (to.isEmpty()) {
+ this.player.activeContainer.b(packetplayinautorecipe_a.b, packetplayinautorecipe_a.a);
+ } else {
+ to.add(i);
+ }
+ } else {
+ this.player.getBukkitEntity().updateInventory();
+ return;
}
+ // Paper end
}
}
--
2.13.0