From e7e88031ec4f24b52602600320be35c6f7fe8417 Mon Sep 17 00:00:00 2001 From: obvWolf Date: Sat, 9 Mar 2024 09:10:43 -0600 Subject: [PATCH] Added lore null check and the lifesteal --- build.sh | 7 +-- gradlew | 0 src/main/java/me/trouper/ultrals/UltraLS.java | 13 ++++-- .../ultrals/cmds/GiveHeartCommand.java | 6 +++ .../trouper/ultrals/cmds/ReviveCommand.java | 23 +++++++++- .../me/trouper/ultrals/data/BankStorage.java | 2 +- .../ultrals/data/HeartItemStorage.java | 2 +- .../me/trouper/ultrals/data/MiscStorage.java | 21 +++++++++ .../{JoinEvent.java => PlayerEvents.java} | 27 ++++++++++- .../trouper/ultrals/events/TeleportEvent.java | 19 ++++++++ .../server/functions/BankFunctions.java | 2 +- .../server/functions/DeathFunctions.java | 45 ++++++++++++------- .../server/functions/StealFunctions.java | 13 +++--- src/main/resources/plugin.yml | 9 +++- 14 files changed, 150 insertions(+), 39 deletions(-) mode change 100644 => 100755 build.sh mode change 100644 => 100755 gradlew create mode 100644 src/main/java/me/trouper/ultrals/data/MiscStorage.java rename src/main/java/me/trouper/ultrals/events/{JoinEvent.java => PlayerEvents.java} (52%) create mode 100644 src/main/java/me/trouper/ultrals/events/TeleportEvent.java diff --git a/build.sh b/build.sh old mode 100644 new mode 100755 index 99e4cb1..0126b86 --- a/build.sh +++ b/build.sh @@ -8,9 +8,8 @@ if [ $? -eq 0 ]; then echo "Gradle build successful." # SFTP upload - SFTP_HOST="192.168.1.199" + SFTP_HOST="server" SFTP_USER="trouper" - SFTP_PASSWORD="Trouper12()1" SFTP_REMOTE_DIR="/home/trouper/docker/data/plugins/" # Create a temporary file with a unique name @@ -24,9 +23,7 @@ if [ $? -eq 0 ]; then echo "bye" >> "$TEMP_FILE" # Use sftp non-interactively with the specified commands - sftp -oStrictHostKeyChecking=no -oBatchMode=no -b "$TEMP_FILE" "$SFTP_USER@$SFTP_HOST" < players = new ArrayList<>(); + for (Player player : ServerUtils.players()) { + players.add(player.getName()); + } + b.then(b.arg(players)); } } diff --git a/src/main/java/me/trouper/ultrals/data/BankStorage.java b/src/main/java/me/trouper/ultrals/data/BankStorage.java index e0d00dc..9cd3826 100644 --- a/src/main/java/me/trouper/ultrals/data/BankStorage.java +++ b/src/main/java/me/trouper/ultrals/data/BankStorage.java @@ -11,7 +11,7 @@ public class BankStorage implements JsonSerializable { @Override public File getFile() { - File file = new File("plugins/UltraLS/banks.json"); + File file = new File("plugins/UltraLS/storage/banks.json"); file.getParentFile().mkdirs(); return file; } diff --git a/src/main/java/me/trouper/ultrals/data/HeartItemStorage.java b/src/main/java/me/trouper/ultrals/data/HeartItemStorage.java index 8008eef..58bd255 100644 --- a/src/main/java/me/trouper/ultrals/data/HeartItemStorage.java +++ b/src/main/java/me/trouper/ultrals/data/HeartItemStorage.java @@ -11,7 +11,7 @@ public class HeartItemStorage implements JsonSerializable { @Override public File getFile() { - File file = new File("plugins/UltraLS/heart-item-storage.json"); + File file = new File("plugins/UltraLS/storage/heart-item-storage.json"); file.getParentFile().mkdirs(); return file; } diff --git a/src/main/java/me/trouper/ultrals/data/MiscStorage.java b/src/main/java/me/trouper/ultrals/data/MiscStorage.java new file mode 100644 index 0000000..e05b730 --- /dev/null +++ b/src/main/java/me/trouper/ultrals/data/MiscStorage.java @@ -0,0 +1,21 @@ +package me.trouper.ultrals.data; + +import io.github.itzispyder.pdk.utils.misc.JsonSerializable; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class MiscStorage implements JsonSerializable { + + @Override + public File getFile() { + File file = new File("plugins/UltraLS/storage/misc-storage.json"); + file.getParentFile().mkdirs(); + return file; + } + + public List deadPlayers = new ArrayList<>(); +} diff --git a/src/main/java/me/trouper/ultrals/events/JoinEvent.java b/src/main/java/me/trouper/ultrals/events/PlayerEvents.java similarity index 52% rename from src/main/java/me/trouper/ultrals/events/JoinEvent.java rename to src/main/java/me/trouper/ultrals/events/PlayerEvents.java index c47dc5a..7df7437 100644 --- a/src/main/java/me/trouper/ultrals/events/JoinEvent.java +++ b/src/main/java/me/trouper/ultrals/events/PlayerEvents.java @@ -2,14 +2,17 @@ package me.trouper.ultrals.events; import io.github.itzispyder.pdk.events.CustomListener; import me.trouper.ultrals.UltraLS; +import me.trouper.ultrals.server.functions.DeathFunctions; import me.trouper.ultrals.server.util.Text; import net.kyori.adventure.text.Component; +import org.bukkit.GameMode; import org.bukkit.attribute.Attribute; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; -public class JoinEvent implements CustomListener { +public class PlayerEvents implements CustomListener { @EventHandler public void onFirstJoin(PlayerJoinEvent e) { Player p = e.getPlayer(); @@ -19,6 +22,28 @@ public class JoinEvent implements CustomListener { p.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(UltraLS.config.plugin.startingHP); UltraLS.bank.save(); p.sendMessage(Component.text(Text.prefix("Welcome! Your HeartBank has been initialized correctly."))); + } + @EventHandler + public void onJoin(PlayerJoinEvent e) { + Player p = e.getPlayer(); + if (DeathFunctions.isAlive(p)) return; + + if (UltraLS.config.plugin.deathBan) { + e.joinMessage(Component.text("")); + p.kick(Component.text(Text.color("&c&lYou are dead!\n&7Have someone to revive you or wait for an unban wave"))); + return; + } + + p.setGameMode(GameMode.SPECTATOR); + } + + @EventHandler + public void onLeave(PlayerQuitEvent e) { + Player p = e.getPlayer(); + if (DeathFunctions.isAlive(p)) return; + if (UltraLS.config.plugin.deathBan) { + e.quitMessage(Component.text("")); + } } } diff --git a/src/main/java/me/trouper/ultrals/events/TeleportEvent.java b/src/main/java/me/trouper/ultrals/events/TeleportEvent.java new file mode 100644 index 0000000..0831909 --- /dev/null +++ b/src/main/java/me/trouper/ultrals/events/TeleportEvent.java @@ -0,0 +1,19 @@ +package me.trouper.ultrals.events; + +import io.github.itzispyder.pdk.events.CustomListener; +import me.trouper.ultrals.UltraLS; +import me.trouper.ultrals.server.functions.DeathFunctions; +import me.trouper.ultrals.server.util.Text; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerTeleportEvent; + +public class TeleportEvent implements CustomListener { + + @EventHandler + public void onSpectatorTeleport(PlayerTeleportEvent e) { + if (DeathFunctions.isAlive(e.getPlayer())) return; + if (!e.getCause().equals(PlayerTeleportEvent.TeleportCause.SPECTATE) && !UltraLS.config.plugin.preventSpectatorTeleport) return; + e.getPlayer().sendMessage(Text.prefix("Spectator teleportation has been disabled!")); + e.setCancelled(true); + } +} diff --git a/src/main/java/me/trouper/ultrals/server/functions/BankFunctions.java b/src/main/java/me/trouper/ultrals/server/functions/BankFunctions.java index d825b52..15ac7b0 100644 --- a/src/main/java/me/trouper/ultrals/server/functions/BankFunctions.java +++ b/src/main/java/me/trouper/ultrals/server/functions/BankFunctions.java @@ -77,7 +77,7 @@ public class BankFunctions { public static void depositItem(Player p, boolean toBank) { ItemStack i = p.getInventory().getItemInMainHand(); - + if (i.getLore() == null) return; if (i.hasItemMeta() && i.getItemMeta().hasCustomModelData() && i.getItemMeta().hasLore() && i.getItemMeta().getCustomModelData() != UltraLS.config.plugin.heartModelData) { p.sendMessage(Text.prefix("&cThat item is not a heart!")); return; diff --git a/src/main/java/me/trouper/ultrals/server/functions/DeathFunctions.java b/src/main/java/me/trouper/ultrals/server/functions/DeathFunctions.java index b75968e..72cd6f2 100644 --- a/src/main/java/me/trouper/ultrals/server/functions/DeathFunctions.java +++ b/src/main/java/me/trouper/ultrals/server/functions/DeathFunctions.java @@ -1,33 +1,48 @@ package me.trouper.ultrals.server.functions; import me.trouper.ultrals.UltraLS; -import me.trouper.ultrals.server.util.ServerUtils; import me.trouper.ultrals.server.util.Text; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; -import org.bukkit.GameMode; import org.bukkit.OfflinePlayer; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.Player; public class DeathFunctions { - public static void unBan(OfflinePlayer p, String who) { - ServerUtils.sendCommand(UltraLS.config.plugin.reviveCommand.formatted(p.getName())); - Bukkit.broadcast(Component.text(Text.prefix("&a%s&7 has been revived by &e%s&7!".formatted(p.getName(),who)))); + public static void revive(Player s, OfflinePlayer r) { + if (isAlive(r)) { + s.sendMessage(Text.prefix("You can only revive a dead player!")); + return; + } + + AttributeInstance whoa = s.getAttribute(Attribute.GENERIC_MAX_HEALTH); + + if (whoa.getBaseValue() - UltraLS.config.plugin.heartsFromPlayers < UltraLS.config.plugin.minHP) { + s.sendMessage(Text.prefix("&cYou do not have enough health to revive someone!")); + return; + } + + whoa.setBaseValue(whoa.getBaseValue() - UltraLS.config.plugin.heartsFromPlayers); + UltraLS.misc.deadPlayers.remove(r.getUniqueId().toString()); + UltraLS.misc.save(); } - public static void ban(Player p) { - ServerUtils.sendCommand(UltraLS.config.plugin.deathBanCommand.formatted(p.getName())); - Bukkit.broadcast(Component.text(Text.prefix("&a%s&7 is now dead!".formatted(p.getName())))); + public static void permaKill(Player v, Player k) { + UltraLS.misc.deadPlayers.add(v.getUniqueId().toString()); + UltraLS.misc.save(); + Bukkit.broadcast(Component.text(Text.prefix("&a%s&7 Has been permanently killed by &c%s&7!".formatted( + v.getName(), + k.getName() + )))); + Component message = Component.text(Text.color("&7&lYou have been killed by &c%s&7!")); + if (UltraLS.config.plugin.deathSpectator) message = message.append(Component.text(Text.color("\n&aYou may rejoin to spectate"))); + v.kick(message); } - public static void unSpectator(Player p) { - p.removeScoreboardTag("ULTRALS_dead"); - p.setGameMode(GameMode.SURVIVAL); - } - public static void spectator(Player p) { - p.addScoreboardTag("ULTRALS_dead"); - p.setGameMode(GameMode.SPECTATOR); + public static boolean isAlive(OfflinePlayer p) { + return !UltraLS.misc.deadPlayers.contains(p.getUniqueId().toString()); } } diff --git a/src/main/java/me/trouper/ultrals/server/functions/StealFunctions.java b/src/main/java/me/trouper/ultrals/server/functions/StealFunctions.java index 507ed7b..b75a859 100644 --- a/src/main/java/me/trouper/ultrals/server/functions/StealFunctions.java +++ b/src/main/java/me/trouper/ultrals/server/functions/StealFunctions.java @@ -38,11 +38,11 @@ public class StealFunctions { if (vb - UltraLS.config.plugin.heartsFromPlayers <= 0) { // Victim does not have any hearts in the bank if (defaultBar) { - v.sendMessage("Your bank was empty! Hearts will been taken from your bar."); + v.sendMessage(Text.prefix("Your bank was empty! Hearts will been taken from your bar.")); stealFromBar(v,k,false); return; } - v.sendMessage("Your bank was empty!"); + v.sendMessage(Text.prefix("Your bank was empty!")); return; } @@ -76,17 +76,14 @@ public class StealFunctions { if (vh.getBaseValue() - UltraLS.config.plugin.heartsFromPlayers <= UltraLS.config.plugin.minHP && !UltraLS.config.plugin.deathBan && !UltraLS.config.plugin.deathSpectator) { // Victim does not have any hearts in their health bar, and the plugin is set to not spectator, or not ban them if (defaultBank) { - v.sendMessage("You dont have enough hearts in your health bar! Hearts will been taken from your bank."); + v.sendMessage("You don't have enough hearts in your health bar! Hearts will been taken from your bank."); stealFromBank(v,k,false); return; } v.sendMessage("Your health bar does not have enough hearts to be stolen from."); return; - } else if (vh.getBaseValue() - UltraLS.config.plugin.heartsFromPlayers <= UltraLS.config.plugin.minHP && UltraLS.config.plugin.deathBan) { - DeathFunctions.ban(v); - return; // Return, because we don't want to make them have negative hearts when they rejoin - } else if (vh.getBaseValue() - UltraLS.config.plugin.heartsFromPlayers <= UltraLS.config.plugin.minHP && UltraLS.config.plugin.deathSpectator) { - DeathFunctions.spectator(v); + } else if (vh.getBaseValue() - UltraLS.config.plugin.heartsFromPlayers <= UltraLS.config.plugin.minHP ) { + DeathFunctions.permaKill(v,k); return; } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ac95c4f..6f859f4 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -32,4 +32,11 @@ commands: description: Give hearts to players permission: ultrals.giveheart usage: /giveheart [from your; bank|bar] [to their; bank|bar] - + aliases: + - gh + - givelife + - gl + revive: + description: Revive a player for the cost of a player death + permission: ultrals.revive + usage: /revive