From b2d95e95b1f232292d1c1b1739d9768dd83d1414 Mon Sep 17 00:00:00 2001 From: Amnet Date: Sat, 15 Feb 2014 21:46:55 +0100 Subject: [PATCH 1/4] Fix for a crash with slabs. --- src/main/java/biomesoplenty/common/blocks/BlockBOPSlab.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/biomesoplenty/common/blocks/BlockBOPSlab.java b/src/main/java/biomesoplenty/common/blocks/BlockBOPSlab.java index 7b771c2aa..0240a3d2e 100644 --- a/src/main/java/biomesoplenty/common/blocks/BlockBOPSlab.java +++ b/src/main/java/biomesoplenty/common/blocks/BlockBOPSlab.java @@ -245,6 +245,10 @@ public class BlockBOPSlab extends BlockSlab private static int getTypeFromMeta(int meta) { - return meta & 7; + meta = meta & 7; + if (meta < rockTypes.length) + meta = 0; + + return meta; } } From 155780276db3ecf48602a06b9055a3287d397fbf Mon Sep 17 00:00:00 2001 From: Amnet Date: Sat, 15 Feb 2014 21:53:41 +0100 Subject: [PATCH 2/4] Fix for the file name. --- .../{WorldProviderBopHell.java => WorldProviderBOPHell.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/java/biomesoplenty/common/world/{WorldProviderBopHell.java => WorldProviderBOPHell.java} (100%) diff --git a/src/main/java/biomesoplenty/common/world/WorldProviderBopHell.java b/src/main/java/biomesoplenty/common/world/WorldProviderBOPHell.java similarity index 100% rename from src/main/java/biomesoplenty/common/world/WorldProviderBopHell.java rename to src/main/java/biomesoplenty/common/world/WorldProviderBOPHell.java From 009df6aa0e600d5a555331b92cc620621ef78696 Mon Sep 17 00:00:00 2001 From: Amnet Date: Sat, 15 Feb 2014 22:16:50 +0100 Subject: [PATCH 3/4] Fix for slabs. --- .../common/blocks/BlockBOPSlab.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/biomesoplenty/common/blocks/BlockBOPSlab.java b/src/main/java/biomesoplenty/common/blocks/BlockBOPSlab.java index 0240a3d2e..59e2de268 100644 --- a/src/main/java/biomesoplenty/common/blocks/BlockBOPSlab.java +++ b/src/main/java/biomesoplenty/common/blocks/BlockBOPSlab.java @@ -93,9 +93,9 @@ public class BlockBOPSlab extends BlockSlab public IIcon getIcon(int side, int meta) { if (category == SlabCategory.STONE) - return textures[getTypeFromMeta(meta)]; + return textures[getRockType(meta)]; else - return textures[(getTypeFromMeta(meta) + category.ordinal() * 8)]; + return textures[getWoodType(meta)]; } @Override @@ -123,7 +123,7 @@ public class BlockBOPSlab extends BlockSlab public String func_150002_b(int meta) { if (category == SlabCategory.STONE) - return (new StringBuilder()).append(rockTypes[getTypeFromMeta(meta)]).append("Slab").toString(); + return (new StringBuilder()).append(rockTypes[getRockType(meta)]).append("Slab").toString(); else return (new StringBuilder()).append(woodTypes[getWoodType(meta)]).append("Slab").toString(); } @@ -242,13 +242,18 @@ public class BlockBOPSlab extends BlockSlab return 0; } + + private int getRockType(int meta) + { + meta = getTypeFromMeta(meta); + if (meta < rockTypes.length) + return meta; + + return 0; + } private static int getTypeFromMeta(int meta) { - meta = meta & 7; - if (meta < rockTypes.length) - meta = 0; - - return meta; + return meta & 7; } } From 2b6eda90043313fbefa6bc052b37f9d65339ce76 Mon Sep 17 00:00:00 2001 From: fabricator77 Date: Mon, 17 Feb 2014 16:50:42 +1030 Subject: [PATCH 4/4] Fixes biome decoration for Promised Land reactivate commented out super.decorate calls Filter Random to prevent -1 height crashes fix treegen to use correct grass block. --- .../BiomeGenPromisedLandForest.java | 2 +- .../BiomeGenPromisedLandPlains.java | 2 +- .../BiomeGenPromisedLandSwamp.java | 2 +- .../common/utils/RandomFiltered.java | 24 +++++++++++++++++++ .../common/world/ChunkProviderPromised.java | 10 +++++--- .../features/trees/WorldGenPromisedTree.java | 2 +- .../features/trees/WorldGenPromisedTree2.java | 2 +- .../features/trees/WorldGenPromisedTree3.java | 8 +++---- 8 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 src/main/java/biomesoplenty/common/utils/RandomFiltered.java diff --git a/src/main/java/biomesoplenty/common/biomes/promisedland/BiomeGenPromisedLandForest.java b/src/main/java/biomesoplenty/common/biomes/promisedland/BiomeGenPromisedLandForest.java index 92fac4921..c160ee622 100644 --- a/src/main/java/biomesoplenty/common/biomes/promisedland/BiomeGenPromisedLandForest.java +++ b/src/main/java/biomesoplenty/common/biomes/promisedland/BiomeGenPromisedLandForest.java @@ -115,7 +115,7 @@ public class BiomeGenPromisedLandForest extends BOPBiome //implements IWCFog @Override public void decorate(World par1World, Random par2Random, int par3, int par4) { - //super.decorate(par1World, par2Random, par3, par4); + super.decorate(par1World, par2Random, par3, par4); int var5 = 100; int var6; int var7; diff --git a/src/main/java/biomesoplenty/common/biomes/promisedland/BiomeGenPromisedLandPlains.java b/src/main/java/biomesoplenty/common/biomes/promisedland/BiomeGenPromisedLandPlains.java index 0325738a5..f53b0654d 100644 --- a/src/main/java/biomesoplenty/common/biomes/promisedland/BiomeGenPromisedLandPlains.java +++ b/src/main/java/biomesoplenty/common/biomes/promisedland/BiomeGenPromisedLandPlains.java @@ -98,7 +98,7 @@ public class BiomeGenPromisedLandPlains extends BOPBiome //implements IWCFog @Override public void decorate(World par1World, Random par2Random, int par3, int par4) { - //super.decorate(par1World, par2Random, par3, par4); + super.decorate(par1World, par2Random, par3, par4); int var5 = 100; int var6; int var7; diff --git a/src/main/java/biomesoplenty/common/biomes/promisedland/BiomeGenPromisedLandSwamp.java b/src/main/java/biomesoplenty/common/biomes/promisedland/BiomeGenPromisedLandSwamp.java index ca273410d..eddfe809c 100644 --- a/src/main/java/biomesoplenty/common/biomes/promisedland/BiomeGenPromisedLandSwamp.java +++ b/src/main/java/biomesoplenty/common/biomes/promisedland/BiomeGenPromisedLandSwamp.java @@ -113,7 +113,7 @@ public class BiomeGenPromisedLandSwamp extends BOPBiome //implements IWCFog @Override public void decorate(World par1World, Random par2Random, int par3, int par4) { - //super.decorate(par1World, par2Random, par3, par4); + super.decorate(par1World, par2Random, par3, par4); int var5 = 100; int var6; int var7; diff --git a/src/main/java/biomesoplenty/common/utils/RandomFiltered.java b/src/main/java/biomesoplenty/common/utils/RandomFiltered.java new file mode 100644 index 000000000..052b4b842 --- /dev/null +++ b/src/main/java/biomesoplenty/common/utils/RandomFiltered.java @@ -0,0 +1,24 @@ +package biomesoplenty.common.utils; + +import java.util.Random; +/** + * @prevent crashes in non overworld biome generation + * due to calls to decorator getting -1 height values + * Random.nextInt(-1) = crash + */ +public class RandomFiltered extends Random{ + public RandomFiltered(long par2) { + super(par2); + } + @Override + public int nextInt() { + return this.nextInt(1); + } + @Override + public int nextInt (int n) { + if (n > 0) { + return super.nextInt(n); + } + return 0; + } +} diff --git a/src/main/java/biomesoplenty/common/world/ChunkProviderPromised.java b/src/main/java/biomesoplenty/common/world/ChunkProviderPromised.java index 0f1074b46..fa83e0614 100644 --- a/src/main/java/biomesoplenty/common/world/ChunkProviderPromised.java +++ b/src/main/java/biomesoplenty/common/world/ChunkProviderPromised.java @@ -18,11 +18,13 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.terraingen.ChunkProviderEvent; import net.minecraftforge.event.terraingen.PopulateChunkEvent; import biomesoplenty.api.BOPBlockHelper; +import biomesoplenty.common.utils.RandomFiltered; import biomesoplenty.common.world.noise.NoiseOctaves; public class ChunkProviderPromised implements IChunkProvider { private Random endRNG; + private RandomFiltered endRNG2; private NoiseOctaves field_912_k; private NoiseOctaves field_911_l; private NoiseOctaves field_910_m; @@ -46,6 +48,8 @@ public class ChunkProviderPromised implements IChunkProvider { endWorld = par1World; endRNG = new Random(par2); + // prevent Random.nextInt(-1) crashes + this.endRNG2 = new RandomFiltered(par2); field_912_k = new NoiseOctaves(endRNG, 16); field_911_l = new NoiseOctaves(endRNG, 16); field_910_m = new NoiseOctaves(endRNG, 8); @@ -497,7 +501,7 @@ public class ChunkProviderPromised implements IChunkProvider { BlockSand.fallInstantly = true; - MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Pre(par1IChunkProvider, endWorld, endWorld.rand, par2, par3, false)); + MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Pre(par1IChunkProvider, endWorld, endRNG2, par2, par3, false)); int var4 = par2 * 16; int var5 = par3 * 16; @@ -516,9 +520,9 @@ public class ChunkProviderPromised implements IChunkProvider } } - var6.decorate(endWorld, endWorld.rand, var4, var5); + var6.decorate(endWorld, endRNG2, var4, var5); - MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Post(par1IChunkProvider, endWorld, endWorld.rand, par2, par3, false)); + MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Post(par1IChunkProvider, endWorld, endRNG2, par2, par3, false)); BlockSand.fallInstantly = false; } diff --git a/src/main/java/biomesoplenty/common/world/features/trees/WorldGenPromisedTree.java b/src/main/java/biomesoplenty/common/world/features/trees/WorldGenPromisedTree.java index 6c0af29aa..82468d555 100644 --- a/src/main/java/biomesoplenty/common/world/features/trees/WorldGenPromisedTree.java +++ b/src/main/java/biomesoplenty/common/world/features/trees/WorldGenPromisedTree.java @@ -74,7 +74,7 @@ public class WorldGenPromisedTree extends WorldGenAbstractTree //var11 = world.getBlockId(par3, par4 - 1, par5); block = world.getBlock(par3, par4 - 1, par5); - if ((block == BOPBlockHelper.get("holyGrass") || block == BOPBlockHelper.get("holyDirt")) && par4 < 256 - var6 - 1) + if ((block == BOPBlockHelper.get("grass") || block == BOPBlockHelper.get("holyDirt")) && par4 < 256 - var6 - 1) { //this.setBlockAndMetadata(world, par3, par4 - 1, par5, Blocks.holyDirt.get().blockID, 0); this.setBlockAndNotifyAdequately(world, par3, par4 - 1, par5, BOPBlockHelper.get("holyDirt"), 0); diff --git a/src/main/java/biomesoplenty/common/world/features/trees/WorldGenPromisedTree2.java b/src/main/java/biomesoplenty/common/world/features/trees/WorldGenPromisedTree2.java index e136e38f2..ba6be1663 100644 --- a/src/main/java/biomesoplenty/common/world/features/trees/WorldGenPromisedTree2.java +++ b/src/main/java/biomesoplenty/common/world/features/trees/WorldGenPromisedTree2.java @@ -74,7 +74,7 @@ public class WorldGenPromisedTree2 extends WorldGenAbstractTree { block = world.getBlock(par3, par4 - 1, par5); - if ((block == BOPBlockHelper.get("holyGrass") || block == BOPBlockHelper.get("holyDirt")) && par4 < 256 - var6 - 1) + if ((block == BOPBlockHelper.get("grass") || block == BOPBlockHelper.get("holyDirt")) && par4 < 256 - var6 - 1) { //this.setBlockAndMetadata(world, par3, par4 - 1, par5, Blocks.holyDirt.get().blockID, 0); this.setBlockAndNotifyAdequately(world, par3, par4 - 1, par5, BOPBlockHelper.get("holyDirt"), 0); diff --git a/src/main/java/biomesoplenty/common/world/features/trees/WorldGenPromisedTree3.java b/src/main/java/biomesoplenty/common/world/features/trees/WorldGenPromisedTree3.java index d92da6860..c2fca1a09 100644 --- a/src/main/java/biomesoplenty/common/world/features/trees/WorldGenPromisedTree3.java +++ b/src/main/java/biomesoplenty/common/world/features/trees/WorldGenPromisedTree3.java @@ -76,13 +76,13 @@ public class WorldGenPromisedTree3 extends WorldGenAbstractTree Block block13 = world.getBlock(var3, var4 - 1, var5 - 1); Block block14 = world.getBlock(var3 - 1, var4 - 1, var5 - 1); - if ((block11 == BOPBlockHelper.get("holyGrass") || block11 == BOPBlockHelper.get("holyDirt")) && var4 < 256 - var6 - 1) + if ((block11 == BOPBlockHelper.get("grass") || block11 == BOPBlockHelper.get("holyDirt")) && var4 < 256 - var6 - 1) { - if ((block24 == BOPBlockHelper.get("holyGrass") || block24 == BOPBlockHelper.get("holyDirt")) && var4 < 256 - var6 - 1) + if ((block24 == BOPBlockHelper.get("grass") || block24 == BOPBlockHelper.get("holyDirt")) && var4 < 256 - var6 - 1) { - if ((block13 == BOPBlockHelper.get("holyGrass") || block13 == BOPBlockHelper.get("holyDirt")) && var4 < 256 - var6 - 1) + if ((block13 == BOPBlockHelper.get("grass") || block13 == BOPBlockHelper.get("holyDirt")) && var4 < 256 - var6 - 1) { - if ((block14 == BOPBlockHelper.get("holyGrass") | block14 == BOPBlockHelper.get("holyDirt")) && var4 < 256 - var6 - 1) + if ((block14 == BOPBlockHelper.get("grass") | block14 == BOPBlockHelper.get("holyDirt")) && var4 < 256 - var6 - 1) { world.setBlock(var3, var4 - 1, var5, BOPBlockHelper.get("holyDirt"), 0, 2); world.setBlock(var3 - 1, var4 - 1, var5, BOPBlockHelper.get("holyDirt"), 0, 2);