diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java index 2946bc4..a6d7b18 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -402,7 +402,7 @@ public void saveProperties() { - ConfigurationHandler.saveServerConfig(); + //ConfigurationHandler.saveServerConfig(); } public String getSettingsFilename() diff --git a/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java b/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java index e1c31d4..d58bccd 100644 --- a/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java +++ b/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java @@ -93,7 +93,7 @@ private final Map field_148547_k; private IPlayerFileData playerNBTManagerObj; private boolean whiteListEnforced; - protected int maxPlayers; + public int maxPlayers; protected int viewDistance; private WorldSettings.GameType gameType; private boolean commandsAllowedForAll; diff --git a/src/main/java/org/ultramine/commands/basic/TechCommands.java b/src/main/java/org/ultramine/commands/basic/TechCommands.java index e3b6839..a82c8dc 100644 --- a/src/main/java/org/ultramine/commands/basic/TechCommands.java +++ b/src/main/java/org/ultramine/commands/basic/TechCommands.java @@ -27,9 +27,11 @@ import org.ultramine.commands.Command; import org.ultramine.commands.CommandContext; import org.ultramine.server.BackupManager; +import org.ultramine.server.ConfigurationHandler; import org.ultramine.server.MultiWorld; import org.ultramine.server.Restarter; import org.ultramine.server.Teleporter; +import org.ultramine.server.UltramineServerConfig; import org.ultramine.server.UltramineServerModContainer; import org.ultramine.server.BackupManager.BackupDescriptor; import org.ultramine.server.WorldsConfig.WorldConfig.Border; @@ -723,4 +725,22 @@ { UltramineServerModContainer.getInstance().getRecipeCache().clearCache(); } + + @SideOnly(Side.SERVER) + @Command( + name = "reloadcfg", + group = "technical", + permissions = {"command.reloadcfg"}, + syntax = {""} + ) + public static void reloadcfg(CommandContext ctx) + { + ConfigurationHandler.load(); + UltramineServerConfig cfg = ConfigurationHandler.getServerConfig(); + MinecraftServer server = ctx.getServer(); + server.func_143006_e(cfg.settings.player.playerIdleTimeout); + server.getConfigurationManager().maxPlayers = cfg.settings.player.maxPlayers; + + server.getMultiWorld().reloadServerWorlds(); + } } diff --git a/src/main/java/org/ultramine/server/MultiWorld.java b/src/main/java/org/ultramine/server/MultiWorld.java index 25c2a71..cd054c4 100644 --- a/src/main/java/org/ultramine/server/MultiWorld.java +++ b/src/main/java/org/ultramine/server/MultiWorld.java @@ -175,6 +175,34 @@ } } + @SideOnly(Side.SERVER) + public void reloadServerWorlds() + { + Map worlds = ConfigurationHandler.getWorldsConfig().worlds; + TIntSet isolatedDataDimsSet = new TIntHashSet(); + + for(Map.Entry ent : worlds.entrySet()) + { + WorldConfig conf = ent.getValue(); + if(!DimensionManager.isDimensionRegistered(conf.dimension)) + { + DimensionManager.registerDimension(conf.dimension, conf.generation.providerID); + dimToNameMap.put(conf.dimension, ent.getKey()); + } + else + { + WorldServer world = getWorldByID(conf.dimension); + if(world != null) + applyConfig(world, conf); + } + if(conf.settings.useIsolatedPlayerData) + isolatedDataDimsSet.add(conf.dimension); + dimToConfigMap.put(conf.dimension, conf); + } + + isolatedDataDims = TCollections.unmodifiableSet(isolatedDataDimsSet); + } + @SideOnly(Side.CLIENT) public void handleClientWorldsInit() { @@ -305,11 +333,7 @@ if (!server.isSinglePlayer()) world.getWorldInfo().setGameType(server.getGameType()); - world.difficultySetting = BasicTypeParser.parseDifficulty(ConfigurationHandler.getWorldsConfig().global.settings.difficulty); - world.setAllowedSpawnTypes(conf.mobSpawn.spawnMonsters, conf.mobSpawn.spawnAnimals); - world.getGameRules().setOrCreateGameRule("doDaylightCycle", Boolean.toString(conf.settings.time != WorldTime.FIXED)); - world.getGameRules().setOrCreateGameRule("doMobSpawning", Boolean.toString(conf.mobSpawn.spawnEngine != MobSpawnEngine.NONE)); - world.setConfig(conf); + applyConfig(world, conf); MinecraftForge.EVENT_BUS.post(new WorldEvent.Load(world)); @@ -322,6 +346,16 @@ } @SideOnly(Side.SERVER) + private void applyConfig(WorldServer world, WorldConfig conf) + { + world.difficultySetting = BasicTypeParser.parseDifficulty(conf.settings.difficulty); + world.setAllowedSpawnTypes(conf.mobSpawn.spawnMonsters, conf.mobSpawn.spawnAnimals); + world.getGameRules().setOrCreateGameRule("doDaylightCycle", Boolean.toString(conf.settings.time != WorldTime.FIXED)); + world.getGameRules().setOrCreateGameRule("doMobSpawning", Boolean.toString(conf.mobSpawn.spawnEngine != MobSpawnEngine.NONE)); + world.setConfig(conf); + } + + @SideOnly(Side.SERVER) public int allocTempDim() { return DimensionManager.getNextFreeDimId();