From a1a12245d37ae999f97cd4985dec67a0cb817bc4 Mon Sep 17 00:00:00 2001 From: Fortifier42 Date: Thu, 4 Feb 2016 14:36:21 +1100 Subject: [PATCH] Convert ItemCraft event to ScriptEvent format. Reformat 'InvPicksUpItem' to 'InventoryPicksUpItem' Fixup the regex :heart: Alphabetise the scriptEvent Registering. --- .../java/net/aufdemrand/denizen/Denizen.java | 21 +-- .../events/player/ItemCraftedScriptEvent.java | 140 ++++++++++++++++++ .../PlayerChangesGamemodeScriptEvent.java | 1 + .../PlayerEmptiesBucketScriptEvent.java} | 10 +- .../PlayerFillsBucketScriptEvent.java} | 11 +- .../events/world/ChunkUnloadScriptEvent.java | 2 +- ...a => InventoryPicksUpItemScriptEvent.java} | 8 +- .../core/BukkitWorldScriptHelper.java | 66 --------- 8 files changed, 167 insertions(+), 92 deletions(-) create mode 100644 src/main/java/net/aufdemrand/denizen/events/player/ItemCraftedScriptEvent.java rename src/main/java/net/aufdemrand/denizen/events/{world/BucketEmptyScriptEvent.java => player/PlayerEmptiesBucketScriptEvent.java} (92%) rename src/main/java/net/aufdemrand/denizen/events/{world/BucketFillScriptEvent.java => player/PlayerFillsBucketScriptEvent.java} (92%) rename src/main/java/net/aufdemrand/denizen/events/world/{InvPicksUpItemScriptEvent.java => InventoryPicksUpItemScriptEvent.java} (90%) diff --git a/src/main/java/net/aufdemrand/denizen/Denizen.java b/src/main/java/net/aufdemrand/denizen/Denizen.java index bad8bc864e..aaa1894aad 100644 --- a/src/main/java/net/aufdemrand/denizen/Denizen.java +++ b/src/main/java/net/aufdemrand/denizen/Denizen.java @@ -587,26 +587,25 @@ public void onEnable() { ScriptEvent.registerScriptEvent(new BlockFallsScriptEvent()); ScriptEvent.registerScriptEvent(new BlockFormsScriptEvent()); ScriptEvent.registerScriptEvent(new BlockGrowsScriptEvent()); - ScriptEvent.registerScriptEvent(new BlockSpreadsScriptEvent()); ScriptEvent.registerScriptEvent(new BlockIgnitesScriptEvent()); ScriptEvent.registerScriptEvent(new BlockPhysicsScriptEvent()); + ScriptEvent.registerScriptEvent(new BlockSpreadsScriptEvent()); ScriptEvent.registerScriptEvent(new BrewsScriptEvent()); - ScriptEvent.registerScriptEvent(new BucketEmptyScriptEvent()); - ScriptEvent.registerScriptEvent(new BucketFillScriptEvent()); ScriptEvent.registerScriptEvent(new ChatScriptEvent()); ScriptEvent.registerScriptEvent(new ChunkLoadScriptEvent()); ScriptEvent.registerScriptEvent(new ChunkUnloadScriptEvent()); ScriptEvent.registerScriptEvent(new CreeperPoweredScriptEvent()); ScriptEvent.registerScriptEvent(new EntityBreaksHangingScriptEvent()); ScriptEvent.registerScriptEvent(new EntityChangesBlockScriptEvent()); - ScriptEvent.registerScriptEvent(new EntityCreatePortalScriptEvent()); ScriptEvent.registerScriptEvent(new EntityCombustsScriptEvent()); + ScriptEvent.registerScriptEvent(new EntityCreatePortalScriptEvent()); ScriptEvent.registerScriptEvent(new EntityDamagedScriptEvent()); ScriptEvent.registerScriptEvent(new EntityDeathScriptEvent()); ScriptEvent.registerScriptEvent(new EntityDespawnScriptEvent()); ScriptEvent.registerScriptEvent(new EntityEntersPortalScriptEvent()); ScriptEvent.registerScriptEvent(new EntityEntersVehicleScriptEvent()); ScriptEvent.registerScriptEvent(new EntityExitsPortalScriptEvent()); + ScriptEvent.registerScriptEvent(new EntityExitsVehicleScriptEvent()); ScriptEvent.registerScriptEvent(new EntityExplodesScriptEvent()); ScriptEvent.registerScriptEvent(new EntityExplosionPrimesScriptEvent()); ScriptEvent.registerScriptEvent(new EntityFoodLevelChangeScriptEvent()); @@ -614,7 +613,6 @@ public void onEnable() { ScriptEvent.registerScriptEvent(new EntityHealsScriptEvent()); ScriptEvent.registerScriptEvent(new EntityInteractScriptEvent()); ScriptEvent.registerScriptEvent(new EntityKilledScriptEvent()); - ScriptEvent.registerScriptEvent(new EntityExitsVehicleScriptEvent()); ScriptEvent.registerScriptEvent(new EntityShootsBowEvent()); ScriptEvent.registerScriptEvent(new EntitySpawnScriptEvent()); ScriptEvent.registerScriptEvent(new EntityTamesScriptEvent()); @@ -626,7 +624,8 @@ public void onEnable() { ScriptEvent.registerScriptEvent(new FurnaceSmeltsItemScriptEvent()); ScriptEvent.registerScriptEvent(new HangingBreaksScriptEvent()); ScriptEvent.registerScriptEvent(new HorseJumpsScriptEvent()); - ScriptEvent.registerScriptEvent(new InvPicksUpItemScriptEvent()); + ScriptEvent.registerScriptEvent(new InventoryPicksUpItemScriptEvent()); + ScriptEvent.registerScriptEvent(new ItemCraftedScriptEvent()); ScriptEvent.registerScriptEvent(new ItemDespawnsScriptEvent()); ScriptEvent.registerScriptEvent(new ItemEnchantedScriptEvent()); ScriptEvent.registerScriptEvent(new ItemMergesScriptEvent()); @@ -647,14 +646,14 @@ public void onEnable() { ScriptEvent.registerScriptEvent(new PlayerChangesSignScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerChangesWorldScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerChangesXPScriptEvent()); - ScriptEvent.registerScriptEvent(new PlayerRightClicksAtEntityScriptEvent()); - ScriptEvent.registerScriptEvent(new PlayerRightClicksEntityScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerClosesInvScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerConsumesScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerDamagesBlockScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerDragsInInvScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerDropsItemScriptEvent()); + ScriptEvent.registerScriptEvent(new PlayerEmptiesBucketScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerEntersBedScriptEvent()); + ScriptEvent.registerScriptEvent(new PlayerFillsBucketScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerFishesScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerFlyingScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerItemTakesDamageScriptEvent()); @@ -672,6 +671,8 @@ public void onEnable() { ScriptEvent.registerScriptEvent(new PlayerQuitsScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerReceivesMessageScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerRespawnsScriptEvent()); + ScriptEvent.registerScriptEvent(new PlayerRightClicksAtEntityScriptEvent()); + ScriptEvent.registerScriptEvent(new PlayerRightClicksEntityScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerShearsScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerSneakScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerSprintScriptEvent()); @@ -683,16 +684,16 @@ public void onEnable() { ScriptEvent.registerScriptEvent(new PlayerWalkScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerWalksOverScriptEvent()); ScriptEvent.registerScriptEvent(new PortalCreateScriptEvent()); + ScriptEvent.registerScriptEvent(new PotionSplashScriptEvent()); ScriptEvent.registerScriptEvent(new ProjectileHitsScriptEvent()); ScriptEvent.registerScriptEvent(new ProjectileLaunchedScriptEvent()); - ScriptEvent.registerScriptEvent(new PotionSplashScriptEvent()); ScriptEvent.registerScriptEvent(new RedstoneScriptEvent()); ScriptEvent.registerScriptEvent(new ResourcePackStatusScriptEvent()); ScriptEvent.registerScriptEvent(new SheepDyedScriptEvent()); ScriptEvent.registerScriptEvent(new SheepRegrowsScriptEvent()); + ScriptEvent.registerScriptEvent(new SlimeSplitsScriptEvent()); ScriptEvent.registerScriptEvent(new SpawnChangeScriptEvent()); ScriptEvent.registerScriptEvent(new StructureGrowsScriptEvent()); - ScriptEvent.registerScriptEvent(new SlimeSplitsScriptEvent()); ScriptEvent.registerScriptEvent(new VehicleCollidesBlockScriptEvent()); ScriptEvent.registerScriptEvent(new VehicleCollidesEntityScriptEvent()); ScriptEvent.registerScriptEvent(new VehicleCreatedScriptEvent()); diff --git a/src/main/java/net/aufdemrand/denizen/events/player/ItemCraftedScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/player/ItemCraftedScriptEvent.java new file mode 100644 index 0000000000..1354f42569 --- /dev/null +++ b/src/main/java/net/aufdemrand/denizen/events/player/ItemCraftedScriptEvent.java @@ -0,0 +1,140 @@ +package net.aufdemrand.denizen.events.player; + +import net.aufdemrand.denizen.BukkitScriptEntryData; +import net.aufdemrand.denizen.events.BukkitScriptEvent; +import net.aufdemrand.denizen.objects.dInventory; +import net.aufdemrand.denizen.objects.dItem; +import net.aufdemrand.denizen.objects.dPlayer; +import net.aufdemrand.denizen.utilities.DenizenAPI; +import net.aufdemrand.denizencore.objects.dList; +import net.aufdemrand.denizencore.objects.dObject; +import net.aufdemrand.denizencore.scripts.ScriptEntryData; +import net.aufdemrand.denizencore.scripts.containers.ScriptContainer; +import net.aufdemrand.denizencore.utilities.CoreUtilities; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.PrepareItemCraftEvent; +import org.bukkit.inventory.CraftingInventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; + +// <--[event] +// @Events +// item crafted +// crafted +// crafted +// +// @Regex ^on [^\s]+ crafted$ +// +// @Cancellable true +// +// @Triggers when an item's recipe is correctly formed. +// @Context +// returns the dInventory of the crafting inventory. +// returns the dItem to be crafted. +// returns a dList of dItems in the recipe. +// +// @Determine +// dItem to change the item that is crafted. +// +// --> + +public class ItemCraftedScriptEvent extends BukkitScriptEvent implements Listener { + + public ItemCraftedScriptEvent() { + instance = this; + } + + public static ItemCraftedScriptEvent instance; + public PrepareItemCraftEvent event; + public dItem result; + public dList recipe; + public CraftingInventory inventory; + + @Override + public boolean couldMatch(ScriptContainer scriptContainer, String s) { + return CoreUtilities.getXthArg(1, CoreUtilities.toLowerCase(s)).equals("crafted"); + } + + @Override + public boolean matches(ScriptContainer scriptContainer, String s) { + String lower = CoreUtilities.toLowerCase(s); + String eItem = CoreUtilities.getXthArg(0, lower); + + if (!tryItem(result, eItem)) { + return false; + } + + return true; + } + + @Override + public String getName() { + return "ItemCrafted"; + } + + @Override + public void init() { + Bukkit.getServer().getPluginManager().registerEvents(this, DenizenAPI.getCurrentInstance()); + } + + @Override + public void destroy() { + PrepareItemCraftEvent.getHandlerList().unregister(this); + } + + @Override + public boolean applyDetermination(ScriptContainer container, String determination) { + if (dItem.matches(determination)) { + inventory.setResult(dItem.valueOf(determination).getItemStack()); + } + + return super.applyDetermination(container, determination); + } + + @Override + public ScriptEntryData getScriptEntryData() { + return new BukkitScriptEntryData(dPlayer.mirrorBukkitPlayer((Player) event.getView().getPlayer()), null); + } + + @Override + public dObject getContext(String name) { + if (name.equals("item")) { + return result; + } + else if (name.equals("inventory")) { + return new dInventory(inventory); + } + else if (name.equals("recipe")) { + return recipe; + } + return super.getContext(name); + } + + @EventHandler + public void onItemCrafted(PrepareItemCraftEvent event) { + Recipe eRecipe = event.getRecipe(); + if (eRecipe == null || eRecipe.getResult() == null) { + return; + } + inventory = event.getInventory(); + result = new dItem(eRecipe.getResult()); + recipe = new dList(); + for (ItemStack itemStack : inventory.getMatrix()) { + if (itemStack != null) { + recipe.add(new dItem(itemStack).identify()); + } + else { + recipe.add(new dItem(Material.AIR).identify()); + } + } + this.event = event; + fire(); + if (cancelled) { + inventory.setResult(null); + } + } +} diff --git a/src/main/java/net/aufdemrand/denizen/events/player/PlayerChangesGamemodeScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/player/PlayerChangesGamemodeScriptEvent.java index 37680661ce..ce6274222f 100644 --- a/src/main/java/net/aufdemrand/denizen/events/player/PlayerChangesGamemodeScriptEvent.java +++ b/src/main/java/net/aufdemrand/denizen/events/player/PlayerChangesGamemodeScriptEvent.java @@ -21,6 +21,7 @@ public class PlayerChangesGamemodeScriptEvent extends BukkitScriptEvent implemen // player changes gamemode (to ) // // @Regex ^on player changes gamemode( to [^\s]+)?$ + // // @Cancellable true // // @Triggers when a player's gamemode is changed. diff --git a/src/main/java/net/aufdemrand/denizen/events/world/BucketEmptyScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/player/PlayerEmptiesBucketScriptEvent.java similarity index 92% rename from src/main/java/net/aufdemrand/denizen/events/world/BucketEmptyScriptEvent.java rename to src/main/java/net/aufdemrand/denizen/events/player/PlayerEmptiesBucketScriptEvent.java index 12273e7734..49a33e272e 100644 --- a/src/main/java/net/aufdemrand/denizen/events/world/BucketEmptyScriptEvent.java +++ b/src/main/java/net/aufdemrand/denizen/events/player/PlayerEmptiesBucketScriptEvent.java @@ -1,4 +1,4 @@ -package net.aufdemrand.denizen.events.world; +package net.aufdemrand.denizen.events.player; import net.aufdemrand.denizen.BukkitScriptEntryData; import net.aufdemrand.denizen.events.BukkitScriptEvent; @@ -16,7 +16,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerBucketEmptyEvent; -public class BucketEmptyScriptEvent extends BukkitScriptEvent implements Listener { +public class PlayerEmptiesBucketScriptEvent extends BukkitScriptEvent implements Listener { // <--[event] // @Events @@ -37,11 +37,11 @@ public class BucketEmptyScriptEvent extends BukkitScriptEvent implements Listene // --> - public BucketEmptyScriptEvent() { + public PlayerEmptiesBucketScriptEvent() { instance = this; } - public static BucketEmptyScriptEvent instance; + public static PlayerEmptiesBucketScriptEvent instance; public dEntity entity; public dItem item; @@ -67,7 +67,7 @@ public boolean matches(ScriptContainer scriptContainer, String s) { @Override public String getName() { - return "BucketEmpty"; + return "PlayerEmptiesBucket"; } @Override diff --git a/src/main/java/net/aufdemrand/denizen/events/world/BucketFillScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/player/PlayerFillsBucketScriptEvent.java similarity index 92% rename from src/main/java/net/aufdemrand/denizen/events/world/BucketFillScriptEvent.java rename to src/main/java/net/aufdemrand/denizen/events/player/PlayerFillsBucketScriptEvent.java index d7f7bd1b08..ddf43031c8 100644 --- a/src/main/java/net/aufdemrand/denizen/events/world/BucketFillScriptEvent.java +++ b/src/main/java/net/aufdemrand/denizen/events/player/PlayerFillsBucketScriptEvent.java @@ -1,4 +1,4 @@ -package net.aufdemrand.denizen.events.world; +package net.aufdemrand.denizen.events.player; import net.aufdemrand.denizen.BukkitScriptEntryData; import net.aufdemrand.denizen.events.BukkitScriptEvent; @@ -16,7 +16,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerBucketFillEvent; -public class BucketFillScriptEvent extends BukkitScriptEvent implements Listener { +public class PlayerFillsBucketScriptEvent extends BukkitScriptEvent implements Listener { // <--[event] // @Events @@ -37,17 +37,16 @@ public class BucketFillScriptEvent extends BukkitScriptEvent implements Listener // --> - public BucketFillScriptEvent() { + public PlayerFillsBucketScriptEvent() { instance = this; } - public static BucketFillScriptEvent instance; + public static PlayerFillsBucketScriptEvent instance; public dEntity entity; public dItem item; public dMaterial material; public dLocation location; - public dLocation relative; public PlayerBucketFillEvent event; @@ -67,7 +66,7 @@ public boolean matches(ScriptContainer scriptContainer, String s) { @Override public String getName() { - return "BucketFill"; + return "PlayerFillsBucket"; } @Override diff --git a/src/main/java/net/aufdemrand/denizen/events/world/ChunkUnloadScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/world/ChunkUnloadScriptEvent.java index fd374c9114..b5e3ca4b91 100644 --- a/src/main/java/net/aufdemrand/denizen/events/world/ChunkUnloadScriptEvent.java +++ b/src/main/java/net/aufdemrand/denizen/events/world/ChunkUnloadScriptEvent.java @@ -19,7 +19,7 @@ public class ChunkUnloadScriptEvent extends ScriptEvent implements Listener { // @Events // chunk unloads (in ) // - // @Regex ^on player unloads( in [^\s]+)?$ + // @Regex ^on chunk unloads( in [^\s]+)?$ // // @Warning This event will fire *extremely* rapidly and often! // diff --git a/src/main/java/net/aufdemrand/denizen/events/world/InvPicksUpItemScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/world/InventoryPicksUpItemScriptEvent.java similarity index 90% rename from src/main/java/net/aufdemrand/denizen/events/world/InvPicksUpItemScriptEvent.java rename to src/main/java/net/aufdemrand/denizen/events/world/InventoryPicksUpItemScriptEvent.java index 3d5ac008d1..ddd2ee44db 100644 --- a/src/main/java/net/aufdemrand/denizen/events/world/InvPicksUpItemScriptEvent.java +++ b/src/main/java/net/aufdemrand/denizen/events/world/InventoryPicksUpItemScriptEvent.java @@ -12,7 +12,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryPickupItemEvent; -public class InvPicksUpItemScriptEvent extends BukkitScriptEvent implements Listener { +public class InventoryPicksUpItemScriptEvent extends BukkitScriptEvent implements Listener { // TODO: Add in // <--[event] @@ -34,11 +34,11 @@ public class InvPicksUpItemScriptEvent extends BukkitScriptEvent implements List // // --> - public InvPicksUpItemScriptEvent() { + public InventoryPicksUpItemScriptEvent() { instance = this; } - public static InvPicksUpItemScriptEvent instance; + public static InventoryPicksUpItemScriptEvent instance; public dInventory inventory; public dItem item; public InventoryPickupItemEvent event; @@ -69,7 +69,7 @@ public boolean matches(ScriptContainer scriptContainer, String s) { @Override public String getName() { - return "InvPicksUpItem"; + return "InventoryPicksUpItem"; } @Override diff --git a/src/main/java/net/aufdemrand/denizen/scripts/containers/core/BukkitWorldScriptHelper.java b/src/main/java/net/aufdemrand/denizen/scripts/containers/core/BukkitWorldScriptHelper.java index f2cd6ba7c1..148ac5fed2 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/containers/core/BukkitWorldScriptHelper.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/containers/core/BukkitWorldScriptHelper.java @@ -142,72 +142,6 @@ public void timeEvent() { // INVENTORY EVENTS ///////////////// - // <--[event] - // @Events - // item crafted - // crafted - // crafted - // - // @Regex ^on [^\s]+ crafted$ - // - // @Triggers when an item's recipe is correctly formed. - // @Context - // returns the dInventory of the crafting inventory. - // returns the dItem to be crafted. - // returns a dList of dItems in the recipe. - // - // @Determine - // "CANCELLED" to stop the item from being crafted. - // dItem to change the item that is crafted. - // - // --> - @EventHandler - public void craftItemEvent(PrepareItemCraftEvent event) { - Map context = new HashMap(); - List events = new ArrayList(); - events.add("item crafted"); - - CraftingInventory inventory = event.getInventory(); - context.put("inventory", new dInventory(inventory)); - - Recipe recipe = event.getRecipe(); - if (recipe == null) { - return; - } - dItem result = recipe.getResult() != null ? new dItem(recipe.getResult()) : null; - if (result != null) { - context.put("item", result); - events.add(result.identifySimple() + " crafted"); - events.add(result.identifyMaterial() + " crafted"); - events.add(result.identifySimpleNoIdentifier() + " crafted"); - events.add(result.identifyMaterialNoIdentifier() + " crafted"); - } - - dList recipeList = new dList(); - for (ItemStack item : inventory.getMatrix()) { - if (item != null) { - recipeList.add(new dItem(item).identify()); - } - else { - recipeList.add(new dItem(Material.AIR).identify()); - } - } - context.put("recipe", recipeList); - - Player player = (Player) event.getView().getPlayer(); - - String determination = doEvents(events, null, dEntity.getPlayerFrom(player), context); - - if (determination.toUpperCase().startsWith("CANCELLED")) { - inventory.setResult(null); - player.updateInventory(); - } - else if (dItem.matches(determination)) { - inventory.setResult(dItem.valueOf(determination).getItemStack()); - player.updateInventory(); - } - } - // <--[language] // @Name Inventory Actions // @Group Useful Lists