Skip to content

Commit 3d4e86e

Browse files
Added a new passive trigger called swaphanditem. Currently does not require any trigger variables.
Fix up priorities of passive triggers, correct some handlings of ignoring canceled events. Added a new option to passive spells called cancel-default-action-when-cast-fails. When set to true, the default action of the trigger will still be canceled if the spell fails as long as the cast was issued. Modify the event registration in the MagicSpells class to allow overriding the listener priorities. Added variants of existing triggers to fire at different event priorities. The preexisting ones will fire at normal priority. For having the trigger fire at a different priority, simply append the appropriate suffix to the trigger name. For priority lowest, append _lowestpriority to the trigger name. For priority low, append _lowpriority to the trigger name. For priority high, append _highpriority to the trigger name. For priority highest, append _highestpriority to the trigger name. For priority monitor, append _monitorpriority to the trigger name. No name change is needed for the default (normal) priority. EXCEPTION: this feature was not implemented for the resourcepack trigger due to it not being applicable. Has not gone through much testing yet, feedback is appreaciated.
1 parent 5ffd929 commit 3d4e86e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+362
-164
lines changed

src/com/nisovin/magicspells/MagicSpells.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.io.FileWriter;
55
import java.io.IOException;
66
import java.io.PrintWriter;
7+
import java.lang.annotation.Annotation;
78
import java.lang.reflect.Constructor;
89
import java.lang.reflect.Method;
910
import java.net.MalformedURLException;
@@ -29,6 +30,7 @@
2930
import org.bukkit.entity.Player;
3031
import org.bukkit.event.Event;
3132
import org.bukkit.event.EventHandler;
33+
import org.bukkit.event.EventPriority;
3234
import org.bukkit.event.HandlerList;
3335
import org.bukkit.event.Listener;
3436
import org.bukkit.inventory.ItemStack;
@@ -56,6 +58,7 @@
5658
import com.nisovin.magicspells.util.HandHandler;
5759
import com.nisovin.magicspells.util.MagicConfig;
5860
import com.nisovin.magicspells.util.MoneyHandler;
61+
import com.nisovin.magicspells.util.OverridePriority;
5962
import com.nisovin.magicspells.util.RegexUtil;
6063
import com.nisovin.magicspells.util.Util;
6164
import com.nisovin.magicspells.variables.VariableManager;
@@ -987,6 +990,11 @@ public static String doArgumentAndVariableSubstitution(String string, Player pla
987990
}
988991

989992
public static void registerEvents(final Listener listener) {
993+
registerEvents(listener, EventPriority.NORMAL);
994+
}
995+
996+
public static void registerEvents(final Listener listener, EventPriority customPriority) {
997+
if (customPriority == null) customPriority = EventPriority.NORMAL;
990998
Method[] methods;
991999
try {
9921000
methods = listener.getClass().getDeclaredMethods();
@@ -998,6 +1006,10 @@ public static void registerEvents(final Listener listener) {
9981006
final Method method = methods[i];
9991007
final EventHandler eh = method.getAnnotation(EventHandler.class);
10001008
if (eh == null) continue;
1009+
EventPriority priority = eh.priority();
1010+
1011+
if (hasAnnotation(method, OverridePriority.class)) priority = customPriority;
1012+
10011013
final Class<?> checkClass = method.getParameterTypes()[0];
10021014
if (!Event.class.isAssignableFrom(checkClass) || method.getParameterTypes().length != 1) {
10031015
plugin.getLogger().severe("Wrong method arguments used for event type registered");
@@ -1031,10 +1043,14 @@ public void execute(Listener listener, Event event) {
10311043
}
10321044
}
10331045
};
1034-
plugin.getServer().getPluginManager().registerEvent(eventClass, listener, eh.priority(), executor, plugin, eh.ignoreCancelled());
1046+
plugin.getServer().getPluginManager().registerEvent(eventClass, listener, priority, executor, plugin, eh.ignoreCancelled());
10351047
}
10361048
}
10371049

