From 147765f4adb2b8be55b31cc86a512d7acb571a0c Mon Sep 17 00:00:00 2001 From: Igor Michalski Date: Tue, 27 Jan 2026 14:31:31 +0100 Subject: [PATCH 1/2] Add pearl stasis prevention feature Took 27 minutes --- eternalcombat-plugin/build.gradle.kts | 2 +- .../fight/pearl/FightPearlController.java | 18 ++++++++++++++++++ .../combat/fight/pearl/FightPearlSettings.java | 6 ++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/eternalcombat-plugin/build.gradle.kts b/eternalcombat-plugin/build.gradle.kts index bb30b962..f8e234b4 100644 --- a/eternalcombat-plugin/build.gradle.kts +++ b/eternalcombat-plugin/build.gradle.kts @@ -162,7 +162,7 @@ bukkit { tasks { runServer { - minecraftVersion("1.21.10") + minecraftVersion("1.21.11") downloadPlugins.modrinth("WorldEdit", Versions.WORLDEDIT) downloadPlugins.modrinth("PacketEvents", "${Versions.PACKETEVENTS}+spigot") downloadPlugins.modrinth("WorldGuard", Versions.WORLDGUARD) diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlController.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlController.java index bfd35700..a86b62f3 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlController.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlController.java @@ -14,6 +14,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.inventory.ItemStack; public class FightPearlController implements Listener { @@ -80,6 +81,23 @@ public void onPearlDamage(EntityDamageByEntityEvent event) { event.setDamage(0.0); } + @EventHandler(priority = EventPriority.HIGHEST) + public void onPearlStasisTeleport(PlayerTeleportEvent event) { + if (event.getCause() != PlayerTeleportEvent.TeleportCause.ENDER_PEARL) { + return; + } + + if (!this.settings.preventPearlStasis) { + return; + } + + if (!this.fightManager.isInCombat(event.getPlayer().getUniqueId())) { + return; + } + + event.setCancelled(true); + } + private void handlePearlCooldown(ProjectileLaunchEvent event, Player player, UUID playerId) { if (this.settings.pearlThrowDelay.isZero()) { return; diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlSettings.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlSettings.java index 4cb29803..668f22fc 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlSettings.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlSettings.java @@ -21,6 +21,12 @@ public class FightPearlSettings extends OkaeriConfig { @Comment("# Set true, If you want add cooldown to pearls") public boolean pearlCooldownEnabled = false; + @Comment({ + "# Prevent players from using ender pearl stasis to avoid combat.", + "# This setting prevents the player from teleporting with a statis pearl during combat." + }) + public boolean preventPearlStasis = false; + @Comment({ "# Block throwing pearls with delay?", "# If you set this to for example 3s, player will have to wait 3 seconds before throwing another pearl" From 500497fdbe764b33350eb3c30430442be2010592 Mon Sep 17 00:00:00 2001 From: Igor Michalski Date: Tue, 27 Jan 2026 14:45:04 +0100 Subject: [PATCH 2/2] Add message to pearl stasis prevention feature Took 8 minutes --- .../combat/fight/pearl/FightPearlController.java | 10 +++++++++- .../combat/fight/pearl/FightPearlSettings.java | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlController.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlController.java index a86b62f3..52bf49aa 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlController.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlController.java @@ -91,11 +91,19 @@ public void onPearlStasisTeleport(PlayerTeleportEvent event) { return; } - if (!this.fightManager.isInCombat(event.getPlayer().getUniqueId())) { + Player player = event.getPlayer(); + UUID playerId = player.getUniqueId(); + + if (!this.fightManager.isInCombat(playerId)) { return; } event.setCancelled(true); + + this.noticeService.create() + .player(playerId) + .notice(this.settings.pearlTeleportBlockedDuringCombat) + .send(); } private void handlePearlCooldown(ProjectileLaunchEvent event, Player player, UUID playerId) { diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlSettings.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlSettings.java index 668f22fc..a6ec18fc 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlSettings.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/pearl/FightPearlSettings.java @@ -43,4 +43,8 @@ public class FightPearlSettings extends OkaeriConfig { .chat("You must wait {TIME} before next throw!") .build(); + @Comment("# Message sent when player tries to teleport with ender pearl, but are disabled") + public Notice pearlTeleportBlockedDuringCombat = BukkitNotice.builder() + .chat("Teleporting through ender pearls is not allowed during combat!") + .build(); }