diff --git a/src/main/java/net/aufdemrand/denizen/Denizen.java b/src/main/java/net/aufdemrand/denizen/Denizen.java index a76c3efd4a..4e648336eb 100644 --- a/src/main/java/net/aufdemrand/denizen/Denizen.java +++ b/src/main/java/net/aufdemrand/denizen/Denizen.java @@ -567,7 +567,6 @@ public void onEnable() { eventManager = new OldEventManager(); // Register all the 'Core' SmartEvents. - OldEventManager.registerSmartEvent(new ChunkLoadSmartEvent()); OldEventManager.registerSmartEvent(new ChunkUnloadSmartEvent()); OldEventManager.registerSmartEvent(new CommandSmartEvent()); OldEventManager.registerSmartEvent(new CuboidEnterExitSmartEvent()); @@ -595,6 +594,7 @@ public void onEnable() { ScriptEvent.registerScriptEvent(new BucketEmptyScriptEvent()); ScriptEvent.registerScriptEvent(new BucketFillScriptEvent()); ScriptEvent.registerScriptEvent(new ChatScriptEvent()); + ScriptEvent.registerScriptEvent(new ChunkLoadScriptEvent()); ScriptEvent.registerScriptEvent(new EntityDespawnScriptEvent()); ScriptEvent.registerScriptEvent(new EntityTeleportScriptEvent()); ScriptEvent.registerScriptEvent(new LiquidSpreadScriptEvent()); diff --git a/src/main/java/net/aufdemrand/denizen/events/core/ChunkLoadSmartEvent.java b/src/main/java/net/aufdemrand/denizen/events/core/ChunkLoadSmartEvent.java deleted file mode 100644 index 360335f82e..0000000000 --- a/src/main/java/net/aufdemrand/denizen/events/core/ChunkLoadSmartEvent.java +++ /dev/null @@ -1,87 +0,0 @@ -package net.aufdemrand.denizen.events.core; - -import net.aufdemrand.denizen.scripts.containers.core.BukkitWorldScriptHelper; -import net.aufdemrand.denizencore.events.OldSmartEvent; -import net.aufdemrand.denizen.objects.*; -import net.aufdemrand.denizencore.objects.*; -import net.aufdemrand.denizen.utilities.DenizenAPI; -import net.aufdemrand.denizen.utilities.debugging.dB; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.world.ChunkLoadEvent; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class ChunkLoadSmartEvent implements OldSmartEvent, Listener { - - - /////////////////// - // SMARTEVENT METHODS - /////////////// - - - @Override - public boolean shouldInitialize(Set events) { - - // Loop through event names from loaded world script events - for (String event : events) { - - // Use a regex pattern to narrow down matches - Matcher m = Pattern.compile("on chunk loads for the first time( in (w@)?\\w+)?", Pattern.CASE_INSENSITIVE) - .matcher(event); - - if (m.matches()) { - // Event names are simple enough to just go ahead and pass on any match. - return true; - } - } - // No matches at all, just fail. - return false; - } - - - @Override - public void _initialize() { - DenizenAPI.getCurrentInstance().getServer().getPluginManager() - .registerEvents(this, DenizenAPI.getCurrentInstance()); - dB.log("Loaded Chunk Load SmartEvent."); - } - - - @Override - public void breakDown() { - ChunkLoadEvent.getHandlerList().unregister(this); - } - - ////////////// - // MECHANICS - /////////// - - // <--[event] - // @Events - // chunk loads for the first time (in ) - // - // @Warning This event will fire *extremely* rapidly and often! - // - // @Triggers when a new chunk is loaded - // @Context - // returns the loading chunk. - // - // --> - @EventHandler - public void onChunkLoad(ChunkLoadEvent event) { - if (!event.isNewChunk()) return; - Map context = new HashMap(); - dWorld world = new dWorld(event.getWorld()); - context.put("chunk", new dChunk(event.getChunk())); - context.put("world", world); // Deprecated in favor of context.chunk.world - String determination = BukkitWorldScriptHelper.doEvents(Arrays.asList("chunk loads for the first time", - "chunk loads for the first time in " + world.identify()), null, null, context, true); - // TODO: Find way to cancel this?... may not be reasonably possible. - } -} diff --git a/src/main/java/net/aufdemrand/denizen/events/scriptevents/ChunkLoadScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/scriptevents/ChunkLoadScriptEvent.java new file mode 100644 index 0000000000..8b91e4ec57 --- /dev/null +++ b/src/main/java/net/aufdemrand/denizen/events/scriptevents/ChunkLoadScriptEvent.java @@ -0,0 +1,89 @@ +package net.aufdemrand.denizen.events.scriptevents; + +import net.aufdemrand.denizen.objects.dChunk; +import net.aufdemrand.denizen.objects.dWorld; // Deprecated in favor of context.chunk.world +import net.aufdemrand.denizen.utilities.DenizenAPI; +import net.aufdemrand.denizencore.events.ScriptEvent; +import net.aufdemrand.denizencore.objects.dObject; +import net.aufdemrand.denizencore.scripts.containers.ScriptContainer; +import net.aufdemrand.denizencore.utilities.CoreUtilities; + +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.world.ChunkLoadEvent; + +import java.util.HashMap; + +public class ChunkLoadScriptEvent extends ScriptEvent implements Listener { + + // <--[event] + // @Events + // chunk loads for the first time (in ) + // + // @Warning This event will fire *extremely* rapidly and often! + // + // @Triggers when a new chunk is loaded + // + // @Context + // returns the loading chunk. + // + // --> + + public ChunkLoadScriptEvent() { + instance = this; + } + public static ChunkLoadScriptEvent instance; + public dChunk chunk; + public dWorld world; // Deprecated in favor of context.chunk.world + public ChunkLoadEvent event; + + @Override + public boolean couldMatch(ScriptContainer scriptContainer, String s) { + String lower = CoreUtilities.toLowerCase(s); + return lower.startsWith("chunk loads"); + } + + @Override + public boolean matches(ScriptContainer scriptContainer, String s) { + String lower = CoreUtilities.toLowerCase(s); + return lower.equals("chunk loads for the first time") + || lower.equals("chunk loads for the first time in " + dWorld.mirrorBukkitWorld(event.getWorld()).getName().toLowerCase()); + } + + @Override + public String getName() { + return "ChunkLoads"; + } + + @Override + public void init() { + Bukkit.getServer().getPluginManager().registerEvents(this, DenizenAPI.getCurrentInstance()); + } + + @Override + public void destroy() { + ChunkLoadEvent.getHandlerList().unregister(this); + } + + @Override + public boolean applyDetermination(ScriptContainer container, String determination) { + return super.applyDetermination(container, determination); + } + + @Override + public HashMap getContext() { + HashMap context = super.getContext(); + context.put("chunk", chunk); + context.put("world", world); // Deprecated in favor of context.chunk.world + return context; + } + + @EventHandler + public void onChunkLoad(ChunkLoadEvent event) { + chunk = new dChunk(event.getChunk()); + world = new dWorld(event.getWorld()); // Deprecated in favor of context.chunk.world + this.event = event; + fire(); + } +}