Skip to content

Commit 6788478

Browse files
committed
Refactor nameplate system to improve synchronization and modularity
- Moved team setup logic to `StylingModule` for reusability. - Added `reloadNameplates` method with scheduled updates. - Simplified mixin implementation with `ModuleProvider.STYLING`. - Annotated `CustomPlayerTeam` with `@MethodsReturnNonnullByDefault`.
1 parent a019f90 commit 6788478

3 files changed

Lines changed: 34 additions & 16 deletions

File tree

src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomNameplateMixin.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package me.alexdevs.solstice.mixin.modules.styling;
22

3-
import me.alexdevs.solstice.modules.styling.CustomPlayerTeam;
4-
import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket;
3+
import me.alexdevs.solstice.modules.ModuleProvider;
54
import net.minecraft.server.ServerScoreboard;
65
import net.minecraft.server.level.ServerPlayer;
76
import net.minecraft.server.players.PlayerList;
@@ -23,10 +22,7 @@ public abstract class CustomNameplateMixin {
2322

2423
@Inject(method = "updateEntireScoreboard", at = @At("HEAD"))
2524
private void solstice$overrideNameplate(ServerScoreboard scoreboard, ServerPlayer player, CallbackInfo ci) {
26-
for (var otherPlayer : players) {
27-
var team = new CustomPlayerTeam(scoreboard, otherPlayer);
28-
player.connection.send(ClientboundSetPlayerTeamPacket.createAddOrModifyPacket(team, true));
29-
}
25+
ModuleProvider.STYLING.sendTeamSetup(player, players, scoreboard, true);
3026
}
3127

3228
}

src/main/java/me/alexdevs/solstice/modules/styling/CustomPlayerTeam.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,16 @@
22

33
import me.alexdevs.solstice.modules.ModuleProvider;
44
import net.minecraft.ChatFormatting;
5+
import net.minecraft.MethodsReturnNonnullByDefault;
56
import net.minecraft.network.chat.Component;
6-
import net.minecraft.network.chat.TextColor;
77
import net.minecraft.server.level.ServerPlayer;
88
import net.minecraft.world.scores.PlayerTeam;
99
import net.minecraft.world.scores.Scoreboard;
1010

1111
import java.util.Collection;
1212
import java.util.List;
13-
import java.util.Map;
14-
import java.util.stream.Collectors;
1513

14+
@MethodsReturnNonnullByDefault
1615
public class CustomPlayerTeam extends PlayerTeam {
1716
private final ServerPlayer player;
1817

@@ -23,6 +22,10 @@ public CustomPlayerTeam(Scoreboard scoreboard, ServerPlayer player) {
2322
super.getPlayers().add(player.getGameProfile().getName());
2423
}
2524

25+
@Override
26+
public Component getDisplayName() {
27+
return player.getDisplayName();
28+
}
2629

2730
@Override
2831
public ChatFormatting getColor() {

src/main/java/me/alexdevs/solstice/modules/styling/StylingModule.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,14 @@
1010
import me.lucko.fabric.api.permissions.v0.Permissions;
1111
import net.minecraft.ChatFormatting;
1212
import net.minecraft.network.chat.Component;
13+
import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket;
1314
import net.minecraft.resources.ResourceLocation;
1415
import net.minecraft.server.level.ServerPlayer;
1516
import net.minecraft.server.players.PlayerList;
17+
import net.minecraft.world.scores.Scoreboard;
18+
19+
import java.util.List;
20+
import java.util.concurrent.TimeUnit;
1621

1722
public class StylingModule extends ModuleBase.Toggleable {
1823
public static final String ADVANCED_CHAT_FORMATTING_PERMISSION = "solstice.chat.advanced";
@@ -49,13 +54,9 @@ public void init() {
4954
}
5055
});
5156

52-
SolsticeEvents.RELOAD.register(instance -> {
53-
var playerList = Solstice.server.getPlayerList();
54-
var scoreboard = Solstice.server.getScoreboard();
55-
for (var player : playerList.getPlayers()) {
56-
playerList.updateEntireScoreboard(scoreboard, player);
57-
}
58-
});
57+
SolsticeEvents.RELOAD.register(instance -> reloadNameplates(false));
58+
59+
Solstice.scheduler.scheduleAtFixedRateSync(() -> reloadNameplates(false), 0, 1, TimeUnit.SECONDS);
5960
}
6061

6162
public StylingConfig getConfig() {
@@ -128,4 +129,22 @@ public Component getNameplateSuffix(ServerPlayer player) {
128129

129130
return Format.parse(format, PlaceholderContext.of(player));
130131
}
132+
133+
private void reloadNameplates(boolean add) {
134+
var playerList = Solstice.server.getPlayerList();
135+
var scoreboard = Solstice.server.getScoreboard();
136+
for (var player : playerList.getPlayers()) {
137+
sendTeamSetup(player, playerList.getPlayers(), scoreboard, add);
138+
}
139+
}
140+
141+
public void sendTeamSetup(ServerPlayer player, List<ServerPlayer> players, Scoreboard scoreboard, boolean add) {
142+
for (var otherPlayer : players) {
143+
if(otherPlayer == player) {
144+
continue;
145+
}
146+
var team = new CustomPlayerTeam(scoreboard, otherPlayer);
147+
player.connection.send(ClientboundSetPlayerTeamPacket.createAddOrModifyPacket(team, add));
148+
}
149+
}
131150
}

0 commit comments

Comments
 (0)