From dd359a6767d747d9d3b27c951e3e3c47726a2daf Mon Sep 17 00:00:00 2001 From: ice Date: Wed, 4 Feb 2026 17:52:31 +0800 Subject: [PATCH 1/2] Update FinalKillsHudModule.java --- .../impl/bedwars/FinalKillsHudModule.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/afterlike/openutils/module/impl/bedwars/FinalKillsHudModule.java b/src/main/java/org/afterlike/openutils/module/impl/bedwars/FinalKillsHudModule.java index 8cfdcb6..316c9f4 100644 --- a/src/main/java/org/afterlike/openutils/module/impl/bedwars/FinalKillsHudModule.java +++ b/src/main/java/org/afterlike/openutils/module/impl/bedwars/FinalKillsHudModule.java @@ -18,6 +18,7 @@ import org.afterlike.openutils.module.api.setting.impl.DescriptionSetting; import org.afterlike.openutils.util.client.ClientUtil; import org.afterlike.openutils.util.client.TextUtil; +import org.afterlike.openutils.util.game.BedWarsUtil; import org.afterlike.openutils.util.game.GameModeUtil; public class FinalKillsHudModule extends Module implements HudModule { @@ -25,17 +26,19 @@ public class FinalKillsHudModule extends Module implements HudModule { private final BooleanSetting editPosition; private final BooleanSetting dropShadow; private final BooleanSetting showVoidKills; + private final BooleanSetting teammatesOnly; private final Map finalKills = new HashMap<>(); private static final String VOID_KEY = "§8Void"; - // TODO: implement teammates only filter private static final Pattern NAME_CHUNK_PATTERN = Pattern .compile("§([0-9a-fk-or])([A-Za-z0-9_]+)"); + private BedWarsUtil.TeamColor myTeamColor = null; public FinalKillsHudModule() { super("Final Kills HUD", ModuleCategory.BEDWARS); this.registerSetting(new DescriptionSetting("Hypixel language must be ENGLISH!")); editPosition = this.registerSetting(new BooleanSetting("Edit position", false)); dropShadow = this.registerSetting(new BooleanSetting("Drop shadow", true)); showVoidKills = this.registerSetting(new BooleanSetting("Show void kills", true)); + teammatesOnly = this.registerSetting(new BooleanSetting("Teammates only", false)); } @EventHandler @@ -67,6 +70,16 @@ private void onChatReceived(final ReceiveChatEvent event) { } return; } + // Check if teammates only filter is enabled + if (teammatesOnly.getValue()) { + final BedWarsUtil.TeamColor victimTeamColor = BedWarsUtil.TeamColor + .fromFormattedName(lastColorCode + lastPlayerName); + if (victimTeamColor == null || victimTeamColor != myTeamColor) { + ClientUtil.sendDebugMessage( + "skipped non-teammate kill: " + lastColorCode + lastPlayerName); + return; + } + } final String displayName = lastColorCode + lastPlayerName; finalKills.put(displayName, finalKills.getOrDefault(displayName, 0) + 1); ClientUtil.sendDebugMessage( @@ -103,11 +116,18 @@ private void onTick(final GameTickEvent event) { return; if (GameModeUtil.getBedWarsStatus() != 3) { resetTracking(); + } else if (ClientUtil.notNull() && myTeamColor == null) { + // Cache player's team color when in game + myTeamColor = BedWarsUtil.getTeamColor(mc.thePlayer); + if (myTeamColor != null) { + ClientUtil.sendDebugMessage("detected team color: " + myTeamColor.getDisplayName()); + } } } private void resetTracking() { finalKills.clear(); + myTeamColor = null; } @Override From 0a3221a90d898dd548a7043972fc23246d91925f Mon Sep 17 00:00:00 2001 From: polaris Date: Wed, 4 Feb 2026 07:51:03 -0500 Subject: [PATCH 2/2] refactor: simplify teammate filtering logic --- .../impl/bedwars/FinalKillsHudModule.java | 27 +++++++++++-------- .../openutils/util/game/BedWarsUtil.java | 12 +++++++++ 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/afterlike/openutils/module/impl/bedwars/FinalKillsHudModule.java b/src/main/java/org/afterlike/openutils/module/impl/bedwars/FinalKillsHudModule.java index 316c9f4..880c21d 100644 --- a/src/main/java/org/afterlike/openutils/module/impl/bedwars/FinalKillsHudModule.java +++ b/src/main/java/org/afterlike/openutils/module/impl/bedwars/FinalKillsHudModule.java @@ -9,6 +9,7 @@ import org.afterlike.openutils.event.impl.GameTickEvent; import org.afterlike.openutils.event.impl.ReceiveChatEvent; import org.afterlike.openutils.event.impl.RenderOverlayEvent; +import org.afterlike.openutils.event.impl.WorldLoadEvent; import org.afterlike.openutils.module.api.Module; import org.afterlike.openutils.module.api.ModuleCategory; import org.afterlike.openutils.module.api.hud.HudModule; @@ -31,7 +32,7 @@ public class FinalKillsHudModule extends Module implements HudModule { private static final String VOID_KEY = "§8Void"; private static final Pattern NAME_CHUNK_PATTERN = Pattern .compile("§([0-9a-fk-or])([A-Za-z0-9_]+)"); - private BedWarsUtil.TeamColor myTeamColor = null; + private BedWarsUtil.TeamColor playerTeamColor = null; public FinalKillsHudModule() { super("Final Kills HUD", ModuleCategory.BEDWARS); this.registerSetting(new DescriptionSetting("Hypixel language must be ENGLISH!")); @@ -70,11 +71,10 @@ private void onChatReceived(final ReceiveChatEvent event) { } return; } - // Check if teammates only filter is enabled if (teammatesOnly.getValue()) { - final BedWarsUtil.TeamColor victimTeamColor = BedWarsUtil.TeamColor - .fromFormattedName(lastColorCode + lastPlayerName); - if (victimTeamColor == null || victimTeamColor != myTeamColor) { + final BedWarsUtil.TeamColor killerTeamColor = BedWarsUtil.TeamColor + .fromColorCode(lastColorCode); + if (killerTeamColor != playerTeamColor) { ClientUtil.sendDebugMessage( "skipped non-teammate kill: " + lastColorCode + lastPlayerName); return; @@ -116,18 +116,23 @@ private void onTick(final GameTickEvent event) { return; if (GameModeUtil.getBedWarsStatus() != 3) { resetTracking(); - } else if (ClientUtil.notNull() && myTeamColor == null) { - // Cache player's team color when in game - myTeamColor = BedWarsUtil.getTeamColor(mc.thePlayer); - if (myTeamColor != null) { - ClientUtil.sendDebugMessage("detected team color: " + myTeamColor.getDisplayName()); + } else if (ClientUtil.notNull() && playerTeamColor == null) { + playerTeamColor = BedWarsUtil.getTeamColor(mc.thePlayer); + if (playerTeamColor != null) { + ClientUtil.sendDebugMessage( + "detected team color: " + playerTeamColor.getDisplayName()); } } } + @EventHandler + private void onWorldLoad(final WorldLoadEvent event) { + resetTracking(); + } + private void resetTracking() { finalKills.clear(); - myTeamColor = null; + playerTeamColor = null; } @Override diff --git a/src/main/java/org/afterlike/openutils/util/game/BedWarsUtil.java b/src/main/java/org/afterlike/openutils/util/game/BedWarsUtil.java index 5167a30..1ce2e55 100644 --- a/src/main/java/org/afterlike/openutils/util/game/BedWarsUtil.java +++ b/src/main/java/org/afterlike/openutils/util/game/BedWarsUtil.java @@ -32,6 +32,18 @@ public static TeamColor fromFormattedName(final String formattedName) { } return null; } + + public static TeamColor fromColorCode(final String colorCode) { + if (colorCode == null) { + return null; + } + for (TeamColor color : values()) { + if (colorCode.equals(color.colorCode)) { + return color; + } + } + return null; + } } public static String getFormattedTeamName(final EntityPlayer player) { TeamColor color = getTeamColor(player);