geforkt von Mirrors/Paper
62 Zeilen
3.6 KiB
Diff
62 Zeilen
3.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
Date: Sun, 20 Jun 2021 21:55:59 -0700
|
|
Subject: [PATCH] Fix PlayerDropItemEvent using wrong item
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/commands/GiveCommand.java b/src/main/java/net/minecraft/server/commands/GiveCommand.java
|
|
index c81fd3e1108fb0a02f9240263404af2b968c8494..0d9de4c61c7b26a6ff37c12fde629161fd0c3d5a 100644
|
|
--- a/src/main/java/net/minecraft/server/commands/GiveCommand.java
|
|
+++ b/src/main/java/net/minecraft/server/commands/GiveCommand.java
|
|
@@ -38,6 +38,7 @@ public class GiveCommand {
|
|
|
|
private static int giveItem(CommandSourceStack source, ItemInput item, Collection<ServerPlayer> targets, int count) throws CommandSyntaxException {
|
|
ItemStack itemstack = item.createItemStack(1, false);
|
|
+ final Component displayName = itemstack.getDisplayName(); // Paper - get display name early
|
|
int j = itemstack.getMaxStackSize();
|
|
int k = j * 100;
|
|
|
|
@@ -79,11 +80,11 @@ public class GiveCommand {
|
|
|
|
if (targets.size() == 1) {
|
|
source.sendSuccess(() -> {
|
|
- return Component.translatable("commands.give.success.single", count, itemstack.getDisplayName(), ((ServerPlayer) targets.iterator().next()).getDisplayName());
|
|
+ return Component.translatable("commands.give.success.single", count, displayName, ((ServerPlayer) targets.iterator().next()).getDisplayName()); // Paper - use cached display name
|
|
}, true);
|
|
} else {
|
|
source.sendSuccess(() -> {
|
|
- return Component.translatable("commands.give.success.single", count, itemstack.getDisplayName(), targets.size());
|
|
+ return Component.translatable("commands.give.success.single", count, displayName, targets.size()); // Paper - use cached display name
|
|
}, true);
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
|
index 50c6b668a8e915081007dfd9c9fc1aae179e16c9..a9130dd3097c31d91baaf1405a369881393d42d5 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
|
@@ -2424,7 +2424,7 @@ public class ServerPlayer extends Player {
|
|
|
|
if (retainOwnership) {
|
|
if (!itemstack1.isEmpty()) {
|
|
- this.awardStat(Stats.ITEM_DROPPED.get(itemstack1.getItem()), stack.getCount());
|
|
+ this.awardStat(Stats.ITEM_DROPPED.get(itemstack1.getItem()), itemstack1.getCount()); // Paper - Fix PlayerDropItemEvent using wrong item
|
|
}
|
|
|
|
this.awardStat(Stats.DROP);
|
|
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
|
|
index 1f4351c1701465a3b5dfcb8d61aa5035956bbd42..44e2a0f36359ab914c9328b633dd8a360591751d 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
|
|
@@ -726,6 +726,11 @@ public abstract class Player extends LivingEntity {
|
|
}
|
|
|
|
double d0 = this.getEyeY() - 0.30000001192092896D;
|
|
+ // Paper start
|
|
+ ItemStack tmp = itemstack.copy();
|
|
+ itemstack.setCount(0);
|
|
+ itemstack = tmp;
|
|
+ // Paper end
|
|
ItemEntity entityitem = new ItemEntity(this.level(), this.getX(), d0, this.getZ(), itemstack);
|
|
|
|
entityitem.setPickUpDelay(40);
|