Можно ли воспроизвести случайное семя, используемое для конечных кристаллических пиков до воспроизведения Minecraft 1.9?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Можно ли воспроизвести случайное семя, используемое для конечных кристаллических пиков до воспроизведения Minecraft 1.9?

Сообщение Anonymous »

Перед выпуском 1.9 из minecraft конечное измерение состояло из плавучего участка земли, изготовленного из конечных камней с столпами обсидиана или шипов, которые были разбросаны по этому острову без определенного порядка после конкретного SHAPE. Эти шипы были случайным образом созданы по мере создания новых кусков (я изначально думал, что они, очевидно, были). Код, который создает их «населяет» куски, которые соответствуют их требованиям, в частности, те, которые имеют блоки из конечных камней. RandomGenerator и использует функцию nextint (int bound) для возврата рандомизированного значения от 0 до 15, которая затем используется для получения x и z координаты со следующими уравнениями ( x и z на самом деле являются var2 и var3 , соответственно, в коде):

Код: Выделить всё

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 
переменная объявлена ​​в Biomedecorator.java :

Код: Выделить всё

protected Random randomGenerator;
Теперь есть способы получить семена случайных величин в Java, поскольку его встроенный алгоритм случайности довольно небезопасен, и его можно легко изменить. Однако я обнаружил некоторые проблемы при получении семян. Как координаты внутри куска на самом деле только это. Я всегда мог получить одно и то же поколение шипа. Я попытался дать ему установленное значение, а затем с помощью SetSeed в предыдущем файле, чтобы заставить координаты x и z , и, конечно, это вызвало сетку: < /p>

Код: Выделить всё

protected Random randomGeneratorX = new Random(15384);
protected Random randomGeneratorZ = new Random(15384);
File BioMeendDecorator.java - следующее, расширяющее Biomedecorator.java , фокусируясь на конечном измерении:

Код: Выделить всё

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);
}
}
}
Изменение BioMeendDecorator.java , добавление setseed в генератор:

Код: Выделить всё

    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;
Это работает, но мне нужно уменьшить значение в Nextint до чего -то меньшего, например, 2 (что вызывает 50% вероятность создания кристалла Ender, в отличие от обычных 20 % с 5), так что я не получаю беспроблемного конца. К сожалению, если я попытаюсь разместить значения сборов в условие, семена будет работать, но оно выберет из него случайные значения, вместо определенного порядка. < /P>
Есть третий файл, 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Можно ли реализовать класс CSS в кристаллических отчетах для Visual Studio 2012 (приложение winform или WPF)?
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Что такое случайное семя по умолчанию в Python 2.7?
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Что такое случайное семя по умолчанию в Python 2.7?
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Что такое случайное семя по умолчанию в Python 2.7?
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Что такое случайное семя по умолчанию в Python 2.7?
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»