diff --git a/src/main/java/net/minecraft/world/WorldServer.java b/src/main/java/net/minecraft/world/WorldServer.java index f37363a..e91b6d7 100644 --- a/src/main/java/net/minecraft/world/WorldServer.java +++ b/src/main/java/net/minecraft/world/WorldServer.java @@ -71,6 +71,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.ultramine.server.WorldsConfig.WorldConfig; +import org.ultramine.server.WorldsConfig.WorldConfig.Settings.WorldTime; import org.ultramine.server.chunk.ChunkHash; import org.ultramine.server.chunk.PendingBlockUpdate; @@ -178,11 +179,17 @@ } this.worldInfo.incrementTotalWorldTime(this.worldInfo.getWorldTotalTime() + 1L); - - if (this.getGameRules().getGameRuleBooleanValue("doDaylightCycle")) - { - this.worldInfo.setWorldTime(this.worldInfo.getWorldTime() + 1L); - } + + WorldTime time = getConfig().settings.time; + long curTime = worldInfo.getWorldTime() % 24000; + + if(time == WorldTime.DAY && curTime > 10000) + worldInfo.setWorldTime(worldInfo.getWorldTime() - curTime + 24000 + 1000); + if(time == WorldTime.NIGHT && (curTime < 14200 || curTime > 21800)) + worldInfo.setWorldTime(worldInfo.getWorldTime() - curTime + 24000 + 14200); + + if(time != WorldTime.FIXED && getGameRules().getGameRuleBooleanValue("doDaylightCycle")) + worldInfo.setWorldTime(worldInfo.getWorldTime() + 1L); this.theProfiler.endStartSection("tickPending"); this.tickUpdates(false); @@ -848,7 +855,29 @@ protected void updateWeather() { boolean flag = this.isRaining(); - super.updateWeather(); + + switch(getConfig().settings.weather) + { + case NONE: + if(flag) + { + worldInfo.setRainTime(12300); + worldInfo.setThunderTime(12300); + worldInfo.setRaining(false); + worldInfo.setThundering(false); + prevRainingStrength = rainingStrength = 0F; + prevThunderingStrength = thunderingStrength = 0F; + } + break; + case THUNDER: + worldInfo.setThunderTime(12300); + worldInfo.setThundering(true); + case RAIN: + worldInfo.setRainTime(12300); + worldInfo.setRaining(true); + case NORMAL: + super.updateWeather(); + } if (this.prevRainingStrength != this.rainingStrength) { diff --git a/src/main/java/org/ultramine/server/MultiWorld.java b/src/main/java/org/ultramine/server/MultiWorld.java index 0a4d34d..ecb20f6 100644 --- a/src/main/java/org/ultramine/server/MultiWorld.java +++ b/src/main/java/org/ultramine/server/MultiWorld.java @@ -7,6 +7,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.ultramine.server.WorldsConfig.WorldConfig; +import org.ultramine.server.WorldsConfig.WorldConfig.Settings.WorldTime; import org.ultramine.server.util.BasicTypeParser; import cpw.mods.fml.common.FMLCommonHandler; @@ -191,6 +192,7 @@ 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.setConfig(conf); MinecraftForge.EVENT_BUS.post(new WorldEvent.Load(world)); diff --git a/src/main/java/org/ultramine/server/WorldsConfig.java b/src/main/java/org/ultramine/server/WorldsConfig.java index 26167ca..6d89dc9 100644 --- a/src/main/java/org/ultramine/server/WorldsConfig.java +++ b/src/main/java/org/ultramine/server/WorldsConfig.java @@ -37,6 +37,18 @@ public String difficulty = "1"; public boolean pvp = true; public int maxBuildHeight = 256; + public WorldTime time = WorldTime.NORMAL; + public Weather weather = Weather.NORMAL; + + public enum WorldTime + { + NORMAL, DAY, NIGHT, FIXED + } + + public enum Weather + { + NORMAL, NONE, RAIN, THUNDER + } } public static class ChunkLoading diff --git a/src/main/resources/org/ultramine/defaults/defaultworlds.yml b/src/main/resources/org/ultramine/defaults/defaultworlds.yml index 24abf3c..9d40e1f 100644 --- a/src/main/resources/org/ultramine/defaults/defaultworlds.yml +++ b/src/main/resources/org/ultramine/defaults/defaultworlds.yml @@ -14,6 +14,8 @@ difficulty: 1 maxBuildHeight: 256 pvp: true + time: NORMAL + weather: NORMAL chunkLoading: viewDistance: 10 chunkUpdateRadius: 7