Skip to content
This repository was archived by the owner on Dec 29, 2023. It is now read-only.

Commit 9ccfc54

Browse files
committed
Backport EntityPickupItemEvent
1 parent 7c64370 commit 9ccfc54

File tree

2 files changed

+216
-0
lines changed

2 files changed

+216
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
From 8a08433b5cad8a8490252dbc104fb0ffaf0c0c98 Mon Sep 17 00:00:00 2001
2+
From: Peridot <[email protected]>
3+
Date: Wed, 21 Sep 2022 01:18:09 +0200
4+
Subject: [PATCH] Backport EntityPickupItemEvent
5+
6+
7+
diff --git a/src/main/java/org/bukkit/event/entity/EntityPickupItemEvent.java b/src/main/java/org/bukkit/event/entity/EntityPickupItemEvent.java
8+
new file mode 100644
9+
index 00000000..88d9deb7
10+
--- /dev/null
11+
+++ b/src/main/java/org/bukkit/event/entity/EntityPickupItemEvent.java
12+
@@ -0,0 +1,71 @@
13+
+package org.bukkit.event.entity;
14+
+
15+
+import org.bukkit.entity.Item;
16+
+import org.bukkit.entity.LivingEntity;
17+
+import org.bukkit.event.Cancellable;
18+
+import org.bukkit.event.HandlerList;
19+
+import org.jetbrains.annotations.NotNull;
20+
+
21+
+/**
22+
+ * Thrown when a entity picks an item up from the ground
23+
+ */
24+
+public class EntityPickupItemEvent extends EntityEvent implements Cancellable {
25+
+
26+
+ private static final HandlerList handlers = new HandlerList();
27+
+ private final Item item;
28+
+ private boolean cancel = false;
29+
+ private final int remaining;
30+
+
31+
+ public EntityPickupItemEvent(@NotNull final LivingEntity entity, @NotNull final Item item, final int remaining) {
32+
+ super(entity);
33+
+ this.item = item;
34+
+ this.remaining = remaining;
35+
+ }
36+
+
37+
+ @NotNull
38+
+ @Override
39+
+ public LivingEntity getEntity() {
40+
+ return (LivingEntity) entity;
41+
+ }
42+
+
43+
+ /**
44+
+ * Gets the Item picked up by the entity.
45+
+ *
46+
+ * @return Item
47+
+ */
48+
+ @NotNull
49+
+ public Item getItem() {
50+
+ return item;
51+
+ }
52+
+
53+
+ /**
54+
+ * Gets the amount remaining on the ground, if any
55+
+ *
56+
+ * @return amount remaining on the ground
57+
+ */
58+
+ public int getRemaining() {
59+
+ return remaining;
60+
+ }
61+
+
62+
+ @Override
63+
+ public boolean isCancelled() {
64+
+ return cancel;
65+
+ }
66+
+
67+
+ @Override
68+
+ public void setCancelled(boolean cancel) {
69+
+ this.cancel = cancel;
70+
+ }
71+
+
72+
+ @NotNull
73+
+ @Override
74+
+ public HandlerList getHandlers() {
75+
+ return handlers;
76+
+ }
77+
+
78+
+ @NotNull
79+
+ public static HandlerList getHandlerList() {
80+
+ return handlers;
81+
+ }
82+
+
83+
+}
84+
diff --git a/src/main/java/org/bukkit/event/player/PlayerPickupItemEvent.java b/src/main/java/org/bukkit/event/player/PlayerPickupItemEvent.java
85+
index dfba8163..15dc46fe 100644
86+
--- a/src/main/java/org/bukkit/event/player/PlayerPickupItemEvent.java
87+
+++ b/src/main/java/org/bukkit/event/player/PlayerPickupItemEvent.java
88+
@@ -1,13 +1,18 @@
89+
package org.bukkit.event.player;
90+
91+
+import org.bukkit.Warning;
92+
import org.bukkit.entity.Item;
93+
import org.bukkit.entity.Player;
94+
import org.bukkit.event.Cancellable;
95+
import org.bukkit.event.HandlerList;
96+
+import org.bukkit.event.entity.EntityPickupItemEvent;
97+
98+
/**
99+
* Thrown when a player picks an item up from the ground
100+
+ * @deprecated {@link EntityPickupItemEvent}
101+
*/
102+
+@Deprecated // Titanium - make deprecated
103+
+@Warning(false)
104+
public class PlayerPickupItemEvent extends PlayerEvent implements Cancellable {
105+
private static final HandlerList handlers = new HandlerList();
106+
private final Item item;
107+
--
108+
2.36.0.windows.1
109+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
From f60650b7056a03f2bfea85d285ce8d982f4bafce Mon Sep 17 00:00:00 2001
2+
From: Peridot <[email protected]>
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

Comments
 (0)