WIP: Add slim tablist back #440
@ -156,6 +156,7 @@ public class BungeeCore extends Plugin {
|
|||||||
new LocalCommand();
|
new LocalCommand();
|
||||||
new SetLocaleCommand();
|
new SetLocaleCommand();
|
||||||
new BuilderCloudCommand();
|
new BuilderCloudCommand();
|
||||||
|
new SlimTablistToggleCommand();
|
||||||
|
|
||||||
// Punishment Commands:
|
// Punishment Commands:
|
||||||
new PunishmentCommand("ban", Punishment.PunishmentType.Ban);
|
new PunishmentCommand("ban", Punishment.PunishmentType.Ban);
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
package de.steamwar.bungeecore.tablist;
|
package de.steamwar.bungeecore.tablist;
|
||||||
|
|
||||||
import de.steamwar.bungeecore.Storage;
|
import de.steamwar.bungeecore.Storage;
|
||||||
|
import de.steamwar.bungeecore.sql.UserConfig;
|
||||||
import de.steamwar.messages.ChatSender;
|
import de.steamwar.messages.ChatSender;
|
||||||
import io.netty.channel.ChannelHandler;
|
import io.netty.channel.ChannelHandler;
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
@ -76,7 +77,11 @@ public class Tablist extends MessageToMessageDecoder<PacketWrapper> {
|
|||||||
|
|
||||||
List<TablistPart.Item> tablist = new ArrayList<>();
|
List<TablistPart.Item> tablist = new ArrayList<>();
|
||||||
List<TablistPart.Item> direct = new ArrayList<>();
|
List<TablistPart.Item> direct = new ArrayList<>();
|
||||||
global.print(viewer, player, tablist, direct);
|
if (global.size(viewer, player) > 80) {
|
||||||
|
global.slimPrint(viewer, player, tablist, direct);
|
||||||
|
|||||||
|
} else {
|
||||||
|
global.print(viewer, player, tablist, direct);
|
||||||
|
}
|
||||||
|
|
||||||
// NPC handling
|
// NPC handling
|
||||||
List<String> addNpc = new ArrayList<>();
|
List<String> addNpc = new ArrayList<>();
|
||||||
|
@ -26,10 +26,7 @@ import net.md_5.bungee.api.ProxyServer;
|
|||||||
import net.md_5.bungee.api.config.ServerInfo;
|
import net.md_5.bungee.api.config.ServerInfo;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class TablistBuild implements TablistPart {
|
public class TablistBuild implements TablistPart {
|
||||||
@ -54,6 +51,12 @@ public class TablistBuild implements TablistPart {
|
|||||||
return "Build";
|
return "Build";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size(ChatSender viewer, ProxiedPlayer player) {
|
||||||
|
ServerInfo server = player.getServer().getInfo();
|
||||||
|
return servers.stream().mapToInt(s -> players.get(s).size()).sum() + (players.keySet().stream().anyMatch(info -> server != info) ? 2 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void print(ChatSender viewer, ProxiedPlayer player, List<Item> tablist, List<Item> direct) {
|
public void print(ChatSender viewer, ProxiedPlayer player, List<Item> tablist, List<Item> direct) {
|
||||||
ServerInfo server = player.getServer().getInfo();
|
ServerInfo server = player.getServer().getInfo();
|
||||||
@ -67,4 +70,35 @@ public class TablistBuild implements TablistPart {
|
|||||||
.forEach(((server == info) ? direct : tablist)::add);
|
.forEach(((server == info) ? direct : tablist)::add);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void slimPrint(ChatSender viewer, ProxiedPlayer player, List<Item> tablist, List<Item> direct) {
|
||||||
|
ServerInfo server = player.getServer().getInfo();
|
||||||
|
List<Item> toPrint = new ArrayList<>();
|
||||||
|
for (ServerInfo info : servers) {
|
||||||
|
if (server == info) {
|
||||||
|
TablistServer.teamify(players.get(info), player)
|
||||||
|
.forEach(direct::add);
|
||||||
|
} else {
|
||||||
|
toPrint.addAll(players.get(info));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (toPrint.isEmpty()) return;
|
||||||
|
|
||||||
|
int all = toPrint.size();
|
||||||
|
toPrint = TablistServer.slimify(viewer, toPrint);
|
||||||
|
|
||||||
|
if (tablist.isEmpty() || tablist.get(tablist.size() - 1).getDisplayName().equals("")) {
|
||||||
Lixfel
hat
Das hier scheint falsch. Printe doch einfach immer die Leerzeile (bzw. so wie print) Das hier scheint falsch. Printe doch einfach immer die Leerzeile (bzw. so wie print)
YoyoNow
hat
Naja aber dann haben wir zwischen servern wo keiner angezeigt wird immer unnütze leerzeilen, welche auch vorher nicht drin waren. Und die Abfrage ist fertig. Naja aber dann haben wir zwischen servern wo keiner angezeigt wird immer unnütze leerzeilen, welche auch vorher nicht drin waren. Und die Abfrage ist fertig.
|
|||||||
|
tablist.add(new Item(null, "", TablistServer.GRAY));
|
||||||
|
}
|
||||||
|
if (toPrint.size() == all) {
|
||||||
|
tablist.add(new Item(null, viewer.parseToLegacy("TABLIST_BAU"), TablistServer.LIGHT_GRAY));
|
||||||
|
} else if (toPrint.isEmpty()) {
|
||||||
|
tablist.add(new Item(null, viewer.parseToLegacy("TABLIST_BAU_SLIM", all), TablistServer.LIGHT_GRAY));
|
||||||
|
} else {
|
||||||
|
tablist.add(new Item(null, viewer.parseToLegacy("TABLIST_BAU_SLIM_DELTA", all - toPrint.size()), TablistServer.LIGHT_GRAY));
|
||||||
|
}
|
||||||
|
TablistServer.teamify(toPrint, player)
|
||||||
|
.forEach(tablist::add);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,10 +36,22 @@ public class TablistGroup implements TablistPart {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size(ChatSender viewer, ProxiedPlayer player) {
|
||||||
|
return sublists.stream().mapToInt(sublist -> sublist.size(viewer, player)).sum();
|
||||||
|
}
|
||||||
YoyoNow markierte diese Unterhaltung als gelöst
Lixfel
hat
stream.sum()? stream.sum()?
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void print(ChatSender viewer, ProxiedPlayer player, List<Item> tablist, List<Item> direct) {
|
public void print(ChatSender viewer, ProxiedPlayer player, List<Item> tablist, List<Item> direct) {
|
||||||
for (TablistPart sublist : sublists) {
|
for (TablistPart sublist : sublists) {
|
||||||
sublist.print(viewer, player, tablist, direct);
|
sublist.print(viewer, player, tablist, direct);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void slimPrint(ChatSender viewer, ProxiedPlayer player, List<Item> tablist, List<Item> direct) {
|
||||||
|
for (TablistPart sublist : sublists) {
|
||||||
|
sublist.slimPrint(viewer, player, tablist, direct);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,9 @@ import java.util.UUID;
|
|||||||
|
|
||||||
interface TablistPart {
|
interface TablistPart {
|
||||||
String sortKey();
|
String sortKey();
|
||||||
|
int size(ChatSender viewer, ProxiedPlayer player);
|
||||||
void print(ChatSender viewer, ProxiedPlayer player, List<Item> tablist, List<Item> direct);
|
void print(ChatSender viewer, ProxiedPlayer player, List<Item> tablist, List<Item> direct);
|
||||||
|
void slimPrint(ChatSender viewer, ProxiedPlayer player, List<Item> tablist, List<Item> direct);
|
||||||
|
|
||||||
class Item {
|
class Item {
|
||||||
|
|
||||||
|
@ -19,9 +19,11 @@
|
|||||||
|
|
||||||
package de.steamwar.bungeecore.tablist;
|
package de.steamwar.bungeecore.tablist;
|
||||||
|
|
||||||
|
import de.steamwar.bungeecore.Arenaserver;
|
||||||
import de.steamwar.bungeecore.Servertype;
|
import de.steamwar.bungeecore.Servertype;
|
||||||
import de.steamwar.bungeecore.Subserver;
|
import de.steamwar.bungeecore.Subserver;
|
||||||
import de.steamwar.bungeecore.sql.SteamwarUser;
|
import de.steamwar.bungeecore.sql.SteamwarUser;
|
||||||
|
import de.steamwar.bungeecore.sql.UserGroup;
|
||||||
import de.steamwar.messages.ChatSender;
|
import de.steamwar.messages.ChatSender;
|
||||||
import de.steamwar.network.packets.common.FightInfoPacket;
|
import de.steamwar.network.packets.common.FightInfoPacket;
|
||||||
import net.md_5.bungee.BungeeCord;
|
import net.md_5.bungee.BungeeCord;
|
||||||
@ -29,10 +31,7 @@ import net.md_5.bungee.api.config.ServerInfo;
|
|||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
import net.md_5.bungee.protocol.Property;
|
import net.md_5.bungee.protocol.Property;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
@ -67,6 +66,11 @@ public class TablistServer implements TablistPart {
|
|||||||
return server.getName();
|
return server.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size(ChatSender viewer, ProxiedPlayer player) {
|
||||||
|
return (player.getServer().getInfo() == server ? 0 : 2) + players.size();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void print(ChatSender viewer, ProxiedPlayer player, List<Item> tablist, List<Item> direct) {
|
public void print(ChatSender viewer, ProxiedPlayer player, List<Item> tablist, List<Item> direct) {
|
||||||
boolean onServer = player.getServer().getInfo() == server;
|
boolean onServer = player.getServer().getInfo() == server;
|
||||||
@ -80,6 +84,30 @@ public class TablistServer implements TablistPart {
|
|||||||
teamify(players, player).forEach(items::add);
|
teamify(players, player).forEach(items::add);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void slimPrint(ChatSender viewer, ProxiedPlayer player, List<Item> tablist, List<Item> direct) {
|
||||||
|
boolean onServer = player.getServer().getInfo() == server;
|
||||||
|
List<Item> items = onServer ? direct : tablist;
|
||||||
|
|
||||||
|
List<Item> toPrint = players;
|
||||||
|
if (!onServer) {
|
||||||
|
toPrint = TablistServer.slimify(viewer, players);
|
||||||
|
|
||||||
|
if (tablist.isEmpty() || tablist.get(tablist.size() - 1).getDisplayName().equals("")) {
|
||||||
|
items.add(new Item(null, "", GRAY));
|
||||||
|
}
|
||||||
|
if (toPrint.size() == players.size()) {
|
||||||
|
items.add(new Item(null, "§7§l" + server.getName(), LIGHT_GRAY));
|
||||||
|
} else if (toPrint.isEmpty()) {
|
||||||
|
items.add(new Item(null, "§7§l" + server.getName() + " (" + players.size() + ")", LIGHT_GRAY));
|
||||||
|
} else {
|
||||||
|
items.add(new Item(null, "§7§l" + server.getName() + " (+" + (players.size() - toPrint.size()) + ")", LIGHT_GRAY));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
teamify(toPrint, player).forEach(items::add);
|
||||||
|
}
|
||||||
|
|
||||||
private void addPlayers(String prefix, List<Integer> teamPlayers, Collection<ProxiedPlayer> onlinePlayers){
|
private void addPlayers(String prefix, List<Integer> teamPlayers, Collection<ProxiedPlayer> onlinePlayers){
|
||||||
teamPlayers.stream().map(SteamwarUser::get).map(
|
teamPlayers.stream().map(SteamwarUser::get).map(
|
||||||
user -> onlinePlayers.stream().filter(player -> player.getUniqueId().equals(user.getUuid())).findAny()
|
user -> onlinePlayers.stream().filter(player -> player.getUniqueId().equals(user.getUuid())).findAny()
|
||||||
@ -99,4 +127,24 @@ public class TablistServer implements TablistPart {
|
|||||||
return new Item(p, true);
|
return new Item(p, true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<Item> slimify(ChatSender viewer, List<Item> items) {
|
||||||
|
int team = viewer.user().getTeam();
|
||||||
|
return items.stream()
|
||||||
|
.map(Item::getUuid)
|
||||||
|
.map(SteamwarUser::get)
|
||||||
|
.filter(steamwarUser -> {
|
||||||
|
if (steamwarUser.getUserGroup() != UserGroup.Member) return true;
|
||||||
|
Subserver subserver = Subserver.getSubserver(BungeeCord.getInstance().getPlayer(steamwarUser.getUuid()));
|
||||||
|
if (subserver instanceof Arenaserver && subserver.getServer().getPlayers().size() == 1) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return steamwarUser.getTeam() == team;
|
||||||
|
})
|
||||||
|
.map(SteamwarUser::getUuid)
|
||||||
|
.map(BungeeCord.getInstance()::getPlayer)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.map(TablistPart.Item::new)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -563,6 +563,8 @@ TABLIST_PHASE_2=§8Discord: §8https://§eSteam§8War.de/discord
|
|||||||
TABLIST_PHASE_DEFAULT=§8Website: https://§eSteam§8War.de
|
TABLIST_PHASE_DEFAULT=§8Website: https://§eSteam§8War.de
|
||||||
TABLIST_FOOTER=§e{0} {1}§8ms §ePlayers§8: §7{2}
|
TABLIST_FOOTER=§e{0} {1}§8ms §ePlayers§8: §7{2}
|
||||||
TABLIST_BAU=§7§lBuild
|
TABLIST_BAU=§7§lBuild
|
||||||
|
TABLIST_BAU_SLIM=§7§lBuild ({0})
|
||||||
|
TABLIST_BAU_SLIM_DELTA=§7§lBuild (+{0})
|
||||||
LIST_COMMAND=§e{0}§8: §7{1}
|
LIST_COMMAND=§e{0}§8: §7{1}
|
||||||
|
|
||||||
#EventStarter
|
#EventStarter
|
||||||
@ -649,3 +651,8 @@ LOCK_LOCALE_CHANGED=§aLanguage saved
|
|||||||
#Builder Cloud
|
#Builder Cloud
|
||||||
BUILDERCLOUD_USAGE=§8/§7buildercloud §8[§eversion§8] §8[§emap§8] §8<§7generator§8>
|
BUILDERCLOUD_USAGE=§8/§7buildercloud §8[§eversion§8] §8[§emap§8] §8<§7generator§8>
|
||||||
BUILDERCLOUD_VERSION=§cUnknown version.
|
BUILDERCLOUD_VERSION=§cUnknown version.
|
||||||
|
|
||||||
|
# SlimTablist Command
|
||||||
|
SLIMTABLIST_USAGE=§c/§7toggleslimtablist
|
||||||
|
SLIMTABLIST_ENABLED=§aSlimTablist enabled
|
||||||
|
SLIMTABLIST_DISABLED=§cSlimTablist disabled
|
@ -542,6 +542,8 @@ TABLIST_PHASE_2=§8Discord: §8https://§eSteam§8War.de/discord
|
|||||||
TABLIST_PHASE_DEFAULT=§8Website: https://§eSteam§8War.de
|
TABLIST_PHASE_DEFAULT=§8Website: https://§eSteam§8War.de
|
||||||
TABLIST_FOOTER=§e{0} {1}§8ms §eSpieler§8: §7{2}
|
TABLIST_FOOTER=§e{0} {1}§8ms §eSpieler§8: §7{2}
|
||||||
TABLIST_BAU=§7§lBau
|
TABLIST_BAU=§7§lBau
|
||||||
|
TABLIST_BAU_SLIM=§7§lBau ({0})
|
||||||
|
TABLIST_BAU_SLIM_DELTA=§7§lBau (+{0})
|
||||||
LIST_COMMAND=§e{0}§8: §7{1}
|
LIST_COMMAND=§e{0}§8: §7{1}
|
||||||
|
|
||||||
#EventStarter
|
#EventStarter
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren
Tust du in der .size-Funktion die Direct-Spieler korrekt mitwerten? (Die direct-ArrayList gibt nicht die tatsächliche Anzahl der direct-TabItems wieder, sondern lediglich die Anzahl der direct-TabItems, welche über diesen Bungee verbunden sind). Daher ist das mit DevBungees und Teamservern falsch.
DevBungee dürfte aber nicht angezeigt werden und Teamservern zeigt auch die Spieler im Moment nur unten an, wenn Leute auf dem server direkt sind.
Werden halt wie NPCs behandelt...
Ok und wo kriege ich die her um das auszurechnen?
directTabItems. Prinzipiell möchte ich aber erstmal, dass du die Komplexität hier absolut gering hälst, weil wir das mit dem NPC-Feature der 1.19.3 und für die Bedrock-Edition eh noch mal umbauen müssen.
Wie genau soll ich die komplexität gering halten?