diff --git a/CakeBuild/CakeBuild.csproj b/CakeBuild/CakeBuild.csproj index 0e3b64c..85c90f8 100644 --- a/CakeBuild/CakeBuild.csproj +++ b/CakeBuild/CakeBuild.csproj @@ -20,4 +20,4 @@ $(VINTAGE_STORY)/VintagestoryAPI.dll - \ No newline at end of file + diff --git a/Rivers/Rivers.csproj b/Rivers/Rivers.csproj index 7e06e43..3631e0f 100644 --- a/Rivers/Rivers.csproj +++ b/Rivers/Rivers.csproj @@ -66,4 +66,4 @@ - \ No newline at end of file + diff --git a/Rivers/modinfo.json b/Rivers/modinfo.json index af9eedc..b5feede 100644 --- a/Rivers/modinfo.json +++ b/Rivers/modinfo.json @@ -6,8 +6,8 @@ "sneeze" ], "description": "Standalone version of rivers.", - "version": "5.0.0", + "version": "5.0.1", "dependencies": { "game": "" } -} \ No newline at end of file +} diff --git a/Rivers/src/Boulders/GeneratePartialFeatures.cs b/Rivers/src/Boulders/GeneratePartialFeatures.cs index eeaa7a6..66dc1d5 100644 --- a/Rivers/src/Boulders/GeneratePartialFeatures.cs +++ b/Rivers/src/Boulders/GeneratePartialFeatures.cs @@ -81,10 +81,12 @@ public override void GeneratePartial(IServerChunk[] chunks, int mainChunkX, int IMapChunk mapChunk = blockAccessor.GetMapChunk(generatingChunkX, generatingChunkZ); + if (mapChunk == null) return; + ushort[] heightMap = mapChunk.WorldGenTerrainHeightMap; ushort[] riverDistanceMap = mapChunk.GetModdata("riverDistance"); - if (riverDistanceMap == null) return; + if (heightMap == null) return; int startX = generatingChunkX * chunkSize; int startZ = generatingChunkZ * chunkSize; @@ -125,4 +127,4 @@ public override void GeneratePartial(IServerChunk[] chunks, int mainChunkX, int } } } -} \ No newline at end of file +} diff --git a/Rivers/src/Boulders/WorldGenBase.cs b/Rivers/src/Boulders/WorldGenBase.cs index 48acb8e..c0d4362 100644 --- a/Rivers/src/Boulders/WorldGenBase.cs +++ b/Rivers/src/Boulders/WorldGenBase.cs @@ -48,13 +48,29 @@ public void LoadGlobalConfig(ICoreServerAPI api) globalConfig = api.Assets.Get("game:worldgen/global.json").ToObject(); - globalConfig.defaultRockId = api.World.GetBlock(globalConfig.defaultRockCode).BlockId; - globalConfig.waterBlockId = api.World.GetBlock(globalConfig.waterBlockCode).BlockId; - globalConfig.saltWaterBlockId = api.World.GetBlock(globalConfig.saltWaterBlockCode).BlockId; - globalConfig.lakeIceBlockId = api.World.GetBlock(globalConfig.lakeIceBlockCode).BlockId; - globalConfig.lavaBlockId = api.World.GetBlock(globalConfig.lavaBlockCode).BlockId; - globalConfig.basaltBlockId = api.World.GetBlock(globalConfig.basaltBlockCode).BlockId; - globalConfig.mantleBlockId = api.World.GetBlock(globalConfig.mantleBlockCode).BlockId; + Block? block; + + block = api.World.GetBlock(globalConfig.defaultRockCode); + globalConfig.defaultRockId = block?.BlockId ?? 0; + + block = api.World.GetBlock(globalConfig.waterBlockCode); + globalConfig.waterBlockId = block?.BlockId ?? 0; + + block = api.World.GetBlock(globalConfig.saltWaterBlockCode); + globalConfig.saltWaterBlockId = block?.BlockId ?? 0; + + block = api.World.GetBlock(globalConfig.lakeIceBlockCode); + globalConfig.lakeIceBlockId = block?.BlockId ?? 0; + + block = api.World.GetBlock(globalConfig.lavaBlockCode); + globalConfig.lavaBlockId = block?.BlockId ?? 0; + + block = api.World.GetBlock(globalConfig.basaltBlockCode); + globalConfig.basaltBlockId = block?.BlockId ?? 0; + + block = api.World.GetBlock(globalConfig.mantleBlockCode); + globalConfig.mantleBlockId = block?.BlockId ?? 0; + } [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/Rivers/src/Boulders/WorldGenPartial.cs b/Rivers/src/Boulders/WorldGenPartial.cs index 19f4ce4..3be57d9 100644 --- a/Rivers/src/Boulders/WorldGenPartial.cs +++ b/Rivers/src/Boulders/WorldGenPartial.cs @@ -15,19 +15,14 @@ public abstract class WorldGenPartial : WorldGenBase public virtual void ChunkColumnGeneration(IChunkColumnGenerateRequest request) { - IServerChunk[] chunks = request.Chunks; int chunkX = request.ChunkX; int chunkZ = request.ChunkZ; - for (int i = -ChunkRange; i <= ChunkRange; i++) - { - for (int j = -ChunkRange; j <= ChunkRange; j++) - { - GeneratePartial(chunks, chunkX, chunkZ, chunkX + i, chunkZ + j); - } - } + + // ONLY process current chunk — moddata already contains river info + GeneratePartial(request.Chunks, chunkX, chunkZ, chunkX, chunkZ); } public virtual void GeneratePartial(IServerChunk[] chunks, int mainChunkX, int mainChunkZ, int generatingChunkX, int generatingChunkZ) { } -} \ No newline at end of file +} diff --git a/Rivers/src/Gravel/GravelGen.cs b/Rivers/src/Gravel/GravelGen.cs index 24b8733..b36cee3 100644 --- a/Rivers/src/Gravel/GravelGen.cs +++ b/Rivers/src/Gravel/GravelGen.cs @@ -51,6 +51,7 @@ public void InitWorldGen() foreach (RockStratum stratum in rockStrata.Variants) { int stratumId = sapi.World.GetBlock(stratum.BlockCode)?.BlockId ?? 0; + if (stratumId == 0) continue; // Skip if block not found if (gravelMappings.ContainsKey(stratumId) || stratumId == 0) continue; diff --git a/Rivers/src/Patches/ChunkTesselatorManagerPatch.cs b/Rivers/src/Patches/ChunkTesselatorManagerPatch.cs index 6ff0752..077c6c6 100644 --- a/Rivers/src/Patches/ChunkTesselatorManagerPatch.cs +++ b/Rivers/src/Patches/ChunkTesselatorManagerPatch.cs @@ -1,5 +1,6 @@ using HarmonyLib; using System.Collections.Generic; +using System.Reflection; using System.Reflection.Emit; using Vintagestory.Client.NoObf; @@ -62,7 +63,7 @@ public static IEnumerable Transpiler(IEnumerable Transpiler(IEnumerable