From e7cd3d4df6206bc6366f026e3933edf15963d4d9 Mon Sep 17 00:00:00 2001 From: temp1011 <34900092+temp1011@users.noreply.github.com> Date: Tue, 15 May 2018 04:20:50 +0100 Subject: [PATCH] Preserve original ChunkPos for decoration events. (#4767) --- .../world/biome/BiomeDecorator.java.patch | 67 ++++++------- .../world/biome/BiomeDesert.java.patch | 4 +- .../world/biome/BiomeForest.java.patch | 6 +- .../world/biome/BiomeJungle.java.patch | 4 +- .../world/biome/BiomePlains.java.patch | 4 +- .../world/biome/BiomeSavanna.java.patch | 2 +- .../world/biome/BiomeSnow.java.patch | 2 +- .../world/biome/BiomeSwamp.java.patch | 2 +- .../world/biome/BiomeTaiga.java.patch | 4 +- .../world/gen/ChunkGeneratorHell.java.patch | 4 +- .../event/terraingen/DecorateBiomeEvent.java | 96 +++++++++++++++---- .../event/terraingen/TerrainGen.java | 39 +++++++- 12 files changed, 166 insertions(+), 68 deletions(-) diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeDecorator.java.patch b/patches/minecraft/net/minecraft/world/biome/BiomeDecorator.java.patch index 0948dff44d..8e65db285b 100644 --- a/patches/minecraft/net/minecraft/world/biome/BiomeDecorator.java.patch +++ b/patches/minecraft/net/minecraft/world/biome/BiomeDecorator.java.patch @@ -1,139 +1,140 @@ --- ../src-base/minecraft/net/minecraft/world/biome/BiomeDecorator.java +++ ../src-work/minecraft/net/minecraft/world/biome/BiomeDecorator.java -@@ -92,8 +92,10 @@ +@@ -92,8 +92,11 @@ protected void func_150513_a(Biome p_150513_1_, World p_150513_2_, Random p_150513_3_) { -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.terraingen.DecorateBiomeEvent.Pre(p_150513_2_, p_150513_3_, field_180294_c)); ++ net.minecraft.util.math.ChunkPos forgeChunkPos = new net.minecraft.util.math.ChunkPos(field_180294_c); // actual ChunkPos instead of BlockPos, used for events ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.terraingen.DecorateBiomeEvent.Pre(p_150513_2_, p_150513_3_, forgeChunkPos)); this.func_76797_b(p_150513_2_, p_150513_3_); -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, field_180294_c, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.SAND)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, forgeChunkPos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.SAND)) for (int i = 0; i < this.field_76805_H; ++i) { int j = p_150513_3_.nextInt(16) + 8; -@@ -101,6 +103,7 @@ +@@ -101,6 +104,7 @@ this.field_76810_g.func_180709_b(p_150513_2_, p_150513_3_, p_150513_2_.func_175672_r(this.field_180294_c.func_177982_a(j, 0, k))); } -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, field_180294_c, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.CLAY)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, forgeChunkPos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.CLAY)) for (int i1 = 0; i1 < this.field_76806_I; ++i1) { int l1 = p_150513_3_.nextInt(16) + 8; -@@ -108,6 +111,7 @@ +@@ -108,6 +112,7 @@ this.field_76809_f.func_180709_b(p_150513_2_, p_150513_3_, p_150513_2_.func_175672_r(this.field_180294_c.func_177982_a(l1, 0, i6))); } -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, field_180294_c, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.SAND_PASS2)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, forgeChunkPos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.SAND_PASS2)) for (int j1 = 0; j1 < this.field_76801_G; ++j1) { int i2 = p_150513_3_.nextInt(16) + 8; -@@ -122,6 +126,7 @@ +@@ -122,6 +127,7 @@ ++k1; } -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, field_180294_c, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.TREE)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, forgeChunkPos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.TREE)) for (int j2 = 0; j2 < k1; ++j2) { int k6 = p_150513_3_.nextInt(16) + 8; -@@ -136,6 +141,7 @@ +@@ -136,6 +142,7 @@ } } -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, field_180294_c, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.BIG_SHROOM)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, forgeChunkPos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.BIG_SHROOM)) for (int k2 = 0; k2 < this.field_76807_J; ++k2) { int l6 = p_150513_3_.nextInt(16) + 8; -@@ -143,6 +149,7 @@ +@@ -143,6 +150,7 @@ this.field_76826_u.func_180709_b(p_150513_2_, p_150513_3_, p_150513_2_.func_175645_m(this.field_180294_c.func_177982_a(l6, 0, k10))); } -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, field_180294_c, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.FLOWERS)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, forgeChunkPos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.FLOWERS)) for (int l2 = 0; l2 < this.field_76802_A; ++l2) { int i7 = p_150513_3_.nextInt(16) + 8; -@@ -164,6 +171,7 @@ +@@ -164,6 +172,7 @@ } } -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, field_180294_c, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.GRASS)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, forgeChunkPos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.GRASS)) for (int i3 = 0; i3 < this.field_76803_B; ++i3) { int j7 = p_150513_3_.nextInt(16) + 8; -@@ -177,6 +185,7 @@ +@@ -177,6 +186,7 @@ } } -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, field_180294_c, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.DEAD_BUSH)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, forgeChunkPos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.DEAD_BUSH)) for (int j3 = 0; j3 < this.field_76804_C; ++j3) { int k7 = p_150513_3_.nextInt(16) + 8; -@@ -190,6 +199,7 @@ +@@ -190,6 +200,7 @@ } } -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, field_180294_c, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.LILYPAD)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, forgeChunkPos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.LILYPAD)) for (int k3 = 0; k3 < this.field_76833_y; ++k3) { int l7 = p_150513_3_.nextInt(16) + 8; -@@ -216,6 +226,8 @@ +@@ -216,6 +227,8 @@ } } -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, field_180294_c, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.SHROOM)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, forgeChunkPos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.SHROOM)) + { for (int l3 = 0; l3 < this.field_76798_D; ++l3) { if (p_150513_3_.nextInt(4) == 0) -@@ -266,7 +278,9 @@ +@@ -266,7 +279,9 @@ this.field_76827_t.func_180709_b(p_150513_2_, p_150513_3_, this.field_180294_c.func_177982_a(j4, l15, l8)); } } - + } // End of Mushroom generation -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, field_180294_c, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.REED)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, forgeChunkPos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.REED)) + { for (int k4 = 0; k4 < this.field_76799_E; ++k4) { int i9 = p_150513_3_.nextInt(16) + 8; -@@ -292,7 +306,8 @@ +@@ -292,7 +307,8 @@ this.field_76825_v.func_180709_b(p_150513_2_, p_150513_3_, this.field_180294_c.func_177982_a(j9, i19, i13)); } } - + } // End of Reed generation -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, field_180294_c, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.PUMPKIN)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, forgeChunkPos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.PUMPKIN)) if (p_150513_3_.nextInt(32) == 0) { int i5 = p_150513_3_.nextInt(16) + 8; -@@ -306,6 +321,7 @@ +@@ -306,6 +322,7 @@ } } -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, field_180294_c, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.CACTUS)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, forgeChunkPos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.CACTUS)) for (int j5 = 0; j5 < this.field_76800_F; ++j5) { int l9 = p_150513_3_.nextInt(16) + 8; -@@ -321,6 +337,7 @@ +@@ -321,6 +338,7 @@ if (this.field_76808_K) { -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, field_180294_c, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.LAKE_WATER)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, forgeChunkPos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.LAKE_WATER)) for (int k5 = 0; k5 < 50; ++k5) { int i10 = p_150513_3_.nextInt(16) + 8; -@@ -335,6 +352,7 @@ +@@ -335,6 +353,7 @@ } } -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, field_180294_c, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.LAKE_LAVA)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_150513_2_, p_150513_3_, forgeChunkPos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.LAKE_LAVA)) for (int l5 = 0; l5 < 20; ++l5) { int j10 = p_150513_3_.nextInt(16) + 8; -@@ -344,21 +362,35 @@ +@@ -344,21 +363,35 @@ (new WorldGenLiquids(Blocks.field_150356_k)).func_180709_b(p_150513_2_, p_150513_3_, blockpos3); } } -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.terraingen.DecorateBiomeEvent.Post(p_150513_2_, p_150513_3_, field_180294_c)); ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.terraingen.DecorateBiomeEvent.Post(p_150513_2_, p_150513_3_, forgeChunkPos)); } protected void func_76797_b(World p_76797_1_, Random p_76797_2_) diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeDesert.java.patch b/patches/minecraft/net/minecraft/world/biome/BiomeDesert.java.patch index 3ff729ac12..8ad23bf526 100644 --- a/patches/minecraft/net/minecraft/world/biome/BiomeDesert.java.patch +++ b/patches/minecraft/net/minecraft/world/biome/BiomeDesert.java.patch @@ -4,7 +4,7 @@ { super.func_180624_a(p_180624_1_, p_180624_2_, p_180624_3_); -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, p_180624_3_, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.DESERT_WELL)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, new net.minecraft.util.math.ChunkPos(p_180624_3_), net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.DESERT_WELL)) if (p_180624_2_.nextInt(1000) == 0) { int i = p_180624_2_.nextInt(16) + 8; @@ -12,7 +12,7 @@ (new WorldGenDesertWells()).func_180709_b(p_180624_1_, p_180624_2_, blockpos); } -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, p_180624_3_, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.FOSSIL)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, new net.minecraft.util.math.ChunkPos(p_180624_3_), net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.FOSSIL)) if (p_180624_2_.nextInt(64) == 0) { (new WorldGenFossils()).func_180709_b(p_180624_1_, p_180624_2_, p_180624_3_); diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeForest.java.patch b/patches/minecraft/net/minecraft/world/biome/BiomeForest.java.patch index fcc210f25b..479715fa2e 100644 --- a/patches/minecraft/net/minecraft/world/biome/BiomeForest.java.patch +++ b/patches/minecraft/net/minecraft/world/biome/BiomeForest.java.patch @@ -22,7 +22,7 @@ this.func_185379_b(p_180624_1_, p_180624_2_, p_180624_3_); } -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, p_180624_3_, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.FLOWERS)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, new net.minecraft.util.math.ChunkPos(p_180624_3_), net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.FLOWERS)) + { // no tab for patch int i = p_180624_2_.nextInt(5) - 3; @@ -46,13 +46,13 @@ BlockPos blockpos = p_185379_1_.func_175645_m(p_185379_3_.func_177982_a(k, 0, l)); - if (p_185379_2_.nextInt(20) == 0) -+ if (p_185379_2_.nextInt(20) == 0 && net.minecraftforge.event.terraingen.TerrainGen.decorate(p_185379_1_, p_185379_2_, blockpos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.BIG_SHROOM)) ++ if (p_185379_2_.nextInt(20) == 0 && net.minecraftforge.event.terraingen.TerrainGen.decorate(p_185379_1_, p_185379_2_, new net.minecraft.util.math.ChunkPos(p_185379_3_), blockpos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.BIG_SHROOM)) { WorldGenBigMushroom worldgenbigmushroom = new WorldGenBigMushroom(); worldgenbigmushroom.func_180709_b(p_185379_1_, p_185379_2_, blockpos); } - else -+ else if (net.minecraftforge.event.terraingen.TerrainGen.decorate(p_185379_1_, p_185379_2_, blockpos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.TREE)) ++ else if (net.minecraftforge.event.terraingen.TerrainGen.decorate(p_185379_1_, p_185379_2_, new net.minecraft.util.math.ChunkPos(p_185379_3_), blockpos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.TREE)) { WorldGenAbstractTree worldgenabstracttree = this.func_150567_a(p_185379_2_); worldgenabstracttree.func_175904_e(); diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeJungle.java.patch b/patches/minecraft/net/minecraft/world/biome/BiomeJungle.java.patch index 05acdf088c..6b4b003a1a 100644 --- a/patches/minecraft/net/minecraft/world/biome/BiomeJungle.java.patch +++ b/patches/minecraft/net/minecraft/world/biome/BiomeJungle.java.patch @@ -8,11 +8,11 @@ + int height = p_180624_1_.func_175645_m(p_180624_3_.func_177982_a(i, 0, j)).func_177956_o() * 2; // could == 0, which crashes nextInt + if (height < 1) height = 1; + int k = p_180624_2_.nextInt(height); -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, p_180624_3_, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.PUMPKIN)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, new net.minecraft.util.math.ChunkPos(p_180624_3_), p_180624_3_.func_177982_a(i, k, j), net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.PUMPKIN)) (new WorldGenMelon()).func_180709_b(p_180624_1_, p_180624_2_, p_180624_3_.func_177982_a(i, k, j)); WorldGenVines worldgenvines = new WorldGenVines(); -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, p_180624_3_, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.GRASS)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, new net.minecraft.util.math.ChunkPos(p_180624_3_), net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.GRASS)) for (int j1 = 0; j1 < 50; ++j1) { k = p_180624_2_.nextInt(16) + 8; diff --git a/patches/minecraft/net/minecraft/world/biome/BiomePlains.java.patch b/patches/minecraft/net/minecraft/world/biome/BiomePlains.java.patch index a6795d00cb..71561fc4cf 100644 --- a/patches/minecraft/net/minecraft/world/biome/BiomePlains.java.patch +++ b/patches/minecraft/net/minecraft/world/biome/BiomePlains.java.patch @@ -4,7 +4,7 @@ this.field_76760_I.field_76803_B = 10; field_180280_ag.func_180710_a(BlockDoublePlant.EnumPlantType.GRASS); -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, p_180624_3_, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.GRASS)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, new net.minecraft.util.math.ChunkPos(p_180624_3_), net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.GRASS)) for (int i = 0; i < 7; ++i) { int j = p_180624_2_.nextInt(16) + 8; @@ -13,7 +13,7 @@ } - if (this.field_150628_aC) -+ if (this.field_150628_aC && net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, p_180624_3_, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.FLOWERS)) ++ if (this.field_150628_aC && net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, new net.minecraft.util.math.ChunkPos(p_180624_3_), net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.FLOWERS)) { field_180280_ag.func_180710_a(BlockDoublePlant.EnumPlantType.SUNFLOWER); diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeSavanna.java.patch b/patches/minecraft/net/minecraft/world/biome/BiomeSavanna.java.patch index bf73f1eaf9..5ba3254b4a 100644 --- a/patches/minecraft/net/minecraft/world/biome/BiomeSavanna.java.patch +++ b/patches/minecraft/net/minecraft/world/biome/BiomeSavanna.java.patch @@ -4,7 +4,7 @@ { field_180280_ag.func_180710_a(BlockDoublePlant.EnumPlantType.GRASS); -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, p_180624_3_, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.GRASS)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, new net.minecraft.util.math.ChunkPos(p_180624_3_), net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.GRASS)) for (int i = 0; i < 7; ++i) { int j = p_180624_2_.nextInt(16) + 8; diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeSnow.java.patch b/patches/minecraft/net/minecraft/world/biome/BiomeSnow.java.patch index c2c1715f74..01957a6960 100644 --- a/patches/minecraft/net/minecraft/world/biome/BiomeSnow.java.patch +++ b/patches/minecraft/net/minecraft/world/biome/BiomeSnow.java.patch @@ -5,7 +5,7 @@ public void func_180624_a(World p_180624_1_, Random p_180624_2_, BlockPos p_180624_3_) { - if (this.field_150615_aC) -+ if (this.field_150615_aC && net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, p_180624_3_, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.ICE)) ++ if (this.field_150615_aC && net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, new net.minecraft.util.math.ChunkPos(p_180624_3_), net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.ICE)) { for (int i = 0; i < 3; ++i) { diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeSwamp.java.patch b/patches/minecraft/net/minecraft/world/biome/BiomeSwamp.java.patch index 3a4e708f44..b728c8ba7a 100644 --- a/patches/minecraft/net/minecraft/world/biome/BiomeSwamp.java.patch +++ b/patches/minecraft/net/minecraft/world/biome/BiomeSwamp.java.patch @@ -4,7 +4,7 @@ { super.func_180624_a(p_180624_1_, p_180624_2_, p_180624_3_); -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, p_180624_3_, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.FOSSIL)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, new net.minecraft.util.math.ChunkPos(p_180624_3_), net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.FOSSIL)) if (p_180624_2_.nextInt(64) == 0) { (new WorldGenFossils()).func_180709_b(p_180624_1_, p_180624_2_, p_180624_3_); diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeTaiga.java.patch b/patches/minecraft/net/minecraft/world/biome/BiomeTaiga.java.patch index 51fc965ba2..5753983685 100644 --- a/patches/minecraft/net/minecraft/world/biome/BiomeTaiga.java.patch +++ b/patches/minecraft/net/minecraft/world/biome/BiomeTaiga.java.patch @@ -5,7 +5,7 @@ public void func_180624_a(World p_180624_1_, Random p_180624_2_, BlockPos p_180624_3_) { - if (this.field_150644_aH == BiomeTaiga.Type.MEGA || this.field_150644_aH == BiomeTaiga.Type.MEGA_SPRUCE) -+ if ((this.field_150644_aH == BiomeTaiga.Type.MEGA || this.field_150644_aH == BiomeTaiga.Type.MEGA_SPRUCE) && net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, p_180624_3_, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.ROCK)) ++ if ((this.field_150644_aH == BiomeTaiga.Type.MEGA || this.field_150644_aH == BiomeTaiga.Type.MEGA_SPRUCE) && net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, new net.minecraft.util.math.ChunkPos(p_180624_3_), net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.ROCK)) { int i = p_180624_2_.nextInt(3); @@ -13,7 +13,7 @@ field_180280_ag.func_180710_a(BlockDoublePlant.EnumPlantType.FERN); -+ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, p_180624_3_, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.FLOWERS)) ++ if(net.minecraftforge.event.terraingen.TerrainGen.decorate(p_180624_1_, p_180624_2_, new net.minecraft.util.math.ChunkPos(p_180624_3_), net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.FLOWERS)) for (int i1 = 0; i1 < 7; ++i1) { int j1 = p_180624_2_.nextInt(16) + 8; diff --git a/patches/minecraft/net/minecraft/world/gen/ChunkGeneratorHell.java.patch b/patches/minecraft/net/minecraft/world/gen/ChunkGeneratorHell.java.patch index d8accc597c..a62ecec317 100644 --- a/patches/minecraft/net/minecraft/world/gen/ChunkGeneratorHell.java.patch +++ b/patches/minecraft/net/minecraft/world/gen/ChunkGeneratorHell.java.patch @@ -75,9 +75,9 @@ + }//Forge: End doGLowstone + net.minecraftforge.event.ForgeEventFactory.onChunkPopulate(false, this, this.field_185952_n, this.field_185954_p, p_185931_1_, p_185931_2_, false); -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.terraingen.DecorateBiomeEvent.Pre(this.field_185952_n, this.field_185954_p, blockpos)); ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.terraingen.DecorateBiomeEvent.Pre(this.field_185952_n, this.field_185954_p, chunkpos)); + -+ if (net.minecraftforge.event.terraingen.TerrainGen.decorate(this.field_185952_n, this.field_185954_p, blockpos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.SHROOM)) ++ if (net.minecraftforge.event.terraingen.TerrainGen.decorate(this.field_185952_n, this.field_185954_p, chunkpos, net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.SHROOM)) + { if (this.field_185954_p.nextBoolean()) { diff --git a/src/main/java/net/minecraftforge/event/terraingen/DecorateBiomeEvent.java b/src/main/java/net/minecraftforge/event/terraingen/DecorateBiomeEvent.java index 5e0eff6775..348be8dc19 100644 --- a/src/main/java/net/minecraftforge/event/terraingen/DecorateBiomeEvent.java +++ b/src/main/java/net/minecraftforge/event/terraingen/DecorateBiomeEvent.java @@ -21,22 +21,25 @@ package net.minecraftforge.event.terraingen; import java.util.Random; +import javax.annotation.Nullable; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; import net.minecraft.world.biome.Biome; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.eventhandler.Cancelable; import net.minecraftforge.fml.common.eventhandler.Event; -import net.minecraftforge.fml.common.eventhandler.Event.HasResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -/**DecorateBiomeEvent is fired when a BiomeDecorator is created. +/** + * DecorateBiomeEvent is fired when a BiomeDecorator is created. *
* This event is fired whenever a BiomeDecorator is created in * {@link DeferredBiomeDecorator#fireCreateEventAndReplace(Biome)}.
*
* {@link #world} contains the world that is being decorated.
* {@link #rand} contains an instance of Random to be used.
- * {@link #pos} contains the coordinates of the Chunk being decorated.
+ * {@link #chunkPos} contains the original chunk for the decorator.
*
* This event is not {@link Cancelable}. *
@@ -48,13 +51,26 @@ public class DecorateBiomeEvent extends Event { private final World world; private final Random rand; + /** @deprecated use {@link #chunkPos} */ + @Deprecated // TODO remove in 1.13 private final BlockPos pos; + private final ChunkPos chunkPos; + public DecorateBiomeEvent(World world, Random rand, ChunkPos chunkPos) + { + this.world = world; + this.rand = rand; + this.pos = chunkPos.getBlock(0, 0, 0); + this.chunkPos = chunkPos; + } + + @Deprecated // TODO: remove in 1.13 public DecorateBiomeEvent(World world, Random rand, BlockPos pos) { this.world = world; this.rand = rand; this.pos = pos; + this.chunkPos = new ChunkPos(pos); } public World getWorld() @@ -67,19 +83,34 @@ public class DecorateBiomeEvent extends Event return rand; } + /** + * @deprecated use {@link #getChunkPos()} or {@link Decorate#getPlacementPos} instead. + */ + @Deprecated public BlockPos getPos() { return pos; } + public ChunkPos getChunkPos() + { + return chunkPos; + } + /** * This event is fired before a chunk is decorated with a biome feature. */ public static class Pre extends DecorateBiomeEvent { + public Pre(World world, Random rand, ChunkPos chunkPos) + { + super(world, rand, chunkPos); + } + + @Deprecated // TODO: remove in 1.13 public Pre(World world, Random rand, BlockPos pos) { - super(world, rand, pos); + this(world, rand, new ChunkPos(pos)); } } @@ -88,35 +119,68 @@ public class DecorateBiomeEvent extends Event */ public static class Post extends DecorateBiomeEvent { + public Post(World world, Random rand, ChunkPos chunkPos) + { + super(world, rand, chunkPos); + } + + @Deprecated //TODO: remove in 1.13 public Post(World world, Random rand, BlockPos pos) { - super(world, rand, pos); + this(world, rand, new ChunkPos(pos)); } } /** * This event is fired when a chunk is decorated with a biome feature. - * + *

* You can set the result to DENY to prevent the default biome decoration. */ @HasResult public static class Decorate extends DecorateBiomeEvent { + /** + * Use {@link EventType#CUSTOM} to filter custom event types + */ + public enum EventType + { + BIG_SHROOM, CACTUS, CLAY, DEAD_BUSH, DESERT_WELL, LILYPAD, FLOWERS, FOSSIL, GRASS, ICE, LAKE_WATER, LAKE_LAVA, PUMPKIN, REED, ROCK, SAND, SAND_PASS2, SHROOM, TREE, CUSTOM + } + + private final EventType type; + @Nullable + private final BlockPos placementPos; + + public Decorate(World world, Random rand, ChunkPos chunkPos, @Nullable BlockPos placementPos, EventType type) + { + super(world, rand, chunkPos); + this.type = type; + this.placementPos = placementPos; + } + + @Deprecated // TODO: remove in 1.13 + public Decorate(World world, Random rand, BlockPos pos, EventType type) + { + super(world, rand, pos); + this.type = type; + this.placementPos = null; + } + public EventType getType() { return type; } - /** Use CUSTOM to filter custom event types + /** + * This may be anywhere inside the 2x2 chunk area for generation. + * To get the original chunk position of the generation before a random location was chosen, use {@link #getChunkPos()}. + * + * @return the position used for original decoration, or null if it is not specified. */ - public static enum EventType { BIG_SHROOM, CACTUS, CLAY, DEAD_BUSH, DESERT_WELL, LILYPAD, FLOWERS, FOSSIL, GRASS, ICE, LAKE_WATER, LAKE_LAVA, PUMPKIN, REED, ROCK, SAND, SAND_PASS2, SHROOM, TREE, CUSTOM } - - private final EventType type; - - public Decorate(World world, Random rand, BlockPos pos, EventType type) + @Nullable + public BlockPos getPlacementPos() { - super(world, rand, pos); - this.type = type; + return this.placementPos; } } } diff --git a/src/main/java/net/minecraftforge/event/terraingen/TerrainGen.java b/src/main/java/net/minecraftforge/event/terraingen/TerrainGen.java index c2c3e82a46..6ddf386ad8 100644 --- a/src/main/java/net/minecraftforge/event/terraingen/TerrainGen.java +++ b/src/main/java/net/minecraftforge/event/terraingen/TerrainGen.java @@ -22,6 +22,7 @@ package net.minecraftforge.event.terraingen; import java.util.Random; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; import net.minecraft.world.World; import net.minecraft.world.gen.IChunkGenerator; import net.minecraft.world.gen.MapGenBase; @@ -36,7 +37,7 @@ public abstract class TerrainGen { public static T getModdedNoiseGenerators(World world, Random rand, T original) { - InitNoiseGensEvent event = new InitNoiseGensEvent(world, rand, original); + InitNoiseGensEvent event = new InitNoiseGensEvent<>(world, rand, original); MinecraftForge.TERRAIN_GEN_BUS.post(event); return event.getNewValues(); } @@ -55,13 +56,45 @@ public abstract class TerrainGen return event.getResult() != Result.DENY; } - public static boolean decorate(World world, Random rand, BlockPos pos, Decorate.EventType type) + /** + * Use this method when there is a specific BlockPos location given for decoration. + * If only the chunk position is available, use {@link #decorate(World, Random, ChunkPos, Decorate.EventType)} instead. + * + * @param world the world being generated in + * @param rand the random generator used for decoration + * @param chunkPos the original chunk position used for generation, passed to the decorator + * @param placementPos the specific position used for generating a feature, somewhere in the 2x2 chunks used for decoration + * @param type the type of decoration + */ + public static boolean decorate(World world, Random rand, ChunkPos chunkPos, BlockPos placementPos, Decorate.EventType type) { - Decorate event = new Decorate(world, rand, pos, type); + Decorate event = new Decorate(world, rand, chunkPos, placementPos, type); MinecraftForge.TERRAIN_GEN_BUS.post(event); return event.getResult() != Result.DENY; } + /** + * Use this method when generation doesn't have a specific BlockPos location for generation in the chunk. + * If a specific BlockPos for generation is available, use {@link #decorate(World, Random, ChunkPos, BlockPos, Decorate.EventType)} instead. + * + * @param world the world being generated in + * @param rand the random generator used for decoration + * @param chunkPos the original chunk position used for generation, passed to the decorator + * @param type the type of decoration + */ + public static boolean decorate(World world, Random rand, ChunkPos chunkPos, Decorate.EventType type) + { + Decorate event = new Decorate(world, rand, chunkPos, null, type); + MinecraftForge.TERRAIN_GEN_BUS.post(event); + return event.getResult() != Result.DENY; + } + + @Deprecated + public static boolean decorate(World world, Random rand, BlockPos pos, Decorate.EventType type) + { + return decorate(world, rand, new ChunkPos(pos), type); + } + public static boolean generateOre(World world, Random rand, WorldGenerator generator, BlockPos pos, GenerateMinable.EventType type) { GenerateMinable event = new GenerateMinable(world, rand, generator, pos, type);