|
| 1 | +From f60650b7056a03f2bfea85d285ce8d982f4bafce Mon Sep 17 00:00:00 2001 |
| 2 | + |
| 3 | +Date: Wed, 21 Sep 2022 01:18:03 +0200 |
| 4 | +Subject: [PATCH] Backport EntityPickupItemEvent |
| 5 | + |
| 6 | + |
| 7 | +diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java |
| 8 | +index f9129b71f..6ef9663fc 100644 |
| 9 | +--- a/src/main/java/net/minecraft/server/EntityInsentient.java |
| 10 | ++++ b/src/main/java/net/minecraft/server/EntityInsentient.java |
| 11 | +@@ -400,7 +400,11 @@ public abstract class EntityInsentient extends EntityLiving { |
| 12 | + } |
| 13 | + } |
| 14 | + |
| 15 | +- if (flag && this.a(itemstack)) { |
| 16 | ++ // Titanium start - Backport EntityPickupItemEvent |
| 17 | ++ boolean canPickup = flag && this.a(itemstack); |
| 18 | ++ canPickup = !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPickupItemEvent(this, entityitem, 0, !canPickup).isCancelled(); |
| 19 | ++ if (canPickup) { |
| 20 | ++ // Titanium end |
| 21 | + if (itemstack1 != null && this.random.nextFloat() - 0.1F < this.dropChances[i]) { |
| 22 | + this.a(itemstack1, 0.0F); |
| 23 | + } |
| 24 | +diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java |
| 25 | +index 8e1692bf8..4366f79de 100644 |
| 26 | +--- a/src/main/java/net/minecraft/server/EntityItem.java |
| 27 | ++++ b/src/main/java/net/minecraft/server/EntityItem.java |
| 28 | +@@ -3,6 +3,7 @@ package net.minecraft.server; |
| 29 | + import java.util.Iterator; |
| 30 | + import org.apache.logging.log4j.LogManager; |
| 31 | + import org.apache.logging.log4j.Logger; |
| 32 | ++import org.bukkit.event.entity.EntityPickupItemEvent; |
| 33 | + import org.bukkit.event.player.PlayerPickupItemEvent; // CraftBukkit |
| 34 | + import net.techcable.tacospigot.HopperPusher; // TacoSpigot |
| 35 | + |
| 36 | +@@ -321,15 +322,35 @@ public class EntityItem extends Entity implements HopperPusher { |
| 37 | + |
| 38 | + if (this.pickupDelay <= 0 && canHold > 0) { |
| 39 | + itemstack.count = canHold; |
| 40 | +- PlayerPickupItemEvent event = new PlayerPickupItemEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), (org.bukkit.entity.Item) this.getBukkitEntity(), remaining); |
| 41 | ++ // Titanium start - backport EntityPickupItemEvent |
| 42 | ++ PlayerPickupItemEvent playerEvent = new PlayerPickupItemEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), (org.bukkit.entity.Item) this.getBukkitEntity(), remaining); |
| 43 | + // event.setCancelled(!entityhuman.canPickUpLoot); TODO |
| 44 | +- this.world.getServer().getPluginManager().callEvent(event); |
| 45 | +- itemstack.count = canHold + remaining; |
| 46 | ++ this.world.getServer().getPluginManager().callEvent(playerEvent); |
| 47 | ++ //itemstack.count = canHold + remaining; // Titanium - moved down |
| 48 | + |
| 49 | +- if (event.isCancelled()) { |
| 50 | ++ if (playerEvent.isCancelled()) { |
| 51 | ++ itemstack.count = i; // SPIGOT-5294 - restore count |
| 52 | + return; |
| 53 | + } |
| 54 | + |
| 55 | ++ // Call newer event afterwards |
| 56 | ++ EntityPickupItemEvent entityEvent = new EntityPickupItemEvent(entityhuman.getBukkitEntity(), (org.bukkit.entity.Item) this.getBukkitEntity(), remaining); |
| 57 | ++ //entityEvent.setCancelled(!entityhuman.canPickUpLoot); TODO |
| 58 | ++ this.world.getServer().getPluginManager().callEvent(entityEvent); |
| 59 | ++ if (entityEvent.isCancelled()) { |
| 60 | ++ itemstack.count = i; // SPIGOT-5294 - restore count |
| 61 | ++ return; |
| 62 | ++ } |
| 63 | ++ |
| 64 | ++ // Update the ItemStack if it was changed in the event |
| 65 | ++ ItemStack current = this.getItemStack(); |
| 66 | ++ if (!itemstack.equals(current)) { |
| 67 | ++ itemstack = current; |
| 68 | ++ } else { |
| 69 | ++ itemstack.count = canHold + remaining; // Titanium - moved down |
| 70 | ++ } |
| 71 | ++ // Titanium end |
| 72 | ++ |
| 73 | + // Possibly < 0; fix here so we do not have to modify code below |
| 74 | + this.pickupDelay = 0; |
| 75 | + } |
| 76 | +diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java |
| 77 | +index 72d21f366..0e220ae4d 100644 |
| 78 | +--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java |
| 79 | ++++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java |
| 80 | +@@ -146,7 +146,8 @@ public class CraftEventFactory { |
| 81 | + return event; |
| 82 | + } |
| 83 | + |
| 84 | +- // Titanium start - Backport EntityPlaceEvent |
| 85 | ++ // Titanium start - Backport event |
| 86 | ++ // EntityPlaceEvent |
| 87 | + public static EntityPlaceEvent callEntityPlaceEvent(World world, BlockPosition clickPosition, EnumDirection clickedFace, EntityHuman human, Entity entity) { |
| 88 | + Player who = (human == null) ? null : (Player) human.getBukkitEntity(); |
| 89 | + |
| 90 | +@@ -163,6 +164,14 @@ public class CraftEventFactory { |
| 91 | + |
| 92 | + return event; |
| 93 | + } |
| 94 | ++ |
| 95 | ++ // EntityPickupItemEvent |
| 96 | ++ public static EntityPickupItemEvent callEntityPickupItemEvent(Entity who, EntityItem item, int remaining, boolean cancelled) { |
| 97 | ++ EntityPickupItemEvent event = new EntityPickupItemEvent((LivingEntity) who.getBukkitEntity(), (org.bukkit.entity.Item) item.getBukkitEntity(), remaining); |
| 98 | ++ event.setCancelled(cancelled); |
| 99 | ++ Bukkit.getPluginManager().callEvent(event); |
| 100 | ++ return event; |
| 101 | ++ } |
| 102 | + // Titanium end |
| 103 | + |
| 104 | + /** |
| 105 | +-- |
| 106 | +2.36.0.windows.1 |
| 107 | + |
0 commit comments