Skip to content

Commit bdfe30c

Browse files
camnwaltermattco98
authored andcommitted
TabList: Change api to be similar to Scoreboard
This allows for mutating the tab list entries.
1 parent 8fe1550 commit bdfe30c

File tree

11 files changed

+420
-46
lines changed

11 files changed

+420
-46
lines changed

api/ctjs.api

+25
Original file line numberDiff line numberDiff line change
@@ -2370,6 +2370,12 @@ public final class com/chattriggers/ctjs/api/world/Server {
23702370

23712371
public final class com/chattriggers/ctjs/api/world/TabList {
23722372
public static final field INSTANCE Lcom/chattriggers/ctjs/api/world/TabList;
2373+
public static final fun addName (Lcom/chattriggers/ctjs/api/message/TextComponent;)V
2374+
public static final fun addName (Lcom/chattriggers/ctjs/api/message/TextComponent;Z)V
2375+
public static final fun addName (Ljava/lang/String;)V
2376+
public static final fun addName (Ljava/lang/String;Z)V
2377+
public static synthetic fun addName$default (Lcom/chattriggers/ctjs/api/message/TextComponent;ZILjava/lang/Object;)V
2378+
public static synthetic fun addName$default (Ljava/lang/String;ZILjava/lang/Object;)V
23732379
public static final fun clearFooter ()V
23742380
public static final fun clearHeader ()V
23752381
public static final fun getFooter ()Ljava/lang/String;
@@ -2378,12 +2384,31 @@ public final class com/chattriggers/ctjs/api/world/TabList {
23782384
public static final fun getHeaderComponent ()Lcom/chattriggers/ctjs/api/message/TextComponent;
23792385
public static final fun getNames ()Ljava/util/List;
23802386
public static final fun getNamesByObjectives ()Ljava/util/List;
2387+
public static final fun getObjective ()Lnet/minecraft/scoreboard/ScoreboardObjective;
23812388
public static final fun getUnformattedNames ()Ljava/util/List;
2389+
public static final fun removeNames (Lcom/chattriggers/ctjs/api/message/TextComponent;)V
2390+
public static final fun removeNames (Ljava/lang/String;)V
23822391
public static final fun setFooter (Ljava/lang/Object;)V
23832392
public static final fun setHeader (Ljava/lang/Object;)V
23842393
public static final fun toMC ()Lnet/minecraft/client/gui/hud/PlayerListHud;
23852394
}
23862395

2396+
public final class com/chattriggers/ctjs/api/world/TabList$Name : com/chattriggers/ctjs/api/CTWrapper {
2397+
public fun <init> (Lnet/minecraft/client/network/PlayerListEntry;)V
2398+
public final fun getLatency ()I
2399+
public synthetic fun getMcValue ()Ljava/lang/Object;
2400+
public fun getMcValue ()Lnet/minecraft/client/network/PlayerListEntry;
2401+
public final fun getName ()Lcom/chattriggers/ctjs/api/message/TextComponent;
2402+
public final fun getTeam ()Lcom/chattriggers/ctjs/api/entity/Team;
2403+
public final fun remove ()V
2404+
public final fun setLatency (I)Lcom/chattriggers/ctjs/api/world/TabList$Name;
2405+
public final fun setName (Lcom/chattriggers/ctjs/api/message/TextComponent;)Lcom/chattriggers/ctjs/api/world/TabList$Name;
2406+
public final fun setTeam (Lcom/chattriggers/ctjs/api/entity/Team;)Lcom/chattriggers/ctjs/api/world/TabList$Name;
2407+
public synthetic fun toMC ()Ljava/lang/Object;
2408+
public fun toMC ()Lnet/minecraft/client/network/PlayerListEntry;
2409+
public fun toString ()Ljava/lang/String;
2410+
}
2411+
23872412
public final class com/chattriggers/ctjs/api/world/World {
23882413
public static final field INSTANCE Lcom/chattriggers/ctjs/api/world/World;
23892414
public static final field border Lcom/chattriggers/ctjs/api/world/World$BorderWrapper;

docs/MIGRATION.md

+5
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,11 @@ Here is a list of targeted changes for various different APIs:
199199
- `TabList`
200200
- Renamed `getHeaderMessage()` to `getHeaderComponent()`, and it now returns a `TextComponent` instead of a `Message`
201201
- Renamed `getFooterMessage()` to `getFooterComponent()`, and it now returns a `TextComponent` instead of a `Message`
202+
- Added `addName()`, `getList()`, and `removeNames()`
203+
- `getNames()` now returns a list of `Name`
204+
- Added `Name`
205+
- acts similarly to `Scoreboard.Score`, with the following methods
206+
- `getLatency()`, `setLatency()`, `getName()`, `setName()`, `getTeam()`, `setTeam()`, and `remove()`
202207
- `Team`
203208
- `Team.getNameTagVisibility()` and `Team.getDeathMessageVisibility()` now return a `Team.Visibility` instead of a string
204209
- Added `setColor()`
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.chattriggers.ctjs.internal.mixins;
2+
3+
import net.minecraft.client.network.ClientPlayNetworkHandler;
4+
import net.minecraft.client.network.PlayerListEntry;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.gen.Accessor;
7+
8+
import java.util.Collection;
9+
import java.util.Map;
10+
import java.util.UUID;
11+
12+
@Mixin(ClientPlayNetworkHandler.class)
13+
public interface ClientPlayNetworkHandlerAccessor {
14+
@Accessor
15+
Map<UUID, PlayerListEntry> getPlayerListEntries();
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.chattriggers.ctjs.internal.mixins;
2+
3+
import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService;
4+
import net.minecraft.client.MinecraftClient;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.gen.Accessor;
7+
8+
@Mixin(MinecraftClient.class)
9+
public interface MinecraftClientAccessor {
10+
@Accessor
11+
YggdrasilAuthenticationService getAuthenticationService();
12+
}

src/main/java/com/chattriggers/ctjs/internal/mixins/MinecraftClientMixin.java

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.chattriggers.ctjs.internal.mixins;
22

33
import com.chattriggers.ctjs.api.world.Scoreboard;
4+
import com.chattriggers.ctjs.api.world.TabList;
45
import com.chattriggers.ctjs.internal.engine.CTEvents;
56
import com.chattriggers.ctjs.api.triggers.TriggerType;
67
import com.chattriggers.ctjs.internal.engine.module.ModuleManager;
@@ -34,6 +35,7 @@ private void injectWorldUnload(ClientWorld world, DownloadingTerrainScreen.World
3435
if (this.world != null) {
3536
TriggerType.WORLD_UNLOAD.triggerAll();
3637
Scoreboard.INSTANCE.clearCustom$ctjs();
38+
TabList.INSTANCE.clearCustom$ctjs();
3739
}
3840
}
3941

@@ -51,6 +53,7 @@ private void injectDisconnect(Screen screen, CallbackInfo ci) {
5153
TriggerType.WORLD_UNLOAD.triggerAll();
5254
TriggerType.SERVER_DISCONNECT.triggerAll();
5355
Scoreboard.INSTANCE.clearCustom$ctjs();
56+
TabList.INSTANCE.clearCustom$ctjs();
5457
}
5558
}
5659

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.chattriggers.ctjs.internal.mixins;
2+
3+
import net.minecraft.client.network.PlayerListEntry;
4+
import org.spongepowered.asm.mixin.Mixin;
5+
import org.spongepowered.asm.mixin.gen.Invoker;
6+
7+
@Mixin(PlayerListEntry.class)
8+
public interface PlayerListEntryAccessor {
9+
@Invoker
10+
void invokeSetLatency(int latency);
11+
}

src/main/java/com/chattriggers/ctjs/internal/mixins/PlayerListHudMixin.java

+16
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.chattriggers.ctjs.internal.mixins;
22

33
import com.chattriggers.ctjs.api.triggers.TriggerType;
4+
import com.chattriggers.ctjs.api.world.TabList;
45
import net.minecraft.client.gui.DrawContext;
56
import net.minecraft.client.gui.hud.PlayerListHud;
67
import net.minecraft.scoreboard.Scoreboard;
78
import net.minecraft.scoreboard.ScoreboardObjective;
9+
import net.minecraft.text.Text;
810
import org.spongepowered.asm.mixin.Mixin;
911
import org.spongepowered.asm.mixin.injection.At;
1012
import org.spongepowered.asm.mixin.injection.Inject;
@@ -16,4 +18,18 @@ public class PlayerListHudMixin {
1618
private void injectRenderPlayerList(DrawContext context, int scaledWindowWidth, Scoreboard scoreboard, ScoreboardObjective objective, CallbackInfo ci) {
1719
TriggerType.RENDER_PLAYER_LIST.triggerAll(ci);
1820
}
21+
22+
@Inject(method = "setHeader", at = @At("HEAD"), cancellable = true)
23+
private void ctjs$keepCustomHeader(Text header, CallbackInfo ci) {
24+
if (TabList.INSTANCE.getCustomHeader$ctjs()) {
25+
ci.cancel();
26+
}
27+
}
28+
29+
@Inject(method = "setFooter", at = @At("HEAD"), cancellable = true)
30+
private void ctjs$keepCustomFooter(Text footer, CallbackInfo ci) {
31+
if (TabList.INSTANCE.getCustomFooter$ctjs()) {
32+
ci.cancel();
33+
}
34+
}
1935
}

src/main/kotlin/com/chattriggers/ctjs/api/world/Scoreboard.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ object Scoreboard {
289289
}
290290

291291
/**
292-
* Gets the display string of this score
292+
* Gets the display text of this score
293293
*
294294
* @return the display name
295295
*/

0 commit comments

Comments
 (0)