use of net.minecraft.util.math.random.Xoroshiro128PlusPlusRandom in project SeedcrackerX by 19MisterX98.
the class TimeMachine method pokeBiomes.
protected boolean pokeBiomes() {
if (this.structureSeeds.isEmpty() || this.worldSeeds.size() == 1)
return false;
if (this.structureSeeds.size() > 1000)
return false;
Log.debug("====================================");
worldSeeds.clear();
dataStorage.baseSeedData.dump();
if (Config.get().getVersion().isNewerOrEqualTo(MCVersion.v1_18) && dataStorage.getDecoratorBits() > 32F) {
Log.warn("tmachine.decoratorWorldSeedSearch");
ChunkRandom rand = new ChunkRandom(new Xoroshiro128PlusPlusRandom(0));
for (long structureSeed : this.structureSeeds) {
for (long upperBits = 0; upperBits < 1 << 16 && !this.shouldTerminate; upperBits++) {
long worldSeed = (upperBits << 48) | structureSeed;
boolean matches = true;
for (DataStorage.Entry<Feature.Data<?>> e : this.dataStorage.baseSeedData.getBaseSet()) {
if (e.data.feature instanceof Decorator && !((Decorator.Data<?>) e.data).testStart(worldSeed, rand)) {
matches = false;
break;
}
}
if (matches) {
this.worldSeeds.add(worldSeed);
if (this.worldSeeds.size() < 10) {
Log.printSeed("tmachine.foundWorldSeed", worldSeed);
if (this.worldSeeds.size() == 9) {
Log.warn("tmachine.printSeedsInConsole");
}
} else {
System.out.println("Found world seed " + worldSeed);
}
}
if (this.shouldTerminate) {
return false;
}
}
}
if (!this.worldSeeds.isEmpty()) {
Log.warn("tmachine.worldSeedSearchFinished");
return true;
} else {
Log.warn("finishedSearchNoResult");
}
}
if (this.dataStorage.hashedSeedData != null && this.dataStorage.hashedSeedData.getHashedSeed() != 0) {
Log.warn("tmachine.hashedSeedWorldSeedSearch");
for (long structureSeed : this.structureSeeds) {
WorldSeed.fromHash(structureSeed, this.dataStorage.hashedSeedData.getHashedSeed()).forEach(worldSeed -> {
this.worldSeeds.add(worldSeed);
Log.printSeed("tmachine.foundWorldSeed", worldSeed);
});
if (this.shouldTerminate) {
return false;
}
}
if (!this.worldSeeds.isEmpty()) {
Log.warn("tmachine.worldSeedSearchFinished");
return true;
} else {
this.dataStorage.hashedSeedData = null;
Log.error("tmachine.noResultsRevertingToBiomes");
}
}
this.dataStorage.biomeSeedData.dump();
if (this.dataStorage.notEnoughBiomeData()) {
Log.error("tmachine.moreBiomesNeeded");
return false;
}
Log.warn("tmachine.biomeWorldSeedSearch", this.dataStorage.biomeSeedData.size());
Log.warn("tmachine.fuzzyBiomeSearch");
MCVersion version = Config.get().getVersion();
for (long structureSeed : this.structureSeeds) {
for (long worldSeed : StructureSeed.toRandomWorldSeeds(structureSeed)) {
OverworldBiomeSource source = new OverworldBiomeSource(version, worldSeed);
boolean matches = true;
for (DataStorage.Entry<BiomeData> e : this.dataStorage.biomeSeedData) {
if (!e.data.test(source)) {
matches = false;
break;
}
}
if (matches) {
this.worldSeeds.add(worldSeed);
Log.printSeed("tmachine.foundWorldSeed", worldSeed);
}
if (this.shouldTerminate) {
return false;
}
}
}
if (!this.worldSeeds.isEmpty())
return true;
if (this.structureSeeds.size() > 10)
return false;
Log.warn("tmachine.deepBiomeSearch");
for (long structureSeed : this.structureSeeds) {
for (long upperBits = 0; upperBits < 1 << 16 && !this.shouldTerminate; upperBits++) {
long worldSeed = (upperBits << 48) | structureSeed;
OverworldBiomeSource source = new OverworldBiomeSource(version, worldSeed);
boolean matches = true;
for (DataStorage.Entry<BiomeData> e : this.dataStorage.biomeSeedData) {
if (!e.data.test(source)) {
matches = false;
break;
}
}
if (matches) {
this.worldSeeds.add(worldSeed);
if (this.worldSeeds.size() < 10) {
Log.printSeed("tmachine.foundWorldSeed", worldSeed);
if (this.worldSeeds.size() == 9) {
Log.warn("tmachine.printSeedsInConsole");
}
} else {
System.out.println("Found world seed " + worldSeed);
}
}
if (this.shouldTerminate) {
return false;
}
}
}
dispSearchEnd();
if (!this.worldSeeds.isEmpty())
return true;
Log.error("tmachine.deleteBiomeInformation");
this.dataStorage.biomeSeedData.getBaseSet().clear();
Log.warn("tmachine.randomSeedSearch");
for (long structureSeed : this.structureSeeds) {
StructureSeed.toRandomWorldSeeds(structureSeed).forEach(s -> Log.printSeed("tmachine.foundWorldSeed", s));
}
return true;
}
Aggregations