我如何使用数据包对 Minecraft Bukkit 选项卡列表进行排序

问题描述 投票:0回答:1

我创建了一个插件,它在选项卡列表中显示玩家的排名及其姓名,代码如下:

groupPlayer.setPlayerListName(SchnitzelTab.getInstance().groupHandler.getGroups().get(i).getPrefix() + groupPlayer.getName());
PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, ((EntityPlayer) ((CraftPlayer) groupPlayer).getHandle()));

但我现在的问题是如何对选项卡列表进行排序?

java plugins bukkit
1个回答
3
投票

据我所知,你不能这样对表格列表进行排序。 但是有一种更简单的方法可以为玩家添加前缀并通过将玩家添加到团队来对它们进行排序。

为此,您必须创建一个记分板,创建一些团队并设置他们的前缀。

public Scoreboard sb;
public Team t_admin;
public Team t_mod;
public Team t_player;

public void onEnable() {
    sb = Bukkit.getScoreboardManager().getNewScoreboard();
    t_admin = sb.registerNewTeam("a");
    t_mod = sb.registerNewTeam("b");
    t_player = sb.registerNewTeam("c");
    t_admin.setPrefix(groupHandler.getGroups().get(/*your int */).getPrefix());
    t_mod.setPrefix(groupHandler.getGroups().get(/*your int */).getPrefix());
    t_player.setPrefix(groupHandler.getGroups().get(/*your int */).getPrefix());
    //you can add as many as you want
}

列表中的球员现在按球队名称排序。在这种情况下,排名管理员获得“a”,mod获得“b”,玩家获得“c”,这意味着管理员高于mod,mod高于玩家。

要将玩家添加到团队中,您只需添加执行以下操作:

t_player.addEntry(p.getName());

不要忘记将玩家记分板设置为我们创建的某人。也许您想在玩家加入时执行此操作。你最终的代码可能看起来像这样:

public Scoreboard sb;
public Team t_admin;
public Team t_mod;
public Team t_player;

public void onEnable() {
    getServer().getPluginManager().registerEvents(this, this);
    sb = Bukkit.getScoreboardManager().getNewScoreboard();
    t_admin = sb.registerNewTeam("a");
    t_mod = sb.registerNewTeam("b");
    t_player = sb.registerNewTeam("c");
    t_admin.setPrefix(groupHandler.getGroups().get(/*your int */).getPrefix());
    t_mod.setPrefix(groupHandler.getGroups().get(/*your int */).getPrefix());
    t_player.setPrefix(groupHandler.getGroups().get(/*your int */).getPrefix());
    //you can add as many as you want
}

@EventHandler
public void on(PlayerJoinEvent e) {
    Player p = e.getPlayer();
    p.setScoreboard(sb);
    int i = getTeam(p);
    switch (i) {
        case 0: //or whatever player is
            t_player.addEntry(p.getName());
            break;
        case 1:
            //for all the other groups
            break;
        default:
            break;
    }
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.