/* * Decompiled with CFR 0.152. * * Could not load the following classes: * com.google.common.collect.ImmutableList * org.jspecify.annotations.Nullable */ package net.minecraft.network.protocol.game; import com.google.common.collect.ImmutableList; import java.util.Collection; import java.util.Optional; import net.minecraft.ChatFormatting; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.ComponentSerialization; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.PacketType; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.GamePacketTypes; import net.minecraft.world.scores.PlayerTeam; import net.minecraft.world.scores.Team; import org.jspecify.annotations.Nullable; public class ClientboundSetPlayerTeamPacket implements Packet { public static final StreamCodec STREAM_CODEC = Packet.codec(ClientboundSetPlayerTeamPacket::write, ClientboundSetPlayerTeamPacket::new); private static final int METHOD_ADD = 0; private static final int METHOD_REMOVE = 1; private static final int METHOD_CHANGE = 2; private static final int METHOD_JOIN = 3; private static final int METHOD_LEAVE = 4; private static final int MAX_VISIBILITY_LENGTH = 40; private static final int MAX_COLLISION_LENGTH = 40; private final int method; private final String name; private final Collection players; private final Optional parameters; private ClientboundSetPlayerTeamPacket(String name, int method, Optional parameters, Collection players) { this.name = name; this.method = method; this.parameters = parameters; this.players = ImmutableList.copyOf(players); } public static ClientboundSetPlayerTeamPacket createAddOrModifyPacket(PlayerTeam team, boolean createNew) { return new ClientboundSetPlayerTeamPacket(team.getName(), createNew ? 0 : 2, Optional.of(new Parameters(team)), createNew ? team.getPlayers() : ImmutableList.of()); } public static ClientboundSetPlayerTeamPacket createRemovePacket(PlayerTeam team) { return new ClientboundSetPlayerTeamPacket(team.getName(), 1, Optional.empty(), (Collection)ImmutableList.of()); } public static ClientboundSetPlayerTeamPacket createPlayerPacket(PlayerTeam team, String player, Action action) { return new ClientboundSetPlayerTeamPacket(team.getName(), action == Action.ADD ? 3 : 4, Optional.empty(), (Collection)ImmutableList.of((Object)player)); } private ClientboundSetPlayerTeamPacket(RegistryFriendlyByteBuf input) { this.name = input.readUtf(); this.method = input.readByte(); this.parameters = ClientboundSetPlayerTeamPacket.shouldHaveParameters(this.method) ? Optional.of(new Parameters(input)) : Optional.empty(); this.players = ClientboundSetPlayerTeamPacket.shouldHavePlayerList(this.method) ? input.readList(FriendlyByteBuf::readUtf) : ImmutableList.of(); } private void write(RegistryFriendlyByteBuf output) { output.writeUtf(this.name); output.writeByte(this.method); if (ClientboundSetPlayerTeamPacket.shouldHaveParameters(this.method)) { this.parameters.orElseThrow(() -> new IllegalStateException("Parameters not present, but method is" + this.method)).write(output); } if (ClientboundSetPlayerTeamPacket.shouldHavePlayerList(this.method)) { output.writeCollection(this.players, FriendlyByteBuf::writeUtf); } } private static boolean shouldHavePlayerList(int method) { return method == 0 || method == 3 || method == 4; } private static boolean shouldHaveParameters(int method) { return method == 0 || method == 2; } public @Nullable Action getPlayerAction() { return switch (this.method) { case 0, 3 -> Action.ADD; case 4 -> Action.REMOVE; default -> null; }; } public @Nullable Action getTeamAction() { return switch (this.method) { case 0 -> Action.ADD; case 1 -> Action.REMOVE; default -> null; }; } @Override public PacketType type() { return GamePacketTypes.CLIENTBOUND_SET_PLAYER_TEAM; } @Override public void handle(ClientGamePacketListener listener) { listener.handleSetPlayerTeamPacket(this); } public String getName() { return this.name; } public Collection getPlayers() { return this.players; } public Optional getParameters() { return this.parameters; } public static class Parameters { private final Component displayName; private final Component playerPrefix; private final Component playerSuffix; private final Team.Visibility nametagVisibility; private final Team.CollisionRule collisionRule; private final ChatFormatting color; private final int options; public Parameters(PlayerTeam team) { this.displayName = team.getDisplayName(); this.options = team.packOptions(); this.nametagVisibility = team.getNameTagVisibility(); this.collisionRule = team.getCollisionRule(); this.color = team.getColor(); this.playerPrefix = team.getPlayerPrefix(); this.playerSuffix = team.getPlayerSuffix(); } public Parameters(RegistryFriendlyByteBuf input) { this.displayName = (Component)ComponentSerialization.TRUSTED_STREAM_CODEC.decode(input); this.options = input.readByte(); this.nametagVisibility = (Team.Visibility)Team.Visibility.STREAM_CODEC.decode(input); this.collisionRule = (Team.CollisionRule)Team.CollisionRule.STREAM_CODEC.decode(input); this.color = input.readEnum(ChatFormatting.class); this.playerPrefix = (Component)ComponentSerialization.TRUSTED_STREAM_CODEC.decode(input); this.playerSuffix = (Component)ComponentSerialization.TRUSTED_STREAM_CODEC.decode(input); } public Component getDisplayName() { return this.displayName; } public int getOptions() { return this.options; } public ChatFormatting getColor() { return this.color; } public Team.Visibility getNametagVisibility() { return this.nametagVisibility; } public Team.CollisionRule getCollisionRule() { return this.collisionRule; } public Component getPlayerPrefix() { return this.playerPrefix; } public Component getPlayerSuffix() { return this.playerSuffix; } public void write(RegistryFriendlyByteBuf output) { ComponentSerialization.TRUSTED_STREAM_CODEC.encode(output, this.displayName); output.writeByte(this.options); Team.Visibility.STREAM_CODEC.encode(output, this.nametagVisibility); Team.CollisionRule.STREAM_CODEC.encode(output, this.collisionRule); output.writeEnum(this.color); ComponentSerialization.TRUSTED_STREAM_CODEC.encode(output, this.playerPrefix); ComponentSerialization.TRUSTED_STREAM_CODEC.encode(output, this.playerSuffix); } } public static enum Action { ADD, REMOVE; } }