Skip to content

Commit 90b9914

Browse files
committed
Make SpellEffect events cancellable
1 parent 7a4251e commit 90b9914

File tree

3 files changed

+48
-14
lines changed

3 files changed

+48
-14
lines changed

papyrus-api/src/main/java/de/erethon/spellbook/api/SpellCaster.java

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,16 @@ default void tick() {
7272
while(effectIterator.hasNext()) {
7373
SpellEffect effect = effectIterator.next();
7474
if (effect.shouldRemove()) {
75+
SpellEffectRemoveEvent event = new SpellEffectRemoveEvent(effect.caster, effect, effect.data, RemovalReason.EXPIRED);
76+
event.callEvent();
77+
if (event.isCancelled()) {
78+
return;
79+
}
7580
effect.onRemove();
7681
effectIterator.remove();
7782
for (SpellEffect eventEffect: getEffects()) {
7883
eventEffect.onRemoveEffect(effect);
79-
}
80-
SpellEffectRemoveEvent event = new SpellEffectRemoveEvent(effect.caster, effect, effect.data, RemovalReason.EXPIRED);
81-
Bukkit.getPluginManager().callEvent(event);
82-
} else {
84+
}} else {
8385
effect.tick();
8486
}
8587
}
@@ -155,37 +157,45 @@ default void addEffect(LivingEntity caster, EffectData data, int duration, int s
155157
if (hasEffect(data)) {
156158
SpellEffect oldEffect = getEffects().stream().filter(e -> e.data.equals(data)).findFirst().get();
157159
if (oldEffect.canAdd(duration, stacks)) {
160+
SpellEffectAddEvent event = new SpellEffectAddEvent(this, oldEffect, data, true);
161+
event.callEvent();
162+
if (event.isCancelled()) {
163+
return;
164+
}
158165
if (!onEffectAdd(oldEffect, false)) {
159166
return;
160167
}
161168
oldEffect.add(duration, stacks);
162-
SpellEffectAddEvent event = new SpellEffectAddEvent(this, oldEffect, data, true);
163-
Bukkit.getPluginManager().callEvent(event);
164169
}
165170
} else {
166171
SpellEffect effect = data.getActiveEffect(caster, (LivingEntity) this, duration, stacks);
172+
SpellEffectAddEvent event = new SpellEffectAddEvent(this, effect, data, false);
173+
event.callEvent();
174+
if (event.isCancelled()) {
175+
return;
176+
}
167177
if (!onEffectAdd(effect, true)) {
168178
return;
169179
}
170180
getEffects().add(effect);
171-
effect.onApply();
172-
SpellEffectAddEvent event = new SpellEffectAddEvent(this, effect, data, false);
173-
Bukkit.getPluginManager().callEvent(event);
174-
}
181+
effect.onApply();}
175182
}
176183

177184
default void removeEffect(EffectData effect) {
178185
Iterator<SpellEffect> iterator = getEffects().iterator();
179186
while (iterator.hasNext()) {
180187
SpellEffect itr = iterator.next();
181188
if (itr.data == effect) {
189+
SpellEffectRemoveEvent event = new SpellEffectRemoveEvent(this, itr, effect, RemovalReason.CLEANSED);
190+
event.callEvent();
191+
if (event.isCancelled()) {
192+
continue;
193+
}
182194
if (!onEffectRemove(itr)) {
183195
continue;
184196
}
185197
iterator.remove();
186198
onEffectRemove(itr);
187-
SpellEffectRemoveEvent event = new SpellEffectRemoveEvent(this, itr, effect, RemovalReason.CLEANSED);
188-
Bukkit.getPluginManager().callEvent(event);
189199
}
190200
}
191201
}

papyrus-api/src/main/java/de/erethon/spellbook/api/SpellEffectAddEvent.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package de.erethon.spellbook.api;
22

3+
import org.bukkit.event.Cancellable;
34
import org.bukkit.event.Event;
45
import org.bukkit.event.HandlerList;
56
import org.jetbrains.annotations.NotNull;
67

7-
public class SpellEffectAddEvent extends Event {
8+
public class SpellEffectAddEvent extends Event implements Cancellable {
89

910
private final SpellCaster target;
1011
private final SpellEffect effect;
1112
private final EffectData data;
1213
private final boolean isExtension;
14+
private boolean cancelled = false;
1315

1416
public SpellEffectAddEvent(SpellCaster target, SpellEffect activeSpell, EffectData data, boolean isExtension) {
1517
this.target = target;
@@ -45,4 +47,13 @@ public boolean wasExtended() {
4547
return handlers;
4648
}
4749

50+
@Override
51+
public boolean isCancelled() {
52+
return cancelled;
53+
}
54+
55+
@Override
56+
public void setCancelled(boolean cancel) {
57+
cancelled = cancel;
58+
}
4859
}

papyrus-api/src/main/java/de/erethon/spellbook/api/SpellEffectRemoveEvent.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package de.erethon.spellbook.api;
22

33
import org.bukkit.entity.LivingEntity;
4+
import org.bukkit.event.Cancellable;
45
import org.bukkit.event.Event;
56
import org.bukkit.event.HandlerList;
67
import org.jetbrains.annotations.NotNull;
@@ -9,12 +10,13 @@ enum RemovalReason {
910
EXPIRED,
1011
CLEANSED
1112
}
12-
public class SpellEffectRemoveEvent extends Event {
13+
public class SpellEffectRemoveEvent extends Event implements Cancellable {
1314

1415
private final SpellCaster target;
1516
private final SpellEffect effect;
1617
private final EffectData data;
1718
private final RemovalReason reason;
19+
private boolean cancelled = false;
1820

1921
public SpellEffectRemoveEvent(SpellCaster target, SpellEffect activeSpell, EffectData data, RemovalReason removalReason) {
2022
this.target = target;
@@ -50,4 +52,15 @@ public RemovalReason getReason() {
5052
return handlers;
5153
}
5254

55+
56+
@Override
57+
public boolean isCancelled() {
58+
return cancelled;
59+
}
60+
61+
@Override
62+
public void setCancelled(boolean cancel) {
63+
cancelled = cancel;
64+
}
65+
5366
}

0 commit comments

Comments
 (0)