From af1ca7831d3abf6170216ddfea8ae7945bafd903 Mon Sep 17 00:00:00 2001 From: Koopa <115321970+KoopaCode@users.noreply.github.com> Date: Mon, 30 Dec 2024 19:52:57 -0500 Subject: [PATCH] 1.0.1 Release Fix! --- .idea/.gitignore | 8 ++++ .idea/encodings.xml | 7 +++ .idea/misc.xml | 14 ++++++ pom.xml | 2 +- spigot/url | 2 +- .../listeners/PlayerListener.java | 28 ++++++----- .../lifestealcore/managers/BanManager.java | 25 ++++++++-- .../lifestealcore/managers/HeartManager.java | 46 +++++++++++++++++-- src/main/resources/plugin.yml | 2 +- version/versioncheck | 2 +- 10 files changed, 112 insertions(+), 24 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..82dbec8 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 75a3469..44e206b 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.koopa lifestealcore - 1.0.0 + 1.0.1 jar LifeStealCore diff --git a/spigot/url b/spigot/url index 2a02d41..906699e 100644 --- a/spigot/url +++ b/spigot/url @@ -1 +1 @@ -TEST +https://www.spigotmc.org/resources/lifesteal-core-1-13-1-20-4.121599/ \ No newline at end of file diff --git a/src/main/java/com/koopa/lifestealcore/listeners/PlayerListener.java b/src/main/java/com/koopa/lifestealcore/listeners/PlayerListener.java index ce75bb2..1b5bf5e 100644 --- a/src/main/java/com/koopa/lifestealcore/listeners/PlayerListener.java +++ b/src/main/java/com/koopa/lifestealcore/listeners/PlayerListener.java @@ -24,6 +24,7 @@ public class PlayerListener implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); + // Load their hearts from hearts.yml and update their health plugin.getHeartManager().updatePlayerMaxHealth(player); } @@ -31,20 +32,25 @@ public class PlayerListener implements Listener { public void onPlayerDeath(PlayerDeathEvent event) { Player victim = event.getEntity(); Player killer = victim.getKiller(); + int victimHearts = plugin.getHeartManager().getPlayerHearts(victim); - if (killer != null && killer != victim) { - int victimHearts = plugin.getHeartManager().getPlayerHearts(victim); - int killerHearts = plugin.getHeartManager().getPlayerHearts(killer); - - if (victimHearts > plugin.getConfig().getInt("settings.min-hearts")) { - plugin.getHeartManager().setPlayerHearts(victim, victimHearts - 1); - plugin.getHeartManager().setPlayerHearts(killer, killerHearts + 1); - killer.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 100, 1)); - } + // Check if this is their last heart + if (victimHearts <= 1) { + // Ban them but keep minimum health for game mechanics + plugin.getBanManager().banPlayer(victim, killer); // Ban with dramatic effect + plugin.getHeartManager().setPlayerHearts(victim, 0); // This won't set health to 0 + return; } - // Ban the player - plugin.getBanManager().banPlayer(victim); + // Only lose hearts to player kills + if (killer != null && killer != victim) { + // PvP death - transfer heart + int killerHearts = plugin.getHeartManager().getPlayerHearts(killer); + plugin.getHeartManager().setPlayerHearts(victim, victimHearts - 1); + plugin.getHeartManager().setPlayerHearts(killer, killerHearts + 1); + killer.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 100, 1)); + } + // Non-PvP deaths don't lose hearts unless it was their last heart } @EventHandler diff --git a/src/main/java/com/koopa/lifestealcore/managers/BanManager.java b/src/main/java/com/koopa/lifestealcore/managers/BanManager.java index 76adaba..4d7e133 100644 --- a/src/main/java/com/koopa/lifestealcore/managers/BanManager.java +++ b/src/main/java/com/koopa/lifestealcore/managers/BanManager.java @@ -125,15 +125,32 @@ public class BanManager { Bukkit.broadcastMessage(MessageUtils.color("&c&lBANISHED TO THE SHADOW REALM")); Bukkit.broadcastMessage(""); - // Ban the player + // Add to banned players list + bannedPlayers.put(player.getUniqueId(), true); + banData.set(player.getUniqueId().toString() + ".name", player.getName()); + banData.set(player.getUniqueId().toString() + ".banTime", System.currentTimeMillis()); + saveBanData(); + + // Ban and kick the player Bukkit.getScheduler().runTaskLater(plugin, () -> { + // Ban the player + Bukkit.getBanList(BanList.Type.NAME).addBan( + player.getName(), + MessageUtils.color( + "&c&lYOU HAVE BEEN BANISHED!\n\n" + + "&7You have lost all your hearts...\n" + + "&7Other players must use a Revival Beacon to bring you back!" + ), + null, // No expiry + "LifeSteal System" + ); + + // Kick them with the message player.kickPlayer(MessageUtils.color( "&c&lYOU HAVE BEEN BANISHED!\n\n" + "&7You have lost all your hearts...\n" + - "&7Find a Revival Beacon to return!" + "&7Other players must use a Revival Beacon to bring you back!" )); - plugin.getConfig().set("banned-players." + player.getUniqueId(), true); - plugin.saveConfig(); }, 2L); // Small delay for dramatic effect } diff --git a/src/main/java/com/koopa/lifestealcore/managers/HeartManager.java b/src/main/java/com/koopa/lifestealcore/managers/HeartManager.java index 121b152..ef4eb7c 100644 --- a/src/main/java/com/koopa/lifestealcore/managers/HeartManager.java +++ b/src/main/java/com/koopa/lifestealcore/managers/HeartManager.java @@ -36,6 +36,17 @@ public class HeartManager { } } data = YamlConfiguration.loadConfiguration(dataFile); + + // Load all saved hearts into memory + for (String uuidString : data.getKeys(false)) { + try { + UUID uuid = UUID.fromString(uuidString); + int hearts = data.getInt(uuidString); + playerHearts.put(uuid, hearts); + } catch (IllegalArgumentException e) { + plugin.getLogger().warning("Invalid UUID in hearts.yml: " + uuidString); + } + } } public void saveAllData() { @@ -54,18 +65,43 @@ public class HeartManager { } public int getPlayerHearts(Player player) { - return playerHearts.getOrDefault(player.getUniqueId(), - plugin.getConfig().getInt("settings.default-hearts")); + UUID uuid = player.getUniqueId(); + if (!playerHearts.containsKey(uuid)) { + // If player doesn't have hearts saved, give them default hearts + int defaultHearts = plugin.getConfig().getInt("settings.default-hearts"); + playerHearts.put(uuid, defaultHearts); + savePlayerHearts(uuid); + } + return playerHearts.get(uuid); } public void setPlayerHearts(Player player, int hearts) { - playerHearts.put(player.getUniqueId(), hearts); - updatePlayerMaxHealth(player); + UUID uuid = player.getUniqueId(); + // Ensure minimum of 1 health for game mechanics + hearts = Math.max(0, hearts); + playerHearts.put(uuid, hearts); + savePlayerHearts(uuid); + + if (hearts > 0) { + updatePlayerMaxHealth(player); + } + } + + private void savePlayerHearts(UUID uuid) { + // Save to hearts.yml immediately when changed + data.set(uuid.toString(), playerHearts.get(uuid)); + try { + data.save(dataFile); + } catch (Exception e) { + plugin.getLogger().severe("Could not save hearts data!"); + e.printStackTrace(); + } } public void updatePlayerMaxHealth(Player player) { int hearts = getPlayerHearts(player); - player.setMaxHealth(hearts * 2); + // Minimum of 1 health (0.5 hearts) for the game + player.setMaxHealth(Math.max(1, hearts * 2)); } public void setHearts(UUID uuid, int hearts) { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index bb263ef..7d773dd 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: LifeStealCore -version: '1.0.0' +version: '1.0.1' main: com.koopa.lifestealcore.LifeStealCore api-version: '1.13' author: Koopa diff --git a/version/versioncheck b/version/versioncheck index 3eefcb9..7f20734 100644 --- a/version/versioncheck +++ b/version/versioncheck @@ -1 +1 @@ -1.0.0 +1.0.1 \ No newline at end of file