master
Default 4 years ago
parent 33996e5c93
commit d2f9c6ae17
  1. 10
      src/main/java/com/benjocraeft/sharehealth/Commands.java
  2. 27
      src/main/java/com/benjocraeft/sharehealth/FileManager.java
  3. 13
      src/main/java/com/benjocraeft/sharehealth/FoodRegeneration.java
  4. 49
      src/main/java/com/benjocraeft/sharehealth/Messenger.java
  5. 21
      src/main/java/com/benjocraeft/sharehealth/Sharehealth.java
  6. 15
      src/main/java/com/benjocraeft/sharehealth/Statistics.java

@ -96,9 +96,13 @@ public class Commands implements TabExecutor {
sender.sendMessage(message); sender.sendMessage(message);
} }
private void commandSetLogging(CommandSender sender, boolean log){ private void commandSetLogging(CommandSender sender, boolean hasLogging){
Sharehealth.Instance.getMessenger().setLogging(log); if (sender instanceof Player){
//TODO Set by user Player player = (Player) sender;
Sharehealth.Instance.onLoggingUpdated(player, hasLogging);
player.sendMessage("Logging settings updated.");
}
} }
private void commandSendStats(CommandSender sender){ private void commandSendStats(CommandSender sender){

@ -37,13 +37,22 @@ public class FileManager {
} }
} }
public Map<String, String> loadSettings(){ public Map<UUID, Boolean> loadSettings(){
return loadFromFile(settingsFile); Map<UUID, Boolean> settingsMap = new HashMap<>();
Map<String, String> 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<UUID, Pair<Double, Double>> loadStatistics(){ public Map<UUID, Pair<Double, Double>> loadStatistics(){
Map<String, String> map = loadFromFile(statisticsFile);
Map<UUID, Pair<Double, Double>> statisticsMap = new HashMap<>(); Map<UUID, Pair<Double, Double>> statisticsMap = new HashMap<>();
Map<String, String> map = loadFromFile(statisticsFile);
map.forEach((String s1, String s2) -> { map.forEach((String s1, String s2) -> {
UUID uuid = UUID.fromString(s1); UUID uuid = UUID.fromString(s1);
@ -58,9 +67,9 @@ public class FileManager {
return statisticsMap; return statisticsMap;
} }
public Map<String, Object> loadStatus(){ public Map<String, Object> loadStatus(){
Map<String, String> map = loadFromFile(statusFile);
Map<String, Object> statusMap = new HashMap<>(); Map<String, Object> statusMap = new HashMap<>();
Map<String, String> map = loadFromFile(statusFile);
map.putIfAbsent("health", "20"); map.putIfAbsent("health", "20");
map.putIfAbsent("isFailed", "false"); map.putIfAbsent("isFailed", "false");
@ -85,6 +94,14 @@ public class FileManager {
saveToFile(statusFile, statusMap); saveToFile(statusFile, statusMap);
} }
public void saveSettings(Map<UUID, Boolean> settingsMap){
Map<String, Object> map = new HashMap<>();
settingsMap.forEach((UUID uuid, Boolean hasLogging) -> map.put(uuid.toString(), hasLogging));
saveToFile(settingsFile, map);
}
private Map<String, String> loadFromFile(File file) { private Map<String, String> loadFromFile(File file) {
Map<String, String> map = new HashMap<>(); Map<String, String> map = new HashMap<>();

@ -6,13 +6,9 @@ import org.bukkit.scheduler.BukkitRunnable;
import java.util.Objects; import java.util.Objects;
public class HealthRegenTask extends BukkitRunnable { public class FoodRegeneration extends BukkitRunnable {
final private HealthManager healthManager; FoodRegeneration(){
HealthRegenTask(HealthManager healthManager){
this.healthManager = healthManager;
runTaskTimer(Sharehealth.Instance, 80, 80); runTaskTimer(Sharehealth.Instance, 80, 80);
} }
@ -30,9 +26,8 @@ public class HealthRegenTask extends BukkitRunnable {
//According to MinecraftWiki, players automatically regen if their food level //According to MinecraftWiki, players automatically regen if their food level
// is greater than or equal to 18 of 20 (90%) // is greater than or equal to 18 of 20 (90%)
//Here, we look for the average food level //Here, we look for the average food level
if (allFoodPoints / allPlayersCount >= 18 && this.healthManager.getHealth() != 0){ if (allFoodPoints / allPlayersCount >= 18 && Sharehealth.Instance.getHealthManager().getHealth() != 0){
this.healthManager.addHealth(1); Sharehealth.Instance.onFoodRegeneration();
this.healthManager.setHealthByPlayer(null);
} }
} }

@ -2,6 +2,7 @@ package com.benjocraeft.sharehealth;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity; 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.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.Objects;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.logging.Logger; import java.util.logging.Logger;
public class Messenger { public class Messenger {
private boolean logging = true;
void setLogging(boolean logging){
this.logging = logging;
}
private Logger logger; private Logger logger;
Messenger(Logger logger){ Messenger(Logger logger){
this.logger = logger; this.logger = logger;
} }
private List<Player> playersToSendLogs(){
List<Player> players = new ArrayList<>(Bukkit.getOnlinePlayers());
players.removeIf(p -> !Sharehealth.Instance.getLogging(p));
return players;
}
void onPlayerRegainedHealth(Player player, double amount, RegainReason reason){ void onPlayerRegainedHealth(Player player, double amount, RegainReason reason){
if (!logging || amount <= 0) if (amount <= 0)
return; return;
String message = healMessage(player, amount, reason); String message = healMessage(player, amount, reason);
Bukkit.getOnlinePlayers().forEach(p -> p.sendMessage(message)); playersToSendLogs().forEach(p -> p.sendMessage(message));
} }
void sendFailedMessage(Player cause){ void sendFailedMessage(Player cause){
@ -42,24 +42,18 @@ public class Messenger {
} }
void onPlayerGotDamageMessage(Player player, double damage, DamageCause cause){ void onPlayerGotDamageMessage(Player player, double damage, DamageCause cause){
if (!logging)
return;
String message = damageMessage(player, damage, cause); 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){ void onPlayerGotDamageMessage(Player player, double damage, Entity damager){
if (!logging)
return;
String message = damageMessage(player, damage, damager); 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){ void onPlayerGotDamageMessage(Player player, double damage, Block damager){
if (!logging)
return;
String message = damageMessage(player, damage, damager); 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){ private String damageMessage(Player player, double damage, DamageCause cause){
@ -109,16 +103,13 @@ public class Messenger {
String statisticsMessage(){ String statisticsMessage(){
StringBuilder stats = new StringBuilder("Statistics:"); StringBuilder stats = new StringBuilder("Statistics:");
Sharehealth.Instance.getStatistics().getStatistics().forEach(((uuid, values) -> { Sharehealth.Instance.getStatistics().getStatistics().forEach(((uuid, values) -> {
Player currentPlayer = Bukkit.getPlayer(uuid); String playerName = Bukkit.getOfflinePlayer(uuid).getName();
if (currentPlayer != null){ String stat = "\n" + ChatColor.BLUE + playerName +
String playerName = currentPlayer.getDisplayName(); ChatColor.WHITE + ": Damage caused: " +
String stat = "\n" + ChatColor.BLUE + playerName + ChatColor.RED + String.format("%.2f", values.first / 2) +
ChatColor.WHITE + ": Damage caused: " + ChatColor.WHITE + " || Healing done: " +
ChatColor.RED + String.format("%.2f", values.first / 2) + ChatColor.GREEN + String.format("%.2f", values.second / 2);
ChatColor.WHITE + " || Healing done: " + stats.append(stat);
ChatColor.GREEN + String.format("%.2f", values.second / 2);
stats.append(stat);
}
})); }));
return stats.toString(); return stats.toString();
} }

@ -52,12 +52,12 @@ public class Sharehealth extends JavaPlugin {
messenger = new Messenger(getLogger()); messenger = new Messenger(getLogger());
//Create statistics from file //Create statistics from file
statistics = new Statistics(fileManager.loadStatistics()); statistics = new Statistics(fileManager.loadStatistics(), fileManager.loadSettings());
loadStatus(); loadStatus();
//Starts custom health regeneration //Starts custom health regeneration
new HealthRegenTask(healthManager); new FoodRegeneration();
//Register Events and Commands //Register Events and Commands
Bukkit.getPluginManager().registerEvents(new PlayerListeners(), this); Bukkit.getPluginManager().registerEvents(new PlayerListeners(), this);
@ -133,6 +133,13 @@ public class Sharehealth extends JavaPlugin {
return true; return true;
} }
void onFoodRegeneration(){
healthManager.addHealth(1);
healthManager.setHealthByPlayer(null);
saveStatus();
}
void onAbsorptionPrevented(int level){ void onAbsorptionPrevented(int level){
getLogger().info("Add " + level * 2 + "hearts!"); getLogger().info("Add " + level * 2 + "hearts!");
} }
@ -185,4 +192,14 @@ public class Sharehealth extends JavaPlugin {
isFailed = (boolean) map.get("isFailed"); isFailed = (boolean) map.get("isFailed");
} }
void onLoggingUpdated(Player player, boolean hasLogging){
statistics.setSettings(player.getUniqueId(), hasLogging);
Map<UUID, Boolean> settings = statistics.getSettings();
fileManager.saveSettings(settings);
}
boolean getLogging(Player player){
return statistics.getSettings().get(player.getUniqueId());
}
} }

@ -21,14 +21,25 @@ public class Statistics {
return Rounded(value, 2); return Rounded(value, 2);
} }
public Statistics(Map<UUID, Pair<Double, Double>> statistics){ public Statistics(Map<UUID, Pair<Double, Double>> statistics, Map<UUID, Boolean> settings){
getStatistics().putAll(statistics); this.statistics.putAll(statistics);
this.settings.putAll(settings);
}
final private Map<UUID, Boolean> settings = new HashMap<>();
public Map<UUID, Boolean> getSettings(){
return settings;
}
public void setSettings(UUID uuid, boolean hasLogging){
settings.put(uuid, hasLogging);
} }
public void onPlayerJoined(Player player){ public void onPlayerJoined(Player player){
UUID uuid = player.getUniqueId(); UUID uuid = player.getUniqueId();
Pair<Double, Double> empty = Pair.pair(0., 0.); Pair<Double, Double> empty = Pair.pair(0., 0.);
statistics.putIfAbsent(uuid, empty); statistics.putIfAbsent(uuid, empty);
settings.putIfAbsent(uuid, true);
} }
void onPlayerRegainedHealth(Player player, double amount){ void onPlayerRegainedHealth(Player player, double amount){

Loading…
Cancel
Save