diff --git a/pom.xml b/pom.xml index fea6aea..048f6ad 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 pw.yumc MiaoBoard - 1.4.4 + 1.4.5 MiaoBoard ${project.name} diff --git a/src/main/java/pw/yumc/MiaoBoard/misc/Checker.java b/src/main/java/pw/yumc/MiaoBoard/misc/Checker.java index 01a858e..6e85ddb 100644 --- a/src/main/java/pw/yumc/MiaoBoard/misc/Checker.java +++ b/src/main/java/pw/yumc/MiaoBoard/misc/Checker.java @@ -6,6 +6,11 @@ import pw.yumc.MiaoBoard.model.BoardModel; public class Checker { public static boolean $(final Player player, final BoardModel model) { - return player.hasPermission(model.permission); + return player.hasPermission(model.permission) && dataCheck(model); + } + + public static boolean dataCheck(final BoardModel model) { + final long now = System.currentTimeMillis(); + return model.time_start != null && model.time_start.getTime() <= now && model.time_end != null && now <= model.time_end.getTime(); } } diff --git a/src/main/java/pw/yumc/MiaoBoard/misc/Replace.java b/src/main/java/pw/yumc/MiaoBoard/misc/Replace.java index 5c05b12..cdf5d3f 100644 --- a/src/main/java/pw/yumc/MiaoBoard/misc/Replace.java +++ b/src/main/java/pw/yumc/MiaoBoard/misc/Replace.java @@ -1,6 +1,9 @@ package pw.yumc.MiaoBoard.misc; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -26,6 +29,8 @@ public class Replace { static class SimpleRelpace { private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("[%]([^%]+)[%]"); + private static final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final String EMPTY = ""; public static String $(final Player player, String text) { final Matcher m = PLACEHOLDER_PATTERN.matcher(text); @@ -44,6 +49,9 @@ public class Replace { case "plugin": value = plugin(player, ka[1]); break; + case "time": + value = time(player, ka[1]); + break; } text = text.replace("%" + format + "%", Matcher.quoteReplacement(value)); } @@ -59,6 +67,10 @@ public class Replace { return String.valueOf(player.getLocation().getBlockY()); case "z": return String.valueOf(player.getLocation().getBlockZ()); + case "yaw": + return String.valueOf(Math.round(player.getLocation().getYaw() * 100) / 100); + case "pitch": + return String.valueOf(Math.round(player.getLocation().getPitch() * 100) / 100); case "world": return player.getWorld().getName(); case "name": @@ -70,7 +82,7 @@ public class Replace { case "max_health": return String.valueOf(player.getMaxHealth()); default: - return ""; + return EMPTY; } } @@ -83,7 +95,7 @@ public class Replace { case "author": return Arrays.toString(P.getDescription().getAuthors().toArray()); default: - return ""; + return EMPTY; } } @@ -101,8 +113,39 @@ public class Replace { case "ram_max": return String.valueOf(runtime.maxMemory() / 1048576L); default: - return ""; + return EMPTY; } } + + private static String time(final Player player, final String key) { + final Date date = new Date(); + if (key.startsWith("left") && key.contains("_")) { + final String time = key.split("_")[1].replace("`", " "); + String value = "解析错误"; + try { + final long left = df.parse(time).getTime() - System.currentTimeMillis(); + value = String.valueOf(left / 1000); + } catch (final ParseException e) { + } + return value; + } + switch (key) { + case "now": + return df.format(date); + case "year": + return String.valueOf(date.getYear() + 1900); + case "month": + return String.valueOf(date.getMonth() + 1); + case "day": + return String.valueOf(date.getDate()); + case "hour": + return String.valueOf(date.getHours() + 1); + case "minute": + return String.valueOf(date.getMinutes()); + case "second": + return String.valueOf(date.getSeconds()); + } + return EMPTY; + } } } diff --git a/src/main/java/pw/yumc/MiaoBoard/model/BoardModel.java b/src/main/java/pw/yumc/MiaoBoard/model/BoardModel.java index 8963484..99a51de 100644 --- a/src/main/java/pw/yumc/MiaoBoard/model/BoardModel.java +++ b/src/main/java/pw/yumc/MiaoBoard/model/BoardModel.java @@ -1,5 +1,6 @@ package pw.yumc.MiaoBoard.model; +import java.util.Date; import java.util.List; import org.bukkit.configuration.ConfigurationSection; @@ -13,7 +14,10 @@ import cn.citycraft.PluginHelper.config.InjectConfigurationSection; * @author 喵♂呜 */ public class BoardModel extends InjectConfigurationSection { - public int index; + public transient String name; + public Integer index; + public Date time_start; + public Date time_end; public String title; public String permission; public List lines; @@ -26,4 +30,16 @@ public class BoardModel extends InjectConfigurationSection { public BoardModel(final ConfigurationSection config) { super(config); } + + /** + * 设置模型名称 + * + * @param name + * 名称 + * @return {@link BoardModel} + */ + public BoardModel setName(final String name) { + this.name = name; + return this; + } } diff --git a/src/main/java/pw/yumc/MiaoBoard/scoreboard/ScoreBoardManager.java b/src/main/java/pw/yumc/MiaoBoard/scoreboard/ScoreBoardManager.java index 669db2d..6d1429c 100644 --- a/src/main/java/pw/yumc/MiaoBoard/scoreboard/ScoreBoardManager.java +++ b/src/main/java/pw/yumc/MiaoBoard/scoreboard/ScoreBoardManager.java @@ -1,8 +1,8 @@ package pw.yumc.MiaoBoard.scoreboard; -import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.LinkedList; import java.util.List; import org.bukkit.entity.Player; @@ -28,7 +28,7 @@ public class ScoreBoardManager { public static Status cot = new Status(); public static SidebarBoard sbd = new SidebarBoard(P.instance, new BoardUpdateFunction(new TitleUpdater(), new BodyUpdater())); public static FileConfig config = MiaoBoardConfig.i().getConfig();; - public static List bms = new ArrayList<>(); + public static List bms = new LinkedList<>(); public static List getModels() { return bms; @@ -41,7 +41,7 @@ public class ScoreBoardManager { public static void load() { bms.clear(); for (final String bmn : config.getConfigurationSection("Boards").getKeys(false)) { - bms.add(new BoardModel(config.getConfigurationSection("Boards." + bmn))); + bms.add(new BoardModel(config.getConfigurationSection("Boards." + bmn)).setName(bmn)); } Collections.sort(bms, new BoardComparator()); } @@ -54,7 +54,7 @@ public class ScoreBoardManager { } public static void start() { - sbd.update(cot, MiaoBoardConfig.UpdateTime); + sbd.update(cot.set(true), MiaoBoardConfig.UpdateTime); for (final Player player : C.Player.getOnlinePlayers()) { sbd.addTarget(player); } @@ -63,7 +63,7 @@ public class ScoreBoardManager { private static class BoardComparator implements Comparator { @Override public int compare(final BoardModel o1, final BoardModel o2) { - return o2.index > o1.index ? 1 : 0; + return o1.index.compareTo(o2.index); } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 6a5c843..aaf16b6 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -10,13 +10,19 @@ DisableWorld: Boards: #默认记分板 default: - #记分板顺序(将按照从小到大依次检测 比如 1-5 优先检测 1 符合则显示 不符合 检测 2 ...) + #记分板顺序(将按照从小到大依次检测 比如 1-50 优先检测 1 符合则显示 不符合 检测 2 ...) index: 50 + #显示时间(格式为yyyy-MM-dd HH:mm:ss) + time: + start: '2016-01-01 00:00:00' + end: '2020-01-01 00:00:00' #记分板标题 - title: '记分板简介' + title: '喵式记分板简介' #记分板权限 permission: mb.default - #记分板内容(不得超过38个字符 包括颜色字符 超过部分自动截取) + #记分板内容 + #注意 不得超过38个字符 包括颜色字符 超过部分自动截取 + #注意 不得超过15行 超出部分 自动忽略 lines: - '&6插件名称: &a%plugin_name%' - '&7------------------------------' @@ -28,5 +34,8 @@ Boards: - '&7------------------------------' - '&6您所在的位置: &b%player_world% &a%player_x%,%player_y%,%player_z%' - '&7------------------------------' + - '&6您所在的角度: &bYaw &a%player_yaw% &bPitch &a%player_pitch%' + - '&7------------------------------' - '&6服务器使用内存: &a%server_ram_used%/%server_ram_total%' - - '&7------------------------------' \ No newline at end of file + - '&7------------------------------' + - '&6离2017年还剩: &a%time_left_2017-01-01`00:00:00%秒' \ No newline at end of file