diff --git a/src/main/java/pw/yumc/MiaoBoard/MiaoBoard.java b/src/main/java/pw/yumc/MiaoBoard/MiaoBoard.java index 167fe9c..1177042 100644 --- a/src/main/java/pw/yumc/MiaoBoard/MiaoBoard.java +++ b/src/main/java/pw/yumc/MiaoBoard/MiaoBoard.java @@ -27,17 +27,18 @@ public class MiaoBoard extends JavaPlugin implements HandlerCommands { public void onEnable() { new InvokeSubCommand(this, "mb").registerCommands(this); new ScoreBoardManager().start(); + ScoreBoardManager.load(); new PlayerListener(); } @Override public void onLoad() { - new MiaoBoardConfig(); + MiaoBoardConfig.i(); } @HandlerCommand(name = "reload", description = "重新载入配置文件") public void reload(final InvokeCommandEvent e) { - MiaoBoardConfig.reload(); + ScoreBoardManager.reload(); e.getSender().sendMessage("§a配置重载完毕!"); } } diff --git a/src/main/java/pw/yumc/MiaoBoard/config/MiaoBoardConfig.java b/src/main/java/pw/yumc/MiaoBoard/config/MiaoBoardConfig.java index 0b7b724..86cd004 100644 --- a/src/main/java/pw/yumc/MiaoBoard/config/MiaoBoardConfig.java +++ b/src/main/java/pw/yumc/MiaoBoard/config/MiaoBoardConfig.java @@ -1,33 +1,31 @@ package pw.yumc.MiaoBoard.config; +import java.util.ArrayList; import java.util.List; -import cn.citycraft.PluginHelper.config.ConfigNode; import cn.citycraft.PluginHelper.config.FileConfig; +import cn.citycraft.PluginHelper.config.InjectConfig; import cn.citycraft.PluginHelper.kit.PKit; -import pw.yumc.MiaoBoard.model.BoardModel; -import pw.yumc.MiaoBoard.scoreboard.ScoreBoardManager; +import pw.yumc.MiaoBoard.MiaoBoard; -public class MiaoBoardConfig { - public static FileConfig config; - - @ConfigNode - public static List DisableWorld; +public class MiaoBoardConfig extends InjectConfig { + public static Integer UpdateTime; + public static List DisableWorld = new ArrayList<>(); + public transient static MiaoBoardConfig instance = new MiaoBoardConfig();; public MiaoBoardConfig() { - config = new FileConfig(PKit.i()); + super((MiaoBoard) PKit.i()); } - public static BoardModel getModel(final String path) { - return new BoardModel(config.getConfigurationSection(getRoot(path))); + public static MiaoBoardConfig i() { + return instance; } - public static String getRoot(final String path) { - return "Boards." + path; + public static void reInject() { + instance.reload(); } - public static void reload() { - config.reload(); - ScoreBoardManager.bm = getModel("default"); + public FileConfig getConfig() { + return config; } } diff --git a/src/main/java/pw/yumc/MiaoBoard/listener/PlayerListener.java b/src/main/java/pw/yumc/MiaoBoard/listener/PlayerListener.java index 8b73fa5..eb4160a 100644 --- a/src/main/java/pw/yumc/MiaoBoard/listener/PlayerListener.java +++ b/src/main/java/pw/yumc/MiaoBoard/listener/PlayerListener.java @@ -1,6 +1,7 @@ package pw.yumc.MiaoBoard.listener; import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -20,6 +21,7 @@ public class PlayerListener implements Listener { Bukkit.getPluginManager().registerEvents(this, PKit.i()); } + @EventHandler public void onPlayerChangeWorld(final PlayerChangedWorldEvent e) { if (MiaoBoardConfig.DisableWorld.contains(e.getPlayer().getWorld().getName())) { ScoreBoardManager.remove(e.getPlayer()); @@ -28,12 +30,14 @@ public class PlayerListener implements Listener { } } + @EventHandler public void onPlayerJoin(final PlayerJoinEvent e) { if (!MiaoBoardConfig.DisableWorld.contains(e.getPlayer().getWorld().getName())) { ScoreBoardManager.add(e.getPlayer()); } } + @EventHandler public void onPlayerQuit(final PlayerQuitEvent e) { ScoreBoardManager.remove(e.getPlayer()); } diff --git a/src/main/java/pw/yumc/MiaoBoard/model/BoardModel.java b/src/main/java/pw/yumc/MiaoBoard/model/BoardModel.java index 6cd7982..08e5f12 100644 --- a/src/main/java/pw/yumc/MiaoBoard/model/BoardModel.java +++ b/src/main/java/pw/yumc/MiaoBoard/model/BoardModel.java @@ -1,6 +1,5 @@ package pw.yumc.MiaoBoard.model; -import java.util.LinkedList; import java.util.List; import org.bukkit.configuration.ConfigurationSection; @@ -10,11 +9,11 @@ import cn.citycraft.PluginHelper.config.InjectConfigurationSection; public class BoardModel extends InjectConfigurationSection { public String title; public String permission; - public List lines = new LinkedList<>(); + public List lines; /** * 自动载入配置 - * + * * @param config */ public BoardModel(final ConfigurationSection config) { diff --git a/src/main/java/pw/yumc/MiaoBoard/scoreboard/ScoreBoardManager.java b/src/main/java/pw/yumc/MiaoBoard/scoreboard/ScoreBoardManager.java index 17059ae..f17d443 100644 --- a/src/main/java/pw/yumc/MiaoBoard/scoreboard/ScoreBoardManager.java +++ b/src/main/java/pw/yumc/MiaoBoard/scoreboard/ScoreBoardManager.java @@ -1,7 +1,11 @@ package pw.yumc.MiaoBoard.scoreboard; +import java.util.ArrayList; +import java.util.List; + import org.bukkit.entity.Player; +import cn.citycraft.PluginHelper.config.FileConfig; import cn.citycraft.PluginHelper.kit.PKit; import cn.citycraft.PluginHelper.scoreboard.BoardUpdateFunction; import cn.citycraft.PluginHelper.scoreboard.Condition; @@ -17,13 +21,16 @@ import pw.yumc.MiaoBoard.scoreboard.updater.TitleUpdater; * @author 喵♂呜 */ public class ScoreBoardManager implements Condition { - public static SidebarBoard sbd; - public static BoardModel bm; + public static Condition cot; public static boolean status; + public static SidebarBoard sbd; + public static FileConfig config; + public static List bms = new ArrayList<>(); public ScoreBoardManager() { status = true; - bm = MiaoBoardConfig.getModel("default"); + cot = this; + config = MiaoBoardConfig.i().getConfig(); sbd = new SidebarBoard(PKit.i(), new BoardUpdateFunction(new TitleUpdater(), new BodyUpdater())); } @@ -31,8 +38,20 @@ public class ScoreBoardManager implements Condition { sbd.addTarget(player); } - public static BoardModel getModel() { - return bm; + public static List getModels() { + return bms; + } + + public static void load() { + bms.clear(); + for (final String bmn : config.getConfigurationSection("Boards").getKeys(false)) { + bms.add(new BoardModel(config.getConfigurationSection("Boards." + bmn))); + } + } + + public static void reload() { + MiaoBoardConfig.reInject(); + load(); } public static void remove(final Player player) { @@ -45,6 +64,6 @@ public class ScoreBoardManager implements Condition { } public void start() { - sbd.update(this, 10); + sbd.update(cot, MiaoBoardConfig.UpdateTime); } } diff --git a/src/main/java/pw/yumc/MiaoBoard/scoreboard/updater/BodyUpdater.java b/src/main/java/pw/yumc/MiaoBoard/scoreboard/updater/BodyUpdater.java index 2d13bb7..0a984f8 100644 --- a/src/main/java/pw/yumc/MiaoBoard/scoreboard/updater/BodyUpdater.java +++ b/src/main/java/pw/yumc/MiaoBoard/scoreboard/updater/BodyUpdater.java @@ -1,5 +1,7 @@ package pw.yumc.MiaoBoard.scoreboard.updater; +import java.util.Collections; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -7,6 +9,7 @@ import org.bukkit.entity.Player; import cn.citycraft.PluginHelper.callback.CallBackReturn; import cn.citycraft.PluginHelper.pluginapi.PluginAPI; +import pw.yumc.MiaoBoard.model.BoardModel; import pw.yumc.MiaoBoard.scoreboard.ScoreBoardManager; /** @@ -18,11 +21,18 @@ public class BodyUpdater extends CallBackReturn.One> { @Override public List run(final Player param) { - final List temp = new LinkedList<>(); - for (final String line : ScoreBoardManager.bm.lines) { - temp.add(PluginAPI.PlaceholderAPI(param, line)); + final Iterator iterator = ScoreBoardManager.getModels().iterator(); + while (iterator.hasNext()) { + final BoardModel bmodel = iterator.next(); + if (param.hasPermission(bmodel.permission)) { + final List temp = new LinkedList<>(); + for (final String line : bmodel.lines) { + temp.add(PluginAPI.PlaceholderAPI(param, line)); + } + return temp; + } } - return temp; + return Collections.emptyList(); } } diff --git a/src/main/java/pw/yumc/MiaoBoard/scoreboard/updater/TitleUpdater.java b/src/main/java/pw/yumc/MiaoBoard/scoreboard/updater/TitleUpdater.java index 0bb7a3c..0b17c68 100644 --- a/src/main/java/pw/yumc/MiaoBoard/scoreboard/updater/TitleUpdater.java +++ b/src/main/java/pw/yumc/MiaoBoard/scoreboard/updater/TitleUpdater.java @@ -1,9 +1,12 @@ package pw.yumc.MiaoBoard.scoreboard.updater; +import java.util.Iterator; + import org.bukkit.entity.Player; import cn.citycraft.PluginHelper.callback.CallBackReturn; import cn.citycraft.PluginHelper.pluginapi.PluginAPI; +import pw.yumc.MiaoBoard.model.BoardModel; import pw.yumc.MiaoBoard.scoreboard.ScoreBoardManager; /** @@ -15,7 +18,14 @@ public class TitleUpdater extends CallBackReturn.One { @Override public String run(final Player param) { - return PluginAPI.PlaceholderAPI(param, ScoreBoardManager.bm.title); + final Iterator iterator = ScoreBoardManager.getModels().iterator(); + while (iterator.hasNext()) { + final BoardModel bmodel = iterator.next(); + if (param.hasPermission(bmodel.permission)) { + return PluginAPI.PlaceholderAPI(param, bmodel.title); + } + } + return ""; } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e0b5a5f..df0a7e9 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,3 +1,8 @@ +#配置文件版本号 +Version: 1.0 + +#更新时间(单位: Tick) +UpdateTime: 10 #关闭记分板的世界 DisableWorld: - WorldName @@ -5,8 +10,12 @@ DisableWorld: Boards: #默认记分板 default: - title: 标题 + title: '玩家信息' permission: mb.default lines: - - '这是第一行' - - '' \ No newline at end of file + - '&6玩家名称: &a%player_displayname%' + - '&7------------------------------' + - '&6您所在的位置: &b%player_world% &a%player_x%,%player_y%,%player_z%' + - '&7------------------------------' + - '&6服务器使用内存: &a%server_ram_used%/%server_ram_total%' + \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index a3a2870..3e16e47 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -10,9 +10,12 @@ commands: aliases: - mb usage: §b使用/${project.artifactId} help 查看帮助! - permission: ${project.artifactId}.reload + permission: mb.reload permission-message: §c你没有 的权限来执行此命令! permissions: - ${project.artifactId}.reload: + mb.reload: description: 重新载入插件! - default: op \ No newline at end of file + default: op + mb.default: + description: 默认记分板权限! + default: true \ No newline at end of file