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/pom.xml b/pom.xml
new file mode 100644
index 0000000..84e0d97
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,49 @@
+
+
+ 4.0.0
+
+ com.github.aasmus
+ PvPToggle
+ 2.0
+
+
+ 21
+ 21
+
+
+
+
+ papermc
+ https://repo.papermc.io/repository/maven-public/
+
+
+
+ canvasmc
+ https://maven.canvasmc.io/snapshots
+
+
+
+ placeholderapi
+ https://repo.extendedclip.com/content/repositories/placeholderapi/
+
+
+
+
+
+ io.canvasmc.canvas
+ canvas-api
+ 1.21.11-R0.1-SNAPSHOT
+ provided
+
+
+
+ me.clip
+ placeholderapi
+ 2.12.2
+ provided
+
+
+
+
diff --git a/src/com/github/aasmus/pvptoggle/PvPCommand.java b/src/com/github/aasmus/pvptoggle/PvPCommand.java
deleted file mode 100644
index 5c0465c..0000000
--- a/src/com/github/aasmus/pvptoggle/PvPCommand.java
+++ /dev/null
@@ -1,211 +0,0 @@
-package com.github.aasmus.pvptoggle;
-
-import org.bukkit.Bukkit;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.command.ConsoleCommandSender;
-import org.bukkit.entity.Player;
-
-import com.github.aasmus.pvptoggle.utils.Chat;
-import com.github.aasmus.pvptoggle.utils.Util;
-
-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) {
- 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
- Chat.send(console, "NO_PLAYER", args[1]);
- } else { //set pvp state
- Boolean current = PvPToggle.instance.players.get(other.getUniqueId());
- if(args[0].equals("reload")) {
- reloadConfig();
- return true;
- } else if(args[0].equals("toggle")) {
- if(current == true) {
- if (Util.setPlayerState(other, false, console)) {
- 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)) {
- Chat.send(other, "PVP_STATE_DISABLED");
- }
- }
- } else if(args[0].equalsIgnoreCase("on")) {
- if (Util.setPlayerState(other, false, console)) {
- Chat.send(other, "PVP_STATE_ENABLED");
- if (current == true) {
- 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")) {
- if (Util.setPlayerState(other, true, console)) {
- 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(console, "PVP_STATE_CHANGED_OTHERS", other.getDisplayName(), current);
- }
- } catch (Exception e) {
- //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")) {
- 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)) {
- Chat.send(p, "PVP_STATE_ENABLED");
- if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) {
- Util.particleEffect(p.getPlayer());
- }
- if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) {
- Util.ChangeNametag(p.getPlayer(), "&c"); }
- }
- } else {
- if (Util.setPlayerState(p, true, p)) {
- Chat.send(p, "PVP_STATE_DISABLED");
- }
- }
- } else if(args[0].equalsIgnoreCase("on")) {
- Util.setCooldownTime(p);
- if (Util.setPlayerState(p, false, p)) {
- Chat.send(p, "PVP_STATE_ENABLED");
- if (current == true) {
- if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) {
- Util.particleEffect(p.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)) {
- Chat.send(p, "PVP_STATE_DISABLED");
- if(PvPToggle.instance.getConfig().getBoolean("SETTINGS.NAMETAG")) {
- Util.ChangeNametag(p.getPlayer(), "reset");
- }
- }
- } else if(args[0].equalsIgnoreCase("status")) {
- Chat.send(p, "PVP_STATUS", null, current);
- } else {
- if(sender.hasPermission("pvptoggle.others")) {
- Player other = Bukkit.getPlayerExact(args[0]);
- if(other == null) {
- Chat.send(p, "NO_PLAYER", args[0]);
- } else {
- current = PvPToggle.instance.players.get(other.getUniqueId());
- Chat.send(p, "PVP_STATUS_OTHERS", other.getDisplayName(), current);
- }
- } else {
- if(!args[0].contains("\\")) {
- Chat.send(p, "COMMAND_INVALID_PARAMETER", args[0]);
- }
- }
- }
- }
-
- }
- } 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]);
- } else {
- Boolean current = PvPToggle.instance.players.get(other.getUniqueId());
- if(args[0].equals("toggle")) {
- if(current == true) {
- if (Util.setPlayerState(other, false, sender)) {
- 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)) {
- Chat.send(other, "PVP_STATE_DISABLED");
- }
- }
- } else if(args[0].equalsIgnoreCase("on")) {
- if (Util.setPlayerState(other, false, sender)) {
- if (current == true) {
- 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")) {
- if (Util.setPlayerState(other, true, sender)) {
- 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);
- }
- } else {
- Chat.send(p, "COMMAND_NO_PERMISSION");
- }
- }
- }
- return true;
- }
- return false;
- }
-
- public void reloadConfig() {
- PvPToggle.instance.reloadConfig();
- }
-
-}
diff --git a/src/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java b/src/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java
deleted file mode 100644
index d41ca1f..0000000
--- a/src/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.github.aasmus.pvptoggle.listeners;
-
-import com.github.aasmus.pvptoggle.PvPToggle;
-import com.github.aasmus.pvptoggle.utils.Chat;
-import com.github.aasmus.pvptoggle.utils.Util;
-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());
-
- // 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);
- 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) {
- Util.setPlayerState(player.getUniqueId(), false);
- 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/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java b/src/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java
deleted file mode 100644
index 9e9acbd..0000000
--- a/src/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.github.aasmus.pvptoggle.listeners;
-
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.player.PlayerJoinEvent;
-
-import com.github.aasmus.pvptoggle.PvPToggle;
-import com.github.aasmus.pvptoggle.utils.Util;
-
-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");
- }
- }
- }
- }
- }
-
- @EventHandler
- public void onPlayerJoin(PlayerJoinEvent event) {
- Player p = event.getPlayer();
- 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");
- }
- }
- }
- }
-
-}
diff --git a/src/com/github/aasmus/pvptoggle/utils/Util.java b/src/com/github/aasmus/pvptoggle/utils/Util.java
deleted file mode 100644
index 7cc2113..0000000
--- a/src/com/github/aasmus/pvptoggle/utils/Util.java
+++ /dev/null
@@ -1,119 +0,0 @@
-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){
- Boolean result = PvPToggle.instance.players.get(uuid);
- if(result==null) return false;
- else return result;
- }
-
- public static void setPlayerState(UUID uuid, boolean state){
- PvPToggle.instance.players.put(uuid,state);
- }
-
- // Set player state while performing checks to make sure it's a valid switch.
- public static boolean setPlayerState(Player player, boolean state, CommandSender caller) {
- if (player == null) {
- return false;
- }
-
- 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 (caller == player) {
- Chat.send(caller, "PVP_WORLD_CANNOT_CHANGE_SELF");
- } else {
- Chat.send(caller, "PVP_WORLD_CANNOT_CHANGE_OTHERS");
- }
- 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 (caller == player) {
- Chat.send(caller, "PVP_WORLD_CANNOT_CHANGE_SELF");
- } else {
- Chat.send(caller, "PVP_WORLD_CANNOT_CHANGE_OTHERS");
- }
- return false;
- }
-
- setPlayerState(player.getUniqueId(), state);
- return true;
- }
-
- public static void setCooldownTime(Player p) {
- PvPToggle.instance.cooldowns.put(p.getUniqueId(), new Date());
- }
-
- public static void removeCooldownTime(Player p) {
- PvPToggle.instance.cooldowns.remove(p.getUniqueId());
- }
-
- public static boolean getCooldown(Player p) {
- if(PvPToggle.instance.cooldowns.containsKey(p.getUniqueId())) {
- Date lastChange = PvPToggle.instance.cooldowns.get(p.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);
- return false;
- } else {
- Chat.send(p, "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);
- }
- }
-
- }
-
- }.runTaskTimer(PvPToggle.instance, 0L, 2L);
- }
-
-}
diff --git a/src/main/java/com/github/aasmus/pvptoggle/PvPCommand.java b/src/main/java/com/github/aasmus/pvptoggle/PvPCommand.java
new file mode 100644
index 0000000..5bcb4eb
--- /dev/null
+++ b/src/main/java/com/github/aasmus/pvptoggle/PvPCommand.java
@@ -0,0 +1,195 @@
+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;
+import org.bukkit.command.CommandSender;
+import org.bukkit.command.ConsoleCommandSender;
+import org.bukkit.entity.Player;
+
+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(@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
+ Chat.send(console, "NO_PLAYER", args[1]);
+ } else { //set pvp state
+ Boolean current = PvPToggle.instance.players.get(other.getUniqueId());
+ if (args[0].equals("reload")) {
+ reloadConfig();
+ return true;
+ } else if (args[0].equals("toggle")) {
+ if (current == true) {
+ if (Util.setPlayerState(other, false, console)) {
+ Bukkit.getPluginManager().callEvent(new PvPToggleEvent(other));
+ Chat.send(other, "PVP_STATE_ENABLED");
+ if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) {
+ Util.particleEffect(other.getPlayer());
+ }
+ }
+ } else {
+ if (Util.setPlayerState(other, true, console)) {
+ 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));
+ Chat.send(other, "PVP_STATE_ENABLED");
+ if (current == true) {
+ if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) {
+ Util.particleEffect(other.getPlayer());
+ }
+ }
+ }
+ } else if (args[0].equalsIgnoreCase("off")) {
+ if (Util.setPlayerState(other, true, console)) {
+ Bukkit.getPluginManager().callEvent(new PvPToggleEvent(other));
+ Chat.send(other, "PVP_STATE_DISABLED");
+ }
+ }
+ current = PvPToggle.instance.players.get(other.getUniqueId());
+ Chat.send(console, "PVP_STATE_CHANGED_OTHERS", other.getDisplayName(), current);
+ }
+ } catch (Exception e) {
+ //nothing needs to be done
+ }
+ }
+ } 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 (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(player.getPlayer());
+ }
+ }
+ } else {
+ 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(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(player.getPlayer());
+ }
+ }
+ }
+ } 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(player, "PVP_STATUS", null, current);
+ } else {
+ if (sender.hasPermission("pvptoggle.others")) {
+ Player other = Bukkit.getPlayerExact(args[0]);
+ if (other == null) {
+ Chat.send(player, "NO_PLAYER", args[0]);
+ } else {
+ current = PvPToggle.instance.players.get(other.getUniqueId());
+ Chat.send(player, "PVP_STATUS_OTHERS", other.getDisplayName(), current);
+ }
+ } else {
+ if (!args[0].contains("\\")) {
+ Chat.send(player, "COMMAND_INVALID_PARAMETER", args[0]);
+ }
+ }
+ }
+ }
+ }
+ } else if (args.length == 2) {
+ if (sender.hasPermission("pvptoggle.others.set")) {
+ Player other = Bukkit.getPlayerExact(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 (Util.setPlayerState(other, false, sender)) {
+ Bukkit.getPluginManager().callEvent(new PvPToggleEvent(other));
+ Chat.send(other, "PVP_STATE_ENABLED");
+ if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) {
+ Util.particleEffect(other.getPlayer());
+ }
+ }
+ } else {
+ if (Util.setPlayerState(other, true, sender)) {
+ 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));
+ if (current == true) {
+ if (PvPToggle.instance.getConfig().getBoolean("SETTINGS.PARTICLES")) {
+ Util.particleEffect(other.getPlayer());
+ }
+ }
+ Chat.send(other, "PVP_STATE_ENABLED");
+ }
+ } else if (args[0].equalsIgnoreCase("off")) {
+ if (Util.setPlayerState(other, true, sender)) {
+ Bukkit.getPluginManager().callEvent(new PvPToggleEvent(other));
+ Chat.send(other, "PVP_STATE_DISABLED");
+ }
+ }
+ current = PvPToggle.instance.players.get(other.getUniqueId());
+ Chat.send(player, "PVP_STATE_CHANGED_OTHERS", other.getDisplayName(), current);
+ }
+ } else {
+ Chat.send(player, "COMMAND_NO_PERMISSION");
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public void reloadConfig() {
+ PvPToggle.instance.reloadConfig();
+ }
+}
diff --git a/src/com/github/aasmus/pvptoggle/PvPToggle.java b/src/main/java/com/github/aasmus/pvptoggle/PvPToggle.java
similarity index 71%
rename from src/com/github/aasmus/pvptoggle/PvPToggle.java
rename to src/main/java/com/github/aasmus/pvptoggle/PvPToggle.java
index d07db60..3675c40 100644
--- a/src/com/github/aasmus/pvptoggle/PvPToggle.java
+++ b/src/main/java/com/github/aasmus/pvptoggle/PvPToggle.java
@@ -1,64 +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.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
new file mode 100644
index 0000000..4f197d4
--- /dev/null
+++ b/src/main/java/com/github/aasmus/pvptoggle/events/PvPToggleEvent.java
@@ -0,0 +1,29 @@
+package com.github.aasmus.pvptoggle.events;
+
+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;
+
+ public PvPToggleEvent(Player player) {
+ this.player = player;
+ }
+
+ private static final HandlerList HANDLERS = new HandlerList();
+
+ public @NonNull HandlerList getHandlers() {
+ return HANDLERS;
+ }
+
+ public static HandlerList getHandlerList() {
+ return HANDLERS;
+ }
+
+ public Player getPlayer() {
+ return this.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
new file mode 100644
index 0000000..3cf3289
--- /dev/null
+++ b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.java
@@ -0,0 +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;
+public class PlayerChangeWorld implements Listener {
+
+ @EventHandler
+ 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 (Boolean.FALSE.equals(world.getGameRuleValue(GameRules.PVP)) && playerPvpEnabled) {
+ Util.setPlayerState(player.getUniqueId(), true);
+ Bukkit.getPluginManager().callEvent(new PvPToggleEvent(player));
+ Chat.send(player, "PVP_WORLD_CHANGE_DISABLED");
+ 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 (Boolean.TRUE.equals(world.getGameRuleValue(GameRules.PVP)) && PvPToggle.blockedWorlds.contains(world.getName()) && !playerPvpEnabled) {
+ Util.setPlayerState(player.getUniqueId(), false);
+ 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/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java
new file mode 100644
index 0000000..451a6a6
--- /dev/null
+++ b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerJoin.java
@@ -0,0 +1,50 @@
+package com.github.aasmus.pvptoggle.listeners;
+
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerJoinEvent;
+
+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 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")) {
+ 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
+ } 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());
+ }
+ }
+ }
+}
diff --git a/src/com/github/aasmus/pvptoggle/listeners/PlayerLeave.java b/src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerLeave.java
similarity index 86%
rename from src/com/github/aasmus/pvptoggle/listeners/PlayerLeave.java
rename to src/main/java/com/github/aasmus/pvptoggle/listeners/PlayerLeave.java
index b8eaca4..a9882c9 100644
--- a/src/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/com/github/aasmus/pvptoggle/listeners/PvP.java b/src/main/java/com/github/aasmus/pvptoggle/listeners/PvP.java
similarity index 59%
rename from src/com/github/aasmus/pvptoggle/listeners/PvP.java
rename to src/main/java/com/github/aasmus/pvptoggle/listeners/PvP.java
index 8a68ee9..067273b 100644
--- a/src/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/com/github/aasmus/pvptoggle/utils/Chat.java b/src/main/java/com/github/aasmus/pvptoggle/utils/Chat.java
similarity index 63%
rename from src/com/github/aasmus/pvptoggle/utils/Chat.java
rename to src/main/java/com/github/aasmus/pvptoggle/utils/Chat.java
index 3f4e08a..9ac8690 100644
--- a/src/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/com/github/aasmus/pvptoggle/utils/PersistentData.java b/src/main/java/com/github/aasmus/pvptoggle/utils/PersistentData.java
similarity index 96%
rename from src/com/github/aasmus/pvptoggle/utils/PersistentData.java
rename to src/main/java/com/github/aasmus/pvptoggle/utils/PersistentData.java
index c2f9bb5..06fd23f 100644
--- a/src/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/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.java b/src/main/java/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.java
similarity index 55%
rename from src/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.java
rename to src/main/java/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.java
index f4c5be2..d401b8a 100644
--- a/src/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
new file mode 100644
index 0000000..b865a60
--- /dev/null
+++ b/src/main/java/com/github/aasmus/pvptoggle/utils/Util.java
@@ -0,0 +1,99 @@
+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 com.github.aasmus.pvptoggle.PvPToggle;
+
+public class Util {
+
+ 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;
+ }
+ }
+
+ public static void setPlayerState(UUID uuid, boolean state) {
+ PvPToggle.instance.players.put(uuid,state);
+ }
+
+ // Set player state while performing checks to make sure it's a valid switch.
+ public static boolean setPlayerState(Player player, boolean state, CommandSender caller) {
+ if (player == null) {
+ return false;
+ }
+
+ World world = player.getWorld();
+ // You can't set the state to false (PVP enabled) if the world doesn't allow it
+ if (Boolean.FALSE.equals(world.getGameRuleValue(GameRules.PVP)) && !state) {
+ if (caller == player) {
+ Chat.send(caller, "PVP_WORLD_CANNOT_CHANGE_SELF");
+ } else {
+ Chat.send(caller, "PVP_WORLD_CANNOT_CHANGE_OTHERS");
+ }
+ return false;
+ }
+
+ // You can't set the state to true (PVP disabled) if the world requires it
+ 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 {
+ Chat.send(caller, "PVP_WORLD_CANNOT_CHANGE_OTHERS");
+ }
+ return false;
+ }
+
+ setPlayerState(player.getUniqueId(), state);
+ return true;
+ }
+
+ public static void setCooldownTime(Player player) {
+ PvPToggle.instance.cooldowns.put(player.getUniqueId(), new Date());
+ }
+
+ public static void removeCooldownTime(Player player) {
+ PvPToggle.instance.cooldowns.remove(player.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") || player.hasPermission("pvptoggle.bypass")) {
+ Util.removeCooldownTime(player);
+ return false;
+ } else {
+ Chat.send(player, "PVP_COOLDOWN", String.valueOf(PvPToggle.instance.getConfig().getInt("SETTINGS.COOLDOWN") - seconds));
+ return true;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ 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);
+ }
+ }
+ }, null, 1L, 2L);
+ }
+}
diff --git a/src/resources/config.yml b/src/main/resources/config.yml
similarity index 92%
rename from src/resources/config.yml
rename to src/main/resources/config.yml
index bfbadcd..92cf5e4 100644
--- a/src/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/resources/plugin.yml b/src/main/resources/plugin.yml
similarity index 85%
rename from src/resources/plugin.yml
rename to src/main/resources/plugin.yml
index 40c764d..60f389f 100644
--- a/src/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.7
-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.
diff --git a/target/PvPToggle-2.0.jar b/target/PvPToggle-2.0.jar
new file mode 100644
index 0000000..9e1880d
Binary files /dev/null and b/target/PvPToggle-2.0.jar differ
diff --git a/target/classes/com/github/aasmus/pvptoggle/PvPCommand.class b/target/classes/com/github/aasmus/pvptoggle/PvPCommand.class
new file mode 100644
index 0000000..b7038ce
Binary files /dev/null and b/target/classes/com/github/aasmus/pvptoggle/PvPCommand.class differ
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 0000000..580ed8c
Binary files /dev/null and b/target/classes/com/github/aasmus/pvptoggle/PvPToggle.class differ
diff --git a/target/classes/com/github/aasmus/pvptoggle/events/PvPToggleEvent.class b/target/classes/com/github/aasmus/pvptoggle/events/PvPToggleEvent.class
new file mode 100644
index 0000000..d6567e3
Binary files /dev/null and b/target/classes/com/github/aasmus/pvptoggle/events/PvPToggleEvent.class differ
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 0000000..6369ced
Binary files /dev/null and b/target/classes/com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.class differ
diff --git a/target/classes/com/github/aasmus/pvptoggle/listeners/PlayerJoin.class b/target/classes/com/github/aasmus/pvptoggle/listeners/PlayerJoin.class
new file mode 100644
index 0000000..4bf95c6
Binary files /dev/null and b/target/classes/com/github/aasmus/pvptoggle/listeners/PlayerJoin.class differ
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 0000000..84e74b5
Binary files /dev/null and b/target/classes/com/github/aasmus/pvptoggle/listeners/PlayerLeave.class differ
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 0000000..8902865
Binary files /dev/null and b/target/classes/com/github/aasmus/pvptoggle/listeners/PvP.class differ
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 0000000..5cde395
Binary files /dev/null and b/target/classes/com/github/aasmus/pvptoggle/utils/Chat.class differ
diff --git a/target/classes/com/github/aasmus/pvptoggle/utils/PersistentData.class b/target/classes/com/github/aasmus/pvptoggle/utils/PersistentData.class
new file mode 100644
index 0000000..ae4b1dc
Binary files /dev/null and b/target/classes/com/github/aasmus/pvptoggle/utils/PersistentData.class differ
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 0000000..09d79dc
Binary files /dev/null and b/target/classes/com/github/aasmus/pvptoggle/utils/PlaceholderAPIHook.class differ
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 0000000..f1caf5a
Binary files /dev/null and b/target/classes/com/github/aasmus/pvptoggle/utils/Util.class differ
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..12bbf12
--- /dev/null
+++ b/target/maven-archiver/pom.properties
@@ -0,0 +1,3 @@
+artifactId=PvPToggle
+groupId=com.github.aasmus
+version=2.0
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..6a25dd1
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,11 @@
+com/github/aasmus/pvptoggle/PvPToggle.class
+com/github/aasmus/pvptoggle/listeners/PlayerChangeWorld.class
+com/github/aasmus/pvptoggle/utils/Util.class
+com/github/aasmus/pvptoggle/events/PvPToggleEvent.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..22b8ba4
--- /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