Arena Merging 2.0 #329
Keine Reviewer
Label
Kein Label
Bug
Codeverbesserung
Einsteiger Freundlich
Idee
In Arbeit
Neues Feature
Prio A
Security Breach
Überprüfung notwendig
Verbesserung
Zu Beobachten
Kein Meilenstein
Niemand zuständig
2 Beteiligte
Fällig am
Kein Fälligkeitsdatum gesetzt.
Abhängigkeiten
Keine Abhängigkeiten gesetzt.
Referenz: SteamWar/BungeeCore#329
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren
Keine Beschreibung angegeben.
Branch "arena_merging_2.0" löschen
Das Löschen eines Branches ist permanent. Obwohl der Branch für eine kurze Zeit weiter existieren könnte, kann diese Aktion in den meisten Fällen NICHT rückgängig gemacht werden. Fortfahren?
WIP: Arena Merging 2.0zu Arena Merging 2.0@ -51,6 +51,7 @@ public class ServerStarter {
serverJar = mode.serverJar();
directory = new File(SERVER_PATH, mode.getFolder());
arguments.put("config", mode.getConfig());
constructor = (serverName, port, builder, shutdownCallback) -> new Arenaserver(serverName, mode.getDisplayName(), map, !mode.isRanked(), port, builder, shutdownCallback);
Ich weiß nicht, was du hier mit dem ranked-Check machen willst?
@ -61,6 +62,7 @@ public class ServerStarter {
worldDir = EVENT_PATH;
worldCleanup = () -> {};
arguments.put("fightID", String.valueOf(eventFight.getFightID()));
constructor = (serverName, port, builder, shutdownCallback) -> new Arenaserver(serverName, eventFight.getSpielmodus().getDisplayName(), eventFight.getMap(), false, port, builder, shutdownCallback);
Warum gehst du über den DisplayName und nicht über den internal Name (der unique ist)?
@ -159,3 +161,3 @@
return;
callback.run(player, mode, map);
if(precommand.equals("/bau testarena ") || precommand.startsWith("/challenge ")) {
So zu filtern ist definitiv unschön, bitte anders lösen. (ggf. mit Methodenargument)
@ -162,0 +169,4 @@
public static boolean suggestMerging(ProxiedPlayer player, ArenaMode mode, String map, FightCallback declineMerge) {
Arenaserver mergable = null;
for (Subserver subserver : Subserver.getServerList()) {
Bitte mal an andere Stellen schauen, aber ich glaube, hier fehlt ein synchronized
@ -162,0 +186,4 @@
declineMerge.run(player, mode, map);
});
Arenaserver finalMergable = mergable;
SWItem item = new SWItem("§e" + ArenaMode.getByInternal(finalMergable.getMode()).getDisplayName() + "§7: §e" + finalMergable.getMap().toUpperCase(), 11);
Bitte durchgängig Message-System verwenden. Hier verwendest du übrigens den internalMode (nicht nötig, du hast ja schon mode. Bitte nicht die Map zu Uppercase casten.
@ -162,0 +190,4 @@
item.addLore(Message.parse("FIGHT_MERGE_INFO_LORE_1", player, finalMergable.getServer().getPlayers().stream().map(ProxiedPlayer::getDisplayName).reduce((player1, player2) -> player1 + ", " + player2).orElse("Error?")));
inventory.addItem(4, item, click -> {});
inventory.addItem(8, new SWItem(Message.parse("FIGHT_MERGE_ACCEPT", player), 10), click -> {
if(BungeeCore.get().getProxy().getServerInfo(finalMergable.getServer().getName()) != null) {
Das wirkt mir nach einem sehr merkwürdigen Check, ob der Server noch online ist. Entweder wir haben dafür eine Funktion im Subserver oder du machst das über Spieler == 0
@ -51,6 +51,7 @@ public class ServerStarter {
serverJar = mode.serverJar();
directory = new File(SERVER_PATH, mode.getFolder());
arguments.put("config", mode.getConfig());
constructor = (serverName, port, builder, shutdownCallback) -> new Arenaserver(serverName, mode.getInternalName(), map, true, port, builder, shutdownCallback);
Dies würde ich zum Default machen, und den boolean, ob merging erlaubt sein soll, in einen Boolean des ServerStarters auslagern, dann kannst du den einfacher/besser togglen. Und dann gibt es keine Instanz des Raw-Subservers mehr.
@ -72,3 +72,3 @@
}
FightCommand.createArena(sender, "/challenge " + target.getName() + " ", args, 1, false, (player, mode, map) -> {
FightCommand.createArena(sender, "/challenge " + target.getName() + " ", true, args, 1, false, (player, mode, map) -> {
Bei einer Herausforderung gezielt eines Spielers sollte meiner Meinung nach kein Arenamerging stattfinden.
@ -161,1 +163,3 @@
callback.run(player, mode, map);
if(!allowMerging) {
callback.run(player, mode, map);
} else if(suggestMerging(player, mode, map, callback)) {
else if-Block ist der gleiche wie der if block => Verodern!
@ -162,0 +181,4 @@
}
}
if(mergable != null) {
Hier evtl. stattdessen if mergable == null return true machen? Macht den Rest einfacher lesbar.
@ -162,0 +189,4 @@
});
Arenaserver finalMergable = mergable;
SWItem item = new SWItem(Message.parse("FIGHT_MERGE_INFO", player, mode.getDisplayName(), finalMergable.getMap()), 11);
item.addLore(Message.parse("FIGHT_MERGE_INFO_LORE_1", player, finalMergable.getServer().getPlayers().stream().map(ProxiedPlayer::getDisplayName).reduce((player1, player2) -> player1 + ", " + player2).orElse("Error?")));
Error? Hackts? Dann werf wenn schon einen richtigen Fehler!
@ -591,1 +591,4 @@
MODIFICATION_CHECK_SUCCESS=§eDeine Mods wurden geprüft und du darfst nun auf Arenen joinen!
#Arena Merging
FIGHT_MERGE_TITLE=Gleicher Fight gefunden!
Kampf
@ -592,0 +593,4 @@
#Arena Merging
FIGHT_MERGE_TITLE=Gleicher Fight gefunden!
FIGHT_MERGE_DECLINE=Neue Arena starten
FIGHT_MERGE_ACCEPT=Fight beitreten
Kampf
@ -592,0 +594,4 @@
FIGHT_MERGE_TITLE=Gleicher Fight gefunden!
FIGHT_MERGE_DECLINE=Neue Arena starten
FIGHT_MERGE_ACCEPT=Fight beitreten
FIGHT_MERGE_INFO_LORE_1=§7Von: §e{0}
§8:
@ -592,0 +595,4 @@
FIGHT_MERGE_DECLINE=Neue Arena starten
FIGHT_MERGE_ACCEPT=Fight beitreten
FIGHT_MERGE_INFO_LORE_1=§7Von: §e{0}
FIGHT_MERGE_OFFLINE=Der Server dem du beitreten wolltest ist nicht mehr online
§7Die vorgeschlagene Arena wurde in der Zwischenzeit beendet, es wird eine neue Arena gestartet.
@ -592,0 +596,4 @@
FIGHT_MERGE_ACCEPT=Fight beitreten
FIGHT_MERGE_INFO_LORE_1=§7Von: §e{0}
FIGHT_MERGE_OFFLINE=Der Server dem du beitreten wolltest ist nicht mehr online
FIGHT_MERGE_INFO=§e{0}§7: §e{1}
§8:
@ -44,0 +43,4 @@
private boolean allowMerge = false;
private String fightMap = null;
private String gameMode = null;
private ServerConstructor constructor = (serverName, port, allowMerge, builder, shutdownCallback) -> new Arenaserver(serverName, gameMode, fightMap, false, port, builder, shutdownCallback);
Du hast allowMerge bereits im Objekt, allowMerge ist nicht Startablaufdynamisch, daher bitte aus dem Interface raushalten! (also kein allowMerge im Interface als parameter)
@ -170,0 +188,4 @@
}
if(mergable == null) {
return true;
Mir gefällt es nicht ganz, dass die Methode sowohl durch den Returnwert als auch über declineMerge das gleiche mache n kann (wobei die Booleanrichtung auch durch den Methodennamen unklar ist). (Würde ich auch so akzeptieren, aber schöner wäre es anders).
Evtl. die createArena-Methode sofort eine Arena starten lassen, wenn merging nicht allowed ist (und returnen) und dann die suggestMerging-Methode am Ende der Methode ausführen.