forked from Upstream/Velocitab
fix: various bugs, improve non-VT user handling (#170)
This commit is contained in:
parent
3064aad4f3
commit
c0abf481c1
@ -45,6 +45,7 @@ public class LuckPermsHook extends Hook {
|
||||
private final LuckPerms api;
|
||||
private final EventSubscription<UserDataRecalculateEvent> event;
|
||||
private final Map<UUID, Long> lastUpdate;
|
||||
private boolean enabled;
|
||||
|
||||
public LuckPermsHook(@NotNull Velocitab plugin) throws IllegalStateException {
|
||||
super(plugin);
|
||||
@ -53,10 +54,12 @@ public class LuckPermsHook extends Hook {
|
||||
this.event = api.getEventBus().subscribe(
|
||||
plugin, UserDataRecalculateEvent.class, this::onLuckPermsGroupUpdate
|
||||
);
|
||||
this.enabled = true;
|
||||
}
|
||||
|
||||
public void closeEvent() {
|
||||
event.close();
|
||||
this.enabled = false;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@ -92,6 +95,10 @@ public class LuckPermsHook extends Hook {
|
||||
}
|
||||
lastUpdate.put(event.getUser().getUniqueId(), System.currentTimeMillis());
|
||||
|
||||
if (!enabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
final PlayerTabList tabList = plugin.getTabList();
|
||||
plugin.getServer().getPlayer(event.getUser().getUniqueId())
|
||||
.ifPresent(player -> plugin.getServer().getScheduler()
|
||||
@ -103,7 +110,12 @@ public class LuckPermsHook extends Hook {
|
||||
|
||||
final TabPlayer tabPlayer = tabPlayerOptional.get();
|
||||
final Role oldRole = tabPlayer.getRole();
|
||||
tabPlayer.setRole(getRoleFromMetadata(event.getData().getMetaData()));
|
||||
final Role newRole = getRoleFromMetadata(event.getUser().getCachedData().getMetaData());
|
||||
if (oldRole.equals(newRole)) {
|
||||
return;
|
||||
}
|
||||
|
||||
tabPlayer.setRole(newRole);
|
||||
tabList.updatePlayerDisplayName(tabPlayer);
|
||||
tabList.getVanishTabList().recalculateVanishForPlayer(tabPlayer);
|
||||
checkRoleUpdate(tabPlayer, oldRole);
|
||||
|
@ -26,9 +26,11 @@ import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.channel.ChannelPromise;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.william278.velocitab.Velocitab;
|
||||
import net.william278.velocitab.player.TabPlayer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@ -44,6 +46,11 @@ public class PlayerChannelHandler extends ChannelDuplexHandler {
|
||||
return;
|
||||
}
|
||||
|
||||
final Optional<TabPlayer> tabPlayer = plugin.getTabList().getTabPlayer(player);
|
||||
if (tabPlayer.isEmpty()) {
|
||||
super.write(ctx, msg, promise);
|
||||
return;
|
||||
}
|
||||
|
||||
if (plugin.getSettings().isRemoveSpectatorEffect() && minecraftPacket.containsAction(UpsertPlayerInfoPacket.Action.UPDATE_GAME_MODE)) {
|
||||
forceGameMode(minecraftPacket.getEntries());
|
||||
|
@ -82,8 +82,9 @@ public class ScoreboardManager {
|
||||
public void resetCache(@NotNull Player player) {
|
||||
final String team = createdTeams.remove(player.getUniqueId());
|
||||
if (team != null) {
|
||||
final TabPlayer tabPlayer = plugin.getTabList().getTabPlayer(player).orElseThrow();
|
||||
dispatchGroupPacket(UpdateTeamsPacket.removeTeam(plugin, team), tabPlayer);
|
||||
plugin.getTabList().getTabPlayer(player).ifPresent(tabPlayer ->
|
||||
dispatchGroupPacket(UpdateTeamsPacket.removeTeam(plugin, team), tabPlayer)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,12 +20,16 @@
|
||||
package net.william278.velocitab.player;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class Role implements Comparable<Role> {
|
||||
|
||||
public static final int DEFAULT_WEIGHT = 0;
|
||||
public static final Role DEFAULT_ROLE = new Role(DEFAULT_WEIGHT, null, null, null, null);
|
||||
@Getter
|
||||
@ -39,14 +43,6 @@ public class Role implements Comparable<Role> {
|
||||
@Nullable
|
||||
private final String suffix;
|
||||
|
||||
public Role(int weight, @Nullable String name, @Nullable String displayName, @Nullable String prefix, @Nullable String suffix) {
|
||||
this.weight = weight;
|
||||
this.name = name;
|
||||
this.displayName = displayName;
|
||||
this.prefix = prefix;
|
||||
this.suffix = suffix;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(@NotNull Role o) {
|
||||
return Double.compare(weight, o.weight);
|
||||
@ -73,4 +69,15 @@ public class Role implements Comparable<Role> {
|
||||
return Integer.toString(weight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) return true;
|
||||
if (obj == null || getClass() != obj.getClass()) return false;
|
||||
final Role role = (Role) obj;
|
||||
return weight == role.weight &&
|
||||
Objects.equals(name, role.name) &&
|
||||
Objects.equals(displayName, role.displayName) &&
|
||||
Objects.equals(prefix, role.prefix) &&
|
||||
Objects.equals(suffix, role.suffix);
|
||||
}
|
||||
}
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
package net.william278.velocitab.tab;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import com.velocitypowered.api.proxy.ServerConnection;
|
||||
@ -128,7 +129,7 @@ public class PlayerTabList {
|
||||
return;
|
||||
}
|
||||
|
||||
final List<RegisteredServer> serversInGroup = new ArrayList<>(tabPlayer.getGroup().registeredServers(plugin));
|
||||
final List<RegisteredServer> serversInGroup = Lists.newArrayList(tabPlayer.getGroup().registeredServers(plugin));
|
||||
if (serversInGroup.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
@ -77,11 +77,16 @@ public class TabListListener {
|
||||
|
||||
// If the server is not in a group, use fallback.
|
||||
// If fallback is disabled, permit the player to switch excluded servers without a header or footer override
|
||||
if (isDefault && !plugin.getSettings().isFallbackEnabled() && event.getPreviousServer() != null) {
|
||||
if (isDefault && !plugin.getSettings().isFallbackEnabled()) {
|
||||
final Optional<TabPlayer> tabPlayer = tabList.getTabPlayer(joined);
|
||||
if (tabPlayer.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getPreviousServer() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final Component header = tabPlayer.get().getLastHeader();
|
||||
final Component footer = tabPlayer.get().getLastFooter();
|
||||
final Component displayName = tabPlayer.get().getLastDisplayName();
|
||||
|
Loading…
Reference in New Issue
Block a user