diff --git a/pom.xml b/pom.xml index e87ec34..637e26c 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 pw.yumc MiaoBoard - 2.3.3 + 2.3.5 喵式记分板 ${project.artifactId} @@ -70,6 +70,12 @@ http://ci.yumc.pw/job/${project.artifactId}/ + §a正式版本 2.3.5 + + §617-03-09 §cfix: 修复行更新错误; + §617-03-09 §afeat: 添加记分板更新事件 + + DEV UTF-8 1.8 diff --git a/src/main/java/pw/yumc/MiaoBoard/listener/SelfListener.java b/src/main/java/pw/yumc/MiaoBoard/listener/SelfListener.java index 3115c02..ed101cb 100644 --- a/src/main/java/pw/yumc/MiaoBoard/listener/SelfListener.java +++ b/src/main/java/pw/yumc/MiaoBoard/listener/SelfListener.java @@ -9,9 +9,9 @@ import pw.yumc.MiaoBoard.MiaoBoard; import pw.yumc.MiaoBoard.event.BodyUpdateEvent; import pw.yumc.MiaoBoard.event.TitleUpdateEvent; import pw.yumc.MiaoBoard.misc.Checker; -import pw.yumc.MiaoBoard.misc.Replace; import pw.yumc.MiaoBoard.model.BoardModel; import pw.yumc.YumCore.bukkit.P; +import pw.yumc.YumCore.text.Replace; /** * 自身记分板监听类 diff --git a/src/main/java/pw/yumc/MiaoBoard/misc/Replace.java b/src/main/java/pw/yumc/MiaoBoard/misc/Replace.java deleted file mode 100644 index de50cf0..0000000 --- a/src/main/java/pw/yumc/MiaoBoard/misc/Replace.java +++ /dev/null @@ -1,162 +0,0 @@ -package pw.yumc.MiaoBoard.misc; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.Date; -import java.util.LinkedList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import me.clip.placeholderapi.PlaceholderAPI; -import pw.yumc.YumCore.bukkit.P; -import pw.yumc.YumCore.bukkit.compatible.C; - -public class Replace { - public static List $(final Player p, final List text) { - final List temp = new LinkedList<>(); - for (final String i : text) { - temp.add($(p, i)); - } - return temp; - } - - public static String $(final Player p, final String text) { - return p(p, text); - } - - private static String p(final Player p, final String text) { - return PlaceholderAPI.setPlaceholders(p, SimpleRelpace.$(p, text)); - } - - static class SimpleRelpace { - private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("[%]([^%]+)[%]"); - private static final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - - public static String $(final Player player, String text) { - final Matcher m = PLACEHOLDER_PATTERN.matcher(text); - while (m.find()) { - final String format = m.group(1); - if (format.contains("_")) { - final String[] ka = format.split("_", 2); - String value = null; - switch (ka[0]) { - case "player": - value = player(player, ka[1]); - break; - case "server": - value = server(player, ka[1]); - break; - case "plugin": - value = plugin(player, ka[1]); - break; - case "time": - value = time(player, ka[1]); - break; - } - if (value != null) { - text = text.replace("%" + format + "%", Matcher.quoteReplacement(value)); - } - } - } - return text; - } - - private static String player(final Player player, final String key) { - switch (key) { - case "x": - return String.valueOf(player.getLocation().getBlockX()); - case "y": - 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": - return player.getName(); - case "displayname": - return player.getDisplayName(); - case "health": - return String.valueOf(player.getHealth()); - case "max_health": - return String.valueOf(player.getMaxHealth()); - default: - return String.format("%%player_%s%%", key); - } - } - - private static String plugin(final Player player, final String key) { - switch (key) { - case "version": - return P.getDescription().getVersion().split("-")[0]; - case "name": - return P.getName(); - case "author": - return Arrays.toString(P.getDescription().getAuthors().toArray()); - default: - return String.format("%%plugin_%s%%", key); - } - } - - private static String server(final Player player, final String key) { - final Runtime runtime = Runtime.getRuntime(); - switch (key) { - case "online": - return String.valueOf(C.Player.getOnlinePlayers().size()); - case "max": - return String.valueOf(Bukkit.getMaxPlayers()); - case "unique_joins": - return String.valueOf(Bukkit.getOfflinePlayers().length); - case "ram_used": - return String.valueOf((runtime.totalMemory() - runtime.freeMemory()) / 1048576L); - case "ram_free": - return String.valueOf(runtime.freeMemory() / 1048576L); - case "ram_total": - return String.valueOf(runtime.totalMemory() / 1048576L); - case "ram_max": - return String.valueOf(runtime.maxMemory() / 1048576L); - default: - return String.format("%%server_%s%%", key); - } - } - - 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]; - String value = "解析错误"; - try { - final long left = df.parse(time).getTime() - System.currentTimeMillis(); - value = String.valueOf(left / 1000); - } catch (final ParseException ignored) { - } - 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 String.format("%%time_%s%%", key); - } - } -} diff --git a/src/main/java/pw/yumc/MiaoBoard/scoreboard/ScoreBoardManager.java b/src/main/java/pw/yumc/MiaoBoard/scoreboard/ScoreBoardManager.java index 6d8ba52..0f9d6fe 100644 --- a/src/main/java/pw/yumc/MiaoBoard/scoreboard/ScoreBoardManager.java +++ b/src/main/java/pw/yumc/MiaoBoard/scoreboard/ScoreBoardManager.java @@ -8,11 +8,8 @@ import org.bukkit.entity.Player; import pw.yumc.MiaoBoard.config.MiaoBoardConfig; import pw.yumc.MiaoBoard.model.BoardModel; -import pw.yumc.MiaoBoard.scoreboard.core.BoardUpdateFunction; import pw.yumc.MiaoBoard.scoreboard.core.Condition; import pw.yumc.MiaoBoard.scoreboard.core.SidebarBoard; -import pw.yumc.MiaoBoard.scoreboard.updater.BodyUpdater; -import pw.yumc.MiaoBoard.scoreboard.updater.TitleUpdater; import pw.yumc.YumCore.bukkit.P; import pw.yumc.YumCore.bukkit.compatible.C; import pw.yumc.YumCore.config.FileConfig; @@ -25,7 +22,7 @@ import pw.yumc.YumCore.config.FileConfig; */ public class ScoreBoardManager { public Status cot = new Status(); - public SidebarBoard sbd = new SidebarBoard(P.instance, new BoardUpdateFunction(new TitleUpdater(), new BodyUpdater())); + public SidebarBoard sbd = new SidebarBoard(P.instance); public FileConfig config = MiaoBoardConfig.i().getConfig(); public List bms = new LinkedList<>(); diff --git a/src/main/java/pw/yumc/MiaoBoard/scoreboard/core/Board.java b/src/main/java/pw/yumc/MiaoBoard/scoreboard/core/Board.java index 76c1e8b..191e9a1 100644 --- a/src/main/java/pw/yumc/MiaoBoard/scoreboard/core/Board.java +++ b/src/main/java/pw/yumc/MiaoBoard/scoreboard/core/Board.java @@ -22,10 +22,7 @@ public abstract class Board implements Iterable { private final HashMap targets = new HashMap<>(); private final Set removeQueue = new HashSet<>(); - private final BoardUpdateFunction updateFunction; - - public Board(final Plugin plugin, final BoardUpdateFunction updateFunction) { - this.updateFunction = updateFunction; + public Board(final Plugin plugin) { this.plugin = plugin; } @@ -64,10 +61,6 @@ public abstract class Board implements Iterable { return targets.keySet(); } - public BoardUpdateFunction getUpdateFunction() { - return updateFunction; - } - public boolean isRunning() { return this.taskId != 0; } @@ -92,22 +85,19 @@ public abstract class Board implements Iterable { } public void update(final Condition condition, final int interval) { - taskId = plugin.getServer().getScheduler().runTaskTimer(plugin, new Runnable() { - @Override - public void run() { - if (condition.get()) { - final Iterator iterator = iterator(); - while (iterator.hasNext()) { - final Player next = iterator.next(); - if (shouldRemove(next)) { - iterator.remove(); - } else { - update(next); - } + taskId = plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin, () -> { + if (condition.get()) { + final Iterator iterator = iterator(); + while (iterator.hasNext()) { + final Player next = iterator.next(); + if (shouldRemove(next)) { + iterator.remove(); + } else { + update(next); } - } else { - cancel(); } + } else { + cancel(); } }, 0, interval).getTaskId(); } diff --git a/src/main/java/pw/yumc/MiaoBoard/scoreboard/core/BoardUpdateFunction.java b/src/main/java/pw/yumc/MiaoBoard/scoreboard/core/BoardUpdateFunction.java deleted file mode 100644 index eb060f0..0000000 --- a/src/main/java/pw/yumc/MiaoBoard/scoreboard/core/BoardUpdateFunction.java +++ /dev/null @@ -1,39 +0,0 @@ -package pw.yumc.MiaoBoard.scoreboard.core; - -import java.util.List; - -import org.bukkit.entity.Player; - -import pw.yumc.YumCore.callback.CallBackReturn; - -/** - * - * @since 2016年7月4日 下午4:40:21 - * @author 尘曲 - */ -public class BoardUpdateFunction { - - private CallBackReturn.One titleFunction; - private CallBackReturn.One> bodyFunction; - - public BoardUpdateFunction(final CallBackReturn.One titleFunction, final CallBackReturn.One> bodyFunction) { - this.titleFunction = titleFunction; - this.bodyFunction = bodyFunction; - } - - public CallBackReturn.One> getBodyFunction() { - return bodyFunction; - } - - public CallBackReturn.One getTitleFunction() { - return titleFunction; - } - - public void setBodyFunction(final CallBackReturn.One> bodyFunction) { - this.bodyFunction = bodyFunction; - } - - public void setTitleFunction(final CallBackReturn.One titleFunction) { - this.titleFunction = titleFunction; - } -} diff --git a/src/main/java/pw/yumc/MiaoBoard/scoreboard/core/SidebarBoard.java b/src/main/java/pw/yumc/MiaoBoard/scoreboard/core/SidebarBoard.java index 2a9f915..3806454 100644 --- a/src/main/java/pw/yumc/MiaoBoard/scoreboard/core/SidebarBoard.java +++ b/src/main/java/pw/yumc/MiaoBoard/scoreboard/core/SidebarBoard.java @@ -4,14 +4,17 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; +import pw.yumc.MiaoBoard.event.BodyUpdateEvent; +import pw.yumc.MiaoBoard.event.TitleUpdateEvent; + /** * * @since 2016年7月4日 下午4:40:21 * @author 尘曲 */ public class SidebarBoard extends Board { - public SidebarBoard(final Plugin plugin, final BoardUpdateFunction updateFunction) { - super(plugin, updateFunction); + public SidebarBoard(final Plugin plugin) { + super(plugin); } @Override @@ -28,16 +31,17 @@ public class SidebarBoard extends Board { public void update(final Player player) { final SiderbarBoardPage boardPage = this.getBoardPage(player); if (boardPage == null) { return; } - String title = null; - if (this.getUpdateFunction().getTitleFunction() != null) { - title = this.getUpdateFunction().getTitleFunction().run(player); - } + TitleUpdateEvent te = new TitleUpdateEvent(player); + Bukkit.getPluginManager().callEvent(te); + String title = te.getTitle(); if (title == null) { player.setScoreboard(Bukkit.getScoreboardManager().getMainScoreboard()); return; } boardPage.setTitle(title); - boardPage.setBody(getUpdateFunction().getBodyFunction().run(player)); + BodyUpdateEvent be = new BodyUpdateEvent(player); + Bukkit.getPluginManager().callEvent(be); + boardPage.setBody(be.getBody()); player.setScoreboard(boardPage.getBoard()); } } diff --git a/src/main/java/pw/yumc/MiaoBoard/scoreboard/updater/BodyUpdater.java b/src/main/java/pw/yumc/MiaoBoard/scoreboard/updater/BodyUpdater.java deleted file mode 100644 index ac25503..0000000 --- a/src/main/java/pw/yumc/MiaoBoard/scoreboard/updater/BodyUpdater.java +++ /dev/null @@ -1,29 +0,0 @@ -package pw.yumc.MiaoBoard.scoreboard.updater; - -import java.util.List; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import pw.yumc.MiaoBoard.MiaoBoard; -import pw.yumc.MiaoBoard.event.BodyUpdateEvent; -import pw.yumc.YumCore.bukkit.P; -import pw.yumc.YumCore.callback.CallBackReturn; - -/** - * 记分板行更新类 - * - * @since 2016年7月4日 下午4:47:17 - * @author 喵♂呜 - */ -public class BodyUpdater extends CallBackReturn.One> { - MiaoBoard plugin = P.getPlugin(); - - @Override - public List run(final Player param) { - BodyUpdateEvent event = new BodyUpdateEvent(param); - Bukkit.getPluginManager().callEvent(event); - return event.getBody(); - } - -} diff --git a/src/main/java/pw/yumc/MiaoBoard/scoreboard/updater/TitleUpdater.java b/src/main/java/pw/yumc/MiaoBoard/scoreboard/updater/TitleUpdater.java deleted file mode 100644 index aab09b9..0000000 --- a/src/main/java/pw/yumc/MiaoBoard/scoreboard/updater/TitleUpdater.java +++ /dev/null @@ -1,27 +0,0 @@ -package pw.yumc.MiaoBoard.scoreboard.updater; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import pw.yumc.MiaoBoard.MiaoBoard; -import pw.yumc.MiaoBoard.event.TitleUpdateEvent; -import pw.yumc.YumCore.bukkit.P; -import pw.yumc.YumCore.callback.CallBackReturn; - -/** - * 记分板标题更新类 - * - * @since 2016年7月4日 下午4:47:17 - * @author 喵♂呜 - */ -public class TitleUpdater extends CallBackReturn.One { - MiaoBoard plugin = P.getPlugin(); - - @Override - public String run(final Player param) { - TitleUpdateEvent event = new TitleUpdateEvent(param); - Bukkit.getPluginManager().callEvent(event); - return event.getTitle(); - } - -}