From 6c1bd25ae9f6b15e4609f77e48b0db934be92c96 Mon Sep 17 00:00:00 2001 From: Olof Larsson Date: Thu, 25 Feb 2016 22:28:55 +0100 Subject: [PATCH] MassiveCore - MassivePlugin and Active --- src/com/massivecraft/massivecore/Active.java | 11 ++ src/com/massivecraft/massivecore/Engine.java | 160 ++++++++++++++- .../massivecore/EngineAbstract.java | 102 ---------- .../massivecraft/massivecore/Integration.java | 185 ++++++++++++++++++ .../massivecraft/massivecore/MassiveCore.java | 109 ++++------- .../massivecore/MassiveCoreMConf.java | 4 - .../massivecore/MassiveCoreMConfColl.java | 7 +- .../massivecore/MassivePlugin.java | 26 ++- .../massivecore/ModuloRepeatTask.java | 2 +- .../massivecore/MultiverseColl.java | 6 +- .../massivecore/command/MassiveCommand.java | 60 +++++- .../command/MassiveCoreBukkitCommand.java | 2 +- .../command/massivecore/CmdMassiveCore.java | 20 ++ .../massivecore/CmdMassiveCoreBuffer.java | 10 + .../massivecore/CmdMassiveCoreCmdurl.java | 8 + .../massivecore/CmdMassiveCoreStore.java | 10 + .../massivecore/CmdMassiveCoreUsys.java | 10 + .../engine/EngineMassiveCoreChestGui.java | 17 +- .../engine/EngineMassiveCoreCollTick.java | 25 +-- .../EngineMassiveCoreCommandRegistration.java | 22 +-- .../engine/EngineMassiveCoreDatabase.java | 22 +-- .../engine/EngineMassiveCoreDestination.java | 17 +- .../engine/EngineMassiveCoreGank.java | 18 +- .../engine/EngineMassiveCoreMain.java | 22 +-- .../engine/EngineMassiveCorePlayerLeave.java | 21 +- .../engine/EngineMassiveCorePlayerState.java | 16 +- .../engine/EngineMassiveCorePlayerUpdate.java | 17 +- .../EngineMassiveCoreScheduledTeleport.java | 23 +-- .../EngineMassiveCoreTeleportMixinCause.java | 17 +- .../engine/EngineMassiveCoreVariable.java | 17 +- .../engine/EngineMassiveCoreWorldNameSet.java | 17 +- .../massivecore/integration/Integration.java | 10 - .../integration/IntegrationAbstract.java | 46 ----- .../integration/IntegrationGlue.java | 121 ------------ .../integration/vault/IntegrationVault.java | 26 +-- .../predicate/PredicateIntegration.java | 76 +++++++ .../massivecraft/massivecore/store/Coll.java | 94 +++++---- .../massivecore/store/CollInterface.java | 16 +- .../massivecraft/massivecore/store/Colls.java | 50 ++++- .../massivecore/store/Entity.java | 2 +- .../massivecore/store/SenderColl.java | 4 +- .../massivecore/util/PlayerUtil.java | 27 +-- 42 files changed, 768 insertions(+), 707 deletions(-) create mode 100644 src/com/massivecraft/massivecore/Active.java delete mode 100644 src/com/massivecraft/massivecore/EngineAbstract.java create mode 100644 src/com/massivecraft/massivecore/Integration.java delete mode 100644 src/com/massivecraft/massivecore/integration/Integration.java delete mode 100644 src/com/massivecraft/massivecore/integration/IntegrationAbstract.java delete mode 100644 src/com/massivecraft/massivecore/integration/IntegrationGlue.java create mode 100644 src/com/massivecraft/massivecore/predicate/PredicateIntegration.java diff --git a/src/com/massivecraft/massivecore/Active.java b/src/com/massivecraft/massivecore/Active.java new file mode 100644 index 00000000..e3ba4fb2 --- /dev/null +++ b/src/com/massivecraft/massivecore/Active.java @@ -0,0 +1,11 @@ +package com.massivecraft.massivecore; + +public interface Active +{ + public boolean isActive(); + public void setActive(boolean active); + + public MassivePlugin setActivePlugin(MassivePlugin plugin); + public MassivePlugin getActivePlugin(); + +} diff --git a/src/com/massivecraft/massivecore/Engine.java b/src/com/massivecraft/massivecore/Engine.java index 05092894..eae3da98 100644 --- a/src/com/massivecraft/massivecore/Engine.java +++ b/src/com/massivecraft/massivecore/Engine.java @@ -1,22 +1,162 @@ package com.massivecraft.massivecore; +import org.bukkit.Bukkit; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; -import org.bukkit.plugin.Plugin; +import org.bukkit.event.block.BlockMultiPlaceEvent; +import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.scheduler.BukkitTask; -public interface Engine extends Listener, Runnable +import com.massivecraft.massivecore.predicate.PredicateStartsWithIgnoreCase; + +public abstract class Engine implements Active, Listener, Runnable { - public Plugin getPlugin(); + // -------------------------------------------- // + // PLUGIN + // -------------------------------------------- // - public void activate(); - public void deactivate(); + private MassivePlugin plugin = null; + public MassivePlugin getPlugin() { return this.plugin; } + public boolean hasPlugin() { return this.getPlugin() != null; } + public void setPlugin(MassivePlugin plugin) { this.plugin = plugin; } + public void setPluginSoft(MassivePlugin plugin) + { + if (this.hasPlugin()) return; + this.plugin = plugin; + } - public Long getDelay(); - public Long getPeriod(); + // -------------------------------------------- // + // TASK + // -------------------------------------------- // - public Integer getTaskId(); + private Long delay = 0L; + public Long getDelay() { return this.delay; } + public void setDelay(Long delay) { this.delay = delay; } - public BukkitTask getBukkitTask(); - public boolean isSync(); + private Long period = null; + public Long getPeriod() { return this.period; } + public void setPeriod(Long period) { this.period = period; } + + private boolean sync = true; + public boolean isSync() { return this.sync; } + public void setSync(boolean sync) { this.sync = sync; } + + private BukkitTask task = null; + public BukkitTask getTask() { return this.task; } + public Integer getTaskId() { return this.task == null ? null : this.task.getTaskId(); } + + @Override + public void run() + { + + } + + // -------------------------------------------- // + // ACTIVE + // -------------------------------------------- // + + private boolean active = false; + + @Override + public boolean isActive() + { + return this.active; + } + + @Override + public void setActive(boolean active) + { + this.setActiveListener(active); + this.setActiveTask(active); + this.setActiveInner(active); + this.active = active; + } + + @Override + public MassivePlugin setActivePlugin(MassivePlugin activePlugin) + { + this.setPluginSoft(activePlugin); + return null; + } + + @Override + public MassivePlugin getActivePlugin() + { + return this.getPlugin(); + } + + // -------------------------------------------- // + // ACTIVE > EVENTS + // -------------------------------------------- // + + public void setActiveListener(boolean active) + { + if (active) + { + Bukkit.getPluginManager().registerEvents(this, this.getPlugin()); + } + else + { + HandlerList.unregisterAll(this); + } + } + + // -------------------------------------------- // + // ACTIVE > TASK + // -------------------------------------------- // + + public void setActiveTask(boolean active) + { + if (active) + { + if (this.getPeriod() != null) + { + if (this.isSync()) + { + Bukkit.getScheduler().runTaskTimer(this.getPlugin(), this, this.getDelay(), this.getPeriod()); + } + else + { + Bukkit.getScheduler().runTaskTimerAsynchronously(this.getPlugin(), this, this.getDelay(), this.getPeriod()); + } + } + } + else + { + if (this.task != null) + { + this.task.cancel(); + this.task = null; + } + } + } + + // -------------------------------------------- // + // ACTIVE > INNER + // -------------------------------------------- // + + public void setActiveInner(boolean active) + { + // NOTE: Here you can add some extra custom logic. + } + + // -------------------------------------------- // + // UTIL + // -------------------------------------------- // + + public static final PredicateStartsWithIgnoreCase STARTING_WITH_FAKE = PredicateStartsWithIgnoreCase.get("fake"); + public static boolean isFake(Event event) + { + final Class clazz = event.getClass(); + if (event instanceof BlockPlaceEvent) + { + return ! BlockPlaceEvent.class.equals(clazz) && ! BlockMultiPlaceEvent.class.equals(clazz); + } + else + { + return STARTING_WITH_FAKE.apply(clazz.getSimpleName()); + } + } } diff --git a/src/com/massivecraft/massivecore/EngineAbstract.java b/src/com/massivecraft/massivecore/EngineAbstract.java deleted file mode 100644 index 96227d56..00000000 --- a/src/com/massivecraft/massivecore/EngineAbstract.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.massivecraft.massivecore; - -import org.bukkit.Bukkit; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.bukkit.event.block.BlockMultiPlaceEvent; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.scheduler.BukkitTask; - -import com.massivecraft.massivecore.predicate.PredicateStartsWithIgnoreCase; - -public abstract class EngineAbstract implements Engine -{ - // -------------------------------------------- // - // FIELDS - // -------------------------------------------- // - - private BukkitTask task; - @Override public Integer getTaskId() { return this.task.getTaskId(); } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public void activate() - { - Bukkit.getPluginManager().registerEvents(this, this.getPlugin()); - if (this.getPeriod() != null) - { - if (this.isSync()) - { - Bukkit.getScheduler().runTaskTimer(this.getPlugin(), this, this.getDelay(), this.getPeriod()); - } - else - { - Bukkit.getScheduler().runTaskTimerAsynchronously(this.getPlugin(), this, this.getDelay(), this.getPeriod()); - } - } - } - - @Override - public void deactivate() - { - HandlerList.unregisterAll(this); - if (this.task != null) - { - this.task.cancel(); - this.task = null; - } - } - - @Override - public Long getDelay() - { - return 0L; - } - - @Override - public Long getPeriod() - { - return null; - } - - @Override - public void run() - { - - } - - @Override - public BukkitTask getBukkitTask() - { - return this.task; - } - - @Override - public boolean isSync() - { - return true; - } - - // -------------------------------------------- // - // FAKE - // -------------------------------------------- // - - public static final PredicateStartsWithIgnoreCase STARTING_WITH_FAKE = PredicateStartsWithIgnoreCase.get("fake"); - - public static boolean isFake(Event event) - { - final Class clazz = event.getClass(); - if (event instanceof BlockPlaceEvent) - { - return ! BlockPlaceEvent.class.equals(clazz) && ! BlockMultiPlaceEvent.class.equals(clazz); - } - else - { - return STARTING_WITH_FAKE.apply(clazz.getSimpleName()); - } - } - -} diff --git a/src/com/massivecraft/massivecore/Integration.java b/src/com/massivecraft/massivecore/Integration.java new file mode 100644 index 00000000..7d7c42a2 --- /dev/null +++ b/src/com/massivecraft/massivecore/Integration.java @@ -0,0 +1,185 @@ +package com.massivecraft.massivecore; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.server.PluginDisableEvent; +import org.bukkit.event.server.PluginEnableEvent; + +import com.massivecraft.massivecore.collections.MassiveList; +import com.massivecraft.massivecore.predicate.Predicate; +import com.massivecraft.massivecore.predicate.PredicateIntegration; +import com.massivecraft.massivecore.util.Txt; + +public class Integration extends Engine +{ + // -------------------------------------------- // + // NAME + // -------------------------------------------- // + + private String name = null; + public String getName() { return this.name; } + public Integration setName(String name) { this.name = name; return this; } + + // -------------------------------------------- // + // PREDICATE + // -------------------------------------------- // + + private Predicate predicate = PredicateIntegration.get(); + public Predicate getPredicate() { return this.predicate; } + public Integration setPredicate(Predicate predicate) { this.predicate = predicate; return this; } + + private List pluginNames = Collections.emptyList(); + public List getPluginNames() { return this.pluginNames; } + public Integration setPluginNames(Collection pluginNames) { this.pluginNames = new MassiveList<>(pluginNames); return this; } + public Integration setPluginNames(String... pluginNames) { return this.setPluginNames(Arrays.asList(pluginNames)); } + public Integration setPluginName(String pluginName) { return this.setPluginNames(pluginName); } + + private List classNames = Collections.emptyList(); + public List getClassNames() { return this.classNames; } + public Integration setClassNames(Collection classNames) { this.classNames = new MassiveList<>(classNames); return this; } + public Integration setClassNames(String... classNames) { return this.setClassNames(Arrays.asList(classNames)); } + public Integration setClassName(String className) { return this.setClassNames(className); } + + // -------------------------------------------- // + // INTEGRATION ACTIVE + // -------------------------------------------- // + + // NOTE: We must make use of duplicate information to avoid triggering class loads. + private boolean integrationActive = false; + public boolean isIntegrationActive() { return this.integrationActive; } + public void setIntegrationActive(Boolean integrationActive) + { + // Calc + if (integrationActive == null) + { + integrationActive = this.getPredicate().apply(this); + } + + // NoChange + if (this.isIntegrationActive() == integrationActive) return; + + try + { + this.setIntegrationActiveEngines(integrationActive); + this.setIntegrationActiveInner(integrationActive); + + this.integrationActive = integrationActive; + + String message = Txt.parse(integrationActive ? "Activated Integration %s" : "Deactivated Integration %s", this.getName()); + this.getPlugin().log(message); + } + catch (Throwable t) + { + String message = Txt.parse(integrationActive ? "Activating Integration %s FAILED:" : "Deactivating Integration %s FAILED:", this.getName()); + this.getPlugin().log(message); + t.printStackTrace(); + } + } + public void setIntegrationActive() + { + this.setIntegrationActive(null); + } + + // -------------------------------------------- // + // INTEGRATION ACTIVE > ENGINES + // -------------------------------------------- // + + public void setIntegrationActiveEngines(boolean active) + { + for (Engine engine : this.getEngines()) + { + engine.setPluginSoft(this.getPlugin()); + engine.setActive(active); + } + } + + public List getEngines() + { + Engine engine = this.getEngine(); + if (engine == null) return Collections.emptyList(); + return Collections.singletonList(engine); + } + + public Engine getEngine() + { + return null; + } + + // -------------------------------------------- // + // INTEGRATION ACTIVE > INNER + // -------------------------------------------- // + + public void setIntegrationActiveInner(boolean active) + { + + } + + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public Integration() + { + // TODO: Improve upon this one + this.setName(this.getClass().getSimpleName()); + + // TODO: Is this period fine? + this.setPeriod(10L); + } + + // -------------------------------------------- // + // TICK > ACTIVE + // -------------------------------------------- // + + @Override + public void setActiveInner(boolean active) + { + if (active) + { + this.setIntegrationActive(); + } + else + { + this.setIntegrationActive(false); + } + } + + // -------------------------------------------- // + // TICK > RUN + // -------------------------------------------- // + + @Override + public void run() + { + this.setIntegrationActive(); + } + + // -------------------------------------------- // + // TICK > EVENT LISTENERS + // -------------------------------------------- // + + @EventHandler(priority = EventPriority.MONITOR) + public void onPluginDisable(PluginDisableEvent event) + { + if (this.getPlugin().equals(event.getPlugin())) + { + this.setIntegrationActive(false); + } + else + { + this.setIntegrationActive(); + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onPluginEnable(PluginEnableEvent event) + { + this.setIntegrationActive(); + } + +} diff --git a/src/com/massivecraft/massivecore/MassiveCore.java b/src/com/massivecraft/massivecore/MassiveCore.java index 8c852fef..0dab413d 100644 --- a/src/com/massivecraft/massivecore/MassiveCore.java +++ b/src/com/massivecraft/massivecore/MassiveCore.java @@ -1,7 +1,6 @@ package com.massivecraft.massivecore; import java.lang.reflect.Modifier; -import java.util.List; import java.util.Map.Entry; import java.util.Random; import java.util.Set; @@ -97,7 +96,10 @@ public class MassiveCore extends MassivePlugin private static MassiveCore i; public static MassiveCore get() { return i; } - public MassiveCore() { i = this; } + public MassiveCore() + { + i = this; + } // -------------------------------------------- // // STATIC @@ -152,26 +154,6 @@ public class MassiveCore extends MassivePlugin return false; } - // -------------------------------------------- // - // FIELDS - // -------------------------------------------- // - - // Commands - private CmdMassiveCore outerCmdMassiveCore; - public CmdMassiveCore getOuterCmdMassiveCore() { return this.outerCmdMassiveCore; } - - private CmdMassiveCoreUsys outerCmdMassiveCoreUsys; - public CmdMassiveCoreUsys getOuterCmdMassiveCoreUsys() { return this.outerCmdMassiveCoreUsys; } - - private CmdMassiveCoreStore outerCmdMassiveCoreStore; - public CmdMassiveCoreStore getOuterCmdMassiveCoreStore() { return this.outerCmdMassiveCoreStore; } - - private CmdMassiveCoreBuffer outerCmdMassiveCoreBuffer; - public CmdMassiveCoreBuffer getOuterCmdMassiveCoreBuffer() { return this.outerCmdMassiveCoreBuffer; } - - private CmdMassiveCoreCmdurl outerCmdMassiveCoreCmdurl; - public CmdMassiveCoreCmdurl getOuterCmdMassiveCoreCmdurl() { return this.outerCmdMassiveCoreCmdurl; } - // -------------------------------------------- // // OVERRIDE // -------------------------------------------- // @@ -185,7 +167,7 @@ public class MassiveCore extends MassivePlugin } @Override - public void onEnable() + public void onEnableInner() { // This is safe since all plugins using Persist should bukkit-depend this plugin. // Note this one must be before preEnable. dooh. @@ -193,68 +175,57 @@ public class MassiveCore extends MassivePlugin // TODO: Test and ensure reload compat. // Coll.instances.clear(); - if ( ! preEnable()) return; - // Load Server Config ConfServer.get().load(); // Setup IdUtil IdUtil.setup(); - // Engine - EngineMassiveCoreChestGui.get().activate(); - EngineMassiveCoreCollTick.get().activate(); - EngineMassiveCoreCommandRegistration.get().activate(); - EngineMassiveCoreDatabase.get().activate(); - EngineMassiveCoreDestination.get().activate(); - EngineMassiveCoreGank.get().activate(); - EngineMassiveCoreMain.get().activate(); - EngineMassiveCorePlayerLeave.get().activate(); - EngineMassiveCorePlayerState.get().activate(); - EngineMassiveCorePlayerUpdate.get().activate(); - EngineMassiveCoreScheduledTeleport.get().activate(); - EngineMassiveCoreTeleportMixinCause.get().activate(); - EngineMassiveCoreVariable.get().activate(); - EngineMassiveCoreWorldNameSet.get().activate(); + // Activate + this.activate( + // Coll + MultiverseColl.get(), + AspectColl.get(), + MassiveCoreMConfColl.get(), - PlayerUtil.get().activate(); - - // Collections - MultiverseColl.get().init(); - AspectColl.get().init(); - MassiveCoreMConfColl.get().init(); + // Engine + EngineMassiveCoreChestGui.get(), + EngineMassiveCoreCollTick.get(), + EngineMassiveCoreCommandRegistration.get(), + EngineMassiveCoreDatabase.get(), + EngineMassiveCoreDestination.get(), + EngineMassiveCoreGank.get(), + EngineMassiveCoreMain.get(), + EngineMassiveCorePlayerLeave.get(), + EngineMassiveCorePlayerState.get(), + EngineMassiveCorePlayerUpdate.get(), + EngineMassiveCoreScheduledTeleport.get(), + EngineMassiveCoreTeleportMixinCause.get(), + EngineMassiveCoreVariable.get(), + EngineMassiveCoreWorldNameSet.get(), + + // Util + PlayerUtil.get(), + + // Integration + IntegrationVault.get(), + + // Command + CmdMassiveCore.get(), + CmdMassiveCoreUsys.get(), + CmdMassiveCoreStore.get(), + CmdMassiveCoreBuffer.get(), + CmdMassiveCoreCmdurl.get() + ); // Start the examine threads // Start AFTER initializing the MConf, because they rely on the MConf. ModificationPollerLocal.get().start(); ModificationPollerRemote.get().start(); - // Register commands - this.outerCmdMassiveCore = new CmdMassiveCore() { public List getAliases() { return MassiveCoreMConf.get().aliasesOuterMassiveCore; } }; - this.outerCmdMassiveCore.register(this); - - this.outerCmdMassiveCoreUsys = new CmdMassiveCoreUsys() { public List getAliases() { return MassiveCoreMConf.get().aliasesOuterMassiveCoreUsys; } }; - this.outerCmdMassiveCoreUsys.register(this); - - this.outerCmdMassiveCoreStore = new CmdMassiveCoreStore() { public List getAliases() { return MassiveCoreMConf.get().aliasesOuterMassiveCoreStore; } }; - this.outerCmdMassiveCoreStore.register(this); - - this.outerCmdMassiveCoreBuffer = new CmdMassiveCoreBuffer() { public List getAliases() { return MassiveCoreMConf.get().aliasesOuterMassiveCoreBuffer; } }; - this.outerCmdMassiveCoreBuffer.register(this); - - this.outerCmdMassiveCoreCmdurl = new CmdMassiveCoreCmdurl() { public List getAliases() { return MassiveCoreMConf.get().aliasesOuterMassiveCoreCmdurl; } }; - this.outerCmdMassiveCoreCmdurl.register(this); - - // Integration - this.integrate( - IntegrationVault.get() - ); - // Delete Files (at once and additionally after all plugins loaded) MassiveCoreTaskDeleteFiles.get().run(); Bukkit.getScheduler().scheduleSyncDelayedTask(this, MassiveCoreTaskDeleteFiles.get()); - - this.postEnable(); } @Override diff --git a/src/com/massivecraft/massivecore/MassiveCoreMConf.java b/src/com/massivecraft/massivecore/MassiveCoreMConf.java index 0c566ee2..8efdc850 100644 --- a/src/com/massivecraft/massivecore/MassiveCoreMConf.java +++ b/src/com/massivecraft/massivecore/MassiveCoreMConf.java @@ -32,13 +32,9 @@ public class MassiveCoreMConf extends Entity public int maxTabCompletions = 100; public List aliasesOuterMassiveCore = MUtil.list("massivecore", "mcore"); - public List aliasesOuterMassiveCoreUsys = MUtil.list("usys"); - public List aliasesOuterMassiveCoreStore = MUtil.list("massivestore", "mstore"); - public List aliasesOuterMassiveCoreBuffer = MUtil.list("buffer"); - public List aliasesOuterMassiveCoreCmdurl = MUtil.list("cmdurl"); public boolean usingRecipientChatEvent = true; diff --git a/src/com/massivecraft/massivecore/MassiveCoreMConfColl.java b/src/com/massivecraft/massivecore/MassiveCoreMConfColl.java index 0aaa5a89..00f883e7 100644 --- a/src/com/massivecraft/massivecore/MassiveCoreMConfColl.java +++ b/src/com/massivecraft/massivecore/MassiveCoreMConfColl.java @@ -32,9 +32,12 @@ public class MassiveCoreMConfColl extends Coll // -------------------------------------------- // @Override - public void init() + public void setActive(boolean active) { - super.init(); + super.setActive(active); + + if ( ! active) return; + MassiveCoreMConf.i = this.get(MassiveCore.INSTANCE, true); } diff --git a/src/com/massivecraft/massivecore/MassivePlugin.java b/src/com/massivecraft/massivecore/MassivePlugin.java index 6af6fd50..d691d620 100644 --- a/src/com/massivecraft/massivecore/MassivePlugin.java +++ b/src/com/massivecraft/massivecore/MassivePlugin.java @@ -11,8 +11,6 @@ import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; import com.massivecraft.massivecore.command.MassiveCommand; -import com.massivecraft.massivecore.integration.IntegrationGlue; -import com.massivecraft.massivecore.integration.Integration; import com.massivecraft.massivecore.store.Coll; import com.massivecraft.massivecore.util.Txt; import com.massivecraft.massivecore.xlib.gson.Gson; @@ -49,6 +47,9 @@ public abstract class MassivePlugin extends JavaPlugin implements Listener log("=== ENABLE START ==="); + // Version Synchronization + this.checkVersionSynchronization(); + // Create Gson Gson gson = this.getGsonBuilder().create(); this.setGson(gson); @@ -74,9 +75,6 @@ public abstract class MassivePlugin extends JavaPlugin implements Listener public void postEnable() { long ms = System.currentTimeMillis() - enableTime; - - this.checkVersionSynchronization(); - log(Txt.parse("=== ENABLE COMPLETE (Took " + ms + "ms) ===")); } @@ -120,9 +118,16 @@ public abstract class MassivePlugin extends JavaPlugin implements Listener { if ( ! this.preEnable()) return; + this.onEnableInner(); + this.postEnable(); } + public void onEnableInner() + { + + } + // -------------------------------------------- // // DISABLE // -------------------------------------------- // @@ -137,7 +142,7 @@ public abstract class MassivePlugin extends JavaPlugin implements Listener for (Coll coll : Coll.getInstances()) { if (coll.getPlugin() != this) continue; - coll.deinit(); + coll.setActive(false); } log("Disabled"); @@ -158,15 +163,16 @@ public abstract class MassivePlugin extends JavaPlugin implements Listener public void suicide() { - log(Txt.parse("Now I suicide!")); + this.log(Txt.parse("Now I suicide!")); Bukkit.getPluginManager().disablePlugin(this); } - public void integrate(Integration... features) + public void activate(Active... actives) { - for (Integration f : features) + for (Active active : actives) { - new IntegrationGlue(this, f); + active.setActivePlugin(this); + active.setActive(true); } } diff --git a/src/com/massivecraft/massivecore/ModuloRepeatTask.java b/src/com/massivecraft/massivecore/ModuloRepeatTask.java index 0d5bb644..fdfc398d 100644 --- a/src/com/massivecraft/massivecore/ModuloRepeatTask.java +++ b/src/com/massivecraft/massivecore/ModuloRepeatTask.java @@ -4,7 +4,7 @@ package com.massivecraft.massivecore; * This class will allow you to create non-tps-dependent repeating tasks. * It makes use of the Bukkit scheduler internally. */ -public abstract class ModuloRepeatTask extends EngineAbstract +public abstract class ModuloRepeatTask extends Engine { // -------------------------------------------- // // FIELDS: RAW diff --git a/src/com/massivecraft/massivecore/MultiverseColl.java b/src/com/massivecraft/massivecore/MultiverseColl.java index c4c9bd96..37f9437f 100644 --- a/src/com/massivecraft/massivecore/MultiverseColl.java +++ b/src/com/massivecraft/massivecore/MultiverseColl.java @@ -31,9 +31,11 @@ public class MultiverseColl extends Coll // -------------------------------------------- // @Override - public void init() + public void setActive(boolean active) { - super.init(); + super.setActive(active); + + if ( ! active) return; // Ensure the default multiverse exits this.get(MassiveCore.DEFAULT, true); diff --git a/src/com/massivecraft/massivecore/command/MassiveCommand.java b/src/com/massivecraft/massivecore/command/MassiveCommand.java index 08304212..546e2a9d 100644 --- a/src/com/massivecraft/massivecore/command/MassiveCommand.java +++ b/src/com/massivecraft/massivecore/command/MassiveCommand.java @@ -14,11 +14,14 @@ import java.util.Set; import org.apache.commons.lang.StringUtils; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; +import org.bukkit.command.PluginIdentifiableCommand; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; +import com.massivecraft.massivecore.Active; import com.massivecraft.massivecore.Lang; import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.MassivePlugin; import com.massivecraft.massivecore.collections.MassiveList; import com.massivecraft.massivecore.collections.MassiveMap; import com.massivecraft.massivecore.command.requirement.Requirement; @@ -30,7 +33,7 @@ import com.massivecraft.massivecore.predicate.PredicateStartsWithIgnoreCase; import com.massivecraft.massivecore.util.PermUtil; import com.massivecraft.massivecore.util.Txt; -public class MassiveCommand +public class MassiveCommand implements Active, PluginIdentifiableCommand { // -------------------------------------------- // // REGISTER @@ -49,15 +52,15 @@ public class MassiveCommand // When registering again we use the fresh and current aliases. // STATIC - private static final transient Map registry = new LinkedHashMap(); - public static Map getRegistry() { return registry; } + private static final transient Map registry = new LinkedHashMap(); + public static Map getRegistry() { return registry; } public static Set getRegisteredCommands() { return registry.keySet(); } public static void unregister(Plugin plugin) { - Iterator> iter = registry.entrySet().iterator(); + Iterator> iter = registry.entrySet().iterator(); while (iter.hasNext()) { - Entry entry = iter.next(); + Entry entry = iter.next(); if (plugin.equals(entry.getValue())) { iter.remove(); @@ -65,11 +68,48 @@ public class MassiveCommand } } - // INSTANCE - public Plugin register(Plugin plugin) { return registry.put(this, plugin); } - public void unregister() { registry.remove(this); } - public boolean isRegistered() { return registry.containsKey(this); } - public Plugin getRegisteredPlugin() { return registry.get(this); } + // -------------------------------------------- // + // ACTIVE + // -------------------------------------------- // + + @Override + public boolean isActive() + { + return registry.containsKey(this); + } + + @Override + public void setActive(boolean active) + { + // NOTE: Not Implemented + } + + public MassivePlugin setActivePlugin(MassivePlugin activePlugin) + { + if (activePlugin == null) + { + return registry.remove(this); + } + else + { + return registry.put(this, activePlugin); + } + } + + public MassivePlugin getActivePlugin() + { + return registry.get(this); + } + + // -------------------------------------------- // + // PLUGIN IDENTIFIABLE COMMAND + // -------------------------------------------- // + + @Override + public Plugin getPlugin() + { + return this.getActivePlugin(); + } // -------------------------------------------- // // FIELDS diff --git a/src/com/massivecraft/massivecore/command/MassiveCoreBukkitCommand.java b/src/com/massivecraft/massivecore/command/MassiveCoreBukkitCommand.java index fbfb5ad3..031f0f44 100644 --- a/src/com/massivecraft/massivecore/command/MassiveCoreBukkitCommand.java +++ b/src/com/massivecraft/massivecore/command/MassiveCoreBukkitCommand.java @@ -47,7 +47,7 @@ public class MassiveCoreBukkitCommand extends Command implements PluginIdentifia @Override public Plugin getPlugin() { - return this.getMassiveCommand().getRegisteredPlugin(); + return this.getMassiveCommand().getPlugin(); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCore.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCore.java index 48b3a3e8..57dca24e 100644 --- a/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCore.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCore.java @@ -1,6 +1,9 @@ package com.massivecraft.massivecore.command.massivecore; +import java.util.List; + import com.massivecraft.massivecore.MassiveCore; +import com.massivecraft.massivecore.MassiveCoreMConf; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.command.MassiveCommand; import com.massivecraft.massivecore.command.VersionCommand; @@ -8,6 +11,13 @@ import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; public class CmdMassiveCore extends MassiveCommand { + // -------------------------------------------- // + // INSTANCE + // -------------------------------------------- // + + private static CmdMassiveCore i = new CmdMassiveCore(); + public static CmdMassiveCore get() { return i; } + // -------------------------------------------- // // FIELDS // -------------------------------------------- // @@ -40,5 +50,15 @@ public class CmdMassiveCore extends MassiveCommand // Requirements this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.BASECOMMAND.node)); } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public List getAliases() + { + return MassiveCoreMConf.get().aliasesOuterMassiveCore; + } } diff --git a/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBuffer.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBuffer.java index d952fa5a..0fbe738e 100644 --- a/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBuffer.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBuffer.java @@ -1,11 +1,21 @@ package com.massivecraft.massivecore.command.massivecore; +import java.util.List; + +import com.massivecraft.massivecore.MassiveCoreMConf; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.command.MassiveCommand; import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; public class CmdMassiveCoreBuffer extends MassiveCommand { + // -------------------------------------------- // + // INSTANCE + // -------------------------------------------- // + + private static CmdMassiveCoreBuffer i = new CmdMassiveCoreBuffer() { public List getAliases() { return MassiveCoreMConf.get().aliasesOuterMassiveCoreBuffer; } }; + public static CmdMassiveCoreBuffer get() { return i; } + // -------------------------------------------- // // FIELDS // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreCmdurl.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreCmdurl.java index b055988f..18e46327 100644 --- a/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreCmdurl.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreCmdurl.java @@ -8,6 +8,7 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import com.massivecraft.massivecore.MassiveCore; +import com.massivecraft.massivecore.MassiveCoreMConf; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.command.MassiveCommand; @@ -19,6 +20,13 @@ import com.massivecraft.massivecore.util.WebUtil; public class CmdMassiveCoreCmdurl extends MassiveCommand { + // -------------------------------------------- // + // INSTANCE + // -------------------------------------------- // + + private static CmdMassiveCoreCmdurl i = new CmdMassiveCoreCmdurl() { public List getAliases() { return MassiveCoreMConf.get().aliasesOuterMassiveCoreCmdurl; } }; + public static CmdMassiveCoreCmdurl get() { return i; } + // -------------------------------------------- // // CONSTRUCT // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStore.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStore.java index d86ef8de..2d492239 100644 --- a/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStore.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStore.java @@ -1,11 +1,21 @@ package com.massivecraft.massivecore.command.massivecore; +import java.util.List; + +import com.massivecraft.massivecore.MassiveCoreMConf; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.command.MassiveCommand; import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; public class CmdMassiveCoreStore extends MassiveCommand { + // -------------------------------------------- // + // INSTANCE + // -------------------------------------------- // + + private static CmdMassiveCoreStore i = new CmdMassiveCoreStore() { public List getAliases() { return MassiveCoreMConf.get().aliasesOuterMassiveCoreStore; } }; + public static CmdMassiveCoreStore get() { return i; } + // -------------------------------------------- // // FIELDS // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsys.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsys.java index 29bcb3ac..a011dcaf 100644 --- a/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsys.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsys.java @@ -1,11 +1,21 @@ package com.massivecraft.massivecore.command.massivecore; +import java.util.List; + +import com.massivecraft.massivecore.MassiveCoreMConf; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.command.MassiveCommand; import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; public class CmdMassiveCoreUsys extends MassiveCommand { + // -------------------------------------------- // + // INSTANCE + // -------------------------------------------- // + + private static CmdMassiveCoreUsys i = new CmdMassiveCoreUsys() { public List getAliases() { return MassiveCoreMConf.get().aliasesOuterMassiveCoreUsys; } }; + public static CmdMassiveCoreUsys get() { return i; } + // -------------------------------------------- // // FIELDS // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreChestGui.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreChestGui.java index 0373d235..6fe99f7f 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreChestGui.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreChestGui.java @@ -6,16 +6,13 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.inventory.Inventory; -import org.bukkit.plugin.Plugin; - -import com.massivecraft.massivecore.EngineAbstract; -import com.massivecraft.massivecore.MassiveCore; +import com.massivecraft.massivecore.Engine; import com.massivecraft.massivecore.chestgui.ChestAction; import com.massivecraft.massivecore.chestgui.ChestGui; import com.massivecraft.massivecore.mixin.Mixin; import com.massivecraft.massivecore.util.InventoryUtil; -public class EngineMassiveCoreChestGui extends EngineAbstract +public class EngineMassiveCoreChestGui extends Engine { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -24,16 +21,6 @@ public class EngineMassiveCoreChestGui extends EngineAbstract private static EngineMassiveCoreChestGui i = new EngineMassiveCoreChestGui(); public static EngineMassiveCoreChestGui get() { return i; } - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Plugin getPlugin() - { - return MassiveCore.get(); - } - // -------------------------------------------- // // LISTENER // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreCollTick.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreCollTick.java index 256ef670..0b69ef48 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreCollTick.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreCollTick.java @@ -1,34 +1,19 @@ package com.massivecraft.massivecore.engine; -import org.bukkit.plugin.Plugin; - -import com.massivecraft.massivecore.EngineAbstract; -import com.massivecraft.massivecore.MassiveCore; +import com.massivecraft.massivecore.Engine; import com.massivecraft.massivecore.store.Coll; -public class EngineMassiveCoreCollTick extends EngineAbstract +public class EngineMassiveCoreCollTick extends Engine { // -------------------------------------------- // // INSTANCE & CONSTRUCT // -------------------------------------------- // - protected static EngineMassiveCoreCollTick i = new EngineMassiveCoreCollTick(); + private static EngineMassiveCoreCollTick i = new EngineMassiveCoreCollTick(); public static EngineMassiveCoreCollTick get() { return i; } - - // -------------------------------------------- // - // OVERRIDE: ENGINE - // -------------------------------------------- // - - @Override - public Plugin getPlugin() + public EngineMassiveCoreCollTick() { - return MassiveCore.get(); - } - - @Override - public Long getPeriod() - { - return 1L; + this.setPeriod(1L); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreCommandRegistration.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreCommandRegistration.java index a65a2940..158535e9 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreCommandRegistration.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreCommandRegistration.java @@ -12,13 +12,12 @@ import org.bukkit.command.Command; import org.bukkit.command.SimpleCommandMap; import org.bukkit.plugin.Plugin; -import com.massivecraft.massivecore.EngineAbstract; -import com.massivecraft.massivecore.MassiveCore; +import com.massivecraft.massivecore.Engine; import com.massivecraft.massivecore.command.MassiveCommand; import com.massivecraft.massivecore.command.MassiveCoreBukkitCommand; import com.massivecraft.massivecore.util.ReflectionUtil; -public class EngineMassiveCoreCommandRegistration extends EngineAbstract +public class EngineMassiveCoreCommandRegistration extends Engine { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -26,22 +25,9 @@ public class EngineMassiveCoreCommandRegistration extends EngineAbstract private static EngineMassiveCoreCommandRegistration i = new EngineMassiveCoreCommandRegistration(); public static EngineMassiveCoreCommandRegistration get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Plugin getPlugin() + public EngineMassiveCoreCommandRegistration() { - return MassiveCore.get(); - } - - @Override - public Long getPeriod() - { - // Every second - return 1 * 20L; + this.setPeriod(20L); // Every second } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreDatabase.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreDatabase.java index 07ce49d1..b0f9c9bf 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreDatabase.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreDatabase.java @@ -14,9 +14,7 @@ import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.plugin.Plugin; - -import com.massivecraft.massivecore.EngineAbstract; +import com.massivecraft.massivecore.Engine; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.collections.MassiveMap; import com.massivecraft.massivecore.event.EventMassiveCorePlayerLeave; @@ -28,7 +26,7 @@ import com.massivecraft.massivecore.util.IdUtil; import com.massivecraft.massivecore.util.MUtil; import com.massivecraft.massivecore.xlib.gson.JsonObject; -public class EngineMassiveCoreDatabase extends EngineAbstract +public class EngineMassiveCoreDatabase extends Engine { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -37,22 +35,6 @@ public class EngineMassiveCoreDatabase extends EngineAbstract private static EngineMassiveCoreDatabase i = new EngineMassiveCoreDatabase(); public static EngineMassiveCoreDatabase get() { return i; } - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Plugin getPlugin() - { - return MassiveCore.get(); - } - - @Override - public void activate() - { - super.activate(); - } - // -------------------------------------------- // // PLAYER AND SENDER REFERENCES // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreDestination.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreDestination.java index 0a06f273..16a4676d 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreDestination.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreDestination.java @@ -9,10 +9,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; -import org.bukkit.plugin.Plugin; - -import com.massivecraft.massivecore.EngineAbstract; -import com.massivecraft.massivecore.MassiveCore; +import com.massivecraft.massivecore.Engine; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.collections.MassiveSet; import com.massivecraft.massivecore.command.type.TypePS; @@ -31,7 +28,7 @@ import com.massivecraft.massivecore.teleport.DestinationUtil; import com.massivecraft.massivecore.teleport.DestinationWorld; import com.massivecraft.massivecore.util.IdUtil; -public class EngineMassiveCoreDestination extends EngineAbstract +public class EngineMassiveCoreDestination extends Engine { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -40,16 +37,6 @@ public class EngineMassiveCoreDestination extends EngineAbstract private static EngineMassiveCoreDestination i = new EngineMassiveCoreDestination(); public static EngineMassiveCoreDestination get() { return i; } - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Plugin getPlugin() - { - return MassiveCore.get(); - } - // -------------------------------------------- // // DESTINATION ARG // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreGank.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreGank.java index 0670e69a..838daa9f 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreGank.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreGank.java @@ -10,14 +10,11 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.plugin.Plugin; - -import com.massivecraft.massivecore.EngineAbstract; -import com.massivecraft.massivecore.MassiveCore; +import com.massivecraft.massivecore.Engine; import com.massivecraft.massivecore.collections.MassiveMap; import com.massivecraft.massivecore.util.MUtil; -public class EngineMassiveCoreGank extends EngineAbstract +public class EngineMassiveCoreGank extends Engine { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -25,17 +22,6 @@ public class EngineMassiveCoreGank extends EngineAbstract private static EngineMassiveCoreGank i = new EngineMassiveCoreGank(); public static EngineMassiveCoreGank get() { return i; } - public EngineMassiveCoreGank() {} - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Plugin getPlugin() - { - return MassiveCore.get(); - } // -------------------------------------------- // // PROTECTED diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreMain.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreMain.java index c15a911c..a2863c78 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreMain.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreMain.java @@ -18,9 +18,7 @@ import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerTeleportEvent; -import org.bukkit.plugin.Plugin; - -import com.massivecraft.massivecore.EngineAbstract; +import com.massivecraft.massivecore.Engine; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.MassiveCoreMConf; import com.massivecraft.massivecore.SenderPresence; @@ -36,7 +34,7 @@ import com.massivecraft.massivecore.util.IdUtil; import com.massivecraft.massivecore.util.MUtil; import com.massivecraft.massivecore.util.SmokeUtil; -public class EngineMassiveCoreMain extends EngineAbstract +public class EngineMassiveCoreMain extends Engine { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -45,22 +43,6 @@ public class EngineMassiveCoreMain extends EngineAbstract private static EngineMassiveCoreMain i = new EngineMassiveCoreMain(); public static EngineMassiveCoreMain get() { return i; } - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Plugin getPlugin() - { - return MassiveCore.get(); - } - - @Override - public void activate() - { - super.activate(); - } - // -------------------------------------------- // // RECIPIENT CHAT // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCorePlayerLeave.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCorePlayerLeave.java index 9db85a69..1619deb1 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCorePlayerLeave.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCorePlayerLeave.java @@ -7,14 +7,12 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.plugin.Plugin; - -import com.massivecraft.massivecore.EngineAbstract; +import com.massivecraft.massivecore.Engine; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.event.EventMassiveCorePlayerLeave; import com.massivecraft.massivecore.util.MUtil; -public class EngineMassiveCorePlayerLeave extends EngineAbstract +public class EngineMassiveCorePlayerLeave extends Engine { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -23,20 +21,11 @@ public class EngineMassiveCorePlayerLeave extends EngineAbstract private static EngineMassiveCorePlayerLeave i = new EngineMassiveCorePlayerLeave(); public static EngineMassiveCorePlayerLeave get() { return i; } - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - @Override - public Plugin getPlugin() + public void setActiveInner(boolean active) { - return MassiveCore.get(); - } - - @Override - public void activate() - { - super.activate(); + if ( ! active) return; + EventMassiveCorePlayerLeave.player2event.clear(); } diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCorePlayerState.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCorePlayerState.java index 41d88f5e..d8049034 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCorePlayerState.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCorePlayerState.java @@ -12,15 +12,13 @@ import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.plugin.Plugin; - -import com.massivecraft.massivecore.EngineAbstract; +import com.massivecraft.massivecore.Engine; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.PlayerState; import com.massivecraft.massivecore.event.EventMassiveCorePlayerLeave; import com.massivecraft.massivecore.util.MUtil; -public class EngineMassiveCorePlayerState extends EngineAbstract +public class EngineMassiveCorePlayerState extends Engine { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -34,15 +32,9 @@ public class EngineMassiveCorePlayerState extends EngineAbstract // -------------------------------------------- // @Override - public Plugin getPlugin() + public void setActiveInner(boolean active) { - return MassiveCore.get(); - } - - @Override - public void activate() - { - super.activate(); + if ( ! active) return; idToState.clear(); for (Player player : MUtil.getOnlinePlayers()) diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCorePlayerUpdate.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCorePlayerUpdate.java index a62aa02e..e1c174ca 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCorePlayerUpdate.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCorePlayerUpdate.java @@ -12,10 +12,7 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.plugin.Plugin; - -import com.massivecraft.massivecore.EngineAbstract; -import com.massivecraft.massivecore.MassiveCore; +import com.massivecraft.massivecore.Engine; import com.massivecraft.massivecore.event.EventMassiveCoreAfterPlayerRespawn; import com.massivecraft.massivecore.event.EventMassiveCoreAfterPlayerTeleport; import com.massivecraft.massivecore.event.EventMassiveCorePlayerUpdate; @@ -25,7 +22,7 @@ import com.massivecraft.massivecore.util.MUtil; * This event triggers the EventMassiveCorePlayerUpdate on every block change. * It also runs it in reset mode rather than update mode upon world change. */ -public class EngineMassiveCorePlayerUpdate extends EngineAbstract +public class EngineMassiveCorePlayerUpdate extends Engine { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -34,16 +31,6 @@ public class EngineMassiveCorePlayerUpdate extends EngineAbstract private static EngineMassiveCorePlayerUpdate i = new EngineMassiveCorePlayerUpdate(); public static EngineMassiveCorePlayerUpdate get() { return i; } - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Plugin getPlugin() - { - return MassiveCore.get(); - } - // -------------------------------------------- // // UPDATE // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreScheduledTeleport.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreScheduledTeleport.java index 9d4912e4..b7100b05 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreScheduledTeleport.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreScheduledTeleport.java @@ -13,10 +13,7 @@ import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.plugin.Plugin; - -import com.massivecraft.massivecore.EngineAbstract; -import com.massivecraft.massivecore.MassiveCore; +import com.massivecraft.massivecore.Engine; import com.massivecraft.massivecore.event.EventMassiveCorePlayerLeave; import com.massivecraft.massivecore.mixin.Mixin; import com.massivecraft.massivecore.teleport.ScheduledTeleport; @@ -24,7 +21,7 @@ import com.massivecraft.massivecore.util.IdUtil; import com.massivecraft.massivecore.util.MUtil; import com.massivecraft.massivecore.util.TimeUnit; -public class EngineMassiveCoreScheduledTeleport extends EngineAbstract +public class EngineMassiveCoreScheduledTeleport extends Engine { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -32,6 +29,10 @@ public class EngineMassiveCoreScheduledTeleport extends EngineAbstract private static EngineMassiveCoreScheduledTeleport i = new EngineMassiveCoreScheduledTeleport(); public static EngineMassiveCoreScheduledTeleport get() { return i; } + public EngineMassiveCoreScheduledTeleport() + { + this.setPeriod(1L); + } // -------------------------------------------- // // SCHEDULED TELEPORT INDEX @@ -69,18 +70,6 @@ public class EngineMassiveCoreScheduledTeleport extends EngineAbstract // OVERRIDE // -------------------------------------------- // - @Override - public Plugin getPlugin() - { - return MassiveCore.get(); - } - - @Override - public Long getPeriod() - { - return 1L; - } - @Override public void run() { diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreTeleportMixinCause.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreTeleportMixinCause.java index 2f66d302..1c7e125f 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreTeleportMixinCause.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreTeleportMixinCause.java @@ -8,12 +8,10 @@ import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerTeleportEvent; -import org.bukkit.plugin.Plugin; - -import com.massivecraft.massivecore.EngineAbstract; +import com.massivecraft.massivecore.Engine; import com.massivecraft.massivecore.MassiveCore; -public class EngineMassiveCoreTeleportMixinCause extends EngineAbstract +public class EngineMassiveCoreTeleportMixinCause extends Engine { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -21,18 +19,7 @@ public class EngineMassiveCoreTeleportMixinCause extends EngineAbstract private static EngineMassiveCoreTeleportMixinCause i = new EngineMassiveCoreTeleportMixinCause(); public static EngineMassiveCoreTeleportMixinCause get() { return i; } - public EngineMassiveCoreTeleportMixinCause() {} - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Plugin getPlugin() - { - return MassiveCore.get(); - } - // -------------------------------------------- // // FIELDS // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreVariable.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreVariable.java index b9686381..a48ac500 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreVariable.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreVariable.java @@ -15,17 +15,14 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BookMeta; import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.plugin.Plugin; - -import com.massivecraft.massivecore.EngineAbstract; -import com.massivecraft.massivecore.MassiveCore; +import com.massivecraft.massivecore.Engine; import com.massivecraft.massivecore.MassiveCoreMConf; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.util.IdUtil; import com.massivecraft.massivecore.util.MUtil; import com.massivecraft.massivecore.util.Txt; -public class EngineMassiveCoreVariable extends EngineAbstract +public class EngineMassiveCoreVariable extends Engine { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -34,16 +31,6 @@ public class EngineMassiveCoreVariable extends EngineAbstract private static EngineMassiveCoreVariable i = new EngineMassiveCoreVariable(); public static EngineMassiveCoreVariable get() { return i; } - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Plugin getPlugin() - { - return MassiveCore.get(); - } - // -------------------------------------------- // // VARIABLE // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreWorldNameSet.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreWorldNameSet.java index 422afc33..7b1926c8 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreWorldNameSet.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreWorldNameSet.java @@ -10,12 +10,9 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.event.world.WorldUnloadEvent; -import org.bukkit.plugin.Plugin; +import com.massivecraft.massivecore.Engine; -import com.massivecraft.massivecore.EngineAbstract; -import com.massivecraft.massivecore.MassiveCore; - -public class EngineMassiveCoreWorldNameSet extends EngineAbstract +public class EngineMassiveCoreWorldNameSet extends Engine { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -29,15 +26,9 @@ public class EngineMassiveCoreWorldNameSet extends EngineAbstract // -------------------------------------------- // @Override - public Plugin getPlugin() + public void setActiveInner(boolean active) { - return MassiveCore.get(); - } - - @Override - public void activate() - { - super.activate(); + if ( ! active) return; this.worldNamesInner.clear(); for (World world : Bukkit.getWorlds()) diff --git a/src/com/massivecraft/massivecore/integration/Integration.java b/src/com/massivecraft/massivecore/integration/Integration.java deleted file mode 100644 index c044061c..00000000 --- a/src/com/massivecraft/massivecore/integration/Integration.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.massivecraft.massivecore.integration; - -import java.util.List; - -public interface Integration -{ - public List getTargetPluginNames(); - public void activate(); - public void deactivate(); -} diff --git a/src/com/massivecraft/massivecore/integration/IntegrationAbstract.java b/src/com/massivecraft/massivecore/integration/IntegrationAbstract.java deleted file mode 100644 index 0d267063..00000000 --- a/src/com/massivecraft/massivecore/integration/IntegrationAbstract.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.massivecraft.massivecore.integration; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public abstract class IntegrationAbstract implements Integration -{ - // -------------------------------------------- // - // FIELDS - // -------------------------------------------- // - - private List targetPluginNames; - - // -------------------------------------------- // - // CONSTRUCT - // -------------------------------------------- // - - public IntegrationAbstract(String... targetPluginNames) - { - this.targetPluginNames = new ArrayList(Arrays.asList(targetPluginNames)); - } - - // -------------------------------------------- // - // OVERRIDES - // -------------------------------------------- // - - @Override - public List getTargetPluginNames() - { - return this.targetPluginNames; - } - - @Override - public void activate() - { - - } - - @Override - public void deactivate() - { - - } - -} diff --git a/src/com/massivecraft/massivecore/integration/IntegrationGlue.java b/src/com/massivecraft/massivecore/integration/IntegrationGlue.java deleted file mode 100644 index 9c359920..00000000 --- a/src/com/massivecraft/massivecore/integration/IntegrationGlue.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.massivecraft.massivecore.integration; - -import java.util.Collection; - -import org.bukkit.Bukkit; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.server.PluginDisableEvent; -import org.bukkit.event.server.PluginEnableEvent; -import org.bukkit.plugin.Plugin; - -import com.massivecraft.massivecore.MassivePlugin; -import com.massivecraft.massivecore.util.Txt; - -public class IntegrationGlue implements Listener -{ - // -------------------------------------------- // - // FIELDS - // -------------------------------------------- // - - protected MassivePlugin ourPlugin; - protected Integration features; - - protected boolean active = false; - public boolean isActive() { return this.active; } - - // -------------------------------------------- // - // CONSTRUCT - // -------------------------------------------- // - - public IntegrationGlue(MassivePlugin ourPlugin, Integration features) - { - this.ourPlugin = ourPlugin; - this.features = features; - - Bukkit.getServer().getPluginManager().registerEvents(this, this.ourPlugin); - this.tick(); - } - - // -------------------------------------------- // - // LOGIC - // -------------------------------------------- // - - public void tick() - { - String namelist = Txt.implodeCommaAndDot(this.features.getTargetPluginNames(), "%s", ", ", " and ", "."); - - if (isPluginsEnabled(this.features.getTargetPluginNames())) - { - if (!this.active) - { - try - { - this.features.activate(); - this.active = true; - this.ourPlugin.log(Txt.parse("Activated integration with "+namelist)); - } - catch (Exception e) - { - this.ourPlugin.log(Txt.parse("Failed to activate integration with "+namelist)); - e.printStackTrace(); - } - } - } - else - { - if (this.active) - { - try - { - this.active = false; - this.features.deactivate(); - this.ourPlugin.log(Txt.parse("Deactivated integration with "+namelist)); - } - catch (Exception e) - { - this.ourPlugin.log(Txt.parse("Failed to deactivate integration with "+namelist)); - e.printStackTrace(); - } - } - } - } - - // -------------------------------------------- // - // UTIL - // -------------------------------------------- // - - public static boolean isPluginEnabled(String pluginName) - { - Plugin plugin = Bukkit.getPluginManager().getPlugin(pluginName); - if (plugin == null) return false; - return plugin.isEnabled(); - } - - public static boolean isPluginsEnabled(Collection pluginNames) - { - for (String pluginName : pluginNames) - { - if (!isPluginEnabled(pluginName)) return false; - } - return true; - } - - // -------------------------------------------- // - // EVENT LISTENERS - // -------------------------------------------- // - - @EventHandler(priority = EventPriority.MONITOR) - public void onPluginDisable(PluginDisableEvent event) - { - this.tick(); - } - - @EventHandler(priority = EventPriority.MONITOR) - public void onPluginEnable(PluginEnableEvent event) - { - this.tick(); - } - -} diff --git a/src/com/massivecraft/massivecore/integration/vault/IntegrationVault.java b/src/com/massivecraft/massivecore/integration/vault/IntegrationVault.java index 16029134..11dfd781 100644 --- a/src/com/massivecraft/massivecore/integration/vault/IntegrationVault.java +++ b/src/com/massivecraft/massivecore/integration/vault/IntegrationVault.java @@ -1,9 +1,9 @@ package com.massivecraft.massivecore.integration.vault; -import com.massivecraft.massivecore.integration.IntegrationAbstract; +import com.massivecraft.massivecore.Integration; import com.massivecraft.massivecore.money.MoneyMixinVault; -public class IntegrationVault extends IntegrationAbstract +public class IntegrationVault extends Integration { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -11,22 +11,26 @@ public class IntegrationVault extends IntegrationAbstract private static IntegrationVault i = new IntegrationVault(); public static IntegrationVault get() { return i; } - private IntegrationVault() { super("Vault"); } + private IntegrationVault() + { + this.setPluginName("Vault"); + } // -------------------------------------------- // // OVERRIDE // -------------------------------------------- // @Override - public void activate() + public void setIntegrationActiveInner(boolean active) { - MoneyMixinVault.get().activate(); - } - - @Override - public void deactivate() - { - MoneyMixinVault.get().deactivate(); + if (active) + { + MoneyMixinVault.get().activate(); + } + else + { + MoneyMixinVault.get().deactivate(); + } } } diff --git a/src/com/massivecraft/massivecore/predicate/PredicateIntegration.java b/src/com/massivecraft/massivecore/predicate/PredicateIntegration.java new file mode 100644 index 00000000..df34f12c --- /dev/null +++ b/src/com/massivecraft/massivecore/predicate/PredicateIntegration.java @@ -0,0 +1,76 @@ +package com.massivecraft.massivecore.predicate; + +import java.util.Collection; +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; + +import com.massivecraft.massivecore.Integration; + +public class PredicateIntegration implements Predicate +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static PredicateIntegration i = new PredicateIntegration(); + public static PredicateIntegration get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public boolean apply(Integration integration) + { + return isPluginNamesPresent(integration.getPluginNames()) && isClassNamesPresent(integration.getClassNames()); + } + + // -------------------------------------------- // + // PLUGINS + // -------------------------------------------- // + + public static boolean isPluginNamesPresent(Collection pluginNames) + { + for (String pluginName : pluginNames) + { + if (isPluginNamePresent(pluginName)) continue; + return false; + } + return true; + } + + public static boolean isPluginNamePresent(String pluginName) + { + Plugin plugin = Bukkit.getPluginManager().getPlugin(pluginName); + if (plugin == null) return false; + return plugin.isEnabled(); + } + + // -------------------------------------------- // + // CLASSES + // -------------------------------------------- // + + public static boolean isClassNamesPresent(Collection classNames) + { + for (String className : classNames) + { + if (isClassNamePresent(className)) continue; + return false; + } + return true; + } + + public static boolean isClassNamePresent(String className) + { + try + { + Class.forName(className); + return true; + } + catch (Throwable t) + { + return false; + } + } + +} diff --git a/src/com/massivecraft/massivecore/store/Coll.java b/src/com/massivecraft/massivecore/store/Coll.java index 8bedc5c8..57630a31 100644 --- a/src/com/massivecraft/massivecore/store/Coll.java +++ b/src/com/massivecraft/massivecore/store/Coll.java @@ -74,18 +74,13 @@ public class Coll> extends CollAbstract // SUPPORTING SYSTEM // -------------------------------------------- // - protected Plugin plugin; - @Override public Plugin getPlugin() { return this.plugin; } + protected MassivePlugin plugin; + @Override public MassivePlugin getPlugin() { return this.plugin; } public Gson getGson() { - if (this.getPlugin() instanceof MassivePlugin) - { - return ((MassivePlugin)this.getPlugin()).getGson(); - } - else - { - return MassiveCore.gson; - } + MassivePlugin plugin = this.getPlugin(); + if (plugin == null) return MassiveCore.gson; + return plugin.getGson(); } protected Db db; @@ -700,7 +695,7 @@ public class Coll> extends CollAbstract case LOCAL_ALTER: case LOCAL_ATTACH: this.saveToRemoteFixed(id); - if (this.inited()) + if (this.isActive()) { this.addSyncCountFixed(TOTAL, false); this.addSyncCountFixed(id, false); @@ -708,7 +703,7 @@ public class Coll> extends CollAbstract break; case LOCAL_DETACH: this.removeAtRemoteFixed(id); - if (this.inited()) + if (this.isActive()) { this.addSyncCountFixed(TOTAL, false); this.addSyncCountFixed(id, false); @@ -717,7 +712,7 @@ public class Coll> extends CollAbstract case REMOTE_ALTER: case REMOTE_ATTACH: this.loadFromRemoteFixed(id, remoteEntry); - if (this.inited()) + if (this.isActive()) { this.addSyncCountFixed(TOTAL, true); this.addSyncCountFixed(id, true); @@ -725,7 +720,7 @@ public class Coll> extends CollAbstract break; case REMOTE_DETACH: this.removeAtLocalFixed(id); - if (this.inited()) + if (this.isActive()) { this.addSyncCountFixed(TOTAL, true); this.addSyncCountFixed(id, true); @@ -934,7 +929,7 @@ public class Coll> extends CollAbstract // CONSTRUCT // -------------------------------------------- // - public Coll(String name, Class entityClass, Db db, Plugin plugin) + public Coll(String name, Class entityClass, Db db, MassivePlugin plugin) { // Setup the name and the parsed parts this.name = name; @@ -969,40 +964,59 @@ public class Coll> extends CollAbstract }; } + // -------------------------------------------- // + // ACTIVE + // -------------------------------------------- // + @Override - public void init() + public MassivePlugin setActivePlugin(MassivePlugin plugin) { - if (this.inited()) throw new IllegalStateException("Already initialised."); - - if (this.supportsPusher()) - { - this.getPusher().init(); - } - - this.initLoadAllFromRemote(); - //this.syncIdentified(); - - name2instance.put(this.getName(), this); + MassivePlugin ret = this.plugin; + this.plugin = plugin; + return ret; } @Override - public void deinit() + public MassivePlugin getActivePlugin() { - if ( ! this.inited()) throw new IllegalStateException("Not initialised."); - - if (this.supportsPusher()) - { - this.getPusher().deinit(); - } - - // TODO: Save outwards only? We may want to avoid loads at this stage... - this.syncAll(); - - name2instance.remove(this.getName()); + return this.plugin; } @Override - public boolean inited() + public void setActive(boolean active) + { + // NoChange + if (this.isActive() == active) throw new IllegalStateException("Active Already " + active); + + // TODO: Clean up this stuff below. It branches too late. + if (active) + { + if (this.supportsPusher()) + { + this.getPusher().init(); + } + + this.initLoadAllFromRemote(); + //this.syncIdentified(); + + name2instance.put(this.getName(), this); + } + else + { + if (this.supportsPusher()) + { + this.getPusher().deinit(); + } + + // TODO: Save outwards only? We may want to avoid loads at this stage... + this.syncAll(); + + name2instance.remove(this.getName()); + } + } + + @Override + public boolean isActive() { return name2instance.containsKey(this.getName()); } diff --git a/src/com/massivecraft/massivecore/store/CollInterface.java b/src/com/massivecraft/massivecore/store/CollInterface.java index ea4a3038..631e8c30 100644 --- a/src/com/massivecraft/massivecore/store/CollInterface.java +++ b/src/com/massivecraft/massivecore/store/CollInterface.java @@ -6,13 +6,13 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import org.bukkit.plugin.Plugin; - +import com.massivecraft.massivecore.Active; +import com.massivecraft.massivecore.MassivePlugin; import com.massivecraft.massivecore.Named; import com.massivecraft.massivecore.predicate.Predicate; import com.massivecraft.massivecore.xlib.gson.JsonObject; -public interface CollInterface> extends Named +public interface CollInterface> extends Named, Active { // -------------------------------------------- // // WHAT DO WE HANDLE? @@ -27,7 +27,7 @@ public interface CollInterface> extends Named // SUPPORTING SYSTEM // -------------------------------------------- // - public Plugin getPlugin(); + public MassivePlugin getPlugin(); public Db getDb(); public Object getCollDriverObject(); @@ -214,12 +214,4 @@ public interface CollInterface> extends Named public Runnable getTickTask(); public void onTick(); - // -------------------------------------------- // - // CONSTRUCT - // -------------------------------------------- // - - public void init(); - public void deinit(); - public boolean inited(); - } diff --git a/src/com/massivecraft/massivecore/store/Colls.java b/src/com/massivecraft/massivecore/store/Colls.java index 73d7f2b4..7f1f9f35 100644 --- a/src/com/massivecraft/massivecore/store/Colls.java +++ b/src/com/massivecraft/massivecore/store/Colls.java @@ -5,11 +5,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import com.massivecraft.massivecore.Active; import com.massivecraft.massivecore.Aspect; +import com.massivecraft.massivecore.MassivePlugin; import com.massivecraft.massivecore.Multiverse; import com.massivecraft.massivecore.util.MUtil; -public abstract class Colls, E extends Entity> +public abstract class Colls, E extends Entity> implements Active { protected Map name2coll = new HashMap(); @@ -21,11 +23,6 @@ public abstract class Colls, E extends Entity> // CONSTRUCT // -------------------------------------------- // - public void init() - { - this.getColls(); - } - public List getColls() { List ret = new ArrayList(); @@ -38,6 +35,44 @@ public abstract class Colls, E extends Entity> return ret; } + // -------------------------------------------- // + // ACTIVE + // -------------------------------------------- // + + private boolean active = false; + @Override + public boolean isActive() + { + return this.active; + } + @Override + public void setActive(boolean active) + { + this.active = active; + if (active) + { + this.getColls(); + } + else + { + // TODO: Uuuuuh + } + } + + private MassivePlugin plugin = null; + @Override + public MassivePlugin setActivePlugin(MassivePlugin plugin) + { + MassivePlugin ret = this.plugin; + this.plugin = plugin; + return ret; + } + @Override + public MassivePlugin getActivePlugin() + { + return this.plugin; + } + // -------------------------------------------- // // UTIL // -------------------------------------------- // @@ -78,7 +113,8 @@ public abstract class Colls, E extends Entity> { ret = this.createColl(collname); this.name2coll.put(collname, ret); - ret.init(); + ret.setActivePlugin(this.getActivePlugin()); + ret.setActive(true); } return ret; } diff --git a/src/com/massivecraft/massivecore/store/Entity.java b/src/com/massivecraft/massivecore/store/Entity.java index 66f0c398..61a2e3cb 100644 --- a/src/com/massivecraft/massivecore/store/Entity.java +++ b/src/com/massivecraft/massivecore/store/Entity.java @@ -118,7 +118,7 @@ public class Entity> Coll coll = this.getColl(); if (coll == null) return false; - if ( ! coll.inited()) return false; + if ( ! coll.isActive()) return false; return true; } diff --git a/src/com/massivecraft/massivecore/store/SenderColl.java b/src/com/massivecraft/massivecore/store/SenderColl.java index e8a7134c..31a0eac0 100644 --- a/src/com/massivecraft/massivecore/store/SenderColl.java +++ b/src/com/massivecraft/massivecore/store/SenderColl.java @@ -5,8 +5,8 @@ import java.util.Collection; import java.util.List; import org.bukkit.command.CommandSender; -import org.bukkit.plugin.Plugin; +import com.massivecraft.massivecore.MassivePlugin; import com.massivecraft.massivecore.SenderPresence; import com.massivecraft.massivecore.SenderType; import com.massivecraft.massivecore.command.type.sender.TypeSenderEntity; @@ -21,7 +21,7 @@ public class SenderColl> extends Coll implements Se // CONSTRUCT // -------------------------------------------- // - public SenderColl(String name, Class entityClass, Db db, Plugin plugin) + public SenderColl(String name, Class entityClass, Db db, MassivePlugin plugin) { super(name, entityClass, db, plugin); this.setCreative(true); diff --git a/src/com/massivecraft/massivecore/util/PlayerUtil.java b/src/com/massivecraft/massivecore/util/PlayerUtil.java index 1f502e06..896b0051 100644 --- a/src/com/massivecraft/massivecore/util/PlayerUtil.java +++ b/src/com/massivecraft/massivecore/util/PlayerUtil.java @@ -16,12 +16,9 @@ import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerRespawnEvent; -import org.bukkit.plugin.Plugin; +import com.massivecraft.massivecore.Engine; -import com.massivecraft.massivecore.EngineAbstract; -import com.massivecraft.massivecore.MassiveCore; - -public class PlayerUtil extends EngineAbstract +public class PlayerUtil extends Engine { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -29,15 +26,19 @@ public class PlayerUtil extends EngineAbstract private static PlayerUtil i = new PlayerUtil(); public static PlayerUtil get() { return i; } + public PlayerUtil() + { + this.setPeriod(1L); + } // -------------------------------------------- // // OVERRIDE // -------------------------------------------- // @Override - public void activate() + public void setActiveInner(boolean active) { - super.activate(); + if ( ! active) return; idToDeathEvent.clear(); idToDamageEvent.clear(); @@ -46,18 +47,6 @@ public class PlayerUtil extends EngineAbstract idToLastMoveMillis.clear(); } - @Override - public Plugin getPlugin() - { - return MassiveCore.get(); - } - - @Override - public Long getPeriod() - { - return 1L; - } - @Override public void run() {