players need to be added/removed to the plugin

master
Benjamin Kraft 3 years ago
parent 677ad4f5db
commit c46447c7e6
  1. 5
      src/main/java/com/benjocraeft/sharehealth/AbsorptionManager.java
  2. 51
      src/main/java/com/benjocraeft/sharehealth/Commands.java
  3. 40
      src/main/java/com/benjocraeft/sharehealth/FileManager.java
  4. 4
      src/main/java/com/benjocraeft/sharehealth/FoodRegeneration.java
  5. 5
      src/main/java/com/benjocraeft/sharehealth/HealthManager.java
  6. 8
      src/main/java/com/benjocraeft/sharehealth/Messenger.java
  7. 27
      src/main/java/com/benjocraeft/sharehealth/Sharehealth.java
  8. 3
      src/main/java/com/benjocraeft/sharehealth/Statistics.java

@ -3,7 +3,6 @@ package com.benjocraeft.sharehealth;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class AbsorptionManager { public class AbsorptionManager {
@ -28,7 +27,7 @@ public class AbsorptionManager {
} }
private void onSecond(){ private void onSecond(){
if (Bukkit.getOnlinePlayers().size() == 0) if (Sharehealth.GetPlayers().size() == 0)
return; return;
duration -= 20; duration -= 20;
@ -55,7 +54,7 @@ public class AbsorptionManager {
amount = 0; amount = 0;
} }
this.amount = amount; this.amount = amount;
List<Player> players = new ArrayList<>(Bukkit.getOnlinePlayers()); List<Player> players = Sharehealth.GetPlayers();
players.remove(player); players.remove(player);
players.forEach(this::setAbsorption); players.forEach(this::setAbsorption);
} }

