Skip to content

Commit

Permalink
[Chat components] No longer track modern/legacy converted components,…
Browse files Browse the repository at this point in the history
… only handle them internally in bungeecord module
  • Loading branch information
NEZNAMY committed Feb 5, 2025
1 parent 09d400c commit 549732f
Show file tree
Hide file tree
Showing 15 changed files with 66 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ public File getDataFolder() {

@Override
@NotNull
public Object convertComponent(@NotNull TabComponent component, boolean modern) {
public Object convertComponent(@NotNull TabComponent component) {
if (ComponentConverter.INSTANCE != null) {
return ComponentConverter.INSTANCE.convert(component);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public UUID constructBossBar(@NotNull TabComponent title, float progress, @NotNu
public void create(@NotNull BossBarInfo bar) {
BossBar packet = new BossBar(bar.getBossBar(), 0);
packet.setHealth(bar.getProgress());
packet.setTitle(bar.getTitle().convert(player.getVersion()));
packet.setTitle(player.getPlatform().transformComponent(bar.getTitle(), player.getVersion()));
packet.setColor(bar.getColor().ordinal());
packet.setDivision(bar.getStyle().ordinal());
player.sendPacket(packet);
Expand All @@ -41,7 +41,7 @@ public void create(@NotNull BossBarInfo bar) {
@Override
public void updateTitle(@NotNull BossBarInfo bar) {
BossBar packet = new BossBar(bar.getBossBar(), 3);
packet.setTitle(bar.getTitle().convert(player.getVersion()));
packet.setTitle(player.getPlatform().transformComponent(bar.getTitle(), player.getVersion()));
player.sendPacket(packet);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import me.neznamy.tab.shared.platform.impl.DummyBossBar;
import me.neznamy.tab.shared.proxy.ProxyPlatform;
import me.neznamy.tab.shared.util.ReflectionUtils;
import me.neznamy.tab.shared.util.cache.Cache;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.ProxyConfig;
import net.md_5.bungee.api.ProxyServer;
Expand All @@ -42,6 +43,9 @@ public class BungeePlatform extends ProxyPlatform {
@NotNull
private final BungeeTAB plugin;

/** Cache for legacy components for <1.16 players, as we need 2 different components for each tab component */
private final Cache<TabComponent, BaseComponent> legacyComponentCache = new Cache<>("Bungee legacy component cache", 1000, tab -> createComponent(tab, false));

/**
* Constructs new instance with given plugin instance.
*
Expand Down Expand Up @@ -133,7 +137,40 @@ public void registerChannel() {

@Override
@NotNull
public BaseComponent convertComponent(@NotNull TabComponent component, boolean modern) {
public BaseComponent convertComponent(@NotNull TabComponent component) {
return createComponent(component, true);
}

/**
* Transforms the TAB component into a bungee component depending on player's version.
*
* @param component
* Component to transform
* @param version
* Version to transform the component to
* @return Bungee component for the specified client version
*/
@NotNull
public BaseComponent transformComponent(@NotNull TabComponent component, @NotNull ProtocolVersion version) {
if (version.getMinorVersion() >= 16) {
return component.convert();
} else {
// Convert color to legacy for <1.16 players
return legacyComponentCache.get(component);
}
}

/**
* Creates a bungee component using the given TAB component and modern flag for an RGB/legacy color decision.
*
* @param component
* Component to convert
* @param modern
* {@code true} if colors should be as RGB, {@code false} if legacy
* @return Converted component
*/
@NotNull
private BaseComponent createComponent(@NotNull TabComponent component, boolean modern) {
// Component type
BaseComponent bComponent;
if (component instanceof TextComponent) {
Expand Down Expand Up @@ -170,7 +207,7 @@ public BaseComponent convertComponent(@NotNull TabComponent component, boolean m

// Extra
for (TabComponent extra : component.getExtra()) {
bComponent.addExtra(convertComponent(extra, modern));
bComponent.addExtra(createComponent(extra, modern));
}

return bComponent;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public void setScore(@NonNull Score score) {
(byte) ScoreAction.CHANGE,
score.getObjective().getName(),
score.getValue(),
score.getDisplayName() == null ? null : score.getDisplayName().convert(player.getVersion()),
score.getDisplayName() == null ? null : player.getPlatform().transformComponent(score.getDisplayName(), player.getVersion()),
numberFormat(score.getNumberFormat())
));
}
Expand Down Expand Up @@ -147,7 +147,7 @@ public void onPacketSend(@NonNull Object packet) {
@NotNull
private Either<String, BaseComponent> either(@NonNull TabComponent text, int legacyLimit) {
if (player.getVersion().getMinorVersion() >= TEAM_REWORK_VERSION) {
return Either.right(text.convert(player.getVersion()));
return Either.right(player.getPlatform().transformComponent(text, player.getVersion()));
} else {
return Either.left(cutTo(text.toLegacyText(), legacyLimit));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,10 @@ public void execute(@NotNull CommandSender sender, @NotNull String[] args) {
if (TAB.getInstance().isPluginDisabled()) {
for (String message : TAB.getInstance().getDisabledCommand().execute(args, sender.hasPermission(TabConstants.Permission.COMMAND_RELOAD), sender.hasPermission(TabConstants.Permission.COMMAND_ALL))) {
if (sender instanceof ProxiedPlayer) {
sender.sendMessage((BaseComponent) TabComponent.fromColoredText(message).convert(ProtocolVersion.fromNetworkId(((ProxiedPlayer)sender).getPendingConnection().getVersion())));
sender.sendMessage(((BungeePlatform)TAB.getInstance().getPlatform()).transformComponent(
TabComponent.fromColoredText(message),
ProtocolVersion.fromNetworkId(((ProxiedPlayer)sender).getPendingConnection().getVersion())
));
} else {
sender.sendMessage((BaseComponent) TabComponent.fromColoredText(message).convert());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import me.neznamy.tab.shared.platform.TabList;
import me.neznamy.tab.shared.proxy.ProxyTabPlayer;
import net.md_5.bungee.UserConnection;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.connection.InitialHandler;
import net.md_5.bungee.connection.LoginResult;
Expand Down Expand Up @@ -43,7 +42,7 @@ public int getPing() {

@Override
public void sendMessage(@NotNull TabComponent message) {
getPlayer().sendMessage((BaseComponent) message.convert(getVersion()));
getPlayer().sendMessage(getPlatform().transformComponent(message, getVersion()));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,4 +161,9 @@ public void onPacketSend(@NonNull Object packet) {
public boolean containsEntry(@NonNull UUID entry) {
return uuids.contains(entry);
}

@Override
public BaseComponent toComponent(@NonNull TabComponent component) {
return player.getPlatform().transformComponent(component, player.getVersion());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ public BaseComponent toComponent(@NonNull TabComponent component) {
String displayNameString = component.toLegacyText();
if (displayNameString.length() > Limitations.MAX_DISPLAY_NAME_LENGTH_1_7)
displayNameString = displayNameString.substring(0, Limitations.MAX_DISPLAY_NAME_LENGTH_1_7);
return new me.neznamy.tab.shared.chat.component.TextComponent(displayNameString).convert(player.getVersion());
return player.getPlatform().transformComponent(new me.neznamy.tab.shared.chat.component.TextComponent(displayNameString), player.getVersion());
}

private void update(@NonNull PlayerListItem.Action action, @NonNull PlayerListItem.Item item) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ public File getDataFolder() {

@Override
@NotNull
public Component convertComponent(@NotNull TabComponent component, boolean modern) {
public Component convertComponent(@NotNull TabComponent component) {
// Component type
Component nmsComponent;
if (component instanceof TextComponent) {
Expand All @@ -153,7 +153,7 @@ public Component convertComponent(@NotNull TabComponent component, boolean moder

// Extra
for (TabComponent extra : component.getExtra()) {
FabricMultiVersion.addSibling(nmsComponent, convertComponent(extra, modern));
FabricMultiVersion.addSibling(nmsComponent, convertComponent(extra));
}

return nmsComponent;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import lombok.Getter;
import lombok.Setter;
import lombok.SneakyThrows;
import me.neznamy.tab.shared.ProtocolVersion;
import me.neznamy.tab.shared.TAB;
import me.neznamy.tab.shared.chat.ChatModifier;
import me.neznamy.tab.shared.chat.EnumChatFormat;
Expand Down Expand Up @@ -61,10 +60,7 @@ public abstract class TabComponent {
private static final Pattern fontPattern = Pattern.compile("<font:(.*?)>(.*?)</font>");

@Nullable
private Object convertedModern;

@Nullable
private Object convertedLegacy;
private Object converted;

/** Adventure component from this component */
@Nullable
Expand Down Expand Up @@ -116,27 +112,6 @@ public void addExtra(@NotNull TabComponent extra) {
this.extra.add(extra);
}

/**
* Converts this component to platform's component.
*
* @param clientVersion
* Client version
* @return Converted component
* @param <T>
* Platform's component class
*/
@NotNull
@SuppressWarnings("unchecked")
public <T> T convert(@NotNull ProtocolVersion clientVersion) {
if (clientVersion.supportsRGB()) {
if (convertedModern == null) convertedModern = TAB.getInstance().getPlatform().convertComponent(this, true);
return (T) convertedModern;
} else {
if (convertedLegacy == null) convertedLegacy = TAB.getInstance().getPlatform().convertComponent(this, false);
return (T) convertedLegacy;
}
}

/**
* Converts this component to platform's component.
*
Expand All @@ -147,8 +122,8 @@ public <T> T convert(@NotNull ProtocolVersion clientVersion) {
@NotNull
@SuppressWarnings("unchecked")
public <T> T convert() {
if (convertedModern == null) convertedModern = TAB.getInstance().getPlatform().convertComponent(this, true);
return (T) convertedModern;
if (converted == null) converted = TAB.getInstance().getPlatform().convertComponent(this);
return (T) converted;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,16 +129,14 @@ public interface Platform {
boolean isProxy();

/**
* Converts TAB component into platform's component.
* Converts thhe TAB component into platform's component.
*
* @param component
* Component to convert
* @param modern
* Whether clients supports RGB or not
* @return Converted component
*/
@NotNull
Object convertComponent(@NotNull TabComponent component, boolean modern);
Object convertComponent(@NotNull TabComponent component);

/**
* Creates new scoreboard instance for given player.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public void onPacketSend(@NonNull Object packet) {
* @return Converted component
*/
public C toComponent(@NonNull TabComponent component) {
return component.convert(player.getVersion());
return component.convert();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ public File getDataFolder() {

@Override
@NotNull
public Text convertComponent(@NotNull TabComponent component, boolean modern) {
public Text convertComponent(@NotNull TabComponent component) {
return Text.of(component.toLegacyText());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import me.neznamy.tab.shared.features.PerWorldPlayerListConfiguration;
import me.neznamy.tab.shared.features.injection.PipelineInjector;
import me.neznamy.tab.shared.features.types.TabFeature;
import me.neznamy.tab.shared.hook.AdventureHook;
import me.neznamy.tab.shared.placeholders.expansion.EmptyTabExpansion;
import me.neznamy.tab.shared.placeholders.expansion.TabExpansion;
import me.neznamy.tab.shared.platform.BossBar;
Expand Down Expand Up @@ -113,7 +112,7 @@ public File getDataFolder() {

@Override
@NotNull
public Component convertComponent(@NotNull TabComponent component, boolean modern) {
public Component convertComponent(@NotNull TabComponent component) {
return component.toAdventure();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ public File getDataFolder() {

@Override
@NotNull
public Component convertComponent(@NotNull TabComponent component, boolean modern) {
public Component convertComponent(@NotNull TabComponent component) {
return component.toAdventure();
}

Expand Down

0 comments on commit 549732f

Please sign in to comment.