aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorKevin <92656833+kevinthegreat1@users.noreply.github.com>2024-12-22 21:46:36 -0500
committerGitHub <noreply@github.com>2024-12-23 10:46:36 +0800
commit69e1ea849e195b07c3b3f9547701332df4f9866b (patch)
tree78158e526b778493d400c4ee62281cef3962e6e4 /src/main/java
parentc4f9bc4dd7631021af74726adec54e56f9b49b0e (diff)
downloadSkyblocker-69e1ea849e195b07c3b3f9547701332df4f9866b.tar.gz
Skyblocker-69e1ea849e195b07c3b3f9547701332df4f9866b.tar.bz2
Skyblocker-69e1ea849e195b07c3b3f9547701332df4f9866b.zip
Add player list widget (#1086)
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/filters/AdFilter.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/filters/ShowOffFilter.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/preview/PreviewTab.java9
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java45
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java33
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/TabHudWidget.java19
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java5
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/Constants.java2
8 files changed, 90 insertions, 29 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/filters/AdFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/filters/AdFilter.java
index 8f0192b7..9976d5a5 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chat/filters/AdFilter.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/filters/AdFilter.java
@@ -20,7 +20,7 @@ public class AdFilter extends ChatPatternListener {
// 1. Player name
// 2. Message
// (?:\[[0-9]+\] )?(?:[<INSERT EMBLEMS>] )?(?:\[[A-Z+]+\] )?([A-Za-z0-9_]+): (.+)
- super("(?:\\[[0-9]+\\] )?(?:[" + Constants.LEVEL_EMBLEMS+ "] )?(?:\\[[A-Z+]+\\] )?([A-Za-z0-9_]+): (.+)");
+ super(Constants.PLAYER_NAME.pattern() + ": (.+)");
}
@Override
@@ -36,4 +36,4 @@ public class AdFilter extends ChatPatternListener {
protected ChatFilterResult state() {
return SkyblockerConfigManager.get().chat.hideAds;
}
-} \ No newline at end of file
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/filters/ShowOffFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/filters/ShowOffFilter.java
index 0a0cbbe5..384346c1 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chat/filters/ShowOffFilter.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/filters/ShowOffFilter.java
@@ -9,7 +9,7 @@ public class ShowOffFilter extends SimpleChatFilter {
public ShowOffFilter() {
//(?:\[[0-9]+\] )?(?:[<INSERT EMBLEMS>] )?(?:\[[A-Z+]+\] )?([A-Za-z0-9_]+) (?:<INSERT SHOW TYPES>) \[(.+)\]
- super("(?:\\[[0-9]+\\] )?(?:[" + Constants.LEVEL_EMBLEMS + "] )?(?:\\[[A-Z+]+\\] )?([A-Za-z0-9_]+) (?:" + String.join("|", SHOW_TYPES) + ") \\[(.+)\\]");
+ super(Constants.PLAYER_NAME.pattern() + " (?:" + String.join("|", SHOW_TYPES) + ") \\[(.+)\\]");
}
@Override
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/preview/PreviewTab.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/preview/PreviewTab.java
index 6b6c0e46..f72bc293 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/preview/PreviewTab.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/preview/PreviewTab.java
@@ -1,5 +1,6 @@
package de.hysky.skyblocker.skyblock.tabhud.config.preview;
+import com.mojang.authlib.GameProfile;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.tabhud.config.DungeonsTabPlaceholder;
import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen;
@@ -25,6 +26,7 @@ import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.client.gui.widget.ScrollableWidget;
import net.minecraft.client.gui.widget.TextWidget;
+import net.minecraft.client.network.PlayerListEntry;
import net.minecraft.item.ItemStack;
import net.minecraft.scoreboard.ScoreHolder;
import net.minecraft.scoreboard.Scoreboard;
@@ -41,6 +43,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
+import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;
@@ -236,7 +239,11 @@ public class PreviewTab implements Tab {
}
}
}
- PlayerListMgr.updateWidgetsFrom(lines);
+ PlayerListMgr.updateWidgetsFrom(lines.stream().map(line -> {
+ PlayerListEntry playerListEntry = new PlayerListEntry(new GameProfile(UUID.randomUUID(), ""), false);
+ playerListEntry.setDisplayName(line);
+ return playerListEntry;
+ }).toList());
}
void updateWidgets() {
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java
index dbf69d33..d39c5d6c 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java
@@ -79,7 +79,7 @@ public class PlayerListMgr {
if (Utils.isInDungeons()) {
updateDungeons(null);
} else {
- updateWidgetsFrom(playerList.stream().map(PlayerListEntry::getDisplayName).filter(Objects::nonNull).toList());
+ updateWidgetsFrom(playerList);
}
}
@@ -116,7 +116,7 @@ public class PlayerListMgr {
*
* @param lines in-game TAB
*/
- public static void updateWidgetsFrom(List<Text> lines) {
+ public static void updateWidgetsFrom(List<PlayerListEntry> lines) {
final Predicate<String> playersColumnPredicate = PLAYERS_COLUMN_PATTERN.asMatchPredicate();
final Predicate<String> infoColumnPredicate = INFO_COLUMN_PATTERN.asMatchPredicate();
@@ -124,9 +124,14 @@ public class PlayerListMgr {
boolean doingPlayers = false;
boolean playersDone = false;
IntObjectPair<String> hypixelWidgetName = IntObjectPair.of(0xFFFF00, "");
+ // These two lists should match each other.
+ // playerListEntries is only used for the player list widget
List<Text> contents = new ArrayList<>();
+ List<PlayerListEntry> playerListEntries = new ArrayList<>();
- for (Text displayName : lines) {
+ for (PlayerListEntry playerListEntry : lines) {
+ Text displayName = playerListEntry.getDisplayName();
+ if (displayName == null) continue;
String string = displayName.getString();
if (string.isBlank()) continue;
@@ -143,8 +148,9 @@ public class PlayerListMgr {
// Check if info, if it is, dip out
if (infoColumnPredicate.test(string)) {
playersDone = true;
- if (!contents.isEmpty()) tabWidgetsToShow.add(getTabHudWidget(hypixelWidgetName, contents));
+ if (!contents.isEmpty()) tabWidgetsToShow.add(getTabHudWidget(hypixelWidgetName, contents, playerListEntries));
contents.clear();
+ playerListEntries.clear();
continue;
}
} else {
@@ -153,18 +159,23 @@ public class PlayerListMgr {
// Now check for : because of the farming contest ACTIVE
// Check for mining event minutes CUZ THEY FUCKING FORGOT THE SPACE iefzeoifzeoifomezhif
if (!string.startsWith(" ") && string.contains(":") && (!hypixelWidgetName.right().startsWith("Mining Event") || !string.toLowerCase().startsWith("ends in"))) {
- if (!contents.isEmpty()) tabWidgetsToShow.add(getTabHudWidget(hypixelWidgetName, contents));
+ if (!contents.isEmpty()) tabWidgetsToShow.add(getTabHudWidget(hypixelWidgetName, contents, playerListEntries));
contents.clear();
+ playerListEntries.clear();
Pair<IntObjectPair<String>, ? extends Text> nameAndInfo = getNameAndInfo(displayName);
hypixelWidgetName = nameAndInfo.left();
- if (!nameAndInfo.right().getString().isBlank()) contents.add(trim(nameAndInfo.right()));
+ if (!nameAndInfo.right().getString().isBlank()) {
+ contents.add(trim(nameAndInfo.right()));
+ playerListEntries.add(playerListEntry);
+ }
continue;
}
}
// Add the line to the content
contents.add(trim(displayName));
+ playerListEntries.add(playerListEntry);
}
- if (!contents.isEmpty()) tabWidgetsToShow.add(getTabHudWidget(hypixelWidgetName, contents));
+ if (!contents.isEmpty()) tabWidgetsToShow.add(getTabHudWidget(hypixelWidgetName, contents, playerListEntries));
if (!tabWidgetsToShow.contains(tabWidgetInstances.get("Active Effects")) && SkyblockerConfigManager.get().uiAndVisuals.tabHud.effectsFromFooter) {
tabWidgetsToShow.add(getTabHudWidget("Active Effects", List.of()));
}
@@ -203,23 +214,21 @@ public class PlayerListMgr {
return out;
}
- private static TabHudWidget getTabHudWidget(IntObjectPair<String> hypixelWidgetName, List<Text> lines) {
+ private static TabHudWidget getTabHudWidget(IntObjectPair<String> hypixelWidgetName, List<Text> lines, @Nullable List<PlayerListEntry> playerListEntries) {
+ TabHudWidget tabHudWidget;
if (tabWidgetInstances.containsKey(hypixelWidgetName.right())) {
- TabHudWidget tabHudWidget = tabWidgetInstances.get(hypixelWidgetName.right());
- tabHudWidget.updateFromTab(lines);
- tabHudWidget.update();
- return tabHudWidget;
+ tabHudWidget = tabWidgetInstances.get(hypixelWidgetName.right());
} else {
- DefaultTabHudWidget defaultTabHudWidget = new DefaultTabHudWidget(hypixelWidgetName.right(), Text.literal(hypixelWidgetName.right()).formatted(Formatting.BOLD), hypixelWidgetName.firstInt());
- ScreenMaster.addWidgetInstance(defaultTabHudWidget);
- defaultTabHudWidget.updateFromTab(lines);
- defaultTabHudWidget.update();
- return defaultTabHudWidget;
+ tabHudWidget = new DefaultTabHudWidget(hypixelWidgetName.right(), Text.literal(hypixelWidgetName.right()).formatted(Formatting.BOLD), hypixelWidgetName.firstInt());
+ ScreenMaster.addWidgetInstance(tabHudWidget);
}
+ tabHudWidget.updateFromTab(lines, playerListEntries);
+ tabHudWidget.update();
+ return tabHudWidget;
}
private static TabHudWidget getTabHudWidget(String hypixelWidgetName, List<Text> lines) {
- return getTabHudWidget(IntObjectPair.of(0xFFFF0000, hypixelWidgetName), lines);
+ return getTabHudWidget(IntObjectPair.of(0xFFFF0000, hypixelWidgetName), lines, null);
}
/**
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java
new file mode 100644
index 00000000..dfcf620c
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java
@@ -0,0 +1,33 @@
+package de.hysky.skyblocker.skyblock.tabhud.widget;
+
+import de.hysky.skyblocker.annotations.RegisterWidget;
+import de.hysky.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent;
+import de.hysky.skyblocker.skyblock.tabhud.widget.component.PlayerComponent;
+import net.minecraft.client.network.PlayerListEntry;
+import net.minecraft.text.MutableText;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+@RegisterWidget
+public class PlayerListWidget extends TabHudWidget {
+ private static final MutableText TITLE = Text.literal("Players").formatted(Formatting.BOLD);
+
+ public PlayerListWidget() {
+ super("Players", TITLE, Formatting.AQUA.getColorValue());
+ }
+
+ @Override
+ protected void updateContent(List<Text> lines, @Nullable List<PlayerListEntry> playerListEntries) {
+ if (playerListEntries == null) {
+ lines.forEach(text -> addComponent(new PlainTextComponent(text)));
+ } else {
+ playerListEntries.forEach(playerListEntry -> addComponent(new PlayerComponent(playerListEntry)));
+ }
+ }
+
+ @Override
+ protected void updateContent(List<Text> lines) {}
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/TabHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/TabHudWidget.java
index a34d75e7..8fac951c 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/TabHudWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/TabHudWidget.java
@@ -2,8 +2,10 @@ package de.hysky.skyblocker.skyblock.tabhud.widget;
import de.hysky.skyblocker.skyblock.tabhud.widget.component.Component;
import de.hysky.skyblocker.utils.Location;
+import net.minecraft.client.network.PlayerListEntry;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
+import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
@@ -33,9 +35,9 @@ public abstract class TabHudWidget extends ComponentBasedWidget {
cachedComponents.forEach(super::addComponent);
}
- public void updateFromTab(List<Text> lines) {
+ public void updateFromTab(List<Text> lines, @Nullable List<PlayerListEntry> playerListEntries) {
cachedComponents.clear();
- updateContent(lines);
+ updateContent(lines, playerListEntries);
}
/**
@@ -63,7 +65,18 @@ public abstract class TabHudWidget extends ComponentBasedWidget {
}
/**
- * Update the content from the hypixel widget's lines
+ * Same as {@link #updateContent(List)} but only override if you need access to {@code playerListEntries}.
+ *
+ * @param playerListEntries the player list entries, which should match the lines.
+ * Null in dungeons.
+ * @see #updateContent(List)
+ */
+ protected void updateContent(List<Text> lines, @Nullable List<PlayerListEntry> playerListEntries) {
+ updateContent(lines);
+ }
+
+ /**
+ * Updates the content from the hypixel widget's lines
*
* @param lines the lines, they are formatted and trimmed, no blank lines will be present.
* If the vanilla tab widget has text right after the : they will be put on the first line.
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java
index 138a1cd6..0cbf5e5f 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java
@@ -19,10 +19,7 @@ public class PlayerComponent extends Component {
public PlayerComponent(PlayerListEntry ple) {
- boolean plainNames = false;
- Team team = ple.getScoreboardTeam();
- String username = ple.getProfile().getName();
- name = (team != null && !plainNames) ? Text.empty().append(team.getPrefix()).append(Text.literal(username).formatted(team.getColor())).append(team.getSuffix()) : Text.of(username);
+ name = ple.getDisplayName();
tex = ple.getSkinTextures().texture();
this.width = SKIN_ICO_DIM + PAD_S + txtRend.getWidth(name);
diff --git a/src/main/java/de/hysky/skyblocker/utils/Constants.java b/src/main/java/de/hysky/skyblocker/utils/Constants.java
index 50c79638..738f71c9 100644
--- a/src/main/java/de/hysky/skyblocker/utils/Constants.java
+++ b/src/main/java/de/hysky/skyblocker/utils/Constants.java
@@ -8,12 +8,14 @@ import java.time.LocalDate;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
+import java.util.regex.Pattern;
/**
* Holds generic static constants
*/
public interface Constants {
String LEVEL_EMBLEMS = "\u2E15\u273F\u2741\u2E19\u03B1\u270E\u2615\u2616\u2663\u213B\u2694\u27B6\u26A1\u2604\u269A\u2693\u2620\u269B\u2666\u2660\u2764\u2727\u238A\u1360\u262C\u269D\u29C9\uA214\u32D6\u2E0E\u26A0\uA541\u3020\u30C4\u2948\u2622\u2623\u273E\u269C\u0BD0\u0A6D\u2742\u16C3\u3023\u10F6\u0444\u266A\u266B\u04C3\u26C1\u26C3\u16DD\uA03E\u1C6A\u03A3\u09EB\u2603\u2654\u26C2\u0FC7\uA925\uA56A\u2592\u12DE";
+ Pattern PLAYER_NAME = Pattern.compile("(?:\\[[0-9]+\\] )?(?:[" + Constants.LEVEL_EMBLEMS + "] )?(?:\\[[A-Z+]+\\] )?([A-Za-z0-9_]+)");
Supplier<MutableText> PREFIX = () -> {
LocalDate time = LocalDate.now();