SteamWar/BungeeCore
Archiviert
13
2

WIP: Add slim tablist back #440

Geschlossen
YoyoNow möchte 6 Commits von SlimTablist nach master mergen
8 geänderte Dateien mit 121 neuen und 10 gelöschten Zeilen

Datei anzeigen

@ -156,6 +156,7 @@ public class BungeeCore extends Plugin {
new LocalCommand();
new SetLocaleCommand();
new BuilderCloudCommand();
new SlimTablistToggleCommand();
// Punishment Commands:
new PunishmentCommand("ban", Punishment.PunishmentType.Ban);

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bungeecore.tablist;
import de.steamwar.bungeecore.Storage;
import de.steamwar.bungeecore.sql.UserConfig;
import de.steamwar.messages.ChatSender;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
@ -76,7 +77,11 @@ public class Tablist extends MessageToMessageDecoder<PacketWrapper> {
List<TablistPart.Item> tablist = 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);
Review

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.

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.
Review

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.

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.
Review

Werden halt wie NPCs behandelt...

Werden halt wie NPCs behandelt...
Review

Ok und wo kriege ich die her um das auszurechnen?

Ok und wo kriege ich die her um das auszurechnen?
Review

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.

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.
Review

Wie genau soll ich die komplexität gering halten?

Wie genau soll ich die komplexität gering halten?
} else {
global.print(viewer, player, tablist, direct);
}
// NPC handling
List<String> addNpc = new ArrayList<>();

Datei anzeigen

@ -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.connection.ProxiedPlayer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
public class TablistBuild implements TablistPart {
@ -54,6 +51,12 @@ public class TablistBuild implements TablistPart {
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
public void print(ChatSender viewer, ProxiedPlayer player, List<Item> tablist, List<Item> direct) {
ServerInfo server = player.getServer().getInfo();
@ -67,4 +70,35 @@ public class TablistBuild implements TablistPart {
.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("")) {
Review

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)
Review

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));
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Hier nicht die Klammern so anfügen, sondern bitte mit neuen Messages.

Hier nicht die Klammern so anfügen, sondern bitte mit neuen Messages.
} 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);
}
}

Datei anzeigen

@ -36,10 +36,22 @@ public class TablistGroup implements TablistPart {
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
Review

stream.sum()?

stream.sum()?
@Override
public void print(ChatSender viewer, ProxiedPlayer player, List<Item> tablist, List<Item> direct) {
for (TablistPart sublist : sublists) {
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);
}
}
}

Datei anzeigen

@ -33,7 +33,9 @@ import java.util.UUID;
interface TablistPart {
String sortKey();
int size(ChatSender viewer, ProxiedPlayer player);
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 {

Datei anzeigen

@ -19,9 +19,11 @@
package de.steamwar.bungeecore.tablist;
import de.steamwar.bungeecore.Arenaserver;
import de.steamwar.bungeecore.Servertype;
import de.steamwar.bungeecore.Subserver;
import de.steamwar.bungeecore.sql.SteamwarUser;
import de.steamwar.bungeecore.sql.UserGroup;
import de.steamwar.messages.ChatSender;
import de.steamwar.network.packets.common.FightInfoPacket;
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.protocol.Property;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -67,6 +66,11 @@ public class TablistServer implements TablistPart {
return server.getName();
}
@Override
public int size(ChatSender viewer, ProxiedPlayer player) {
return (player.getServer().getInfo() == server ? 0 : 2) + players.size();
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Bedingung falsch herum?

Bedingung falsch herum?
}
@Override
public void print(ChatSender viewer, ProxiedPlayer player, List<Item> tablist, List<Item> direct) {
boolean onServer = player.getServer().getInfo() == server;
@ -80,6 +84,30 @@ public class TablistServer implements TablistPart {
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){
teamPlayers.stream().map(SteamwarUser::get).map(
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);
});
}
public static List<Item> slimify(ChatSender viewer, List<Item> items) {
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Ein m

Ein m
Veraltet
Review

Ist beides erlaubt

Ist beides erlaubt
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());
}
}

Datei anzeigen

@ -563,6 +563,8 @@ TABLIST_PHASE_2=§8Discord: §8https://§eSteam§8War.de/discord
TABLIST_PHASE_DEFAULT=§8Website: https://§eSteam§8War.de
TABLIST_FOOTER=§e{0} {1}§8ms §ePlayers§8: §7{2}
TABLIST_BAU=§7§lBuild
TABLIST_BAU_SLIM=§7§lBuild ({0})
TABLIST_BAU_SLIM_DELTA=§7§lBuild (+{0})
LIST_COMMAND=§e{0}§8: §7{1}
#EventStarter
@ -648,4 +650,9 @@ LOCK_LOCALE_CHANGED=§aLanguage saved
#Builder Cloud
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

Datei anzeigen

@ -542,6 +542,8 @@ TABLIST_PHASE_2=§8Discord: §8https://§eSteam§8War.de/discord
TABLIST_PHASE_DEFAULT=§8Website: https://§eSteam§8War.de
TABLIST_FOOTER=§e{0} {1}§8ms §eSpieler§8: §7{2}
TABLIST_BAU=§7§lBau
TABLIST_BAU_SLIM=§7§lBau ({0})
TABLIST_BAU_SLIM_DELTA=§7§lBau (+{0})
LIST_COMMAND=§e{0}§8: §7{1}
#EventStarter