SteamWar/SpigotCore
Archiviert
13
0

CMD #141

Zusammengeführt
YoyoNow hat 29 Commits von CMD nach master 2021-12-12 15:58:20 +01:00 zusammengeführt
2 geänderte Dateien mit 24 neuen und 13 gelöschten Zeilen
Nur Änderungen aus Commit 779199f058 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -23,15 +23,11 @@ import de.steamwar.sql.SchematicNode;
import de.steamwar.sql.SteamwarUser;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
import org.bukkit.command.CommandMap;
import org.bukkit.command.CommandSender;
import org.bukkit.command.SimpleCommandMap;
import org.bukkit.entity.Player;
import java.lang.annotation.Annotation;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;
import java.util.function.BiFunction;
@ -76,7 +72,7 @@ public class SWCommandUtils {
if (s.length() < 1) {
return Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList());
}
List<SteamwarUser> steamwarUsers = SteamwarUser.startsWithName(s);
List<SteamwarUser> steamwarUsers = SteamwarUser.getByPrefix(s);
return steamwarUsers.stream().map(SteamwarUser::getUserName).limit(40).collect(Collectors.toList());
}));
MAPPER_FUNCTIONS.put(SchematicNode.class.getTypeName(), new TypeMapper<SchematicNode>() {

Datei anzeigen

@ -26,6 +26,7 @@ import org.bukkit.entity.Player;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.stream.Collectors;
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Du und deine Import-Sauberkeit ;).

Du und deine Import-Sauberkeit ;).
public class SteamwarUser {
@ -37,12 +38,14 @@ public class SteamwarUser {
private static final Map<UUID, SteamwarUser> byUUID = new HashMap<>();
private static final Map<String, SteamwarUser> byName = new HashMap<>();
private static final Map<Integer, SteamwarUser> byId = new HashMap<>();
private static final Map<String, List<SteamwarUser>> byPrefix = new HashMap<>();
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Wie häufig wird byPrefix ausgeführt? Je nachdem (wenn das nur selten (auf ausdrückliche Useraktion/Befehl) hin passiert, sollten wir das nicht cachen.

Zudem: Wird das auch schon mit 1 Buchstaben ausgeführt? Das wäre extrem ungeil, weil wir dann mehr oder weniger auf einmal 1/26 von derzeit 8000+ Usern laden (in etwa, oder wenn . oder % eingegeben werden, alle). Und das halten wir dann im RAM.

Wie häufig wird byPrefix ausgeführt? Je nachdem (wenn das nur selten (auf ausdrückliche Useraktion/Befehl) hin passiert, sollten wir das nicht cachen. Zudem: Wird das auch schon mit 1 Buchstaben ausgeführt? Das wäre extrem ungeil, weil wir dann mehr oder weniger auf einmal 1/26 von derzeit 8000+ Usern laden (in etwa, oder wenn . oder % eingegeben werden, alle). Und das halten wir dann im RAM.
Veraltet
Review

Stimme ich zu und siehe unten.

Stimme ich zu und siehe unten.
static{
Bukkit.getScheduler().runTaskTimer(Core.getInstance(), () -> {
byId.clear();
byName.clear();
byUUID.clear();
byPrefix.clear();
}, 72000, 72000);
}
@ -94,14 +97,26 @@ public class SteamwarUser {
return bedrock;
}
public static List<SteamwarUser> startsWithName(String userName){
return startWithName.select(rs -> {
List<SteamwarUser> steamwarUsers = new ArrayList<>();
while (rs.next()) {
steamwarUsers.add(new SteamwarUser(rs));
}
return steamwarUsers;
}, userName.toLowerCase() + "%");
public static List<SteamwarUser> getByPrefix(String userName){
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Bitte hier unbedingt ausgibige Filterung (., %, zu kurze userNames) einbauen, damit unsere DB nicht so extensiv gequeriet wird.

Falls du diese Funktion für Tab-Completion einbaust: Generell bei Tab-Completion nur die User anbieten, die derzeit auf dem selben Server sind. Der Rest wird deutlich seltener gebraucht und würde nur die Datenbank (und Userverbindung) zuspammen. Wir würden auch dadurch einem User verraten, welche User alles schon mal bei uns waren (und welche nicht).

Bitte hier unbedingt ausgibige Filterung (., %, zu kurze userNames) einbauen, damit unsere DB nicht so extensiv gequeriet wird. Falls du diese Funktion für Tab-Completion einbaust: Generell bei Tab-Completion nur die User anbieten, die derzeit auf dem selben Server sind. Der Rest wird deutlich seltener gebraucht und würde nur die Datenbank (und Userverbindung) zuspammen. Wir würden auch dadurch einem User verraten, welche User alles schon mal bei uns waren (und welche nicht).
Veraltet
Review

Wie unten schon gesagt, würde ich ganz gerne alle User die gerade auf dem Bungee sind tabCompleten und nicht nur die die auf dem Server selber sind, dafür gibt es Player.

Wie unten schon gesagt, würde ich ganz gerne alle User die gerade auf dem Bungee sind tabCompleten und nicht nur die die auf dem Server selber sind, dafür gibt es Player.
if (userName.length() < 2) {
return new ArrayList<>();
}
List<SteamwarUser> users = byPrefix.get(userName.toLowerCase().substring(0, 1));
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Warum nur nach dem ersten Buchstaben suchen?

Warum nur nach dem ersten Buchstaben suchen?
if (users == null) {
users = startWithName.select(rs -> {
List<SteamwarUser> steamwarUsers = new ArrayList<>();
while (rs.next()) {
String name = rs.getString("UserName");
if (byName.containsKey(name)) {
steamwarUsers.add(byName.get(name));
} else {
steamwarUsers.add(new SteamwarUser(rs));
}
}
return steamwarUsers;
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Wenn das nur der erste Buchstabe ist, ist das dann bei längeren anderen Suchqueries nicht falsch, da zunächst nur mit längerem Suchquery geladen wird?

Wenn das nur der erste Buchstabe ist, ist das dann bei längeren anderen Suchqueries nicht falsch, da zunächst nur mit längerem Suchquery geladen wird?
Veraltet
Review

Ich mache danach noch ein sort darauf selber, deswegen immer nur den ersten. Ich würde gerne nur die die gerade Online sind nehmen, aber wie komme ich an ALLE die auf dem Bungee sind vom Server aus?

Ich mache danach noch ein sort darauf selber, deswegen immer nur den ersten. Ich würde gerne nur die die gerade Online sind nehmen, aber wie komme ich an ALLE die auf dem Bungee sind vom Server aus?
Veraltet
Review

Gar nicht, deshalb Limitation auf die, die mit auf dem selben Spigotserver sind (du dürftest auf dem Spigot ja auch nur Befehle haben, welche sich nur auf Leute auf dem selben Spigot beziehen - daher würde das meiner Meinung nach ausreichen)

Gar nicht, deshalb Limitation auf die, die mit auf dem selben Spigotserver sind (du dürftest auf dem Spigot ja auch nur Befehle haben, welche sich nur auf Leute auf dem selben Spigot beziehen - daher würde das meiner Meinung nach ausreichen)
}, userName.toLowerCase() + "%");
}
return users.stream().filter(user -> user.getUserName().toLowerCase().startsWith(userName.toLowerCase())).collect(Collectors.toList());
}
public static SteamwarUser get(String userName){