SteamWar/BungeeCore
Archiviert
13
2

Arena Merging 2.0 #329

Zusammengeführt
Lixfel hat 12 Commits von arena_merging_2.0 nach master 2022-05-01 22:45:03 +02:00 zusammengeführt
7 geänderte Dateien mit 25 neuen und 16 gelöschten Zeilen
Nur Änderungen aus Commit fa8c1c9004 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -95,11 +95,13 @@ public class ArenaMode {
private final String config;
private final List<String> maps;
private final boolean historic;
private final String internalName;
private final boolean ranked;
private final String schemType;
private ArenaMode(String internalName, Configuration config){
this.internalName = internalName;
this.folder = config.getString("Server.Folder");
this.serverJar = config.getString("Server.ServerJar");
this.config = internalName + ".yml";
@ -172,4 +174,8 @@ public class ArenaMode {
public String getSchemType() {
return schemType;
}
public String getInternalName() {
return internalName;
}
}

Datei anzeigen

@ -51,7 +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);
constructor = (serverName, port, builder, shutdownCallback) -> new Arenaserver(serverName, mode.getInternalName(), map, true, port, builder, shutdownCallback);
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Ich weiß nicht, was du hier mit dem ranked-Check machen willst?

Ich weiß nicht, was du hier mit dem ranked-Check machen willst?
Veraltet
Review

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.

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.
tempWorld(SERVER_PATH + mode.getFolder() + "/arenas/" + map);
return this;
}
@ -62,7 +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);
constructor = (serverName, port, builder, shutdownCallback) -> new Arenaserver(serverName, eventFight.getSpielmodus().getInternalName(), eventFight.getMap(), false, port, builder, shutdownCallback);
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Warum gehst du über den DisplayName und nicht über den internal Name (der unique ist)?

Warum gehst du über den DisplayName und nicht über den internal Name (der unique ist)?
String serverName = Team.get(eventFight.getTeamBlue()).getTeamKuerzel() + " vs " + Team.get(eventFight.getTeamRed()).getTeamKuerzel();
serverNameProvider = port -> serverName;

Datei anzeigen

