WIP: Add slim tablist back #440
@ -1,45 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is a part of the SteamWar software.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2020 SteamWar.de-Serverteam
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package de.steamwar.bungeecore.commands;
|
|
||||||
|
|
||||||
import de.steamwar.bungeecore.Message;
|
|
||||||
import de.steamwar.bungeecore.sql.SteamwarUser;
|
|
||||||
import de.steamwar.bungeecore.sql.UserConfig;
|
|
||||||
import de.steamwar.command.SWCommand;
|
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
|
||||||
|
|
||||||
public class SlimTablistToggleCommand extends SWCommand {
|
|
||||||
|
|
||||||
public SlimTablistToggleCommand() {
|
|
||||||
super("toggleslimtablist", null, "toggleslim", "toggletablist", "toggleslimtab", "toggletab");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Register(description = "SLIMTABLIST_USAGE")
|
|
||||||
public void toggle(ProxiedPlayer player) {
|
|
||||||
SteamwarUser user = SteamwarUser.get(player.getUniqueId());
|
|
||||||
boolean alwaysSlim = Boolean.parseBoolean(UserConfig.getConfig(user.getId(), "slimTablist"));
|
|
||||||
UserConfig.updateUserConfig(user.getId(), "slimTablist", String.valueOf(!alwaysSlim));
|
|
||||||
if (alwaysSlim) {
|
|
||||||
Message.send("SLIMTABLIST_DISABLED", player);
|
|
||||||
} else {
|
|
||||||
Message.send("SLIMTABLIST_ENABLED", player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -77,8 +77,7 @@ 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<>();
|
||||||
boolean alwaysSlim = Boolean.parseBoolean(UserConfig.getConfig(viewer.user().getId(), "slimTablist"));
|
if (global.size(viewer, player) > 80) {
|
||||||
if (alwaysSlim || global.size(viewer, player) > 80) {
|
|
||||||
global.slimPrint(viewer, player, tablist, direct);
|
global.slimPrint(viewer, player, tablist, direct);
|
||||||
|
|||||||
} else {
|
} else {
|
||||||
global.print(viewer, player, tablist, direct);
|
global.print(viewer, player, tablist, direct);
|
||||||
|
@ -86,7 +86,7 @@ public class TablistBuild implements TablistPart {
|
|||||||
if (toPrint.isEmpty()) return;
|
if (toPrint.isEmpty()) return;
|
||||||
|
|
||||||
int all = toPrint.size();
|
int all = toPrint.size();
|
||||||
toPrint = TablistServer.slimmify(viewer, toPrint);
|
toPrint = TablistServer.slimify(viewer, toPrint);
|
||||||
|
|
||||||
if (tablist.isEmpty() || tablist.get(tablist.size() - 1).getDisplayName().equals("")) {
|
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));
|
tablist.add(new Item(null, "", TablistServer.GRAY));
|
||||||
|
@ -38,11 +38,7 @@ public class TablistGroup implements TablistPart {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int size(ChatSender viewer, ProxiedPlayer player) {
|
public int size(ChatSender viewer, ProxiedPlayer player) {
|
||||||
int size = 0;
|
return sublists.stream().mapToInt(sublist -> sublist.size(viewer, player)).sum();
|
||||||
for (TablistPart part : sublists) {
|
|
||||||
size += part.size(viewer, player);
|
|
||||||
}
|
|
||||||
return size;
|
|
||||||
}
|
}
|
||||||
YoyoNow markierte diese Unterhaltung als gelöst
Lixfel
hat
stream.sum()? stream.sum()?
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -68,7 +68,7 @@ public class TablistServer implements TablistPart {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int size(ChatSender viewer, ProxiedPlayer player) {
|
public int size(ChatSender viewer, ProxiedPlayer player) {
|
||||||
return (player.getServer().getInfo() == server ? 2 : 0) + players.size();
|
return (player.getServer().getInfo() == server ? 0 : 2) + players.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -91,7 +91,7 @@ public class TablistServer implements TablistPart {
|
|||||||
|
|
||||||
List<Item> toPrint = players;
|
List<Item> toPrint = players;
|
||||||
if (!onServer) {
|
if (!onServer) {
|
||||||
toPrint = TablistServer.slimmify(viewer, players);
|
toPrint = TablistServer.slimify(viewer, players);
|
||||||
|
|
||||||
if (tablist.isEmpty() || tablist.get(tablist.size() - 1).getDisplayName().equals("")) {
|
if (tablist.isEmpty() || tablist.get(tablist.size() - 1).getDisplayName().equals("")) {
|
||||||
items.add(new Item(null, "", GRAY));
|
items.add(new Item(null, "", GRAY));
|
||||||
@ -128,7 +128,7 @@ public class TablistServer implements TablistPart {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Item> slimmify(ChatSender viewer, List<Item> items) {
|
public static List<Item> slimify(ChatSender viewer, List<Item> items) {
|
||||||
int team = viewer.user().getTeam();
|
int team = viewer.user().getTeam();
|
||||||
return items.stream()
|
return items.stream()
|
||||||
.map(Item::getUuid)
|
.map(Item::getUuid)
|
||||||
|
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?