diff --git a/src/main/java/com/garbagemule/MobArena/ArenaListener.java b/src/main/java/com/garbagemule/MobArena/ArenaListener.java index dff3381..431808d 100644 --- a/src/main/java/com/garbagemule/MobArena/ArenaListener.java +++ b/src/main/java/com/garbagemule/MobArena/ArenaListener.java @@ -116,7 +116,6 @@ public class ArenaListener private boolean protect; private boolean monsterExp; private boolean monsterInfight; - private boolean pvpOn; private boolean pvpEnabled; private boolean foodRegen; private boolean lockFoodLevel; @@ -142,7 +141,7 @@ public class ArenaListener this.protect = s.getBoolean("protect", true); this.monsterExp = s.getBoolean("monster-exp", false); this.monsterInfight = s.getBoolean("monster-infight", false); - this.pvpOn = s.getBoolean("pvp-enabled", false); + this.pvpEnabled = s.getBoolean("pvp-enabled", false); this.foodRegen = s.getBoolean("food-regen", false); this.lockFoodLevel = s.getBoolean("lock-food-level", true); this.allowTeleport = s.getBoolean("allow-teleporting", false); @@ -161,16 +160,6 @@ public class ArenaListener ); } - void pvpActivate() { - if (arena.isRunning() && !arena.getPlayersInArena().isEmpty()) { - pvpEnabled = pvpOn; - } - } - - void pvpDeactivate() { - if (pvpOn) pvpEnabled = false; - } - public void onBlockBreak(BlockBreakEvent event) { // Check if the block is a sign, it might be a leaderboard if (event.getBlock() instanceof Sign) { @@ -722,11 +711,15 @@ public class ArenaListener return; } - // Cancel PvP damage if disabled - if (!pvpEnabled && damager instanceof Player && !damager.equals(player)) { - event.setCancelled(true); - return; + // If this is player damage (and not self-inflicted), handle PvP + if (damager instanceof Player && !damager.equals(player)) { + // PvP must be enabled, and the first wave must have spawned + if (!pvpEnabled || arena.getWaveManager().getWaveNumber() == 0) { + event.setCancelled(true); + return; + } } + event.setCancelled(false); arena.getArenaPlayer(player).getStats().add("dmgTaken", event.getDamage()); @@ -802,7 +795,7 @@ public class ArenaListener return; } - if (!pvpEnabled) { + if (!pvpEnabled || arena.getWaveManager().getWaveNumber() == 0) { event.setCancelled(true); } } @@ -913,7 +906,7 @@ public class ArenaListener if (potion.getShooter() instanceof Player) { // Check for PvP stuff if the shooter is a player - if (!pvpEnabled) { + if (!pvpEnabled || arena.getWaveManager().getWaveNumber() == 0) { // If a potion has harmful effects, remove all players. for (PotionEffect effect : potion.getEffects()) { PotionEffectType type = effect.getType(); diff --git a/src/main/java/com/garbagemule/MobArena/MASpawnThread.java b/src/main/java/com/garbagemule/MobArena/MASpawnThread.java index a3adf4d..ad8bd26 100644 --- a/src/main/java/com/garbagemule/MobArena/MASpawnThread.java +++ b/src/main/java/com/garbagemule/MobArena/MASpawnThread.java @@ -91,10 +91,7 @@ public class MASpawnThread implements Runnable } int delay = arena.getSettings().getInt("first-wave-delay", 5) * 20; - task = Bukkit.getScheduler().runTaskLater(plugin, () -> { - arena.getEventListener().pvpActivate(); - this.run(); - }, delay); + task = Bukkit.getScheduler().runTaskLater(plugin, this, delay); } public void stop() { @@ -103,8 +100,6 @@ public class MASpawnThread implements Runnable return; } - arena.getEventListener().pvpDeactivate(); - task.cancel(); task = null; }