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. 37
      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);
}
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){

@ -37,13 +37,22 @@ public class FileManager {
}
}
public Map<String, String> loadSettings(){
return loadFromFile(settingsFile);
public Map<UUID, Boolean> loadSettings(){
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(){
Map<String, String> map = loadFromFile(statisticsFile);
Map<UUID, Pair<Double, Double>> statisticsMap = new HashMap<>();
Map<String, String> 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<String, Object> loadStatus(){
Map<String, String> map = loadFromFile(statusFile);
Map<String, Object> statusMap = new HashMap<>();
Map<String, String> 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<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) {
Map<String, String> map = new HashMap<>();

@ -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();
}
}

@ -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<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){
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 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();
}

@ -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<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);
}
public Statistics(Map<UUID, Pair<Double, Double>> statistics){
getStatistics().putAll(statistics);
public Statistics(Map<UUID, Pair<Double, Double>> statistics, Map<UUID, Boolean> settings){
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){
UUID uuid = player.getUniqueId();
Pair<Double, Double> empty = Pair.pair(0., 0.);
statistics.putIfAbsent(uuid, empty);
settings.putIfAbsent(uuid, true);
}
void onPlayerRegainedHealth(Player player, double amount){

Loading…
Cancel
Save