diff --git a/README.md b/README.md index e2c0c36..c15e23f 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,8 @@ 经测试支持大部分1.7.10-1.12的服务器. 其他版本未做测试. +本插件增加了称号管理功能,默认情况下为关闭状态.(2018-06-15) + #### 插件截图: ![image](http://i.imgur.com/cnnd5hb.jpg) ![image](http://i.imgur.com/bqvIVvz.jpg) @@ -52,6 +54,7 @@ - **玩家登录时删除过期的或无效数据** - **提示剩余时间** - **权限包到期可执行自定义命令** +- **增加称号管理功能** - 取消前置插件 diff --git a/pom.xml b/pom.xml index 233727e..a25dcaa 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 gg.frog.mc permissionstime - 0.3.3-SNAPSHOT + 0.4.0-SNAPSHOT jar PermissionsTime 支持跨服的权限限时插件 diff --git a/src/main/gg/frog/mc/permissionstime/PluginMain.java b/src/main/gg/frog/mc/permissionstime/PluginMain.java index c9d43a8..f2c8fbd 100644 --- a/src/main/gg/frog/mc/permissionstime/PluginMain.java +++ b/src/main/gg/frog/mc/permissionstime/PluginMain.java @@ -19,6 +19,7 @@ import gg.frog.mc.permissionstime.listener.MainListener; import gg.frog.mc.permissionstime.utils.FileUtil; import gg.frog.mc.permissionstime.utils.StrUtil; import gg.frog.mc.permissionstime.utils.UpdateCheck; +import net.milkbowl.vault.chat.Chat; import net.milkbowl.vault.permission.Permission; public class PluginMain extends JavaPlugin { @@ -33,6 +34,7 @@ public class PluginMain extends JavaPlugin { private PluginMain pm = null; private SqlManager sm = null; private Permission permission = null; + private Chat chat = null; public PluginMain() { PLUGIN_NAME = getDescription().getName(); @@ -51,9 +53,9 @@ public class PluginMain extends JavaPlugin { getServer().getConsoleSender().sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + " https://github.com/geekfrog/PermissionsTime/ ")); getServer().getConsoleSender().sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX)); getServer().getConsoleSender().sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "===============================")); - getServer().getScheduler().runTask(pm, new UpdateCheck(pm)); getServer().getScheduler().runTask(pm, new Runnable() { - public void run() { + + public void run() { if (!checkPluginDepends()) { getServer().getConsoleSender().sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "&4Startup failure!")); getServer().getPluginManager().disablePlugin(pm); @@ -64,12 +66,12 @@ public class PluginMain extends JavaPlugin { } if (PluginCfg.IS_METRICS) { try { - Metrics metrics = new Metrics(pm); -// metrics.addCustomChart(new Metrics.SimplePie("chart_id", () -> "My value")); + new Metrics(pm); } catch (Exception e) { e.printStackTrace(); } } + getServer().getScheduler().runTaskAsynchronously(pm, new UpdateCheck(pm)); } }); } @@ -108,7 +110,11 @@ public class PluginMain extends JavaPlugin { return permission; } - private boolean checkPluginDepends() { + public Chat getChat() { + return chat; + } + + private boolean checkPluginDepends() { boolean needDepend = false; for (String name : DEPEND_PLUGIN.split(",")) { if (getServer().getPluginManager().getPlugin(name) == null) { @@ -120,6 +126,10 @@ public class PluginMain extends JavaPlugin { getServer().getConsoleSender().sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "&4Cann''t hook vault permission")); needDepend = true; } + if (!needDepend && !setupChat()) { + getServer().getConsoleSender().sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "&4Cann''t hook vault chat")); + needDepend = true; + } if (!needDepend && !setupDatabase()) { getServer().getConsoleSender().sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "&4Cann''t setup database")); needDepend = true; @@ -148,6 +158,14 @@ public class PluginMain extends JavaPlugin { return (permission != null); } + private boolean setupChat() { + RegisteredServiceProvider chatProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.chat.Chat.class); + if (chatProvider != null) { + chat = chatProvider.getProvider(); + } + return (chat != null); + } + private boolean setupDatabase() { sm = new SqlManager(pm); return sm.updateDatabase(); diff --git a/src/main/gg/frog/mc/permissionstime/command/MainCommand.java b/src/main/gg/frog/mc/permissionstime/command/MainCommand.java index 9672620..b32f30e 100644 --- a/src/main/gg/frog/mc/permissionstime/command/MainCommand.java +++ b/src/main/gg/frog/mc/permissionstime/command/MainCommand.java @@ -46,7 +46,13 @@ public class MainCommand implements CommandExecutor, TabCompleter { if (sender.isOp() || player.hasPermission("permissionstime.reload")) { for (Player p : pm.getServer().getOnlinePlayers()) { InventoryView inventory = p.getOpenInventory(); - if (StrUtil.messageFormat(LangCfg.INVENTORY_NAME + "&r&5&9&2&0&r").equals(inventory.getTitle())) { + if (inventory!=null && + ( + StrUtil.messageFormat(LangCfg.INVENTORY_NAME + "&r&5&9&2&0&r").equals(inventory.getTitle()) + || + StrUtil.messageFormat(LangCfg.TAG_INVENTORY_NAME + "&r&5&9&2&0&r").equals(inventory.getTitle()) + ) + ) { inventory.close(); } } @@ -79,6 +85,15 @@ public class MainCommand implements CommandExecutor, TabCompleter { if (hasPermission(sender, isPlayer, "permissionstime.me")) { MeCmd meCmd = new MeCmd(pm, sender, isPlayer, args); new Thread(meCmd).start(); + } + } else if (args[0].equalsIgnoreCase("tag")) { + if (hasPermission(sender, isPlayer, "permissionstime.tag")) { + if(PluginCfg.TAG_SYSTEM) { + TagCmd tagCmd = new TagCmd(pm, sender, isPlayer, args); + new Thread(tagCmd).start(); + }else { + sender.sendMessage(StrUtil.messageFormat(LangCfg.MSG_FUNC_DISABLED, LangCfg.TAG)); + } } } else if (args[0].equalsIgnoreCase("give")) { if (hasPermission(sender, isPlayer, "permissionstime.give")) { @@ -124,6 +139,9 @@ public class MainCommand implements CommandExecutor, TabCompleter { if (isPlayer && (sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".me"))) { sender.sendMessage(StrUtil.messageFormat(LangCfg.CMD_ME, pm.PLUGIN_NAME_LOWER_CASE)); } + if (isPlayer && (sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".tag"))) { + sender.sendMessage(StrUtil.messageFormat(LangCfg.CMD_TAG, pm.PLUGIN_NAME_LOWER_CASE)); + } if (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".packages")) { sender.sendMessage(StrUtil.messageFormat(LangCfg.CMD_PACKAGES, pm.PLUGIN_NAME_LOWER_CASE)); } @@ -171,6 +189,9 @@ public class MainCommand implements CommandExecutor, TabCompleter { if ("me".startsWith(args[0]) && (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".me"))) { tipList.add("me"); } + if ("tag".startsWith(args[0]) && (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".tag"))) { + tipList.add("tag"); + } if ("packages".startsWith(args[0]) && (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".packages"))) { tipList.add("packages"); } @@ -201,8 +222,10 @@ public class MainCommand implements CommandExecutor, TabCompleter { tipList.add(name); } } - } else if ("give".equalsIgnoreCase(args[0]) || "set".equalsIgnoreCase(args[0]) || "get".equalsIgnoreCase(args[0]) || "remove".equalsIgnoreCase(args[0]) || "removeall".equalsIgnoreCase(args[0])) { - return null; + } else if ("tag".equalsIgnoreCase(args[0]) && (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".tag"))) { + tipList.add("c"); + tipList.add("p"); + tipList.add("s"); } } else if (args.length == 3) { args[0] = args[0].toLowerCase(Locale.ENGLISH); diff --git a/src/main/gg/frog/mc/permissionstime/command/TagCmd.java b/src/main/gg/frog/mc/permissionstime/command/TagCmd.java new file mode 100644 index 0000000..0cba439 --- /dev/null +++ b/src/main/gg/frog/mc/permissionstime/command/TagCmd.java @@ -0,0 +1,70 @@ +package gg.frog.mc.permissionstime.command; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +import org.bukkit.inventory.ItemStack; + +import gg.frog.mc.permissionstime.PluginMain; +import gg.frog.mc.permissionstime.config.LangCfg; +import gg.frog.mc.permissionstime.config.PluginCfg; +import gg.frog.mc.permissionstime.config.TagNameCfg; +import gg.frog.mc.permissionstime.config.TagNameCfg.TagType; +import gg.frog.mc.permissionstime.gui.PlayerTagShow; +import gg.frog.mc.permissionstime.utils.StrUtil; + +public class TagCmd implements Runnable { + + private PluginMain pm; + private String[] args; + private CommandSender sender; + private boolean isPlayer; + + public TagCmd(PluginMain pm, CommandSender sender, boolean isPlayer, String[] args) { + this.pm = pm; + this.sender = sender; + this.isPlayer = isPlayer; + this.args = args; + } + + @Override + public void run() { + if (isPlayer) { + if (args.length == 2) { + sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + LangCfg.MSG_PROCESSING)); + List itemList = new ArrayList(); + TagType type = null; + Map> p_i_map; + if ("c".equals(args[1])) { + type = TagNameCfg.TagType.NAMECOLOR_TYPE; + p_i_map = TagNameCfg.NAMECOLOR_ITEMS; + } else if ("p".equals(args[1])) { + type = TagNameCfg.TagType.PREFIX_TYPE; + p_i_map = TagNameCfg.PREFIX_ITEMS; + } else if ("s".equals(args[1])) { + type = TagNameCfg.TagType.SUFFIX_TYPE; + p_i_map = TagNameCfg.SUFFIX_ITEMS; + } else { + sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + LangCfg.MSG_PARAMETER_MISMATCH)); + sender.sendMessage(StrUtil.messageFormat(LangCfg.CMD_TAG, pm.PLUGIN_NAME_LOWER_CASE)); + return; + } + for (String p : p_i_map.keySet()) { + if ("".equals(p) || sender.hasPermission(p)) { + itemList.addAll(p_i_map.get(p)); + } + } + OfflinePlayer player = pm.getOfflinePlayer(sender.getName()); + PlayerTagShow.show(player.getPlayer(), type, itemList); + } else { + sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + LangCfg.MSG_PARAMETER_MISMATCH)); + sender.sendMessage(StrUtil.messageFormat(LangCfg.CMD_TAG, pm.PLUGIN_NAME_LOWER_CASE)); + } + } else { + sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "&4Only player can use this command.")); + } + } +} diff --git a/src/main/gg/frog/mc/permissionstime/config/ConfigManager.java b/src/main/gg/frog/mc/permissionstime/config/ConfigManager.java index 940114e..76e613c 100644 --- a/src/main/gg/frog/mc/permissionstime/config/ConfigManager.java +++ b/src/main/gg/frog/mc/permissionstime/config/ConfigManager.java @@ -33,6 +33,7 @@ public class ConfigManager { cfgMap.put("plugin", new PluginCfg(pm)); cfgMap.put("lang", new LangCfg("lang/" + PluginCfg.LANG + ".yml", pm)); cfgMap.put("packages", new PackagesCfg("packages.yml", pm)); + cfgMap.put("tagNames", new TagNameCfg("tagNames.yml", pm)); } public void reloadConfig() { @@ -74,7 +75,7 @@ public class ConfigManager { @Override public boolean isProcess(String fileName) { - if (fileName.matches("lang/.+\\.yml") || "config.yml".equals(fileName) || "packages.yml".equals(fileName)) { + if (fileName.matches("lang/.+\\.yml") || "config.yml".equals(fileName) || "packages.yml".equals(fileName) || "tagNames.yml".equals(fileName)) { File f = new File(pm.getDataFolder(), fileName); if (!f.exists()) { return true; diff --git a/src/main/gg/frog/mc/permissionstime/config/LangCfg.java b/src/main/gg/frog/mc/permissionstime/config/LangCfg.java index 4b88b48..9b71135 100644 --- a/src/main/gg/frog/mc/permissionstime/config/LangCfg.java +++ b/src/main/gg/frog/mc/permissionstime/config/LangCfg.java @@ -12,11 +12,14 @@ import gg.frog.mc.permissionstime.utils.config.PluginConfig; public class LangCfg extends PluginConfig { public static String INVENTORY_NAME = null; + public static String TAG_INVENTORY_NAME = null; public static String EXPIRATION_TIME = null; public static String LEFT_TIME = null; public static String TIME_UNIT_D = null; public static String TIME_UNIT_H = null; public static String TIME_UNIT_M = null; + public static String TIME_FOREVER = null; + public static String TAG = null; public static String MSG_PARAMETER_MISMATCH = null; public static String MSG_TIME_PARAMETER_INCORRECT = null; @@ -47,9 +50,12 @@ public class LangCfg extends PluginConfig { public static String MSG_EXPIRATION_DATE = null; public static String MSG_UNKNOWN_PACKAGE = null; public static String MSG_IS_EXPIRATION_DATE = null; + public static String MSG_FUNC_DISABLED = null; + public static String MSG_TAG_SET_SUCCESS = null; public static String CMD_HELP = null; public static String CMD_ME = null; + public static String CMD_TAG = null; public static String CMD_PACKAGES = null; public static String CMD_GET = null; public static String CMD_GIVE = null; @@ -68,11 +74,14 @@ public class LangCfg extends PluginConfig { @Override protected void loadToDo() { INVENTORY_NAME = getConfig().getString("inventoryName", "&4===Permissions Packages==="); + TAG_INVENTORY_NAME = getConfig().getString("tagInventoryName", "&4===Tag Packages==="); EXPIRATION_TIME = getConfig().getString("expirationTime", "&4Expiration time: {0}"); LEFT_TIME = getConfig().getString("leftTime", "&4Left time: About {0}{1} {2}{3} {4}{5}"); TIME_UNIT_D = getConfig().getString("timeUnitD", "day(s)"); TIME_UNIT_H = getConfig().getString("timeUnitH", "hour(s)"); TIME_UNIT_M = getConfig().getString("timeUnitM", "minute(s)"); + TIME_FOREVER = getConfig().getString("timeForever", "Forever"); + TAG = getConfig().getString("tag", "Tag/Prefix"); MSG_PARAMETER_MISMATCH = getConfig().getString("msg.parameterMismatch", "&4Parameter mismatch."); MSG_TIME_PARAMETER_INCORRECT = getConfig().getString("msg.timeParameterIncorrect", "&4The number of time is incorrect. Please enter a nonzero integer."); @@ -103,9 +112,12 @@ public class LangCfg extends PluginConfig { MSG_EXPIRATION_DATE = getConfig().getString("msg.expirationDate", "{0}packages: {1}({2}), Expiration date: {3}, {4}"); MSG_UNKNOWN_PACKAGE = getConfig().getString("msg.unknownPackage", "Unknown Packages"); MSG_IS_EXPIRATION_DATE = getConfig().getString("msg.isExpirationDate", "Your package: {0}({1})&r has expired."); + MSG_FUNC_DISABLED = getConfig().getString("msg.funcDisabled", "{0} functionality disabled."); + MSG_TAG_SET_SUCCESS = getConfig().getString("msg.tagSetSuccess", "&2Tag Set Success."); CMD_HELP = getConfig().getString("cmd.help", "/{0} help \\n&7 - Show commands."); - CMD_ME = getConfig().getString("cmd.me", "&6/{0} me \\n&7 - View self package."); + CMD_ME = getConfig().getString("cmd.me", "&6/{0} me \\n&7 - View your packages."); + CMD_TAG = getConfig().getString("cmd.tag", "&6/{0} tag \\n&7 - View your color/prefix/suffix tags."); CMD_PACKAGES = getConfig().getString("cmd.packages", "&6/{0} packages [packageName] \\n&7 - View packages."); CMD_GET = getConfig().getString("cmd.get", "&6/{0} get \\n&7 - View player packages."); CMD_GIVE = getConfig().getString("cmd.give", "&6/{0} give