From af712e947d95dd23dd1ac6f16626235e1cd34e02 Mon Sep 17 00:00:00 2001 From: Alex 'mcmonkey' Goodwin Date: Thu, 7 Nov 2019 12:39:14 -0800 Subject: [PATCH] add 'on tnt primes' event, paper only --- .../denizen/paper/PaperModule.java | 2 + .../events/PlayerEquipsArmorScriptEvent.java | 20 +---- .../paper/events/TNTPrimesScriptEvent.java | 89 +++++++++++++++++++ 3 files changed, 93 insertions(+), 18 deletions(-) create mode 100644 paper/src/main/java/com/denizenscript/denizen/paper/events/TNTPrimesScriptEvent.java diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/PaperModule.java b/paper/src/main/java/com/denizenscript/denizen/paper/PaperModule.java index 6c90b31c27..d4f7592f26 100644 --- a/paper/src/main/java/com/denizenscript/denizen/paper/PaperModule.java +++ b/paper/src/main/java/com/denizenscript/denizen/paper/PaperModule.java @@ -2,6 +2,7 @@ import com.denizenscript.denizen.paper.events.PlayerEquipsArmorScriptEvent; import com.denizenscript.denizen.paper.events.PlayerJumpsPaperScriptEventImpl; +import com.denizenscript.denizen.paper.events.TNTPrimesScriptEvent; import com.denizenscript.denizen.utilities.debugging.Debug; import com.denizenscript.denizencore.events.ScriptEvent; @@ -11,5 +12,6 @@ public static void init() { Debug.log("Loading Paper support module..."); ScriptEvent.registerScriptEvent(new PlayerEquipsArmorScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerJumpsPaperScriptEventImpl()); + ScriptEvent.registerScriptEvent(new TNTPrimesScriptEvent()); } } diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/events/PlayerEquipsArmorScriptEvent.java b/paper/src/main/java/com/denizenscript/denizen/paper/events/PlayerEquipsArmorScriptEvent.java index 9f5b8f7624..4c5d369a4b 100644 --- a/paper/src/main/java/com/denizenscript/denizen/paper/events/PlayerEquipsArmorScriptEvent.java +++ b/paper/src/main/java/com/denizenscript/denizen/paper/events/PlayerEquipsArmorScriptEvent.java @@ -4,17 +4,12 @@ import com.denizenscript.denizen.events.BukkitScriptEvent; import com.denizenscript.denizen.objects.ItemTag; import com.denizenscript.denizen.objects.PlayerTag; -import com.denizenscript.denizen.utilities.DenizenAPI; import com.denizenscript.denizencore.objects.ObjectTag; import com.denizenscript.denizencore.objects.core.ElementTag; import com.denizenscript.denizencore.scripts.ScriptEntryData; -import com.denizenscript.denizencore.scripts.containers.ScriptContainer; -import com.denizenscript.denizencore.utilities.CoreUtilities; import com.destroystokyo.paper.event.player.PlayerArmorChangeEvent; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.event.EventHandler; -import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import java.util.HashMap; @@ -62,9 +57,8 @@ public PlayerEquipsArmorScriptEvent() { public PlayerTag player; @Override - public boolean couldMatch(ScriptContainer scriptContainer, String s) { - String lower = CoreUtilities.toLowerCase(s); - return lower.startsWith("player equips ") || lower.startsWith("player unequips "); + public boolean couldMatch(ScriptPath path) { + return path.eventLower.startsWith("player equips ") || path.eventLower.startsWith("player unequips "); } @Override @@ -101,16 +95,6 @@ else if (!itemCompare.equals("armor") && !tryItem(oldItem, itemCompare)) { return true; } - @Override - public void init() { - Bukkit.getServer().getPluginManager().registerEvents(this, DenizenAPI.getCurrentInstance()); - } - - @Override - public void destroy() { - HandlerList.unregisterAll(this); - } - @Override public String getName() { return "PlayerEquipsArmor"; diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/events/TNTPrimesScriptEvent.java b/paper/src/main/java/com/denizenscript/denizen/paper/events/TNTPrimesScriptEvent.java new file mode 100644 index 0000000000..c7f1242cfa --- /dev/null +++ b/paper/src/main/java/com/denizenscript/denizen/paper/events/TNTPrimesScriptEvent.java @@ -0,0 +1,89 @@ +package com.denizenscript.denizen.paper.events; + +import com.denizenscript.denizen.events.BukkitScriptEvent; +import com.denizenscript.denizen.objects.EntityTag; +import com.denizenscript.denizen.objects.LocationTag; +import com.denizenscript.denizen.objects.PlayerTag; +import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData; +import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.objects.core.ElementTag; +import com.denizenscript.denizencore.scripts.ScriptEntryData; +import com.destroystokyo.paper.event.block.TNTPrimeEvent; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class TNTPrimesScriptEvent extends BukkitScriptEvent implements Listener { + + // <--[event] + // @Events + // tnt primes + // + // @Regex ^on tnt primes$ + // + // @Switch in + // + // @Plugin Paper + // + // @Cancellable true + // + // @Triggers when TNT is activated and will soon explode. + // + // @Context + // returns the entity that primed the TNT, if any. + // returns the location of the TNT block being primed. + // returns the reason the TNT was primed. Refer to <@link url https://papermc.io/javadocs/paper/com/destroystokyo/paper/event/block/TNTPrimeEvent.PrimeReason.html> + // --> + + public TNTPrimesScriptEvent() { + instance = this; + } + + public static TNTPrimesScriptEvent instance; + public TNTPrimeEvent event; + public LocationTag location; + + @Override + public boolean couldMatch(ScriptPath path) { + return path.eventLower.startsWith("tnt primes"); + } + + @Override + public boolean matches(ScriptPath path) { + if (!runInCheck(path, location)) { + return false; + } + return true; + } + + @Override + public String getName() { + return "TNTPrimes"; + } + + @Override + public ScriptEntryData getScriptEntryData() { + return new BukkitScriptEntryData(event.getPrimerEntity() instanceof Player ? new PlayerTag((Player) event.getPrimerEntity()) : null, null); + } + + @Override + public ObjectTag getContext(String name) { + if (name.equals("entity") && event.getPrimerEntity() != null) { + return new EntityTag(event.getPrimerEntity()); + } + else if (name.equals("location")) { + return location; + } + else if (name.equals("reason")) { + return new ElementTag(event.getReason().name()); + } + return super.getContext(name); + } + + @EventHandler + public void tntPrimeEvent(TNTPrimeEvent event) { + this.event = event; + location = new LocationTag(event.getBlock().getLocation()); + fire(event); + } +}