Skip to content

Commit

Permalink
feat: expose list order in TabListEntry
Browse files Browse the repository at this point in the history
  • Loading branch information
Timongcraft committed Oct 27, 2024
1 parent 7a9227d commit ab60261
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,25 @@ default TabListEntry buildEntry(GameProfile profile, @Nullable Component display
* @deprecated Internal usage. Use {@link TabListEntry.Builder} instead.
*/
@Deprecated
default TabListEntry buildEntry(GameProfile profile, @Nullable Component displayName, int latency,
int gameMode, @Nullable ChatSession chatSession, boolean listed) {
return buildEntry(profile, displayName, latency, gameMode, chatSession, listed, 0);
}

/**
* Represents an entry in a {@link Player}'s tab list.
*
* @param profile the profile
* @param displayName the display name
* @param latency the latency
* @param gameMode the game mode
* @param chatSession the chat session
* @param listed the visible status of entry
* @param listOrder the order/priority of entry in the tab list
* @return the entry
* @deprecated Internal usage. Use {@link TabListEntry.Builder} instead.
*/
@Deprecated
TabListEntry buildEntry(GameProfile profile, @Nullable Component displayName, int latency,
int gameMode, @Nullable ChatSession chatSession, boolean listed);
int gameMode, @Nullable ChatSession chatSession, boolean listed, int listOrder);
}
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,27 @@ default TabListEntry setListed(boolean listed) {
return this;
}

/**
* Returns the order/priority of this entry in the tab list.
*
* @return order of this entry
* @sinceMinecraft 1.21.2
*/
default int getListOrder() {
return 0;
}

/**
* Sets the order/priority of this entry in the tab list.
*
* @param order order of this entry
* @return {@code this}, for chaining
* @sinceMinecraft 1.21.2
*/
default TabListEntry setListOrder(int order) {
return this;
}

/**
* Returns a {@link Builder} to create a {@link TabListEntry}.
*
Expand All @@ -161,6 +182,7 @@ class Builder {
private int latency = 0;
private int gameMode = 0;
private boolean listed = true;
private int listOrder = 0;

private @Nullable ChatSession chatSession;

Expand Down Expand Up @@ -243,7 +265,7 @@ public Builder gameMode(int gameMode) {
}

/**
* Sets wether this entry should be visible.
* Sets whether this entry should be visible.
*
* @param listed to set
* @return ${code this}, for chaining
Expand All @@ -254,6 +276,19 @@ public Builder listed(boolean listed) {
return this;
}

/**
* Sets the order/priority of this entry in the tab list.
*
* @param order to set
* @return ${code this}, for chaining
* @sinceMinecraft 1.21.2
* @see TabListEntry#getListOrder()
*/
public Builder listOrder(int order) {
this.listOrder = order;
return this;
}

/**
* Constructs the {@link TabListEntry} specified by {@code this} {@link Builder}.
*
Expand All @@ -266,7 +301,7 @@ public TabListEntry build() {
if (profile == null) {
throw new IllegalStateException("The GameProfile must be set when building a TabListEntry");
}
return tabList.buildEntry(profile, displayName, latency, gameMode, chatSession, listed);
return tabList.buildEntry(profile, displayName, latency, gameMode, chatSession, listed, listOrder);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -159,12 +159,17 @@ public TabListEntry buildEntry(GameProfile profile,

@Override
public TabListEntry buildEntry(GameProfile profile, @Nullable Component displayName, int latency,
int gameMode,
@Nullable ChatSession chatSession, boolean listed) {
int gameMode, @Nullable ChatSession chatSession, boolean listed) {
return new KeyedVelocityTabListEntry(this, profile, displayName, latency, gameMode,
chatSession == null ? null : chatSession.getIdentifiedKey());
}

@Override
public TabListEntry buildEntry(GameProfile profile, @Nullable Component displayName, int latency,
int gameMode, @Nullable ChatSession chatSession, boolean listed, int listOrder) {
return buildEntry(profile, displayName, latency, gameMode, chatSession, listed);
}

@Override
public void processLegacy(LegacyPlayerListItemPacket packet) {
// Packets are already forwarded on, so no need to do that here
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public void addEntry(TabListEntry entry1) {
} else {
entry = new VelocityTabListEntry(this, entry1.getProfile(),
entry1.getDisplayNameComponent().orElse(null),
entry1.getLatency(), entry1.getGameMode(), entry1.getChatSession(), entry1.isListed());
entry1.getLatency(), entry1.getGameMode(), entry1.getChatSession(), entry1.isListed(), entry1.getListOrder());
}

EnumSet<UpsertPlayerInfoPacket.Action> actions = EnumSet
Expand Down Expand Up @@ -207,9 +207,9 @@ public void clearAllSilent() {
@Override
public TabListEntry buildEntry(GameProfile profile, @Nullable Component displayName, int latency,
int gameMode,
@Nullable ChatSession chatSession, boolean listed) {
@Nullable ChatSession chatSession, boolean listed, int listOrder) {
return new VelocityTabListEntry(this, profile, displayName, latency, gameMode, chatSession,
listed);
listed, listOrder);
}

@Override
Expand Down Expand Up @@ -246,7 +246,8 @@ private void processUpsert(EnumSet<UpsertPlayerInfoPacket.Action> actions,
0,
-1,
null,
false
false,
0
)
);
} else {
Expand Down Expand Up @@ -274,6 +275,9 @@ private void processUpsert(EnumSet<UpsertPlayerInfoPacket.Action> actions,
if (actions.contains(UpsertPlayerInfoPacket.Action.UPDATE_LISTED)) {
currentEntry.setListedWithoutUpdate(entry.isListed());
}
if (actions.contains(UpsertPlayerInfoPacket.Action.UPDATE_LIST_ORDER)) {
currentEntry.setListOrderWithoutUpdate(entry.getListOrder());
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,21 +38,23 @@ public class VelocityTabListEntry implements TabListEntry {
private int latency;
private int gameMode;
private boolean listed;
private int listOrder;
private @Nullable ChatSession session;

/**
* Constructs the instance.
*/
public VelocityTabListEntry(VelocityTabList tabList, GameProfile profile, Component displayName,
int latency,
int gameMode, @Nullable ChatSession session, boolean listed) {
int gameMode, @Nullable ChatSession session, boolean listed, int listOrder) {
this.tabList = tabList;
this.profile = profile;
this.displayName = displayName;
this.latency = latency;
this.gameMode = gameMode;
this.session = session;
this.listed = listed;
this.listOrder = listOrder;
}

@Override
Expand Down Expand Up @@ -150,4 +152,22 @@ public VelocityTabListEntry setListed(boolean listed) {
void setListedWithoutUpdate(boolean listed) {
this.listed = listed;
}

@Override
public int getListOrder() {
return listOrder;
}

@Override
public VelocityTabListEntry setListOrder(int listOrder) {
this.listOrder = listOrder;
UpsertPlayerInfoPacket.Entry upsertEntry = this.tabList.createRawEntry(this);
upsertEntry.setListOrder(listOrder);
this.tabList.emitActionRaw(UpsertPlayerInfoPacket.Action.UPDATE_LIST_ORDER, upsertEntry);
return this;
}

void setListOrderWithoutUpdate(int listOrder) {
this.listOrder = listOrder;
}
}

0 comments on commit ab60261

Please sign in to comment.