From d38af25748f92bcb1c882fcf011023a027050f9b Mon Sep 17 00:00:00 2001 From: mckuhei Date: Mon, 10 Apr 2023 00:08:19 +0800 Subject: [PATCH] Fix world generation. --- .../net/minecraft/src/BiomeDecorator.java | 40 ++++++++++++------- src/minecraft/net/minecraft/src/Chunk.java | 1 + .../minecraft/src/ChunkProviderGenerate.java | 2 +- src/minecraft/net/minecraft/src/GenLayer.java | 1 + .../net/minecraft/src/ItemInWorldManager.java | 2 +- .../net/minecraft/src/PlayerControllerMP.java | 2 +- src/minecraft/net/minecraft/src/World.java | 2 +- 7 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/minecraft/net/minecraft/src/BiomeDecorator.java b/src/minecraft/net/minecraft/src/BiomeDecorator.java index 6bbf300..0c74ccc 100644 --- a/src/minecraft/net/minecraft/src/BiomeDecorator.java +++ b/src/minecraft/net/minecraft/src/BiomeDecorator.java @@ -2,6 +2,7 @@ package net.minecraft.src; import org.mcmodule.math.BigInteger; import java.util.Random; +import java.util.Stack; public class BiomeDecorator { @@ -130,6 +131,8 @@ public class BiomeDecorator /** True if decorator should generate surface lava & water */ public boolean generateLakes; + + private Stack stack = new Stack<>(); public BiomeDecorator(BiomeGenBase par1BiomeGenBase) { @@ -172,20 +175,23 @@ public class BiomeDecorator */ public void decorate(World par1World, Random par2Random, BigInteger par3, BigInteger par4) { - if (this.currentWorld != null) - { - throw new RuntimeException("Already decorating!!"); - } - else - { - this.currentWorld = par1World; - this.randomGenerator = par2Random; - this.chunk_X = par3; - this.chunk_Z = par4; - this.decorate(); - this.currentWorld = null; - this.randomGenerator = null; - } + DecorateInfo info = new DecorateInfo(); + info.world = currentWorld; + info.rand = randomGenerator; + info.chunkX = chunk_X; + info.chunkZ = chunk_Z; + stack.push(info); + this.currentWorld = par1World; + this.randomGenerator = par2Random; + this.chunk_X = par3; + this.chunk_Z = par4; + this.decorate(); + info = stack.pop(); + this.currentWorld = info.world; + this.randomGenerator = info.rand; + this.chunk_X = info.chunkX; + this.chunk_Z = info.chunkZ; + } /** @@ -422,4 +428,10 @@ public class BiomeDecorator this.genStandardOre1(1, this.diamondGen, 0, 16); this.genStandardOre2(1, this.lapisGen, 16, 16); } + + static class DecorateInfo { + BigInteger chunkX, chunkZ; + World world; + Random rand; + } } diff --git a/src/minecraft/net/minecraft/src/Chunk.java b/src/minecraft/net/minecraft/src/Chunk.java index 1a914ac..fdbd6be 100644 --- a/src/minecraft/net/minecraft/src/Chunk.java +++ b/src/minecraft/net/minecraft/src/Chunk.java @@ -224,6 +224,7 @@ public class Chunk */ public void generateSkylightMap() { + generateHeightMap(); // TODO // int var1 = this.getTopFilledSegment(); // int var2; diff --git a/src/minecraft/net/minecraft/src/ChunkProviderGenerate.java b/src/minecraft/net/minecraft/src/ChunkProviderGenerate.java index 3140433..9153f4b 100644 --- a/src/minecraft/net/minecraft/src/ChunkProviderGenerate.java +++ b/src/minecraft/net/minecraft/src/ChunkProviderGenerate.java @@ -521,7 +521,7 @@ public class ChunkProviderGenerate implements IChunkProvider } } // FIXME: java.lang.RuntimeException: Already decorating!! -// var6.decorate(this.worldObj, this.rand, var4, var5); + var6.decorate(this.worldObj, this.rand, var4, var5); SpawnerAnimals.performWorldGenSpawning(this.worldObj, var6, var4.add(BigInteger.valueOf(8)), var5.add(BigInteger.valueOf(8)), 16, 16, this.rand); var4 = var4.add(BigInteger.valueOf(8)); var5 = var5.add(BigInteger.valueOf(8)); diff --git a/src/minecraft/net/minecraft/src/GenLayer.java b/src/minecraft/net/minecraft/src/GenLayer.java index 3e4b170..8eac691 100644 --- a/src/minecraft/net/minecraft/src/GenLayer.java +++ b/src/minecraft/net/minecraft/src/GenLayer.java @@ -118,6 +118,7 @@ public abstract class GenLayer */ public void initChunkSeed(long par1, long par3) { +// System.out.printf("X; %d Z: %d\n", par1, par3); this.chunkSeed = this.worldGenSeed; this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L; this.chunkSeed += par1; diff --git a/src/minecraft/net/minecraft/src/ItemInWorldManager.java b/src/minecraft/net/minecraft/src/ItemInWorldManager.java index 1782ba4..c093399 100644 --- a/src/minecraft/net/minecraft/src/ItemInWorldManager.java +++ b/src/minecraft/net/minecraft/src/ItemInWorldManager.java @@ -171,7 +171,7 @@ public class ItemInWorldManager public void uncheckedTryHarvestBlock(BigInteger par1, int par2, BigInteger par3) { - if (par1 == this.partiallyDestroyedBlockX && par2 == this.partiallyDestroyedBlockY && par3 == this.partiallyDestroyedBlockZ) + if (par1.equals(this.partiallyDestroyedBlockX) && par2 == this.partiallyDestroyedBlockY && par3.equals(this.partiallyDestroyedBlockZ)) { int var4 = this.field_73100_i - this.field_73089_e; int var5 = this.theWorld.getBlockId(par1, par2, par3); diff --git a/src/minecraft/net/minecraft/src/PlayerControllerMP.java b/src/minecraft/net/minecraft/src/PlayerControllerMP.java index 039e5a2..f21d65e 100644 --- a/src/minecraft/net/minecraft/src/PlayerControllerMP.java +++ b/src/minecraft/net/minecraft/src/PlayerControllerMP.java @@ -217,7 +217,7 @@ public class PlayerControllerMP } else { - if (par1 == this.currentBlockX && par2 == this.currentBlockY && par3 == this.currentblockZ) + if (par1.equals(this.currentBlockX) && par2 == this.currentBlockY && par3.equals(this.currentblockZ)) { int var5 = this.mc.theWorld.getBlockId(par1, par2, par3); diff --git a/src/minecraft/net/minecraft/src/World.java b/src/minecraft/net/minecraft/src/World.java index c34c30c..bf9a445 100644 --- a/src/minecraft/net/minecraft/src/World.java +++ b/src/minecraft/net/minecraft/src/World.java @@ -316,7 +316,7 @@ public abstract class World implements IBlockAccess */ public Chunk getChunkFromBlockCoords(BigInteger par1, BigInteger par2) { - return this.getChunkFromChunkCoords(par1.shiftRight(4), par1.shiftRight(4)); + return this.getChunkFromChunkCoords(par1.shiftRight(4), par2.shiftRight(4)); } /**