Skip to content

Commit 7a4251e

Browse files
committed
Add ItemModifierAddEvent
1 parent 40af07b commit 7a4251e

File tree

2 files changed

+79
-2
lines changed

2 files changed

+79
-2
lines changed

papyrus-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
--- a/net/minecraft/world/entity/LivingEntity.java
22
+++ b/net/minecraft/world/entity/LivingEntity.java
3-
@@ -11,6 +_,8 @@
3+
@@ -11,6 +_,9 @@
44
import com.mojang.serialization.DataResult;
55
import com.mojang.serialization.Dynamic;
66
import com.mojang.serialization.JavaOps;
77
+import de.erethon.papyrus.CraftPDamageType;
8+
+import de.erethon.papyrus.events.ItemModifierAddEvent;
89
+import io.papermc.paper.event.entity.EntityKnockbackEvent;
910
import it.unimi.dsi.fastutil.doubles.DoubleDoubleImmutablePair;
1011
import it.unimi.dsi.fastutil.objects.Reference2ObjectArrayMap;
1112
import it.unimi.dsi.fastutil.objects.Reference2ObjectMap;
12-
@@ -138,17 +_,16 @@
13+
@@ -137,18 +_,18 @@
14+
import net.minecraft.world.scores.Scoreboard;
1315
import net.minecraft.world.waypoints.Waypoint;
1416
import net.minecraft.world.waypoints.WaypointTransmitter;
17+
+import org.bukkit.craftbukkit.attribute.CraftAttributeInstance;
1518
import org.jetbrains.annotations.Contract;
1619
+import org.bukkit.Bukkit;
1720
+import org.bukkit.craftbukkit.damage.CraftDamageSource;
@@ -216,3 +219,18 @@
216219

217220
public float applyItemBlocking(ServerLevel level, DamageSource damageSource, float damageAmount) {
218221
// Paper start
222+
@@ -3418,7 +_,13 @@
223+
AttributeInstance instance = this.attributes.getInstance(holder);
224+
if (instance != null) {
225+
instance.removeModifier(attributeModifier.id());
226+
- instance.addTransientModifier(attributeModifier);
227+
+ // Papyrus start - Add modifier event
228+
+ ItemModifierAddEvent event = new ItemModifierAddEvent(getBukkitLivingEntity(), CraftItemStack.asCraftMirror(itemBySlot), CraftAttributeInstance.convert(attributeModifier));
229+
+ event.callEvent();
230+
+ if (!event.isCancelled()) {
231+
+ instance.addTransientModifier(CraftAttributeInstance.convert(event.getAttributeModifier()));
232+
+ }
233+
+ // Papyrus end
234+
}
235+
});
236+
if (this.level() instanceof ServerLevel serverLevel) {
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package de.erethon.papyrus.events;
2+
3+
import org.bukkit.attribute.AttributeModifier;
4+
import org.bukkit.entity.LivingEntity;
5+
import org.bukkit.event.Cancellable;
6+
import org.bukkit.event.Event;
7+
import org.bukkit.event.HandlerList;
8+
import org.bukkit.inventory.ItemStack;
9+
10+
public class ItemModifierAddEvent extends Event implements Cancellable {
11+
12+
private static final HandlerList handlers = new HandlerList();
13+
14+
private LivingEntity living;
15+
private ItemStack stack;
16+
private AttributeModifier modifier;
17+
private boolean cancelled = false;
18+
19+
public ItemModifierAddEvent(LivingEntity living, ItemStack stack, AttributeModifier modifier) {
20+
this.living = living;
21+
this.stack = stack;
22+
this.modifier = modifier;
23+
}
24+
25+
public LivingEntity getLivingEntity() {
26+
return living;
27+
}
28+
29+
public ItemStack getItemStack() {
30+
return stack;
31+
}
32+
33+
public AttributeModifier getAttributeModifier() {
34+
return modifier;
35+
}
36+
37+
public void setAttributeModifier(AttributeModifier modifier) {
38+
this.modifier = modifier;
39+
}
40+
41+
@Override
42+
public HandlerList getHandlers() {
43+
return handlers;
44+
}
45+
46+
public static HandlerList getHandlerList() {
47+
return handlers;
48+
}
49+
50+
@Override
51+
public boolean isCancelled() {
52+
return cancelled;
53+
}
54+
55+
@Override
56+
public void setCancelled(boolean cancel) {
57+
cancelled = cancel;
58+
}
59+
}

0 commit comments

Comments
 (0)