--- a/net/minecraft/server/commands/GiveCommand.java
+++ b/net/minecraft/server/commands/GiveCommand.java
@@ -51,6 +_,7 @@
 
     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 maxStackSize = itemStack.getMaxStackSize();
         int i = maxStackSize * 100;
         if (count > i) {
@@ -66,7 +_,7 @@
                     ItemStack itemStack1 = item.createItemStack(min, false);
                     boolean flag = serverPlayer.getInventory().add(itemStack1);
                     if (flag && itemStack1.isEmpty()) {
-                        ItemEntity itemEntity = serverPlayer.drop(itemStack, false);
+                        ItemEntity itemEntity = serverPlayer.drop(itemStack, false, false, false, null); // Paper - do not fire PlayerDropItemEvent for /give command
                         if (itemEntity != null) {
                             itemEntity.makeFakeItem();
                         }
@@ -84,7 +_,7 @@
                             );
                         serverPlayer.containerMenu.broadcastChanges();
                     } else {
-                        ItemEntity itemEntity = serverPlayer.drop(itemStack1, false);
+                        ItemEntity itemEntity = serverPlayer.drop(itemStack1, false, false, false, null); // Paper - do not fire PlayerDropItemEvent for /give command
                         if (itemEntity != null) {
                             itemEntity.setNoPickUpDelay();
                             itemEntity.setTarget(serverPlayer.getUUID());
@@ -95,11 +_,11 @@
 
             if (targets.size() == 1) {
                 source.sendSuccess(
-                    () -> Component.translatable("commands.give.success.single", count, itemStack.getDisplayName(), targets.iterator().next().getDisplayName()),
+                    () -> Component.translatable("commands.give.success.single", count, displayName, targets.iterator().next().getDisplayName()), // Paper - use cached display name
                     true
                 );
             } else {
-                source.sendSuccess(() -> Component.translatable("commands.give.success.single", count, itemStack.getDisplayName(), targets.size()), true);
+                source.sendSuccess(() -> Component.translatable("commands.give.success.single", count, displayName, targets.size()), true); // Paper - use cached display name
             }
 
             return targets.size();