@ -1,5 +1,7 @@
package com.benjocraeft.sharehealth; package com.benjocraeft.sharehealth;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor; import org.bukkit.command.TabExecutor;
@ -7,39 +9,48 @@ import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil; import org.bukkit.util.StringUtil;
import java.util.*; import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer; import java.util.function.Consumer;
public class Commands implements TabExecutor { public class Commands implements TabExecutor {
final private Map<List<String>, Pair<Consumer<CommandSender>, String>> commands = new HashMap<>(); final private Map<List<String>, Pair<BiConsumer<CommandSender, String>, String>> commands = new HashMap<>();
{ {
commands.put( commands.put(
Arrays.asList("get"), Arrays.asList("get"),
Pair.pair(this::commandGetHealth, "Displays current health value.") Pair.pair((sender, arg) -> commandGetHealth(sender), "Displays current health value.")
); );
commands.put( commands.put(
Arrays.asList("reset"), Arrays.asList("reset"),
Pair.pair(this::commandReset, "Gives every player full health and resets 'isFailed' to false. GameMode becomes Survival.") Pair.pair((sender, arg) -> commandReset(sender), "Gives every player full health and resets 'isFailed' to false. GameMode becomes Survival.")
);
commands.put(
Arrays.asList("add"),
Pair.pair((sender, name) -> commandActivePlayer(sender, name, true), "Adds a player to the Plugin")
);
commands.put(
Arrays.asList("remove"),
Pair.pair((sender, name) -> commandActivePlayer(sender, name, false), "Removes a player from the Plugin")
); );
commands.put( commands.put(
Arrays.asList("log", "on"), Arrays.asList("log", "on"),
Pair.pair(sender -> this.commandSetLogging(sender, true), "Enables Logging.") Pair.pair((sender, arg) -> commandSetLogging(sender, true), "Enables Logging.")
); );
commands.put( commands.put(
Arrays.asList("log", "off"), Arrays.asList("log", "off"),
Pair.pair(sender -> this.commandSetLogging(sender, false), "Disables Logging.") Pair.pair((sender, arg) -> commandSetLogging(sender, false), "Disables Logging.")
); );
commands.put( commands.put(
Arrays.asList("log", "get"), Arrays.asList("log", "get"),
Pair.pair(this::commandGetLogging, "Displays if Logging is enabled.") Pair.pair((sender, arg) -> commandGetLogging(sender), "Displays if Logging is enabled.")
); );
commands.put( commands.put(
Arrays.asList("stats"), Arrays.asList("stats"),
Pair.pair(this::commandSendStats, "Displays statistics about every player.") Pair.pair((sender, arg) -> commandSendStats(sender), "Displays statistics about every player.")
); );
commands.put( commands.put(
Arrays.asList("help"), Arrays.asList("help"),
Pair.pair(this::commandGetHelp, "Displays help message for command usage.") Pair.pair((sender, arg) -> commandGetHelp(sender), "Displays help message for command usage.")
); );
} }
@ -90,10 +101,13 @@ public class Commands implements TabExecutor {
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){ public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
List<String> argList = Arrays.asList(args); List<String> argList = Arrays.asList(args);
Pair<Consumer<CommandSender>, String> command = commands.get(argList); Pair<BiConsumer<CommandSender, String>, String> command = commands.get(argList);
if (args.length > 1 && (args[0].equals("add") || args[0].equals("remove"))){
command = commands.get(Arrays.asList(args[0]));
}
if (command == null) if (command == null)
command = Pair.pair(this::unknownCommand, ""); command = Pair.pair((cmdSender, arg) -> unknownCommand(cmdSender), "");
command.first.accept(sender); command.first.accept(sender, args.length > 0 ? args[args.length - 1] : "");
return true; return true;
} }
@ -106,6 +120,21 @@ public class Commands implements TabExecutor {
Sharehealth.Instance.reset(); Sharehealth.Instance.reset();
} }
private void commandActivePlayer(CommandSender sender, String playerName, boolean add){
if (!sender.hasPermission("sharehealth.players")){
sender.sendMessage("You don't have permissions for this command!");
return;
}
UUID uuid = Bukkit.getOfflinePlayer(playerName).getUniqueId();
if (add){
Sharehealth.Instance.addPlayer(uuid);
sender.sendMessage("Added player " + playerName);
} else {
Sharehealth.Instance.removePlayer(uuid);
sender.sendMessage("Removed player " + playerName);
}
}
private void commandGetHealth(CommandSender sender){ private void commandGetHealth(CommandSender sender){
String message = "Current health: " + Sharehealth.Instance.getHealthManager().getHealthString(); String message = "Current health: " + Sharehealth.Instance.getHealthManager().getHealthString();
sender.sendMessage(message); sender.sendMessage(message);

@ -9,6 +9,7 @@ public class FileManager {
final private File settingsFile; final private File settingsFile;
final private File statisticsFile; final private File statisticsFile;
final private File statusFile; final private File statusFile;
final private File playersFile;
final private File pluginFolder = new File(System.getProperty("user.dir"), "plugins/sharehealth"); final private File pluginFolder = new File(System.getProperty("user.dir"), "plugins/sharehealth");
final private String pluginPath = pluginFolder.getPath(); final private String pluginPath = pluginFolder.getPath();
@ -24,7 +25,7 @@ public class FileManager {
settingsFile = new File(pluginPath + "/settings.txt"); settingsFile = new File(pluginPath + "/settings.txt");
statisticsFile = new File(pluginPath + "/statistics.txt"); statisticsFile = new File(pluginPath + "/statistics.txt");
statusFile = new File(pluginPath + "/status.txt"); statusFile = new File(pluginPath + "/status.txt");
playersFile = new File(pluginPath + "/players.txt");
try { try {
if (settingsFile.createNewFile()) if (settingsFile.createNewFile())
@ -33,6 +34,8 @@ public class FileManager {
logger.info(statisticsFile.getName() + " created"); logger.info(statisticsFile.getName() + " created");
if (statusFile.createNewFile()) if (statusFile.createNewFile())
logger.info(statusFile.getName() + " created"); logger.info(statusFile.getName() + " created");
if (playersFile.createNewFile())
logger.info(playersFile.getName() + " created");
} catch(IOException e){ } catch(IOException e){
e.printStackTrace(); e.printStackTrace();
} }
@ -41,7 +44,7 @@ public class FileManager {
public Map<UUID, Boolean> loadSettings(){ public Map<UUID, Boolean> loadSettings(){
Map<UUID, Boolean> settingsMap = new HashMap<>(); Map<UUID, Boolean> settingsMap = new HashMap<>();
Map<String, String> map = loadFromFile(settingsFile); Map<String, String> map = loadMapFromFile(settingsFile);
map.forEach((String uuidString, String hasLoggingString) -> { map.forEach((String uuidString, String hasLoggingString) -> {
UUID uuid = UUID.fromString(uuidString); UUID uuid = UUID.fromString(uuidString);
Boolean hasLogging = Boolean.parseBoolean(hasLoggingString); Boolean hasLogging = Boolean.parseBoolean(hasLoggingString);
@ -50,10 +53,11 @@ public class FileManager {
return settingsMap; return settingsMap;
} }
public Map<UUID, Pair<Double, Double>> loadStatistics(){ public Map<UUID, Pair<Double, Double>> loadStatistics(){
Map<UUID, Pair<Double, Double>> statisticsMap = new HashMap<>(); Map<UUID, Pair<Double, Double>> statisticsMap = new HashMap<>();
Map<String, String> map = loadFromFile(statisticsFile); Map<String, String> map = loadMapFromFile(statisticsFile);
map.forEach((String s1, String s2) -> { map.forEach((String s1, String s2) -> {
UUID uuid = UUID.fromString(s1); UUID uuid = UUID.fromString(s1);
@ -67,10 +71,11 @@ public class FileManager {
return statisticsMap; return statisticsMap;
} }
public Map<String, Object> loadStatus(){ public Map<String, Object> loadStatus(){
Map<String, Object> statusMap = new HashMap<>(); Map<String, Object> statusMap = new HashMap<>();
Map<String, String> map = loadFromFile(statusFile); Map<String, String> map = loadMapFromFile(statusFile);
map.forEach((String key, String value) -> { map.forEach((String key, String value) -> {
if (value.matches("-?\\d+")) if (value.matches("-?\\d+"))
@ -84,6 +89,13 @@ public class FileManager {
return statusMap; return statusMap;
} }
public List<UUID> loadPlayers(){
Map<String, String> loaded = loadMapFromFile(playersFile);
List<UUID> playerUUIDs = new ArrayList<>();
loaded.keySet().forEach(s -> playerUUIDs.add(UUID.fromString(s)));
return playerUUIDs;
}
public void saveStatistics(Map<UUID, Pair<Double, Double>> statistics){ public void saveStatistics(Map<UUID, Pair<Double, Double>> statistics){
saveStatistics(statisticsFile, statistics); saveStatistics(statisticsFile, statistics);
} }
@ -96,11 +108,11 @@ public class FileManager {
map.put(uuidString, Statistics.Rounded(pair.first) + "," + Statistics.Rounded(pair.second)); map.put(uuidString, Statistics.Rounded(pair.first) + "," + Statistics.Rounded(pair.second));
}); });
saveToFile(file, map); saveMapToFile(file, map);
} }
public void saveStatus(Map<String, Object> statusMap){ public void saveStatus(Map<String, Object> statusMap){
saveToFile(statusFile, statusMap); saveMapToFile(statusFile, statusMap);
} }
public void saveSettings(Map<UUID, Boolean> settingsMap){ public void saveSettings(Map<UUID, Boolean> settingsMap){
@ -108,7 +120,15 @@ public class FileManager {
settingsMap.forEach((UUID uuid, Boolean hasLogging) -> map.put(uuid.toString(), hasLogging)); settingsMap.forEach((UUID uuid, Boolean hasLogging) -> map.put(uuid.toString(), hasLogging));
saveToFile(settingsFile, map); saveMapToFile(settingsFile, map);
}
public void savePlayers(List<UUID> playerUUIDs){
Map<String, Object> map = new HashMap<>();
playerUUIDs.forEach(uuid -> map.put(uuid.toString(), ""));
saveMapToFile(playersFile, map);
} }
public void backupStats(Map<UUID, Pair<Double, Double>> statistics){ public void backupStats(Map<UUID, Pair<Double, Double>> statistics){
@ -125,7 +145,7 @@ public class FileManager {
} }
} }
private Map<String, String> loadFromFile(File file) { private Map<String, String> loadMapFromFile(File file) {
Map<String, String> map = new HashMap<>(); Map<String, String> map = new HashMap<>();
try{ try{
@ -136,7 +156,7 @@ public class FileManager {
String line; String line;
while((line = reader.readLine()) != null){ while((line = reader.readLine()) != null){
String[] split = line.split("="); String[] split = line.split("=");
map.put(split[0], split[1]); map.put(split[0], split.length == 2 ? split[1] : "");
} }
} catch (NullPointerException ignore){} } catch (NullPointerException ignore){}
@ -149,7 +169,7 @@ public class FileManager {
return map; return map;
} }
private void saveToFile(File file, Map<String, Object> content){ private void saveMapToFile(File file, Map<String, Object> content){
try{ try{
FileWriter stream = new FileWriter(file); FileWriter stream = new FileWriter(file);
BufferedWriter out = new BufferedWriter(stream); BufferedWriter out = new BufferedWriter(stream);

@ -11,12 +11,12 @@ public class FoodRegeneration extends BukkitRunnable {
@Override @Override
public void run(){ public void run(){
int allPlayersCount = Sharehealth.GetAlivePlayers().size(); int allPlayersCount = Sharehealth.GetPlayers().size();
if (allPlayersCount == 0) if (allPlayersCount == 0)
return; return;
int allFoodPoints = 0; int allFoodPoints = 0;
for (Player p : Sharehealth.GetAlivePlayers()){ for (Player p : Sharehealth.GetPlayers()){
allFoodPoints += p.getFoodLevel(); allFoodPoints += p.getFoodLevel();
} }

@ -1,6 +1,5 @@
package com.benjocraeft.sharehealth; package com.benjocraeft.sharehealth;
import org.bukkit.Bukkit;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -51,7 +50,7 @@ public class HealthManager {
void reset(){ void reset(){
health = 20; health = 20;
Bukkit.getOnlinePlayers().forEach(p -> p.setHealth(health)); Sharehealth.GetPlayers().forEach(p -> p.setHealth(health));
} }
boolean onPlayerGotDamage(Player player, double damage, double absorptionDamage){ boolean onPlayerGotDamage(Player player, double damage, double absorptionDamage){
@ -68,7 +67,7 @@ public class HealthManager {
} }
void setHealthByPlayer(Player player){ void setHealthByPlayer(Player player){
for (Player p : Sharehealth.GetAlivePlayers()){ for (Player p : Sharehealth.GetPlayers()){
if (p.equals(player)) if (p.equals(player))
continue; continue;
p.setHealth(health); p.setHealth(health);

@ -12,10 +12,10 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
import org.bukkit.projectiles.ProjectileSource; import org.bukkit.projectiles.ProjectileSource;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import java.util.function.BiConsumer;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -28,7 +28,7 @@ public class Messenger {
} }
private List<Player> playersToSendLogs(){ private List<Player> playersToSendLogs(){
List<Player> players = new ArrayList<>(Bukkit.getOnlinePlayers()); List<Player> players = Sharehealth.GetPlayers();
players.removeIf(p -> !Sharehealth.Instance.getLogging(p)); players.removeIf(p -> !Sharehealth.Instance.getLogging(p));
return players; return players;
} }
@ -43,7 +43,7 @@ public class Messenger {
void sendFailedMessage(Player cause){ void sendFailedMessage(Player cause){
String playerName = getPlayerName(cause); String playerName = getPlayerName(cause);
String message = "Mission failed, go next! CAUSE: " + ChatColor.RED + playerName; String message = "Mission failed, go next! CAUSE: " + ChatColor.RED + playerName;
Bukkit.getOnlinePlayers().forEach(p -> p.sendMessage(message)); Sharehealth.GetPlayers().forEach(p -> p.sendMessage(message));
} }
void onPlayerGotDamageMessage(Player player, double damage, DamageCause cause){ void onPlayerGotDamageMessage(Player player, double damage, DamageCause cause){
@ -131,7 +131,7 @@ public class Messenger {
return stats.toString(); return stats.toString();
} }
String helpMessage(Map<List<String>, Pair<Consumer<CommandSender>, String>> commands){ String helpMessage(Map<List<String>, Pair<BiConsumer<CommandSender, String>, String>> commands){
StringBuilder helpMessage = new StringBuilder("Usage:"); StringBuilder helpMessage = new StringBuilder("Usage:");
commands.forEach((nameList, pair) -> { commands.forEach((nameList, pair) -> {
StringBuilder name = new StringBuilder(); StringBuilder name = new StringBuilder();

@ -17,6 +17,7 @@ public class Sharehealth extends JavaPlugin {
static Sharehealth Instance; static Sharehealth Instance;
private FileManager fileManager; private FileManager fileManager;
public FileManager getFileManager(){ public FileManager getFileManager(){
return fileManager; return fileManager;
} }
@ -66,9 +67,12 @@ public class Sharehealth extends JavaPlugin {
statistics = new Statistics(fileManager.loadStatistics(), fileManager.loadSettings()); statistics = new Statistics(fileManager.loadStatistics(), fileManager.loadSettings());
getLogger().info("Statistics and Settings loaded"); getLogger().info("Statistics and Settings loaded");
//Load status (current health, absorption, etc)
loadStatus(); loadStatus();
getLogger().info("Status loaded"); getLogger().info("Status loaded");
//Load players
ActiveUUIDs = fileManager.loadPlayers();
//Starts custom health regeneration //Starts custom health regeneration
new FoodRegeneration(); new FoodRegeneration();
@ -171,7 +175,7 @@ public class Sharehealth extends JavaPlugin {
return; return;
isFailed = true; isFailed = true;
messenger.sendFailedMessage(cause); messenger.sendFailedMessage(cause);
Bukkit.getOnlinePlayers().forEach(p -> p.setGameMode(GameMode.SPECTATOR)); GetPlayers().forEach(p -> p.setGameMode(GameMode.SPECTATOR));
saveStatus(); saveStatus();
} }
@ -182,7 +186,7 @@ public class Sharehealth extends JavaPlugin {
statistics.reset(); statistics.reset();
fileManager.saveStatistics(statistics.getStatistics()); fileManager.saveStatistics(statistics.getStatistics());
healthManager.reset(); healthManager.reset();
Bukkit.getOnlinePlayers().forEach(p -> p.setGameMode(GameMode.SURVIVAL)); Sharehealth.GetPlayers().forEach(p -> p.setGameMode(GameMode.SURVIVAL));
saveStatus(); saveStatus();
} }
@ -195,10 +199,21 @@ public class Sharehealth extends JavaPlugin {
} }
} }
static List<Player> GetAlivePlayers(){ private static List<UUID> ActiveUUIDs = new ArrayList<>();
List<Player> list = new ArrayList<>(Bukkit.getOnlinePlayers()); static List<Player> GetPlayers(){
list.removeIf(Entity::isDead); List<Player> players = new ArrayList<>(Bukkit.getOnlinePlayers());
return list; players.removeIf(p -> !ActiveUUIDs.contains(p.getUniqueId()));
return players;
}
public void addPlayer(UUID uuid){
ActiveUUIDs.add(uuid);
fileManager.savePlayers(ActiveUUIDs);
}
public void removePlayer(UUID uuid){
ActiveUUIDs.remove(uuid);
fileManager.savePlayers(ActiveUUIDs);
} }
void saveStatus(){ void saveStatus(){

@ -1,6 +1,5 @@
package com.benjocraeft.sharehealth; package com.benjocraeft.sharehealth;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.HashMap; import java.util.HashMap;
@ -59,7 +58,7 @@ public class Statistics {
void reset(){ void reset(){
statistics.clear(); statistics.clear();
Bukkit.getOnlinePlayers().forEach(this::putIfAbsent); Sharehealth.GetPlayers().forEach(this::putIfAbsent);
} }
} }

Loading…
Cancel
Save