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