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. 42
      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.entity.Player;
import java.util.ArrayList;
import java.util.List;
public class AbsorptionManager {
@ -28,7 +27,7 @@ public class AbsorptionManager {
}
private void onSecond(){
if (Bukkit.getOnlinePlayers().size() == 0)
if (Sharehealth.GetPlayers().size() == 0)
return;
duration -= 20;
@ -55,7 +54,7 @@ public class AbsorptionManager {
amount = 0;
}
this.amount = amount;
List<Player> players = new ArrayList<>(Bukkit.getOnlinePlayers());
List<Player> players = Sharehealth.GetPlayers();
players.remove(player);
players.forEach(this::setAbsorption);
}

@ -1,5 +1,7 @@
package com.benjocraeft.sharehealth;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
@ -7,39 +9,48 @@ import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
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(
Arrays.asList("get"),
Pair.pair(this::commandGetHealth, "Displays current health value.")
Pair.pair((sender, arg) -> commandGetHealth(sender), "Displays current health value.")
);
commands.put(
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(
Arrays.asList("log", "on"),
Pair.pair(sender -> this.commandSetLogging(sender, true), "Enables Logging.")
Pair.pair((sender, arg) -> commandSetLogging(sender, true), "Enables Logging.")
);
commands.put(
Arrays.asList("log", "off"),
Pair.pair(sender -> this.commandSetLogging(sender, false), "Disables Logging.")
Pair.pair((sender, arg) -> commandSetLogging(sender, false), "Disables Logging.")
);
commands.put(
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(
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(
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){
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)
command = Pair.pair(this::unknownCommand, "");
command.first.accept(sender);
command = Pair.pair((cmdSender, arg) -> unknownCommand(cmdSender), "");
command.first.accept(sender, args.length > 0 ? args[args.length - 1] : "");
return true;
}
@ -106,6 +120,21 @@ public class Commands implements TabExecutor {
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){
String message = "Current health: " + Sharehealth.Instance.getHealthManager().getHealthString();
sender.sendMessage(message);

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

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

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

@ -12,10 +12,10 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
import org.bukkit.projectiles.ProjectileSource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.logging.Logger;
@ -28,7 +28,7 @@ public class Messenger {
}
private List<Player> playersToSendLogs(){
List<Player> players = new ArrayList<>(Bukkit.getOnlinePlayers());
List<Player> players = Sharehealth.GetPlayers();
players.removeIf(p -> !Sharehealth.Instance.getLogging(p));
return players;
}
@ -43,7 +43,7 @@ public class Messenger {
void sendFailedMessage(Player cause){
String playerName = getPlayerName(cause);
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){
@ -131,7 +131,7 @@ public class Messenger {
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:");
commands.forEach((nameList, pair) -> {
StringBuilder name = new StringBuilder();

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

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

Loading…
Cancel
Save