From dd665fd4552ab392fd1c03b70b6b6c7d4fbb1096 Mon Sep 17 00:00:00 2001 From: unurled Date: Thu, 14 Mar 2024 17:40:09 +0100 Subject: [PATCH] action bar + health management --- .../sr/components/combat/CombatManager.java | 8 +++++++- .../sr/components/player/PlayerManager.java | 15 ++++++++++++++- .../sr/components/player/SRPlayer.java | 9 +++++++++ .../sacredrealms/sr/utils/SRPlayerUtils.java | 6 ++++-- 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/combat/CombatManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/combat/CombatManager.java index dc6fcff..19a40ec 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/combat/CombatManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/combat/CombatManager.java @@ -158,7 +158,13 @@ public class CombatManager extends Manager { player.damage(damage); SRPlayer player1 = pm.getPlayer(player.getUniqueId()); - if (player1 != null) updateActionBar(player, player1); + if (player1 != null) { + player1.setHealth(player.getHealth() - damage); + if (player1.getHealth() <= 0) { + player.damage(player.getHealth()); + } + updateActionBar(player, player1); + } // TODO: check for status effects (apply status effects depending item of damager) } diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/player/PlayerManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/player/PlayerManager.java index a640d3e..78ef734 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/player/PlayerManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/player/PlayerManager.java @@ -8,6 +8,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.util.HashMap; import java.util.UUID; +import me.unurled.sacredrealms.sr.SR; import me.unurled.sacredrealms.sr.data.DataHandler; import me.unurled.sacredrealms.sr.data.DataManager; import me.unurled.sacredrealms.sr.data.gson.InventoryDeserializer; @@ -16,6 +17,7 @@ import me.unurled.sacredrealms.sr.data.gson.PotionEffectDeserializer; import me.unurled.sacredrealms.sr.data.gson.PotionEffectSerializer; import me.unurled.sacredrealms.sr.managers.Manager; import me.unurled.sacredrealms.sr.utils.Items; +import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerItemHeldEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -23,6 +25,7 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; +import org.bukkit.scheduler.BukkitTask; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -32,9 +35,12 @@ public class PlayerManager extends Manager { private final HashMap players; private DataHandler dh; + private final HashMap actionBarTasks; + public PlayerManager() { super(); players = new HashMap<>(); + actionBarTasks = new HashMap<>(); } /** Save the data */ @@ -109,8 +115,12 @@ public class PlayerManager extends Manager { e.getPlayer().getInventory().clear(); e.getPlayer().getInventory().setContents(srPlayer.getInventory().getContents()); - updateActionBar(e.getPlayer(), srPlayer); + BukkitTask task = + Bukkit.getScheduler() + .runTaskTimerAsynchronously( + SR.getInstance(), () -> updateActionBar(e.getPlayer(), srPlayer), 0, 20L); + actionBarTasks.put(e.getPlayer().getUniqueId(), task); e.getPlayer().updateInventory(); } @@ -148,6 +158,9 @@ public class PlayerManager extends Manager { // save for player savePlayer(player); + actionBarTasks.get(e.getPlayer().getUniqueId()).cancel(); + actionBarTasks.remove(e.getPlayer().getUniqueId()); + removePlayer(e.getPlayer().getUniqueId()); } diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/player/SRPlayer.java b/src/main/java/me/unurled/sacredrealms/sr/components/player/SRPlayer.java index ef474d6..c0946b9 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/player/SRPlayer.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/player/SRPlayer.java @@ -24,6 +24,7 @@ public class SRPlayer { @Expose private UUID uuid = null; @Expose private int level = 0; + private double health = 100; @Expose private HashMap attributes = new HashMap<>(); private HashMap> itemAttributes = new HashMap<>(); @Expose private List potionEffects; @@ -226,4 +227,12 @@ public class SRPlayer { public void setLevel(int i) { level = i; } + + public double getHealth() { + return health; + } + + public void setHealth(double health) { + this.health = health; + } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java b/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java index 3730488..ebf618d 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java +++ b/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java @@ -50,10 +50,12 @@ public class SRPlayerUtils { } public static void updateActionBar(@NotNull Player p, @NotNull SRPlayer sr) { - double health = sr.getAttribute(Attribute.HEALTH); + double maxHealth = sr.getAttribute(Attribute.HEALTH); + double health = sr.getHealth(); double mana = sr.getAttribute(Attribute.MANA); - net.kyori.adventure.text.Component text = comp("❤ " + health + " ❈ " + mana); + net.kyori.adventure.text.Component text = + comp("❤ " + health + "/" + maxHealth + " ❈ " + mana); p.sendActionBar(text); } }