forked from Upstream/Velocitab
Fixed some problems: (#149)
- kick problem - missing permission to name subcommand - check before clearing header & footer on not handled servers
This commit is contained in:
parent
dda537662e
commit
e19d06ee18
@ -76,6 +76,7 @@ public final class VelocitabCommand {
|
|||||||
})
|
})
|
||||||
)
|
)
|
||||||
.then(LiteralArgumentBuilder.<CommandSource>literal("name")
|
.then(LiteralArgumentBuilder.<CommandSource>literal("name")
|
||||||
|
.requires(src -> src.hasPermission("velocitab.command.name"))
|
||||||
.then(RequiredArgumentBuilder.<CommandSource, String>argument("name", StringArgumentType.word())
|
.then(RequiredArgumentBuilder.<CommandSource, String>argument("name", StringArgumentType.word())
|
||||||
.executes(ctx -> {
|
.executes(ctx -> {
|
||||||
if (!(ctx.getSource() instanceof Player player)) {
|
if (!(ctx.getSource() instanceof Player player)) {
|
||||||
|
@ -220,6 +220,24 @@ public class PlayerTabList {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void removePlayer(@NotNull Player target) {
|
||||||
|
final UUID uuid = target.getUniqueId();
|
||||||
|
plugin.getServer().getAllPlayers().forEach(player -> player.getTabList().removeEntry(uuid));
|
||||||
|
|
||||||
|
// Update the tab list of all players
|
||||||
|
plugin.getServer().getScheduler()
|
||||||
|
.buildTask(plugin, () -> getPlayers().values().forEach(player -> {
|
||||||
|
player.getPlayer().getTabList().removeEntry(uuid);
|
||||||
|
player.sendHeaderAndFooter(this);
|
||||||
|
}))
|
||||||
|
.delay(500, TimeUnit.MILLISECONDS)
|
||||||
|
.schedule();
|
||||||
|
// Delete player team
|
||||||
|
plugin.getScoreboardManager().ifPresent(manager -> manager.resetCache(target));
|
||||||
|
//remove player from tab list cache
|
||||||
|
getPlayers().remove(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
CompletableFuture<TabListEntry> createEntry(@NotNull TabPlayer player, @NotNull TabList tabList) {
|
CompletableFuture<TabListEntry> createEntry(@NotNull TabPlayer player, @NotNull TabList tabList) {
|
||||||
return player.getDisplayName(plugin).thenApply(name -> TabListEntry.builder()
|
return player.getDisplayName(plugin).thenApply(name -> TabListEntry.builder()
|
||||||
|
@ -31,7 +31,6 @@ import com.velocitypowered.api.proxy.server.ServerInfo;
|
|||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.william278.velocitab.Velocitab;
|
import net.william278.velocitab.Velocitab;
|
||||||
import net.william278.velocitab.config.Group;
|
import net.william278.velocitab.config.Group;
|
||||||
import net.william278.velocitab.player.TabPlayer;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -52,9 +51,13 @@ public class TabListListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onKick(KickedFromServerEvent event) {
|
public void onKick(@NotNull KickedFromServerEvent event) {
|
||||||
event.getPlayer().getTabList().clearAll();
|
event.getPlayer().getTabList().clearAll();
|
||||||
event.getPlayer().getTabList().clearHeaderAndFooter();
|
event.getPlayer().getTabList().clearHeaderAndFooter();
|
||||||
|
|
||||||
|
if (event.getResult() instanceof KickedFromServerEvent.DisconnectPlayer) {
|
||||||
|
tabList.removePlayer(event.getPlayer());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("UnstableApiUsage")
|
@SuppressWarnings("UnstableApiUsage")
|
||||||
@ -73,7 +76,15 @@ public class TabListListener {
|
|||||||
// If the server is not in a group, use fallback.
|
// 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 fallback is disabled, permit the player to switch excluded servers without a header or footer override
|
||||||
if (isDefault && !plugin.getSettings().isFallbackEnabled()) {
|
if (isDefault && !plugin.getSettings().isFallbackEnabled()) {
|
||||||
event.getPlayer().sendPlayerListHeaderAndFooter(Component.empty(), Component.empty());
|
final Component header = event.getPlayer().getPlayerListHeader();
|
||||||
|
final Component footer = event.getPlayer().getPlayerListFooter();
|
||||||
|
|
||||||
|
plugin.getServer().getScheduler().buildTask(plugin, () -> {
|
||||||
|
if (header.equals(event.getPlayer().getPlayerListHeader()) && footer.equals(event.getPlayer().getPlayerListFooter())) {
|
||||||
|
event.getPlayer().sendPlayerListHeaderAndFooter(header, footer);
|
||||||
|
}
|
||||||
|
}).delay(500, TimeUnit.MILLISECONDS).schedule();
|
||||||
|
|
||||||
tabList.getPlayers().remove(event.getPlayer().getUniqueId());
|
tabList.getPlayers().remove(event.getPlayer().getUniqueId());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -89,27 +100,9 @@ public class TabListListener {
|
|||||||
|
|
||||||
// Remove the player from the tracking list, Print warning if player was not removed
|
// Remove the player from the tracking list, Print warning if player was not removed
|
||||||
final UUID uuid = event.getPlayer().getUniqueId();
|
final UUID uuid = event.getPlayer().getUniqueId();
|
||||||
final TabPlayer tabPlayer = tabList.getPlayers().get(uuid);
|
|
||||||
if (tabPlayer == null) {
|
|
||||||
plugin.log(String.format("Failed to remove disconnecting player %s (UUID: %s)",
|
|
||||||
event.getPlayer().getUsername(), uuid));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove the player from the tab list of all other players
|
// Remove the player from the tab list of all other players
|
||||||
plugin.getServer().getAllPlayers().forEach(player -> player.getTabList().removeEntry(uuid));
|
tabList.removePlayer(event.getPlayer());
|
||||||
|
|
||||||
// Update the tab list of all players
|
|
||||||
plugin.getServer().getScheduler()
|
|
||||||
.buildTask(plugin, () -> tabList.getPlayers().values().forEach(player -> {
|
|
||||||
player.getPlayer().getTabList().removeEntry(uuid);
|
|
||||||
player.sendHeaderAndFooter(tabList);
|
|
||||||
}))
|
|
||||||
.delay(500, TimeUnit.MILLISECONDS)
|
|
||||||
.schedule();
|
|
||||||
// Delete player team
|
|
||||||
plugin.getScoreboardManager().ifPresent(manager -> manager.resetCache(event.getPlayer()));
|
|
||||||
//remove player from tab list cache
|
|
||||||
tabList.getPlayers().remove(uuid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
Loading…
Reference in New Issue
Block a user