Skip to content

Commit

Permalink
fix: notify clients immediately of team display name change
Browse files Browse the repository at this point in the history
Needed to ensure command completion works and produces correct shortname

FTBTeam/FTB-Mods-Issues#1457
  • Loading branch information
desht committed Jan 22, 2025
1 parent c18ec78 commit 571af3c
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,18 @@
import dev.architectury.networking.NetworkManager;
import dev.ftb.mods.ftblibrary.snbt.SNBT;
import dev.ftb.mods.ftblibrary.snbt.SNBTCompoundTag;
import dev.ftb.mods.ftblibrary.util.NetworkHelper;
import dev.ftb.mods.ftblibrary.util.TextComponentUtils;
import dev.ftb.mods.ftbteams.FTBTeams;
import dev.ftb.mods.ftbteams.api.FTBTeamsAPI;
import dev.ftb.mods.ftbteams.api.Team;
import dev.ftb.mods.ftbteams.api.TeamMessage;
import dev.ftb.mods.ftbteams.api.TeamRank;
import dev.ftb.mods.ftbteams.api.event.*;
import dev.ftb.mods.ftbteams.api.property.TeamProperties;
import dev.ftb.mods.ftbteams.api.property.TeamProperty;
import dev.ftb.mods.ftbteams.api.property.TeamPropertyCollection;
import dev.ftb.mods.ftbteams.net.NotifyTeamRenameMessage;
import dev.ftb.mods.ftbteams.net.SendMessageResponseMessage;
import net.minecraft.ChatFormatting;
import net.minecraft.Util;
Expand Down Expand Up @@ -167,6 +170,9 @@ public <T> int settings(CommandSourceStack source, TeamProperty<T> key, String v
source.sendSuccess(() -> Component.literal("Set ").append(keyc).append(" to ").append(valuec), true);

TeamEvent.PROPERTIES_CHANGED.invoker().accept(new TeamPropertiesChangedEvent(this, old));
if (key.equals(TeamProperties.DISPLAY_NAME)) {
NetworkHelper.sendToAll(source.getServer(), new NotifyTeamRenameMessage(getId(), value));
}
} else {
source.sendFailure(Component.literal("Failed to parse value!"));
return 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import dev.ftb.mods.ftbteams.api.Team;
import dev.ftb.mods.ftbteams.api.client.ClientTeamManager;
import dev.ftb.mods.ftbteams.api.client.KnownClientPlayer;
import dev.ftb.mods.ftbteams.api.property.TeamProperties;
import dev.ftb.mods.ftbteams.client.KnownClientPlayerNet;
import net.minecraft.ChatFormatting;
import net.minecraft.Util;
Expand Down Expand Up @@ -203,10 +204,18 @@ public void updatePresence(KnownClientPlayer newPlayer) {

knownPlayers.put(toUpdate.id(), newPlayer);

FTBTeams.LOGGER.debug("Updated presence of " + newPlayer.name());
FTBTeams.LOGGER.debug("Updated presence of {}", newPlayer.name());
}

private KnownClientPlayer updateFrom(UUID id, KnownClientPlayer other) {
return new KnownClientPlayer(id, other.name(), other.online(), other.teamId(), other.profile(), other.extraData());
}

public void updateDisplayName(UUID teamId, String newName) {
Team team = teamMap.get(teamId);
if (team != null) {
team.setProperty(TeamProperties.DISPLAY_NAME, newName);
FTBTeams.LOGGER.debug("Updated display name of {} to {}", teamId, newName);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public static void register() {
NetworkHelper.registerS2C(UpdatePropertiesResponseMessage.TYPE, UpdatePropertiesResponseMessage.STREAM_CODEC, UpdatePropertiesResponseMessage::handle);
NetworkHelper.registerS2C(SendMessageResponseMessage.TYPE, SendMessageResponseMessage.STREAM_CODEC, SendMessageResponseMessage::handle);
NetworkHelper.registerS2C(UpdatePresenceMessage.TYPE, UpdatePresenceMessage.STREAM_CODEC, UpdatePresenceMessage::handle);
NetworkHelper.registerS2C(NotifyTeamRenameMessage.TYPE, NotifyTeamRenameMessage.STREAM_CODEC, NotifyTeamRenameMessage::handle);

NetworkHelper.registerC2S(OpenGUIMessage.TYPE, OpenGUIMessage.STREAM_CODEC, OpenGUIMessage::handle);
NetworkHelper.registerC2S(UpdatePropertiesRequestMessage.TYPE, UpdatePropertiesRequestMessage.STREAM_CODEC, UpdatePropertiesRequestMessage::handle);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package dev.ftb.mods.ftbteams.net;

import dev.architectury.networking.NetworkManager;
import dev.ftb.mods.ftbteams.api.FTBTeamsAPI;
import dev.ftb.mods.ftbteams.data.ClientTeamManagerImpl;
import net.minecraft.core.UUIDUtil;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;

import java.util.UUID;

/**
* Received on: CLIENT<br>
* Sent by server when the display name property of a team is changed to make clients aware of the new shortname
* for command completion purposes.
*
* @param teamId the unique team ID
* @param newName the new display name
*/
public record NotifyTeamRenameMessage(UUID teamId, String newName) implements CustomPacketPayload {
public static final Type<NotifyTeamRenameMessage> TYPE = new Type<>(FTBTeamsAPI.rl("notify_team_rename"));

public static final StreamCodec<FriendlyByteBuf, NotifyTeamRenameMessage> STREAM_CODEC = StreamCodec.composite(
UUIDUtil.STREAM_CODEC, NotifyTeamRenameMessage::teamId,
ByteBufCodecs.STRING_UTF8, NotifyTeamRenameMessage::newName,
NotifyTeamRenameMessage::new
);

@Override
public Type<NotifyTeamRenameMessage> type() {
return TYPE;
}

public static void handle(NotifyTeamRenameMessage message, NetworkManager.PacketContext context) {
context.queue(() -> {
ClientTeamManagerImpl.getInstance().updateDisplayName(message.teamId, message.newName);
});
}
}

0 comments on commit 571af3c

Please sign in to comment.