diff --git a/README.md b/README.md index 2ba9385..ec0ff39 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ - **调用vault API 设置玩家权限 -- 登录时(添加 移除)、游戏中(命令添加/移除 延迟移除)、退出时移除** - **mysql保存数据** - **支持跨服** -- gui显示自己的权限包 +- **gui显示自己的权限包**(可以拿出gui的物品, 有待处理) - 手动删除过期的或无效数据 - 语言支持整理 diff --git a/pom.xml b/pom.xml index 74907b5..48e91b6 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ org.bukkit bukkit - 1.11.2-R0.1-SNAPSHOT + 1.12-pre6-SNAPSHOT jar compile diff --git a/src/main/gg/frog/mc/permissionstime/command/MainCommand.java b/src/main/gg/frog/mc/permissionstime/command/MainCommand.java index c7ec9ae..024877c 100644 --- a/src/main/gg/frog/mc/permissionstime/command/MainCommand.java +++ b/src/main/gg/frog/mc/permissionstime/command/MainCommand.java @@ -28,7 +28,7 @@ public class MainCommand implements CommandExecutor { if (sender instanceof Player) { isPlayer = true; } - if (args.length == 0) { + if (args[0].equalsIgnoreCase("help") || args.length == 0) { getHelp(sender, isPlayer); return true; } else { @@ -85,7 +85,7 @@ public class MainCommand implements CommandExecutor { new Thread(packagesCmd).start(); } } else { - getHelp(sender, isPlayer); + sender.sendMessage(StrUtil.messageFormat("/" + pm.PLUGIN_NAME_LOWER_CASE + " help -Show commands.")); } return true; } diff --git a/src/main/gg/frog/mc/permissionstime/command/MeCmd.java b/src/main/gg/frog/mc/permissionstime/command/MeCmd.java index 98598a0..c705442 100644 --- a/src/main/gg/frog/mc/permissionstime/command/MeCmd.java +++ b/src/main/gg/frog/mc/permissionstime/command/MeCmd.java @@ -6,10 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import gg.frog.mc.permissionstime.PluginMain; -import gg.frog.mc.permissionstime.config.PackagesCfg; import gg.frog.mc.permissionstime.config.PluginCfg; import gg.frog.mc.permissionstime.database.SqlManager; -import gg.frog.mc.permissionstime.model.cfg.PermissionPackageBean; +import gg.frog.mc.permissionstime.gui.PlayerPermissionShow; import gg.frog.mc.permissionstime.model.db.PlayerDataBean; import gg.frog.mc.permissionstime.utils.StrUtil; @@ -38,14 +37,7 @@ public class MeCmd implements Runnable { Player p = (Player) sender; List ps = sm.getTime(p.getUniqueId().toString()); if (ps.size() > 0) { - sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "=====你共有{0}种权限包=====", ps.size())); - for (PlayerDataBean pdb : ps) { - PermissionPackageBean pc = PackagesCfg.PACKAGES.get(pdb.getPackageName()); - if (pc != null) { - String expireString = StrUtil.timestampToString(pdb.getExpire()); - sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "{0}权限包: {1}({2}), 到期时间: {3}", pdb.getGlobal() ? "*" : "", pc.getDisplayName(), pdb.getPackageName(), expireString)); - } - } + PlayerPermissionShow.show(p, ps); } else { sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "暂时无数据")); } diff --git a/src/main/gg/frog/mc/permissionstime/config/PackagesCfg.java b/src/main/gg/frog/mc/permissionstime/config/PackagesCfg.java index 8196ab6..482d0e7 100644 --- a/src/main/gg/frog/mc/permissionstime/config/PackagesCfg.java +++ b/src/main/gg/frog/mc/permissionstime/config/PackagesCfg.java @@ -1,14 +1,22 @@ package gg.frog.mc.permissionstime.config; +import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; +import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + import gg.frog.mc.permissionstime.PluginMain; import gg.frog.mc.permissionstime.model.cfg.PermissionPackageBean; +import gg.frog.mc.permissionstime.utils.StrUtil; import gg.frog.mc.permissionstime.utils.config.PluginConfig; public class PackagesCfg extends PluginConfig { @@ -16,6 +24,7 @@ public class PackagesCfg extends PluginConfig { public static String PACKAGES_VERSION = null; public static String DEFAULT_GROUP = null; public static Map PACKAGES = new ConcurrentHashMap<>(); + public static Map PACKAGE_ITEMS = new ConcurrentHashMap<>(); public static Set allPermissions = Collections.synchronizedSet(new HashSet()); public static Set allGroups = Collections.synchronizedSet(new HashSet()); @@ -39,9 +48,59 @@ public class PackagesCfg extends PluginConfig { System.out.println(p.getKey() + ":" + p.getValue()); } } - for (PermissionPackageBean p : PACKAGES.values()) { - allPermissions.addAll(p.getPermissions()); - allGroups.addAll(p.getGroups()); + PACKAGE_ITEMS.clear(); + for (Entry e : PACKAGES.entrySet()) { + PACKAGE_ITEMS.put(e.getKey(), getPackageItem(e.getKey(), e.getValue())); + allPermissions.addAll(e.getValue().getPermissions()); + allGroups.addAll(e.getValue().getGroups()); } } + + private ItemStack getPackageItem(String name, PermissionPackageBean ppb) { + if (ppb != null) { + Material type = null; + int exid = 0; + if (ppb.getType() != null) { + String[] args = ppb.getType().split(":"); + try { + switch (args.length) { + case 2: + exid = Integer.parseInt(args[1]); + case 1: + type = Material.getMaterial(args[0].toUpperCase(Locale.ENGLISH)); + } + } catch (NumberFormatException e) { + e.printStackTrace(); + } + } else if (ppb.getId() != null) { + String[] args = ppb.getId().split(":"); + try { + switch (args.length) { + case 2: + exid = Integer.parseInt(args[1]); + case 1: + int id = Integer.parseInt(args[0]); + type = Material.getMaterial(id); + } + } catch (NumberFormatException e) { + e.printStackTrace(); + } + } + if (type != null) { + ItemStack items = new ItemStack(type, 1, (short) 0, (byte) exid); + ItemMeta meta = items.getItemMeta(); + meta.setDisplayName(StrUtil.messageFormat(ppb.getDisplayName() + "&r(" + name + ")")); + if (ppb.getLores().size() > 0) { + List lores = new ArrayList(); + for (String lore : ppb.getLores()) { + lores.add(StrUtil.messageFormat(lore)); + } + meta.setLore(lores); + } + items.setItemMeta(meta); + return items; + } + } + return null; + } } diff --git a/src/main/gg/frog/mc/permissionstime/database/impl/MySQLPlayerDataDao.java b/src/main/gg/frog/mc/permissionstime/database/impl/MySQLPlayerDataDao.java index 1be5d0a..641adfc 100644 --- a/src/main/gg/frog/mc/permissionstime/database/impl/MySQLPlayerDataDao.java +++ b/src/main/gg/frog/mc/permissionstime/database/impl/MySQLPlayerDataDao.java @@ -6,6 +6,7 @@ import java.util.Date; import java.util.List; import gg.frog.mc.permissionstime.PluginMain; +import gg.frog.mc.permissionstime.config.PackagesCfg; import gg.frog.mc.permissionstime.config.PluginCfg; import gg.frog.mc.permissionstime.database.IPlayerDataDao; import gg.frog.mc.permissionstime.database.SqlManager; @@ -195,16 +196,18 @@ public class MySQLPlayerDataDao extends DatabaseUtil implements IPlayerDataDao { List pdbList = new ArrayList<>(); ResultSet rs = getDB().query(sql); while (rs.next()) { - long tid = rs.getLong("id"); - String tuuid = rs.getString("uuid"); String tpackageName = rs.getString("packageName"); - String tserverId = rs.getString("serverId"); - long texpire = rs.getLong("expire"); - PlayerDataBean tpd = new PlayerDataBean(tid, tuuid, tpackageName, texpire); - if (tserverId == null) { - tpd.setGlobal(true); + if (PackagesCfg.PACKAGES.containsKey(tpackageName)) { + long tid = rs.getLong("id"); + String tuuid = rs.getString("uuid"); + String tserverId = rs.getString("serverId"); + long texpire = rs.getLong("expire"); + PlayerDataBean tpd = new PlayerDataBean(tid, tuuid, tpackageName, texpire); + if (tserverId == null) { + tpd.setGlobal(true); + } + pdbList.add(tpd); } - pdbList.add(tpd); } return pdbList; } catch (Exception e) { diff --git a/src/main/gg/frog/mc/permissionstime/database/impl/SqlitePlayerDataDao.java b/src/main/gg/frog/mc/permissionstime/database/impl/SqlitePlayerDataDao.java index ce6c7b7..6c407c0 100644 --- a/src/main/gg/frog/mc/permissionstime/database/impl/SqlitePlayerDataDao.java +++ b/src/main/gg/frog/mc/permissionstime/database/impl/SqlitePlayerDataDao.java @@ -6,6 +6,7 @@ import java.util.Date; import java.util.List; import gg.frog.mc.permissionstime.PluginMain; +import gg.frog.mc.permissionstime.config.PackagesCfg; import gg.frog.mc.permissionstime.config.PluginCfg; import gg.frog.mc.permissionstime.database.IPlayerDataDao; import gg.frog.mc.permissionstime.database.SqlManager; @@ -158,12 +159,14 @@ public class SqlitePlayerDataDao extends DatabaseUtil implements IPlayerDataDao List pdbList = new ArrayList<>(); ResultSet rs = getDB().query(sql); while (rs.next()) { - long tid = rs.getLong("id"); - String tuuid = rs.getString("uuid"); String tpackageName = rs.getString("packageName"); - long texpire = rs.getLong("expire"); - PlayerDataBean tpd = new PlayerDataBean(tid, tuuid, tpackageName, texpire); - pdbList.add(tpd); + if (PackagesCfg.PACKAGES.containsKey(tpackageName)) { + long tid = rs.getLong("id"); + String tuuid = rs.getString("uuid"); + long texpire = rs.getLong("expire"); + PlayerDataBean tpd = new PlayerDataBean(tid, tuuid, tpackageName, texpire); + pdbList.add(tpd); + } } return pdbList; } catch (Exception e) { diff --git a/src/main/gg/frog/mc/permissionstime/gui/PlayerPermissionShow.java b/src/main/gg/frog/mc/permissionstime/gui/PlayerPermissionShow.java new file mode 100644 index 0000000..0907ff6 --- /dev/null +++ b/src/main/gg/frog/mc/permissionstime/gui/PlayerPermissionShow.java @@ -0,0 +1,26 @@ +package gg.frog.mc.permissionstime.gui; + +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import gg.frog.mc.permissionstime.config.PackagesCfg; +import gg.frog.mc.permissionstime.model.db.PlayerDataBean; +import gg.frog.mc.permissionstime.utils.StrUtil; + +public class PlayerPermissionShow { + + public static void show(Player p, List pdbList) { + Inventory inventory = Bukkit.createInventory(null, (pdbList.size() % 9 == 0 ? pdbList.size() : (pdbList.size() / 9 + 1) * 9), StrUtil.messageFormat("&4你共有{0}种权限包", pdbList.size())); + for (PlayerDataBean pdb : pdbList) { + ItemStack item = PackagesCfg.PACKAGE_ITEMS.get(pdb.getPackageName()); + if (item != null) { + inventory.addItem(item); + } + } + p.openInventory(inventory); + } +} diff --git a/src/main/gg/frog/mc/permissionstime/model/cfg/PermissionPackageBean.java b/src/main/gg/frog/mc/permissionstime/model/cfg/PermissionPackageBean.java index f3b4bd4..0504557 100644 --- a/src/main/gg/frog/mc/permissionstime/model/cfg/PermissionPackageBean.java +++ b/src/main/gg/frog/mc/permissionstime/model/cfg/PermissionPackageBean.java @@ -28,6 +28,9 @@ import net.milkbowl.vault.permission.Permission; public class PermissionPackageBean implements IConfigBean { private String displayName = null; + private String id; + private String type; + private List lores = new ArrayList<>(); private Boolean global = null; private List permissions = new ArrayList<>(); private List groups = new ArrayList<>(); @@ -41,6 +44,30 @@ public class PermissionPackageBean implements IConfigBean { this.displayName = displayName; } + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public List getLores() { + return lores; + } + + public void setLores(List lores) { + this.lores = lores; + } + public Boolean getGlobal() { return global; } @@ -69,6 +96,9 @@ public class PermissionPackageBean implements IConfigBean { public YamlConfiguration toConfig() { YamlConfiguration config = new YamlConfiguration(); config.set("displayName", displayName); + config.set("id", id); + config.set("type", type); + config.set("lores", lores); config.set("global", global); config.set("permissions", permissions); config.set("groups", groups); @@ -81,6 +111,12 @@ public class PermissionPackageBean implements IConfigBean { if (displayName == null) { displayName = "No Name"; } + id = config.getString("id"); + type = config.getString("type"); + if (id == null && type == null) { + type = "NETHER_STAR"; + } + lores = config.getStringList("lores"); global = config.getBoolean("global"); permissions = config.getStringList("permissions"); groups = config.getStringList("groups"); @@ -88,7 +124,7 @@ public class PermissionPackageBean implements IConfigBean { @Override public String toString() { - return "PermissionPackageBean [displayName=" + displayName + ", global=" + global + ", permissions=" + permissions + ", groups=" + groups + "]"; + return "PermissionPackageBean [displayName=" + displayName + ", id=" + id + ", type=" + type + ", lores=" + lores + ", global=" + global + ", permissions=" + permissions + ", groups=" + groups + "]"; } private void givePlayer(OfflinePlayer player, Server server, Permission permission) { diff --git a/src/main/gg/frog/mc/permissionstime/utils/config/PluginConfig.java b/src/main/gg/frog/mc/permissionstime/utils/config/PluginConfig.java index b6984c5..89b1463 100644 --- a/src/main/gg/frog/mc/permissionstime/utils/config/PluginConfig.java +++ b/src/main/gg/frog/mc/permissionstime/utils/config/PluginConfig.java @@ -1,6 +1,7 @@ package gg.frog.mc.permissionstime.utils.config; import java.io.File; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -9,6 +10,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.logging.Level; +import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.MemorySection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -127,8 +129,18 @@ public abstract class PluginConfig { * 配置重载 */ private void reloadConfig(File folder, String fileName, boolean useRes) { - config = YamlConfiguration.loadConfiguration(configFile); - + YamlConfiguration tempConfig = new YamlConfiguration(); + try { + tempConfig.load(configFile); + config = tempConfig; + } catch (FileNotFoundException e) { + } catch (IOException | InvalidConfigurationException e1) { + tempConfig = null; + e1.printStackTrace(); + } + if (config == null) { + config = new YamlConfiguration(); + } if (useRes) { final InputStream defConfigStream = pm.getResource(fileName); if (defConfigStream == null) { @@ -137,7 +149,9 @@ public abstract class PluginConfig { config.setDefaults(YamlConfiguration.loadConfiguration(new InputStreamReader(defConfigStream, Charsets.UTF_8))); } loadToDo(); - saveConfig(); + if (tempConfig != null) { + saveConfig(); + } } protected void saveObj(String path, Map o) { diff --git a/src/resources/packages.yml b/src/resources/packages.yml index 5f8e67a..881e111 100644 --- a/src/resources/packages.yml +++ b/src/resources/packages.yml @@ -5,7 +5,12 @@ packages: #权限包名称 example1: #权限包显示名称 - displayName: '权限包模板1' + displayName: '&4权限包模板1' + #显示的物品类型 + type: NETHER_STAR + #标签 + lores: + - '&2这是权限包模板的标签' #是否跨服权限 global: false #权限包含有的权限 world1、world2、world3是赋值给玩家permission2权限的世界