From edabc025554374a379a7e4cc4f234d4a68b5ef11 Mon Sep 17 00:00:00 2001 From: Olof Larsson Date: Tue, 26 Mar 2013 10:20:00 +0100 Subject: [PATCH] Implemented a mstore mcore config with custom permission denied formats. --- src/com/massivecraft/mcore/ConfServer.java | 5 +- .../massivecraft/mcore/InternalListener.java | 19 +++++ src/com/massivecraft/mcore/MCore.java | 4 +- src/com/massivecraft/mcore/MCoreConf.java | 71 +++++++++++++++++++ src/com/massivecraft/mcore/MCoreConfColl.java | 38 ++++++++++ .../MCorePermissionDeniedFormatEvent.java | 1 + 6 files changed, 135 insertions(+), 3 deletions(-) create mode 100644 src/com/massivecraft/mcore/MCoreConf.java create mode 100644 src/com/massivecraft/mcore/MCoreConfColl.java diff --git a/src/com/massivecraft/mcore/ConfServer.java b/src/com/massivecraft/mcore/ConfServer.java index 07824f49..8105602b 100644 --- a/src/com/massivecraft/mcore/ConfServer.java +++ b/src/com/massivecraft/mcore/ConfServer.java @@ -25,13 +25,13 @@ public class ConfServer extends SimpleConfig // -------------------------------------------- // public static String dburi = "gson://./mstore"; + public static String serverid = UUID.randomUUID().toString(); + public static Map> cmdaliases = MUtil.map( CmdUsys.USYS, MUtil.list(CmdUsys.USYS), CmdMcore.MCORE, MUtil.list(CmdMcore.MCORE) ); - public static int tpdelay = 10; - public static List getCmdAliases(String name) { List ret = cmdaliases.get(name); @@ -44,6 +44,7 @@ public class ConfServer extends SimpleConfig return ret; } + public static int tpdelay = 10; public static int getTpdelay(Permissible permissible) { if (Perm.NOTPDELAY.has(permissible, false)) return 0; diff --git a/src/com/massivecraft/mcore/InternalListener.java b/src/com/massivecraft/mcore/InternalListener.java index 2bc762cb..d6c1504a 100644 --- a/src/com/massivecraft/mcore/InternalListener.java +++ b/src/com/massivecraft/mcore/InternalListener.java @@ -23,6 +23,7 @@ import org.bukkit.event.player.PlayerTeleportEvent; import com.massivecraft.mcore.event.MCoreAfterPlayerRespawnEvent; import com.massivecraft.mcore.event.MCoreAfterPlayerTeleportEvent; +import com.massivecraft.mcore.event.MCorePermissionDeniedFormatEvent; import com.massivecraft.mcore.event.MCorePlayerLeaveEvent; import com.massivecraft.mcore.event.MCoreSenderRegisterEvent; import com.massivecraft.mcore.event.MCoreSenderUnregisterEvent; @@ -51,6 +52,24 @@ public class InternalListener implements Listener Bukkit.getPluginManager().registerEvents(this, MCore.get()); } + // -------------------------------------------- // + // PERMISSION DENIED FORMAT + // -------------------------------------------- // + + @EventHandler(priority = EventPriority.NORMAL) + public void permissionDeniedFormat(MCorePermissionDeniedFormatEvent event) + { + // If noone set a format already ... + if (event.hasFormat()) return; + + // ... and we have a custom format in the config ... + String customFormat = MCoreConf.get().getPermissionDeniedFormat(event.getPermissionName()); + if (customFormat == null) return; + + // ... then make use of that format. + event.setFormat(customFormat); + } + // -------------------------------------------- // // CHAT TAB COMPLETE // -------------------------------------------- // diff --git a/src/com/massivecraft/mcore/MCore.java b/src/com/massivecraft/mcore/MCore.java index 992f7372..9651e27a 100644 --- a/src/com/massivecraft/mcore/MCore.java +++ b/src/com/massivecraft/mcore/MCore.java @@ -109,6 +109,7 @@ public class MCore extends MPlugin if ( ! preEnable()) return; + // Load Server Config ConfServer.get().load(); // Setup the default database @@ -127,9 +128,10 @@ public class MCore extends MPlugin // Schedule the collection ticker. Bukkit.getScheduler().scheduleSyncRepeatingTask(this, this.collTickTask, 1, 1); - // Init internal collections + // Initialize Internal Collections MultiverseColl.get().init(); AspectColl.get().init(); + MCoreConfColl.get().init(); // Register commands this.cmdUsys = new CmdUsys(); diff --git a/src/com/massivecraft/mcore/MCoreConf.java b/src/com/massivecraft/mcore/MCoreConf.java new file mode 100644 index 00000000..f1222397 --- /dev/null +++ b/src/com/massivecraft/mcore/MCoreConf.java @@ -0,0 +1,71 @@ +package com.massivecraft.mcore; + +import java.util.LinkedHashMap; +import java.util.Map; + +import com.massivecraft.mcore.MCore; +import com.massivecraft.mcore.store.Entity; +import com.massivecraft.mcore.util.MUtil; + +public class MCoreConf extends Entity +{ + // -------------------------------------------- // + // META + // -------------------------------------------- // + + public static MCoreConf get() + { + return MCoreConfColl.get().get(MCore.INSTANCE); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public MCoreConf load(MCoreConf that) + { + this.permissionDeniedFormats = that.permissionDeniedFormats; + + return this; + } + + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + // These getters and setters are obnoxious, defensive copying, NPE avoiding and probably thread safe. + + private Map permissionDeniedFormats = MUtil.map( + "some.awesome.permission.node", "You must be awesome to %s.", + "some.derp.permission.node", "Only derp people can %s.\nAsk a moderator to become derp." + ); + public Map getPermissionDeniedFormats() { return this.permissionDeniedFormats == null ? new LinkedHashMap() : new LinkedHashMap(this.permissionDeniedFormats); } + public void setPermissionDeniedFormats(Map permissionDeniedFormats) { this.permissionDeniedFormats = permissionDeniedFormats == null ? new LinkedHashMap() : new LinkedHashMap(permissionDeniedFormats); this.changed(); } + + // -------------------------------------------- // + // HELP ACCESS + // -------------------------------------------- // + + public String setPermissionDeniedFormat(String permissionName, String permissionDeniedFormat) + { + Map temp = this.getPermissionDeniedFormats(); + String ret = temp.put(permissionName, permissionDeniedFormat); + this.setPermissionDeniedFormats(temp); + return ret; + } + + public String removePermissionDeniedFormat(String permissionName) + { + Map temp = this.getPermissionDeniedFormats(); + String ret = temp.remove(permissionName); + this.setPermissionDeniedFormats(temp); + return ret; + } + + public String getPermissionDeniedFormat(String permissionName) + { + return this.getPermissionDeniedFormats().get(permissionName); + } + + +} \ No newline at end of file diff --git a/src/com/massivecraft/mcore/MCoreConfColl.java b/src/com/massivecraft/mcore/MCoreConfColl.java new file mode 100644 index 00000000..176ace9e --- /dev/null +++ b/src/com/massivecraft/mcore/MCoreConfColl.java @@ -0,0 +1,38 @@ +package com.massivecraft.mcore; + +import com.massivecraft.mcore.MCore; +import com.massivecraft.mcore.store.Coll; +import com.massivecraft.mcore.store.MStore; + +public class MCoreConfColl extends Coll +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static MCoreConfColl i = new MCoreConfColl(); + public static MCoreConfColl get() { return i; } + private MCoreConfColl() + { + super(MStore.getDb(ConfServer.dburi), MCore.get(), "ai", "mcore_conf", MCoreConf.class, String.class, true); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public void init() + { + super.init(); + this.get(MCore.INSTANCE); + } + + @Override + public synchronized void loadFromRemote(Object oid) + { + super.loadFromRemote(oid); + if ( ! this.inited()) return; + } + +} diff --git a/src/com/massivecraft/mcore/event/MCorePermissionDeniedFormatEvent.java b/src/com/massivecraft/mcore/event/MCorePermissionDeniedFormatEvent.java index 82d42378..559ba6e2 100644 --- a/src/com/massivecraft/mcore/event/MCorePermissionDeniedFormatEvent.java +++ b/src/com/massivecraft/mcore/event/MCorePermissionDeniedFormatEvent.java @@ -22,6 +22,7 @@ public class MCorePermissionDeniedFormatEvent extends MCoreEvent private String format; public String getFormat() { return this.format; } public void setFormat(String format) { this.format = format; } + public boolean hasFormat() { return this.format != null; } // -------------------------------------------- // // CONSTRUCT