From bb73fd45314327420f9f35c624070b7303745e95 Mon Sep 17 00:00:00 2001 From: Juan Cruz Linsalata <25271111+linsaftw@users.noreply.github.com> Date: Sat, 21 Feb 2026 14:20:08 -0300 Subject: [PATCH] Implement velocity checks and logging in KnockbackUtil Added velocity limit checks and logging for players in KnockbackUtil. --- .../Manager/Match/Util/KnockbackUtil.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/dev/nandi0813/practice/Manager/Match/Util/KnockbackUtil.java b/src/main/java/dev/nandi0813/practice/Manager/Match/Util/KnockbackUtil.java index 5ba6be9..ab2e304 100644 --- a/src/main/java/dev/nandi0813/practice/Manager/Match/Util/KnockbackUtil.java +++ b/src/main/java/dev/nandi0813/practice/Manager/Match/Util/KnockbackUtil.java @@ -2,10 +2,15 @@ import dev.nandi0813.practice.Manager.File.ConfigManager; import dev.nandi0813.practice.Manager.Ladder.KnockbackType; +import org.bukkit.Bukkit; import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; import org.bukkit.util.Vector; +import java.util.logging.Logger; + public class KnockbackUtil { + private static final double MAX_VELOCITY_COMPONENT = 4.0; /** * It sets the knockback of a player based on the knockback type @@ -15,12 +20,10 @@ public class KnockbackUtil { */ public static void setPlayerKnockback(Entity player, KnockbackType knockbackType) { if (!ConfigManager.getConfig().getBoolean("knockback.enabled", true)) return; - int airhorizontal = ConfigManager.getConfig().getInt("knockback." + knockbackType.toString().toLowerCase() + ".air-horizontal"); int airvertical = ConfigManager.getConfig().getInt("knockback." + knockbackType.toString().toLowerCase() + ".air-vertical"); int horizontal = ConfigManager.getConfig().getInt("knockback." + knockbackType.toString().toLowerCase() + ".horizontal"); int vertical = ConfigManager.getConfig().getInt("knockback." + knockbackType.toString().toLowerCase() + ".vertical"); - Vector vel = player.getVelocity(); if (player.isOnGround()) { vel.setX(vel.getX() * horizontal); @@ -31,7 +34,19 @@ public static void setPlayerKnockback(Entity player, KnockbackType knockbackType vel.setZ(vel.getZ() * airhorizontal); vel.setY(vel.getY() * airvertical); } + if (Math.abs(vel.getX()) > MAX_VELOCITY_COMPONENT + || Math.abs(vel.getY()) > MAX_VELOCITY_COMPONENT + || Math.abs(vel.getZ()) > MAX_VELOCITY_COMPONENT) { + Logger logger = Bukkit.getLogger(); + String name = player.getName() != null ? player.getName() : player.getType().name(); + String message = "Excessive velocity detected for " + name + ": x=" + vel.getX() + ", y=" + vel.getY() + ", z=" + vel.getZ(); + logger.warning(message); + if (player instanceof Player) { + Player p = (Player) player; + p.sendMessage(message); + } + return; + } player.setVelocity(vel); } - }