Preserve original ChunkPos for decoration events. (#4767)

This commit is contained in:
temp1011 2018-05-15 04:20:50 +01:00 committed by mezz
parent 215157f5cd
commit e7cd3d4df6
12 changed files with 166 additions and 68 deletions

View File

@ -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_)

View File

@ -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_);

View File

@ -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();

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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)
{

View File

@ -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_);

View File

@ -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;

View File

@ -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())
{

View File

@ -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.
* <br>
* This event is fired whenever a BiomeDecorator is created in
* {@link DeferredBiomeDecorator#fireCreateEventAndReplace(Biome)}.<br>
* <br>
* {@link #world} contains the world that is being decorated. <br>
* {@link #rand} contains an instance of Random to be used. <br>
* {@link #pos} contains the coordinates of the Chunk being decorated. <br>
* {@link #chunkPos} contains the original chunk for the decorator. <br>
* <br>
* This event is not {@link Cancelable}.
* <br>
@ -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.
*
* <p>
* 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;
}
}
}

View File

@ -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 extends InitNoiseGensEvent.Context> T getModdedNoiseGenerators(World world, Random rand, T original)
{
InitNoiseGensEvent<T> event = new InitNoiseGensEvent<T>(world, rand, original);
InitNoiseGensEvent<T> 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);