geforkt von Mirrors/Paper
d8847bc1f3
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: fde5602a PR-927: Add PlayerRecipeBookSettingsChangeEvent 949ff217 PR-930: Add methods to get/set evoker fang attack delay f6f7c79d SPIGOT-7514, PR-929: Add "Enchantment Roll" API to enchant items according to Minecraft mechanics d40e22da PR-712: Add API to get full result of crafting items CraftBukkit Changes: c8feb0629 PR-1291: Improve precondition message in Entity#playEffect 482c56a00 PR-1285: Add PlayerRecipeBookSettingsChangeEvent cdf798800 PR-1290: Add methods to get/set evoker fang attack delay 2c1b5f78f SPIGOT-7514, PR-1289: Add "Enchantment Roll" API to enchant items according to Minecraft mechanics 6aa644ae9 PR-992: Add API to get full result of crafting items ffb1319bc PR-1287: Fix scoreboards not updating in Player#setStatistic
64 Zeilen
3.8 KiB
Diff
64 Zeilen
3.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com>
|
|
Date: Tue, 23 May 2023 22:33:36 -0400
|
|
Subject: [PATCH] Properly Cancel Usable Items
|
|
|
|
This fixes the bug causing cancelling PlayerInteractEvent to cause items to continue to be used despite being cancelled on the server.
|
|
|
|
For example, items being consumed but never finishing, shields being put up, etc.
|
|
The underlying issue of this is that the client modifies their synced data values, and so we have to (forcibly) resend
|
|
them in order for the client to reset their using item state.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
|
index 4b1af7bba3ce10a1247bb61535456510e18da2d9..76cef8f2861af8fcb88b4dad294a8853dd3f3e01 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
|
@@ -562,6 +562,7 @@ public class ServerPlayerGameMode {
|
|
}
|
|
// Paper end - extend Player Interact cancellation
|
|
player.getBukkitEntity().updateInventory(); // SPIGOT-2867
|
|
+ this.player.resyncUsingItem(this.player); // Paper - Resend player's using item status
|
|
enuminteractionresult = (event.useItemInHand() != Event.Result.ALLOW) ? InteractionResult.SUCCESS : InteractionResult.PASS;
|
|
} else if (this.gameModeForPlayer == GameType.SPECTATOR) {
|
|
MenuProvider itileinventory = iblockdata.getMenuProvider(world, blockposition);
|
|
@@ -605,6 +606,11 @@ public class ServerPlayerGameMode {
|
|
|
|
return enuminteractionresult1;
|
|
}
|
|
+ // Paper start - Cancel only if cancelled + if the interact result is different from default response
|
|
+ else if (this.interactResult && this.interactResult != cancelledItem) {
|
|
+ this.player.resyncUsingItem(this.player);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
return enuminteractionresult;
|
|
// CraftBukkit end
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
index dc50f0c4514cc239a4639a03e4edbda5c258b867..8b0bcaa4239a0966cf7b7676525c1ab69c25f534 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
@@ -1924,6 +1924,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
|
}
|
|
|
|
if (cancelled) {
|
|
+ this.player.resyncUsingItem(this.player); // Paper - Resend player's using item status
|
|
this.player.getBukkitEntity().updateInventory(); // SPIGOT-2524
|
|
return;
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
index 371f6d2539eac7161a86bb64763b4ee228eccbdf..6d4d46163ffcffa98f400c2656703eb5c4818f40 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
@@ -3811,6 +3811,11 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
|
return ((Byte) this.entityData.get(LivingEntity.DATA_LIVING_ENTITY_FLAGS) & 2) > 0 ? InteractionHand.OFF_HAND : InteractionHand.MAIN_HAND;
|
|
}
|
|
|
|
+ // Paper start
|
|
+ public void resyncUsingItem(ServerPlayer serverPlayer) {
|
|
+ this.getEntityData().resendPossiblyDesyncedDataValues(java.util.List.of(DATA_LIVING_ENTITY_FLAGS), serverPlayer);
|
|
+ }
|
|
+ // Paper end
|
|
private void updatingUsingItem() {
|
|
if (this.isUsingItem()) {
|
|
if (ItemStack.isSameItem(this.getItemInHand(this.getUsedItemHand()), this.useItem)) {
|