From ec8a489d172ce9b8c640d95ebe6ef3f47abfe270 Mon Sep 17 00:00:00 2001 From: R00tB33rMan <36140389+R00tB33rMan@users.noreply.github.com> Date: Wed, 22 Apr 2026 09:55:38 -0400 Subject: [PATCH 1/5] Impl. base Maven from PR --- pom.xml | 56 +++++++++++++++++++ .../github/aasmus/pvptoggle/PvPCommand.java | 13 +++++ .../github/aasmus/pvptoggle/PvPToggle.java | 1 + .../pvptoggle/events/PVPToggleEvent.java | 35 ++++++++++++ .../listeners/PlayerChangeWorld.java | 4 ++ .../pvptoggle/listeners/PlayerJoin.java | 0 .../pvptoggle/listeners/PlayerLeave.java | 0 .../aasmus/pvptoggle/listeners/PvP.java | 0 .../github/aasmus/pvptoggle/utils/Chat.java | 0 .../pvptoggle/utils/PersistentData.java | 0 .../pvptoggle/utils/PlaceholderAPIHook.java | 0 .../github/aasmus/pvptoggle/utils/Util.java | 0 src/{ => main}/resources/config.yml | 0 src/{ => main}/resources/plugin.yml | 2 +- 14 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 pom.xml rename src/{ => main/java}/com/github/aasmus/pvptoggle/PvPCommand.java (90%) rename src/{ => main/java}/com/github/aasmus/pvptoggle/PvPToggle.java (97%) create mode 100644 src/main/java/com/github/aasmus/pvptoggle/events/PVPToggleEvent.java rename src/{ => main/java}/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java (88%) rename src/{ => main/java}/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java (100%) rename src/{ => main/java}/com/github/aasmus/pvptoggle/listeners/PlayerLeave.java (100%) rename src/{ => main/java}/com/github/aasmus/pvptoggle/listeners/PvP.java (100%) rename src/{ => main/java}/com/github/aasmus/pvptoggle/utils/Chat.java (100%) rename src/{ => main/java}/com/github/aasmus/pvptoggle/utils/PersistentData.java (100%) rename src/{ => main/java}/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.java (100%) rename src/{ => main/java}/com/github/aasmus/pvptoggle/utils/Util.java (100%) rename src/{ => main}/resources/config.yml (100%) rename src/{ => main}/resources/plugin.yml (98%) diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..b59d4e4 --- /dev/null +++ b/pom.xml @@ -0,0 +1,56 @@ + + + 4.0.0 + + com.github.aasmus + PVPToggle + 1.8 + + + 11 + 11 + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + placeholderapi + http://repo.extendedclip.com/content/repositories/placeholderapi/ + + + jitpack.io + https://jitpack.io + + + nametagedit-repo + http://ci.nametagedit.com/plugin/repository/everything/ + + + + + + org.spigotmc + spigot-api + 1.16.1-R0.1-SNAPSHOT + provided + + + me.clip + placeholderapi + 2.10.6 + provided + + + com.github.sgtcaze + NametagEdit + master-SNAPSHOT + provided + + + + \ No newline at end of file diff --git a/src/com/github/aasmus/pvptoggle/PvPCommand.java b/src/main/java/com/github/aasmus/pvptoggle/PvPCommand.java similarity index 90% rename from src/com/github/aasmus/pvptoggle/PvPCommand.java rename to src/main/java/com/github/aasmus/pvptoggle/PvPCommand.java index 5c0465c..ed71a48 100644 --- a/src/com/github/aasmus/pvptoggle/PvPCommand.java +++ b/src/main/java/com/github/aasmus/pvptoggle/PvPCommand.java @@ -1,5 +1,6 @@ package com.github.aasmus.pvptoggle; +import com.github.aasmus.pvptoggle.events.PVPToggleEvent; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -32,6 +33,7 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String } else if(args[0].equals("toggle")) { if(current == true) { if (Util.setPlayerState(other, false, console)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, true)); Chat.send(other, "PVP_STATE_ENABLED"); if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(other.getPlayer()); @@ -42,11 +44,13 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String } } else { if (Util.setPlayerState(other, true, console)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, false)); Chat.send(other, "PVP_STATE_DISABLED"); } } } else if(args[0].equalsIgnoreCase("on")) { if (Util.setPlayerState(other, false, console)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, true)); Chat.send(other, "PVP_STATE_ENABLED"); if (current == true) { if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { @@ -59,6 +63,7 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String } } else if(args[0].equalsIgnoreCase("off")) { if (Util.setPlayerState(other, true, console)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, false)); Chat.send(other, "PVP_STATE_DISABLED"); if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { Util.ChangeNametag(other.getPlayer(), "reset"); @@ -96,6 +101,7 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String if(current == true) { Util.setCooldownTime(p); if (Util.setPlayerState(p, false, p)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(p, true)); Chat.send(p, "PVP_STATE_ENABLED"); if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(p.getPlayer()); @@ -105,12 +111,14 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String } } else { if (Util.setPlayerState(p, true, p)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(p, false)); Chat.send(p, "PVP_STATE_DISABLED"); } } } else if(args[0].equalsIgnoreCase("on")) { Util.setCooldownTime(p); if (Util.setPlayerState(p, false, p)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(p, true)); Chat.send(p, "PVP_STATE_ENABLED"); if (current == true) { if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { @@ -123,6 +131,7 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String } } else if(args[0].equalsIgnoreCase("off")) { if (Util.setPlayerState(p, true, p)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(p, false)); Chat.send(p, "PVP_STATE_DISABLED"); if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { Util.ChangeNametag(p.getPlayer(), "reset"); @@ -158,6 +167,7 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String if(args[0].equals("toggle")) { if(current == true) { if (Util.setPlayerState(other, false, sender)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, true)); Chat.send(other, "PVP_STATE_ENABLED"); if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(other.getPlayer()); @@ -168,11 +178,13 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String } } else { if (Util.setPlayerState(other, true, sender)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, false)); Chat.send(other, "PVP_STATE_DISABLED"); } } } else if(args[0].equalsIgnoreCase("on")) { if (Util.setPlayerState(other, false, sender)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, true)); if (current == true) { if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(other.getPlayer()); @@ -185,6 +197,7 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String } } else if(args[0].equalsIgnoreCase("off")) { if (Util.setPlayerState(other, true, sender)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, false)); Chat.send(other, "PVP_STATE_DISABLED"); if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { Util.ChangeNametag(other.getPlayer(), "reset"); diff --git a/src/com/github/aasmus/pvptoggle/PvPToggle.java b/src/main/java/com/github/aasmus/pvptoggle/PvPToggle.java similarity index 97% rename from src/com/github/aasmus/pvptoggle/PvPToggle.java rename to src/main/java/com/github/aasmus/pvptoggle/PvPToggle.java index d07db60..48d8d56 100644 --- a/src/com/github/aasmus/pvptoggle/PvPToggle.java +++ b/src/main/java/com/github/aasmus/pvptoggle/PvPToggle.java @@ -11,6 +11,7 @@ import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; +import com.github.aasmus.pvptoggle.events.PVPToggleEvent; import com.github.aasmus.pvptoggle.listeners.PlayerJoin; import com.github.aasmus.pvptoggle.listeners.PlayerLeave; import com.github.aasmus.pvptoggle.listeners.PvP; diff --git a/src/main/java/com/github/aasmus/pvptoggle/events/PVPToggleEvent.java b/src/main/java/com/github/aasmus/pvptoggle/events/PVPToggleEvent.java new file mode 100644 index 0000000..2c32fac --- /dev/null +++ b/src/main/java/com/github/aasmus/pvptoggle/events/PVPToggleEvent.java @@ -0,0 +1,35 @@ +package com.github.aasmus.pvptoggle.events; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.bukkit.entity.Player; + +public class PVPToggleEvent extends Event { + + private final Player player; + private final boolean pvp; + + public PVPToggleEvent(Player player, boolean pvp) { + this.player = player; + this.pvp = pvp; + } + + private static final HandlerList HANDLERS = new HandlerList(); + + public HandlerList getHandlers() { + return HANDLERS; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + + public Player getPlayer() { + return this.player; + } + + public boolean getPVP() { + return this.pvp; + } + +} \ No newline at end of file diff --git a/src/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java similarity index 88% rename from src/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java rename to src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java index d41ca1f..7e9207e 100644 --- a/src/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java +++ b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java @@ -1,8 +1,10 @@ package com.github.aasmus.pvptoggle.listeners; import com.github.aasmus.pvptoggle.PvPToggle; +import com.github.aasmus.pvptoggle.events.PVPToggleEvent; import com.github.aasmus.pvptoggle.utils.Chat; import com.github.aasmus.pvptoggle.utils.Util; +import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -19,6 +21,7 @@ public void onChangeWorld(PlayerChangedWorldEvent event) { // If PVP isn't enabled in the world but the player has it enabled, disable it. if (!world.getPVP() && playerPvpEnabled) { Util.setPlayerState(player.getUniqueId(), true); + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player, false)); Chat.send(player, "PVP_WORLD_CHANGE_DISABLED"); /*if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(player); @@ -32,6 +35,7 @@ public void onChangeWorld(PlayerChangedWorldEvent event) { // If PVP is required (i.e. the world has PVP enabled and it is in the blocked worlds) and the player has it disabled, enable it. if (player.getWorld().getPVP() && PvPToggle.blockedWorlds.contains(world.getName()) && !playerPvpEnabled) { Util.setPlayerState(player.getUniqueId(), false); + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player, true)); Chat.send(player, "PVP_WORLD_CHANGE_REQUIRED"); if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(player); diff --git a/src/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java similarity index 100% rename from src/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java rename to src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java diff --git a/src/com/github/aasmus/pvptoggle/listeners/PlayerLeave.java b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerLeave.java similarity index 100% rename from src/com/github/aasmus/pvptoggle/listeners/PlayerLeave.java rename to src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerLeave.java diff --git a/src/com/github/aasmus/pvptoggle/listeners/PvP.java b/src/main/java/com/github/aasmus/pvptoggle/listeners/PvP.java similarity index 100% rename from src/com/github/aasmus/pvptoggle/listeners/PvP.java rename to src/main/java/com/github/aasmus/pvptoggle/listeners/PvP.java diff --git a/src/com/github/aasmus/pvptoggle/utils/Chat.java b/src/main/java/com/github/aasmus/pvptoggle/utils/Chat.java similarity index 100% rename from src/com/github/aasmus/pvptoggle/utils/Chat.java rename to src/main/java/com/github/aasmus/pvptoggle/utils/Chat.java diff --git a/src/com/github/aasmus/pvptoggle/utils/PersistentData.java b/src/main/java/com/github/aasmus/pvptoggle/utils/PersistentData.java similarity index 100% rename from src/com/github/aasmus/pvptoggle/utils/PersistentData.java rename to src/main/java/com/github/aasmus/pvptoggle/utils/PersistentData.java diff --git a/src/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.java b/src/main/java/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.java similarity index 100% rename from src/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.java rename to src/main/java/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.java diff --git a/src/com/github/aasmus/pvptoggle/utils/Util.java b/src/main/java/com/github/aasmus/pvptoggle/utils/Util.java similarity index 100% rename from src/com/github/aasmus/pvptoggle/utils/Util.java rename to src/main/java/com/github/aasmus/pvptoggle/utils/Util.java diff --git a/src/resources/config.yml b/src/main/resources/config.yml similarity index 100% rename from src/resources/config.yml rename to src/main/resources/config.yml diff --git a/src/resources/plugin.yml b/src/main/resources/plugin.yml similarity index 98% rename from src/resources/plugin.yml rename to src/main/resources/plugin.yml index 40c764d..166a89e 100644 --- a/src/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ main: com.github.aasmus.pvptoggle.PvPToggle softdepend: [PlaceholderAPI, NametagEdit] name: PvPToggle -version: 1.7 +version: 1.8 api-version: 1.13 author: aasmus (with modifications by the Red Fusion Team) description: Plugin that allows players to toggle PvP state From afeb6fbba6ff02f93cd2dd35f0b5424fe31ecabe Mon Sep 17 00:00:00 2001 From: RootBeer Date: Wed, 22 Apr 2026 10:49:57 -0400 Subject: [PATCH 2/5] Folia Support + deprecation elimination in most places --- pom.xml | 39 ++-- .../github/aasmus/pvptoggle/PvPCommand.java | 179 ++++++++---------- .../github/aasmus/pvptoggle/PvPToggle.java | 52 ++--- .../pvptoggle/events/PVPToggleEvent.java | 14 +- .../listeners/PlayerChangeWorld.java | 48 ++--- .../pvptoggle/listeners/PlayerJoin.java | 72 +++---- .../pvptoggle/listeners/PlayerLeave.java | 4 +- .../aasmus/pvptoggle/listeners/PvP.java | 115 +++++------ .../github/aasmus/pvptoggle/utils/Chat.java | 32 ++-- .../pvptoggle/utils/PersistentData.java | 13 +- .../pvptoggle/utils/PlaceholderAPIHook.java | 24 +-- .../github/aasmus/pvptoggle/utils/Util.java | 101 ++++------ src/main/resources/config.yml | 6 +- src/main/resources/plugin.yml | 9 +- 14 files changed, 308 insertions(+), 400 deletions(-) diff --git a/pom.xml b/pom.xml index b59d4e4..17bdb6a 100644 --- a/pom.xml +++ b/pom.xml @@ -9,48 +9,41 @@ 1.8 - 11 - 11 + 21 + 21 - spigot-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - - placeholderapi - http://repo.extendedclip.com/content/repositories/placeholderapi/ + papermc + https://repo.papermc.io/repository/maven-public/ + - jitpack.io - https://jitpack.io + canvasmc + https://maven.canvasmc.io/snapshots + - nametagedit-repo - http://ci.nametagedit.com/plugin/repository/everything/ + placeholderapi + https://repo.extendedclip.com/content/repositories/placeholderapi/ - org.spigotmc - spigot-api - 1.16.1-R0.1-SNAPSHOT + io.canvasmc.canvas + canvas-api + 1.21.11-R0.1-SNAPSHOT provided + me.clip placeholderapi - 2.10.6 - provided - - - com.github.sgtcaze - NametagEdit - master-SNAPSHOT + 2.12.2 provided - \ No newline at end of file + diff --git a/src/main/java/com/github/aasmus/pvptoggle/PvPCommand.java b/src/main/java/com/github/aasmus/pvptoggle/PvPCommand.java index ed71a48..5f42a62 100644 --- a/src/main/java/com/github/aasmus/pvptoggle/PvPCommand.java +++ b/src/main/java/com/github/aasmus/pvptoggle/PvPCommand.java @@ -10,64 +10,55 @@ import com.github.aasmus.pvptoggle.utils.Chat; import com.github.aasmus.pvptoggle.utils.Util; +import org.jspecify.annotations.NonNull; public class PvPCommand implements CommandExecutor { @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if(sender instanceof ConsoleCommandSender) { //check if command sender is console - ConsoleCommandSender console = (ConsoleCommandSender) sender; - if(args.length == 0) { + public boolean onCommand(@NonNull CommandSender sender, @NonNull Command cmd, @NonNull String label, String @NonNull [] args) { + if (sender instanceof ConsoleCommandSender console) { //check if command sender is console + if (args.length == 0) { Chat.send(console, "HELP_HEADER"); Chat.send(console, "HELP_SET_OTHERS"); } else { try { Player other = Bukkit.getPlayerExact(args[1]); - if(other == null) { //make sure the player is online + if (other == null) { //make sure the player is online Chat.send(console, "NO_PLAYER", args[1]); } else { //set pvp state Boolean current = PvPToggle.instance.players.get(other.getUniqueId()); - if(args[0].equals("reload")) { + if (args[0].equals("reload")) { reloadConfig(); return true; - } else if(args[0].equals("toggle")) { - if(current == true) { + } else if (args[0].equals("toggle")) { + if (current == true) { if (Util.setPlayerState(other, false, console)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, true)); + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); Chat.send(other, "PVP_STATE_ENABLED"); if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(other.getPlayer()); } - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { - Util.ChangeNametag(other.getPlayer(), "&c"); - } } } else { if (Util.setPlayerState(other, true, console)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, false)); + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); Chat.send(other, "PVP_STATE_DISABLED"); } } - } else if(args[0].equalsIgnoreCase("on")) { + } else if (args[0].equalsIgnoreCase("on")) { if (Util.setPlayerState(other, false, console)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, true)); + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); Chat.send(other, "PVP_STATE_ENABLED"); if (current == true) { - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { + if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(other.getPlayer()); } - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { - Util.ChangeNametag(other.getPlayer(), "&c"); - } } } - } else if(args[0].equalsIgnoreCase("off")) { + } else if (args[0].equalsIgnoreCase("off")) { if (Util.setPlayerState(other, true, console)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, false)); + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); Chat.send(other, "PVP_STATE_DISABLED"); - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { - Util.ChangeNametag(other.getPlayer(), "reset"); - } } } current = PvPToggle.instance.players.get(other.getUniqueId()); @@ -77,138 +68,119 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String //nothing needs to be done } } - } else if(sender instanceof Player) { //check if command sender is player - if(cmd.getName().equalsIgnoreCase("pvp")) { - Player p = (Player) sender; - if(args.length == 0) { - Chat.send(p, "PVP_STATUS", null, PvPToggle.instance.players.get(p.getUniqueId())); - Chat.send(p, "HELP_HEADER"); - Chat.send(p, "HELP_GENERAL_USEAGE"); - if(p.hasPermission("pvptoggle.others")) - Chat.send(p, "HELP_VIEW_OTHERS"); - if(p.hasPermission("pvptoggle.others.set")) - Chat.send(p, "HELP_SET_OTHERS"); - } else if(args.length == 1) { - if(args[0].equals("reload") && p.hasPermission("pvptoggle.reload")) { + } else if (sender instanceof Player player) { //check if command sender is player + if (cmd.getName().equalsIgnoreCase("pvp")) { + if (args.length == 0) { + Chat.send(player, "PVP_STATUS", null, PvPToggle.instance.players.get(player.getUniqueId())); + Chat.send(player, "HELP_HEADER"); + Chat.send(player, "HELP_GENERAL_USEAGE"); + if (player.hasPermission("pvptoggle.others")) + Chat.send(player, "HELP_VIEW_OTHERS"); + if (player.hasPermission("pvptoggle.others.set")) + Chat.send(player, "HELP_SET_OTHERS"); + } else if (args.length == 1) { + if (args[0].equals("reload") && player.hasPermission("pvptoggle.reload")) { reloadConfig(); return true; } - if(p.hasPermission("pvptoggle.allow")) { - - if(Util.getCooldown(p) == false || p.hasPermission("pvptoggle.bypass")) { - Boolean current = PvPToggle.instance.players.get(p.getUniqueId()); - if(args[0].equals("toggle")) { - if(current == true) { - Util.setCooldownTime(p); - if (Util.setPlayerState(p, false, p)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(p, true)); - Chat.send(p, "PVP_STATE_ENABLED"); + + if (player.hasPermission("pvptoggle.allow")) { + if (!Util.getCooldown(player) || player.hasPermission("pvptoggle.bypass")) { + Boolean current = PvPToggle.instance.players.get(player.getUniqueId()); + if (args[0].equals("toggle")) { + if (current == true) { + Util.setCooldownTime(player); + if (Util.setPlayerState(player, false, player)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player)); + Chat.send(player, "PVP_STATE_ENABLED"); if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { - Util.particleEffect(p.getPlayer()); + Util.particleEffect(player.getPlayer()); } - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { - Util.ChangeNametag(p.getPlayer(), "&c"); } } } else { - if (Util.setPlayerState(p, true, p)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(p, false)); - Chat.send(p, "PVP_STATE_DISABLED"); + if (Util.setPlayerState(player, true, player)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player)); + Chat.send(player, "PVP_STATE_DISABLED"); } } - } else if(args[0].equalsIgnoreCase("on")) { - Util.setCooldownTime(p); - if (Util.setPlayerState(p, false, p)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(p, true)); - Chat.send(p, "PVP_STATE_ENABLED"); + } else if (args[0].equalsIgnoreCase("on")) { + Util.setCooldownTime(player); + if (Util.setPlayerState(player, false, player)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player)); + Chat.send(player, "PVP_STATE_ENABLED"); if (current == true) { - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { - Util.particleEffect(p.getPlayer()); + if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { + Util.particleEffect(player.getPlayer()); } - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { - Util.ChangeNametag(p.getPlayer(), "&c"); - } } } - } else if(args[0].equalsIgnoreCase("off")) { - if (Util.setPlayerState(p, true, p)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(p, false)); - Chat.send(p, "PVP_STATE_DISABLED"); - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { - Util.ChangeNametag(p.getPlayer(), "reset"); - } + } else if (args[0].equalsIgnoreCase("off")) { + if (Util.setPlayerState(player, true, player)) { + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player)); + Chat.send(player, "PVP_STATE_DISABLED"); } - } else if(args[0].equalsIgnoreCase("status")) { - Chat.send(p, "PVP_STATUS", null, current); + } else if (args[0].equalsIgnoreCase("status")) { + Chat.send(player, "PVP_STATUS", null, current); } else { - if(sender.hasPermission("pvptoggle.others")) { + if (sender.hasPermission("pvptoggle.others")) { Player other = Bukkit.getPlayerExact(args[0]); - if(other == null) { - Chat.send(p, "NO_PLAYER", args[0]); + if (other == null) { + Chat.send(player, "NO_PLAYER", args[0]); } else { current = PvPToggle.instance.players.get(other.getUniqueId()); - Chat.send(p, "PVP_STATUS_OTHERS", other.getDisplayName(), current); + Chat.send(player, "PVP_STATUS_OTHERS", other.getDisplayName(), current); } } else { - if(!args[0].contains("\\")) { - Chat.send(p, "COMMAND_INVALID_PARAMETER", args[0]); + if (!args[0].contains("\\")) { + Chat.send(player, "COMMAND_INVALID_PARAMETER", args[0]); } } } } - } - } else if(args.length == 2) { - if(sender.hasPermission("pvptoggle.others.set")) { + } else if (args.length == 2) { + if (sender.hasPermission("pvptoggle.others.set")) { Player other = Bukkit.getPlayerExact(args[1]); - if(other == null) { - Chat.send(p, "NO_PLAYER", args[1]); + if (other == null) { + Chat.send(player, "NO_PLAYER", args[1]); } else { Boolean current = PvPToggle.instance.players.get(other.getUniqueId()); - if(args[0].equals("toggle")) { - if(current == true) { + if (args[0].equals("toggle")) { + if (current == true) { if (Util.setPlayerState(other, false, sender)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, true)); + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); Chat.send(other, "PVP_STATE_ENABLED"); if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(other.getPlayer()); } - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { - Util.ChangeNametag(p.getPlayer(), "&c"); - } } } else { if (Util.setPlayerState(other, true, sender)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, false)); + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); Chat.send(other, "PVP_STATE_DISABLED"); } } - } else if(args[0].equalsIgnoreCase("on")) { + } else if (args[0].equalsIgnoreCase("on")) { if (Util.setPlayerState(other, false, sender)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, true)); + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); if (current == true) { - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { + if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(other.getPlayer()); } - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { - Util.ChangeNametag(p.getPlayer(), "&c"); - } } Chat.send(other, "PVP_STATE_ENABLED"); } - } else if(args[0].equalsIgnoreCase("off")) { + } else if (args[0].equalsIgnoreCase("off")) { if (Util.setPlayerState(other, true, sender)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other, false)); + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); Chat.send(other, "PVP_STATE_DISABLED"); - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { - Util.ChangeNametag(other.getPlayer(), "reset"); - } } } current = PvPToggle.instance.players.get(other.getUniqueId()); - Chat.send(p, "PVP_STATE_CHANGED_OTHERS", other.getDisplayName(), current); + Chat.send(player, "PVP_STATE_CHANGED_OTHERS", other.getDisplayName(), current); } } else { - Chat.send(p, "COMMAND_NO_PERMISSION"); + Chat.send(player, "COMMAND_NO_PERMISSION"); } } } @@ -220,5 +192,4 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String public void reloadConfig() { PvPToggle.instance.reloadConfig(); } - } diff --git a/src/main/java/com/github/aasmus/pvptoggle/PvPToggle.java b/src/main/java/com/github/aasmus/pvptoggle/PvPToggle.java index 48d8d56..3675c40 100644 --- a/src/main/java/com/github/aasmus/pvptoggle/PvPToggle.java +++ b/src/main/java/com/github/aasmus/pvptoggle/PvPToggle.java @@ -1,65 +1,55 @@ package com.github.aasmus.pvptoggle; - import java.io.File; import java.util.Date; -import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.UUID; - +import java.util.concurrent.ConcurrentHashMap; import org.bukkit.Bukkit; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; - -import com.github.aasmus.pvptoggle.events.PVPToggleEvent; import com.github.aasmus.pvptoggle.listeners.PlayerJoin; import com.github.aasmus.pvptoggle.listeners.PlayerLeave; import com.github.aasmus.pvptoggle.listeners.PvP; import com.github.aasmus.pvptoggle.listeners.PlayerChangeWorld; import com.github.aasmus.pvptoggle.utils.PersistentData; import com.github.aasmus.pvptoggle.utils.PlaceholderAPIHook; - public class PvPToggle extends JavaPlugin implements Listener { - - public FileConfiguration config; + public static List blockedWorlds; public static PvPToggle instance; - public HashMap players = new HashMap<>(); //False is pvp on True is pvp off - public HashMap cooldowns = new HashMap<>(); - + + public FileConfiguration config; + + public Map players = new ConcurrentHashMap<>(); // False is PvP on True is PvP off + public Map cooldowns = new ConcurrentHashMap<>(); + public PersistentData dataUtils; - + @Override public void onEnable() { instance = this; this.config = getConfig(); - //save config - if(config != null) { - this.saveDefaultConfig(); - } - - File PVPData = new File(getDataFolder(), "Data"); + // Save config + this.saveDefaultConfig(); + File PVPData = new File(getDataFolder(), "Data"); dataUtils = new PersistentData(PVPData); - - //register events + + // Register events getServer().getPluginManager().registerEvents(this, this); Bukkit.getPluginManager().registerEvents(new PlayerJoin(), this); Bukkit.getPluginManager().registerEvents(new PlayerLeave(), this); Bukkit.getPluginManager().registerEvents(new PvP(), this); Bukkit.getPluginManager().registerEvents(new PlayerChangeWorld(), this); - //register command - this.getCommand("pvp").setExecutor(new PvPCommand()); - + // Register command + Objects.requireNonNull(this.getCommand("pvp")).setExecutor(new PvPCommand()); + blockedWorlds = config.getStringList("SETTINGS.BLOCKED_WORLDS"); - - if(Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { + + if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { new PlaceholderAPIHook(this).register(); } } - - @Override - public void onDisable() { - - } - } diff --git a/src/main/java/com/github/aasmus/pvptoggle/events/PVPToggleEvent.java b/src/main/java/com/github/aasmus/pvptoggle/events/PVPToggleEvent.java index 2c32fac..17f22e8 100644 --- a/src/main/java/com/github/aasmus/pvptoggle/events/PVPToggleEvent.java +++ b/src/main/java/com/github/aasmus/pvptoggle/events/PVPToggleEvent.java @@ -3,20 +3,19 @@ import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.bukkit.entity.Player; +import org.jspecify.annotations.NonNull; public class PVPToggleEvent extends Event { private final Player player; - private final boolean pvp; - public PVPToggleEvent(Player player, boolean pvp) { + public PVPToggleEvent(Player player) { this.player = player; - this.pvp = pvp; } private static final HandlerList HANDLERS = new HandlerList(); - public HandlerList getHandlers() { + public @NonNull HandlerList getHandlers() { return HANDLERS; } @@ -27,9 +26,4 @@ public static HandlerList getHandlerList() { public Player getPlayer() { return this.player; } - - public boolean getPVP() { - return this.pvp; - } - -} \ No newline at end of file +} diff --git a/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java index 7e9207e..736819f 100644 --- a/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java +++ b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java @@ -1,49 +1,53 @@ package com.github.aasmus.pvptoggle.listeners; - import com.github.aasmus.pvptoggle.PvPToggle; import com.github.aasmus.pvptoggle.events.PVPToggleEvent; import com.github.aasmus.pvptoggle.utils.Chat; import com.github.aasmus.pvptoggle.utils.Util; +import io.canvasmc.canvas.event.EntityPostPortalAsyncEvent; +import io.canvasmc.canvas.event.EntityPostTeleportAsyncEvent; import org.bukkit.Bukkit; +import org.bukkit.GameRules; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerChangedWorldEvent; - public class PlayerChangeWorld implements Listener { + @EventHandler - public void onChangeWorld(PlayerChangedWorldEvent event) { - Player player = event.getPlayer(); - World world = player.getWorld(); - boolean playerPvpEnabled = !Util.getPlayerState(player.getUniqueId()); + public void onPostTeleport(EntityPostTeleportAsyncEvent event) { + if (!(event.getEntity() instanceof Player player)) return; + World to = event.getTo().getWorld(); + // Only track teleporting that actually change worlds + if (event.getFrom().getWorld() == to) return; + reconcilePvpState(player, to); + } + + @EventHandler + public void onPostPortal(EntityPostPortalAsyncEvent event) { + if (!(event.getEntity() instanceof Player player)) return; + // Portal always changes worlds, but check defensively in case of custom portals + if (event.getFrom() == event.getTo()) return; + reconcilePvpState(player, event.getTo()); + } + private void reconcilePvpState(Player player, World world) { + boolean playerPvpEnabled = !Util.getPlayerState(player.getUniqueId()); // If PVP isn't enabled in the world but the player has it enabled, disable it. - if (!world.getPVP() && playerPvpEnabled) { + if (Boolean.FALSE.equals(world.getGameRuleValue(GameRules.PVP)) && playerPvpEnabled) { Util.setPlayerState(player.getUniqueId(), true); - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player, false)); + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player)); Chat.send(player, "PVP_WORLD_CHANGE_DISABLED"); - /*if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { - Util.particleEffect(player); - } - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { - Util.ChangeNametag(player, "&c"); - }*/ return; } - // If PVP is required (i.e. the world has PVP enabled and it is in the blocked worlds) and the player has it disabled, enable it. - if (player.getWorld().getPVP() && PvPToggle.blockedWorlds.contains(world.getName()) && !playerPvpEnabled) { + // If PVP is required (i.e., the world has PVP enabled, and it is in the blocked worlds) and the player has it disabled, enable it. + if (Boolean.TRUE.equals(world.getGameRuleValue(GameRules.PVP)) && PvPToggle.blockedWorlds.contains(world.getName()) && !playerPvpEnabled) { Util.setPlayerState(player.getUniqueId(), false); - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player, true)); + Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player)); Chat.send(player, "PVP_WORLD_CHANGE_REQUIRED"); if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(player); } - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { - Util.ChangeNametag(player, "&c"); - } - return; } } } diff --git a/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java index 9e9acbd..451a6a6 100644 --- a/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java +++ b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java @@ -9,60 +9,42 @@ import com.github.aasmus.pvptoggle.PvPToggle; import com.github.aasmus.pvptoggle.utils.Util; +import java.util.ArrayList; +import java.util.Objects; + public class PlayerJoin implements Listener { public PlayerJoin() { - for(Player p : Bukkit.getOnlinePlayers()) { - if(!PvPToggle.instance.getConfig().getBoolean("SETTINGS.PERSISTENT_PVP_STATE")) { - PvPToggle.instance.players.put(p.getUniqueId(), PvPToggle.instance.getConfig().getBoolean("SETTINGS.DEFAULT_PVP_OFF")); //add player to players hash map and set their pvp state - if(PvPToggle.instance.players.get(p.getUniqueId()) == false) { - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { - Util.particleEffect(p.getPlayer()); - } - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { - Util.ChangeNametag(p.getPlayer(), "&c"); - } - } - } else { - PvPToggle.instance.dataUtils.addPlayer(p.getPlayer()); - PvPToggle.instance.players.put(p.getUniqueId(), PvPToggle.instance.dataUtils.GetPlayerPvPState(p.getPlayer())); //add player to players hash map and set their pvp state - if(PvPToggle.instance.players.get(p.getUniqueId()) == false) { - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { - Util.particleEffect(p.getPlayer()); - } - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { - Util.ChangeNametag(p.getPlayer(), "&c"); - } - } - } - } + for (Player player : new ArrayList<>(Bukkit.getOnlinePlayers())) { + if (!PvPToggle.instance.getConfig().getBoolean("SETTINGS.PERSISTENT_PVP_STATE")) { + PvPToggle.instance.players.put(player.getUniqueId(), PvPToggle.instance.getConfig().getBoolean("SETTINGS.DEFAULT_PVP_OFF")); //add player to players hash map and set their pvp state + } else { + PvPToggle.instance.dataUtils.addPlayer(Objects.requireNonNull(player.getPlayer())); + PvPToggle.instance.players.put(player.getUniqueId(), PvPToggle.instance.dataUtils.GetPlayerPvPState(player.getPlayer())); //add player to players hash map and set their pvp state + } + + if (PvPToggle.instance.players.get(player.getUniqueId()) == false) { + if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { + Util.particleEffect(player.getPlayer()); + } + } + } } @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { Player p = event.getPlayer(); - if(!PvPToggle.instance.getConfig().getBoolean("SETTINGS.PERSISTENT_PVP_STATE")) { + if (!PvPToggle.instance.getConfig().getBoolean("SETTINGS.PERSISTENT_PVP_STATE")) { PvPToggle.instance.players.put(p.getUniqueId(), PvPToggle.instance.getConfig().getBoolean("SETTINGS.DEFAULT_PVP_OFF")); //add player to players hash map and set their pvp state - if(PvPToggle.instance.players.get(p.getUniqueId()) == false) { - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { - Util.particleEffect(p.getPlayer()); - } - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { - Util.ChangeNametag(p.getPlayer(), "&c"); - } - } - } else { - PvPToggle.instance.dataUtils.addPlayer(p.getPlayer()); + } else { + PvPToggle.instance.dataUtils.addPlayer(Objects.requireNonNull(p.getPlayer())); PvPToggle.instance.players.put(p.getUniqueId(), PvPToggle.instance.dataUtils.GetPlayerPvPState(p.getPlayer())); //add player to players hash map and set their pvp state - if(PvPToggle.instance.players.get(p.getUniqueId()) == false) { - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { - Util.particleEffect(p.getPlayer()); - } - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) { - Util.ChangeNametag(p.getPlayer(), "&c"); - } - } - } - } + } + if (PvPToggle.instance.players.get(p.getUniqueId()) == false) { + if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { + Util.particleEffect(p.getPlayer()); + } + } + } } diff --git a/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerLeave.java b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerLeave.java index b8eaca4..a9882c9 100644 --- a/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerLeave.java +++ b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerLeave.java @@ -12,10 +12,10 @@ public class PlayerLeave implements Listener { @EventHandler public void onQuit(PlayerQuitEvent event) { Player p = event.getPlayer(); - if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.PERSISTENT_PVP_STATE")) { + if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PERSISTENT_PVP_STATE")) { PvPToggle.instance.dataUtils.UpdatePlayerPvPState(p); } + PvPToggle.instance.players.remove(p.getUniqueId()); //remove player from players hash map } - } diff --git a/src/main/java/com/github/aasmus/pvptoggle/listeners/PvP.java b/src/main/java/com/github/aasmus/pvptoggle/listeners/PvP.java index 8a68ee9..067273b 100644 --- a/src/main/java/com/github/aasmus/pvptoggle/listeners/PvP.java +++ b/src/main/java/com/github/aasmus/pvptoggle/listeners/PvP.java @@ -36,11 +36,11 @@ public void onHit(EntityDamageByEntityEvent event) { } //check if attack was a player - if (event.getDamager() instanceof Player && event.getEntity() instanceof Player) { - Player damager = (Player) event.getDamager(); //player who hit - Boolean damagerState = PvPToggle.instance.players.get(damager.getUniqueId()); - Player attacked = (Player) event.getEntity(); //player who was hit - Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); + if (event.getDamager() instanceof Player damager && event.getEntity() instanceof Player attacked) { + //player who hit + Boolean damagerState = PvPToggle.instance.players.get(damager.getUniqueId()); + //player who was hit + Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); if (damagerState) { event.setCancelled(true); Chat.send(damager, "PVP_DISABLED"); @@ -52,21 +52,19 @@ public void onHit(EntityDamageByEntityEvent event) { Util.setCooldownTime(attacked); } //checks if damage was done by a projectile - } else if (event.getDamager() instanceof Projectile) { - Projectile arrow = (Projectile) event.getDamager(); - if(arrow.getShooter() instanceof Player) { - if(event.getEntity() instanceof Player) { - Player damager = (Player) arrow.getShooter(); - Boolean damagerState = PvPToggle.instance.players.get(damager.getUniqueId()); - Player attacked = (Player) event.getEntity(); - Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); - if(damager == attacked) { + } else if (event.getDamager() instanceof Projectile arrow) { + if (arrow.getShooter() instanceof Player damager) { + if (event.getEntity() instanceof Player attacked) { + Boolean damagerState = PvPToggle.instance.players.get(damager.getUniqueId()); + Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); + if (damager == attacked) { return; } - if(damagerState) { + + if (damagerState) { event.setCancelled(true); Chat.send(damager, "PVP_DISABLED"); - } else if(attackedState != null && attackedState) { + } else if (attackedState != null && attackedState) { event.setCancelled(true); Chat.send(damager, "PVP_DISABLED_OTHERS", attacked.getDisplayName()); } else { @@ -76,16 +74,14 @@ public void onHit(EntityDamageByEntityEvent event) { } } //checks if damage was done by a potion - } else if(event.getDamager() instanceof ThrownPotion) { - ThrownPotion potion = (ThrownPotion) event.getDamager(); - if (potion.getShooter() instanceof Player && event.getEntity() instanceof Player) { - Player damager = (Player) potion.getShooter(); - Boolean damagerState = PvPToggle.instance.players.get(damager.getUniqueId()); - Player attacked = (Player) event.getEntity(); - Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); - if(damager == attacked) { + } else if (event.getDamager() instanceof ThrownPotion potion) { + if (potion.getShooter() instanceof Player damager && event.getEntity() instanceof Player attacked) { + Boolean damagerState = PvPToggle.instance.players.get(damager.getUniqueId()); + Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); + if (damager == attacked) { return; } + if (damagerState) { event.setCancelled(true); Chat.send(damager, "PVP_DISABLED"); @@ -97,15 +93,13 @@ public void onHit(EntityDamageByEntityEvent event) { Util.setCooldownTime(attacked); } } - } else if (event.getDamager() instanceof LightningStrike && event.getDamager().getMetadata("TRIDENT").size() >= 1 && event.getEntity() instanceof Player) { - Player attacked = (Player) event.getEntity(); - Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); + } else if (event.getDamager() instanceof LightningStrike && !event.getDamager().getMetadata("TRIDENT").isEmpty() && event.getEntity() instanceof Player attacked) { + Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); if (attackedState != null && attackedState) { event.setCancelled(true); } - } else if (event.getDamager() instanceof Firework && event.getEntity() instanceof Player) { - Player attacked = (Player) event.getEntity(); - Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); + } else if (event.getDamager() instanceof Firework && event.getEntity() instanceof Player attacked) { + Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); if (attackedState != null && attackedState) { event.setCancelled(true); } @@ -119,13 +113,10 @@ public void onFlameArrow(EntityCombustByEntityEvent event) { return; } - if(event.getCombuster() instanceof Arrow) { - Arrow arrow = (Arrow) event.getCombuster(); - if(arrow.getShooter() instanceof Player && event.getEntity() instanceof Player) { - Player damager = (Player) arrow.getShooter(); - Boolean damagerState = PvPToggle.instance.players.get(damager.getUniqueId()); - Player attacked = (Player) event.getEntity(); - Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); + if (event.getCombuster() instanceof Arrow arrow) { + if (arrow.getShooter() instanceof Player damager && event.getEntity() instanceof Player attacked) { + Boolean damagerState = PvPToggle.instance.players.get(damager.getUniqueId()); + Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); if (damagerState) { event.setCancelled(true); } else if (attackedState != null && attackedState) { @@ -145,26 +136,24 @@ public void onPotionSplash(PotionSplashEvent event) { return; } - if(event.getPotion().getShooter() instanceof Player) { - for(LivingEntity entity : event.getAffectedEntities()) { - if(entity instanceof Player) { - Player damager = (Player) event.getPotion().getShooter(); - Boolean damagerState = PvPToggle.instance.players.get(damager.getUniqueId()); - Player attacked = (Player) entity; - Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); - if(damager != attacked) { - if(damagerState) { + if (event.getPotion().getShooter() instanceof Player damager) { + for (LivingEntity entity : event.getAffectedEntities()) { + if (entity instanceof Player attacked) { + Boolean damagerState = PvPToggle.instance.players.get(damager.getUniqueId()); + Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); + if (damager != attacked) { + if (damagerState) { Collection affected = event.getAffectedEntities(); - for(LivingEntity ent : affected){ - if(ent instanceof Player && ent != damager){ + for (LivingEntity ent : affected) { + if (ent instanceof Player && ent != damager) { event.setIntensity(ent, 0); } } Chat.send(damager, "PVP_DISABLED"); - } else if(attackedState != null && attackedState) { + } else if (attackedState != null && attackedState) { Collection affected = event.getAffectedEntities(); - for(LivingEntity ent : affected){ - if(ent instanceof Player && ent != damager){ + for (LivingEntity ent : affected) { + if (ent instanceof Player && ent != damager) { event.setIntensity(ent, 0); } } @@ -186,18 +175,16 @@ public void onCloudEffects(AreaEffectCloudApplyEvent event) { return; } - if(event.getEntity().getSource() instanceof Player) { + if (event.getEntity().getSource() instanceof Player damager) { Iterator it = event.getAffectedEntities().iterator(); - while(it.hasNext()) { + while (it.hasNext()) { LivingEntity entity = it.next(); - if(entity instanceof Player && entity != null) { - Player damager = (Player) event.getEntity().getSource(); - Boolean damagerState = PvPToggle.instance.players.get(damager.getUniqueId()); - Player attacked = (Player) entity; - Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); - if(attackedState != null && attackedState) { + if (entity instanceof Player attacked) { + Boolean damagerState = PvPToggle.instance.players.get(damager.getUniqueId()); + Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); + if (attackedState != null && attackedState) { it.remove(); - } else if(damagerState) { + } else if (damagerState) { it.remove(); } else { Util.setCooldownTime(damager); @@ -215,10 +202,9 @@ public void onPlayerFishing (PlayerFishEvent event) { return; } - if (event.getCaught() instanceof Player) { + if (event.getCaught() instanceof Player attacked) { final Player damager = event.getPlayer(); Boolean damagerState = PvPToggle.instance.players.get(damager.getUniqueId()); - final Player attacked = (Player) event.getCaught(); Boolean attackedState = PvPToggle.instance.players.get(attacked.getUniqueId()); if (damager.getInventory().getItemInMainHand().getType() == Material.FISHING_ROD || damager.getInventory().getItemInOffHand().getType() == Material.FISHING_ROD) { if (damagerState) { @@ -237,10 +223,9 @@ public void onPlayerFishing (PlayerFishEvent event) { //Tag lightning strike as from a trident @EventHandler(ignoreCancelled = true) - public void onLightningStrike(LightningStrikeEvent event){ - if(event.getCause() == LightningStrikeEvent.Cause.TRIDENT){ + public void onLightningStrike(LightningStrikeEvent event) { + if (event.getCause() == LightningStrikeEvent.Cause.TRIDENT) { event.getLightning().setMetadata("TRIDENT", new FixedMetadataValue(PvPToggle.instance, event.getLightning().getLocation())); } } - } diff --git a/src/main/java/com/github/aasmus/pvptoggle/utils/Chat.java b/src/main/java/com/github/aasmus/pvptoggle/utils/Chat.java index 3f4e08a..9ac8690 100644 --- a/src/main/java/com/github/aasmus/pvptoggle/utils/Chat.java +++ b/src/main/java/com/github/aasmus/pvptoggle/utils/Chat.java @@ -11,32 +11,38 @@ public class Chat { // sends message without a parameter public static void send(CommandSender sender, String message) { String msg = PvPToggle.instance.getConfig().getString("MESSAGES." + message); - if(msg.equals("")) - return; - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); + if (msg != null && msg.isEmpty()) { + return; + } + + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); } // sends message with a parameter public static void send(CommandSender sender, String message, String parameter) { String msg = PvPToggle.instance.getConfig().getString("MESSAGES." + message); - if(msg.equals("")) - return; - String output = msg.replaceAll("", parameter); + if (msg != null && msg.isEmpty()) { + return; + } + + String output = msg.replaceAll("", parameter); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', output)); } // sends message with a parameter and pvp state public static void send(CommandSender sender, String message, String parameter, Boolean pvpState) { String msg = PvPToggle.instance.getConfig().getString("MESSAGES." + message); - if(msg.equals("")) - return; - String output = msg.replaceAll("", parameter); - if(pvpState == true) { - output = output.replaceAll("", "off"); + if (msg != null && msg.isEmpty()) { + return; + } + + String output = msg.replaceAll("", parameter); + if (pvpState == true) { + output = output.replace("", "off"); } else { - output = output.replaceAll("", "on"); + output = output.replace("", "on"); } + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', output)); } - } diff --git a/src/main/java/com/github/aasmus/pvptoggle/utils/PersistentData.java b/src/main/java/com/github/aasmus/pvptoggle/utils/PersistentData.java index c2f9bb5..06fd23f 100644 --- a/src/main/java/com/github/aasmus/pvptoggle/utils/PersistentData.java +++ b/src/main/java/com/github/aasmus/pvptoggle/utils/PersistentData.java @@ -9,18 +9,18 @@ import com.github.aasmus.pvptoggle.PvPToggle; public class PersistentData { - - private File dir; - + + private final File dir; + public PersistentData(File file) { file.mkdir(); this.dir = file; } - + public void addPlayer(Player p) { File file = new File(dir.getPath(), p.getUniqueId() + ".yml"); - - if(!file.exists()) { + + if (!file.exists()) { try { FileConfiguration playerData = YamlConfiguration.loadConfiguration(file); playerData.createSection("PvPState"); @@ -47,5 +47,4 @@ public boolean GetPlayerPvPState(Player p) { FileConfiguration playerData = YamlConfiguration.loadConfiguration(new File(dir.getPath(), p.getUniqueId() + ".yml")); return playerData.getBoolean("PvPState"); } - } diff --git a/src/main/java/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.java b/src/main/java/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.java index f4c5be2..d401b8a 100644 --- a/src/main/java/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.java +++ b/src/main/java/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.java @@ -4,23 +4,27 @@ import com.github.aasmus.pvptoggle.PvPToggle; import me.clip.placeholderapi.expansion.PlaceholderExpansion; - +import org.jspecify.annotations.NonNull; public class PlaceholderAPIHook extends PlaceholderExpansion { - private PvPToggle plugin; + private final PvPToggle plugin; public PlaceholderAPIHook(PvPToggle plugin) { this.plugin = plugin; } @Override - public String onPlaceholderRequest(Player player, String identifier) { - if(player == null) { return ""; } + public String onPlaceholderRequest(Player player, @NonNull String identifier) { + if (player == null) { + return ""; + } //Placeholder: %pvptoggle_positive_rep% - if(identifier.equals("pvp_state")) { - return PvPToggle.instance.players.get(player.getUniqueId()) ? "&aOff" : "&cOn"; + if (identifier.equals("pvp_state")) { + return PvPToggle.instance.players.get(player.getUniqueId()) + ? PvPToggle.instance.getConfig().getString("MESSAGES.PLACEHOLDER_OFF") + : PvPToggle.instance.getConfig().getString("MESSAGES.PLACEHOLDER_ON"); } return null; @@ -37,19 +41,17 @@ public boolean canRegister() { } @Override - public String getIdentifier() { + public @NonNull String getIdentifier() { return "PvPToggle"; } @Override - public String getAuthor() { + public @NonNull String getAuthor() { return plugin.getDescription().getAuthors().toString(); } - @Override - public String getVersion() { + public @NonNull String getVersion() { return plugin.getDescription().getVersion(); } - } diff --git a/src/main/java/com/github/aasmus/pvptoggle/utils/Util.java b/src/main/java/com/github/aasmus/pvptoggle/utils/Util.java index 7cc2113..4c6f7d9 100644 --- a/src/main/java/com/github/aasmus/pvptoggle/utils/Util.java +++ b/src/main/java/com/github/aasmus/pvptoggle/utils/Util.java @@ -1,27 +1,24 @@ package com.github.aasmus.pvptoggle.utils; - import java.util.Date; import java.util.UUID; - import org.bukkit.*; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; - import com.github.aasmus.pvptoggle.PvPToggle; -import com.nametagedit.plugin.NametagEdit; - public class Util { - - private static float radius = .75f; - - public static boolean getPlayerState(UUID uuid){ + + private static final float radius = .75f; + + public static boolean getPlayerState(UUID uuid) { Boolean result = PvPToggle.instance.players.get(uuid); - if(result==null) return false; - else return result; + if (result == null) { + return false; + } else { + return result; + } } - - public static void setPlayerState(UUID uuid, boolean state){ + + public static void setPlayerState(UUID uuid, boolean state) { PvPToggle.instance.players.put(uuid,state); } @@ -33,7 +30,7 @@ public static boolean setPlayerState(Player player, boolean state, CommandSender World world = player.getWorld(); // You can't set the state to false (PVP enabled) if the world doesn't allow it - if (!world.getPVP() && !state) { + if (Boolean.FALSE.equals(world.getGameRuleValue(GameRules.PVP)) && !state) { if (caller == player) { Chat.send(caller, "PVP_WORLD_CANNOT_CHANGE_SELF"); } else { @@ -41,8 +38,9 @@ public static boolean setPlayerState(Player player, boolean state, CommandSender } return false; } + // You can't set the state to true (PVP disabled) if the world requires it - if (world.getPVP() && PvPToggle.blockedWorlds.contains(world.getName()) && state) { + if (Boolean.TRUE.equals(world.getGameRuleValue(GameRules.PVP)) && PvPToggle.blockedWorlds.contains(world.getName()) && state) { if (caller == player) { Chat.send(caller, "PVP_WORLD_CANNOT_CHANGE_SELF"); } else { @@ -55,65 +53,46 @@ public static boolean setPlayerState(Player player, boolean state, CommandSender return true; } - public static void setCooldownTime(Player p) { - PvPToggle.instance.cooldowns.put(p.getUniqueId(), new Date()); + public static void setCooldownTime(Player player) { + PvPToggle.instance.cooldowns.put(player.getUniqueId(), new Date()); } - - public static void removeCooldownTime(Player p) { - PvPToggle.instance.cooldowns.remove(p.getUniqueId()); + + public static void removeCooldownTime(Player player) { + PvPToggle.instance.cooldowns.remove(player.getUniqueId()); } - - public static boolean getCooldown(Player p) { - if(PvPToggle.instance.cooldowns.containsKey(p.getUniqueId())) { - Date lastChange = PvPToggle.instance.cooldowns.get(p.getUniqueId()); + + public static boolean getCooldown(Player player) { + if (PvPToggle.instance.cooldowns.containsKey(player.getUniqueId())) { + Date lastChange = PvPToggle.instance.cooldowns.get(player.getUniqueId()); Date currentTime = new Date(); int seconds = (int) (currentTime.getTime() - lastChange.getTime())/1000; - if(seconds > PvPToggle.instance.getConfig().getInt("SETTINGS.COOLDOWN") || p.hasPermission("pvptoggle.bypass")) { - Util.removeCooldownTime(p); + if (seconds > PvPToggle.instance.getConfig().getInt("SETTINGS.COOLDOWN") || player.hasPermission("pvptoggle.bypass")) { + Util.removeCooldownTime(player); return false; } else { - Chat.send(p, "PVP_COOLDOWN", String.valueOf(PvPToggle.instance.getConfig().getInt("SETTINGS.COOLDOWN") - seconds)); + Chat.send(player, "PVP_COOLDOWN", String.valueOf(PvPToggle.instance.getConfig().getInt("SETTINGS.COOLDOWN") - seconds)); return true; } } else { return false; } } - - public static void ChangeNametag(Player p, String color) { - if(PvPToggle.instance.getServer().getPluginManager().isPluginEnabled("NametagEdit")) { - if(color == "reset") { - NametagEdit.getApi().clearNametag(p); - } else { - NametagEdit.getApi().setPrefix(p, color); - } - } - } - - public static void particleEffect(Player p) { - new BukkitRunnable() { - @Override - public void run() { - if(!p.isOnline() || PvPToggle.instance.players.get(p.getUniqueId()) != false) { - this.cancel(); - } else if(!p.isDead()) { - double angle = 0; - Particle.DustOptions dustOptions = new Particle.DustOptions(Color.RED, 1); - Location location = p.getLocation(); - - - for(int i = 0; i < 25; i++) { - double x = (radius * Math.sin(angle)); - double z = (radius * Math.cos(angle)); - angle += 0.251; - p.getWorld().spawnParticle(Particle.REDSTONE, location.getX()+x, location.getY(), location.getZ()+z, 0, 0, 1, 0, dustOptions); - } + public static void particleEffect(Player player) { + player.getScheduler().runAtFixedRate(PvPToggle.instance, task -> { + if (!player.isOnline() || PvPToggle.instance.players.get(player.getUniqueId()) != false) { + task.cancel(); + } else if (!player.isDead()) { + double angle = 0; + Particle.DustOptions dustOptions = new Particle.DustOptions(Color.RED, 1); + Location location = player.getLocation(); + for (int i = 0; i < 25; i++) { + double x = (radius * Math.sin(angle)); + double z = (radius * Math.cos(angle)); + angle += 0.251; + player.getWorld().spawnParticle(Particle.DUST, location.getX()+x, location.getY(), location.getZ()+z, 0, 0, 1, 0, dustOptions); } - } - - }.runTaskTimer(PvPToggle.instance, 0L, 2L); + }, null, 1L, 2L); } - } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index bfbadcd..92cf5e4 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -9,7 +9,7 @@ SETTINGS: PARTICLES: true ##SHOW PVP on red nametag NAMETAG: false -## Worlds to disable PvP toggling in (i.e. will always use the world's settings) +## Worlds to disable PvP toggling in (i.e., will always use the world's settings) BLOCKED_WORLDS: [] ## goes in place of a player's current pvp state ## goes in place of a player's name or other parameter @@ -32,4 +32,6 @@ MESSAGES: PVP_WORLD_CHANGE_DISABLED: '&aYour pvp has been disabled because the world you entered does not allow pvp.' PVP_WORLD_CHANGE_REQUIRED: '&aYour pvp has been enabled because the world you enter requires pvp.' PVP_WORLD_CANNOT_CHANGE_SELF: '&cYou cannot change pvp state in this world.' - PVP_WORLD_CANNOT_CHANGE_OTHERS: '&cYou cannot change pvp state in that world.' \ No newline at end of file + PVP_WORLD_CANNOT_CHANGE_OTHERS: '&cYou cannot change pvp state in that world.' + PLACEHOLDER_OFF: '&aOff' + PLACEHOLDER_ON: '&cOn' diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 166a89e..60f389f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,10 +1,11 @@ main: com.github.aasmus.pvptoggle.PvPToggle -softdepend: [PlaceholderAPI, NametagEdit] name: PvPToggle -version: 1.8 -api-version: 1.13 -author: aasmus (with modifications by the Red Fusion Team) +version: 2.0 +api-version: '1.13' +folia-supported: true +author: aasmus description: Plugin that allows players to toggle PvP state +softdepend: [ PlaceholderAPI ] commands: pvp: description: used to change PvP state. From 74ded033b86b523aa9a2d7f67a4ffe61aa074359 Mon Sep 17 00:00:00 2001 From: RootBeer Date: Wed, 22 Apr 2026 10:50:13 -0400 Subject: [PATCH 3/5] Push localization aspects --- .idea/.gitignore | 10 ++++ .idea/checkstyle-idea.xml | 15 +++++ .idea/compiler.xml | 13 +++++ .idea/discord.xml | 7 +++ .idea/jarRepositories.xml | 55 ++++++++++++++++++ .idea/misc.xml | 12 ++++ .idea/modules.xml | 8 +++ .idea/vcs.xml | 6 ++ PVPToggle.iml | 16 +++++ target/PVPToggle-1.8.jar | Bin 0 -> 24180 bytes .../github/aasmus/pvptoggle/PvPCommand.class | Bin 0 -> 5474 bytes .../github/aasmus/pvptoggle/PvPToggle.class | Bin 0 -> 2857 bytes .../pvptoggle/events/PVPToggleEvent.class | Bin 0 -> 970 bytes .../listeners/PlayerChangeWorld.class | Bin 0 -> 3337 bytes .../pvptoggle/listeners/PlayerJoin.class | Bin 0 -> 2645 bytes .../pvptoggle/listeners/PlayerLeave.class | Bin 0 -> 1553 bytes .../aasmus/pvptoggle/listeners/PvP.class | Bin 0 -> 8577 bytes .../github/aasmus/pvptoggle/utils/Chat.class | Bin 0 -> 2496 bytes .../pvptoggle/utils/PersistentData.class | Bin 0 -> 2934 bytes .../pvptoggle/utils/PlaceholderAPIHook.class | Bin 0 -> 2288 bytes .../github/aasmus/pvptoggle/utils/Util.class | Bin 0 -> 5970 bytes target/classes/config.yml | 37 ++++++++++++ target/classes/plugin.yml | 30 ++++++++++ target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 11 ++++ .../compile/default-compile/inputFiles.lst | 11 ++++ 26 files changed, 234 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/checkstyle-idea.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/discord.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 PVPToggle.iml create mode 100644 target/PVPToggle-1.8.jar create mode 100644 target/classes/com/github/aasmus/pvptoggle/PvPCommand.class create mode 100644 target/classes/com/github/aasmus/pvptoggle/PvPToggle.class create mode 100644 target/classes/com/github/aasmus/pvptoggle/events/PVPToggleEvent.class create mode 100644 target/classes/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.class create mode 100644 target/classes/com/github/aasmus/pvptoggle/listeners/PlayerJoin.class create mode 100644 target/classes/com/github/aasmus/pvptoggle/listeners/PlayerLeave.class create mode 100644 target/classes/com/github/aasmus/pvptoggle/listeners/PvP.class create mode 100644 target/classes/com/github/aasmus/pvptoggle/utils/Chat.class create mode 100644 target/classes/com/github/aasmus/pvptoggle/utils/PersistentData.class create mode 100644 target/classes/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.class create mode 100644 target/classes/com/github/aasmus/pvptoggle/utils/Util.class create mode 100644 target/classes/config.yml create mode 100644 target/classes/plugin.yml create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..30cf57e --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml new file mode 100644 index 0000000..5065b2d --- /dev/null +++ b/.idea/checkstyle-idea.xml @@ -0,0 +1,15 @@ + + + + 12.1.2 + JavaOnly + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b30f702 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 0000000..30bab2a --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..f00fbf1 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..7fb4876 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..9035e2f --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/PVPToggle.iml b/PVPToggle.iml new file mode 100644 index 0000000..aeaaf6b --- /dev/null +++ b/PVPToggle.iml @@ -0,0 +1,16 @@ + + + + + + + + + SPIGOT + + 1 + + + + \ No newline at end of file diff --git a/target/PVPToggle-1.8.jar b/target/PVPToggle-1.8.jar new file mode 100644 index 0000000000000000000000000000000000000000..7d7a2000adaf7457b8d8845a19bdc33e956837f8 GIT binary patch literal 24180 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/github/aasmus/pvptoggle/PvPToggle.class b/target/classes/com/github/aasmus/pvptoggle/PvPToggle.class new file mode 100644 index 0000000000000000000000000000000000000000..580ed8cab6e3d63b8aa25101bc9851c66377bdbd GIT binary patch literal 2857 zcmb7G*;mw782?>{nju6%tXj3L8zPKKM6FuK(#oQO156#3Vi%hUmkXgQ~+Pkrd$)YH@N-efRCIY?hJ_q+40zi+#L{qx)J050GM6?I4{sMqia zHZkn?d`mBeb8~i}FF2uPyZWqAHuORIAdaQK{rFHy<=QKnxRedgn{korstZW z?{hcMdsmK^jnd4Jv7kahssWAA6l~V81x*ZxOmAMd>|iD=>V{F84@>$&c_HvD%i(&y zoFA1Z24%r9ZgaoH(3E>%jg)4E!mS!wgti9L^PDN~rdtxXk80SC9SmvPEd_>aa)!gX z4cW`8B>tF&UD!=ZEgn!T)3(KMvb`ghfQX`{>(Dm>+jI44n|!`VpNKoYmJU9y;R!rR z*hLZyUH@B+aA}{0{US|UOGcUZ@o6J;V%HQLWY8oswkMqs{D(BO;V{Ey3Zc&kjEjU0 z_ZgZgj3jS1jShx-!J^^-j)-bF%5bo~mMfwh!?pB6;M=a16$Q}AaC|*fMO~EiJSERA z1ymT3m18(AtaMQ@tE_a4i{zcua0*Wm`cvf8m{7rRV%_YmWk)9RjE1v#I!a`L`(=T^ z_S!^7*V#s7abCeQ8oKc;d6r0ZRj`?$j5=Y+a1Bf7I#{bK?wcAW(tH6u3VJp4p`T%I zLi1Yu3|o9|3B3INGGRu+pKVW;3>UY0P9n;mqbvPYvbvWO|D?@A=z_c z6O=*OfrFmysu&PMV~EOly~M8;&2g$)6*(cBXXx0VY&oxDM935v&TLRdy4pKKmC7eP z-9rJ%^LFHtRPdZ2)u zZ(9!=8l|zfDomtQ7_csskY?Y0wDvddYorV6<(ShMh zh0dPbNbi;YzUvbsS95&@74vWvcp4UPgF&zH|KTGu8d%YY5hc#hnnbHQd!lh9*N)(l zgSMn0Ku8LTj%UvCDVcr3zj-xt8aF8`RMRG(kyG(Pen2$oZ4IyC^=Mc`S!U>5(|RJP z+LlxB2E(cKvJsD}8snEeZ%)M>yd}os+YFiZb*J6RZj>E<2k&Zl5AV~mtIiF%pRXzS zkYQKC)!M;9aTaXLHG@8?h<* z@x0hKlx?h5nRIwAiF96OS&UKO<@gDLMgrGD~2YWhj$N zXjp{$;Mn|&6#AULTZkFhhI;HK)qC&-QCcL9FJouEs;XwkiLZ`0Dw(_3mdRAGbCJwc zuy+{;Ch51erF{vR99cRxd1MLtB2Lil>H9cGRhYSt=Tf+bi^~`wm#!q}9MQuGdW7ib z6ZBQ0MT)rSb7wnEyYp&oS`5|lVde5+km zX_NK=_MxU7Cz(ok+e2)hi+}&)W9RpuAHM($@Unyy(s^VIWRYWNxZcd11o!t+nPMp% zWuEDgA$KYrsopZAJKb>+1r+lr87RYGcs+IJ=1i*FU}AFa&ja6FEEme1&1?}-d~-A& zU5Ac;yoJqI!eeM!>ynO=YGsbXSYOLj4QyeXp>Q!6zPHXUuNV#zJHjF_xN~C*&yv3C z=TT#5twT3cO4vb~q1{P<64Ko4;%4p9t@oPi*qkEO*N7G54glV`oO) zN}u74_213tGn8jS#b+SKVW*p@Y_opa(7p_)-nke{U+NlG3o&pUS8*j>hY&|0;Lcx& zsrnF#2|Bd_vYaW$3(8?*Xj$>O1nE$x5L?V-;x{4P;P3 zk*qzk8c{Z$;u%@AFQhY~HL*`I%{(EC(VY2$$|ss5S}yd}Ly8f_V@iv13ShfHn^r{} z5Gksz73MvX=x?Enh_pws=QxZrO`5f4w)YMBP0{@|(QGVQpcZM6F8DY+6j1(&oevMF Se?>)iVO?#TtRwQJaQqh)Q`3|H literal 0 HcmV?d00001 diff --git a/target/classes/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.class b/target/classes/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.class new file mode 100644 index 0000000000000000000000000000000000000000..bad7454d35e49bbee00ce72d34187d7f458b54c6 GIT binary patch literal 3337 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 F^iMHq*#iIo literal 0 HcmV?d00001 diff --git a/target/classes/com/github/aasmus/pvptoggle/listeners/PlayerLeave.class b/target/classes/com/github/aasmus/pvptoggle/listeners/PlayerLeave.class new file mode 100644 index 0000000000000000000000000000000000000000..84e74b53627adcc3f9b0222e8ba91b97e1672a05 GIT binary patch literal 1553 zcma)6=}r?-6#foS2g)D_xS$|zV5`WWxQ`o4foj2O7Zd-O+j6Z}rZaVVrwQ-i3-}ls zgV7&8fX`%%XJ(pE5^eZ%&)v@X&iT&r>(7s$0G62quCCpU4x>Zy9T~M)vXx4+K)o3-eSF1VF z%D3{xXh-N*Zc_`lD%q*rp>*sdBaNFljuWwaE1vsS)d-6R-K$2|fiJZ3Tq=_k>R9Knc-iTxjr zgAH-4P0_FiF%QeYf{E+6K{(aHCHuc$O@u)vt>mf?fy{0bMme<+ZIPu?DZ9$1ZsL}K z+a~VdE@5c@nSr?aeOdQf?DlLY;c;)+ZDSqnVjH+mxZaH{CnA~2ZdZIxik39+fH2V+ zM$}EY_FqEZinq;P4Cj<9w}N^_`bAN3_+~WcRfSU)z6#In%Rc>1F>Q-o)BaCKY!2CT z!^S1d9n4gh{9$GhaZ z9+wq&CWkwHz)%DnO`i?nZadQF(2@l&@T)THU!HYwWk&qZhiT`&xyR#>VDoGYC67d2 zAM(j!Nh}jrzJWeR&yRQwpMfME^J>N)@Px-Ic)yGlHWDg-3}-CMg{yloHostK4`ZVz z_b~AZLwx#*>A5{zjCSd{@3=R6l3UPW7;+$Ytz@3r6Fvc*#6J(5C8jo<##kSkH njDl5U7(c;Hw1#!Y-eBE+&~Ho`+&5W1g?>L}NqEL<4|0D2M6j&^ literal 0 HcmV?d00001 diff --git a/target/classes/com/github/aasmus/pvptoggle/listeners/PvP.class b/target/classes/com/github/aasmus/pvptoggle/listeners/PvP.class new file mode 100644 index 0000000000000000000000000000000000000000..8902865189c26c6412e8136a5101bbf81d8a1bc9 GIT binary patch literal 8577 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/github/aasmus/pvptoggle/utils/Chat.class b/target/classes/com/github/aasmus/pvptoggle/utils/Chat.class new file mode 100644 index 0000000000000000000000000000000000000000..5cde39530638ac80e16cea0967113881dff2345a GIT binary patch literal 2496 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 M@aZdjgYR(cU&n&|`v3p{ literal 0 HcmV?d00001 diff --git a/target/classes/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.class b/target/classes/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.class new file mode 100644 index 0000000000000000000000000000000000000000..09d79dce4ba12fa93318d8b3aadae0597be4f9ef GIT binary patch literal 2288 zcmb7FYg5}s6g`U_{nsk{hjoThQW4x|Pg3~oywR2GX_5Rzg`O!+DK z1^v>Qrk&Is`k~Wro#~J2^sXd>NPwYV*89*s_nxz7umAb?k3RwAv6VsxVhZ9a&Y_cG za))b%DICo)b%Sr(<~ncaj?nlIj&3!DZE5AhgF<_gq4SZjg!`BwmL0Apkw8*GN<|tf z!#%^^(dxq8^lF-}H+Q_I=IlDIU9X#5^ITyzqoDcn+^lVH6QpB$bzw2wES&~W-YqZt zP`L!U87OrxLy{7#HC^51DP(Y7LBEO%xX94ErSIyRsatie;x>d;r#$?nr<+ZN3)#}) z>0)h*8*XlRHHiUSRxqgIJxS*JnQCE32#fMt2AABM(B*S#C!!0Yc!nFtaebG*f^mkvLsg#Iw#juXg)wL_))tG!6h6U21vwRu@F|1#KhcBo+D15{NwAp<)r}a2D*BA!((x57 zB#tvpulCb!Kw^QSdWxZz7PNrlVx>?m5LaxKjxVtHc&HYmo zoYYuy4E?qh>0(Rt{<)<3BpY?-k!P2SJdKl`;rFcIl@6W^MLLOfiM}D^d(ONIO^>$X z>c%!ThLG`GA{EIe8(4-)t=L|};L?L+`iN>_o1Tzw@(Zmx@CA+Ch|$=EIL(si!I!kU7<`Sduu3b6^HCY0 zeT{GEOk(~_zcR8o`Zqc=U9ZP7JuURT!ql(0^ak&b?&B)MK5lg2FO0P?@d|x((!!n0 z{T3eli0*Lpm{zaZYeI_o^$Zag;5^mSPb>z|i_6qV2l0UV|1`~KsFlkauLjuS4MWkf0CnLN2kAY&CjI< zr(rGzeul{Gv5^~i5$ZP{=8R>YNb=F7(y7V^SR0J@60^p`kP5cM6Q72je literal 0 HcmV?d00001 diff --git a/target/classes/com/github/aasmus/pvptoggle/utils/Util.class b/target/classes/com/github/aasmus/pvptoggle/utils/Util.class new file mode 100644 index 0000000000000000000000000000000000000000..f81bbbfa00279a44d1809edda6d4228b6b82e52c GIT binary patch literal 5970 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 C4`clR literal 0 HcmV?d00001 diff --git a/target/classes/config.yml b/target/classes/config.yml new file mode 100644 index 0000000..92cf5e4 --- /dev/null +++ b/target/classes/config.yml @@ -0,0 +1,37 @@ +SETTINGS: +##Do you want the plugin to remember a player's last PVP state when the login + PERSISTENT_PVP_STATE: false +##How much time a player must wait to use /pvp off/toggle (if pvp is on) in seconds after running the command or being in pvp + COOLDOWN: 0 +##True makes pvp off by default. False makes pvp on by default. + DEFAULT_PVP_OFF: true +##Show PVP on particle effects + PARTICLES: true +##SHOW PVP on red nametag + NAMETAG: false +## Worlds to disable PvP toggling in (i.e., will always use the world's settings) + BLOCKED_WORLDS: [] +## goes in place of a player's current pvp state +## goes in place of a player's name or other parameter +MESSAGES: + HELP_HEADER: '&a&lCommands:' + HELP_GENERAL_USEAGE: '&aUse /pvp {toggle|on|off|status} to change/view pvp state.' + HELP_VIEW_OTHERS: '&aUse /pvp to see another players pvp state.' + HELP_SET_OTHERS: '&aUse /pvp {toggle|on|off} to set another players pvp state.' + NO_PLAYER: '&cCould not find a player by the name ' + COMMAND_INVALID_PARAMETER: '&c is an invalid parameter. {toggle|on|off|status}' + COMMAND_NO_PERMISSION: '&cYou do not have permission to set others pvp state.' + PVP_STATE_ENABLED: '&aYour pvp has been enabled!' + PVP_STATE_DISABLED: '&aYour pvp has been disabled!' + PVP_STATE_CHANGED_OTHERS: '&a had their pvp state changed to ' + PVP_STATUS: '&aYour pvp is set to ' + PVP_STATUS_OTHERS: '&a has their pvp ' + PVP_DISABLED: '&cYou have pvp disabled!' + PVP_DISABLED_OTHERS: '&c has pvp disabled!' + PVP_COOLDOWN: '&cToo fast! You can turn off pvp in seconds.' + PVP_WORLD_CHANGE_DISABLED: '&aYour pvp has been disabled because the world you entered does not allow pvp.' + PVP_WORLD_CHANGE_REQUIRED: '&aYour pvp has been enabled because the world you enter requires pvp.' + PVP_WORLD_CANNOT_CHANGE_SELF: '&cYou cannot change pvp state in this world.' + PVP_WORLD_CANNOT_CHANGE_OTHERS: '&cYou cannot change pvp state in that world.' + PLACEHOLDER_OFF: '&aOff' + PLACEHOLDER_ON: '&cOn' diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml new file mode 100644 index 0000000..60f389f --- /dev/null +++ b/target/classes/plugin.yml @@ -0,0 +1,30 @@ +main: com.github.aasmus.pvptoggle.PvPToggle +name: PvPToggle +version: 2.0 +api-version: '1.13' +folia-supported: true +author: aasmus +description: Plugin that allows players to toggle PvP state +softdepend: [ PlaceholderAPI ] +commands: + pvp: + description: used to change PvP state. + usage: /pvp + permission: pvptoggle.allow + permission-message: You don't have the pvptoggle.allow permission node. +permissions: + pvptoggle.allow: + description: allows player to change pvp state + default: true + pvptoggle.others: + description: allows player to see other player's pvp state + default: op + pvptoggle.others.set: + description: allows player to set other players pvp state + default: op + pvptoggle.bypass: + description: allows player to bypass cooldown + default: op + pvptoggle.reload: + description: allows player to reload config + default: op diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..50e91a1 --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=PVPToggle +groupId=com.github.aasmus +version=1.8 diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..f9a87fa --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,11 @@ +com/github/aasmus/pvptoggle/events/PVPToggleEvent.class +com/github/aasmus/pvptoggle/PvPToggle.class +com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.class +com/github/aasmus/pvptoggle/utils/Util.class +com/github/aasmus/pvptoggle/utils/Chat.class +com/github/aasmus/pvptoggle/listeners/PlayerLeave.class +com/github/aasmus/pvptoggle/utils/PersistentData.class +com/github/aasmus/pvptoggle/PvPCommand.class +com/github/aasmus/pvptoggle/listeners/PvP.class +com/github/aasmus/pvptoggle/listeners/PlayerJoin.class +com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..df674d2 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,11 @@ +/home/rootbeer/IdeaProjects/PvPToggle/src/main/java/com/github/aasmus/pvptoggle/PvPCommand.java +/home/rootbeer/IdeaProjects/PvPToggle/src/main/java/com/github/aasmus/pvptoggle/PvPToggle.java +/home/rootbeer/IdeaProjects/PvPToggle/src/main/java/com/github/aasmus/pvptoggle/events/PVPToggleEvent.java +/home/rootbeer/IdeaProjects/PvPToggle/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java +/home/rootbeer/IdeaProjects/PvPToggle/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java +/home/rootbeer/IdeaProjects/PvPToggle/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerLeave.java +/home/rootbeer/IdeaProjects/PvPToggle/src/main/java/com/github/aasmus/pvptoggle/listeners/PvP.java +/home/rootbeer/IdeaProjects/PvPToggle/src/main/java/com/github/aasmus/pvptoggle/utils/Chat.java +/home/rootbeer/IdeaProjects/PvPToggle/src/main/java/com/github/aasmus/pvptoggle/utils/PersistentData.java +/home/rootbeer/IdeaProjects/PvPToggle/src/main/java/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.java +/home/rootbeer/IdeaProjects/PvPToggle/src/main/java/com/github/aasmus/pvptoggle/utils/Util.java From d31ea4fb6ea189c2387050f70ae39d8650ef31e3 Mon Sep 17 00:00:00 2001 From: RootBeer Date: Wed, 22 Apr 2026 10:51:54 -0400 Subject: [PATCH 4/5] There should be an inserted space --- src/main/java/com/github/aasmus/pvptoggle/utils/Util.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/github/aasmus/pvptoggle/utils/Util.java b/src/main/java/com/github/aasmus/pvptoggle/utils/Util.java index 4c6f7d9..b865a60 100644 --- a/src/main/java/com/github/aasmus/pvptoggle/utils/Util.java +++ b/src/main/java/com/github/aasmus/pvptoggle/utils/Util.java @@ -5,6 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.github.aasmus.pvptoggle.PvPToggle; + public class Util { private static final float radius = .75f; From 7ced7897b007e80bdb2a722721693598d5539ee1 Mon Sep 17 00:00:00 2001 From: RootBeer Date: Wed, 22 Apr 2026 10:53:12 -0400 Subject: [PATCH 5/5] Change branding --- pom.xml | 4 +-- .../github/aasmus/pvptoggle/PvPCommand.java | 26 +++++++++--------- ...VPToggleEvent.java => PvPToggleEvent.java} | 4 +-- .../listeners/PlayerChangeWorld.java | 6 ++-- .../{PVPToggle-1.8.jar => PvPToggle-2.0.jar} | Bin 24180 -> 24175 bytes .../github/aasmus/pvptoggle/PvPCommand.class | Bin 5474 -> 5474 bytes ...ToggleEvent.class => PvPToggleEvent.class} | Bin 970 -> 970 bytes .../listeners/PlayerChangeWorld.class | Bin 3337 -> 3337 bytes .../github/aasmus/pvptoggle/utils/Util.class | Bin 5970 -> 5970 bytes target/maven-archiver/pom.properties | 4 +-- .../compile/default-compile/createdFiles.lst | 2 +- .../compile/default-compile/inputFiles.lst | 2 +- 12 files changed, 24 insertions(+), 24 deletions(-) rename src/main/java/com/github/aasmus/pvptoggle/events/{PVPToggleEvent.java => PvPToggleEvent.java} (86%) rename target/{PVPToggle-1.8.jar => PvPToggle-2.0.jar} (52%) rename target/classes/com/github/aasmus/pvptoggle/events/{PVPToggleEvent.class => PvPToggleEvent.class} (80%) diff --git a/pom.xml b/pom.xml index 17bdb6a..84e0d97 100644 --- a/pom.xml +++ b/pom.xml @@ -5,8 +5,8 @@ 4.0.0 com.github.aasmus - PVPToggle - 1.8 + PvPToggle + 2.0 21 diff --git a/src/main/java/com/github/aasmus/pvptoggle/PvPCommand.java b/src/main/java/com/github/aasmus/pvptoggle/PvPCommand.java index 5f42a62..5bcb4eb 100644 --- a/src/main/java/com/github/aasmus/pvptoggle/PvPCommand.java +++ b/src/main/java/com/github/aasmus/pvptoggle/PvPCommand.java @@ -1,6 +1,6 @@ package com.github.aasmus.pvptoggle; -import com.github.aasmus.pvptoggle.events.PVPToggleEvent; +import com.github.aasmus.pvptoggle.events.PvPToggleEvent; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -33,7 +33,7 @@ public boolean onCommand(@NonNull CommandSender sender, @NonNull Command cmd, @N } else if (args[0].equals("toggle")) { if (current == true) { if (Util.setPlayerState(other, false, console)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); + Bukkit.getPluginManager().callEvent(new PvPToggleEvent(other)); Chat.send(other, "PVP_STATE_ENABLED"); if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(other.getPlayer()); @@ -41,13 +41,13 @@ public boolean onCommand(@NonNull CommandSender sender, @NonNull Command cmd, @N } } else { if (Util.setPlayerState(other, true, console)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); + Bukkit.getPluginManager().callEvent(new PvPToggleEvent(other)); Chat.send(other, "PVP_STATE_DISABLED"); } } } else if (args[0].equalsIgnoreCase("on")) { if (Util.setPlayerState(other, false, console)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); + Bukkit.getPluginManager().callEvent(new PvPToggleEvent(other)); Chat.send(other, "PVP_STATE_ENABLED"); if (current == true) { if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { @@ -57,7 +57,7 @@ public boolean onCommand(@NonNull CommandSender sender, @NonNull Command cmd, @N } } else if (args[0].equalsIgnoreCase("off")) { if (Util.setPlayerState(other, true, console)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); + Bukkit.getPluginManager().callEvent(new PvPToggleEvent(other)); Chat.send(other, "PVP_STATE_DISABLED"); } } @@ -91,7 +91,7 @@ public boolean onCommand(@NonNull CommandSender sender, @NonNull Command cmd, @N if (current == true) { Util.setCooldownTime(player); if (Util.setPlayerState(player, false, player)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player)); + Bukkit.getPluginManager().callEvent(new PvPToggleEvent(player)); Chat.send(player, "PVP_STATE_ENABLED"); if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(player.getPlayer()); @@ -99,14 +99,14 @@ public boolean onCommand(@NonNull CommandSender sender, @NonNull Command cmd, @N } } else { if (Util.setPlayerState(player, true, player)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player)); + Bukkit.getPluginManager().callEvent(new PvPToggleEvent(player)); Chat.send(player, "PVP_STATE_DISABLED"); } } } else if (args[0].equalsIgnoreCase("on")) { Util.setCooldownTime(player); if (Util.setPlayerState(player, false, player)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player)); + Bukkit.getPluginManager().callEvent(new PvPToggleEvent(player)); Chat.send(player, "PVP_STATE_ENABLED"); if (current == true) { if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { @@ -116,7 +116,7 @@ public boolean onCommand(@NonNull CommandSender sender, @NonNull Command cmd, @N } } else if (args[0].equalsIgnoreCase("off")) { if (Util.setPlayerState(player, true, player)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player)); + Bukkit.getPluginManager().callEvent(new PvPToggleEvent(player)); Chat.send(player, "PVP_STATE_DISABLED"); } } else if (args[0].equalsIgnoreCase("status")) { @@ -148,7 +148,7 @@ public boolean onCommand(@NonNull CommandSender sender, @NonNull Command cmd, @N if (args[0].equals("toggle")) { if (current == true) { if (Util.setPlayerState(other, false, sender)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); + Bukkit.getPluginManager().callEvent(new PvPToggleEvent(other)); Chat.send(other, "PVP_STATE_ENABLED"); if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(other.getPlayer()); @@ -156,13 +156,13 @@ public boolean onCommand(@NonNull CommandSender sender, @NonNull Command cmd, @N } } else { if (Util.setPlayerState(other, true, sender)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); + Bukkit.getPluginManager().callEvent(new PvPToggleEvent(other)); Chat.send(other, "PVP_STATE_DISABLED"); } } } else if (args[0].equalsIgnoreCase("on")) { if (Util.setPlayerState(other, false, sender)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); + Bukkit.getPluginManager().callEvent(new PvPToggleEvent(other)); if (current == true) { if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(other.getPlayer()); @@ -172,7 +172,7 @@ public boolean onCommand(@NonNull CommandSender sender, @NonNull Command cmd, @N } } else if (args[0].equalsIgnoreCase("off")) { if (Util.setPlayerState(other, true, sender)) { - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(other)); + Bukkit.getPluginManager().callEvent(new PvPToggleEvent(other)); Chat.send(other, "PVP_STATE_DISABLED"); } } diff --git a/src/main/java/com/github/aasmus/pvptoggle/events/PVPToggleEvent.java b/src/main/java/com/github/aasmus/pvptoggle/events/PvPToggleEvent.java similarity index 86% rename from src/main/java/com/github/aasmus/pvptoggle/events/PVPToggleEvent.java rename to src/main/java/com/github/aasmus/pvptoggle/events/PvPToggleEvent.java index 17f22e8..4f197d4 100644 --- a/src/main/java/com/github/aasmus/pvptoggle/events/PVPToggleEvent.java +++ b/src/main/java/com/github/aasmus/pvptoggle/events/PvPToggleEvent.java @@ -5,11 +5,11 @@ import org.bukkit.entity.Player; import org.jspecify.annotations.NonNull; -public class PVPToggleEvent extends Event { +public class PvPToggleEvent extends Event { private final Player player; - public PVPToggleEvent(Player player) { + public PvPToggleEvent(Player player) { this.player = player; } diff --git a/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java index 736819f..3cf3289 100644 --- a/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java +++ b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java @@ -1,6 +1,6 @@ package com.github.aasmus.pvptoggle.listeners; import com.github.aasmus.pvptoggle.PvPToggle; -import com.github.aasmus.pvptoggle.events.PVPToggleEvent; +import com.github.aasmus.pvptoggle.events.PvPToggleEvent; import com.github.aasmus.pvptoggle.utils.Chat; import com.github.aasmus.pvptoggle.utils.Util; import io.canvasmc.canvas.event.EntityPostPortalAsyncEvent; @@ -35,7 +35,7 @@ private void reconcilePvpState(Player player, World world) { // If PVP isn't enabled in the world but the player has it enabled, disable it. if (Boolean.FALSE.equals(world.getGameRuleValue(GameRules.PVP)) && playerPvpEnabled) { Util.setPlayerState(player.getUniqueId(), true); - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player)); + Bukkit.getPluginManager().callEvent(new PvPToggleEvent(player)); Chat.send(player, "PVP_WORLD_CHANGE_DISABLED"); return; } @@ -43,7 +43,7 @@ private void reconcilePvpState(Player player, World world) { // If PVP is required (i.e., the world has PVP enabled, and it is in the blocked worlds) and the player has it disabled, enable it. if (Boolean.TRUE.equals(world.getGameRuleValue(GameRules.PVP)) && PvPToggle.blockedWorlds.contains(world.getName()) && !playerPvpEnabled) { Util.setPlayerState(player.getUniqueId(), false); - Bukkit.getPluginManager().callEvent(new PVPToggleEvent(player)); + Bukkit.getPluginManager().callEvent(new PvPToggleEvent(player)); Chat.send(player, "PVP_WORLD_CHANGE_REQUIRED"); if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) { Util.particleEffect(player); diff --git a/target/PVPToggle-1.8.jar b/target/PvPToggle-2.0.jar similarity index 52% rename from target/PVPToggle-1.8.jar rename to target/PvPToggle-2.0.jar index 7d7a2000adaf7457b8d8845a19bdc33e956837f8..9e1880d89e8b99f86b3fe49afd5b0fc78efe0e83 100644 GIT binary patch delta 8377 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%0Aoy8)U5 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 delta 8280 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 delta 14 WcmaE)^+;>OUKYl%&HGrE2mk;weFh2u diff --git a/target/classes/com/github/aasmus/pvptoggle/events/PVPToggleEvent.class b/target/classes/com/github/aasmus/pvptoggle/events/PvPToggleEvent.class similarity index 80% rename from target/classes/com/github/aasmus/pvptoggle/events/PVPToggleEvent.class rename to target/classes/com/github/aasmus/pvptoggle/events/PvPToggleEvent.class index 324b93231b6dab788ff619626a9347938198ac84..d6567e35bdf370b1075d799e7d213a9f39f3e0c9 100644 GIT binary patch delta 25 hcmX@beu{lUF=N@r5*|jzvdN8%w;9Ve$1>$I0swfK2(17B delta 25 hcmX@beu{lUF=N=q5*|jzu*r>#w;97W$1>$I0swRw2u%P0 diff --git a/target/classes/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.class b/target/classes/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.class index bad7454d35e49bbee00ce72d34187d7f458b54c6..6369cedfce028ccf40920ea1971b371a4b03d13d 100644 GIT binary patch delta 14 VcmeB_>Xh10#==;(xtwJZ2LL4O1h4=A delta 14 VcmeB_>Xh10#=;o3xtwJZ2LL221dsp# diff --git a/target/classes/com/github/aasmus/pvptoggle/utils/Util.class b/target/classes/com/github/aasmus/pvptoggle/utils/Util.class index f81bbbfa00279a44d1809edda6d4228b6b82e52c..f1caf5aaf5a06d5bf2c6e17c87bd5ff5f8e9f628 100644 GIT binary patch delta 229 zcmWNK%}N3R5P-j+4LYp0>!uY3krf-%qCutw75ynjLFu-pC2rs;2m*^moLi?J zq23_q4fdo@(Hlg=z%UGa-xqn2_xWm#jLVyKZpN4(j-xw?Ex%T1q_CJ0-~K748D*9+ z<}jHjqvNtbjwLqqDzZYGRXTXwk)_KT53KVwGQlX=$Hj z4%BkUE=M#d(W0!TiqgkCaw>n$vr%P+8+n-=%ph?ITw_J0t NmUsPq5K2G!{SP(?D+2%k delta 229 zcmWNK%}N3R6oo&b5jT_0I2maW8In;NLO+h6RQ5xH3oR>ul9`1oArK^520`G;@a|gm z2=xYnZ{Vt)qBn@{=G?=%_uOxuoo7GCRv;vAR^2p-u!uvL7?%86zM+$4Y1lJ2!2+uU zS;J(V4U(i)bEG(A6PIl~cIc7efnA2Wd1Q}g_N5kmF