From e0e3ce448c0bd1f1bfba12b179f40f44d9a6e140 Mon Sep 17 00:00:00 2001 From: GeekFrog Date: Thu, 13 Jul 2017 07:17:41 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E3=80=81=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E3=80=81=E6=B5=8B=E8=AF=95=E6=9D=83=E9=99=90=E7=BB=84=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 ++- .../frog/mc/permissionstime/PluginMain.java | 21 ++++-- .../mc/permissionstime/command/GiveCmd.java | 32 ++++++--- .../permissionstime/command/MainCommand.java | 40 +++++++---- .../permissionstime/command/PackagesCmd.java | 12 ++-- .../permissionstime/command/RemoveAllCmd.java | 48 +++++++++++++ .../mc/permissionstime/command/RemoveCmd.java | 55 ++++++++++++++ .../mc/permissionstime/command/SetCmd.java | 67 +++++++++++++++++ .../permissionstime/config/PackagesCfg.java | 4 +- .../database/IPlayerDataService.java | 2 +- .../permissionstime/database/SqlManager.java | 39 ++++++++++ .../impl/SqlitePlayerDataService.java | 23 ++++-- src/resources/plugin.yml | 72 ++++++++++--------- 13 files changed, 347 insertions(+), 79 deletions(-) create mode 100644 src/main/gg/frog/mc/permissionstime/command/RemoveAllCmd.java create mode 100644 src/main/gg/frog/mc/permissionstime/command/RemoveCmd.java create mode 100644 src/main/gg/frog/mc/permissionstime/command/SetCmd.java diff --git a/README.md b/README.md index 64c100e..9a84685 100644 --- a/README.md +++ b/README.md @@ -3,18 +3,23 @@ #### 构建地址:[http://ci.frog.gg/jenkins/job/PermissionsTime/](http://ci.frog.gg/jenkins/job/PermissionsTime/) -##### 插件目标: +##### 插件进度: 加粗项已完成 - **在配置文件中编辑权限包(可含有多个权限组和多个权限)** - **时间可以累加** - **支持重载** -- 命令支持给玩家**添加**、设置、移除、权限包时间 -- 支持UUID +- **支持UUID** +- 命令支持给玩家**添加**、**设置**、**移除**、查询自身权限包时间 +- 添加、设置、移除-命令执行失败记录 +- 手动删除过期的数据 +- 调用vault API 设置玩家权限(登录时、游戏中、退出时) - mysql保存数据 - 支持不同世界权限 - 支持前后缀管理 +- 支持分页? +- 支持操作离线用户? ##### 使用统计: ![image](http://i.mcstats.org/PermissionsTime/Global+Statistics.borderless.png) \ No newline at end of file diff --git a/src/main/gg/frog/mc/permissionstime/PluginMain.java b/src/main/gg/frog/mc/permissionstime/PluginMain.java index c916888..4b3a0d7 100644 --- a/src/main/gg/frog/mc/permissionstime/PluginMain.java +++ b/src/main/gg/frog/mc/permissionstime/PluginMain.java @@ -6,7 +6,6 @@ import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; import org.mcstats.Metrics; @@ -94,6 +93,10 @@ public class PluginMain extends JavaPlugin { return sm; } + public Permission getPermission() { + return permission; + } + private boolean checkPluginDepends() { boolean needDepend = false; for (String name : DEPEND_PLUGIN.split(",")) { @@ -141,14 +144,18 @@ public class PluginMain extends JavaPlugin { } public UUID getPlayerUUIDByName(String name) { - for (Player p : getServer().getOnlinePlayers()) { - if (p.getName().equals(name)) { - return p.getUniqueId(); - } + OfflinePlayer p = getOfflinePlayer(name); + if (p == null) { + return null; + } else { + return p.getUniqueId(); } + } + + public OfflinePlayer getOfflinePlayer(String name) { for (OfflinePlayer p : getServer().getOfflinePlayers()) { - if (p.getName().equals(name)) { - return p.getUniqueId(); + if (p.getName().equalsIgnoreCase(name)) { + return p; } } return null; diff --git a/src/main/gg/frog/mc/permissionstime/command/GiveCmd.java b/src/main/gg/frog/mc/permissionstime/command/GiveCmd.java index 473e5ed..74c9861 100644 --- a/src/main/gg/frog/mc/permissionstime/command/GiveCmd.java +++ b/src/main/gg/frog/mc/permissionstime/command/GiveCmd.java @@ -2,6 +2,7 @@ package gg.frog.mc.permissionstime.command; import java.util.UUID; +import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import gg.frog.mc.permissionstime.PluginMain; @@ -11,44 +12,58 @@ import gg.frog.mc.permissionstime.database.SqlManager; import gg.frog.mc.permissionstime.model.cfg.PermissionPackageBean; import gg.frog.mc.permissionstime.utils.StrUtil; -public class GiveCmd { +public class GiveCmd implements Runnable { private PluginMain pm; private SqlManager sm; + private String[] args; + private CommandSender sender; - public GiveCmd(PluginMain pm) { + public GiveCmd(PluginMain pm, CommandSender sender, String[] args) { this.pm = pm; this.sm = pm.getSqlManager(); + this.sender = sender; + this.args = args; } - public boolean onCommand(CommandSender sender, boolean isPlayer, String[] args) { + @Override + public void run() { if (args.length == 4) { String playerName = args[1]; String packageName = args[2]; String time = args[3]; - int days; + int days = 0; try { days = Integer.parseInt(time); if (days <= 0) { sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "时间参数不正确,请输入正整数")); - return false; + return; } } catch (Exception e) { sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "时间参数不正确,请输入正整数")); - return false; + return; } PermissionPackageBean pack = PackagesCfg.PACKAGES.get(packageName); if (pack != null) { - UUID uuid = pm.getPlayerUUIDByName(playerName); - if (uuid != null) { + OfflinePlayer player = pm.getOfflinePlayer(playerName); + if (player != null) { + UUID uuid = player.getUniqueId(); if (PluginCfg.IS_DEBUG) { sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + uuid.toString() + "\n" + pack.toString() + "\n" + time + "天")); } if (sm.giveTime(uuid.toString(), packageName, days)) { + if (player.isOnline()) { + for (String groupName : pack.getGroups()) { + if (!pm.getPermission().playerAddGroup(null, player, groupName)) { + sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "权限组{0}添加失败", groupName)); + } + } + } sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "给予玩家 {0} {1}天的 {2}", playerName, time, pack.getDisplayName())); } else { sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "未给予玩家 {0} {1}天的 {2}", playerName, time, pack.getDisplayName())); } + } else { sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "找不到名为''{0}''的玩家", playerName)); } @@ -58,6 +73,5 @@ public class GiveCmd { } else { sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "参数不正确")); } - return false; } } diff --git a/src/main/gg/frog/mc/permissionstime/command/MainCommand.java b/src/main/gg/frog/mc/permissionstime/command/MainCommand.java index a5cfa1d..e5e133b 100644 --- a/src/main/gg/frog/mc/permissionstime/command/MainCommand.java +++ b/src/main/gg/frog/mc/permissionstime/command/MainCommand.java @@ -15,14 +15,10 @@ public class MainCommand implements CommandExecutor { private PluginMain pm; private SqlManager sm; - private GiveCmd giveCmd; - private PackagesCmd packagesCmd; public MainCommand(PluginMain pm) { this.pm = pm; this.sm = pm.getSqlManager(); - giveCmd = new GiveCmd(pm); - packagesCmd = new PackagesCmd(pm); } @Override @@ -59,28 +55,38 @@ public class MainCommand implements CommandExecutor { return true; } else if (args[0].equalsIgnoreCase("me")) { if (hasPermission(sender, isPlayer, "permissionstime.me")) { - return giveCmd.onCommand(sender, isPlayer, args); + GiveCmd giveCmd = new GiveCmd(pm, sender, args); + new Thread(giveCmd).start(); } } else if (args[0].equalsIgnoreCase("give")) { if (hasPermission(sender, isPlayer, "permissionstime.give")) { - return giveCmd.onCommand(sender, isPlayer, args); + GiveCmd giveCmd = new GiveCmd(pm, sender, args); + new Thread(giveCmd).start(); } } else if (args[0].equalsIgnoreCase("set")) { if (hasPermission(sender, isPlayer, "permissionstime.set")) { - return giveCmd.onCommand(sender, isPlayer, args); + SetCmd setCmd = new SetCmd(pm, sender, args); + new Thread(setCmd).start(); } } else if (args[0].equalsIgnoreCase("remove")) { if (hasPermission(sender, isPlayer, "permissionstime.remove")) { - return giveCmd.onCommand(sender, isPlayer, args); + RemoveCmd removeCmd = new RemoveCmd(pm, sender, args); + new Thread(removeCmd).start(); + } + } else if (args[0].equalsIgnoreCase("removeall")) { + if (hasPermission(sender, isPlayer, "permissionstime.removeall")) { + RemoveAllCmd removeAllCmd = new RemoveAllCmd(pm, sender, args); + new Thread(removeAllCmd).start(); } } else if (args[0].equalsIgnoreCase("packages")) { if (hasPermission(sender, isPlayer, "permissionstime.packages")) { - return packagesCmd.onCommand(sender, isPlayer, args); + PackagesCmd packagesCmd = new PackagesCmd(pm, sender, args); + new Thread(packagesCmd).start(); } } else { getHelp(sender, isPlayer); - return true; } + return true; } } return false; @@ -88,8 +94,11 @@ public class MainCommand implements CommandExecutor { private void getHelp(CommandSender sender, boolean isPlayer) { sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "&a===== " + pm.PLUGIN_NAME + " Version:" + pm.PLUGIN_VERSION + " =====")); - if (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".reload")) { - sender.sendMessage(StrUtil.messageFormat("/" + pm.PLUGIN_NAME_LOWER_CASE + " reload \n -Reloads the config file.")); + if (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".me")) { + sender.sendMessage(StrUtil.messageFormat("/" + pm.PLUGIN_NAME_LOWER_CASE + " .me \n - View self package.")); + } + if (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".packages")) { + sender.sendMessage(StrUtil.messageFormat("/" + pm.PLUGIN_NAME_LOWER_CASE + " packages [packageName] \n - View packages.")); } if (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".give")) { sender.sendMessage(StrUtil.messageFormat("/" + pm.PLUGIN_NAME_LOWER_CASE + " give