diff --git a/common/src/main/java/dev/ftb/mods/ftbteams/data/AbstractTeam.java b/common/src/main/java/dev/ftb/mods/ftbteams/data/AbstractTeam.java index 5402077..e6661ac 100644 --- a/common/src/main/java/dev/ftb/mods/ftbteams/data/AbstractTeam.java +++ b/common/src/main/java/dev/ftb/mods/ftbteams/data/AbstractTeam.java @@ -5,6 +5,7 @@ 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; @@ -12,8 +13,10 @@ 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; @@ -167,6 +170,9 @@ public int settings(CommandSourceStack source, TeamProperty 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; diff --git a/common/src/main/java/dev/ftb/mods/ftbteams/data/ClientTeamManagerImpl.java b/common/src/main/java/dev/ftb/mods/ftbteams/data/ClientTeamManagerImpl.java index 61518f8..f2ec1a5 100644 --- a/common/src/main/java/dev/ftb/mods/ftbteams/data/ClientTeamManagerImpl.java +++ b/common/src/main/java/dev/ftb/mods/ftbteams/data/ClientTeamManagerImpl.java @@ -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; @@ -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); + } + } } diff --git a/common/src/main/java/dev/ftb/mods/ftbteams/net/FTBTeamsNet.java b/common/src/main/java/dev/ftb/mods/ftbteams/net/FTBTeamsNet.java index 80605c9..567a105 100644 --- a/common/src/main/java/dev/ftb/mods/ftbteams/net/FTBTeamsNet.java +++ b/common/src/main/java/dev/ftb/mods/ftbteams/net/FTBTeamsNet.java @@ -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); diff --git a/common/src/main/java/dev/ftb/mods/ftbteams/net/NotifyTeamRenameMessage.java b/common/src/main/java/dev/ftb/mods/ftbteams/net/NotifyTeamRenameMessage.java new file mode 100644 index 0000000..a6326da --- /dev/null +++ b/common/src/main/java/dev/ftb/mods/ftbteams/net/NotifyTeamRenameMessage.java @@ -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
+ * 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 TYPE = new Type<>(FTBTeamsAPI.rl("notify_team_rename")); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + UUIDUtil.STREAM_CODEC, NotifyTeamRenameMessage::teamId, + ByteBufCodecs.STRING_UTF8, NotifyTeamRenameMessage::newName, + NotifyTeamRenameMessage::new + ); + + @Override + public Type type() { + return TYPE; + } + + public static void handle(NotifyTeamRenameMessage message, NetworkManager.PacketContext context) { + context.queue(() -> { + ClientTeamManagerImpl.getInstance().updateDisplayName(message.teamId, message.newName); + }); + } +}