From e8e866a3540c8bbc072408bdb1f31752349a4a08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Wojtas?= Date: Wed, 10 Dec 2025 20:36:04 +0100 Subject: [PATCH 01/11] Extract bypass conditions to extra class. Took 2 minutes --- .../combat/fight/event/CancelTagReason.java | 6 ++- eternalcombat-plugin/build.gradle.kts | 9 ++-- .../com/eternalcode/combat/CombatPlugin.java | 2 + .../combat/fight/FightBypassController.java | 51 +++++++++++++++++++ .../fight/controller/FightTagController.java | 30 ----------- 5 files changed, 63 insertions(+), 35 deletions(-) create mode 100644 eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/FightBypassController.java diff --git a/eternalcombat-api/src/main/java/com/eternalcode/combat/fight/event/CancelTagReason.java b/eternalcombat-api/src/main/java/com/eternalcode/combat/fight/event/CancelTagReason.java index 3bd1c7c4..eb18baab 100644 --- a/eternalcombat-api/src/main/java/com/eternalcode/combat/fight/event/CancelTagReason.java +++ b/eternalcombat-api/src/main/java/com/eternalcode/combat/fight/event/CancelTagReason.java @@ -2,6 +2,10 @@ public enum CancelTagReason { - TAGOUT + TAGOUT, + PERMISSION_BYPASS, + ADMIN, + CREATIVE_MODE, + } diff --git a/eternalcombat-plugin/build.gradle.kts b/eternalcombat-plugin/build.gradle.kts index 77d94a62..d09350de 100644 --- a/eternalcombat-plugin/build.gradle.kts +++ b/eternalcombat-plugin/build.gradle.kts @@ -88,10 +88,11 @@ bukkit { tasks { runServer { - minecraftVersion("1.21.8") - downloadPlugins.url("https://cdn.modrinth.com/data/1u6JkXh5/versions/Jk1z2u7n/worldedit-bukkit-7.3.16.jar") - downloadPlugins.url("https://github.com/retrooper/packetevents/releases/download/v2.9.5/packetevents-spigot-2.9.5.jar") - downloadPlugins.url("https://cdn.modrinth.com/data/DKY9btbd/versions/PO4MKx7e/worldguard-bukkit-7.0.14-dist.jar") + minecraftVersion("1.21.10") + downloadPlugins.url("https://cdn.modrinth.com/data/1u6JkXh5/versions/3ISh7ADm/worldedit-bukkit-7.3.17.jar") + downloadPlugins.url("https://cdn.modrinth.com/data/HYKaKraK/versions/7igcjlxa/packetevents-spigot-2.10.1.jar") + downloadPlugins.url("https://cdn.modrinth.com/data/DKY9btbd/versions/Cm1YG6Lt/worldguard-bukkit-7.0.15-beta-01.jar") + downloadPlugins.url("https://cdn.modrinth.com/data/Vebnzrzj/versions/OrIs0S6b/LuckPerms-Bukkit-5.5.17.jar") } } diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java index c2de7b8d..e75b8aac 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java @@ -8,6 +8,7 @@ import com.eternalcode.combat.bridge.BridgeService; import com.eternalcode.combat.crystalpvp.RespawnAnchorListener; import com.eternalcode.combat.crystalpvp.EndCrystalListener; +import com.eternalcode.combat.fight.FightBypassController; import com.eternalcode.combat.fight.drop.DropKeepInventoryService; import com.eternalcode.combat.fight.FightManager; import com.eternalcode.combat.fight.drop.DropService; @@ -172,6 +173,7 @@ public void onEnable() { eventManager.subscribe( new FightTagController(this.fightManager, pluginConfig), new FightUnTagController(this.fightManager, pluginConfig, logoutService), + new FightBypassController(this.getServer(), pluginConfig), new FightActionBlockerController(this.fightManager, noticeService, pluginConfig, server), new FightPearlController(pluginConfig.pearl, noticeService, this.fightManager, this.fightPearlService), new UpdaterNotificationController(updaterService, pluginConfig, this.audienceProvider, miniMessage), diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/FightBypassController.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/FightBypassController.java new file mode 100644 index 00000000..d2622734 --- /dev/null +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/FightBypassController.java @@ -0,0 +1,51 @@ +package com.eternalcode.combat.fight; + +import com.eternalcode.combat.config.implementation.PluginConfig; +import com.eternalcode.combat.fight.event.CancelTagReason; +import com.eternalcode.combat.fight.event.FightTagEvent; +import java.util.UUID; +import org.bukkit.GameMode; +import org.bukkit.Server; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +public class FightBypassController implements Listener { + + private static final String BYPASS_PERMISSION = "eternalcombat.bypass"; + + private final Server server; + private final PluginConfig config; + + public FightBypassController(Server server, PluginConfig config) { + this.server = server; + this.config = config; + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + void onFightTagEvent(FightTagEvent event) { + UUID uniqueId = event.getPlayer(); + + Player player = this.server.getPlayer(uniqueId); + if (player == null) { + return; + } + + if (player.hasPermission(BYPASS_PERMISSION)) { + event.setCancelReason(CancelTagReason.PERMISSION_BYPASS); + event.setCancelled(true); + } + + if (this.config.admin.excludeAdminsFromCombat && player.isOp()) { + event.setCancelReason(CancelTagReason.ADMIN); + event.setCancelled(true); + } + + if (this.config.admin.excludeCreativePlayersFromCombat && player.getGameMode() == GameMode.CREATIVE) { + event.setCancelReason(CancelTagReason.CREATIVE_MODE); + event.setCancelled(true); + } + } + +} diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightTagController.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightTagController.java index 4dc6ec51..bd9a36d7 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightTagController.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightTagController.java @@ -4,7 +4,6 @@ import com.eternalcode.combat.config.implementation.PluginConfig; import com.eternalcode.combat.fight.FightManager; import com.eternalcode.combat.fight.event.CauseOfTag; -import org.bukkit.GameMode; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; @@ -56,14 +55,6 @@ void onEntityDamageByEntity(EntityDamageByEntityEvent event) { return; } - if (this.cannotBeTagged(attacker)) { - return; - } - - if (this.cannotBeTagged(attackedPlayerByPerson)) { - return; - } - if (this.config.combat.disableFlying) { if (attackedPlayerByPerson.isFlying()) { attackedPlayerByPerson.setFlying(false); @@ -99,15 +90,6 @@ void onEntityDamage(EntityDamageEvent event) { return; } - if (this.cannotBeTagged(player)) { - return; - } - - boolean hasBypass = player.hasPermission("eternalcombat.bypass"); - if (hasBypass) { - return; - } - Duration combatTime = this.config.settings.combatTimerDuration; UUID uuid = player.getUniqueId(); @@ -145,18 +127,6 @@ private boolean isPlayerInDisabledWorld(Player player) { return this.config.settings.ignoredWorlds.contains(worldName); } - private boolean cannotBeTagged(Player player) { - if (this.config.admin.excludeAdminsFromCombat && player.hasPermission("eternalcombat.bypass")) { - return true; - } - - if (this.config.admin.excludeAdminsFromCombat && player.isOp()) { - return true; - } - - return this.config.admin.excludeCreativePlayersFromCombat && player.getGameMode() == GameMode.CREATIVE; - } - } From f2790bca1cf24a5cc641f8e95b9d26b015f9c3e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Wojtas?= Date: Wed, 10 Dec 2025 20:41:48 +0100 Subject: [PATCH 02/11] Resolve Gemini review Took 4 minutes --- .../com/eternalcode/combat/fight/FightBypassController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/FightBypassController.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/FightBypassController.java index d2622734..94dc9563 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/FightBypassController.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/FightBypassController.java @@ -35,11 +35,13 @@ void onFightTagEvent(FightTagEvent event) { if (player.hasPermission(BYPASS_PERMISSION)) { event.setCancelReason(CancelTagReason.PERMISSION_BYPASS); event.setCancelled(true); + return; } if (this.config.admin.excludeAdminsFromCombat && player.isOp()) { event.setCancelReason(CancelTagReason.ADMIN); event.setCancelled(true); + return; } if (this.config.admin.excludeCreativePlayersFromCombat && player.getGameMode() == GameMode.CREATIVE) { From 5c1580500c5ce02594ea1d17c172dae17c0a242d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Wojtas?= Date: Wed, 10 Dec 2025 20:47:07 +0100 Subject: [PATCH 03/11] Move Controller to controller package and remove empty line Took 5 minutes --- .../com/eternalcode/combat/fight/event/CancelTagReason.java | 1 - .../src/main/java/com/eternalcode/combat/CombatPlugin.java | 2 +- .../combat/fight/{ => controller}/FightBypassController.java | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) rename eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/{ => controller}/FightBypassController.java (97%) diff --git a/eternalcombat-api/src/main/java/com/eternalcode/combat/fight/event/CancelTagReason.java b/eternalcombat-api/src/main/java/com/eternalcode/combat/fight/event/CancelTagReason.java index eb18baab..d35299d6 100644 --- a/eternalcombat-api/src/main/java/com/eternalcode/combat/fight/event/CancelTagReason.java +++ b/eternalcombat-api/src/main/java/com/eternalcode/combat/fight/event/CancelTagReason.java @@ -7,5 +7,4 @@ public enum CancelTagReason { ADMIN, CREATIVE_MODE, - } diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java index e75b8aac..ab44ef10 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java @@ -8,7 +8,7 @@ import com.eternalcode.combat.bridge.BridgeService; import com.eternalcode.combat.crystalpvp.RespawnAnchorListener; import com.eternalcode.combat.crystalpvp.EndCrystalListener; -import com.eternalcode.combat.fight.FightBypassController; +import com.eternalcode.combat.fight.controller.FightBypassController; import com.eternalcode.combat.fight.drop.DropKeepInventoryService; import com.eternalcode.combat.fight.FightManager; import com.eternalcode.combat.fight.drop.DropService; diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/FightBypassController.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassController.java similarity index 97% rename from eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/FightBypassController.java rename to eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassController.java index 94dc9563..d4699b32 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/FightBypassController.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassController.java @@ -1,4 +1,4 @@ -package com.eternalcode.combat.fight; +package com.eternalcode.combat.fight.controller; import com.eternalcode.combat.config.implementation.PluginConfig; import com.eternalcode.combat.fight.event.CancelTagReason; From b3f74a32ed650c019492092972f2bb2391bfb6f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Wojtas?= Date: Sat, 13 Dec 2025 21:42:17 +0100 Subject: [PATCH 04/11] Use build in Modrinth method to download plugins Took 23 minutes --- eternalcombat-plugin/build.gradle.kts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/eternalcombat-plugin/build.gradle.kts b/eternalcombat-plugin/build.gradle.kts index d09350de..fa2f1993 100644 --- a/eternalcombat-plugin/build.gradle.kts +++ b/eternalcombat-plugin/build.gradle.kts @@ -89,10 +89,10 @@ bukkit { tasks { runServer { minecraftVersion("1.21.10") - downloadPlugins.url("https://cdn.modrinth.com/data/1u6JkXh5/versions/3ISh7ADm/worldedit-bukkit-7.3.17.jar") - downloadPlugins.url("https://cdn.modrinth.com/data/HYKaKraK/versions/7igcjlxa/packetevents-spigot-2.10.1.jar") - downloadPlugins.url("https://cdn.modrinth.com/data/DKY9btbd/versions/Cm1YG6Lt/worldguard-bukkit-7.0.15-beta-01.jar") - downloadPlugins.url("https://cdn.modrinth.com/data/Vebnzrzj/versions/OrIs0S6b/LuckPerms-Bukkit-5.5.17.jar") + downloadPlugins.modrinth("WorldEdit", "3ISh7ADm") + downloadPlugins.modrinth("PacketEvents", "7igcjlxa") + downloadPlugins.modrinth("WorldGuard", "Cm1YG6Lt") + downloadPlugins.modrinth("LuckPerms", "OrIs0S6b") } } From cf5270833ab7326de6211c3a98e775067ce99fb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Wojtas?= Date: Sun, 21 Dec 2025 16:09:47 +0100 Subject: [PATCH 05/11] Resolve igoyek's review Took 3 minutes --- .../src/main/java/com/eternalcode/combat/CombatPlugin.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java index ab44ef10..f4f6eb63 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java @@ -173,14 +173,14 @@ public void onEnable() { eventManager.subscribe( new FightTagController(this.fightManager, pluginConfig), new FightUnTagController(this.fightManager, pluginConfig, logoutService), - new FightBypassController(this.getServer(), pluginConfig), + new FightBypassController(server, pluginConfig), new FightActionBlockerController(this.fightManager, noticeService, pluginConfig, server), new FightPearlController(pluginConfig.pearl, noticeService, this.fightManager, this.fightPearlService), new UpdaterNotificationController(updaterService, pluginConfig, this.audienceProvider, miniMessage), new KnockbackRegionController(noticeService, this.regionProvider, this.fightManager, knockbackService, server), - new FightEffectController(pluginConfig.effect, this.fightEffectService, this.fightManager, this.getServer()), + new FightEffectController(pluginConfig.effect, this.fightEffectService, this.fightManager, server), new FightTagOutController(this.fightTagOutService), - new FightMessageController(this.fightManager, noticeService, pluginConfig, this.getServer()), + new FightMessageController(this.fightManager, noticeService, pluginConfig, server), new BorderTriggerController(borderService, () -> pluginConfig.border, fightManager, server, scheduler), new ParticleController(borderService, () -> pluginConfig.border.particle, scheduler, server), new BorderBlockController(borderService, () -> pluginConfig.border.block, scheduler, server), From 01abfd4e164627e78e9ffd77e02545357e293e2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Wojtas?= Date: Sun, 21 Dec 2025 16:24:55 +0100 Subject: [PATCH 06/11] Resolve jakubek's review Took 15 minutes --- buildSrc/src/main/kotlin/Versions.kt | 6 ++++++ eternalcombat-plugin/build.gradle.kts | 10 +++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index de70921e..13ac9198 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -25,8 +25,14 @@ object Versions { const val WORLD_GUARD_BUKKIT = "7.0.14" const val PLACEHOLDER_API = "2.11.6" + const val LANDS_API = "7.17.2" const val PAPERLIB = "1.0.8" + const val WORLDEDIT = "3ISh7ADm" //cannot use numeric version bc of duplicated version on modrinth + const val PACKETEVENTS = "2.11.1" + const val WORLDGUARD = "7.0.15-beta-01" + const val LUCKPERMS = "5.5.17" + } diff --git a/eternalcombat-plugin/build.gradle.kts b/eternalcombat-plugin/build.gradle.kts index fa2f1993..09f7bab0 100644 --- a/eternalcombat-plugin/build.gradle.kts +++ b/eternalcombat-plugin/build.gradle.kts @@ -59,7 +59,7 @@ dependencies { compileOnly("me.clip:placeholderapi:${Versions.PLACEHOLDER_API}") // Lands - compileOnly("com.github.angeschossen:LandsAPI:7.17.2") + compileOnly("com.github.angeschossen:LandsAPI:${Versions.LANDS_API}") // Multification implementation("com.eternalcode:multification-bukkit:${Versions.MULTIFICATION}") @@ -89,10 +89,10 @@ bukkit { tasks { runServer { minecraftVersion("1.21.10") - downloadPlugins.modrinth("WorldEdit", "3ISh7ADm") - downloadPlugins.modrinth("PacketEvents", "7igcjlxa") - downloadPlugins.modrinth("WorldGuard", "Cm1YG6Lt") - downloadPlugins.modrinth("LuckPerms", "OrIs0S6b") + downloadPlugins.modrinth("WorldEdit", Versions.WORLDEDIT) + downloadPlugins.modrinth("PacketEvents", "${Versions.PACKETEVENTS}+spigot") + downloadPlugins.modrinth("WorldGuard", Versions.WORLDGUARD) + downloadPlugins.modrinth("LuckPerms", "v${Versions.LUCKPERMS}-bukkit") } } From a21075b5720cc7b453a97f3afe3ac840da9e344a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Wojtas?= Date: Sun, 21 Dec 2025 16:30:19 +0100 Subject: [PATCH 07/11] Try #1 resolve imDMK comment Took 5 minutes --- .../com/eternalcode/combat/CombatPlugin.java | 8 +++- .../FightBypassAdminController.java | 37 +++++++++++++++++++ ...ava => FightBypassCreativeController.java} | 18 +-------- .../FightBypassPermissionController.java | 36 ++++++++++++++++++ 4 files changed, 81 insertions(+), 18 deletions(-) create mode 100644 eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassAdminController.java rename eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/{FightBypassController.java => FightBypassCreativeController.java} (65%) create mode 100644 eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassPermissionController.java diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java index f4f6eb63..ef6d5f04 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/CombatPlugin.java @@ -8,7 +8,9 @@ import com.eternalcode.combat.bridge.BridgeService; import com.eternalcode.combat.crystalpvp.RespawnAnchorListener; import com.eternalcode.combat.crystalpvp.EndCrystalListener; -import com.eternalcode.combat.fight.controller.FightBypassController; +import com.eternalcode.combat.fight.controller.FightBypassAdminController; +import com.eternalcode.combat.fight.controller.FightBypassCreativeController; +import com.eternalcode.combat.fight.controller.FightBypassPermissionController; import com.eternalcode.combat.fight.drop.DropKeepInventoryService; import com.eternalcode.combat.fight.FightManager; import com.eternalcode.combat.fight.drop.DropService; @@ -173,7 +175,9 @@ public void onEnable() { eventManager.subscribe( new FightTagController(this.fightManager, pluginConfig), new FightUnTagController(this.fightManager, pluginConfig, logoutService), - new FightBypassController(server, pluginConfig), + new FightBypassAdminController(server, pluginConfig), + new FightBypassPermissionController(server), + new FightBypassCreativeController(server, pluginConfig), new FightActionBlockerController(this.fightManager, noticeService, pluginConfig, server), new FightPearlController(pluginConfig.pearl, noticeService, this.fightManager, this.fightPearlService), new UpdaterNotificationController(updaterService, pluginConfig, this.audienceProvider, miniMessage), diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassAdminController.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassAdminController.java new file mode 100644 index 00000000..099cc774 --- /dev/null +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassAdminController.java @@ -0,0 +1,37 @@ +package com.eternalcode.combat.fight.controller; + +import com.eternalcode.combat.config.implementation.PluginConfig; +import com.eternalcode.combat.fight.event.CancelTagReason; +import com.eternalcode.combat.fight.event.FightTagEvent; +import java.util.UUID; +import org.bukkit.Server; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +public class FightBypassAdminController implements Listener { + + private final Server server; + private final PluginConfig config; + + public FightBypassAdminController(Server server, PluginConfig config) { + this.server = server; + this.config = config; + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + void onFightTagEvent(FightTagEvent event) { + UUID uniqueId = event.getPlayer(); + + Player player = this.server.getPlayer(uniqueId); + if (player == null) { + return; + } + + if (this.config.admin.excludeAdminsFromCombat && player.isOp()) { + event.setCancelReason(CancelTagReason.ADMIN); + event.setCancelled(true); + } + } +} diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassController.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassCreativeController.java similarity index 65% rename from eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassController.java rename to eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassCreativeController.java index d4699b32..25776962 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassController.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassCreativeController.java @@ -11,14 +11,12 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -public class FightBypassController implements Listener { - - private static final String BYPASS_PERMISSION = "eternalcombat.bypass"; +public class FightBypassCreativeController implements Listener { private final Server server; private final PluginConfig config; - public FightBypassController(Server server, PluginConfig config) { + public FightBypassCreativeController(Server server, PluginConfig config) { this.server = server; this.config = config; } @@ -32,18 +30,6 @@ void onFightTagEvent(FightTagEvent event) { return; } - if (player.hasPermission(BYPASS_PERMISSION)) { - event.setCancelReason(CancelTagReason.PERMISSION_BYPASS); - event.setCancelled(true); - return; - } - - if (this.config.admin.excludeAdminsFromCombat && player.isOp()) { - event.setCancelReason(CancelTagReason.ADMIN); - event.setCancelled(true); - return; - } - if (this.config.admin.excludeCreativePlayersFromCombat && player.getGameMode() == GameMode.CREATIVE) { event.setCancelReason(CancelTagReason.CREATIVE_MODE); event.setCancelled(true); diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassPermissionController.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassPermissionController.java new file mode 100644 index 00000000..bcf68fd7 --- /dev/null +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightBypassPermissionController.java @@ -0,0 +1,36 @@ +package com.eternalcode.combat.fight.controller; + +import com.eternalcode.combat.fight.event.CancelTagReason; +import com.eternalcode.combat.fight.event.FightTagEvent; +import java.util.UUID; +import org.bukkit.Server; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +public class FightBypassPermissionController implements Listener { + + private static final String BYPASS_PERMISSION = "eternalcombat.bypass"; + + private final Server server; + + public FightBypassPermissionController(Server server) { + this.server = server; + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + void onFightTagEvent(FightTagEvent event) { + UUID uniqueId = event.getPlayer(); + + Player player = this.server.getPlayer(uniqueId); + if (player == null) { + return; + } + + if (player.hasPermission(BYPASS_PERMISSION)) { + event.setCancelReason(CancelTagReason.PERMISSION_BYPASS); + event.setCancelled(true); + } + } +} From be218248f97cc71d9570a96b506054c9b97def06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Wojtas?= Date: Sun, 28 Dec 2025 13:52:07 +0100 Subject: [PATCH 08/11] Fix enderpearl inflicting self damage, downgrade LiteCommands version to support folia. add folia runserver task Took 1 hour 6 minutes --- buildSrc/src/main/kotlin/Versions.kt | 2 +- eternalcombat-plugin/build.gradle.kts | 12 ++++++++++-- .../combat/fight/controller/FightTagController.java | 11 ++++++++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 13ac9198..05ee203c 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -15,7 +15,7 @@ object Versions { const val ADVENTURE_PLATFORM_BUKKIT = "4.4.1" const val ADVENTURE_API = "4.25.0" - const val LITE_COMMANDS = "3.10.5" + const val LITE_COMMANDS = "3.10.2" //downgrade bc 3.10.5 does not support folia const val OKAERI_CONFIGS_SERDES_COMMONS = "5.0.13" const val OKAERI_CONFIGS_SERDES_BUKKIT = "5.0.13" diff --git a/eternalcombat-plugin/build.gradle.kts b/eternalcombat-plugin/build.gradle.kts index 09f7bab0..f58a7c58 100644 --- a/eternalcombat-plugin/build.gradle.kts +++ b/eternalcombat-plugin/build.gradle.kts @@ -1,4 +1,5 @@ import net.minecrell.pluginyml.bukkit.BukkitPluginDescription +import xyz.jpenilla.runpaper.task.RunServer plugins { `eternalcombat-java` @@ -89,10 +90,17 @@ bukkit { tasks { runServer { minecraftVersion("1.21.10") + downloadPlugins.modrinth("WorldEdit", Versions.WORLDEDIT) - downloadPlugins.modrinth("PacketEvents", "${Versions.PACKETEVENTS}+spigot") + downloadPlugins.modrinth("PacketEvents", Versions.PACKETEVENTS) downloadPlugins.modrinth("WorldGuard", Versions.WORLDGUARD) - downloadPlugins.modrinth("LuckPerms", "v${Versions.LUCKPERMS}-bukkit") + downloadPlugins.modrinth("LuckPerms", Versions.LUCKPERMS) + } + + runPaper.folia.registerTask() { + minecraftVersion("1.21.8") + + downloadPlugins.modrinth("PacketEvents", Versions.PACKETEVENTS) } } diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightTagController.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightTagController.java index bd9a36d7..780f7128 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightTagController.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightTagController.java @@ -55,6 +55,14 @@ void onEntityDamageByEntity(EntityDamageByEntityEvent event) { return; } + UUID attackedUniqueId = attackedPlayerByPerson.getUniqueId(); + UUID attackerUniqueId = attacker.getUniqueId(); + + // enderpearl on folia counts as attack on self + if (attackedUniqueId == attackerUniqueId) { + return; + } + if (this.config.combat.disableFlying) { if (attackedPlayerByPerson.isFlying()) { attackedPlayerByPerson.setFlying(false); @@ -68,8 +76,6 @@ void onEntityDamageByEntity(EntityDamageByEntityEvent event) { } Duration combatTime = this.config.settings.combatTimerDuration; - UUID attackedUniqueId = attackedPlayerByPerson.getUniqueId(); - UUID attackerUniqueId = attacker.getUniqueId(); this.fightManager.tag(attackedUniqueId, combatTime, CauseOfTag.PLAYER, attackerUniqueId); this.fightManager.tag(attackerUniqueId, combatTime, CauseOfTag.PLAYER, attackedUniqueId); @@ -128,5 +134,4 @@ private boolean isPlayerInDisabledWorld(Player player) { } - } From 8d2ec8d4fc263e50401cb889f4c03a0a4b805d94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Wojtas?= Date: Sun, 28 Dec 2025 13:59:52 +0100 Subject: [PATCH 09/11] Rollback changes in runServer script - versions name missmatch Took 8 minutes --- buildSrc/src/main/kotlin/Versions.kt | 2 +- eternalcombat-plugin/build.gradle.kts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 05ee203c..160aa878 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -15,7 +15,7 @@ object Versions { const val ADVENTURE_PLATFORM_BUKKIT = "4.4.1" const val ADVENTURE_API = "4.25.0" - const val LITE_COMMANDS = "3.10.2" //downgrade bc 3.10.5 does not support folia + const val LITE_COMMANDS = "3.10.2" //downgrade bc 3.10.5 and 3.10.2 does not support folia const val OKAERI_CONFIGS_SERDES_COMMONS = "5.0.13" const val OKAERI_CONFIGS_SERDES_BUKKIT = "5.0.13" diff --git a/eternalcombat-plugin/build.gradle.kts b/eternalcombat-plugin/build.gradle.kts index f58a7c58..fb64e3ac 100644 --- a/eternalcombat-plugin/build.gradle.kts +++ b/eternalcombat-plugin/build.gradle.kts @@ -92,15 +92,15 @@ tasks { minecraftVersion("1.21.10") downloadPlugins.modrinth("WorldEdit", Versions.WORLDEDIT) - downloadPlugins.modrinth("PacketEvents", Versions.PACKETEVENTS) + downloadPlugins.modrinth("PacketEvents", "${Versions.PACKETEVENTS}+spigot") downloadPlugins.modrinth("WorldGuard", Versions.WORLDGUARD) - downloadPlugins.modrinth("LuckPerms", Versions.LUCKPERMS) + downloadPlugins.modrinth("LuckPerms", "v${Versions.LUCKPERMS}-bukkit") } runPaper.folia.registerTask() { minecraftVersion("1.21.8") - downloadPlugins.modrinth("PacketEvents", Versions.PACKETEVENTS) + downloadPlugins.modrinth("PacketEvents", "${Versions.PACKETEVENTS}+spigot") } } From 9a1246bc15886296d1aed559297cbf944f17aec7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Wojtas?= <80779749+CitralFlo@users.noreply.github.com> Date: Sun, 28 Dec 2025 14:02:43 +0100 Subject: [PATCH 10/11] Update eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightTagController.java Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- .../eternalcode/combat/fight/controller/FightTagController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightTagController.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightTagController.java index 780f7128..b06cf65c 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightTagController.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightTagController.java @@ -59,7 +59,7 @@ void onEntityDamageByEntity(EntityDamageByEntityEvent event) { UUID attackerUniqueId = attacker.getUniqueId(); // enderpearl on folia counts as attack on self - if (attackedUniqueId == attackerUniqueId) { + if (attackedUniqueId.equals(attackerUniqueId)) { return; } From 7e08a3a614bf82cb2be780244615a71efbdf4ab1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Wojtas?= <80779749+CitralFlo@users.noreply.github.com> Date: Sun, 28 Dec 2025 23:01:06 +0100 Subject: [PATCH 11/11] Update buildSrc/src/main/kotlin/Versions.kt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jakub Kędziora <77227023+Jakubk15@users.noreply.github.com> --- buildSrc/src/main/kotlin/Versions.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 160aa878..05ee203c 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -15,7 +15,7 @@ object Versions { const val ADVENTURE_PLATFORM_BUKKIT = "4.4.1" const val ADVENTURE_API = "4.25.0" - const val LITE_COMMANDS = "3.10.2" //downgrade bc 3.10.5 and 3.10.2 does not support folia + const val LITE_COMMANDS = "3.10.2" //downgrade bc 3.10.5 does not support folia const val OKAERI_CONFIGS_SERDES_COMMONS = "5.0.13" const val OKAERI_CONFIGS_SERDES_BUKKIT = "5.0.13"