1050+
private static boolean hasAnnotation(Method m, Class<? extends Annotation> clazz) {
1051+
return m.getAnnotation(clazz) != null;
1052+
}
1053+
10381054
public static int scheduleDelayedTask(final Runnable task, int delay) {
10391055
return Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, !plugin.enableErrorLogging ? task : new Runnable() {
10401056
@Override

src/com/nisovin/magicspells/spells/PassiveSpell.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,13 @@ public class PassiveSpell extends Spell {
4343
@ConfigData(field="delay", dataType="int", defaultValue="-1")
4444
private int delay;
4545

46-
@ConfigData(field="cancel-default-action", dataType="boolean", defaultValue="false")
46+
@ConfigData(field="cancel-default-action", dataType="boolean", defaultValue="false", description="Cancel if the cast is successful")
4747
private boolean cancelDefaultAction;
4848

49-
@ConfigData(field="ignore-cancelled", dataType="boolean", defaultValue="true")
49+
@ConfigData(field="cancel-default-action-when-cast-fails", dataType="boolean", defaultValue="false", description="An addition to the cancel-default-action field. Also cancels the default action when the trigger tried casting the spell but the spell was unsuccessful.")
50+
private boolean cancelDefaultActionWhenCastFails;
51+
52+
@ConfigData(field="ignore-cancelled", dataType="boolean", defaultValue="true", description="Don't cast if the event has been canceled")
5053
private boolean ignoreCancelled;
5154

5255
@ConfigData(field="send-failure-messages", dataType="boolean", defaultValue="false")
@@ -67,6 +70,7 @@ public PassiveSpell(MagicConfig config, String spellName) {
6770
castWithoutTarget = getConfigBoolean("cast-without-target", false);
6871
delay = getConfigInt("delay", -1);
6972
cancelDefaultAction = getConfigBoolean("cancel-default-action", false);
73+
cancelDefaultActionWhenCastFails = getConfigBoolean("cancel-default-action-when-cast-fails", false);
7074
ignoreCancelled = getConfigBoolean("ignore-cancelled", true);
7175
sendFailureMessages = getConfigBoolean("send-failure-messages", false);
7276

@@ -293,6 +297,10 @@ public boolean cancelDefaultAction() {
293297
return cancelDefaultAction;
294298
}
295299

300+
public boolean cancelDefaultActionWhenCastFails() {
301+
return cancelDefaultActionWhenCastFails;
302+
}
303+
296304
public boolean ignoreCancelled() {
297305
return ignoreCancelled;
298306
}

src/com/nisovin/magicspells/spells/passive/BlockBreakListener.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010
import org.bukkit.Material;
1111
import org.bukkit.block.Block;
1212
import org.bukkit.event.EventHandler;
13-
import org.bukkit.event.EventPriority;
1413
import org.bukkit.event.block.BlockBreakEvent;
1514
import org.bukkit.material.MaterialData;
1615

1716
import com.nisovin.magicspells.MagicSpells;
1817
import com.nisovin.magicspells.Spellbook;
1918
import com.nisovin.magicspells.materials.MagicMaterial;
2019
import com.nisovin.magicspells.spells.PassiveSpell;
20+
import com.nisovin.magicspells.util.OverridePriority;
2121

2222
// optional trigger variable of a comma separated list of blocks to accept
2323
public class BlockBreakListener extends PassiveListener {
@@ -48,14 +48,15 @@ public void registerSpell(PassiveSpell spell, PassiveTrigger trigger, String var
4848
}
4949
}
5050

51-
@EventHandler(priority=EventPriority.MONITOR, ignoreCancelled=true)
51+
@OverridePriority
52+
@EventHandler
5253
public void onBlockBreak(BlockBreakEvent event) {
5354
Spellbook spellbook = MagicSpells.getSpellbook(event.getPlayer());
5455
if (allTypes.size() > 0) {
5556
for (PassiveSpell spell : allTypes) {
5657
if (spellbook.hasSpell(spell, false)) {
5758
boolean casted = spell.activate(event.getPlayer(), event.getBlock().getLocation().add(0.5, 0.5, 0.5));
58-
if (casted && spell.cancelDefaultAction()) {
59+
if (PassiveListener.cancelDefaultAction(spell, casted)) {
5960
event.setCancelled(true);
6061
}
6162
}
@@ -67,7 +68,7 @@ public void onBlockBreak(BlockBreakEvent event) {
6768
for (PassiveSpell spell : list) {
6869
if (spellbook.hasSpell(spell, false)) {
6970
boolean casted = spell.activate(event.getPlayer(), event.getBlock().getLocation().add(0.5, 0.5, 0.5));
70-
if (casted && spell.cancelDefaultAction()) {
71+
if (PassiveListener.cancelDefaultAction(spell, casted)) {
7172
event.setCancelled(true);
7273
}
7374
}

src/com/nisovin/magicspells/spells/passive/BlockPlaceListener.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010
import org.bukkit.Material;
1111
import org.bukkit.block.Block;
1212
import org.bukkit.event.EventHandler;
13-
import org.bukkit.event.EventPriority;
1413
import org.bukkit.event.block.BlockPlaceEvent;
1514
import org.bukkit.material.MaterialData;
1615

1716
import com.nisovin.magicspells.MagicSpells;
1817
import com.nisovin.magicspells.Spellbook;
1918
import com.nisovin.magicspells.materials.MagicMaterial;
2019
import com.nisovin.magicspells.spells.PassiveSpell;
20+
import com.nisovin.magicspells.util.OverridePriority;
2121

2222
// optional trigger variable of comma separated list of blocks to accept
2323
public class BlockPlaceListener extends PassiveListener {
@@ -48,14 +48,15 @@ public void registerSpell(PassiveSpell spell, PassiveTrigger trigger, String var
4848
}
4949
}
5050

51-
@EventHandler(priority=EventPriority.MONITOR, ignoreCancelled=true)
51+
@OverridePriority
52+
@EventHandler
5253
public void onBlockPlace(BlockPlaceEvent event) {
5354
Spellbook spellbook = MagicSpells.getSpellbook(event.getPlayer());
5455
if (allTypes.size() > 0) {
5556
for (PassiveSpell spell : allTypes) {
5657
if (spellbook.hasSpell(spell, false)) {
5758
boolean casted = spell.activate(event.getPlayer(), event.getBlock().getLocation().add(0.5, 0.5, 0.5));
58-
if (casted && spell.cancelDefaultAction()) {
59+
if (PassiveListener.cancelDefaultAction(spell, casted)) {
5960
event.setCancelled(true);
6061
}
6162
}
@@ -67,7 +68,7 @@ public void onBlockPlace(BlockPlaceEvent event) {
6768
for (PassiveSpell spell : list) {
6869
if (spellbook.hasSpell(spell, false)) {
6970
boolean casted = spell.activate(event.getPlayer(), event.getBlock().getLocation().add(0.5, 0.5, 0.5));
70-
if (casted && spell.cancelDefaultAction()) {
71+
if (PassiveListener.cancelDefaultAction(spell, casted)) {
7172
event.setCancelled(true);
7273
}
7374
}

src/com/nisovin/magicspells/spells/passive/BuffListener.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import org.bukkit.Bukkit;
77
import org.bukkit.entity.Player;
88
import org.bukkit.event.EventHandler;
9-
import org.bukkit.event.EventPriority;
109
import org.bukkit.event.entity.PlayerDeathEvent;
1110
import org.bukkit.event.player.PlayerJoinEvent;
1211
import org.bukkit.event.player.PlayerQuitEvent;
@@ -20,6 +19,7 @@
2019
import com.nisovin.magicspells.events.SpellLearnEvent;
2120
import com.nisovin.magicspells.spells.BuffSpell;
2221
import com.nisovin.magicspells.spells.PassiveSpell;
22+
import com.nisovin.magicspells.util.OverridePriority;
2323

2424
// no trigger variable currently used
2525
public class BuffListener extends PassiveListener {
@@ -44,21 +44,25 @@ public void initialize() {
4444
}
4545
}
4646

47+
@OverridePriority
4748
@EventHandler
4849
public void onPlayerJoin(PlayerJoinEvent event) {
4950
on(event.getPlayer());
5051
}
5152

53+
@OverridePriority
5254
@EventHandler
5355
public void onPlayerQuit(PlayerQuitEvent event) {
5456
off(event.getPlayer());
5557
}
5658

59+
@OverridePriority
5760
@EventHandler
5861
public void onPlayerDeath(PlayerDeathEvent event) {
5962
off(event.getEntity());
6063
}
6164

65+
@OverridePriority
6266
@EventHandler
6367
public void onPlayerRespawn(final PlayerRespawnEvent event) {
6468
Bukkit.getScheduler().scheduleSyncDelayedTask(MagicSpells.plugin, new Runnable() {
@@ -69,7 +73,8 @@ public void run() {
6973
}, 1);
7074
}
7175

72-
@EventHandler(priority=EventPriority.MONITOR, ignoreCancelled=true)
76+
@OverridePriority
77+
@EventHandler
7378
public void onSpellLearn(final SpellLearnEvent event) {
7479
if (event.getSpell() instanceof PassiveSpell && spells.contains(event.getSpell())) {
7580
Bukkit.getScheduler().scheduleSyncDelayedTask(MagicSpells.plugin, new Runnable() {
@@ -81,7 +86,8 @@ public void run() {
8186
}
8287
}
8388

84-
@EventHandler(priority=EventPriority.MONITOR, ignoreCancelled=true)
89+
@OverridePriority
90+
@EventHandler
8591
public void onSpellForget(SpellForgetEvent event) {
8692
if (event.getSpell() instanceof PassiveSpell && spells.contains(event.getSpell())) {
8793
off(event.getForgetter(), (PassiveSpell)event.getSpell());

src/com/nisovin/magicspells/spells/passive/CraftListener.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.nisovin.magicspells.materials.MagicItemWithNameMaterial;
1919
import com.nisovin.magicspells.materials.MagicMaterial;
2020
import com.nisovin.magicspells.spells.PassiveSpell;
21+
import com.nisovin.magicspells.util.OverridePriority;
2122

2223
// optional trigger variable of a comma separated list of items to accept as the result
2324
public class CraftListener extends PassiveListener {
@@ -57,6 +58,7 @@ public void registerSpell(PassiveSpell spell, PassiveTrigger trigger, String var
5758
}
5859
}
5960

61+
@OverridePriority
6062
@EventHandler
6163
public void onCraft(CraftItemEvent event) {
6264
if (event.getCurrentItem() == null && event.getCurrentItem().getType() == Material.AIR) return;
@@ -68,7 +70,7 @@ public void onCraft(CraftItemEvent event) {
6870
if (spell.ignoreCancelled() || !event.isCancelled()) {
6971
if (spellbook.hasSpell(spell)) {
7072
boolean casted = spell.activate(player);
71-
if (casted && spell.cancelDefaultAction()) {
73+
if (PassiveListener.cancelDefaultAction(spell, casted)) {
7274
event.setCancelled(true);
7375
}
7476
}
@@ -84,7 +86,7 @@ public void onCraft(CraftItemEvent event) {
8486
if (spell.ignoreCancelled() || !event.isCancelled()) {
8587
if (spellbook.hasSpell(spell)) {
8688
boolean casted = spell.activate(player);
87-
if (casted && spell.cancelDefaultAction()) {
89+
if (PassiveListener.cancelDefaultAction(spell, casted)) {
8890
event.setCancelled(true);
8991
}
9092
}

src/com/nisovin/magicspells/spells/passive/DeathListener.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.nisovin.magicspells.MagicSpells;
1010
import com.nisovin.magicspells.Spellbook;
1111
import com.nisovin.magicspells.spells.PassiveSpell;
12+
import com.nisovin.magicspells.util.OverridePriority;
1213

1314
// no trigger variable used here
1415
public class DeathListener extends PassiveListener {
@@ -20,6 +21,7 @@ public void registerSpell(PassiveSpell spell, PassiveTrigger trigger, String var
2021
spells.add(spell);
2122
}
2223

24+
@OverridePriority
2325
@EventHandler
2426
public void onDeath(PlayerDeathEvent event) {
2527
Spellbook spellbook = MagicSpells.getSpellbook(event.getEntity());

src/com/nisovin/magicspells/spells/passive/DropItemListener.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
import org.bukkit.Material;
1111
import org.bukkit.event.EventHandler;
12-
import org.bukkit.event.EventPriority;
1312
import org.bukkit.event.player.PlayerDropItemEvent;
1413
import org.bukkit.inventory.ItemStack;
1514

@@ -18,6 +17,7 @@
1817
import com.nisovin.magicspells.materials.MagicItemWithNameMaterial;
1918
import com.nisovin.magicspells.materials.MagicMaterial;
2019
import com.nisovin.magicspells.spells.PassiveSpell;
20+
import com.nisovin.magicspells.util.OverridePriority;
2121

2222
// optional trigger variable that may contain a comma separated list of items to accept
2323
public class DropItemListener extends PassiveListener {
@@ -57,14 +57,15 @@ public void registerSpell(PassiveSpell spell, PassiveTrigger trigger, String var
5757
}
5858
}
5959

60-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
60+
@OverridePriority
61+
@EventHandler
6162
public void onDrop(PlayerDropItemEvent event) {
6263
if (allTypes.size() > 0) {
6364
Spellbook spellbook = MagicSpells.getSpellbook(event.getPlayer());
6465
for (PassiveSpell spell : allTypes) {
6566
if (spellbook.hasSpell(spell)) {
6667
boolean casted = spell.activate(event.getPlayer());
67-
if (casted && spell.cancelDefaultAction()) {
68+
if (PassiveListener.cancelDefaultAction(spell, casted)) {
6869
event.setCancelled(true);
6970
}
7071
}
@@ -78,7 +79,7 @@ public void onDrop(PlayerDropItemEvent event) {
7879
for (PassiveSpell spell : list) {
7980
if (spellbook.hasSpell(spell)) {
8081
boolean casted = spell.activate(event.getPlayer());
81-
if (casted && spell.cancelDefaultAction()) {
82+
if (PassiveListener.cancelDefaultAction(spell, casted)) {
8283
event.setCancelled(true);
8384
}
8485
}

src/com/nisovin/magicspells/spells/passive/EnterBedListener.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.nisovin.magicspells.MagicSpells;
1010
import com.nisovin.magicspells.Spellbook;
1111
import com.nisovin.magicspells.spells.PassiveSpell;
12+
import com.nisovin.magicspells.util.OverridePriority;
1213

1314
// no trigger variable is currently used
1415
public class EnterBedListener extends PassiveListener {
@@ -20,12 +21,13 @@ public void registerSpell(PassiveSpell spell, PassiveTrigger trigger, String var
2021
spells.add(spell);
2122
}
2223

24+
@OverridePriority
2325
@EventHandler
2426
public void onDeath(PlayerBedEnterEvent event) {
2527
Spellbook spellbook = MagicSpells.getSpellbook(event.getPlayer());
2628
for (PassiveSpell spell : spells) {
2729
if (spellbook.hasSpell(spell)) {
28-
spell.activate(event.getPlayer());
30+
spell.activate(event.getPlayer()); // TODO is this safe to cancel?
2931
}
3032
}
3133
}

src/com/nisovin/magicspells/spells/passive/FatalDamageListener.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55

66
import org.bukkit.entity.Player;
77
import org.bukkit.event.EventHandler;
8-
import org.bukkit.event.EventPriority;
98
import org.bukkit.event.entity.EntityDamageEvent;
109

1110
import com.nisovin.magicspells.MagicSpells;
1211
import com.nisovin.magicspells.Spellbook;
1312
import com.nisovin.magicspells.spells.PassiveSpell;
13+
import com.nisovin.magicspells.util.OverridePriority;
1414

1515
// no trigger variable is used here
1616
public class FatalDamageListener extends PassiveListener {
@@ -22,7 +22,8 @@ public void registerSpell(PassiveSpell spell, PassiveTrigger trigger, String var
2222
spells.add(spell);
2323
}
2424

25-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
25+
@OverridePriority
26+
@EventHandler
2627
void onDamage(EntityDamageEvent event) {
2728
if (!(event.getEntity() instanceof Player)) return;
2829
Player player = (Player)event.getEntity();
@@ -31,7 +32,7 @@ void onDamage(EntityDamageEvent event) {
3132
for (PassiveSpell spell : spells) {
3233
if (spellbook.hasSpell(spell)) {
3334
boolean casted = spell.activate(player);
34-
if (casted && spell.cancelDefaultAction()) {
35+
if (PassiveListener.cancelDefaultAction(spell, casted)) {
3536
event.setCancelled(true);
3637
}
3738
}

0 commit comments

Comments
 (0)