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 75 neuen und 7 gelöschten Zeilen

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

@ -37,10 +37,13 @@ public class ServerStarter {
private Portrange portrange = BAU_PORTS;
private Function<Integer, String> serverNameProvider = port -> node.getName() + port;
private BooleanSupplier startCondition = () -> true;
private ServerConstructor constructor = (serverName, port, builder, shutdownCallback) -> new Subserver(Servertype.ARENA, serverName, port, builder, shutdownCallback);
private Runnable worldSetup = () -> {};
private String worldName = null;
private Runnable worldCleanup = () -> {};
private boolean allowMerge = false;
private String fightMap = null;
private String gameMode = null;
private ServerConstructor constructor = (serverName, port, builder, shutdownCallback) -> new Arenaserver(serverName, gameMode, fightMap, allowMerge, port, builder, shutdownCallback);
Veraltet
Review

Du hast allowMerge bereits im Objekt, allowMerge ist nicht Startablaufdynamisch, daher bitte aus dem Interface raushalten! (also kein allowMerge im Interface als parameter)

Du hast allowMerge bereits im Objekt, allowMerge ist nicht Startablaufdynamisch, daher bitte aus dem Interface raushalten! (also kein allowMerge im Interface als parameter)
private final Set<ProxiedPlayer> playersToSend = new HashSet<>();
private final Map<String, String> arguments = new HashMap<>();
@ -49,6 +52,9 @@ public class ServerStarter {
portrange = ARENA_PORTS;
serverNameProvider = port -> mode.getDisplayName() + (port - portrange.start);
serverJar = mode.serverJar();
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.
allowMerge = true;
fightMap = map;
gameMode = mode.getInternalName();
directory = new File(SERVER_PATH, mode.getFolder());
arguments.put("config", mode.getConfig());
tempWorld(SERVER_PATH + mode.getFolder() + "/arenas/" + map);
@ -61,6 +67,8 @@ public class ServerStarter {
worldDir = EVENT_PATH;
worldCleanup = () -> {};
arguments.put("fightID", String.valueOf(eventFight.getFightID()));
fightMap = eventFight.getMap();
gameMode = eventFight.getSpielmodus().getInternalName();
String serverName = Team.get(eventFight.getTeamBlue()).getTeamKuerzel() + " vs " + Team.get(eventFight.getTeamRed()).getTeamKuerzel();
serverNameProvider = port -> serverName;

Datei anzeigen

@ -262,7 +262,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() + " ", false, 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

@ -20,6 +20,8 @@
package de.steamwar.bungeecore.commands;
import de.steamwar.bungeecore.*;
import de.steamwar.bungeecore.inventory.SWInventory;
import de.steamwar.bungeecore.inventory.SWItem;
import de.steamwar.bungeecore.listeners.mods.ModLoaderBlocker;
import de.steamwar.bungeecore.sql.Punishment;
import de.steamwar.messages.ChatSender;
@ -42,6 +44,7 @@ import java.util.LinkedList;
* Sollte der ArenaMode fehlen, kann er mit getMode() bestimmt werden.
* Sollte die Map fehlen, kann sie mit getMap() bestimmt werden.
*/
public class FightCommand extends BasicCommand {
public FightCommand() {
@ -126,7 +129,7 @@ public class FightCommand extends BasicCommand {
return false;
}
static void createArena(CommandSender s, String precommand, String[] args, int startArg, boolean historic, FightCallback callback){
static void createArena(CommandSender s, String precommand, boolean allowMerging, String[] args, int startArg, boolean historic, FightCallback callback){
if(!(s instanceof ProxiedPlayer))
return;
@ -167,12 +170,55 @@ public class FightCommand extends BasicCommand {
if(map == null)
return;
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
callback.run(player, mode, map);
if(!allowMerging) {
callback.run(player, mode, map);
} else {
suggestMerging(player, mode, map, callback);
}
}
public static void suggestMerging(ProxiedPlayer player, ArenaMode mode, String map, FightCallback declineMerge) {
Arenaserver mergable = null;
synchronized (Subserver.getServerList()) {
for (Subserver subserver : Subserver.getServerList()) {
if(subserver instanceof Arenaserver) {
Veraltet
Review

Hier evtl. stattdessen if mergable == null return true machen? Macht den Rest einfacher lesbar.

Hier evtl. stattdessen if mergable == null return true machen? Macht den Rest einfacher lesbar.
Arenaserver arenaserver = (Arenaserver) subserver;
if(mode.getInternalName().equals(arenaserver.getMode()) && map.equals(arenaserver.getMap()) && arenaserver.isAllowMerge() && arenaserver.getServer().getPlayers().size() == 1) {
mergable = arenaserver;
break;
}
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.
}
}
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.
}
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!
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
if(mergable == null) {
declineMerge.run(player, mode, map);
return;
}
SWInventory inventory = new SWInventory(player, 9, Message.parse("FIGHT_MERGE_TITLE", player));
inventory.addItem(0, new SWItem(Message.parse("FIGHT_MERGE_DECLINE", player), 1), click -> {
inventory.close();
declineMerge.run(player, mode, map);
});
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().toArray(new ProxiedPlayer[1])[0].getName()));
inventory.addItem(4, item, click -> {});
inventory.addItem(8, new SWItem(Message.parse("FIGHT_MERGE_ACCEPT", player), 10), click -> {
if(Subserver.getServerList().contains(finalMergable)) {
finalMergable.sendPlayer(player);
} else {
Message.send("FIGHT_MERGE_OFFLINE", player);
declineMerge.run(player, mode, map);
}
});
inventory.open();
}
@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

@ -35,7 +35,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

@ -602,3 +602,11 @@ RANK_NEEDED_FIGHTS_LEFT={0} §8(§7noch §e{1}§7 Kämpfe nötig§8)
MODIFICATION_BAN_MESSAGE=Du hast probiert den FabricModSender zu umgehen / zu modifizieren!
MODIFICATION_BAN_LOG={0} hat probiert den Fabric Mod Sender zu editieren / umzugehen!
MODIFICATION_CHECK_SUCCESS=§eDeine Mods wurden geprüft und du darfst nun auf Arenen joinen!
#Arena Merging
FIGHT_MERGE_TITLE=Gleicher Kampf gefunden!
FIGHT_MERGE_DECLINE=Neue Arena starten
FIGHT_MERGE_ACCEPT=Kampf beitreten
FIGHT_MERGE_INFO_LORE_1=§8Von: §e{0}
FIGHT_MERGE_OFFLINE=§7Die vorgeschlagene Arena wurde in der Zwischenzeit beendet, es wird eine neue Arena gestartet.
FIGHT_MERGE_INFO=§e{0}§8: §e{1}