diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index ae3c66c..cc6cb9d 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -9,7 +9,7 @@
-
+
\ No newline at end of file
diff --git a/src/main/java/com/benjocraeft/sharehealth/Commands.java b/src/main/java/com/benjocraeft/sharehealth/Commands.java
index da31415..cf80b36 100644
--- a/src/main/java/com/benjocraeft/sharehealth/Commands.java
+++ b/src/main/java/com/benjocraeft/sharehealth/Commands.java
@@ -44,11 +44,17 @@ public class Commands implements TabExecutor {
"Totem of Undying: All players need to hold it."
);
putTotemCommand.apply("fraction").apply((sender, arg) -> commandSetTotemMode(sender, TotemManager.Mode.Fraction)).accept(
- "Totem of Undying: At least fraction * player-count needs to hold it."
+ "Totem of Undying: At least fraction * player-count need to hold it."
);
putTotemCommand.apply("disabled").apply((sender, arg) -> commandSetTotemMode(sender, TotemManager.Mode.Disabled)).accept(
"Totem of Undying: Disabled"
);
+ putTotemCommand.apply("setfraction").apply(this::commandSetTotemFraction).accept(
+ "Totem of Undying: Set amount for mode: fraction."
+ );
+ putTotemCommand.apply("getfraction").apply((sender, arg) -> commandGetTotemFraction(sender)).accept(
+ "Totem of Undying: Get amount for mode: fraction."
+ );
commands.put(
Arrays.asList("log", "on"),
Pair.pair((sender, arg) -> commandSetLogging(sender, true), "Enables Logging.")
@@ -117,18 +123,28 @@ public class Commands implements TabExecutor {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
- List argList = Arrays.asList(args);
- Pair, 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((cmdSender, arg) -> unknownCommand(cmdSender), "");
+ Pair, String> command = getCommand(args);
+
command.first.accept(sender, args.length > 0 ? args[args.length - 1] : "");
return true;
}
+ private Pair, String> getCommand(String[] args){
+ List argList = Arrays.asList(args);
+
+ if (commands.containsKey(argList))
+ return commands.get(argList);
+
+ if (args.length > 1){
+ List argListWithoutLast = argList.subList(0, args.length - 1);
+ if (commands.containsKey(argListWithoutLast))
+ return commands.get(argListWithoutLast);
+ }
+
+ return Pair.pair((cmdSender, arg) -> unknownCommand(cmdSender), "");
+ }
+
private void commandReset(CommandSender sender){
if (!sender.hasPermission("sharehealth.reset")){
sender.sendMessage("You don't have permissions for this command!");
@@ -166,6 +182,27 @@ public class Commands implements TabExecutor {
sender.sendMessage("Set Totem mode to " + mode.name());
}
+ private void commandSetTotemFraction(CommandSender sender, String amountStr){
+ if (!sender.hasPermission("sharehealth.totem")){
+ sender.sendMessage("You don't have permissions for this command!");
+ return;
+ }
+
+ try {
+ double fraction = Double.parseDouble(amountStr);
+ Sharehealth.Instance.getTotemManager().setFractionNeeded(fraction);
+ double newValue = Sharehealth.Instance.getTotemManager().getFractionNeeded();
+ sender.sendMessage("Set totem fraction value to " + newValue);
+ } catch (NumberFormatException e){
+ sender.sendMessage("Provided value was not a number between 0.0 and 1.0!");
+ }
+ }
+
+ private void commandGetTotemFraction(CommandSender sender){
+ double value = Sharehealth.Instance.getTotemManager().getFractionNeeded();
+ sender.sendMessage("Totem fraction value: " + value);
+ }
+
private void commandSetLogging(CommandSender sender, boolean hasLogging){
if (sender instanceof Player){
if (!Sharehealth.GetPlayers().contains(sender))
@@ -184,7 +221,6 @@ public class Commands implements TabExecutor {
String message = "Logging enabled: " + Sharehealth.Instance.getLogging((Player) sender);
sender.sendMessage(message);
}
-
}
private void commandSendStats(CommandSender sender){
diff --git a/src/main/java/com/benjocraeft/sharehealth/Messenger.java b/src/main/java/com/benjocraeft/sharehealth/Messenger.java
index 45985f9..6a514ff 100644
--- a/src/main/java/com/benjocraeft/sharehealth/Messenger.java
+++ b/src/main/java/com/benjocraeft/sharehealth/Messenger.java
@@ -4,19 +4,19 @@ import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.block.Block;
import org.bukkit.command.CommandSender;
-import org.bukkit.projectiles.BlockProjectileSource;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
+import org.bukkit.projectiles.BlockProjectileSource;
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;
public class Messenger {
@@ -132,17 +132,22 @@ public class Messenger {
}
String helpMessage(Map, Pair, String>> commands){
- StringBuilder helpMessage = new StringBuilder("Usage:");
+ List lines = new ArrayList<>();
commands.forEach((nameList, pair) -> {
StringBuilder name = new StringBuilder();
nameList.forEach(str -> name.append(str).append(" "));
String description = pair.second;
- helpMessage.append("\n").
- append(ChatColor.AQUA).append(name).
- append(ChatColor.WHITE).append("-> ").append(description);
+ String message = "\n" +
+ ChatColor.AQUA + name +
+ ChatColor.WHITE + "-> " + description;
+ lines.add(message);
});
- return helpMessage.toString();
+ StringBuilder completeMessage = new StringBuilder("Usage:");
+ for (String line : lines.stream().sorted().toList())
+ completeMessage.append(line);
+
+ return completeMessage.toString();
}
private String getPlayerName(Player player){
diff --git a/src/main/java/com/benjocraeft/sharehealth/Sharehealth.java b/src/main/java/com/benjocraeft/sharehealth/Sharehealth.java
index 8e6d014..e5a584f 100644
--- a/src/main/java/com/benjocraeft/sharehealth/Sharehealth.java
+++ b/src/main/java/com/benjocraeft/sharehealth/Sharehealth.java
@@ -52,6 +52,8 @@ public class Sharehealth extends JavaPlugin {
defaultStatus.put("isFailed", false);
defaultStatus.put("absorptionAmount", 0.);
defaultStatus.put("absorptionDuration", 0);
+ defaultStatus.put("totemMode", 0);
+ defaultStatus.put("totemFraction", 0.5);
}
@Override
@@ -207,7 +209,7 @@ public class Sharehealth extends JavaPlugin {
statistics.reset();
fileManager.saveStatistics(statistics.getStatistics());
healthManager.reset();
- Sharehealth.GetPlayers().forEach(p -> p.setGameMode(GameMode.SURVIVAL));
+ GetPlayers().forEach(p -> p.setGameMode(GameMode.SURVIVAL));
saveStatus();
}
@@ -244,6 +246,8 @@ public class Sharehealth extends JavaPlugin {
map.put("isFailed", isFailed);
map.put("absorptionAmount", healthManager.absorptionManager.amount);
map.put("absorptionDuration", healthManager.absorptionManager.duration);
+ map.put("totemMode", totemManager.getMode().ordinal());
+ map.put("totemFraction", totemManager.getFractionNeeded());
fileManager.saveStatus(map);
}
@@ -260,6 +264,8 @@ public class Sharehealth extends JavaPlugin {
(int)map.get("absorptionDuration"),
(Double)map.get("absorptionAmount")
);
+ totemManager.setMode(TotemManager.Mode.values()[(int)map.get("totemMode")]);
+ totemManager.setFractionNeeded((Double)map.get("totemFraction"));
}
void onLoggingUpdated(Player player, boolean hasLogging){
diff --git a/src/main/java/com/benjocraeft/sharehealth/TotemManager.java b/src/main/java/com/benjocraeft/sharehealth/TotemManager.java
index 0131f4c..edcb521 100644
--- a/src/main/java/com/benjocraeft/sharehealth/TotemManager.java
+++ b/src/main/java/com/benjocraeft/sharehealth/TotemManager.java
@@ -17,12 +17,22 @@ public class TotemManager {
public void setMode(Mode mode){
this.mode = mode;
}
+ public Mode getMode(){
+ return mode;
+ }
//between 0 and 1
private double fractionNeeded;
public void setFractionNeeded(double value){
+ if (value < 0)
+ value = 0;
+ if (value > 1)
+ value = 1;
fractionNeeded = value;
}
+ public double getFractionNeeded() {
+ return fractionNeeded;
+ }
//Determine if enough players hold a totem of undying
public boolean totemCanBeUsed(){