diff --git a/Pvptoggle.iml b/Pvptoggle.iml
new file mode 100644
index 0000000..fa63d4b
--- /dev/null
+++ b/Pvptoggle.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+ SPIGOT
+
+
+
+
+
\ No newline at end of file
diff --git a/pvptogglepluginworkspace/src/main/java/benkralex/pvptoggle/PvpEvent.java b/pvptogglepluginworkspace/src/main/java/benkralex/pvptoggle/PvpEvent.java
index c915bf1..45e6ec4 100644
--- a/pvptogglepluginworkspace/src/main/java/benkralex/pvptoggle/PvpEvent.java
+++ b/pvptogglepluginworkspace/src/main/java/benkralex/pvptoggle/PvpEvent.java
@@ -2,82 +2,49 @@ package benkralex.pvptoggle;
import org.bukkit.NamespacedKey;
-import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
+import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
-import org.bukkit.persistence.PersistentDataAdapterContext;
-import org.bukkit.persistence.PersistentDataContainer;
-import org.bukkit.persistence.PersistentDataType;
-import sun.reflect.generics.tree.ArrayTypeSignature;
-
-import java.sql.Array;
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+import org.bukkit.projectiles.ProjectileSource;
public class PvpEvent implements Listener {
- @EventHandler
- public static void pvpListener(EntityDamageByEntityEvent event) {
+ @EventHandler(ignoreCancelled = true)
+ public void pvpListener(EntityDamageByEntityEvent event) {
Entity damager = event.getDamager();
Entity victim = event.getEntity();
- if (damager instanceof Player && victim instanceof Player) {
- List pvpvictimsList;
- List pvpvictimsListdamager;
- PersistentDataContainer pdc = victim.getPersistentDataContainer();
- PersistentDataContainer pdcdamager = damager.getPersistentDataContainer();
- PersistentDataContainer[] pvpvictims = pdc.get(new NamespacedKey(Pvptoggle.pvptoggle, "pvpvictims"), PersistentDataType.TAG_CONTAINER_ARRAY);
- PersistentDataContainer[] pvpvictimsdamager = pdcdamager.get(new NamespacedKey(Pvptoggle.pvptoggle, "pvpvictims"), PersistentDataType.TAG_CONTAINER_ARRAY);
- boolean canpvp = false;
- String victimuuid = victim.getUniqueId().toString();
-
- if (pvpvictims != null) {
- pvpvictimsList = new ArrayList(Arrays.asList(pvpvictims));
- } else {
- pvpvictimsList = new ArrayList();
- }
-
- if (pvpvictimsdamager != null) {
- pvpvictimsListdamager = new ArrayList(Arrays.asList(pvpvictimsdamager));
- } else {
- pvpvictimsListdamager = new ArrayList();
- }
-
- for (int i = 0; i= Instant.now().getEpochSecond() - Config.getpvptime()) {
- if (pdcfor.get(new NamespacedKey(Pvptoggle.pvptoggle, "uuid"), PersistentDataType.STRING).equals(victimuuid)) {
- canpvp = true;
- }
+ if (victim instanceof Player) {
+ Player victimplayer=(Player) victim;
+ Player damagerplayer;
+ if (damager instanceof Player) {
+ damagerplayer=(Player) damager;
+ } else if (damager instanceof Projectile) {
+ ProjectileSource shooter =((Projectile) damager).getShooter();
+ if(shooter instanceof Player){
+ damagerplayer=(Player) shooter;
} else {
- pvpvictimsListdamager.remove(i);
- i--;
+ return;
}
+ } else {
+ return;
}
- if (pdc.has(new NamespacedKey(Pvptoggle.pvptoggle, "pvptoggle"), PersistentDataType.BOOLEAN) &&
- pdc.get(new NamespacedKey(Pvptoggle.pvptoggle, "pvptoggle"), PersistentDataType.BOOLEAN) &&
- !canpvp) {
-
- event.setCancelled(true);
-
+ if (!Util.canPvP(damagerplayer, victimplayer)) {
+ event.setCancelled(true);
} else {
- PersistentDataContainer pdcupdated = pdc.getAdapterContext().newPersistentDataContainer();
- String uuid = damager.getUniqueId().toString();
- pdcupdated.set(new NamespacedKey(Pvptoggle.pvptoggle, "uuid"), PersistentDataType.STRING, uuid);
- pdcupdated.set(new NamespacedKey(Pvptoggle.pvptoggle, "time"), PersistentDataType.LONG, Instant.now().getEpochSecond());
- pvpvictimsList.add(pdcupdated);
- pvpvictims = pvpvictimsList.toArray(new PersistentDataContainer[pvpvictimsList.size()]);
- pdc.set(new NamespacedKey(Pvptoggle.pvptoggle, "pvpvictims"), PersistentDataType.TAG_CONTAINER_ARRAY, pvpvictims);
+ Util.savePvPData(damagerplayer,victimplayer);
}
}
}
-}
-//pdc.getAdapterContext().newPersistentDataContainer()
\ No newline at end of file
+ @EventHandler
+ public void playerLeaveListener(PlayerQuitEvent event){
+ event.getPlayer().getPersistentDataContainer().remove(new NamespacedKey(Pvptoggle.pvptoggle,"pvpdamagers"));
+ }
+}
\ No newline at end of file
diff --git a/pvptogglepluginworkspace/src/main/java/benkralex/pvptoggle/Pvptoggle.java b/pvptogglepluginworkspace/src/main/java/benkralex/pvptoggle/Pvptoggle.java
index d349af0..2ea4415 100644
--- a/pvptogglepluginworkspace/src/main/java/benkralex/pvptoggle/Pvptoggle.java
+++ b/pvptogglepluginworkspace/src/main/java/benkralex/pvptoggle/Pvptoggle.java
@@ -1,6 +1,7 @@
package benkralex.pvptoggle;
import org.bukkit.Bukkit;
+import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -12,15 +13,13 @@ public final class Pvptoggle extends JavaPlugin {
@Override
public void onEnable() {
- // Plugin enable logic
- pvptoggle = this;
Bukkit.getPluginManager().registerEvents(new PvpEvent(), this);
- PvpCommand.createPvpCommand();
Config.createConfig();
}
@Override
- public void onDisable() {
- // Plugin shutdown logic
+ public void onLoad(){
+ pvptoggle = this;
+ PvpCommand.createPvpCommand();
}
}
\ No newline at end of file
diff --git a/pvptogglepluginworkspace/src/main/java/benkralex/pvptoggle/Util.java b/pvptogglepluginworkspace/src/main/java/benkralex/pvptoggle/Util.java
new file mode 100644
index 0000000..1c41b79
--- /dev/null
+++ b/pvptogglepluginworkspace/src/main/java/benkralex/pvptoggle/Util.java
@@ -0,0 +1,49 @@
+package benkralex.pvptoggle;
+
+import org.bukkit.NamespacedKey;
+import org.bukkit.entity.Player;
+import org.bukkit.persistence.PersistentDataContainer;
+import org.bukkit.persistence.PersistentDataType;
+
+import java.time.Instant;
+
+public class Util {
+ public static boolean canPvP(Player damager, Player victim){
+ PersistentDataContainer victimPDC=damager.getPersistentDataContainer();
+ Boolean toggle = victimPDC.get(new NamespacedKey(Pvptoggle.pvptoggle, "pvptoggle"),PersistentDataType.BOOLEAN);
+ if(toggle!=null) {
+ return !toggle || checkPvPData(damager, victim);
+ } else {
+ return true;
+ }
+ }
+ public static boolean checkPvPData(Player damager, Player victim){
+ String victimUUID=victim.getUniqueId().toString();
+ PersistentDataContainer damagerPDC=damager.getPersistentDataContainer();
+ PersistentDataContainer damagersOfDamager=damagerPDC.get(new NamespacedKey(Pvptoggle.pvptoggle,"pvpdamagers"), PersistentDataType.TAG_CONTAINER);
+ if (damagersOfDamager!=null) {
+ delOldData(damagersOfDamager);
+ return damagersOfDamager.has(new NamespacedKey(Pvptoggle.pvptoggle, victimUUID), PersistentDataType.LONG);
+ } else {
+ return false;
+ }
+ }
+ public static void delOldData(PersistentDataContainer pvpdamagers){
+ for(NamespacedKey damagerKey:pvpdamagers.getKeys()){
+ if(pvpdamagers.get(damagerKey,PersistentDataType.LONG)>= Instant.now().getEpochSecond() + Config.getpvptime()){
+ pvpdamagers.remove(damagerKey);
+ }
+ }
+ }
+ public static void savePvPData(Player damager, Player victim){
+ PersistentDataContainer victimPDC=victim.getPersistentDataContainer();
+ String damagerUUID=damager.getUniqueId().toString();
+
+ PersistentDataContainer damagersOfVictim=victimPDC.get(new NamespacedKey(Pvptoggle.pvptoggle,"pvpdamagers"), PersistentDataType.TAG_CONTAINER);
+ if(damagersOfVictim == null) {
+ damagersOfVictim = victimPDC.getAdapterContext().newPersistentDataContainer();
+ }
+ damagersOfVictim.set(new NamespacedKey(Pvptoggle.pvptoggle, damagerUUID), PersistentDataType.LONG, Instant.now().getEpochSecond());
+ victimPDC.set(new NamespacedKey(Pvptoggle.pvptoggle,"pvpdamagers"), PersistentDataType.TAG_CONTAINER,damagersOfVictim);
+ }
+}