@ -261,7 +261,7 @@ public class BauCommand extends BasicCommand {
}
private static void testarena(ProxiedPlayer p, String[] args){
FightCommand.createArena(p, "/bau testarena ", args, 1, false, (player, mode, map) -> ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.get(), () -> new ServerStarter().test(mode, map, p).start()));
FightCommand.createArena(p, "/bau testarena ", false, args, 1, false, (player, mode, map) -> ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.get(), () -> new ServerStarter().test(mode, map, p).start()));
}
private static BauweltMember member(ProxiedPlayer p, SteamwarUser member){

Datei anzeigen

@ -71,7 +71,7 @@ public class ChallengeCommand extends BasicCommand {
return;
}
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) -> {
Veraltet
Review

Bei einer Herausforderung gezielt eines Spielers sollte meiner Meinung nach kein Arenamerging stattfinden.

Bei einer Herausforderung gezielt eines Spielers sollte meiner Meinung nach kein Arenamerging stattfinden.
if(challenges.containsKey(target) && challenges.get(target).contains(player)){
challenges.remove(target);
challenges.remove(player);

Datei anzeigen

@ -125,7 +125,7 @@ public class FightCommand extends BasicCommand {
return false;
}
static void createArena(CommandSender sender, String precommand, String[] args, int startArg, boolean historic, FightCallback callback){
static void createArena(CommandSender sender, String precommand, boolean allowMerging, String[] args, int startArg, boolean historic, FightCallback callback){
if(!(sender instanceof ProxiedPlayer))
return;
@ -160,7 +160,7 @@ public class FightCommand extends BasicCommand {
if(map == null)
return;
if(precommand.equals("/bau testarena ") || precommand.startsWith("/challenge ")) {
if(!allowMerging) {
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

So zu filtern ist definitiv unschön, bitte anders lösen. (ggf. mit Methodenargument)

So zu filtern ist definitiv unschön, bitte anders lösen. (ggf. mit Methodenargument)
callback.run(player, mode, map);
} else if(suggestMerging(player, mode, map, callback)) {
Veraltet
Review

else if-Block ist der gleiche wie der if block => Verodern!

else if-Block ist der gleiche wie der if block => Verodern!
callback.run(player, mode, map);
@ -169,12 +169,14 @@ public class FightCommand extends BasicCommand {
public static boolean suggestMerging(ProxiedPlayer player, ArenaMode mode, String map, FightCallback declineMerge) {
Arenaserver mergable = null;
for (Subserver subserver : Subserver.getServerList()) {
if(subserver instanceof Arenaserver) {
Arenaserver arenaserver = (Arenaserver) subserver;
if(mode.getDisplayName().equals(arenaserver.getMode()) && map.equals(arenaserver.getMap()) && arenaserver.isAllowMerge() && arenaserver.getServer().getPlayers().size() == 1) {
mergable = arenaserver;
break;
synchronized (Subserver.getServerList()) {
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Bitte mal an andere Stellen schauen, aber ich glaube, hier fehlt ein synchronized

Bitte mal an andere Stellen schauen, aber ich glaube, hier fehlt ein synchronized
for (Subserver subserver : Subserver.getServerList()) {
if(subserver instanceof Arenaserver) {
Arenaserver arenaserver = (Arenaserver) subserver;
if(mode.getInternalName().equals(arenaserver.getMode()) && map.equals(arenaserver.getMap()) && arenaserver.isAllowMerge() && arenaserver.getServer().getPlayers().size() == 1) {
mergable = arenaserver;
break;
}
}
}
}
@ -186,11 +188,11 @@ public class FightCommand extends BasicCommand {
declineMerge.run(player, mode, map);
});
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

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.

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.
Arenaserver finalMergable = mergable;
SWItem item = new SWItem("§e" + ArenaMode.getByInternal(finalMergable.getMode()).getDisplayName() + "§7: §e" + finalMergable.getMap().toUpperCase(), 11);
SWItem item = new SWItem(Message.parse("FIGHT_MERGE_INFO", player, mode.getDisplayName(), finalMergable.getMap()), 11);
Veraltet
Review

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.

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.
item.addLore(Message.parse("FIGHT_MERGE_INFO_LORE_1", player, finalMergable.getServer().getPlayers().stream().map(ProxiedPlayer::getDisplayName).reduce((player1, player2) -> player1 + ", " + player2).orElse("Error?")));
Lixfel markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Error? Hackts? Dann werf wenn schon einen richtigen Fehler!

Error? Hackts? Dann werf wenn schon einen richtigen Fehler!
inventory.addItem(4, item, click -> {});
Chaoscaot markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

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

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
inventory.addItem(8, new SWItem(Message.parse("FIGHT_MERGE_ACCEPT", player), 10), click -> {
if(BungeeCore.get().getProxy().getServerInfo(finalMergable.getServer().getName()) != null) {
if(Subserver.getServerList().contains(finalMergable)) {
finalMergable.sendPlayer(player);
} else {
Message.send("FIGHT_MERGE_OFFLINE", player);
@ -205,7 +207,7 @@ public class FightCommand extends BasicCommand {
@Override
public void execute(CommandSender sender, String[] args) {
createArena(sender, "/fight ", args, 0, false, (player, mode, map) -> {
createArena(sender, "/fight ", true, args, 0, false, (player, mode, map) -> {
Subserver arena = new ServerStarter().arena(mode, map).blueLeader(player).start();
Message.broadcast("FIGHT_BROADCAST", "FIGHT_BROADCAST_HOVER"
, new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/arena " + arena.getServer().getName()), mode.getDisplayName(), player.getName());

Datei anzeigen

@ -32,7 +32,7 @@ public class HistoricCommand extends BasicCommand {
@Override
public void execute(CommandSender sender, String[] args) {
FightCommand.createArena(sender, "/historic ", args, 0, true, (player, mode, map) -> {
FightCommand.createArena(sender, "/historic ", true, args, 0, true, (player, mode, map) -> {
Subserver arena = new ServerStarter().arena(mode, map).blueLeader(player).start();
Message.broadcast("HISTORIC_BROADCAST", "HISTORIC_BROADCAST_HOVER"
, new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/arena " + arena.getServer().getName()), mode.getDisplayName(), player.getName());

Datei anzeigen

@ -595,3 +595,4 @@ FIGHT_MERGE_DECLINE=Neue Arena starten
FIGHT_MERGE_ACCEPT=Fight beitreten
FIGHT_MERGE_INFO_LORE_1=§7Von: §e{0}
Veraltet
Review

Kampf

Kampf
FIGHT_MERGE_OFFLINE=Der Server dem du beitreten wolltest ist nicht mehr online
Veraltet
Review

§8:

§8:
FIGHT_MERGE_INFO=§e{0}§7: §e{1}
Lixfel markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

§7Die vorgeschlagene Arena wurde in der Zwischenzeit beendet, es wird eine neue Arena gestartet.

§7Die vorgeschlagene Arena wurde in der Zwischenzeit beendet, es wird eine neue Arena gestartet.