Merge pull request 'Deploy arena command' (#479) from deployarena into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #479 Reviewed-by: Chaoscaot <chaoscaot@zohomail.eu>
Dieser Commit ist enthalten in:
Commit
8c03d2a348
85
deployarena.py
Ausführbare Datei
85
deployarena.py
Ausführbare Datei
@ -0,0 +1,85 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import datetime
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import sys
|
||||||
|
import tarfile
|
||||||
|
from os import path
|
||||||
|
|
||||||
|
# Non stdlib
|
||||||
|
import yaml
|
||||||
|
from nbt import nbt
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
configfile = f'/configs/GameModes/{sys.argv[1]}'
|
||||||
|
version = int(sys.argv[2])
|
||||||
|
worldname = sys.argv[3]
|
||||||
|
|
||||||
|
with open(configfile, 'r') as file:
|
||||||
|
gamemode = yaml.load(configfile, Loader=yaml.CLoader)
|
||||||
|
|
||||||
|
builderworld = path.expanduser(f'~/builder{version}/{worldname}')
|
||||||
|
arenaworld = f'/servers/{gamemode["Server"]["Folder"]}/arenas/{worldname}'
|
||||||
|
|
||||||
|
if path.exists(arenaworld):
|
||||||
|
backupworld = path.expanduser(f'~/backup/arenas/{datetime.datetime.now()}-{worldname}-{version}.tar.xz')
|
||||||
|
with tarfile.open(backupworld, 'w:xz') as tar:
|
||||||
|
tar.add(arenaworld, arcname=worldname)
|
||||||
|
|
||||||
|
shutil.rmtree(arenaworld)
|
||||||
|
else:
|
||||||
|
gamemode['Server']['Maps'].append(worldname)
|
||||||
|
|
||||||
|
with open(configfile, 'w') as file:
|
||||||
|
yaml.dump(gamemode, file)
|
||||||
|
|
||||||
|
|
||||||
|
level = nbt.NBTFile(f'{builderworld}/level.dat')
|
||||||
|
level['Data']['Difficulty'] = nbt.TAG_Byte(2)
|
||||||
|
gameRules = level['Data']['GameRules']
|
||||||
|
gameRules['announceAdvancements'] = nbt.TAG_String('false')
|
||||||
|
gameRules['disableRaids'] = nbt.TAG_String('true')
|
||||||
|
gameRules['doDaylightCycle'] = nbt.TAG_String('false')
|
||||||
|
gameRules['doEntityDrops'] = nbt.TAG_String('false')
|
||||||
|
gameRules['doFireTick'] = nbt.TAG_String('true')
|
||||||
|
gameRules['doImmediateRespawn'] = nbt.TAG_String('true')
|
||||||
|
gameRules['doInsomnia'] = nbt.TAG_String('false')
|
||||||
|
gameRules['doLimitedCrafting'] = nbt.TAG_String('false')
|
||||||
|
gameRules['doMobLoot'] = nbt.TAG_String('false')
|
||||||
|
gameRules['doMobSpawning'] = nbt.TAG_String('false')
|
||||||
|
gameRules['doPatrolSpawning'] = nbt.TAG_String('false')
|
||||||
|
gameRules['doTileDrops'] = nbt.TAG_String('true')
|
||||||
|
gameRules['doTraderSpawning'] = nbt.TAG_String('false')
|
||||||
|
gameRules['doWardenSpawning'] = nbt.TAG_String('false')
|
||||||
|
gameRules['doWeatherCycle'] = nbt.TAG_String('false')
|
||||||
|
gameRules['drowningDamage'] = nbt.TAG_String('true')
|
||||||
|
gameRules['fallDamage'] = nbt.TAG_String('true')
|
||||||
|
gameRules['fireDamage'] = nbt.TAG_String('true')
|
||||||
|
gameRules['freezeDamage'] = nbt.TAG_String('true')
|
||||||
|
gameRules['keepInventory'] = nbt.TAG_String('true')
|
||||||
|
gameRules['lavaSourceConversion'] = nbt.TAG_String('false')
|
||||||
|
gameRules['maxEntityCramming'] = nbt.TAG_String('24')
|
||||||
|
gameRules['mobGriefing'] = nbt.TAG_String('false')
|
||||||
|
gameRules['naturalRegeneration'] = nbt.TAG_String('false')
|
||||||
|
gameRules['randomTickSpeed'] = nbt.TAG_String('3')
|
||||||
|
gameRules['reducedDebugInfo'] = nbt.TAG_String('true')
|
||||||
|
gameRules['snowAccumulationHeight'] = nbt.TAG_String('1')
|
||||||
|
gameRules['spawnRadius'] = nbt.TAG_String('0')
|
||||||
|
gameRules['spectatorsGenerateChunks'] = nbt.TAG_String('true')
|
||||||
|
gameRules['waterSourceConversion'] = nbt.TAG_String('true')
|
||||||
|
level.write_file()
|
||||||
|
|
||||||
|
if path.exists(arenaworld):
|
||||||
|
shutil.rmtree(arenaworld)
|
||||||
|
|
||||||
|
os.makedirs(f'{arenaworld}/backup')
|
||||||
|
shutil.copy2(f'{builderworld}/level.dat', f'{arenaworld}/backup/level.dat')
|
||||||
|
shutil.copytree(f'{builderworld}/region', f'{arenaworld}/backup/region')
|
||||||
|
|
||||||
|
shutil.copy2(f'{builderworld}/level.dat', f'{arenaworld}/level.dat')
|
||||||
|
shutil.copytree(f'{builderworld}/region', f'{arenaworld}/region')
|
||||||
|
shutil.copy2(f'{builderworld}/config.yml', f'{arenaworld}/config.yml')
|
||||||
|
|
||||||
|
if path.exists(f'{builderworld}/paper-world.yml'):
|
||||||
|
shutil.copy2(f'{builderworld}/paper-world.yml', f'{arenaworld}/backup/paper-world.yml')
|
||||||
|
shutil.copy2(f'{builderworld}/paper-world.yml', f'{arenaworld}/paper-world.yml')
|
@ -32,13 +32,23 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
public class ArenaMode {
|
public class ArenaMode {
|
||||||
|
|
||||||
|
private static final Random random = new Random();
|
||||||
|
|
||||||
private static final Map<String, ArenaMode> byChat = new HashMap<>();
|
private static final Map<String, ArenaMode> byChat = new HashMap<>();
|
||||||
private static final Map<String, ArenaMode> byInternal = new HashMap<>();
|
private static final Map<String, ArenaMode> byInternal = new HashMap<>();
|
||||||
private static final Map<SchematicType, ArenaMode> bySchemType = new HashMap<>();
|
private static final Map<SchematicType, ArenaMode> bySchemType = new HashMap<>();
|
||||||
private static final List<ArenaMode> allModes = new LinkedList<>();
|
private static final List<ArenaMode> allModes = new LinkedList<>();
|
||||||
private static final Random random = new Random();
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void init() {
|
||||||
|
byChat.clear();
|
||||||
|
byInternal.clear();
|
||||||
|
bySchemType.clear();
|
||||||
|
allModes.clear();
|
||||||
|
|
||||||
File folder = new File(ProxyServer.getInstance().getPluginsFolder(), "FightSystem");
|
File folder = new File(ProxyServer.getInstance().getPluginsFolder(), "FightSystem");
|
||||||
|
|
||||||
for(File configFile : Arrays.stream(folder.listFiles((file, name) -> name.endsWith(".yml") && !name.endsWith(".kits.yml"))).sorted().collect(Collectors.toList())) {
|
for(File configFile : Arrays.stream(folder.listFiles((file, name) -> name.endsWith(".yml") && !name.endsWith(".kits.yml"))).sorted().collect(Collectors.toList())) {
|
||||||
|
@ -352,6 +352,10 @@ public class ServerStarter {
|
|||||||
return serverJar;
|
return serverJar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getVersionSuffix() {
|
||||||
|
return versionSuffix;
|
||||||
|
}
|
||||||
|
|
||||||
public String getWorldFolder(String base) {
|
public String getWorldFolder(String base) {
|
||||||
return base + versionSuffix + "/";
|
return base + versionSuffix + "/";
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package de.steamwar.bungeecore.commands;
|
package de.steamwar.bungeecore.commands;
|
||||||
|
|
||||||
|
import de.steamwar.bungeecore.ArenaMode;
|
||||||
|
import de.steamwar.bungeecore.BungeeCore;
|
||||||
import de.steamwar.bungeecore.ServerStarter;
|
import de.steamwar.bungeecore.ServerStarter;
|
||||||
import de.steamwar.command.SWCommand;
|
import de.steamwar.command.SWCommand;
|
||||||
import de.steamwar.command.TypeMapper;
|
import de.steamwar.command.TypeMapper;
|
||||||
@ -70,6 +72,17 @@ public class BuilderCloudCommand extends SWCommand {
|
|||||||
ChatSender.of(player).system("BUILDERCLOUD_RENAMED");
|
ChatSender.of(player).system("BUILDERCLOUD_RENAMED");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Register(value = "deploy", description = "BUILDERCLOUD_DEPLOY_USAGE")
|
||||||
|
public void deploy(ProxiedPlayer player, @Mapper("nonHistoricArenaMode") ArenaMode arenaMode, @ErrorMessage("BUILDERCLOUD_VERSION") ServerStarter.Version version, @Mapper("map") String map) {
|
||||||
|
if(!mapFile(version, map).exists()) {
|
||||||
|
ChatSender.of(player).system("BUILDERCLOUD_UNKNOWN_MAP");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BungeeCore.local.execute("/binaries/deployarena.py", arenaMode.getConfig(), Integer.toString(version.getVersionSuffix()), map);
|
||||||
|
ArenaMode.init();
|
||||||
|
}
|
||||||
|
|
||||||
@ClassMapper(value = ServerStarter.Version.class, local = true)
|
@ClassMapper(value = ServerStarter.Version.class, local = true)
|
||||||
private TypeMapper<ServerStarter.Version> versionTypeMapper() {
|
private TypeMapper<ServerStarter.Version> versionTypeMapper() {
|
||||||
return new TypeMapper<ServerStarter.Version>() {
|
return new TypeMapper<ServerStarter.Version>() {
|
||||||
|
@ -662,6 +662,7 @@ LOCK_LOCALE_CHANGED=§aLanguage saved
|
|||||||
BUILDERCLOUD_USAGE=§8/§7buildercloud §8[§eversion§8] §8[§emap§8]
|
BUILDERCLOUD_USAGE=§8/§7buildercloud §8[§eversion§8] §8[§emap§8]
|
||||||
BUILDERCLOUD_CREATE_USAGE=§8/§7buildercloud create §8[§eversion§8] §8[§emap§8] §8<§7generator§8>
|
BUILDERCLOUD_CREATE_USAGE=§8/§7buildercloud create §8[§eversion§8] §8[§emap§8] §8<§7generator§8>
|
||||||
BUILDERCLOUD_RENAME_USAGE=§8/§7buildercloud rename §8[§eversion§8] §8[§emap§8] §8[§enew name§8]
|
BUILDERCLOUD_RENAME_USAGE=§8/§7buildercloud rename §8[§eversion§8] §8[§emap§8] §8[§enew name§8]
|
||||||
|
BUILDERCLOUD_DEPLOY_USAGE=§8/§7deployarena §8[§egamemode§8] §8[§eversion§8] §8[§emap§8]
|
||||||
BUILDERCLOUD_VERSION=§cUnknown version.
|
BUILDERCLOUD_VERSION=§cUnknown version.
|
||||||
BUILDERCLOUD_EXISTING_MAP=§cMap already exists.
|
BUILDERCLOUD_EXISTING_MAP=§cMap already exists.
|
||||||
BUILDERCLOUD_UNKNOWN_MAP=§cUnknown map.
|
BUILDERCLOUD_UNKNOWN_MAP=§cUnknown map.
|
||||||
|
@ -4,3 +4,4 @@ build:
|
|||||||
|
|
||||||
artifacts:
|
artifacts:
|
||||||
"/binarys/bungeecore.jar": "build/libs/bungeecore.jar"
|
"/binarys/bungeecore.jar": "build/libs/bungeecore.jar"
|
||||||
|
"/binarys/deployarena.py": "deployarena.py"
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren