PaperMC/Spigot-Server-Patches/0375-Prevent-consuming-the-wrong-itemstack.patch
Aikar a70924789b
[Auto] Updated Upstream (CraftBukkit)
Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
6917945f0 SPIGOT-6289: Fix setting entity equipment
2020-12-22 16:02:19 -05:00

45 lines
2.3 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: kickash32 <kickash32@gmail.com>
Date: Mon, 19 Aug 2019 19:42:35 +0500
Subject: [PATCH] Prevent consuming the wrong itemstack
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index a68d9d709a7413f40f927c20bd53311b558d9541..dbd212fc2f0c95ab1dcc4b6be86f0f87ac726fa7 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
@@ -3101,10 +3101,13 @@ public abstract class EntityLiving extends Entity {
this.datawatcher.set(EntityLiving.ag, (byte) j);
}
- public void c(EnumHand enumhand) {
+ // Paper start -- OBFHELPER and forwarder to method with forceUpdate parameter
+ public void c(EnumHand enumhand) { this.updateActiveItem(enumhand, false); }
+ public void updateActiveItem(EnumHand enumhand, boolean forceUpdate) {
+ // Paper end
ItemStack itemstack = this.b(enumhand);
- if (!itemstack.isEmpty() && !this.isHandRaised()) {
+ if (!itemstack.isEmpty() && !this.isHandRaised() || forceUpdate) { // Paper use override flag
this.activeItem = itemstack;
this.bd = itemstack.k();
if (!this.world.isClientSide) {
@@ -3182,6 +3185,7 @@ public abstract class EntityLiving extends Entity {
this.releaseActiveItem();
} else {
if (!this.activeItem.isEmpty() && this.isHandRaised()) {
+ this.updateActiveItem(this.getRaisedHand(), true); // Paper
this.b(this.activeItem, 16);
// CraftBukkit start - fire PlayerItemConsumeEvent
ItemStack itemstack;
@@ -3216,8 +3220,8 @@ public abstract class EntityLiving extends Entity {
}
this.clearActiveItem();
- // Paper start - if the replacement is anything but the default, update the client inventory
- if (this instanceof EntityPlayer && !com.google.common.base.Objects.equal(defaultReplacement, itemstack)) {
+ // Paper start
+ if (this instanceof EntityPlayer) {
((EntityPlayer) this).getBukkitEntity().updateInventory();
}
// Paper end