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 db7e760821..0a24c008e0 100644 --- a/paper/src/main/java/com/denizenscript/denizen/paper/PaperModule.java +++ b/paper/src/main/java/com/denizenscript/denizen/paper/PaperModule.java @@ -18,7 +18,6 @@ public static void init() { // Events ScriptEvent.registerScriptEvent(new EntityKnocksbackEntityScriptEvent()); ScriptEvent.registerScriptEvent(new EntityPathfindScriptEvent()); - ScriptEvent.registerScriptEvent(new EntityShootsBowPaperScriptEventImpl()); ScriptEvent.registerScriptEvent(new ExperienceOrbMergeScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerAbsorbsExperienceScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerBeaconEffectScriptEvent()); diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/events/EntityShootsBowPaperScriptEventImpl.java b/paper/src/main/java/com/denizenscript/denizen/paper/events/EntityShootsBowPaperScriptEventImpl.java deleted file mode 100644 index bedc77b081..0000000000 --- a/paper/src/main/java/com/denizenscript/denizen/paper/events/EntityShootsBowPaperScriptEventImpl.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.denizenscript.denizen.paper.events; - -import com.denizenscript.denizen.events.entity.EntityShootsBowEvent; -import com.denizenscript.denizen.objects.ItemTag; -import com.denizenscript.denizen.utilities.DenizenAPI; -import com.denizenscript.denizencore.objects.ObjectTag; -import com.denizenscript.denizencore.objects.core.ElementTag; -import com.denizenscript.denizencore.utilities.CoreUtilities; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -public class EntityShootsBowPaperScriptEventImpl extends EntityShootsBowEvent { - - @Override - public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) { - if (determinationObj instanceof ElementTag && !isDefaultDetermination(determinationObj)) { - String determination = determinationObj.toString(); - String lower = CoreUtilities.toLowerCase(determination); - if (lower.equals("keep_item")) { - event.setConsumeArrow(false); - if (entity.isPlayer()) { - final Player p = entity.getPlayer(); - Bukkit.getScheduler().scheduleSyncDelayedTask(DenizenAPI.getCurrentInstance(), new Runnable() { - @Override - public void run() { - p.updateInventory(); - } - }, 1); - } - return true; - } - } - return super.applyDetermination(path, determinationObj); - } - - @Override - public ObjectTag getContext(String name) { - if (name.equals("item")) { - return new ItemTag(event.getArrowItem()); - } - return super.getContext(name); - } -} diff --git a/plugin/src/main/java/com/denizenscript/denizen/events/entity/EntityShootsBowEvent.java b/plugin/src/main/java/com/denizenscript/denizen/events/entity/EntityShootsBowEvent.java index df2cf5df39..75439c1278 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/events/entity/EntityShootsBowEvent.java +++ b/plugin/src/main/java/com/denizenscript/denizen/events/entity/EntityShootsBowEvent.java @@ -11,6 +11,7 @@ import com.denizenscript.denizencore.objects.core.ElementTag; import com.denizenscript.denizencore.objects.core.ListTag; import com.denizenscript.denizencore.scripts.ScriptEntryData; +import com.denizenscript.denizencore.utilities.CoreUtilities; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -44,11 +45,11 @@ public class EntityShootsBowEvent extends BukkitScriptEvent implements Listener // returns a EntityTag of the projectile. // returns the ItemTag of the bow used to shoot. // returns the force of the shot. - // returns an ItemTag of the shot projectile, if any (on Paper servers only). + // returns an ItemTag of the shot projectile, if any. // // @Determine // ListTag(EntityTag) to change the projectile(s) being shot. (Note that in certain cases, determining an arrow may not be valid). - // "KEEP_ITEM" to keep the projectile item on shooting it (on Paper servers only). + // "KEEP_ITEM" to keep the projectile item on shooting it. // // @Player when the entity that shot the bow is a player. // @@ -107,9 +108,24 @@ public String getName() { @Override public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) { String determination = determinationObj.toString(); - if (Argument.valueOf(determination).matchesArgumentList(EntityTag.class)) { + if (determinationObj instanceof ElementTag && !isDefaultDetermination(determinationObj)) { + String lower = CoreUtilities.toLowerCase(determination); + if (lower.equals("keep_item")) { + event.setConsumeItem(false); + if (entity.isPlayer()) { + final Player p = entity.getPlayer(); + Bukkit.getScheduler().scheduleSyncDelayedTask(DenizenAPI.getCurrentInstance(), new Runnable() { + @Override + public void run() { + p.updateInventory(); + } + }, 1); + } + return true; + } + } + else if (Argument.valueOf(determination).matchesArgumentList(EntityTag.class)) { cancelled = true; - // Get the list of entities List newProjectiles = ListTag.getListFor(determinationObj, getTagContext(path)).filter(EntityTag.class, path.container, true); // Go through all the entities, spawning/teleporting them @@ -121,7 +137,6 @@ public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) { newProjectile.setShooter(entity); } } - // Mount the projectiles on top of each other Position.mount(Conversion.convertEntities(newProjectiles)); // Get the last entity on the list, i.e. the one at the bottom @@ -155,6 +170,9 @@ else if (name.equals("bow")) { else if (name.equals("projectile")) { return projectile; } + if (name.equals("item")) { + return new ItemTag(event.getConsumable()); + } return super.getContext(name); } diff --git a/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerLoginScriptEvent.java b/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerLoginScriptEvent.java index bce780b95d..1de2bef531 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerLoginScriptEvent.java +++ b/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerLoginScriptEvent.java @@ -19,12 +19,14 @@ public class PlayerLoginScriptEvent extends BukkitScriptEvent implements Listene // player logs in (for the first time) // player (first) login // - // @Regex ^on player (logs in( for the first time)?|( first)? login)$ + // @Regex ^on player( logs in( for the first time)?|( first)? login)$ // // @Group Player // // @Triggers when a player logs in to the server. This is during the authentication process, and should NOT be confused with <@link event player joins>. // + // @Warning Generally avoid this event. This is not a way to get a 'first join' event. This is an internal technical event, with specific uses (eg custom whitelisting). + // // @Context // returns an ElementTag of the player's hostname. //