From a7d3e96ab869efd01267bee6d221606791fcce41 Mon Sep 17 00:00:00 2001 From: Olof Larsson Date: Mon, 7 Apr 2014 01:50:57 +0200 Subject: [PATCH] Simplified the MCoreConf and added a variablebook feature. --- plugin.yml | 3 + .../massivecraft/mcore/EngineMainMCore.java | 60 ++++++++++++- .../massivecraft/mcore/EngineOfflineCase.java | 2 +- src/com/massivecraft/mcore/MCoreConf.java | 88 ++++++------------- src/com/massivecraft/mcore/MCorePerm.java | 2 +- .../massivecraft/mcore/TaskDeleteFiles.java | 2 +- 6 files changed, 92 insertions(+), 65 deletions(-) diff --git a/plugin.yml b/plugin.yml index 40ea6043..366c5db8 100644 --- a/plugin.yml +++ b/plugin.yml @@ -35,6 +35,7 @@ permissions: mcore.usys.aspect.use: {description: set multiverse for aspect, default: false} # misc mcore.notpdelay: {description: teleport without delay, default: false} + mcore.variablebook: {description: replace ***book*** with content of book in your hand, default: false} # -------------------------------------------- # # STAR NOTATION # -------------------------------------------- # @@ -65,6 +66,7 @@ permissions: mcore.usys.aspect.show: true mcore.usys.aspect.use: true mcore.notpdelay: true + mcore.variablebook: true # -------------------------------------------- # # KITS # -------------------------------------------- # @@ -96,6 +98,7 @@ permissions: mcore.usys.aspect.list: true mcore.usys.aspect.show: true mcore.notpdelay: true + mcore.variablebook: true mcore.kit.rank0: default: false children: diff --git a/src/com/massivecraft/mcore/EngineMainMCore.java b/src/com/massivecraft/mcore/EngineMainMCore.java index c8b62fb3..cb2e56d4 100644 --- a/src/com/massivecraft/mcore/EngineMainMCore.java +++ b/src/com/massivecraft/mcore/EngineMainMCore.java @@ -2,12 +2,15 @@ package com.massivecraft.mcore; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; +import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; +import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -18,9 +21,13 @@ import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerLoginEvent.Result; import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerTeleportEvent; +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.mcore.event.MCoreAfterPlayerRespawnEvent; @@ -35,6 +42,7 @@ import com.massivecraft.mcore.store.Coll; import com.massivecraft.mcore.store.SenderColl; import com.massivecraft.mcore.util.SenderUtil; import com.massivecraft.mcore.util.SmokeUtil; +import com.massivecraft.mcore.util.Txt; public class EngineMainMCore extends EngineAbstract { @@ -73,7 +81,7 @@ public class EngineMainMCore extends EngineAbstract public void recipientChat(final AsyncPlayerChatEvent event) { // Return unless we are using the recipient chat event - if (!MCoreConf.get().isUsingRecipientChatEvent()) return; + if (!MCoreConf.get().usingRecipientChatEvent) return; // Prepare vars MCorePlayerToRecipientChatEvent recipientEvent; @@ -150,6 +158,56 @@ public class EngineMainMCore extends EngineAbstract } } + // -------------------------------------------- // + // VARIABLE BOOK + // -------------------------------------------- // + + @EventHandler(priority = EventPriority.NORMAL) + public void variableBook(PlayerCommandPreprocessEvent event) + { + event.setMessage(variableBook(event.getPlayer(), event.getMessage())); + } + + @EventHandler(priority = EventPriority.LOW) + public void variableBook(AsyncPlayerChatEvent event) + { + event.setMessage(variableBook(event.getPlayer(), event.getMessage())); + } + + public static String variableBook(Player player, String message) + { + // If we are using command variable book ... + if (!MCoreConf.get().usingVariableBook) return message; + + // ... and the player has a book text ... + String bookText = getBookText(player); + if (bookText == null) return message; + + // ... and permission to use command variable book ... + if (!MCorePerm.VARIABLEBOOK.has(player, false)) return message; + + // ... then replace. + return StringUtils.replace(message, MCoreConf.get().variableBook, bookText); + } + + public static String getBookText(CommandSender sender) + { + if (sender == null) return null; + if (!(sender instanceof HumanEntity)) return null; + HumanEntity human = (HumanEntity)sender; + ItemStack item = human.getItemInHand(); + if (item == null) return null; + if (!item.hasItemMeta()) return null; + ItemMeta itemMeta = item.getItemMeta(); + if (!(itemMeta instanceof BookMeta)) return null; + BookMeta bookMeta = (BookMeta)itemMeta; + if (!bookMeta.hasPages()) return null; + List pages = bookMeta.getPages(); + String ret = Txt.implode(pages, " "); + ret = ret.replaceAll("\\n+", " "); + return ret; + } + // -------------------------------------------- // // EXPLOSION FX // -------------------------------------------- // diff --git a/src/com/massivecraft/mcore/EngineOfflineCase.java b/src/com/massivecraft/mcore/EngineOfflineCase.java index a37e14e2..5ed3cf19 100644 --- a/src/com/massivecraft/mcore/EngineOfflineCase.java +++ b/src/com/massivecraft/mcore/EngineOfflineCase.java @@ -91,7 +91,7 @@ public class EngineOfflineCase extends EngineAbstract public void forceOnePlayerNameCase(PlayerLoginEvent event) { // Stop if the feature is disabled - if (!MCoreConf.get().isForcingOnePlayerNameCase()) return; + if (!MCoreConf.get().forcingOnePlayerNameCase) return; // Stop if we are using online mode if (Bukkit.getOnlineMode()) return; diff --git a/src/com/massivecraft/mcore/MCoreConf.java b/src/com/massivecraft/mcore/MCoreConf.java index d46a9ead..9dd3ab27 100644 --- a/src/com/massivecraft/mcore/MCoreConf.java +++ b/src/com/massivecraft/mcore/MCoreConf.java @@ -1,7 +1,6 @@ package com.massivecraft.mcore; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -31,45 +30,45 @@ public class MCoreConf extends Entity public List aliasesOuterMCoreMStore = MUtil.list("mstore"); - // These getters and setters are obnoxious, defensive copying, NPE avoiding and probably thread safe. + public boolean usingRecipientChatEvent = true; - private boolean usingRecipientChatEvent = true; - public boolean isUsingRecipientChatEvent() { return this.usingRecipientChatEvent; } - public void setUsingRecipientChatEvent(boolean usingRecipientChatEvent) { this.usingRecipientChatEvent = usingRecipientChatEvent; this.changed(); } + public boolean forcingOnePlayerNameCase = true; - private boolean forcingOnePlayerNameCase = true; - public boolean isForcingOnePlayerNameCase() { return this.forcingOnePlayerNameCase; } - public void setForcingOnePlayerNameCase(boolean forcingOnePlayerNameCase) { this.forcingOnePlayerNameCase = forcingOnePlayerNameCase; this.changed(); } - - private Map permissionDeniedFormats = MUtil.map( + public Map permissionDeniedFormats = MUtil.map( "some.awesome.permission.node", "You must be awesome to %s.", "some.derp.permission.node.1", "derp", "some.derp.permission.node.2", "derp", "some.derp.permission.node.3", "derp", "derp", "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(); } - private Map permissionToTpdelay = MUtil.map( + public String getPermissionDeniedFormat(String permissionName) + { + Map map = this.permissionDeniedFormats; + String ret = map.get(permissionName); + if (ret == null) return null; + ret = MUtil.recurseResolveMap(ret, map); + return ret; + } + + public Map permissionToTpdelay = MUtil.map( "mcore.notpdelay", 0, "default", 10 ); - public Map getPermissionToTpdelay() { return this.permissionToTpdelay == null ? new LinkedHashMap() : new LinkedHashMap(this.permissionToTpdelay); } - public void setPermissionToTpdelay(Map permissionToTpdelay) { this.permissionToTpdelay = permissionToTpdelay == null ? new LinkedHashMap() : new LinkedHashMap(permissionToTpdelay); this.changed(); } - private List deleteFiles = new ArrayList(); - public List getDeleteFiles() { return this.deleteFiles == null ? new ArrayList() : new ArrayList(this.deleteFiles); } - public void setDeleteFiles(List deleteFiles) { this.deleteFiles = deleteFiles == null ? new ArrayList() : new ArrayList(deleteFiles); this.changed(); } + public int getTpdelay(Permissible permissible) + { + Integer ret = PermUtil.pickFirstVal(permissible, permissionToTpdelay); + if (ret == null) ret = 0; + return ret; + } + + public List deleteFiles = new ArrayList(); // Used in the MongoDB mstore driver. - private boolean catchingMongoDbErrorsOnSave = true; - public boolean isCatchingMongoDbErrorsOnSave() { return this.catchingMongoDbErrorsOnSave; } - public void setCatchingMongoDbErrorsOnSave(boolean catchingMongoDbErrorsOnSave) { this.catchingMongoDbErrorsOnSave = catchingMongoDbErrorsOnSave; this.changed(); } + public boolean catchingMongoDbErrorsOnSave = true; - private boolean catchingMongoDbErrorsOnDelete = true; - public boolean isCatchingMongoDbErrorsOnDelete() { return this.catchingMongoDbErrorsOnDelete; } - public void setCatchingMongoDbErrorsOnDelete(boolean catchingMongoDbErrorsOnDelete) { this.catchingMongoDbErrorsOnDelete = catchingMongoDbErrorsOnDelete; this.changed(); } + public boolean catchingMongoDbErrorsOnDelete = true; public static WriteConcern getMongoDbWriteConcern(boolean catchingErrors) { @@ -77,47 +76,14 @@ public class MCoreConf extends Entity } public WriteConcern getMongoDbWriteConcernSave() { - return getMongoDbWriteConcern(this.isCatchingMongoDbErrorsOnSave()); + return getMongoDbWriteConcern(this.catchingMongoDbErrorsOnSave); } public WriteConcern getMongoDbWriteConcernDelete() { - return getMongoDbWriteConcern(this.isCatchingMongoDbErrorsOnDelete()); + return getMongoDbWriteConcern(this.catchingMongoDbErrorsOnDelete); } - // -------------------------------------------- // - // 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) - { - Map map = this.getPermissionDeniedFormats(); - String ret = map.get(permissionName); - if (ret == null) return null; - ret = MUtil.recurseResolveMap(ret, map); - return ret; - } - - public int getTpdelay(Permissible permissible) - { - Integer ret = PermUtil.pickFirstVal(permissible, this.getPermissionToTpdelay()); - if (ret == null) ret = 0; - return ret; - } + public String variableBook = "***book***"; + public boolean usingVariableBook = true; } \ No newline at end of file diff --git a/src/com/massivecraft/mcore/MCorePerm.java b/src/com/massivecraft/mcore/MCorePerm.java index ede1d1e0..7daa22bf 100644 --- a/src/com/massivecraft/mcore/MCorePerm.java +++ b/src/com/massivecraft/mcore/MCorePerm.java @@ -34,7 +34,7 @@ public enum MCorePerm USYS_ASPECT_SHOW("usys.aspect.show"), USYS_ASPECT_USE("usys.aspect.use"), NOTPDELAY("notpdelay"), - + VARIABLEBOOK("variablebook"), // END OF LIST ; diff --git a/src/com/massivecraft/mcore/TaskDeleteFiles.java b/src/com/massivecraft/mcore/TaskDeleteFiles.java index abf3bf41..a9f02d26 100644 --- a/src/com/massivecraft/mcore/TaskDeleteFiles.java +++ b/src/com/massivecraft/mcore/TaskDeleteFiles.java @@ -18,7 +18,7 @@ public class TaskDeleteFiles implements Runnable @Override public void run() { - for (String deleteFile : MCoreConf.get().getDeleteFiles()) + for (String deleteFile : MCoreConf.get().deleteFiles) { File file = new File(deleteFile); file.delete();