Arena Merging 2.0 #329
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
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
Lixfel
hat
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;
|
||||
|
@ -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){
|
||||
|
@ -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) -> {
|
||||
Lixfel
hat
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);
|
||||
|
@ -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
Lixfel
hat
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)) {
|
||||
Lixfel
hat
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
Lixfel
hat
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
Lixfel
hat
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);
|
||||
Lixfel
hat
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
Lixfel
hat
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
Lixfel
hat
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());
|
||||
|
@ -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());
|
||||
|
@ -595,3 +595,4 @@ FIGHT_MERGE_DECLINE=Neue Arena starten
|
||||
FIGHT_MERGE_ACCEPT=Fight beitreten
|
||||
FIGHT_MERGE_INFO_LORE_1=§7Von: §e{0}
|
||||
Lixfel
hat
Kampf Kampf
|
||||
FIGHT_MERGE_OFFLINE=Der Server dem du beitreten wolltest ist nicht mehr online
|
||||
Lixfel
hat
§8: §8:
|
||||
FIGHT_MERGE_INFO=§e{0}§7: §e{1}
|
||||
Lixfel markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
§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.
|
Ich weiß nicht, was du hier mit dem ranked-Check machen willst?
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.