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..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; @@ -18,6 +19,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 +27,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 playerTeamColor = 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 +71,15 @@ private void onChatReceived(final ReceiveChatEvent event) { } return; } + if (teammatesOnly.getValue()) { + final BedWarsUtil.TeamColor killerTeamColor = BedWarsUtil.TeamColor + .fromColorCode(lastColorCode); + if (killerTeamColor != playerTeamColor) { + 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,23 @@ private void onTick(final GameTickEvent event) { return; if (GameModeUtil.getBedWarsStatus() != 3) { resetTracking(); + } 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(); + 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);