Код: Выделить всё
x = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
z = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
< /code>
chunk_x и chunk_z - это лишь координаты чанка в файлах региона конца (преобразованы в мировые координаты, поскольку координаты Chunk в регионах варьируются от 0 до 15, точно так же, как мировые координаты используют тот же диапазон в куске). Существует третья переменная, называемая var3 , которая вычисляет высоту, какой будет обсидианский p>
randomgenerator
Код: Выделить всё
protected Random randomGenerator;
Код: Выделить всё
protected Random randomGeneratorX = new Random(15384);
protected Random randomGeneratorZ = new Random(15384);
Код: Выделить всё
package net.minecraft.world.biome;
import net.minecraft.entity.boss.EntityDragon;
import net.minecraft.init.Blocks;
import net.minecraft.world.gen.feature.WorldGenSpikes;
import net.minecraft.world.gen.feature.WorldGenerator;
public class BiomeEndDecorator extends BiomeDecorator
{
protected WorldGenerator spikeGen;
private static final String __OBFID = "CL_00000188";
public BiomeEndDecorator()
{
this.spikeGen = new WorldGenSpikes(Blocks.end_stone);
}
protected void func_150513_a(BiomeGenBase p_150513_1_)
{
this.generateOres();
if (this.randomGenerator.nextInt(5) == 0)
{
int var2 = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
int var3 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
int var4 = this.currentWorld.getTopSolidOrLiquidBlock(var2, var3);
this.spikeGen.generate(this.currentWorld, this.randomGenerator, var2, var4, var3);
}
if (this.chunk_X == 0 && this.chunk_Z == 0)
{
EntityDragon var5 = new EntityDragon(this.currentWorld);
var5.setLocationAndAngles(0.0D, 128.0D, 0.0D, this.randomGenerator.nextFloat() * 360.0F, 0.0F);
this.currentWorld.spawnEntityInWorld(var5);
}
}
}
Код: Выделить всё
this.randomGeneratorX.setSeed(15384);
this.randomGeneratorZ.setSeed(15384);
if (this.randomGenerator.nextInt(5) == 0)
{
int var2 = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
int var3 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
Есть третий файл, Worldgenspikes. Java (с WorldGenerator.java ), который использует эти значения и генерирует шипы. Здесь я сделал простую команду печати на консоли для получения координат. Игнорируя установленное значение, новые столбы генерируют с координатами на основе чанка, как и я сгенерировал новые, как предполагалось. И я не мог пройти мимо этого. Я использовал Mcedit, чтобы сделать большие поверхности конечных камней на новых кусках, не загружая их, чтобы они не заполнились слишком рано, и я бы получил такую же проблему. Конечно, предоставление фиксированного семени для одного из координат генерирует линию шипов со случайным пространством между промежуточным пространством: < /p>
Логическая функция для генерации шипа составляет следующее:
public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
{
if (par1World.isAirBlock(par3, par4, par5) && par1World.getBlock(par3, par4 - 1, par5) == this.field_150520_a)
{
int var6 = par2Random.nextInt(32) + 6;
int var7 = par2Random.nextInt(4) + 1;
int var8;
int var9;
int var10;
int var11;
for (var8 = par3 - var7; var8 1
13 -> 5
1 -> 9
< /code>
Мой вопрос: на самом деле существует разумный способ создания алгоритма, который удается взломать семена каждый раз, когда генерируется новый кусок, который соответствует критериям для столбов обсидиана, учитывая каждый столб Сгенерированный использует новое случайное значение? Хотя руды действительно основаны на семян в чрезмерном мире, я не экспериментировал, чтобы проверить, в конце концов, это то же самое (я также считаю, что они тоже). Это в основном любопытство, так как в отличие от семян, в отличие от столбов, но они работают так же, когда дело доходит до фактических условий генерации.
Подробнее здесь: https://stackoverflow.com/questions/793 ... e-reproduc