- 16
- 0
Доброго времени суток. Проблема следующая, не могу настроить условия для генерации структуры. Например, я хочу чтобы структура находилась в воде (как ванильный Подводный Храм), но сделать это своими силами не получается. Обучался по видео на youtube, в целом там парень показал как генерировать свои структуры, но видимо тех знаний мне не хватает.
Вот код:
public class TestStructureGenerator implements IWorldGenerator {
//@formatterff
TestHouse TestHouse = new TestHouse();
//@formattern
@Override
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) {
switch (world.provider.getDimension()) {
case 0: //Overworld
this.runtestGenerator(world, random, chunkX, chunkZ);
break;
case -1: //Nether
break;
case 1: //End
break;
}
}
public void runtestGenerator(World world, Random random, int chunkX, int chunkZ) {
int x=chunkX * 16 + random.nextInt(16);
int z=chunkZ * 16 + random.nextInt(16);
int xy=x >> 4;
int zy=z >> 4;
int height=world.getChunkFromChunkCoords(xy, zy).getHeight(new BlockPos(x & 15, 0, z & 15));
int y=height;
if (world.getBlockState(new BlockPos(x, y, z)).getBlock() == (Blocks.GRAVEL)) {
if (world.getBiome(new BlockPos(x, y, z)).getBiomeClass().equals(BiomeOcean.class)) {
if ((random.nextInt(100) + 1) <= 100) {
boolean place=true;
for (int j=0; j < 7; j++) {
for (int k=0; k < 13; k++) {
for (int i=0; i < 4; i++) {
if (world.getBlockState(new BlockPos(i + x, j + y + 1, k + z)).getBlock() != Blocks.AIR) {
place=false;
}
}
}
}
if (place) {
TestHouse.generate(world, random, new BlockPos(x, y, z));
}
}
}
}
}
}
Сама по себе генерация работает, например тестил "В пустыне" нормально все генерируется, там всё просто.. Поставил условие getBlockState - Blocks.Sand, биом Desert, и в принципе всё. Но под водой так не проканывает.
Сорри если была такая тема, ввёл в поиске ничего не нашёл. Кто может помочь, не проходите пожалуйста мимо. Буду очень благодарен
Вот код:
public class TestStructureGenerator implements IWorldGenerator {
//@formatterff
TestHouse TestHouse = new TestHouse();
//@formattern
@Override
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) {
switch (world.provider.getDimension()) {
case 0: //Overworld
this.runtestGenerator(world, random, chunkX, chunkZ);
break;
case -1: //Nether
break;
case 1: //End
break;
}
}
public void runtestGenerator(World world, Random random, int chunkX, int chunkZ) {
int x=chunkX * 16 + random.nextInt(16);
int z=chunkZ * 16 + random.nextInt(16);
int xy=x >> 4;
int zy=z >> 4;
int height=world.getChunkFromChunkCoords(xy, zy).getHeight(new BlockPos(x & 15, 0, z & 15));
int y=height;
if (world.getBlockState(new BlockPos(x, y, z)).getBlock() == (Blocks.GRAVEL)) {
if (world.getBiome(new BlockPos(x, y, z)).getBiomeClass().equals(BiomeOcean.class)) {
if ((random.nextInt(100) + 1) <= 100) {
boolean place=true;
for (int j=0; j < 7; j++) {
for (int k=0; k < 13; k++) {
for (int i=0; i < 4; i++) {
if (world.getBlockState(new BlockPos(i + x, j + y + 1, k + z)).getBlock() != Blocks.AIR) {
place=false;
}
}
}
}
if (place) {
TestHouse.generate(world, random, new BlockPos(x, y, z));
}
}
}
}
}
}
Сама по себе генерация работает, например тестил "В пустыне" нормально все генерируется, там всё просто.. Поставил условие getBlockState - Blocks.Sand, биом Desert, и в принципе всё. Но под водой так не проканывает.
Сорри если была такая тема, ввёл в поиске ничего не нашёл. Кто может помочь, не проходите пожалуйста мимо. Буду очень благодарен