2025-03-11 00:23:54 +01:00
|
|
|
package game.worldgen.feature;
|
|
|
|
|
2025-03-25 11:31:48 +01:00
|
|
|
import game.util.Predicates;
|
2025-03-16 17:40:47 +01:00
|
|
|
|
2025-03-11 00:23:54 +01:00
|
|
|
import game.block.BlockSand;
|
|
|
|
import game.block.BlockSlab;
|
|
|
|
import game.init.Blocks;
|
|
|
|
import game.pattern.BlockStateHelper;
|
|
|
|
import game.rng.Random;
|
|
|
|
import game.world.BlockPos;
|
|
|
|
import game.world.Facing;
|
|
|
|
import game.world.State;
|
|
|
|
import game.world.WorldServer;
|
|
|
|
import game.worldgen.FeatureGenerator;
|
|
|
|
|
|
|
|
public class WorldGenDesertWells extends FeatureGenerator
|
|
|
|
{
|
|
|
|
private static final BlockStateHelper field_175913_a = BlockStateHelper.forBlock(Blocks.sand).where(BlockSand.VARIANT, Predicates.equalTo(BlockSand.EnumType.SAND));
|
|
|
|
private final State field_175911_b = Blocks.sandstone_slab.getState().withProperty(BlockSlab.FACING, Facing.DOWN);
|
|
|
|
private final State field_175912_c = Blocks.sandstone.getState();
|
|
|
|
private final State field_175910_d = Blocks.flowing_water.getState();
|
|
|
|
|
|
|
|
public boolean generate(WorldServer worldIn, Random rand, BlockPos position)
|
|
|
|
{
|
|
|
|
while (worldIn.isAirBlock(position) && position.getY() > 2)
|
|
|
|
{
|
|
|
|
position = position.down();
|
|
|
|
}
|
|
|
|
|
2025-03-25 11:31:48 +01:00
|
|
|
if (!field_175913_a.test(worldIn.getState(position)))
|
2025-03-11 00:23:54 +01:00
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
for (int i = -2; i <= 2; ++i)
|
|
|
|
{
|
|
|
|
for (int j = -2; j <= 2; ++j)
|
|
|
|
{
|
|
|
|
if (worldIn.isAirBlock(position.add(i, -1, j)) && worldIn.isAirBlock(position.add(i, -2, j)))
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int l = -1; l <= 0; ++l)
|
|
|
|
{
|
|
|
|
for (int l1 = -2; l1 <= 2; ++l1)
|
|
|
|
{
|
|
|
|
for (int k = -2; k <= 2; ++k)
|
|
|
|
{
|
|
|
|
worldIn.setState(position.add(l1, l, k), this.field_175912_c, 2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
worldIn.setState(position, this.field_175910_d, 2);
|
|
|
|
|
|
|
|
for (Facing enumfacing : Facing.Plane.HORIZONTAL)
|
|
|
|
{
|
|
|
|
worldIn.setState(position.offset(enumfacing), this.field_175910_d, 2);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int i1 = -2; i1 <= 2; ++i1)
|
|
|
|
{
|
|
|
|
for (int i2 = -2; i2 <= 2; ++i2)
|
|
|
|
{
|
|
|
|
if (i1 == -2 || i1 == 2 || i2 == -2 || i2 == 2)
|
|
|
|
{
|
|
|
|
worldIn.setState(position.add(i1, 1, i2), this.field_175912_c, 2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
worldIn.setState(position.add(2, 1, 0), this.field_175911_b, 2);
|
|
|
|
worldIn.setState(position.add(-2, 1, 0), this.field_175911_b, 2);
|
|
|
|
worldIn.setState(position.add(0, 1, 2), this.field_175911_b, 2);
|
|
|
|
worldIn.setState(position.add(0, 1, -2), this.field_175911_b, 2);
|
|
|
|
|
|
|
|
for (int j1 = -1; j1 <= 1; ++j1)
|
|
|
|
{
|
|
|
|
for (int j2 = -1; j2 <= 1; ++j2)
|
|
|
|
{
|
|
|
|
if (j1 == 0 && j2 == 0)
|
|
|
|
{
|
|
|
|
worldIn.setState(position.add(j1, 4, j2), this.field_175912_c, 2);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
worldIn.setState(position.add(j1, 4, j2), this.field_175911_b, 2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int k1 = 1; k1 <= 3; ++k1)
|
|
|
|
{
|
|
|
|
worldIn.setState(position.add(-1, k1, -1), this.field_175912_c, 2);
|
|
|
|
worldIn.setState(position.add(-1, k1, 1), this.field_175912_c, 2);
|
|
|
|
worldIn.setState(position.add(1, k1, -1), this.field_175912_c, 2);
|
|
|
|
worldIn.setState(position.add(1, k1, 1), this.field_175912_c, 2);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|