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..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 @@ -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,31 @@ 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; + } + + 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) { 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..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 @@ -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" @@ -37,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(); }