From 400e191aa5f2e2881ed53a5cda607cb2ca43c661 Mon Sep 17 00:00:00 2001 From: eofitg Date: Sun, 11 Jun 2023 01:42:30 +0800 Subject: [PATCH 01/15] PointListener&Leaderboard(Scoreboard) --- .../com/eofitg/hardcore/ConfigReader.java | 18 ++- .../java/com/eofitg/hardcore/Hardcore.java | 50 ++++++-- .../hardcore/cmdoperation/CommandHandler.java | 4 +- .../hardcore/listener/PlayerListener.java | 43 +++++-- .../hardcore/listener/PointListener.java | 10 +- .../com/eofitg/hardcore/util/Leaderboard.java | 119 ++++++++++++++++++ .../eofitg/hardcore/util/TestScordboard.java | 99 +++++++++++++++ 7 files changed, 317 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/eofitg/hardcore/util/Leaderboard.java create mode 100644 src/main/java/com/eofitg/hardcore/util/TestScordboard.java diff --git a/src/main/java/com/eofitg/hardcore/ConfigReader.java b/src/main/java/com/eofitg/hardcore/ConfigReader.java index 0eae7a7..68cb0a0 100644 --- a/src/main/java/com/eofitg/hardcore/ConfigReader.java +++ b/src/main/java/com/eofitg/hardcore/ConfigReader.java @@ -9,6 +9,7 @@ public class ConfigReader { private static List playerNames = config.getStringList("playerNames"); private static List cmdNames = config.getStringList("commandNames"); private static boolean state = config.getBoolean("enable"); + public static List getPlayerNames() { return playerNames; } @@ -24,15 +25,26 @@ public static List getCmdList(String cmd) { public static boolean getState() { return state; } - public static int getPoint(String name) { + public static double getPoint(String name) { return config.getInt("point." + name); } + public static void set(String key, Object value) { config.set(key, value); } - public static void setPoint(String name, int point) { - config.set("point." + name, point); + public static void setPlayerNames(List names) { + set("playerNames", names); + } + public static void setPlayerState(String name, boolean state) { + set("alive." + name, state); } + public static void setState(boolean state) { + set("enable", state); + } + public static void setPoint(String name, double point) { + set("point." + name, point); + } + public static void reset(String name) { if (playerNames.contains(name)) { set("alive." + name, true); diff --git a/src/main/java/com/eofitg/hardcore/Hardcore.java b/src/main/java/com/eofitg/hardcore/Hardcore.java index 8f8977c..52c2b77 100644 --- a/src/main/java/com/eofitg/hardcore/Hardcore.java +++ b/src/main/java/com/eofitg/hardcore/Hardcore.java @@ -4,13 +4,18 @@ import com.eofitg.hardcore.cmdoperation.TabCompleterRegister; import com.eofitg.hardcore.listener.PlayerListener; import com.eofitg.hardcore.listener.PointListener; +import com.eofitg.hardcore.util.Leaderboard; +import com.eofitg.hardcore.util.TestScordboard; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public final class Hardcore extends JavaPlugin { private static Hardcore instance; @@ -22,6 +27,10 @@ public static String getPluginName() { return pluginName; } + public static Map playerGameModeMap = new HashMap<>(); + public static Map leaderboards = new HashMap<>(); + + @Override public void onEnable() { // Plugin startup logic @@ -32,36 +41,39 @@ public void onEnable() { CommandRegister.register(ConfigReader.getCmdNames()); TabCompleterRegister.register(ConfigReader.getCmdNames()); - // 扫描所有在线玩家加入到玩家列表 + // Add all online players to the player list then toggle their game-mode if (ConfigReader.getState()) { for (Player player : Bukkit.getOnlinePlayers()) { String playerName = player.getName(); List playerNames = ConfigReader.getPlayerNames(); if (!playerNames.contains(playerName)) { + // new player playerNames.add(playerName); - ConfigReader.set("playerNames", playerNames); - ConfigReader.set("alive." + playerName, true); + ConfigReader.setPlayerNames(playerNames); + ConfigReader.setPlayerState(playerName, true); Hardcore.getInstance().saveConfig(); + playerGameModeMap.put(player, player.getGameMode()); player.setGameMode(GameMode.SURVIVAL); player.sendTitle(ChatColor.BLUE + "WELCOME, NEW PLAYER!", ChatColor.GRAY + "You only have one life and do your best to survive!", 10, 150, 10); } else { + // existing player boolean playerState = ConfigReader.getPlayerState(playerName); + playerGameModeMap.put(player, player.getGameMode()); if (!playerState) { + // player has dead player.setGameMode(GameMode.SPECTATOR); player.sendTitle(ChatColor.RED + "YOU HAVE DIED IN THIS SEASON!", ChatColor.GRAY + "Please wait for the reset!", 10, 150, 10); } else { + // player is alive player.setGameMode(GameMode.SURVIVAL); player.sendTitle(ChatColor.GREEN + "YOU ARE ALIVE!", ChatColor.GRAY + "Survive and earn more points!", 10, 150, 10); } } - } - } else { - for (Player player : Bukkit.getOnlinePlayers()) { - String playerName = player.getName(); - List playerNames = ConfigReader.getPlayerNames(); - if (playerNames.contains(playerName)) { - player.setGameMode(GameMode.SURVIVAL); - } + + // Set the leaderboard + Leaderboard leaderboard = new Leaderboard(Hardcore.getInstance(), player, "Leaderboard"); + leaderboards.put(player, leaderboard); + leaderboard.startShowing(); } } } @@ -71,5 +83,21 @@ public void onDisable() { // Plugin shutdown logic instance = null; pluginName = null; + if (!ConfigReader.getState()) { + return; + } + + // Restore players' game-mode to their original state + for (Player player : Bukkit.getOnlinePlayers()) { + String playerName = player.getName(); + List playerNames = ConfigReader.getPlayerNames(); + if (playerNames.contains(playerName) && playerGameModeMap.containsKey(player)) { + player.setGameMode(playerGameModeMap.get(player)); + } + + // Delete the leaderboard + leaderboards.get(player).turnOff(); + } + leaderboards.clear(); } } diff --git a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java index 6c66143..8027a8d 100644 --- a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java +++ b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java @@ -29,13 +29,13 @@ public boolean onCommand(CommandSender sender, Command command, String label, St break; } case "on" : { - ConfigReader.set("enable", true); + ConfigReader.setState(true); Hardcore.getInstance().saveConfig(); sender.sendMessage(ChatColor.BLUE + "Hardcore mode is on."); break; } case "off" : { - ConfigReader.set("enable", false); + ConfigReader.setState(false); Hardcore.getInstance().saveConfig(); sender.sendMessage(ChatColor.BLUE + "Hardcore mode is off."); break; diff --git a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java index 42d8657..7868e9a 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java @@ -2,6 +2,8 @@ import com.eofitg.hardcore.ConfigReader; import com.eofitg.hardcore.Hardcore; +import com.eofitg.hardcore.util.Leaderboard; +import com.eofitg.hardcore.util.TestScordboard; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Location; @@ -10,26 +12,31 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import java.util.List; +import static com.eofitg.hardcore.Hardcore.leaderboards; + public class PlayerListener implements Listener { - boolean state = ConfigReader.getState(); + private final boolean state = ConfigReader.getState(); @EventHandler public void onJoin(PlayerJoinEvent e) { if (!state) { return; } - // 新玩家加入时为该玩家申请存储空间 + Player player = e.getPlayer(); String playerName = e.getPlayer().getName(); List playerNames = ConfigReader.getPlayerNames(); + Hardcore.playerGameModeMap.put(player, player.getGameMode()); if (!playerNames.contains(playerName)) { + // Request memory space for the new player playerNames.add(playerName); - ConfigReader.set("playerNames", playerNames); - ConfigReader.set("alive." + playerName, true); - ConfigReader.set("point." + playerName, 0); + ConfigReader.setPlayerNames(playerNames); + ConfigReader.setPlayerState(playerName, true); + ConfigReader.setPoint(playerName, 0); Hardcore.getInstance().saveConfig(); player.setGameMode(GameMode.SURVIVAL); player.sendTitle(ChatColor.BLUE + "WELCOME, NEW PLAYER!", ChatColor.GRAY + "You only have one life and do your best to survive!", 10, 150, 10); @@ -37,23 +44,43 @@ public void onJoin(PlayerJoinEvent e) { boolean playerState = ConfigReader.getPlayerState(playerName); if (!playerState) { player.setGameMode(GameMode.SPECTATOR); - player.sendTitle(ChatColor.RED + "YOU HAVE DIED IN THIS SEASON!", ChatColor.GRAY + "Please wait for the reset!", 10, 150, 10); + player.sendTitle(ChatColor.RED + "YOU ARE DIED!", ChatColor.GRAY + "Please wait for the reset!", 10, 150, 10); } else { player.setGameMode(GameMode.SURVIVAL); player.sendTitle(ChatColor.GREEN + "YOU ARE ALIVE!", ChatColor.GRAY + "Survive and earn more points!", 10, 150, 10); } } + + // Set leaderboard for this player + if (leaderboards.containsKey(player)) { + leaderboards.get(player).startShowing(); + } else { + Leaderboard leaderboard = new Leaderboard(Hardcore.getInstance(), player, "Leaderboard"); + leaderboards.put(player, leaderboard); + leaderboard.startShowing(); + } + } + @EventHandler + public void onQuit(PlayerQuitEvent e) { + if (!state) { + return; + } + Player player = e.getPlayer(); + if (leaderboards.containsKey(player)) { + leaderboards.get(player).turnOff(); + } } @EventHandler public void onDeath(PlayerDeathEvent e) { if (!state) { return; } - // 玩家死亡时触发极限模式机制 + // Write config String playerName = e.getEntity().getPlayer().getName(); - ConfigReader.set("alive." + playerName, false); + ConfigReader.setPlayerState(playerName, false); Hardcore.getInstance().saveConfig(); + // Send player's location when dead Location location = e.getEntity().getLocation(); String world = e.getEntity().getWorld().getName(); String x = location.getBlockX() + ", "; diff --git a/src/main/java/com/eofitg/hardcore/listener/PointListener.java b/src/main/java/com/eofitg/hardcore/listener/PointListener.java index 208cfea..005b423 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PointListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PointListener.java @@ -7,14 +7,20 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageEvent; +import java.text.DecimalFormat; + public class PointListener implements Listener { + private final boolean state = ConfigReader.getState(); @EventHandler public void getDamage(EntityDamageEvent e) { + if(!state) { + return; + } if (e.getEntity() instanceof Player) { String name = e.getEntity().getName(); - int damage = (int) e.getDamage(); + double damage = Math.ceil(e.getFinalDamage()); //e.getEntity().sendMessage(name + " " + e.getCause() + " " + e.getDamage()); - int point = ConfigReader.getPoint(name) - damage; + double point = ConfigReader.getPoint(name) - damage; ConfigReader.setPoint(name, point); Hardcore.getInstance().saveConfig(); } diff --git a/src/main/java/com/eofitg/hardcore/util/Leaderboard.java b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java new file mode 100644 index 0000000..f917804 --- /dev/null +++ b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java @@ -0,0 +1,119 @@ +package com.eofitg.hardcore.util; + +import com.eofitg.hardcore.ConfigReader; +import com.google.common.collect.Lists; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitTask; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; + +import java.text.SimpleDateFormat; +import java.util.*; + +public class Leaderboard { + private Plugin plugin; + private Scoreboard scoreboard; + private Objective objective; + private Player player; + private String title; + private boolean isRun; + private SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); + private SimpleDateFormat format2 = new SimpleDateFormat("HH:mm:ss"); + private List text; // All text in the leaderboard + private BukkitTask task; + + public Leaderboard(Plugin plugin, Player player, String title) { + this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); + this.title = title; + this.objective = scoreboard.registerNewObjective("LEADERBOARD", "dummy", ChatColor.DARK_BLUE + this.title); + objective.setDisplaySlot(DisplaySlot.SIDEBAR); + + this.player = player; + this.isRun = false; + this.plugin = plugin; + text = Lists.newArrayList(); + } + + public void startShowing() { + // 判断是否已经在运行 + if (isRun) { + return; + } + if (player == null || !player.isOnline()) { + return; + } + isRun = true; + player.setScoreboard(scoreboard); + + int N = 7; // The number of players displayed on the leaderboard + List tempList = Lists.newArrayList(); + for (int i = 0; i <= N; i++) { + tempList.add("§" + ChatColor.values()[i].getChar()); + } + + for (int i = 0; i <= N; i++) { + Team row = scoreboard.registerNewTeam("" + i); + row.addEntry(tempList.get(i)); + objective.getScore(tempList.get(i)).setScore(N-i); + text.add(row); + } + + task = Bukkit.getScheduler().runTaskTimer(plugin, () -> { + if (!isRun) { + return; + } + + Map playerState = new HashMap<>(); + Map playerPoint = new HashMap<>(); + List playerNames = ConfigReader.getPlayerNames(); + for (int i = 0; i < playerNames.size() && i < N; i++) { + String name = playerNames.get(i); + playerState.put(name, ConfigReader.getPlayerState(name)); + playerPoint.put(name, ConfigReader.getPoint(name)); + } + // sort playerPoint by point + List> pointRanking = new LinkedList<>(playerPoint.entrySet()); + // Collections.sort(pointRanking, Map.Entry.comparingByValue()); + Collections.sort(pointRanking, (o1, o2) -> o2.getValue().compareTo(o1.getValue())); + + for (int i = 0, j = 0; i < text.size(); i++) { + Team row = text.get(i); // 获取每个Team + if (i == 0) { // Date&Time HUD + Date date = new Date(); + row.setPrefix(ChatColor.GRAY + format.format(date)); + row.setSuffix(ChatColor.GRAY + " " + format2.format(date)); + continue; + } + if (j < pointRanking.size()) { + String name = pointRanking.get(j).getKey(); + double points = pointRanking.get(j).getValue(); + String suffix = ChatColor.GOLD + name + ChatColor.WHITE + " - " + ChatColor.GOLD + points; + if (playerState.get(name)) { + suffix = suffix + ChatColor.GREEN + " √"; + } else { + suffix = suffix + ChatColor.RED + " ×"; + } + row.setPrefix(ChatColor.GREEN + "#" + i + ": "); + row.setSuffix(suffix); + j++; + continue; + } + // i < text.size() && j < pointRanking.size() -> pointRanking.size() < i < text.size() + row.setPrefix(ChatColor.GREEN + "#" + i + ": "); + row.setSuffix(ChatColor.DARK_GRAY + "***" + ChatColor.WHITE + " - " + ChatColor.DARK_GRAY + "***"); + } + + }, 0L, 20L); + } + + public void turnOff() { + isRun = false; + task.cancel(); + player.setScoreboard(Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard()); + } +} diff --git a/src/main/java/com/eofitg/hardcore/util/TestScordboard.java b/src/main/java/com/eofitg/hardcore/util/TestScordboard.java new file mode 100644 index 0000000..87a968c --- /dev/null +++ b/src/main/java/com/eofitg/hardcore/util/TestScordboard.java @@ -0,0 +1,99 @@ +package com.eofitg.hardcore.util; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitTask; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; + +import com.google.common.collect.Lists; + +public class TestScordboard { + + private Scoreboard scoreboard; + private Objective objective; + private String title; + private Player player; + private boolean isRun; + private SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); + private SimpleDateFormat format2 = new SimpleDateFormat("HH:mm:ss"); + // 用作runnable的主类实例 + private Plugin plugin; + /** + * 用于保存所有的Team + */ + private List timers; + private BukkitTask task; + + public TestScordboard(Plugin plugin, Player player, String title) { + this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); + this.title = title; + this.objective = scoreboard.registerNewObjective(player.getName(), "dummy", this.title.replace("&", "§")); + objective.setDisplaySlot(DisplaySlot.SIDEBAR); + + this.player = player; + this.isRun = false; + this.plugin = plugin; + timers = Lists.newArrayList(); + } + + public void startShowing() { + // 判断是否已经在运行 + if (isRun) { + return; + } + if (player == null || !player.isOnline()) { + return; + } + isRun = true; + player.setScoreboard(scoreboard); + + // 用于保存前15位的内容 + List tempList = Lists.newArrayList(); + for (int i = 0; i <= 10; i++) { + tempList.add("§" + ChatColor.values()[i].getChar()); + } + + for (int i = 0; i <= 10; i++) { + // 注册Team时使用 数字的形式就行 + Team timer = scoreboard.registerNewTeam("" + i); + // addEntry只是作为一个标识符, 用于getScore时的识别 + timer.addEntry(tempList.get(i)); + // getScore 刚才的标识符 + objective.getScore(tempList.get(i)).setScore(i); + + timers.add(timer); + } + + task = Bukkit.getScheduler().runTaskTimer(plugin, () -> { + if (!isRun) { + return; + } + + for (int i = 0; i < timers.size(); i++) { + Team timer = timers.get(i); // 获取每个Team + Date date = new Date(); + // 设置前缀 + timer.setPrefix(tempList.get(i) + format.format(date)); + // 设置后缀 + timer.setSuffix(tempList.get(i) + " " + format2.format(date)); + } + + }, 0L, 20L); + } + + public void turnOff() { + isRun = false; + task.cancel(); + player.setScoreboard(Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard()); + } +} \ No newline at end of file From c6d42b09bf995d71b7064757c84a261309a900e0 Mon Sep 17 00:00:00 2001 From: eofitg Date: Mon, 12 Jun 2023 17:53:58 +0800 Subject: [PATCH 02/15] PointListener - DamageListener --- .../com/eofitg/hardcore/ConfigReader.java | 2 +- .../hardcore/listener/PointListener.java | 36 ++++++++++++++++--- .../com/eofitg/hardcore/util/MathUtil.java | 11 ++++++ 3 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/eofitg/hardcore/util/MathUtil.java diff --git a/src/main/java/com/eofitg/hardcore/ConfigReader.java b/src/main/java/com/eofitg/hardcore/ConfigReader.java index 68cb0a0..34b4ccf 100644 --- a/src/main/java/com/eofitg/hardcore/ConfigReader.java +++ b/src/main/java/com/eofitg/hardcore/ConfigReader.java @@ -26,7 +26,7 @@ public static boolean getState() { return state; } public static double getPoint(String name) { - return config.getInt("point." + name); + return config.getDouble("point." + name); } public static void set(String key, Object value) { diff --git a/src/main/java/com/eofitg/hardcore/listener/PointListener.java b/src/main/java/com/eofitg/hardcore/listener/PointListener.java index 005b423..e1f2c18 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PointListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PointListener.java @@ -2,13 +2,15 @@ import com.eofitg.hardcore.ConfigReader; import com.eofitg.hardcore.Hardcore; +import com.eofitg.hardcore.util.MathUtil; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; -import java.text.DecimalFormat; - public class PointListener implements Listener { private final boolean state = ConfigReader.getState(); @EventHandler @@ -18,11 +20,35 @@ public void getDamage(EntityDamageEvent e) { } if (e.getEntity() instanceof Player) { String name = e.getEntity().getName(); - double damage = Math.ceil(e.getFinalDamage()); - //e.getEntity().sendMessage(name + " " + e.getCause() + " " + e.getDamage()); - double point = ConfigReader.getPoint(name) - damage; + if(!ConfigReader.getPlayerState(name)) return; + + double heart = Math.round(((LivingEntity) e.getEntity()).getHealth() * 2) / 20.0; + double damage = Math.min(heart, Math.round(e.getFinalDamage() * 2) / 20.0); + double point = MathUtil.round_half_up(ConfigReader.getPoint(name) - damage, 2); + // Hardcore.getInstance().getLogger().info("" + point); ConfigReader.setPoint(name, point); Hardcore.getInstance().saveConfig(); } } + @EventHandler + public void causeDamage(EntityDamageByEntityEvent e) { + if(!state) { + return; + } + if (e.getDamager() instanceof Player) { + if (e.getEntity() instanceof LivingEntity) { + if (e.getEntityType() == EntityType.ARMOR_STAND) return; + String name = e.getDamager().getName(); + if(!ConfigReader.getPlayerState(name)) return; + + double heart = Math.round(((LivingEntity) e.getEntity()).getHealth() * 2) / 20.0; + double damage = Math.min(heart, Math.round(e.getFinalDamage() * 2) / 20.0); + double point = MathUtil.round_half_up(ConfigReader.getPoint(name) + damage, 2); + // Hardcore.getInstance().getLogger().info("" + point); + ConfigReader.setPoint(name, point); + Hardcore.getInstance().saveConfig(); + } + } + } + } diff --git a/src/main/java/com/eofitg/hardcore/util/MathUtil.java b/src/main/java/com/eofitg/hardcore/util/MathUtil.java new file mode 100644 index 0000000..0f55361 --- /dev/null +++ b/src/main/java/com/eofitg/hardcore/util/MathUtil.java @@ -0,0 +1,11 @@ +package com.eofitg.hardcore.util; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +public class MathUtil { + public static double round_half_up(double number, int scale) { + BigDecimal bd = new BigDecimal(number); + return bd.setScale(scale, RoundingMode.HALF_UP).doubleValue(); + } +} From 846245909a9711665268000d06ffad403eff9d13 Mon Sep 17 00:00:00 2001 From: eofitg Date: Tue, 13 Jun 2023 21:19:02 +0800 Subject: [PATCH 03/15] Add AbstractListener --- .../hardcore/listener/AbstractListener.java | 12 +++++++++++ .../hardcore/listener/PlayerListener.java | 21 +++++++++---------- .../hardcore/listener/PointListener.java | 5 +---- 3 files changed, 23 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/eofitg/hardcore/listener/AbstractListener.java diff --git a/src/main/java/com/eofitg/hardcore/listener/AbstractListener.java b/src/main/java/com/eofitg/hardcore/listener/AbstractListener.java new file mode 100644 index 0000000..a040851 --- /dev/null +++ b/src/main/java/com/eofitg/hardcore/listener/AbstractListener.java @@ -0,0 +1,12 @@ +package com.eofitg.hardcore.listener; + +import com.eofitg.hardcore.ConfigReader; + +public class AbstractListener { + protected static boolean state = ConfigReader.getState(); + + protected void reload() { + state = ConfigReader.getState(); + } + +} diff --git a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java index 7868e9a..ee2892b 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java @@ -3,7 +3,6 @@ import com.eofitg.hardcore.ConfigReader; import com.eofitg.hardcore.Hardcore; import com.eofitg.hardcore.util.Leaderboard; -import com.eofitg.hardcore.util.TestScordboard; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Location; @@ -19,24 +18,25 @@ import static com.eofitg.hardcore.Hardcore.leaderboards; -public class PlayerListener implements Listener { - private final boolean state = ConfigReader.getState(); +public class PlayerListener extends AbstractListener implements Listener { @EventHandler public void onJoin(PlayerJoinEvent e) { - if (!state) { - return; - } - Player player = e.getPlayer(); String playerName = e.getPlayer().getName(); List playerNames = ConfigReader.getPlayerNames(); - Hardcore.playerGameModeMap.put(player, player.getGameMode()); + if (!state) { + if (playerNames.contains(playerName) && Hardcore.playerGameModeMap.containsKey(player)) { + player.setGameMode(Hardcore.playerGameModeMap.get(player)); + } + return; + } if (!playerNames.contains(playerName)) { // Request memory space for the new player playerNames.add(playerName); ConfigReader.setPlayerNames(playerNames); ConfigReader.setPlayerState(playerName, true); ConfigReader.setPoint(playerName, 0); + Hardcore.playerGameModeMap.put(player, player.getGameMode()); Hardcore.getInstance().saveConfig(); player.setGameMode(GameMode.SURVIVAL); player.sendTitle(ChatColor.BLUE + "WELCOME, NEW PLAYER!", ChatColor.GRAY + "You only have one life and do your best to survive!", 10, 150, 10); @@ -46,6 +46,7 @@ public void onJoin(PlayerJoinEvent e) { player.setGameMode(GameMode.SPECTATOR); player.sendTitle(ChatColor.RED + "YOU ARE DIED!", ChatColor.GRAY + "Please wait for the reset!", 10, 150, 10); } else { + Hardcore.playerGameModeMap.put(player, player.getGameMode()); player.setGameMode(GameMode.SURVIVAL); player.sendTitle(ChatColor.GREEN + "YOU ARE ALIVE!", ChatColor.GRAY + "Survive and earn more points!", 10, 150, 10); } @@ -62,12 +63,10 @@ public void onJoin(PlayerJoinEvent e) { } @EventHandler public void onQuit(PlayerQuitEvent e) { - if (!state) { - return; - } Player player = e.getPlayer(); if (leaderboards.containsKey(player)) { leaderboards.get(player).turnOff(); + leaderboards.remove(player); } } @EventHandler diff --git a/src/main/java/com/eofitg/hardcore/listener/PointListener.java b/src/main/java/com/eofitg/hardcore/listener/PointListener.java index e1f2c18..38c08b0 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PointListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PointListener.java @@ -11,8 +11,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; -public class PointListener implements Listener { - private final boolean state = ConfigReader.getState(); +public class PointListener extends AbstractListener implements Listener { @EventHandler public void getDamage(EntityDamageEvent e) { if(!state) { @@ -25,7 +24,6 @@ public void getDamage(EntityDamageEvent e) { double heart = Math.round(((LivingEntity) e.getEntity()).getHealth() * 2) / 20.0; double damage = Math.min(heart, Math.round(e.getFinalDamage() * 2) / 20.0); double point = MathUtil.round_half_up(ConfigReader.getPoint(name) - damage, 2); - // Hardcore.getInstance().getLogger().info("" + point); ConfigReader.setPoint(name, point); Hardcore.getInstance().saveConfig(); } @@ -44,7 +42,6 @@ public void causeDamage(EntityDamageByEntityEvent e) { double heart = Math.round(((LivingEntity) e.getEntity()).getHealth() * 2) / 20.0; double damage = Math.min(heart, Math.round(e.getFinalDamage() * 2) / 20.0); double point = MathUtil.round_half_up(ConfigReader.getPoint(name) + damage, 2); - // Hardcore.getInstance().getLogger().info("" + point); ConfigReader.setPoint(name, point); Hardcore.getInstance().saveConfig(); } From 1116b0d80c0c080eefb3adc4071780db0be29992 Mon Sep 17 00:00:00 2001 From: eofitg Date: Tue, 13 Jun 2023 21:56:26 +0800 Subject: [PATCH 04/15] Move ConfigReader.java to DefaultConfig.java --- .../java/com/eofitg/hardcore/Hardcore.java | 24 +++++++++---------- .../hardcore/cmdoperation/CommandChecker.java | 4 ++-- .../hardcore/cmdoperation/CommandHandler.java | 15 ++++++------ .../DefaultConfig.java} | 8 +++++-- .../hardcore/listener/AbstractListener.java | 6 ++--- .../hardcore/listener/PlayerListener.java | 20 ++++++++-------- .../hardcore/listener/PointListener.java | 19 +++++++-------- .../com/eofitg/hardcore/util/Leaderboard.java | 10 ++++---- src/main/resources/config.yml | 3 --- 9 files changed, 54 insertions(+), 55 deletions(-) rename src/main/java/com/eofitg/hardcore/{ConfigReader.java => configuration/DefaultConfig.java} (90%) diff --git a/src/main/java/com/eofitg/hardcore/Hardcore.java b/src/main/java/com/eofitg/hardcore/Hardcore.java index 52c2b77..5834a90 100644 --- a/src/main/java/com/eofitg/hardcore/Hardcore.java +++ b/src/main/java/com/eofitg/hardcore/Hardcore.java @@ -2,17 +2,16 @@ import com.eofitg.hardcore.cmdoperation.CommandRegister; import com.eofitg.hardcore.cmdoperation.TabCompleterRegister; +import com.eofitg.hardcore.configuration.DefaultConfig; import com.eofitg.hardcore.listener.PlayerListener; import com.eofitg.hardcore.listener.PointListener; import com.eofitg.hardcore.util.Leaderboard; -import com.eofitg.hardcore.util.TestScordboard; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,28 +35,29 @@ public void onEnable() { // Plugin startup logic instance = this; pluginName = instance.getName(); + saveDefaultConfig(); Bukkit.getPluginManager().registerEvents(new PlayerListener(), this); Bukkit.getPluginManager().registerEvents(new PointListener(), this); - CommandRegister.register(ConfigReader.getCmdNames()); - TabCompleterRegister.register(ConfigReader.getCmdNames()); + CommandRegister.register(DefaultConfig.getCmdNames()); + TabCompleterRegister.register(DefaultConfig.getCmdNames()); // Add all online players to the player list then toggle their game-mode - if (ConfigReader.getState()) { + if (DefaultConfig.getState()) { for (Player player : Bukkit.getOnlinePlayers()) { String playerName = player.getName(); - List playerNames = ConfigReader.getPlayerNames(); + List playerNames = DefaultConfig.getPlayerNames(); if (!playerNames.contains(playerName)) { // new player playerNames.add(playerName); - ConfigReader.setPlayerNames(playerNames); - ConfigReader.setPlayerState(playerName, true); - Hardcore.getInstance().saveConfig(); + DefaultConfig.setPlayerNames(playerNames); + DefaultConfig.setPlayerState(playerName, true); + DefaultConfig.save(); playerGameModeMap.put(player, player.getGameMode()); player.setGameMode(GameMode.SURVIVAL); player.sendTitle(ChatColor.BLUE + "WELCOME, NEW PLAYER!", ChatColor.GRAY + "You only have one life and do your best to survive!", 10, 150, 10); } else { // existing player - boolean playerState = ConfigReader.getPlayerState(playerName); + boolean playerState = DefaultConfig.getPlayerState(playerName); playerGameModeMap.put(player, player.getGameMode()); if (!playerState) { // player has dead @@ -83,14 +83,14 @@ public void onDisable() { // Plugin shutdown logic instance = null; pluginName = null; - if (!ConfigReader.getState()) { + if (!DefaultConfig.getState()) { return; } // Restore players' game-mode to their original state for (Player player : Bukkit.getOnlinePlayers()) { String playerName = player.getName(); - List playerNames = ConfigReader.getPlayerNames(); + List playerNames = DefaultConfig.getPlayerNames(); if (playerNames.contains(playerName) && playerGameModeMap.containsKey(player)) { player.setGameMode(playerGameModeMap.get(player)); } diff --git a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandChecker.java b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandChecker.java index e6be2ea..1f7812c 100644 --- a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandChecker.java +++ b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandChecker.java @@ -1,13 +1,13 @@ package com.eofitg.hardcore.cmdoperation; -import com.eofitg.hardcore.ConfigReader; import com.eofitg.hardcore.Hardcore; +import com.eofitg.hardcore.configuration.DefaultConfig; import java.util.List; public class CommandChecker { public static boolean conform (String requestCommand, String commandName) { - List cmdList = ConfigReader.getCmdList(commandName); + List cmdList = DefaultConfig.getCmdList(commandName); String pluginName = Hardcore.getPluginName().toLowerCase(); if (requestCommand.startsWith(pluginName + ":")) { requestCommand = requestCommand.substring(pluginName.length() + 1); diff --git a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java index 8027a8d..0672042 100644 --- a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java +++ b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java @@ -1,7 +1,6 @@ package com.eofitg.hardcore.cmdoperation; -import com.eofitg.hardcore.ConfigReader; -import com.eofitg.hardcore.Hardcore; +import com.eofitg.hardcore.configuration.DefaultConfig; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -29,20 +28,20 @@ public boolean onCommand(CommandSender sender, Command command, String label, St break; } case "on" : { - ConfigReader.setState(true); - Hardcore.getInstance().saveConfig(); + DefaultConfig.setState(true); + DefaultConfig.save(); sender.sendMessage(ChatColor.BLUE + "Hardcore mode is on."); break; } case "off" : { - ConfigReader.setState(false); - Hardcore.getInstance().saveConfig(); + DefaultConfig.setState(false); + DefaultConfig.save(); sender.sendMessage(ChatColor.BLUE + "Hardcore mode is off."); break; } case "reset" : { - ConfigReader.reset(); - Hardcore.getInstance().saveConfig(); + DefaultConfig.reset(); + DefaultConfig.save(); sender.sendMessage(ChatColor.BLUE + "Player state has reset."); break; } diff --git a/src/main/java/com/eofitg/hardcore/ConfigReader.java b/src/main/java/com/eofitg/hardcore/configuration/DefaultConfig.java similarity index 90% rename from src/main/java/com/eofitg/hardcore/ConfigReader.java rename to src/main/java/com/eofitg/hardcore/configuration/DefaultConfig.java index 34b4ccf..fdd0365 100644 --- a/src/main/java/com/eofitg/hardcore/ConfigReader.java +++ b/src/main/java/com/eofitg/hardcore/configuration/DefaultConfig.java @@ -1,10 +1,11 @@ -package com.eofitg.hardcore; +package com.eofitg.hardcore.configuration; +import com.eofitg.hardcore.Hardcore; import org.bukkit.configuration.file.FileConfiguration; import java.util.List; -public class ConfigReader { +public class DefaultConfig { private static FileConfiguration config = Hardcore.getInstance().getConfig(); private static List playerNames = config.getStringList("playerNames"); private static List cmdNames = config.getStringList("commandNames"); @@ -56,4 +57,7 @@ public static void reset() { reset(s); } } + public static void save() { + Hardcore.getInstance().saveConfig(); + } } diff --git a/src/main/java/com/eofitg/hardcore/listener/AbstractListener.java b/src/main/java/com/eofitg/hardcore/listener/AbstractListener.java index a040851..82b8c3e 100644 --- a/src/main/java/com/eofitg/hardcore/listener/AbstractListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/AbstractListener.java @@ -1,12 +1,12 @@ package com.eofitg.hardcore.listener; -import com.eofitg.hardcore.ConfigReader; +import com.eofitg.hardcore.configuration.DefaultConfig; public class AbstractListener { - protected static boolean state = ConfigReader.getState(); + protected static boolean state = DefaultConfig.getState(); protected void reload() { - state = ConfigReader.getState(); + state = DefaultConfig.getState(); } } diff --git a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java index ee2892b..57d127b 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java @@ -1,7 +1,7 @@ package com.eofitg.hardcore.listener; -import com.eofitg.hardcore.ConfigReader; import com.eofitg.hardcore.Hardcore; +import com.eofitg.hardcore.configuration.DefaultConfig; import com.eofitg.hardcore.util.Leaderboard; import org.bukkit.ChatColor; import org.bukkit.GameMode; @@ -23,7 +23,7 @@ public class PlayerListener extends AbstractListener implements Listener { public void onJoin(PlayerJoinEvent e) { Player player = e.getPlayer(); String playerName = e.getPlayer().getName(); - List playerNames = ConfigReader.getPlayerNames(); + List playerNames = DefaultConfig.getPlayerNames(); if (!state) { if (playerNames.contains(playerName) && Hardcore.playerGameModeMap.containsKey(player)) { player.setGameMode(Hardcore.playerGameModeMap.get(player)); @@ -33,15 +33,15 @@ public void onJoin(PlayerJoinEvent e) { if (!playerNames.contains(playerName)) { // Request memory space for the new player playerNames.add(playerName); - ConfigReader.setPlayerNames(playerNames); - ConfigReader.setPlayerState(playerName, true); - ConfigReader.setPoint(playerName, 0); + DefaultConfig.setPlayerNames(playerNames); + DefaultConfig.setPlayerState(playerName, true); + DefaultConfig.setPoint(playerName, 0); Hardcore.playerGameModeMap.put(player, player.getGameMode()); - Hardcore.getInstance().saveConfig(); + DefaultConfig.save(); player.setGameMode(GameMode.SURVIVAL); player.sendTitle(ChatColor.BLUE + "WELCOME, NEW PLAYER!", ChatColor.GRAY + "You only have one life and do your best to survive!", 10, 150, 10); } else { - boolean playerState = ConfigReader.getPlayerState(playerName); + boolean playerState = DefaultConfig.getPlayerState(playerName); if (!playerState) { player.setGameMode(GameMode.SPECTATOR); player.sendTitle(ChatColor.RED + "YOU ARE DIED!", ChatColor.GRAY + "Please wait for the reset!", 10, 150, 10); @@ -76,8 +76,8 @@ public void onDeath(PlayerDeathEvent e) { } // Write config String playerName = e.getEntity().getPlayer().getName(); - ConfigReader.setPlayerState(playerName, false); - Hardcore.getInstance().saveConfig(); + DefaultConfig.setPlayerState(playerName, false); + DefaultConfig.save(); // Send player's location when dead Location location = e.getEntity().getLocation(); @@ -95,7 +95,7 @@ public void onRespawn(PlayerRespawnEvent e) { } Player player = e.getPlayer(); String playerName = e.getPlayer().getName(); - boolean playerState = ConfigReader.getPlayerState(playerName); + boolean playerState = DefaultConfig.getPlayerState(playerName); if (!playerState) { player.setGameMode(GameMode.SPECTATOR); player.sendTitle(ChatColor.RED + "YOU HAVE DIED IN THIS SEASON!", ChatColor.GRAY + "Please wait for the reset!", 10, 150, 10); diff --git a/src/main/java/com/eofitg/hardcore/listener/PointListener.java b/src/main/java/com/eofitg/hardcore/listener/PointListener.java index 38c08b0..3d2e17d 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PointListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PointListener.java @@ -1,7 +1,6 @@ package com.eofitg.hardcore.listener; -import com.eofitg.hardcore.ConfigReader; -import com.eofitg.hardcore.Hardcore; +import com.eofitg.hardcore.configuration.DefaultConfig; import com.eofitg.hardcore.util.MathUtil; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; @@ -19,13 +18,13 @@ public void getDamage(EntityDamageEvent e) { } if (e.getEntity() instanceof Player) { String name = e.getEntity().getName(); - if(!ConfigReader.getPlayerState(name)) return; + if(!DefaultConfig.getPlayerState(name)) return; double heart = Math.round(((LivingEntity) e.getEntity()).getHealth() * 2) / 20.0; double damage = Math.min(heart, Math.round(e.getFinalDamage() * 2) / 20.0); - double point = MathUtil.round_half_up(ConfigReader.getPoint(name) - damage, 2); - ConfigReader.setPoint(name, point); - Hardcore.getInstance().saveConfig(); + double point = MathUtil.round_half_up(DefaultConfig.getPoint(name) - damage, 2); + DefaultConfig.setPoint(name, point); + DefaultConfig.save(); } } @EventHandler @@ -37,13 +36,13 @@ public void causeDamage(EntityDamageByEntityEvent e) { if (e.getEntity() instanceof LivingEntity) { if (e.getEntityType() == EntityType.ARMOR_STAND) return; String name = e.getDamager().getName(); - if(!ConfigReader.getPlayerState(name)) return; + if(!DefaultConfig.getPlayerState(name)) return; double heart = Math.round(((LivingEntity) e.getEntity()).getHealth() * 2) / 20.0; double damage = Math.min(heart, Math.round(e.getFinalDamage() * 2) / 20.0); - double point = MathUtil.round_half_up(ConfigReader.getPoint(name) + damage, 2); - ConfigReader.setPoint(name, point); - Hardcore.getInstance().saveConfig(); + double point = MathUtil.round_half_up(DefaultConfig.getPoint(name) + damage, 2); + DefaultConfig.setPoint(name, point); + DefaultConfig.save(); } } } diff --git a/src/main/java/com/eofitg/hardcore/util/Leaderboard.java b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java index f917804..ecb39ea 100644 --- a/src/main/java/com/eofitg/hardcore/util/Leaderboard.java +++ b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java @@ -1,6 +1,6 @@ package com.eofitg.hardcore.util; -import com.eofitg.hardcore.ConfigReader; +import com.eofitg.hardcore.configuration.DefaultConfig; import com.google.common.collect.Lists; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -70,11 +70,11 @@ public void startShowing() { Map playerState = new HashMap<>(); Map playerPoint = new HashMap<>(); - List playerNames = ConfigReader.getPlayerNames(); + List playerNames = DefaultConfig.getPlayerNames(); for (int i = 0; i < playerNames.size() && i < N; i++) { String name = playerNames.get(i); - playerState.put(name, ConfigReader.getPlayerState(name)); - playerPoint.put(name, ConfigReader.getPoint(name)); + playerState.put(name, DefaultConfig.getPlayerState(name)); + playerPoint.put(name, DefaultConfig.getPoint(name)); } // sort playerPoint by point List> pointRanking = new LinkedList<>(playerPoint.entrySet()); @@ -105,7 +105,7 @@ public void startShowing() { } // i < text.size() && j < pointRanking.size() -> pointRanking.size() < i < text.size() row.setPrefix(ChatColor.GREEN + "#" + i + ": "); - row.setSuffix(ChatColor.DARK_GRAY + "***" + ChatColor.WHITE + " - " + ChatColor.DARK_GRAY + "***"); + row.setSuffix(ChatColor.DARK_GRAY + "****" + ChatColor.WHITE + " - " + ChatColor.DARK_GRAY + "****"); } }, 0L, 20L); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 6e839a5..17724af 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,6 +1,3 @@ -playerNames: -alive: -point: commandNames: [ hardcore ] commands: hardcore: [ hardcore, hardcoremode ] From 9572373fdde48d549208d4fb3d9076bf2f2b4eff Mon Sep 17 00:00:00 2001 From: eofitg Date: Tue, 13 Jun 2023 22:56:38 +0800 Subject: [PATCH 05/15] Add Hardcore.java Comments --- src/main/java/com/eofitg/hardcore/Hardcore.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/eofitg/hardcore/Hardcore.java b/src/main/java/com/eofitg/hardcore/Hardcore.java index 5834a90..42b1b45 100644 --- a/src/main/java/com/eofitg/hardcore/Hardcore.java +++ b/src/main/java/com/eofitg/hardcore/Hardcore.java @@ -26,7 +26,9 @@ public static String getPluginName() { return pluginName; } + // Store players' game-mode before the plugin turns on public static Map playerGameModeMap = new HashMap<>(); + // Store players' leaderboards displayed on their interfaces public static Map leaderboards = new HashMap<>(); @@ -36,8 +38,10 @@ public void onEnable() { instance = this; pluginName = instance.getName(); saveDefaultConfig(); + // Register Listeners Bukkit.getPluginManager().registerEvents(new PlayerListener(), this); Bukkit.getPluginManager().registerEvents(new PointListener(), this); + // Register Commands CommandRegister.register(DefaultConfig.getCmdNames()); TabCompleterRegister.register(DefaultConfig.getCmdNames()); @@ -60,7 +64,7 @@ public void onEnable() { boolean playerState = DefaultConfig.getPlayerState(playerName); playerGameModeMap.put(player, player.getGameMode()); if (!playerState) { - // player has dead + // player is dead player.setGameMode(GameMode.SPECTATOR); player.sendTitle(ChatColor.RED + "YOU HAVE DIED IN THIS SEASON!", ChatColor.GRAY + "Please wait for the reset!", 10, 150, 10); } else { From c7c6e4fefcc93bc88ac425bcba430945e235c05f Mon Sep 17 00:00:00 2001 From: eofitg Date: Wed, 14 Jun 2023 11:22:11 +0800 Subject: [PATCH 06/15] Rename DefaultConfig.java to MainConfig.java --- .../java/com/eofitg/hardcore/Hardcore.java | 24 +++++++++---------- .../hardcore/cmdoperation/CommandChecker.java | 4 ++-- .../hardcore/cmdoperation/CommandHandler.java | 14 +++++------ .../{DefaultConfig.java => MainConfig.java} | 5 +++- .../hardcore/listener/AbstractListener.java | 6 ++--- .../hardcore/listener/PlayerListener.java | 20 ++++++++-------- .../hardcore/listener/PointListener.java | 18 +++++++------- .../com/eofitg/hardcore/util/Leaderboard.java | 8 +++---- 8 files changed, 51 insertions(+), 48 deletions(-) rename src/main/java/com/eofitg/hardcore/configuration/{DefaultConfig.java => MainConfig.java} (93%) diff --git a/src/main/java/com/eofitg/hardcore/Hardcore.java b/src/main/java/com/eofitg/hardcore/Hardcore.java index 42b1b45..fb86214 100644 --- a/src/main/java/com/eofitg/hardcore/Hardcore.java +++ b/src/main/java/com/eofitg/hardcore/Hardcore.java @@ -2,7 +2,7 @@ import com.eofitg.hardcore.cmdoperation.CommandRegister; import com.eofitg.hardcore.cmdoperation.TabCompleterRegister; -import com.eofitg.hardcore.configuration.DefaultConfig; +import com.eofitg.hardcore.configuration.MainConfig; import com.eofitg.hardcore.listener.PlayerListener; import com.eofitg.hardcore.listener.PointListener; import com.eofitg.hardcore.util.Leaderboard; @@ -37,31 +37,31 @@ public void onEnable() { // Plugin startup logic instance = this; pluginName = instance.getName(); - saveDefaultConfig(); + MainConfig.saveDefault(); // Register Listeners Bukkit.getPluginManager().registerEvents(new PlayerListener(), this); Bukkit.getPluginManager().registerEvents(new PointListener(), this); // Register Commands - CommandRegister.register(DefaultConfig.getCmdNames()); - TabCompleterRegister.register(DefaultConfig.getCmdNames()); + CommandRegister.register(MainConfig.getCmdNames()); + TabCompleterRegister.register(MainConfig.getCmdNames()); // Add all online players to the player list then toggle their game-mode - if (DefaultConfig.getState()) { + if (MainConfig.getState()) { for (Player player : Bukkit.getOnlinePlayers()) { String playerName = player.getName(); - List playerNames = DefaultConfig.getPlayerNames(); + List playerNames = MainConfig.getPlayerNames(); if (!playerNames.contains(playerName)) { // new player playerNames.add(playerName); - DefaultConfig.setPlayerNames(playerNames); - DefaultConfig.setPlayerState(playerName, true); - DefaultConfig.save(); + MainConfig.setPlayerNames(playerNames); + MainConfig.setPlayerState(playerName, true); + MainConfig.save(); playerGameModeMap.put(player, player.getGameMode()); player.setGameMode(GameMode.SURVIVAL); player.sendTitle(ChatColor.BLUE + "WELCOME, NEW PLAYER!", ChatColor.GRAY + "You only have one life and do your best to survive!", 10, 150, 10); } else { // existing player - boolean playerState = DefaultConfig.getPlayerState(playerName); + boolean playerState = MainConfig.getPlayerState(playerName); playerGameModeMap.put(player, player.getGameMode()); if (!playerState) { // player is dead @@ -87,14 +87,14 @@ public void onDisable() { // Plugin shutdown logic instance = null; pluginName = null; - if (!DefaultConfig.getState()) { + if (!MainConfig.getState()) { return; } // Restore players' game-mode to their original state for (Player player : Bukkit.getOnlinePlayers()) { String playerName = player.getName(); - List playerNames = DefaultConfig.getPlayerNames(); + List playerNames = MainConfig.getPlayerNames(); if (playerNames.contains(playerName) && playerGameModeMap.containsKey(player)) { player.setGameMode(playerGameModeMap.get(player)); } diff --git a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandChecker.java b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandChecker.java index 1f7812c..b6b7c52 100644 --- a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandChecker.java +++ b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandChecker.java @@ -1,13 +1,13 @@ package com.eofitg.hardcore.cmdoperation; import com.eofitg.hardcore.Hardcore; -import com.eofitg.hardcore.configuration.DefaultConfig; +import com.eofitg.hardcore.configuration.MainConfig; import java.util.List; public class CommandChecker { public static boolean conform (String requestCommand, String commandName) { - List cmdList = DefaultConfig.getCmdList(commandName); + List cmdList = MainConfig.getCmdList(commandName); String pluginName = Hardcore.getPluginName().toLowerCase(); if (requestCommand.startsWith(pluginName + ":")) { requestCommand = requestCommand.substring(pluginName.length() + 1); diff --git a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java index 0672042..3cb77e4 100644 --- a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java +++ b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java @@ -1,6 +1,6 @@ package com.eofitg.hardcore.cmdoperation; -import com.eofitg.hardcore.configuration.DefaultConfig; +import com.eofitg.hardcore.configuration.MainConfig; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -28,20 +28,20 @@ public boolean onCommand(CommandSender sender, Command command, String label, St break; } case "on" : { - DefaultConfig.setState(true); - DefaultConfig.save(); + MainConfig.setState(true); + MainConfig.save(); sender.sendMessage(ChatColor.BLUE + "Hardcore mode is on."); break; } case "off" : { - DefaultConfig.setState(false); - DefaultConfig.save(); + MainConfig.setState(false); + MainConfig.save(); sender.sendMessage(ChatColor.BLUE + "Hardcore mode is off."); break; } case "reset" : { - DefaultConfig.reset(); - DefaultConfig.save(); + MainConfig.reset(); + MainConfig.save(); sender.sendMessage(ChatColor.BLUE + "Player state has reset."); break; } diff --git a/src/main/java/com/eofitg/hardcore/configuration/DefaultConfig.java b/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java similarity index 93% rename from src/main/java/com/eofitg/hardcore/configuration/DefaultConfig.java rename to src/main/java/com/eofitg/hardcore/configuration/MainConfig.java index fdd0365..6aa676a 100644 --- a/src/main/java/com/eofitg/hardcore/configuration/DefaultConfig.java +++ b/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java @@ -5,7 +5,7 @@ import java.util.List; -public class DefaultConfig { +public class MainConfig { private static FileConfiguration config = Hardcore.getInstance().getConfig(); private static List playerNames = config.getStringList("playerNames"); private static List cmdNames = config.getStringList("commandNames"); @@ -60,4 +60,7 @@ public static void reset() { public static void save() { Hardcore.getInstance().saveConfig(); } + public static void saveDefault() { + Hardcore.getInstance().saveDefaultConfig(); + } } diff --git a/src/main/java/com/eofitg/hardcore/listener/AbstractListener.java b/src/main/java/com/eofitg/hardcore/listener/AbstractListener.java index 82b8c3e..2ac126b 100644 --- a/src/main/java/com/eofitg/hardcore/listener/AbstractListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/AbstractListener.java @@ -1,12 +1,12 @@ package com.eofitg.hardcore.listener; -import com.eofitg.hardcore.configuration.DefaultConfig; +import com.eofitg.hardcore.configuration.MainConfig; public class AbstractListener { - protected static boolean state = DefaultConfig.getState(); + protected static boolean state = MainConfig.getState(); protected void reload() { - state = DefaultConfig.getState(); + state = MainConfig.getState(); } } diff --git a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java index 57d127b..570b3bb 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java @@ -1,7 +1,7 @@ package com.eofitg.hardcore.listener; import com.eofitg.hardcore.Hardcore; -import com.eofitg.hardcore.configuration.DefaultConfig; +import com.eofitg.hardcore.configuration.MainConfig; import com.eofitg.hardcore.util.Leaderboard; import org.bukkit.ChatColor; import org.bukkit.GameMode; @@ -23,7 +23,7 @@ public class PlayerListener extends AbstractListener implements Listener { public void onJoin(PlayerJoinEvent e) { Player player = e.getPlayer(); String playerName = e.getPlayer().getName(); - List playerNames = DefaultConfig.getPlayerNames(); + List playerNames = MainConfig.getPlayerNames(); if (!state) { if (playerNames.contains(playerName) && Hardcore.playerGameModeMap.containsKey(player)) { player.setGameMode(Hardcore.playerGameModeMap.get(player)); @@ -33,15 +33,15 @@ public void onJoin(PlayerJoinEvent e) { if (!playerNames.contains(playerName)) { // Request memory space for the new player playerNames.add(playerName); - DefaultConfig.setPlayerNames(playerNames); - DefaultConfig.setPlayerState(playerName, true); - DefaultConfig.setPoint(playerName, 0); + MainConfig.setPlayerNames(playerNames); + MainConfig.setPlayerState(playerName, true); + MainConfig.setPoint(playerName, 0); Hardcore.playerGameModeMap.put(player, player.getGameMode()); - DefaultConfig.save(); + MainConfig.save(); player.setGameMode(GameMode.SURVIVAL); player.sendTitle(ChatColor.BLUE + "WELCOME, NEW PLAYER!", ChatColor.GRAY + "You only have one life and do your best to survive!", 10, 150, 10); } else { - boolean playerState = DefaultConfig.getPlayerState(playerName); + boolean playerState = MainConfig.getPlayerState(playerName); if (!playerState) { player.setGameMode(GameMode.SPECTATOR); player.sendTitle(ChatColor.RED + "YOU ARE DIED!", ChatColor.GRAY + "Please wait for the reset!", 10, 150, 10); @@ -76,8 +76,8 @@ public void onDeath(PlayerDeathEvent e) { } // Write config String playerName = e.getEntity().getPlayer().getName(); - DefaultConfig.setPlayerState(playerName, false); - DefaultConfig.save(); + MainConfig.setPlayerState(playerName, false); + MainConfig.save(); // Send player's location when dead Location location = e.getEntity().getLocation(); @@ -95,7 +95,7 @@ public void onRespawn(PlayerRespawnEvent e) { } Player player = e.getPlayer(); String playerName = e.getPlayer().getName(); - boolean playerState = DefaultConfig.getPlayerState(playerName); + boolean playerState = MainConfig.getPlayerState(playerName); if (!playerState) { player.setGameMode(GameMode.SPECTATOR); player.sendTitle(ChatColor.RED + "YOU HAVE DIED IN THIS SEASON!", ChatColor.GRAY + "Please wait for the reset!", 10, 150, 10); diff --git a/src/main/java/com/eofitg/hardcore/listener/PointListener.java b/src/main/java/com/eofitg/hardcore/listener/PointListener.java index 3d2e17d..aed5c72 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PointListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PointListener.java @@ -1,6 +1,6 @@ package com.eofitg.hardcore.listener; -import com.eofitg.hardcore.configuration.DefaultConfig; +import com.eofitg.hardcore.configuration.MainConfig; import com.eofitg.hardcore.util.MathUtil; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; @@ -18,13 +18,13 @@ public void getDamage(EntityDamageEvent e) { } if (e.getEntity() instanceof Player) { String name = e.getEntity().getName(); - if(!DefaultConfig.getPlayerState(name)) return; + if(!MainConfig.getPlayerState(name)) return; double heart = Math.round(((LivingEntity) e.getEntity()).getHealth() * 2) / 20.0; double damage = Math.min(heart, Math.round(e.getFinalDamage() * 2) / 20.0); - double point = MathUtil.round_half_up(DefaultConfig.getPoint(name) - damage, 2); - DefaultConfig.setPoint(name, point); - DefaultConfig.save(); + double point = MathUtil.round_half_up(MainConfig.getPoint(name) - damage, 2); + MainConfig.setPoint(name, point); + MainConfig.save(); } } @EventHandler @@ -36,13 +36,13 @@ public void causeDamage(EntityDamageByEntityEvent e) { if (e.getEntity() instanceof LivingEntity) { if (e.getEntityType() == EntityType.ARMOR_STAND) return; String name = e.getDamager().getName(); - if(!DefaultConfig.getPlayerState(name)) return; + if(!MainConfig.getPlayerState(name)) return; double heart = Math.round(((LivingEntity) e.getEntity()).getHealth() * 2) / 20.0; double damage = Math.min(heart, Math.round(e.getFinalDamage() * 2) / 20.0); - double point = MathUtil.round_half_up(DefaultConfig.getPoint(name) + damage, 2); - DefaultConfig.setPoint(name, point); - DefaultConfig.save(); + double point = MathUtil.round_half_up(MainConfig.getPoint(name) + damage, 2); + MainConfig.setPoint(name, point); + MainConfig.save(); } } } diff --git a/src/main/java/com/eofitg/hardcore/util/Leaderboard.java b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java index ecb39ea..fce0fe4 100644 --- a/src/main/java/com/eofitg/hardcore/util/Leaderboard.java +++ b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java @@ -1,6 +1,6 @@ package com.eofitg.hardcore.util; -import com.eofitg.hardcore.configuration.DefaultConfig; +import com.eofitg.hardcore.configuration.MainConfig; import com.google.common.collect.Lists; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -70,11 +70,11 @@ public void startShowing() { Map playerState = new HashMap<>(); Map playerPoint = new HashMap<>(); - List playerNames = DefaultConfig.getPlayerNames(); + List playerNames = MainConfig.getPlayerNames(); for (int i = 0; i < playerNames.size() && i < N; i++) { String name = playerNames.get(i); - playerState.put(name, DefaultConfig.getPlayerState(name)); - playerPoint.put(name, DefaultConfig.getPoint(name)); + playerState.put(name, MainConfig.getPlayerState(name)); + playerPoint.put(name, MainConfig.getPoint(name)); } // sort playerPoint by point List> pointRanking = new LinkedList<>(playerPoint.entrySet()); From 476616edd5f75de8d07863ba6a8152f371a71bb0 Mon Sep 17 00:00:00 2001 From: eofitg Date: Thu, 15 Jun 2023 13:03:19 +0800 Subject: [PATCH 07/15] Set UserDataConfig --- .../java/com/eofitg/hardcore/Hardcore.java | 24 ++-- .../hardcore/cmdoperation/CommandHandler.java | 6 +- .../hardcore/configuration/MainConfig.java | 8 +- .../configuration/UserDataConfig.java | 106 ++++++++++++++++++ .../hardcore/listener/AbstractListener.java | 2 +- .../hardcore/listener/PlayerListener.java | 31 +++-- .../hardcore/listener/PointListener.java | 26 +++-- .../com/eofitg/hardcore/util/Leaderboard.java | 36 +++--- src/main/resources/config.yml | 2 +- 9 files changed, 183 insertions(+), 58 deletions(-) create mode 100644 src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java diff --git a/src/main/java/com/eofitg/hardcore/Hardcore.java b/src/main/java/com/eofitg/hardcore/Hardcore.java index fb86214..0963473 100644 --- a/src/main/java/com/eofitg/hardcore/Hardcore.java +++ b/src/main/java/com/eofitg/hardcore/Hardcore.java @@ -3,6 +3,7 @@ import com.eofitg.hardcore.cmdoperation.CommandRegister; import com.eofitg.hardcore.cmdoperation.TabCompleterRegister; import com.eofitg.hardcore.configuration.MainConfig; +import com.eofitg.hardcore.configuration.UserDataConfig; import com.eofitg.hardcore.listener.PlayerListener; import com.eofitg.hardcore.listener.PointListener; import com.eofitg.hardcore.util.Leaderboard; @@ -17,6 +18,7 @@ import java.util.Map; public final class Hardcore extends JavaPlugin { + private static Hardcore instance; private static String pluginName; public static Hardcore getInstance() { @@ -37,7 +39,7 @@ public void onEnable() { // Plugin startup logic instance = this; pluginName = instance.getName(); - MainConfig.saveDefault(); + saveDefaultConfig(); // Register Listeners Bukkit.getPluginManager().registerEvents(new PlayerListener(), this); Bukkit.getPluginManager().registerEvents(new PointListener(), this); @@ -50,19 +52,22 @@ public void onEnable() { for (Player player : Bukkit.getOnlinePlayers()) { String playerName = player.getName(); List playerNames = MainConfig.getPlayerNames(); + UserDataConfig userDataConfig; + userDataConfig = new UserDataConfig(player); if (!playerNames.contains(playerName)) { // new player playerNames.add(playerName); MainConfig.setPlayerNames(playerNames); - MainConfig.setPlayerState(playerName, true); MainConfig.save(); - playerGameModeMap.put(player, player.getGameMode()); + // + userDataConfig.init(); + userDataConfig.save(); + // player.setGameMode(GameMode.SURVIVAL); player.sendTitle(ChatColor.BLUE + "WELCOME, NEW PLAYER!", ChatColor.GRAY + "You only have one life and do your best to survive!", 10, 150, 10); } else { // existing player - boolean playerState = MainConfig.getPlayerState(playerName); - playerGameModeMap.put(player, player.getGameMode()); + boolean playerState = userDataConfig.getState(); if (!playerState) { // player is dead player.setGameMode(GameMode.SPECTATOR); @@ -85,8 +90,6 @@ public void onEnable() { @Override public void onDisable() { // Plugin shutdown logic - instance = null; - pluginName = null; if (!MainConfig.getState()) { return; } @@ -95,13 +98,14 @@ public void onDisable() { for (Player player : Bukkit.getOnlinePlayers()) { String playerName = player.getName(); List playerNames = MainConfig.getPlayerNames(); - if (playerNames.contains(playerName) && playerGameModeMap.containsKey(player)) { - player.setGameMode(playerGameModeMap.get(player)); + if (playerNames.contains(playerName) && new UserDataConfig(player).exists()) { + player.setGameMode(GameMode.valueOf(new UserDataConfig(player).getGameMode())); } - // Delete the leaderboard leaderboards.get(player).turnOff(); } leaderboards.clear(); + instance = null; + pluginName = null; } } diff --git a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java index 3cb77e4..6ac053a 100644 --- a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java +++ b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java @@ -1,12 +1,14 @@ package com.eofitg.hardcore.cmdoperation; import com.eofitg.hardcore.configuration.MainConfig; +import com.eofitg.hardcore.configuration.UserDataConfig; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; public class CommandHandler implements CommandExecutor { + @Override public boolean onCommand(CommandSender sender, Command command, String label, String args[]) { if (CommandChecker.conform(label, "hardcore")) { @@ -40,8 +42,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St break; } case "reset" : { - MainConfig.reset(); - MainConfig.save(); + UserDataConfig.reset_all(); sender.sendMessage(ChatColor.BLUE + "Player state has reset."); break; } @@ -50,4 +51,5 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } return false; } + } diff --git a/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java b/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java index 6aa676a..07352a0 100644 --- a/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java +++ b/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java @@ -6,6 +6,7 @@ import java.util.List; public class MainConfig { + private static FileConfiguration config = Hardcore.getInstance().getConfig(); private static List playerNames = config.getStringList("playerNames"); private static List cmdNames = config.getStringList("commandNames"); @@ -14,9 +15,6 @@ public class MainConfig { public static List getPlayerNames() { return playerNames; } - public static boolean getPlayerState(String name) { - return config.getBoolean("alive." + name); - } public static List getCmdNames() { return cmdNames; } @@ -26,9 +24,6 @@ public static List getCmdList(String cmd) { public static boolean getState() { return state; } - public static double getPoint(String name) { - return config.getDouble("point." + name); - } public static void set(String key, Object value) { config.set(key, value); @@ -63,4 +58,5 @@ public static void save() { public static void saveDefault() { Hardcore.getInstance().saveDefaultConfig(); } + } diff --git a/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java b/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java new file mode 100644 index 0000000..c43829a --- /dev/null +++ b/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java @@ -0,0 +1,106 @@ +package com.eofitg.hardcore.configuration; + +import com.eofitg.hardcore.Hardcore; +import org.bukkit.Bukkit; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +public class UserDataConfig { + + private final File configFile; + private final FileConfiguration config; + private final Player player; + private final boolean exists; + private static final List playerNames = MainConfig.getPlayerNames(); + + public UserDataConfig(Player player) { + this.configFile = new File(Hardcore.getInstance().getDataFolder() + "\\userdata", player.getName() + ".yml"); + this.config = new YamlConfiguration(); + this.player = player; + this.exists = configFile.exists(); + if(!exists) { + this.configFile.getParentFile().mkdirs(); + try { + this.configFile.createNewFile(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + try { + this.config.load(configFile); + } catch (IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + } + + public void init() { + setName(player.getName()); + setState(true); + setPoint(0); + setGameMode(player.getGameMode().toString()); + } + public boolean exists() { + return exists; + } + + public boolean getState() { + return config.getBoolean("alive"); + } + public double getPoint() { + return config.getDouble("point"); + } + public String getGameMode() { + return config.getString("gamemode"); + } + public void set(String key, Object value) { + config.set(key, value); + } + public void setName(String name) { + set("name", name); + } + public void setState(boolean state) { + set("alive", state); + } + public void setPoint(double point) { + set("point", point); + } + public void setGameMode(String gamemode) { + set("gamemode", gamemode); + } + + public void reset() { + if (playerNames.contains(player.getName())) { + setState(true); + setPoint(0); + } + } + public static void reset(String name) { + if (playerNames.contains(name)) { + UserDataConfig userDataConfig = new UserDataConfig(Bukkit.getOfflinePlayer(name).getPlayer()); + if (userDataConfig.exists()) { + userDataConfig.setState(true); + userDataConfig.setPoint(0); + userDataConfig.save(); + } + } + } + public static void reset_all() { + for (String s : playerNames) { + reset(s); + } + } + public void save(){ + try { + config.save(configFile); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/src/main/java/com/eofitg/hardcore/listener/AbstractListener.java b/src/main/java/com/eofitg/hardcore/listener/AbstractListener.java index 2ac126b..ce0d26f 100644 --- a/src/main/java/com/eofitg/hardcore/listener/AbstractListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/AbstractListener.java @@ -5,7 +5,7 @@ public class AbstractListener { protected static boolean state = MainConfig.getState(); - protected void reload() { + protected static void reload() { state = MainConfig.getState(); } diff --git a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java index 570b3bb..889d013 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java @@ -2,6 +2,7 @@ import com.eofitg.hardcore.Hardcore; import com.eofitg.hardcore.configuration.MainConfig; +import com.eofitg.hardcore.configuration.UserDataConfig; import com.eofitg.hardcore.util.Leaderboard; import org.bukkit.ChatColor; import org.bukkit.GameMode; @@ -19,34 +20,37 @@ import static com.eofitg.hardcore.Hardcore.leaderboards; public class PlayerListener extends AbstractListener implements Listener { + @EventHandler public void onJoin(PlayerJoinEvent e) { Player player = e.getPlayer(); String playerName = e.getPlayer().getName(); List playerNames = MainConfig.getPlayerNames(); if (!state) { - if (playerNames.contains(playerName) && Hardcore.playerGameModeMap.containsKey(player)) { - player.setGameMode(Hardcore.playerGameModeMap.get(player)); + if (playerNames.contains(playerName) && new UserDataConfig(player).exists()) { + player.setGameMode(GameMode.valueOf(new UserDataConfig(player).getGameMode())); } return; } if (!playerNames.contains(playerName)) { // Request memory space for the new player playerNames.add(playerName); + // MainConfig.setPlayerNames(playerNames); - MainConfig.setPlayerState(playerName, true); - MainConfig.setPoint(playerName, 0); - Hardcore.playerGameModeMap.put(player, player.getGameMode()); MainConfig.save(); + // + UserDataConfig userDataConfig = new UserDataConfig(player); + userDataConfig.init(); + userDataConfig.save(); + player.setGameMode(GameMode.SURVIVAL); player.sendTitle(ChatColor.BLUE + "WELCOME, NEW PLAYER!", ChatColor.GRAY + "You only have one life and do your best to survive!", 10, 150, 10); } else { - boolean playerState = MainConfig.getPlayerState(playerName); + boolean playerState = new UserDataConfig(player).getState(); if (!playerState) { player.setGameMode(GameMode.SPECTATOR); player.sendTitle(ChatColor.RED + "YOU ARE DIED!", ChatColor.GRAY + "Please wait for the reset!", 10, 150, 10); } else { - Hardcore.playerGameModeMap.put(player, player.getGameMode()); player.setGameMode(GameMode.SURVIVAL); player.sendTitle(ChatColor.GREEN + "YOU ARE ALIVE!", ChatColor.GRAY + "Survive and earn more points!", 10, 150, 10); } @@ -61,6 +65,7 @@ public void onJoin(PlayerJoinEvent e) { leaderboard.startShowing(); } } + @EventHandler public void onQuit(PlayerQuitEvent e) { Player player = e.getPlayer(); @@ -69,15 +74,16 @@ public void onQuit(PlayerQuitEvent e) { leaderboards.remove(player); } } + @EventHandler public void onDeath(PlayerDeathEvent e) { if (!state) { return; } // Write config - String playerName = e.getEntity().getPlayer().getName(); - MainConfig.setPlayerState(playerName, false); - MainConfig.save(); + UserDataConfig userDataConfig = new UserDataConfig(e.getEntity()); + userDataConfig.setState(false); + userDataConfig.save(); // Send player's location when dead Location location = e.getEntity().getLocation(); @@ -88,14 +94,14 @@ public void onDeath(PlayerDeathEvent e) { String location_ = ChatColor.GRAY + "[" + ChatColor.AQUA + x + y + z + ChatColor.GRAY + "] "; e.setDeathMessage(e.getDeathMessage() + " @" + location_ + ChatColor.WHITE + "in " + ChatColor.GREEN + world + ChatColor.RED + " RIP D: "); } + @EventHandler public void onRespawn(PlayerRespawnEvent e) { if (!state) { return; } Player player = e.getPlayer(); - String playerName = e.getPlayer().getName(); - boolean playerState = MainConfig.getPlayerState(playerName); + boolean playerState = new UserDataConfig(player).getState(); if (!playerState) { player.setGameMode(GameMode.SPECTATOR); player.sendTitle(ChatColor.RED + "YOU HAVE DIED IN THIS SEASON!", ChatColor.GRAY + "Please wait for the reset!", 10, 150, 10); @@ -104,4 +110,5 @@ public void onRespawn(PlayerRespawnEvent e) { player.sendTitle(ChatColor.GREEN + "YOU ARE ALIVE!", ChatColor.GRAY + "Survive and earn more points!", 10, 150, 10); } } + } diff --git a/src/main/java/com/eofitg/hardcore/listener/PointListener.java b/src/main/java/com/eofitg/hardcore/listener/PointListener.java index aed5c72..9104c2e 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PointListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PointListener.java @@ -1,6 +1,6 @@ package com.eofitg.hardcore.listener; -import com.eofitg.hardcore.configuration.MainConfig; +import com.eofitg.hardcore.configuration.UserDataConfig; import com.eofitg.hardcore.util.MathUtil; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; @@ -11,22 +11,25 @@ import org.bukkit.event.entity.EntityDamageEvent; public class PointListener extends AbstractListener implements Listener { + @EventHandler public void getDamage(EntityDamageEvent e) { if(!state) { return; } if (e.getEntity() instanceof Player) { - String name = e.getEntity().getName(); - if(!MainConfig.getPlayerState(name)) return; + UserDataConfig userDataConfig = new UserDataConfig(((Player) e.getEntity()).getPlayer()); + if(!userDataConfig.getState()) return; double heart = Math.round(((LivingEntity) e.getEntity()).getHealth() * 2) / 20.0; double damage = Math.min(heart, Math.round(e.getFinalDamage() * 2) / 20.0); - double point = MathUtil.round_half_up(MainConfig.getPoint(name) - damage, 2); - MainConfig.setPoint(name, point); - MainConfig.save(); + double point = MathUtil.round_half_up(userDataConfig.getPoint() - damage, 2); + userDataConfig.setPoint(point); + userDataConfig.save(); + } } + @EventHandler public void causeDamage(EntityDamageByEntityEvent e) { if(!state) { @@ -35,14 +38,15 @@ public void causeDamage(EntityDamageByEntityEvent e) { if (e.getDamager() instanceof Player) { if (e.getEntity() instanceof LivingEntity) { if (e.getEntityType() == EntityType.ARMOR_STAND) return; - String name = e.getDamager().getName(); - if(!MainConfig.getPlayerState(name)) return; + + UserDataConfig userDataConfig = new UserDataConfig(((Player) e.getDamager()).getPlayer()); + if(!userDataConfig.getState()) return; double heart = Math.round(((LivingEntity) e.getEntity()).getHealth() * 2) / 20.0; double damage = Math.min(heart, Math.round(e.getFinalDamage() * 2) / 20.0); - double point = MathUtil.round_half_up(MainConfig.getPoint(name) + damage, 2); - MainConfig.setPoint(name, point); - MainConfig.save(); + double point = MathUtil.round_half_up(userDataConfig.getPoint() + damage, 2); + userDataConfig.setPoint(point); + userDataConfig.save(); } } } diff --git a/src/main/java/com/eofitg/hardcore/util/Leaderboard.java b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java index fce0fe4..279fb26 100644 --- a/src/main/java/com/eofitg/hardcore/util/Leaderboard.java +++ b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java @@ -1,6 +1,7 @@ package com.eofitg.hardcore.util; import com.eofitg.hardcore.configuration.MainConfig; +import com.eofitg.hardcore.configuration.UserDataConfig; import com.google.common.collect.Lists; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -16,31 +17,32 @@ import java.util.*; public class Leaderboard { - private Plugin plugin; - private Scoreboard scoreboard; - private Objective objective; - private Player player; + + private final Plugin plugin; private String title; + private final Scoreboard scoreboard; + private final Objective objective; + private final Player player; private boolean isRun; - private SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - private SimpleDateFormat format2 = new SimpleDateFormat("HH:mm:ss"); - private List text; // All text in the leaderboard + private final SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); + private final SimpleDateFormat format2 = new SimpleDateFormat("HH:mm:ss"); + private final List text; // All text in the leaderboard private BukkitTask task; public Leaderboard(Plugin plugin, Player player, String title) { - this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); + this.plugin = plugin; this.title = title; + this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); this.objective = scoreboard.registerNewObjective("LEADERBOARD", "dummy", ChatColor.DARK_BLUE + this.title); objective.setDisplaySlot(DisplaySlot.SIDEBAR); this.player = player; this.isRun = false; - this.plugin = plugin; text = Lists.newArrayList(); } public void startShowing() { - // 判断是否已经在运行 + // Check out if this leaderboard is running if (isRun) { return; } @@ -73,20 +75,23 @@ public void startShowing() { List playerNames = MainConfig.getPlayerNames(); for (int i = 0; i < playerNames.size() && i < N; i++) { String name = playerNames.get(i); - playerState.put(name, MainConfig.getPlayerState(name)); - playerPoint.put(name, MainConfig.getPoint(name)); + UserDataConfig userDataConfig = new UserDataConfig(Bukkit.getOfflinePlayer(name).getPlayer()); + playerState.put(name, userDataConfig.getState()); + playerPoint.put(name, userDataConfig.getPoint()); } // sort playerPoint by point List> pointRanking = new LinkedList<>(playerPoint.entrySet()); // Collections.sort(pointRanking, Map.Entry.comparingByValue()); Collections.sort(pointRanking, (o1, o2) -> o2.getValue().compareTo(o1.getValue())); + boolean s = MainConfig.getState(); + for (int i = 0, j = 0; i < text.size(); i++) { - Team row = text.get(i); // 获取每个Team - if (i == 0) { // Date&Time HUD + Team row = text.get(i); // Get every Team + if (i == 0) { // Date & Time HUD Date date = new Date(); row.setPrefix(ChatColor.GRAY + format.format(date)); - row.setSuffix(ChatColor.GRAY + " " + format2.format(date)); + row.setSuffix(ChatColor.GRAY + " " + format2.format(date) + s); continue; } if (j < pointRanking.size()) { @@ -116,4 +121,5 @@ public void turnOff() { task.cancel(); player.setScoreboard(Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard()); } + } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 17724af..72b87c7 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,4 +1,4 @@ commandNames: [ hardcore ] commands: hardcore: [ hardcore, hardcoremode ] -enable: false \ No newline at end of file +enable: true \ No newline at end of file From 1c303a1e78a33c596912a1f9b27fcdd1439a56f1 Mon Sep 17 00:00:00 2001 From: eofitg Date: Thu, 15 Jun 2023 15:50:26 +0800 Subject: [PATCH 08/15] CLEAN UP --- src/main/java/com/eofitg/hardcore/Hardcore.java | 3 +-- .../eofitg/hardcore/configuration/MainConfig.java | 14 ++++---------- .../eofitg/hardcore/listener/PlayerListener.java | 10 ++++++---- .../eofitg/hardcore/listener/PointListener.java | 5 +++-- .../java/com/eofitg/hardcore/util/Leaderboard.java | 7 +++++-- 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/eofitg/hardcore/Hardcore.java b/src/main/java/com/eofitg/hardcore/Hardcore.java index 0963473..4be2d00 100644 --- a/src/main/java/com/eofitg/hardcore/Hardcore.java +++ b/src/main/java/com/eofitg/hardcore/Hardcore.java @@ -28,8 +28,6 @@ public static String getPluginName() { return pluginName; } - // Store players' game-mode before the plugin turns on - public static Map playerGameModeMap = new HashMap<>(); // Store players' leaderboards displayed on their interfaces public static Map leaderboards = new HashMap<>(); @@ -108,4 +106,5 @@ public void onDisable() { instance = null; pluginName = null; } + } diff --git a/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java b/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java index 07352a0..c25d698 100644 --- a/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java +++ b/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java @@ -7,10 +7,10 @@ public class MainConfig { - private static FileConfiguration config = Hardcore.getInstance().getConfig(); - private static List playerNames = config.getStringList("playerNames"); - private static List cmdNames = config.getStringList("commandNames"); - private static boolean state = config.getBoolean("enable"); + private static final FileConfiguration config = Hardcore.getInstance().getConfig(); + private static final List playerNames = config.getStringList("playerNames"); + private static final List cmdNames = config.getStringList("commandNames"); + private static final boolean state = config.getBoolean("enable"); public static List getPlayerNames() { return playerNames; @@ -31,15 +31,9 @@ public static void set(String key, Object value) { public static void setPlayerNames(List names) { set("playerNames", names); } - public static void setPlayerState(String name, boolean state) { - set("alive." + name, state); - } public static void setState(boolean state) { set("enable", state); } - public static void setPoint(String name, double point) { - set("point." + name, point); - } public static void reset(String name) { if (playerNames.contains(name)) { diff --git a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java index 889d013..e810553 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java @@ -32,20 +32,21 @@ public void onJoin(PlayerJoinEvent e) { } return; } + if (!playerNames.contains(playerName)) { - // Request memory space for the new player + // New player playerNames.add(playerName); - // MainConfig.setPlayerNames(playerNames); MainConfig.save(); - // + // Create user data config for the new player UserDataConfig userDataConfig = new UserDataConfig(player); userDataConfig.init(); userDataConfig.save(); - + // Change his/her game-mode and start player.setGameMode(GameMode.SURVIVAL); player.sendTitle(ChatColor.BLUE + "WELCOME, NEW PLAYER!", ChatColor.GRAY + "You only have one life and do your best to survive!", 10, 150, 10); } else { + // Existing player boolean playerState = new UserDataConfig(player).getState(); if (!playerState) { player.setGameMode(GameMode.SPECTATOR); @@ -64,6 +65,7 @@ public void onJoin(PlayerJoinEvent e) { leaderboards.put(player, leaderboard); leaderboard.startShowing(); } + } @EventHandler diff --git a/src/main/java/com/eofitg/hardcore/listener/PointListener.java b/src/main/java/com/eofitg/hardcore/listener/PointListener.java index 9104c2e..dc9f08a 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PointListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PointListener.java @@ -14,7 +14,7 @@ public class PointListener extends AbstractListener implements Listener { @EventHandler public void getDamage(EntityDamageEvent e) { - if(!state) { + if(!state) { // Plugin is off return; } if (e.getEntity() instanceof Player) { @@ -32,11 +32,12 @@ public void getDamage(EntityDamageEvent e) { @EventHandler public void causeDamage(EntityDamageByEntityEvent e) { - if(!state) { + if(!state) { // Plugin is off return; } if (e.getDamager() instanceof Player) { if (e.getEntity() instanceof LivingEntity) { + // Why Mojang made ARMOR_STAND a damageable entity??? if (e.getEntityType() == EntityType.ARMOR_STAND) return; UserDataConfig userDataConfig = new UserDataConfig(((Player) e.getDamager()).getPlayer()); diff --git a/src/main/java/com/eofitg/hardcore/util/Leaderboard.java b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java index 279fb26..9123c94 100644 --- a/src/main/java/com/eofitg/hardcore/util/Leaderboard.java +++ b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java @@ -46,6 +46,7 @@ public void startShowing() { if (isRun) { return; } + // Make sure this player's scoreboard is valid if (player == null || !player.isOnline()) { return; } @@ -88,13 +89,15 @@ public void startShowing() { for (int i = 0, j = 0; i < text.size(); i++) { Team row = text.get(i); // Get every Team - if (i == 0) { // Date & Time HUD + if (i == 0) { + // Date & Time HUD Date date = new Date(); row.setPrefix(ChatColor.GRAY + format.format(date)); row.setSuffix(ChatColor.GRAY + " " + format2.format(date) + s); continue; } if (j < pointRanking.size()) { + // Fill in the players' data on the leaderboard String name = pointRanking.get(j).getKey(); double points = pointRanking.get(j).getValue(); String suffix = ChatColor.GOLD + name + ChatColor.WHITE + " - " + ChatColor.GOLD + points; @@ -108,7 +111,7 @@ public void startShowing() { j++; continue; } - // i < text.size() && j < pointRanking.size() -> pointRanking.size() < i < text.size() + // i < text.size() && j < pointRanking.size() -> pointRanking.size() < i < text.size() , mean last rows have no last players to fill row.setPrefix(ChatColor.GREEN + "#" + i + ": "); row.setSuffix(ChatColor.DARK_GRAY + "****" + ChatColor.WHITE + " - " + ChatColor.DARK_GRAY + "****"); } From db11f8adf3fb3934011c861cfcfe8dfdfb4c52d7 Mon Sep 17 00:00:00 2001 From: eofitg Date: Thu, 15 Jun 2023 15:55:41 +0800 Subject: [PATCH 09/15] CLEAN UP --- src/main/java/com/eofitg/hardcore/util/Leaderboard.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/eofitg/hardcore/util/Leaderboard.java b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java index 9123c94..b0ca441 100644 --- a/src/main/java/com/eofitg/hardcore/util/Leaderboard.java +++ b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java @@ -85,15 +85,13 @@ public void startShowing() { // Collections.sort(pointRanking, Map.Entry.comparingByValue()); Collections.sort(pointRanking, (o1, o2) -> o2.getValue().compareTo(o1.getValue())); - boolean s = MainConfig.getState(); - for (int i = 0, j = 0; i < text.size(); i++) { Team row = text.get(i); // Get every Team if (i == 0) { // Date & Time HUD Date date = new Date(); row.setPrefix(ChatColor.GRAY + format.format(date)); - row.setSuffix(ChatColor.GRAY + " " + format2.format(date) + s); + row.setSuffix(ChatColor.GRAY + " " + format2.format(date)); continue; } if (j < pointRanking.size()) { From 2603c82d9a3b3677ca8bb432cbfdf95b83d0bcba Mon Sep 17 00:00:00 2001 From: eofitg Date: Thu, 15 Jun 2023 17:38:27 +0800 Subject: [PATCH 10/15] CLEAN UP --- src/main/java/com/eofitg/hardcore/Hardcore.java | 2 +- .../com/eofitg/hardcore/configuration/MainConfig.java | 11 ----------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/src/main/java/com/eofitg/hardcore/Hardcore.java b/src/main/java/com/eofitg/hardcore/Hardcore.java index 4be2d00..a6cb147 100644 --- a/src/main/java/com/eofitg/hardcore/Hardcore.java +++ b/src/main/java/com/eofitg/hardcore/Hardcore.java @@ -37,7 +37,7 @@ public void onEnable() { // Plugin startup logic instance = this; pluginName = instance.getName(); - saveDefaultConfig(); + MainConfig.saveDefault(); // Register Listeners Bukkit.getPluginManager().registerEvents(new PlayerListener(), this); Bukkit.getPluginManager().registerEvents(new PointListener(), this); diff --git a/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java b/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java index c25d698..628f58b 100644 --- a/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java +++ b/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java @@ -35,17 +35,6 @@ public static void setState(boolean state) { set("enable", state); } - public static void reset(String name) { - if (playerNames.contains(name)) { - set("alive." + name, true); - set("point." + name, 0); - } - } - public static void reset() { - for (String s : playerNames) { - reset(s); - } - } public static void save() { Hardcore.getInstance().saveConfig(); } From 9df925de82c472e2f9b5d755f940dd54f7443ae5 Mon Sep 17 00:00:00 2001 From: eofitg Date: Thu, 15 Jun 2023 18:25:18 +0800 Subject: [PATCH 11/15] Bug Fix: Can't get offline players' data to set on the leaderboard --- src/main/java/com/eofitg/hardcore/Hardcore.java | 6 +++--- .../hardcore/configuration/UserDataConfig.java | 6 +++--- .../com/eofitg/hardcore/listener/PlayerListener.java | 12 ++++++------ .../com/eofitg/hardcore/listener/PointListener.java | 4 ++-- .../java/com/eofitg/hardcore/util/Leaderboard.java | 2 +- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/eofitg/hardcore/Hardcore.java b/src/main/java/com/eofitg/hardcore/Hardcore.java index a6cb147..61081d9 100644 --- a/src/main/java/com/eofitg/hardcore/Hardcore.java +++ b/src/main/java/com/eofitg/hardcore/Hardcore.java @@ -51,7 +51,7 @@ public void onEnable() { String playerName = player.getName(); List playerNames = MainConfig.getPlayerNames(); UserDataConfig userDataConfig; - userDataConfig = new UserDataConfig(player); + userDataConfig = new UserDataConfig(player, playerName); if (!playerNames.contains(playerName)) { // new player playerNames.add(playerName); @@ -96,8 +96,8 @@ public void onDisable() { for (Player player : Bukkit.getOnlinePlayers()) { String playerName = player.getName(); List playerNames = MainConfig.getPlayerNames(); - if (playerNames.contains(playerName) && new UserDataConfig(player).exists()) { - player.setGameMode(GameMode.valueOf(new UserDataConfig(player).getGameMode())); + if (playerNames.contains(playerName) && new UserDataConfig(player, playerName).exists()) { + player.setGameMode(GameMode.valueOf(new UserDataConfig(player, playerName).getGameMode())); } // Delete the leaderboard leaderboards.get(player).turnOff(); diff --git a/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java b/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java index c43829a..a3b541b 100644 --- a/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java +++ b/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java @@ -19,8 +19,8 @@ public class UserDataConfig { private final boolean exists; private static final List playerNames = MainConfig.getPlayerNames(); - public UserDataConfig(Player player) { - this.configFile = new File(Hardcore.getInstance().getDataFolder() + "\\userdata", player.getName() + ".yml"); + public UserDataConfig(Player player, String name) { + this.configFile = new File(Hardcore.getInstance().getDataFolder() + "\\userdata", name + ".yml"); this.config = new YamlConfiguration(); this.player = player; this.exists = configFile.exists(); @@ -82,7 +82,7 @@ public void reset() { } public static void reset(String name) { if (playerNames.contains(name)) { - UserDataConfig userDataConfig = new UserDataConfig(Bukkit.getOfflinePlayer(name).getPlayer()); + UserDataConfig userDataConfig = new UserDataConfig(Bukkit.getOfflinePlayer(name).getPlayer(), name); if (userDataConfig.exists()) { userDataConfig.setState(true); userDataConfig.setPoint(0); diff --git a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java index e810553..508489b 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java @@ -27,8 +27,8 @@ public void onJoin(PlayerJoinEvent e) { String playerName = e.getPlayer().getName(); List playerNames = MainConfig.getPlayerNames(); if (!state) { - if (playerNames.contains(playerName) && new UserDataConfig(player).exists()) { - player.setGameMode(GameMode.valueOf(new UserDataConfig(player).getGameMode())); + if (playerNames.contains(playerName) && new UserDataConfig(player, playerName).exists()) { + player.setGameMode(GameMode.valueOf(new UserDataConfig(player, playerName).getGameMode())); } return; } @@ -39,7 +39,7 @@ public void onJoin(PlayerJoinEvent e) { MainConfig.setPlayerNames(playerNames); MainConfig.save(); // Create user data config for the new player - UserDataConfig userDataConfig = new UserDataConfig(player); + UserDataConfig userDataConfig = new UserDataConfig(player, playerName); userDataConfig.init(); userDataConfig.save(); // Change his/her game-mode and start @@ -47,7 +47,7 @@ public void onJoin(PlayerJoinEvent e) { player.sendTitle(ChatColor.BLUE + "WELCOME, NEW PLAYER!", ChatColor.GRAY + "You only have one life and do your best to survive!", 10, 150, 10); } else { // Existing player - boolean playerState = new UserDataConfig(player).getState(); + boolean playerState = new UserDataConfig(player, playerName).getState(); if (!playerState) { player.setGameMode(GameMode.SPECTATOR); player.sendTitle(ChatColor.RED + "YOU ARE DIED!", ChatColor.GRAY + "Please wait for the reset!", 10, 150, 10); @@ -83,7 +83,7 @@ public void onDeath(PlayerDeathEvent e) { return; } // Write config - UserDataConfig userDataConfig = new UserDataConfig(e.getEntity()); + UserDataConfig userDataConfig = new UserDataConfig(e.getEntity(), e.getEntity().getName()); userDataConfig.setState(false); userDataConfig.save(); @@ -103,7 +103,7 @@ public void onRespawn(PlayerRespawnEvent e) { return; } Player player = e.getPlayer(); - boolean playerState = new UserDataConfig(player).getState(); + boolean playerState = new UserDataConfig(player, player.getName()).getState(); if (!playerState) { player.setGameMode(GameMode.SPECTATOR); player.sendTitle(ChatColor.RED + "YOU HAVE DIED IN THIS SEASON!", ChatColor.GRAY + "Please wait for the reset!", 10, 150, 10); diff --git a/src/main/java/com/eofitg/hardcore/listener/PointListener.java b/src/main/java/com/eofitg/hardcore/listener/PointListener.java index dc9f08a..732c0c9 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PointListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PointListener.java @@ -18,7 +18,7 @@ public void getDamage(EntityDamageEvent e) { return; } if (e.getEntity() instanceof Player) { - UserDataConfig userDataConfig = new UserDataConfig(((Player) e.getEntity()).getPlayer()); + UserDataConfig userDataConfig = new UserDataConfig(((Player) e.getEntity()).getPlayer(), e.getEntity().getName()); if(!userDataConfig.getState()) return; double heart = Math.round(((LivingEntity) e.getEntity()).getHealth() * 2) / 20.0; @@ -40,7 +40,7 @@ public void causeDamage(EntityDamageByEntityEvent e) { // Why Mojang made ARMOR_STAND a damageable entity??? if (e.getEntityType() == EntityType.ARMOR_STAND) return; - UserDataConfig userDataConfig = new UserDataConfig(((Player) e.getDamager()).getPlayer()); + UserDataConfig userDataConfig = new UserDataConfig(((Player) e.getDamager()).getPlayer(), e.getDamager().getName()); if(!userDataConfig.getState()) return; double heart = Math.round(((LivingEntity) e.getEntity()).getHealth() * 2) / 20.0; diff --git a/src/main/java/com/eofitg/hardcore/util/Leaderboard.java b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java index b0ca441..568076c 100644 --- a/src/main/java/com/eofitg/hardcore/util/Leaderboard.java +++ b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java @@ -76,7 +76,7 @@ public void startShowing() { List playerNames = MainConfig.getPlayerNames(); for (int i = 0; i < playerNames.size() && i < N; i++) { String name = playerNames.get(i); - UserDataConfig userDataConfig = new UserDataConfig(Bukkit.getOfflinePlayer(name).getPlayer()); + UserDataConfig userDataConfig = new UserDataConfig(Bukkit.getOfflinePlayer(name).getPlayer(), name); playerState.put(name, userDataConfig.getState()); playerPoint.put(name, userDataConfig.getPoint()); } From 6feaad1dbe7e708220ef3071a970c5ba156ac44c Mon Sep 17 00:00:00 2001 From: eofitg Date: Thu, 15 Jun 2023 20:18:29 +0800 Subject: [PATCH 12/15] Bug Fix: Use uuid instead of name to check player data now --- .../java/com/eofitg/hardcore/Hardcore.java | 51 ++++++++++++++----- .../hardcore/configuration/MainConfig.java | 17 +++++-- .../configuration/UserDataConfig.java | 31 +++++++---- .../hardcore/listener/PlayerListener.java | 48 +++++++++++++---- .../hardcore/listener/PointListener.java | 4 +- .../com/eofitg/hardcore/util/Leaderboard.java | 9 ++-- 6 files changed, 114 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/eofitg/hardcore/Hardcore.java b/src/main/java/com/eofitg/hardcore/Hardcore.java index 61081d9..16c6d26 100644 --- a/src/main/java/com/eofitg/hardcore/Hardcore.java +++ b/src/main/java/com/eofitg/hardcore/Hardcore.java @@ -13,9 +13,7 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public final class Hardcore extends JavaPlugin { @@ -48,14 +46,20 @@ public void onEnable() { // Add all online players to the player list then toggle their game-mode if (MainConfig.getState()) { for (Player player : Bukkit.getOnlinePlayers()) { - String playerName = player.getName(); - List playerNames = MainConfig.getPlayerNames(); + // playerId = playerUuid + '/' + playerName + List playerIdList = MainConfig.getPlayerIdList(); + List uuidList = MainConfig.getUuidList(); + String uuid = player.getUniqueId().toString(); + String playerId = uuid + "/" + player.getName(); + // Create config file for this player UserDataConfig userDataConfig; - userDataConfig = new UserDataConfig(player, playerName); - if (!playerNames.contains(playerName)) { + userDataConfig = new UserDataConfig(player, player.getUniqueId().toString(), player.getName()); + if (!uuidList.contains(uuid)) { // new player - playerNames.add(playerName); - MainConfig.setPlayerNames(playerNames); + playerIdList.add(playerId); + uuidList.add(uuid); + MainConfig.setPlayerIdList(playerIdList); + MainConfig.setUuidList(uuidList); MainConfig.save(); // userDataConfig.init(); @@ -65,6 +69,15 @@ public void onEnable() { player.sendTitle(ChatColor.BLUE + "WELCOME, NEW PLAYER!", ChatColor.GRAY + "You only have one life and do your best to survive!", 10, 150, 10); } else { // existing player + if(!playerIdList.contains(playerId)) { + // Player name changed + for(int i = 0; i < playerIdList.size(); i ++) { + if(playerIdList.get(i).contains(uuid)) { + // Update player id (uuid + '/' + name) + playerIdList.set(i, playerId); + } + } + } boolean playerState = userDataConfig.getState(); if (!playerState) { // player is dead @@ -94,10 +107,22 @@ public void onDisable() { // Restore players' game-mode to their original state for (Player player : Bukkit.getOnlinePlayers()) { - String playerName = player.getName(); - List playerNames = MainConfig.getPlayerNames(); - if (playerNames.contains(playerName) && new UserDataConfig(player, playerName).exists()) { - player.setGameMode(GameMode.valueOf(new UserDataConfig(player, playerName).getGameMode())); + List playerIdList = MainConfig.getPlayerIdList(); + List uuidList = MainConfig.getUuidList(); + String uuid = player.getUniqueId().toString(); + String name = player.getName(); + String playerId = uuid + "/" + name; + if (uuidList.contains(uuid) && new UserDataConfig(player, uuid, name).exists()) { + player.setGameMode(GameMode.valueOf(new UserDataConfig(player, uuid, name).getGameMode())); + if (!playerIdList.contains(playerId)) { + // Player name changed + for (int i = 0; i < playerIdList.size(); i++) { + if (playerIdList.get(i).contains(uuid)) { + // Update player id (uuid + '/' + name) + playerIdList.set(i, playerId); + } + } + } } // Delete the leaderboard leaderboards.get(player).turnOff(); diff --git a/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java b/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java index 628f58b..cdc3d46 100644 --- a/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java +++ b/src/main/java/com/eofitg/hardcore/configuration/MainConfig.java @@ -8,12 +8,16 @@ public class MainConfig { private static final FileConfiguration config = Hardcore.getInstance().getConfig(); - private static final List playerNames = config.getStringList("playerNames"); + private static final List playerIdList = config.getStringList("playerIdList"); + private static final List uuidList = config.getStringList("uuidList"); private static final List cmdNames = config.getStringList("commandNames"); private static final boolean state = config.getBoolean("enable"); - public static List getPlayerNames() { - return playerNames; + public static List getPlayerIdList() { + return playerIdList; + } + public static List getUuidList() { + return uuidList; } public static List getCmdNames() { return cmdNames; @@ -28,8 +32,11 @@ public static boolean getState() { public static void set(String key, Object value) { config.set(key, value); } - public static void setPlayerNames(List names) { - set("playerNames", names); + public static void setPlayerIdList(List playerIdList) { + set("playerIdList", playerIdList); + } + public static void setUuidList(List uuidList) { + set("uuidList", uuidList); } public static void setState(boolean state) { set("enable", state); diff --git a/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java b/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java index a3b541b..229980d 100644 --- a/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java +++ b/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java @@ -10,19 +10,26 @@ import java.io.File; import java.io.IOException; import java.util.List; +import java.util.UUID; public class UserDataConfig { private final File configFile; private final FileConfiguration config; private final Player player; + private final String uuid; + private final String name; + private final String playerId; private final boolean exists; - private static final List playerNames = MainConfig.getPlayerNames(); + private static final List playerIdList = MainConfig.getPlayerIdList(); - public UserDataConfig(Player player, String name) { - this.configFile = new File(Hardcore.getInstance().getDataFolder() + "\\userdata", name + ".yml"); + public UserDataConfig(Player player, String uuid, String name) { + this.configFile = new File(Hardcore.getInstance().getDataFolder() + "\\userdata", uuid + ".yml"); this.config = new YamlConfiguration(); this.player = player; + this.uuid = uuid; + this.name = name; + this.playerId = uuid + "/" + name; this.exists = configFile.exists(); if(!exists) { this.configFile.getParentFile().mkdirs(); @@ -40,7 +47,7 @@ public UserDataConfig(Player player, String name) { } public void init() { - setName(player.getName()); + setName(name); setState(true); setPoint(0); setGameMode(player.getGameMode().toString()); @@ -56,7 +63,7 @@ public double getPoint() { return config.getDouble("point"); } public String getGameMode() { - return config.getString("gamemode"); + return config.getString("game-mode"); } public void set(String key, Object value) { config.set(key, value); @@ -71,18 +78,20 @@ public void setPoint(double point) { set("point", point); } public void setGameMode(String gamemode) { - set("gamemode", gamemode); + set("game-mode", gamemode); } public void reset() { - if (playerNames.contains(player.getName())) { + if (playerIdList.contains(playerId)) { setState(true); setPoint(0); } } - public static void reset(String name) { - if (playerNames.contains(name)) { - UserDataConfig userDataConfig = new UserDataConfig(Bukkit.getOfflinePlayer(name).getPlayer(), name); + public static void reset(String playerId) { + if (playerIdList.contains(playerId)) { + String uuid = playerId.split("/")[0]; + String name = playerId.split("/")[1]; + UserDataConfig userDataConfig = new UserDataConfig(Bukkit.getOfflinePlayer(uuid).getPlayer(), uuid, name); if (userDataConfig.exists()) { userDataConfig.setState(true); userDataConfig.setPoint(0); @@ -91,7 +100,7 @@ public static void reset(String name) { } } public static void reset_all() { - for (String s : playerNames) { + for (String s : playerIdList) { reset(s); } } diff --git a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java index 508489b..89fc2f6 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java @@ -24,22 +24,36 @@ public class PlayerListener extends AbstractListener implements Listener { @EventHandler public void onJoin(PlayerJoinEvent e) { Player player = e.getPlayer(); - String playerName = e.getPlayer().getName(); - List playerNames = MainConfig.getPlayerNames(); + List playerIdList = MainConfig.getPlayerIdList(); + List uuidList = MainConfig.getUuidList(); + String uuid = player.getUniqueId().toString(); + String name = player.getName(); + String playerId = uuid + "/" + name; if (!state) { - if (playerNames.contains(playerName) && new UserDataConfig(player, playerName).exists()) { - player.setGameMode(GameMode.valueOf(new UserDataConfig(player, playerName).getGameMode())); + if (uuidList.contains(uuid) && new UserDataConfig(player, uuid, name).exists()) { + player.setGameMode(GameMode.valueOf(new UserDataConfig(player, uuid, name).getGameMode())); + if(!playerIdList.contains(playerId)) { + // Player name changed + for(int i = 0; i < playerIdList.size(); i ++) { + if(playerIdList.get(i).contains(uuid)) { + // Update player id (uuid + '/' + name) + playerIdList.set(i, playerId); + } + } + } } return; } - if (!playerNames.contains(playerName)) { + if (!uuidList.contains(uuid)) { // New player - playerNames.add(playerName); - MainConfig.setPlayerNames(playerNames); + playerIdList.add(playerId); + uuidList.add(uuid); + MainConfig.setPlayerIdList(playerIdList); + MainConfig.setUuidList(uuidList); MainConfig.save(); // Create user data config for the new player - UserDataConfig userDataConfig = new UserDataConfig(player, playerName); + UserDataConfig userDataConfig = new UserDataConfig(player, uuid, name); userDataConfig.init(); userDataConfig.save(); // Change his/her game-mode and start @@ -47,11 +61,22 @@ public void onJoin(PlayerJoinEvent e) { player.sendTitle(ChatColor.BLUE + "WELCOME, NEW PLAYER!", ChatColor.GRAY + "You only have one life and do your best to survive!", 10, 150, 10); } else { // Existing player - boolean playerState = new UserDataConfig(player, playerName).getState(); + if(!playerIdList.contains(playerId)) { + // Player name changed + for(int i = 0; i < playerIdList.size(); i ++) { + if(playerIdList.get(i).contains(uuid)) { + // Update player id (uuid + '/' + name) + playerIdList.set(i, playerId); + } + } + } + boolean playerState = new UserDataConfig(player, uuid, name).getState(); if (!playerState) { + // player is dead player.setGameMode(GameMode.SPECTATOR); player.sendTitle(ChatColor.RED + "YOU ARE DIED!", ChatColor.GRAY + "Please wait for the reset!", 10, 150, 10); } else { + // player is alive player.setGameMode(GameMode.SURVIVAL); player.sendTitle(ChatColor.GREEN + "YOU ARE ALIVE!", ChatColor.GRAY + "Survive and earn more points!", 10, 150, 10); } @@ -82,8 +107,9 @@ public void onDeath(PlayerDeathEvent e) { if (!state) { return; } + // Write config - UserDataConfig userDataConfig = new UserDataConfig(e.getEntity(), e.getEntity().getName()); + UserDataConfig userDataConfig = new UserDataConfig(e.getEntity(), e.getEntity().getUniqueId().toString(), e.getEntity().getName()); userDataConfig.setState(false); userDataConfig.save(); @@ -103,7 +129,7 @@ public void onRespawn(PlayerRespawnEvent e) { return; } Player player = e.getPlayer(); - boolean playerState = new UserDataConfig(player, player.getName()).getState(); + boolean playerState = new UserDataConfig(player, player.getUniqueId().toString(), player.getName()).getState(); if (!playerState) { player.setGameMode(GameMode.SPECTATOR); player.sendTitle(ChatColor.RED + "YOU HAVE DIED IN THIS SEASON!", ChatColor.GRAY + "Please wait for the reset!", 10, 150, 10); diff --git a/src/main/java/com/eofitg/hardcore/listener/PointListener.java b/src/main/java/com/eofitg/hardcore/listener/PointListener.java index 732c0c9..81264ec 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PointListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PointListener.java @@ -18,7 +18,7 @@ public void getDamage(EntityDamageEvent e) { return; } if (e.getEntity() instanceof Player) { - UserDataConfig userDataConfig = new UserDataConfig(((Player) e.getEntity()).getPlayer(), e.getEntity().getName()); + UserDataConfig userDataConfig = new UserDataConfig(((Player) e.getEntity()).getPlayer(), e.getEntity().getUniqueId().toString(), e.getEntity().getName()); if(!userDataConfig.getState()) return; double heart = Math.round(((LivingEntity) e.getEntity()).getHealth() * 2) / 20.0; @@ -40,7 +40,7 @@ public void causeDamage(EntityDamageByEntityEvent e) { // Why Mojang made ARMOR_STAND a damageable entity??? if (e.getEntityType() == EntityType.ARMOR_STAND) return; - UserDataConfig userDataConfig = new UserDataConfig(((Player) e.getDamager()).getPlayer(), e.getDamager().getName()); + UserDataConfig userDataConfig = new UserDataConfig(((Player) e.getDamager()).getPlayer(), e.getDamager().getUniqueId().toString(), e.getDamager().getName()); if(!userDataConfig.getState()) return; double heart = Math.round(((LivingEntity) e.getEntity()).getHealth() * 2) / 20.0; diff --git a/src/main/java/com/eofitg/hardcore/util/Leaderboard.java b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java index 568076c..1167041 100644 --- a/src/main/java/com/eofitg/hardcore/util/Leaderboard.java +++ b/src/main/java/com/eofitg/hardcore/util/Leaderboard.java @@ -73,10 +73,11 @@ public void startShowing() { Map playerState = new HashMap<>(); Map playerPoint = new HashMap<>(); - List playerNames = MainConfig.getPlayerNames(); - for (int i = 0; i < playerNames.size() && i < N; i++) { - String name = playerNames.get(i); - UserDataConfig userDataConfig = new UserDataConfig(Bukkit.getOfflinePlayer(name).getPlayer(), name); + List playerIdList = MainConfig.getPlayerIdList(); + for (int i = 0; i < playerIdList.size() && i < N; i++) { + String uuid = playerIdList.get(i).split("/")[0]; + String name = playerIdList.get(i).split("/")[1]; + UserDataConfig userDataConfig = new UserDataConfig(Bukkit.getOfflinePlayer(name).getPlayer(), uuid, name); playerState.put(name, userDataConfig.getState()); playerPoint.put(name, userDataConfig.getPoint()); } From 62c0a284f052d9df62e6e929e3eb991a6887ef91 Mon Sep 17 00:00:00 2001 From: eofitg Date: Thu, 15 Jun 2023 20:57:05 +0800 Subject: [PATCH 13/15] Bug Fix: Use uuid instead of name to check player data now *2 --- src/main/java/com/eofitg/hardcore/Hardcore.java | 4 ++++ .../hardcore/configuration/UserDataConfig.java | 14 +++++++++----- .../eofitg/hardcore/listener/PlayerListener.java | 4 ++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/eofitg/hardcore/Hardcore.java b/src/main/java/com/eofitg/hardcore/Hardcore.java index 16c6d26..a073b42 100644 --- a/src/main/java/com/eofitg/hardcore/Hardcore.java +++ b/src/main/java/com/eofitg/hardcore/Hardcore.java @@ -77,6 +77,8 @@ public void onEnable() { playerIdList.set(i, playerId); } } + MainConfig.setPlayerIdList(playerIdList); + MainConfig.save(); } boolean playerState = userDataConfig.getState(); if (!playerState) { @@ -122,6 +124,8 @@ public void onDisable() { playerIdList.set(i, playerId); } } + MainConfig.setPlayerIdList(playerIdList); + MainConfig.save(); } } // Delete the leaderboard diff --git a/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java b/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java index 229980d..adce386 100644 --- a/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java +++ b/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java @@ -10,7 +10,6 @@ import java.io.File; import java.io.IOException; import java.util.List; -import java.util.UUID; public class UserDataConfig { @@ -22,6 +21,7 @@ public class UserDataConfig { private final String playerId; private final boolean exists; private static final List playerIdList = MainConfig.getPlayerIdList(); + private static final List uuidList = MainConfig.getUuidList(); public UserDataConfig(Player player, String uuid, String name) { this.configFile = new File(Hardcore.getInstance().getDataFolder() + "\\userdata", uuid + ".yml"); @@ -48,6 +48,7 @@ public UserDataConfig(Player player, String uuid, String name) { public void init() { setName(name); + setUuid(uuid); setState(true); setPoint(0); setGameMode(player.getGameMode().toString()); @@ -71,6 +72,9 @@ public void set(String key, Object value) { public void setName(String name) { set("name", name); } + public void setUuid(String uuid) { + set("uuid", uuid); + } public void setState(boolean state) { set("alive", state); } @@ -82,15 +86,15 @@ public void setGameMode(String gamemode) { } public void reset() { - if (playerIdList.contains(playerId)) { + if (uuidList.contains(uuid)) { setState(true); setPoint(0); } } public static void reset(String playerId) { - if (playerIdList.contains(playerId)) { - String uuid = playerId.split("/")[0]; - String name = playerId.split("/")[1]; + String uuid = playerId.split("/")[0]; + String name = playerId.split("/")[1]; + if (uuidList.contains(uuid)) { UserDataConfig userDataConfig = new UserDataConfig(Bukkit.getOfflinePlayer(uuid).getPlayer(), uuid, name); if (userDataConfig.exists()) { userDataConfig.setState(true); diff --git a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java index 89fc2f6..2b213d9 100644 --- a/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java +++ b/src/main/java/com/eofitg/hardcore/listener/PlayerListener.java @@ -40,6 +40,8 @@ public void onJoin(PlayerJoinEvent e) { playerIdList.set(i, playerId); } } + MainConfig.setPlayerIdList(playerIdList); + MainConfig.save(); } } return; @@ -69,6 +71,8 @@ public void onJoin(PlayerJoinEvent e) { playerIdList.set(i, playerId); } } + MainConfig.setPlayerIdList(playerIdList); + MainConfig.save(); } boolean playerState = new UserDataConfig(player, uuid, name).getState(); if (!playerState) { From 6d4478a05f488eb650d83c22b5206fe4f6c7b6ef Mon Sep 17 00:00:00 2001 From: eofitg Date: Thu, 15 Jun 2023 21:17:55 +0800 Subject: [PATCH 14/15] Add: Allow to reset a designated online player's state --- .../hardcore/cmdoperation/CommandHandler.java | 22 +++++++++++++++++++ .../configuration/UserDataConfig.java | 8 +++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java index 6ac053a..49e29f1 100644 --- a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java +++ b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java @@ -2,10 +2,12 @@ import com.eofitg.hardcore.configuration.MainConfig; import com.eofitg.hardcore.configuration.UserDataConfig; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; public class CommandHandler implements CommandExecutor { @@ -16,11 +18,31 @@ public boolean onCommand(CommandSender sender, Command command, String label, St sender.sendMessage(ChatColor.RED + "No permission."); return true; } + if (args.length > 2) { + return false; + } if (args.length == 0) { sender.sendMessage(ChatColor.RED + "Empty parameters."); return true; } + String childCmd = args[0].toLowerCase(); + if (args.length == 2) { + // /hardcore reset + if (childCmd.equals("reset")) { + String name = args[1]; + for (Player player : Bukkit.getOnlinePlayers()) { + String playerName = player.getName(); + if (name.equalsIgnoreCase(playerName)) { + UserDataConfig userDataConfig = new UserDataConfig(player, player.getUniqueId().toString(), playerName); + userDataConfig.reset(); + userDataConfig.save(); + return true; + } + } + } + } + switch (childCmd) { case "help" : { sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7- &a/hardcore help &f- &7Get Help")); diff --git a/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java b/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java index adce386..ff4eb57 100644 --- a/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java +++ b/src/main/java/com/eofitg/hardcore/configuration/UserDataConfig.java @@ -85,13 +85,13 @@ public void setGameMode(String gamemode) { set("game-mode", gamemode); } - public void reset() { - if (uuidList.contains(uuid)) { + public void reset() { // Reset this.state + if(exists) { setState(true); setPoint(0); } } - public static void reset(String playerId) { + public static void reset(String playerId) { // Try to reset a designated player's state String uuid = playerId.split("/")[0]; String name = playerId.split("/")[1]; if (uuidList.contains(uuid)) { @@ -103,7 +103,7 @@ public static void reset(String playerId) { } } } - public static void reset_all() { + public static void reset_all() { // Reset all players' state for (String s : playerIdList) { reset(s); } From 5ae7499dc1496fd7845913ffc82846fea3a9d00a Mon Sep 17 00:00:00 2001 From: eofitg Date: Thu, 15 Jun 2023 22:16:42 +0800 Subject: [PATCH 15/15] Add: Filtering undefined or non-standard commands --- .../com/eofitg/hardcore/cmdoperation/CommandHandler.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java index 49e29f1..3876956 100644 --- a/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java +++ b/src/main/java/com/eofitg/hardcore/cmdoperation/CommandHandler.java @@ -19,7 +19,8 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; } if (args.length > 2) { - return false; + sender.sendMessage(ChatColor.RED + "Invalid command."); + return true; } if (args.length == 0) { sender.sendMessage(ChatColor.RED + "Empty parameters."); @@ -37,10 +38,13 @@ public boolean onCommand(CommandSender sender, Command command, String label, St UserDataConfig userDataConfig = new UserDataConfig(player, player.getUniqueId().toString(), playerName); userDataConfig.reset(); userDataConfig.save(); - return true; } } + sender.sendMessage(ChatColor.BLUE + "Player " + args[1] + "'s state has reset."); + } else { + sender.sendMessage(ChatColor.RED + "Invalid command."); } + return true; } switch (childCmd) {