mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-27 11:27:35 +01:00
4bc15f13aa
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 Bukkit Changes: e2160a18 Make MapCursor#type not depends on deprecated values CraftBukkit Changes: 6ce172642 SPIGOT-7761: Ender pearl does not damage or spawn endermites f5a63f734 SPIGOT-7759: Chunk not there when requested in ChunkUnloadEvent 28287259c Remove unused import eb9a7dde0 SPIGOT-7757: Cannot set item in Stonecutter Inventory f8be9d752 Move deserialized removed unhandled tags to dedicated removedTags a7e576186 Fix potential mutability issue with CraftMetaItem copy constructor 995885452 SPIGOT-7741: Vanilla ItemComponent in commands can't remove components 9ef69aa0b PR-1284: Move ItemType <-> ItemMeta linking to a centralized place 3e82eafbe PR-1420: Fix DirectEntity and CausingEntity Damager for Creepers ignited by Player c23daa71f SPIGOT-7751: Fix crash caused by arrows from trial spawners Make MapCursor#type not depends on deprecated values SPIGOT-7761: Ender pearl does not damage or spawn endermites
37 lines
2.0 KiB
Diff
37 lines
2.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Bjarne Koll <lynxplay101@gmail.com>
|
|
Date: Tue, 10 Jan 2023 21:06:42 +0100
|
|
Subject: [PATCH] Correctly shrink items during EntityResurrectEvent
|
|
|
|
The EntityResurrectEvent logic is supposed to locate a totem of undying
|
|
in any of the interaction slots of the player inventory and then, if the
|
|
called EntityResurrectEvent is not cancelled, shrink that item by 1,
|
|
usually reducing it to zero.
|
|
|
|
For this, the logic iterates over the items in the interaction slots and
|
|
breaks out the loop if a totem of undying was found.
|
|
However, even if no totem of undying was found, the iteration item stack
|
|
variable remains as a refernce to the last interaction slot probed.
|
|
|
|
Plugins uncancelling a EntityResurrectEvent, which is published
|
|
pre-cancelled to listeners if no totem of undying could be found,
|
|
would hence cause the server logic to shrink completely unrelated items
|
|
found in, at the writing of this patch, the players off hand slot.
|
|
|
|
This patch corrects this behaviour by only shrinking the item if a totem
|
|
of undying was found and the event was called uncancelled.
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
index c64fb799f2f40831cd25a409713c9b5081c76002..8ec08a30875816d2b8258b56ee37a4938aed50fb 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
@@ -1621,7 +1621,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
|
this.level().getCraftServer().getPluginManager().callEvent(event);
|
|
|
|
if (!event.isCancelled()) {
|
|
- if (!itemstack1.isEmpty()) {
|
|
+ if (!itemstack1.isEmpty() && itemstack != null) { // Paper - only reduce item if actual totem was found
|
|
itemstack1.shrink(1);
|
|
}
|
|
if (itemstack != null && this instanceof ServerPlayer) {
|