diff --git a/plugin.yml b/plugin.yml index 25051e14..4aa9350f 100644 --- a/plugin.yml +++ b/plugin.yml @@ -2,7 +2,7 @@ name: mcore1 version: 1 main: com.massivecraft.mcore1.MCore authors: [Olof Larsson] -softdepend: [Vault, Spout] +softdepend: [Spout] commands: mcoresilenteater: description: ignore me. \ No newline at end of file diff --git a/src/com/massivecraft/mcore1/MCore.java b/src/com/massivecraft/mcore1/MCore.java index fd58a0ec..237001a4 100644 --- a/src/com/massivecraft/mcore1/MCore.java +++ b/src/com/massivecraft/mcore1/MCore.java @@ -7,6 +7,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; +import java.util.logging.Level; +import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -117,7 +119,7 @@ public class MCore extends JavaPlugin public static Random random = new Random(); public MCore() - { + { this.serverListener = new MCoreServerListener(this); this.serverListenerMonitor = new MCoreServerListenerMonitor(this); this.playerListener = new MCorePlayerListener(this); @@ -134,6 +136,8 @@ public class MCore extends JavaPlugin @Override public void onEnable() { + logPrefix = "["+this.getDescription().getName()+"] "; + // This is safe since all plugins using Persist should bukkit-depend this plugin. getPersistInstances().clear(); @@ -150,4 +154,17 @@ public class MCore extends JavaPlugin .disableHtmlEscaping() .excludeFieldsWithModifiers(Modifier.TRANSIENT); } + + // -------------------------------------------- // + // LOGGING + // -------------------------------------------- // + private static String logPrefix = null; + public static void log(Object... msg) + { + log(Level.INFO, msg); + } + public static void log(Level level, Object... msg) + { + Logger.getLogger("Minecraft").log(level, logPrefix + MCore.txt.implode(msg, " ")); + } } diff --git a/src/com/massivecraft/mcore1/cmd/MCommand.java b/src/com/massivecraft/mcore1/cmd/MCommand.java index c7eb1348..9737977b 100644 --- a/src/com/massivecraft/mcore1/cmd/MCommand.java +++ b/src/com/massivecraft/mcore1/cmd/MCommand.java @@ -2,6 +2,7 @@ package com.massivecraft.mcore1.cmd; import java.util.*; import java.util.Map.Entry; +import java.util.logging.Level; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -119,7 +120,7 @@ public abstract class MCommand protected CommandSender sender; public CommandSender getSender() { return this.sender; } public boolean getSenderIsConsole() { return ! (this.sender instanceof Player); } - public Player getMe() + public Player me() { if (sender instanceof Player) { @@ -394,6 +395,12 @@ public abstract class MCommand return defaultNotSet; } IArgHandler handler = p().cmd.getArgHandler(clazz); + + if (handler == null) + { + MCore.log(Level.SEVERE, "There is no ArgHandler for " + clazz.getName()); + } + T ret = handler.parse(this.arg(idx), style, this.sender, p()); if (ret == null) { @@ -408,6 +415,11 @@ public abstract class MCommand return this.argAs(idx, clazz, null, defaultNotSet, defaultNotFound); } + public T argAs(int idx, Class clazz, String style,T defaultNotSet) + { + return this.argAs(idx, clazz, style, defaultNotSet, null); + } + public T argAs(int idx, Class clazz,T defaultNotSet) { return this.argAs(idx, clazz, null, defaultNotSet, null); diff --git a/src/com/massivecraft/mcore1/cmd/arg/AHPlayer.java b/src/com/massivecraft/mcore1/cmd/arg/AHPlayer.java index ddab20d9..7648a137 100644 --- a/src/com/massivecraft/mcore1/cmd/arg/AHPlayer.java +++ b/src/com/massivecraft/mcore1/cmd/arg/AHPlayer.java @@ -16,7 +16,7 @@ public class AHPlayer extends AHBase this.error = null; if (str == null) return null; - if (style.equals("match")) + if (style != null && style.equals("match")) { List players = Bukkit.getServer().matchPlayer(str); if (players.size() > 0) diff --git a/src/com/massivecraft/mcore1/cmd/arg/AHPlayerWrapper.java b/src/com/massivecraft/mcore1/cmd/arg/AHPlayerWrapper.java index 23989b55..2e61c1da 100644 --- a/src/com/massivecraft/mcore1/cmd/arg/AHPlayerWrapper.java +++ b/src/com/massivecraft/mcore1/cmd/arg/AHPlayerWrapper.java @@ -23,7 +23,7 @@ public abstract class AHPlayerWrapper extends AHBase IClassManager manager = this.getManager(p); T ret; - if (style.equals("match")) + if (style != null && style.equals("match")) { ret = manager.getBestMatch(str); if (ret != null) diff --git a/src/com/massivecraft/mcore1/persist/Persist.java b/src/com/massivecraft/mcore1/persist/Persist.java index 31824c14..6cab81c9 100644 --- a/src/com/massivecraft/mcore1/persist/Persist.java +++ b/src/com/massivecraft/mcore1/persist/Persist.java @@ -30,25 +30,23 @@ public class Persist return this.classManagers; } - protected Timer timer = new Timer(); - - private Map, SaveTask> classSaveTasks = new HashMap, SaveTask>(); - @SuppressWarnings("unchecked") - public void setSaveInterval(Class clazz, long interval) + private Map, Timer> classSaveTimers = new HashMap, Timer>(); + public synchronized void setSaveInterval(Class clazz, long interval) { - // Fetch the task or create a new one. - SaveTask task = (SaveTask) this.classSaveTasks.get(clazz); - if (task == null) + // Clear old timer + Timer timer = this.classSaveTimers.get(clazz); + if (timer != null) { - task = new SaveTask(this, clazz); - this.classSaveTasks.put(clazz, task); - } - else - { - task.cancel(); + timer.cancel(); + this.classSaveTimers.remove(clazz); } - // Schedule the task + // Create new timer + timer = new Timer(); + this.classSaveTimers.put(clazz, timer); + + // Add the task to the timer + SaveTask task = new SaveTask(this, clazz); timer.scheduleAtFixedRate(task, interval, interval); };