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 5be5a4a..919d9ac 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 @@ -23,6 +23,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByBlockEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.inventory.EntityEquipment; import org.jetbrains.annotations.NotNull; @@ -206,7 +207,7 @@ public class CombatManager extends Manager { SRPlayer player1 = pm.getPlayer(player.getUniqueId()); if (player1 != null) { - player1.setHealth(player.getHealth() - damage); + player1.setHealth(player.getHealth() - damage, DamageCause.ENTITY_ATTACK); if (player1.getHealth() <= 0) { player.damage(player.getHealth()); } 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 627fcc2..87dcc41 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 @@ -10,8 +10,10 @@ import java.util.List; import java.util.UUID; import me.unurled.sacredrealms.sr.components.attributes.Attribute; import me.unurled.sacredrealms.sr.components.item.Item; +import me.unurled.sacredrealms.sr.events.player.PlayerKillEvent; import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -31,22 +33,15 @@ public class SRPlayer { private double health = 100; @Expose private HashMap attributes = new HashMap<>(); private HashMap> itemAttributes = new HashMap<>(); - @Expose private List potionEffects; - @Expose private Inventory inventory; + @Expose private List potionEffects = new ArrayList<>(); + @Expose private Inventory inventory = null; public SRPlayer(@NotNull UUID uuid) { this.uuid = uuid; - Player player = Bukkit.getPlayer(uuid); - this.inventory = (player != null) ? player.getInventory() : null; - this.itemAttributes = new HashMap<>(); - this.potionEffects = new ArrayList<>(); } public SRPlayer(@NotNull Player player) { this.uuid = player.getUniqueId(); - this.inventory = player.getInventory(); - this.itemAttributes = new HashMap<>(); - this.potionEffects = (List) player.getActivePotionEffects(); } @NotNull @@ -236,7 +231,13 @@ public class SRPlayer { return health; } - public void setHealth(double health) { + public void setHealth(double health, DamageCause cause) { + if (health < 0) { + health = 0; + // kill player + PlayerKillEvent event = new PlayerKillEvent(this, cause); + Bukkit.getPluginManager().callEvent(event); + } this.health = health; } diff --git a/src/main/java/me/unurled/sacredrealms/sr/events/player/PlayerKillEvent.java b/src/main/java/me/unurled/sacredrealms/sr/events/player/PlayerKillEvent.java new file mode 100644 index 0000000..767462f --- /dev/null +++ b/src/main/java/me/unurled/sacredrealms/sr/events/player/PlayerKillEvent.java @@ -0,0 +1,37 @@ +package me.unurled.sacredrealms.sr.events.player; + +import me.unurled.sacredrealms.sr.components.player.SRPlayer; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.jetbrains.annotations.NotNull; + +public class PlayerKillEvent extends Event { + + private static final HandlerList HANDLERS = new HandlerList(); + private final SRPlayer player; + private final DamageCause cause; + + public PlayerKillEvent(SRPlayer player, DamageCause cause) { + super(false); + this.player = player; + this.cause = cause; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + + @Override + public @NotNull HandlerList getHandlers() { + return HANDLERS; + } + + public SRPlayer getPlayer() { + return player; + } + + public DamageCause getCause() { + return cause; + } +} 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 0fa1c10..01f5fae 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java +++ b/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java @@ -56,9 +56,9 @@ public class SRPlayerUtils { } public static void updateActionBar(@NotNull Player p, @NotNull SRPlayer sr) { - double maxHealth = sr.getAttribute(Attribute.HEALTH); - double health = sr.getHealth(); - double mana = sr.getAttribute(Attribute.MANA); + int maxHealth = (int) sr.getAttribute(Attribute.HEALTH); + int health = (int) sr.getHealth(); + int mana = (int) sr.getAttribute(Attribute.MANA); net.kyori.adventure.text.Component text = comp("❤ " + health + "/" + maxHealth + " ❈ " + mana);