Skip to content

Commit 388cceb

Browse files
committed
Handle spectator player bar rendering.
1 parent cd8698a commit 388cceb

File tree

5 files changed

+64
-39
lines changed

5 files changed

+64
-39
lines changed

src/main/java/net/kyrptonaught/lemclienthelper/ServerInfo/ServerInfoData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
public class ServerInfoData {
44
private static boolean IN_ROUND = false;
5-
private static byte[] PLAYER_STATUS = new byte[]{};
5+
private static byte[] PLAYER_STATUS = new byte[]{1,0,1,1,1,0,-1,-1};
66

77
private static GAME_MODES GAME_MODE = GAME_MODES.CASUAL;
88
private static MINIGAME_TYPES MINIGAME = MINIGAME_TYPES.BATTLE;

src/main/java/net/kyrptonaught/lemclienthelper/ServerInfo/packets/serverInfoPackets.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ public class serverInfoPackets {
2929
*
3030
* @param inRound boolean, Is the client in a round?
3131
*
32-
* @param playerStatus byte[]. In Round: 0 - Dead, 1 - Alive;<br>
33-
* In Lobby: 0 - Not Ready, 1 - Ready
32+
* @param playerStatus byte[]. In Round: 0 - Dead; 1 - Alive; -1 - Spectating;<br>
33+
* In Lobby: 0 - Not Ready; 1 - Ready
3434
*
3535
* @see gamemodePacket gamemodePacket
3636
* @see playerStatusPacket playerStatusPacket
3737
* @see inRoundPacket inRoundPacket
3838
*/
3939
public record serverInfoPacket(ServerInfoData.MINIGAME_TYPES minigame, ServerInfoData.GAME_MODES gamemode, boolean inRound, byte[] playerStatus) implements CustomPayload {
40-
public static final Id<serverInfoPacket> PACKET_ID = new Id<>(Identifier.of("serverInfo", "serverInfo_set"));
40+
public static final Id<serverInfoPacket> PACKET_ID = new Id<>(Identifier.of("serverinfo", "serverinfo_set"));
4141
public static final PacketCodec<RegistryByteBuf, serverInfoPacket> codec = PacketCodec.tuple(
4242
PacketCodecs.indexed(i -> ServerInfoData.MINIGAME_TYPES.values()[i], ServerInfoData.MINIGAME_TYPES::ordinal), serverInfoPacket::minigame,
4343
PacketCodecs.indexed(i -> ServerInfoData.GAME_MODES.values()[i], ServerInfoData.GAME_MODES::ordinal), serverInfoPacket::gamemode,
@@ -63,7 +63,7 @@ public Id<? extends CustomPayload> getId() {
6363
@SuppressWarnings("DeprecatedIsStillUsed")
6464
@Deprecated
6565
public record minigamePacket(ServerInfoData.MINIGAME_TYPES minigame) implements CustomPayload {
66-
public static final Id<minigamePacket> PACKET_ID = new Id<>(Identifier.of("serverInfo", "minigame_set"));
66+
public static final Id<minigamePacket> PACKET_ID = new Id<>(Identifier.of("serverinfo", "minigame_set"));
6767
public static final PacketCodec<RegistryByteBuf, minigamePacket> codec = PacketCodec.tuple(
6868
PacketCodecs.indexed(i -> ServerInfoData.MINIGAME_TYPES.values()[i], ServerInfoData.MINIGAME_TYPES::ordinal), minigamePacket::minigame,
6969
minigamePacket::new
@@ -83,7 +83,7 @@ public Id<? extends CustomPayload> getId() {
8383
*
8484
*/
8585
public record gamemodePacket(ServerInfoData.GAME_MODES gamemode) implements CustomPayload {
86-
public static final Id<gamemodePacket> PACKET_ID = new Id<>(Identifier.of("serverInfo", "gamemode_set"));
86+
public static final Id<gamemodePacket> PACKET_ID = new Id<>(Identifier.of("serverinfo", "gamemode_set"));
8787
public static final PacketCodec<RegistryByteBuf, gamemodePacket> codec = PacketCodec.tuple(
8888
PacketCodecs.indexed(i -> ServerInfoData.GAME_MODES.values()[i], ServerInfoData.GAME_MODES::ordinal), gamemodePacket::gamemode,
8989
gamemodePacket::new
@@ -102,7 +102,7 @@ public Id<? extends CustomPayload> getId() {
102102
* @param inRound boolean, Is the client in a round?
103103
*/
104104
public record inRoundPacket(boolean inRound) implements CustomPayload {
105-
public static final Id<inRoundPacket> PACKET_ID = new Id<>(Identifier.of("serverInfo", "inRound_set"));
105+
public static final Id<inRoundPacket> PACKET_ID = new Id<>(Identifier.of("serverinfo", "inround_set"));
106106
public static final PacketCodec<RegistryByteBuf, inRoundPacket> codec = PacketCodec.tuple(
107107
PacketCodecs.BOOL, inRoundPacket::inRound,
108108
inRoundPacket::new
@@ -117,14 +117,14 @@ public Id<? extends CustomPayload> getId() {
117117
/**
118118
* <pre>playerStatusPacket, sends player statuses to client.
119119
*
120-
* <code>new byte[]{0,1,0,1}</code> 4 players, players 1 & 3 are either not ready or dead.
120+
* <code>new byte[]{0,1,0,-1}</code> 4 players, players 1 & 3 are either not ready or dead, player 4 is spectating.
121121
* </pre>
122122
*
123-
* @param playerStatus byte[]. In Round: 0 - Dead, 1 - Alive;<br>
124-
* In Lobby: 0 - Not Ready, 1 - Ready
123+
* @param playerStatus byte[]. In Round: 0 - Dead; 1 - Alive; -1 - Spectating;<br>
124+
* In Lobby: 0 - Not Ready; 1 - Ready
125125
*/
126126
public record playerStatusPacket(byte[] playerStatus) implements CustomPayload {
127-
public static final Id<playerStatusPacket> PACKET_ID = new Id<>(Identifier.of("serverInfo", "playerStatus_set"));
127+
public static final Id<playerStatusPacket> PACKET_ID = new Id<>(Identifier.of("serverinfo", "playerstatus_set"));
128128
public static final PacketCodec<RegistryByteBuf, playerStatusPacket> codec = PacketCodec.tuple(
129129
PacketCodecs.BYTE_ARRAY, playerStatusPacket::playerStatus,
130130
playerStatusPacket::new

src/main/java/net/kyrptonaught/lemclienthelper/hud/genericHud/GenericHudMod.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,19 @@
77
import net.kyrptonaught.lemclienthelper.hud.genericHud.packets.PlayerBarPacket;
88
import net.minecraft.text.Text;
99

10+
/*
11+
import com.mojang.brigadier.arguments.BoolArgumentType;
12+
import com.mojang.brigadier.arguments.IntegerArgumentType;
13+
import net.kyrptonaught.lemclienthelper.LEMClientHelperMod;
14+
import net.kyrptonaught.lemclienthelper.ServerInfo.ServerInfoData;
15+
import net.kyrptonaught.lemclienthelper.ServerInfo.packets.serverInfoPackets;
16+
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
17+
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
18+
import net.minecraft.command.argument.EntityArgumentType;
19+
import net.minecraft.command.argument.TextArgumentType;
20+
import net.minecraft.server.command.CommandManager;
21+
*/
22+
1023
public class GenericHudMod {
1124
public static boolean SHOULD_RENDER_PLAYERBAR = false;
1225

@@ -24,5 +37,38 @@ public static void onInitialize() {
2437
BANNER_TEXT = payload.text();
2538
BANNER_RECEIVED = true;
2639
}));
40+
41+
/*
42+
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) ->
43+
dispatcher.register(CommandManager.literal(LEMClientHelperMod.MOD_ID)
44+
.then(CommandManager.literal("examplePlayerBar")
45+
.then(CommandManager.argument("inRound", BoolArgumentType.bool())
46+
.then(CommandManager.argument("target", EntityArgumentType.players())
47+
.executes(context -> {
48+
ServerPlayNetworking.send(EntityArgumentType.getPlayer(context, "target"),
49+
new serverInfoPackets.inRoundPacket(BoolArgumentType.getBool(context,"inRound")));
50+
ServerPlayNetworking.send(EntityArgumentType.getPlayer(context, "target"),
51+
new PlayerBarPacket(true));
52+
return 0;
53+
}))))));
54+
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) ->
55+
dispatcher.register(CommandManager.literal(LEMClientHelperMod.MOD_ID)
56+
.then(CommandManager.literal("sendTestBanner")
57+
.then(CommandManager.argument("target", EntityArgumentType.players())
58+
.then(CommandManager.argument("minigame", IntegerArgumentType.integer(0,2))
59+
.then(CommandManager.argument("gamemode", IntegerArgumentType.integer(0,7))
60+
.then(CommandManager.argument("text", TextArgumentType.text(registryAccess))
61+
.executes(context -> {
62+
ServerPlayNetworking.send(EntityArgumentType.getPlayer(context, "target"),
63+
new serverInfoPackets.minigamePacket(
64+
ServerInfoData.MINIGAME_TYPES.values()[IntegerArgumentType.getInteger(context,"minigame")]));
65+
ServerPlayNetworking.send(EntityArgumentType.getPlayer(context, "target"),
66+
new serverInfoPackets.gamemodePacket(
67+
ServerInfoData.GAME_MODES.values()[IntegerArgumentType.getInteger(context,"gamemode")]));
68+
ServerPlayNetworking.send(EntityArgumentType.getPlayer(context, "target"),
69+
new BannerPacket(TextArgumentType.getTextArgument(context,"text")));
70+
return 0;
71+
}))))))));
72+
*/
2773
}
2874
}

src/main/java/net/kyrptonaught/lemclienthelper/hud/genericHud/PlayerBarRenderer.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public static void renderPlayerBar(DrawContext context, RenderTickCounter v) {
3535
int l = context.getScaledWindowHeight() - 32 + 3;
3636
int x = context.getScaledWindowWidth() / 2 - 91;
3737

38+
byte[] s = ServerInfoData.getPlayerStatus(); // Array of player statuses
3839
int p = ServerInfoData.getPlayerStatus().length; // Amount of player icons
3940
int e; // Width of texture
4041
float u; // Width of texture + spacing.
@@ -70,13 +71,13 @@ public static void renderPlayerBar(DrawContext context, RenderTickCounter v) {
7071
for (int i = 0; i < p; i++) {
7172
if (i > 0) {context.getMatrices().translate(u, 0f, 0f);}
7273
float[] c = RenderSystem.getShaderColor(); // Get the current shader colour to prevent breaking with hud transparency mods.
73-
if (!ServerInfoData.getInRound() && ServerInfoData.getPlayerStatus()[i] == 0) {RenderSystem.setShaderColor(c[0],c[1],c[2], c[3]*(128F/255F));}
74+
if ((!ServerInfoData.getInRound() && s[i] == 0) || s[i] == -1) {RenderSystem.setShaderColor(c[0],c[1],c[2], c[3]*(128F/255F));}
7475
if (p < 11) {
75-
context.drawTexture(ServerInfoData.getPlayerStatus()[i] == 0 ? ServerInfoData.getInRound() ? BIG_PLAYER_ICON_DEAD : BIG_PLAYER_ICONS(i) : BIG_PLAYER_ICONS(i), x, l, e, 5, e, 5, e, 5);
76+
context.drawTexture(((s[i] == 0 || s[i] == -1) && ServerInfoData.getInRound()) ? BIG_PLAYER_ICON_DEAD : BIG_PLAYER_ICONS(i), x, l, e, 5, e, 5, e, 5);
7677
} else {
77-
context.drawTexture(ServerInfoData.getPlayerStatus()[i] == 0 ? ServerInfoData.getInRound() ? SMALL_PLAYER_ICON_DEAD : SMALL_PLAYER_ICONS(i) : SMALL_PLAYER_ICONS(i),x, l, e, 5, e, 5, e, 5);
78+
context.drawTexture(((s[i] == 0 || s[i] == -1) && ServerInfoData.getInRound()) ? SMALL_PLAYER_ICON_DEAD : SMALL_PLAYER_ICONS(i),x, l, e, 5, e, 5, e, 5);
7879
}
79-
if (!ServerInfoData.getInRound() && ServerInfoData.getPlayerStatus()[i] == 0) {RenderSystem.setShaderColor(c[0],c[1],c[2],c[3]*(255F/128F));}
80+
if ((!ServerInfoData.getInRound() && s[i] == 0) || s[i] == -1) {RenderSystem.setShaderColor(c[0],c[1],c[2],c[3]*(255F/128F));}
8081
}
8182
RenderSystem.disableBlend();
8283
context.getMatrices().pop();

src/main/java/net/kyrptonaught/lemclienthelper/hud/glideHud/GlideHudMod.java

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@
1616
import com.mojang.brigadier.arguments.IntegerArgumentType;
1717
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
1818
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
19-
import net.kyrptonaught.lemclienthelper.hud.genericHud.packets.BannerPacket;
20-
import net.kyrptonaught.lemclienthelper.hud.genericHud.packets.PlayerBarPacket;
2119
import net.minecraft.command.argument.EntityArgumentType;
22-
import net.minecraft.command.argument.TextArgumentType;
2320
import net.minecraft.server.command.CommandManager;
2421
*/
2522

@@ -73,7 +70,7 @@ public static void onInitialize() {
7370
/*
7471
// Debug commands
7572
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) ->
76-
dispatcher.register(CommandManager.literal(HudMod.MOD_ID)
73+
dispatcher.register(CommandManager.literal(LEMClientHelperMod.MOD_ID)
7774
.then(CommandManager.literal("glide")
7875
.then(CommandManager.argument("target", EntityArgumentType.players())
7976
.then(CommandManager.literal("timer")
@@ -110,26 +107,7 @@ public static void onInitialize() {
110107
IntegerArgumentType.getInteger(context, "score"),
111108
rings.values()[IntegerArgumentType.getInteger(context, "lastRing")]));
112109
return 0;
113-
})))))))));
114-
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) ->
115-
dispatcher.register(CommandManager.literal(HudMod.MOD_ID)
116-
.then(CommandManager.literal("examplePlayerBar")
117-
.then(CommandManager.argument("target", EntityArgumentType.players())
118-
.executes(context -> {
119-
ServerPlayNetworking.send(EntityArgumentType.getPlayer(context, "target"),
120-
new PlayerBarPacket(true));
121-
return 0;
122-
})))));
123-
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) ->
124-
dispatcher.register(CommandManager.literal(HudMod.MOD_ID)
125-
.then(CommandManager.literal("sendTestBanner")
126-
.then(CommandManager.argument("target", EntityArgumentType.players())
127-
.then(CommandManager.argument("text", TextArgumentType.text(registryAccess))
128-
.executes(context -> {
129-
ServerPlayNetworking.send(EntityArgumentType.getPlayer(context, "target"),
130-
new BannerPacket(TextArgumentType.getTextArgument(context,"text")));
131-
return 0;
132-
}))))));*/
110+
})))))))));*/
133111
}
134112

135113

0 commit comments

Comments
 (0)