From d2f9c6ae17b949e0df36a1db600f82d698717a36 Mon Sep 17 00:00:00 2001 From: Default Date: Wed, 30 Dec 2020 02:57:53 +0100 Subject: [PATCH] nice --- .../com/benjocraeft/sharehealth/Commands.java | 10 ++-- .../benjocraeft/sharehealth/FileManager.java | 27 ++++++++-- ...thRegenTask.java => FoodRegeneration.java} | 13 ++--- .../benjocraeft/sharehealth/Messenger.java | 49 ++++++++----------- .../benjocraeft/sharehealth/Sharehealth.java | 21 +++++++- .../benjocraeft/sharehealth/Statistics.java | 15 +++++- 6 files changed, 85 insertions(+), 50 deletions(-) rename src/main/java/com/benjocraeft/sharehealth/{HealthRegenTask.java => FoodRegeneration.java} (66%) diff --git a/src/main/java/com/benjocraeft/sharehealth/Commands.java b/src/main/java/com/benjocraeft/sharehealth/Commands.java index 51e45be..2b99cac 100644 --- a/src/main/java/com/benjocraeft/sharehealth/Commands.java +++ b/src/main/java/com/benjocraeft/sharehealth/Commands.java @@ -96,9 +96,13 @@ public class Commands implements TabExecutor { sender.sendMessage(message); } - private void commandSetLogging(CommandSender sender, boolean log){ - Sharehealth.Instance.getMessenger().setLogging(log); - //TODO Set by user + private void commandSetLogging(CommandSender sender, boolean hasLogging){ + if (sender instanceof Player){ + Player player = (Player) sender; + + Sharehealth.Instance.onLoggingUpdated(player, hasLogging); + player.sendMessage("Logging settings updated."); + } } private void commandSendStats(CommandSender sender){ diff --git a/src/main/java/com/benjocraeft/sharehealth/FileManager.java b/src/main/java/com/benjocraeft/sharehealth/FileManager.java index 77d62f0..fac59ed 100644 --- a/src/main/java/com/benjocraeft/sharehealth/FileManager.java +++ b/src/main/java/com/benjocraeft/sharehealth/FileManager.java @@ -37,13 +37,22 @@ public class FileManager { } } - public Map loadSettings(){ - return loadFromFile(settingsFile); + public Map loadSettings(){ + Map settingsMap = new HashMap<>(); + + Map map = loadFromFile(settingsFile); + map.forEach((String uuidString, String hasLoggingString) -> { + UUID uuid = UUID.fromString(uuidString); + Boolean hasLogging = Boolean.parseBoolean(hasLoggingString); + settingsMap.put(uuid, hasLogging); + }); + + return settingsMap; } public Map> loadStatistics(){ - Map map = loadFromFile(statisticsFile); - Map> statisticsMap = new HashMap<>(); + + Map map = loadFromFile(statisticsFile); map.forEach((String s1, String s2) -> { UUID uuid = UUID.fromString(s1); @@ -58,9 +67,9 @@ public class FileManager { return statisticsMap; } public Map loadStatus(){ - Map map = loadFromFile(statusFile); Map statusMap = new HashMap<>(); + Map map = loadFromFile(statusFile); map.putIfAbsent("health", "20"); map.putIfAbsent("isFailed", "false"); @@ -85,6 +94,14 @@ public class FileManager { saveToFile(statusFile, statusMap); } + public void saveSettings(Map settingsMap){ + Map map = new HashMap<>(); + + settingsMap.forEach((UUID uuid, Boolean hasLogging) -> map.put(uuid.toString(), hasLogging)); + + saveToFile(settingsFile, map); + } + private Map loadFromFile(File file) { Map map = new HashMap<>(); diff --git a/src/main/java/com/benjocraeft/sharehealth/HealthRegenTask.java b/src/main/java/com/benjocraeft/sharehealth/FoodRegeneration.java similarity index 66% rename from src/main/java/com/benjocraeft/sharehealth/HealthRegenTask.java rename to src/main/java/com/benjocraeft/sharehealth/FoodRegeneration.java index 4da6b12..564898f 100644 --- a/src/main/java/com/benjocraeft/sharehealth/HealthRegenTask.java +++ b/src/main/java/com/benjocraeft/sharehealth/FoodRegeneration.java @@ -6,13 +6,9 @@ import org.bukkit.scheduler.BukkitRunnable; import java.util.Objects; -public class HealthRegenTask extends BukkitRunnable { +public class FoodRegeneration extends BukkitRunnable { - final private HealthManager healthManager; - - - HealthRegenTask(HealthManager healthManager){ - this.healthManager = healthManager; + FoodRegeneration(){ runTaskTimer(Sharehealth.Instance, 80, 80); } @@ -30,9 +26,8 @@ public class HealthRegenTask extends BukkitRunnable { //According to MinecraftWiki, players automatically regen if their food level // is greater than or equal to 18 of 20 (90%) //Here, we look for the average food level - if (allFoodPoints / allPlayersCount >= 18 && this.healthManager.getHealth() != 0){ - this.healthManager.addHealth(1); - this.healthManager.setHealthByPlayer(null); + if (allFoodPoints / allPlayersCount >= 18 && Sharehealth.Instance.getHealthManager().getHealth() != 0){ + Sharehealth.Instance.onFoodRegeneration(); } } diff --git a/src/main/java/com/benjocraeft/sharehealth/Messenger.java b/src/main/java/com/benjocraeft/sharehealth/Messenger.java index 01f5de3..3544988 100644 --- a/src/main/java/com/benjocraeft/sharehealth/Messenger.java +++ b/src/main/java/com/benjocraeft/sharehealth/Messenger.java @@ -2,6 +2,7 @@ package com.benjocraeft.sharehealth; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; import org.bukkit.block.Block; import org.bukkit.command.CommandSender; import org.bukkit.entity.Entity; @@ -10,30 +11,29 @@ import org.bukkit.entity.Projectile; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.function.Consumer; import java.util.logging.Logger; public class Messenger { - private boolean logging = true; - void setLogging(boolean logging){ - this.logging = logging; - } - private Logger logger; Messenger(Logger logger){ this.logger = logger; } + private List playersToSendLogs(){ + List players = new ArrayList<>(Bukkit.getOnlinePlayers()); + players.removeIf(p -> !Sharehealth.Instance.getLogging(p)); + return players; + } + void onPlayerRegainedHealth(Player player, double amount, RegainReason reason){ - if (!logging || amount <= 0) + if (amount <= 0) return; String message = healMessage(player, amount, reason); - Bukkit.getOnlinePlayers().forEach(p -> p.sendMessage(message)); + playersToSendLogs().forEach(p -> p.sendMessage(message)); } void sendFailedMessage(Player cause){ @@ -42,24 +42,18 @@ public class Messenger { } void onPlayerGotDamageMessage(Player player, double damage, DamageCause cause){ - if (!logging) - return; String message = damageMessage(player, damage, cause); - Bukkit.getOnlinePlayers().forEach(p -> p.sendMessage(message)); + playersToSendLogs().forEach(p -> p.sendMessage(message)); } void onPlayerGotDamageMessage(Player player, double damage, Entity damager){ - if (!logging) - return; String message = damageMessage(player, damage, damager); - Bukkit.getOnlinePlayers().forEach(p -> p.sendMessage(message)); + playersToSendLogs().forEach(p -> p.sendMessage(message)); } void onPlayerGotDamageMessage(Player player, double damage, Block damager){ - if (!logging) - return; String message = damageMessage(player, damage, damager); - Bukkit.getOnlinePlayers().forEach(p -> p.sendMessage(message)); + playersToSendLogs().forEach(p -> p.sendMessage(message)); } private String damageMessage(Player player, double damage, DamageCause cause){ @@ -109,16 +103,13 @@ public class Messenger { String statisticsMessage(){ StringBuilder stats = new StringBuilder("Statistics:"); Sharehealth.Instance.getStatistics().getStatistics().forEach(((uuid, values) -> { - Player currentPlayer = Bukkit.getPlayer(uuid); - if (currentPlayer != null){ - String playerName = currentPlayer.getDisplayName(); - String stat = "\n" + ChatColor.BLUE + playerName + - ChatColor.WHITE + ": Damage caused: " + - ChatColor.RED + String.format("%.2f", values.first / 2) + - ChatColor.WHITE + " || Healing done: " + - ChatColor.GREEN + String.format("%.2f", values.second / 2); - stats.append(stat); - } + String playerName = Bukkit.getOfflinePlayer(uuid).getName(); + String stat = "\n" + ChatColor.BLUE + playerName + + ChatColor.WHITE + ": Damage caused: " + + ChatColor.RED + String.format("%.2f", values.first / 2) + + ChatColor.WHITE + " || Healing done: " + + ChatColor.GREEN + String.format("%.2f", values.second / 2); + stats.append(stat); })); return stats.toString(); } diff --git a/src/main/java/com/benjocraeft/sharehealth/Sharehealth.java b/src/main/java/com/benjocraeft/sharehealth/Sharehealth.java index fe8d572..2ccfeba 100644 --- a/src/main/java/com/benjocraeft/sharehealth/Sharehealth.java +++ b/src/main/java/com/benjocraeft/sharehealth/Sharehealth.java @@ -52,12 +52,12 @@ public class Sharehealth extends JavaPlugin { messenger = new Messenger(getLogger()); //Create statistics from file - statistics = new Statistics(fileManager.loadStatistics()); + statistics = new Statistics(fileManager.loadStatistics(), fileManager.loadSettings()); loadStatus(); //Starts custom health regeneration - new HealthRegenTask(healthManager); + new FoodRegeneration(); //Register Events and Commands Bukkit.getPluginManager().registerEvents(new PlayerListeners(), this); @@ -133,6 +133,13 @@ public class Sharehealth extends JavaPlugin { return true; } + void onFoodRegeneration(){ + healthManager.addHealth(1); + healthManager.setHealthByPlayer(null); + + saveStatus(); + } + void onAbsorptionPrevented(int level){ getLogger().info("Add " + level * 2 + "hearts!"); } @@ -185,4 +192,14 @@ public class Sharehealth extends JavaPlugin { isFailed = (boolean) map.get("isFailed"); } + void onLoggingUpdated(Player player, boolean hasLogging){ + statistics.setSettings(player.getUniqueId(), hasLogging); + Map settings = statistics.getSettings(); + fileManager.saveSettings(settings); + } + + boolean getLogging(Player player){ + return statistics.getSettings().get(player.getUniqueId()); + } + } diff --git a/src/main/java/com/benjocraeft/sharehealth/Statistics.java b/src/main/java/com/benjocraeft/sharehealth/Statistics.java index b875cbd..ed90c7f 100644 --- a/src/main/java/com/benjocraeft/sharehealth/Statistics.java +++ b/src/main/java/com/benjocraeft/sharehealth/Statistics.java @@ -21,14 +21,25 @@ public class Statistics { return Rounded(value, 2); } - public Statistics(Map> statistics){ - getStatistics().putAll(statistics); + public Statistics(Map> statistics, Map settings){ + this.statistics.putAll(statistics); + this.settings.putAll(settings); + } + + final private Map settings = new HashMap<>(); + public Map getSettings(){ + return settings; + } + public void setSettings(UUID uuid, boolean hasLogging){ + settings.put(uuid, hasLogging); } public void onPlayerJoined(Player player){ UUID uuid = player.getUniqueId(); Pair empty = Pair.pair(0., 0.); statistics.putIfAbsent(uuid, empty); + + settings.putIfAbsent(uuid, true); } void onPlayerRegainedHealth(Player player, double amount){