extracted test logic to ISeedData
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package kaptainwutax.seedcracker.cracker;
|
||||
|
||||
import kaptainwutax.seedcracker.util.Rand;
|
||||
import kaptainwutax.seedcracker.util.loot.LootBuilder;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@@ -12,7 +13,7 @@ import net.minecraft.util.math.BlockPos;
|
||||
import java.util.*;
|
||||
import java.util.function.BiPredicate;
|
||||
|
||||
public class ChestLootData {
|
||||
public class ChestLootData implements ISeedData {
|
||||
|
||||
private LootTable lootTable;
|
||||
private Map<Item, List<Stack>> stacksMap = new HashMap<>();
|
||||
@@ -31,9 +32,13 @@ public class ChestLootData {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean test(long seed) {
|
||||
Random random = new Random(seed);
|
||||
LootContext lootContext = new LootBuilder().setRandom(random).put(LootContextParameters.POSITION, new BlockPos(0, 0, 0)).build(LootContextTypes.CHEST);
|
||||
@Override
|
||||
public boolean test(long seed, Rand rand) {
|
||||
rand.setSeed(seed, true);
|
||||
|
||||
LootContext lootContext = new LootBuilder().setRandom(rand.toRandom())
|
||||
.put(LootContextParameters.POSITION, new BlockPos(0, 0, 0)).build(LootContextTypes.CHEST);
|
||||
|
||||
List<ItemStack> itemStacks = this.lootTable.getDrops(lootContext);
|
||||
|
||||
Set<Item> foundItems = new HashSet<>();
|
||||
|
||||
@@ -43,7 +43,7 @@ public class FakeBiomeSource extends BiomeSource {
|
||||
}
|
||||
|
||||
static {
|
||||
BIOMES = ImmutableSet.<Biome>of(Biomes.OCEAN, Biomes.PLAINS, Biomes.DESERT, Biomes.MOUNTAINS, Biomes.FOREST, Biomes.TAIGA, Biomes.SWAMP, Biomes.RIVER, Biomes.FROZEN_OCEAN, Biomes.FROZEN_RIVER, Biomes.SNOWY_TUNDRA, Biomes.SNOWY_MOUNTAINS, Biomes.MUSHROOM_FIELDS, Biomes.MUSHROOM_FIELD_SHORE, Biomes.BEACH, Biomes.DESERT_HILLS, Biomes.WOODED_HILLS, Biomes.TAIGA_HILLS, Biomes.MOUNTAIN_EDGE, Biomes.JUNGLE, Biomes.JUNGLE_HILLS, Biomes.JUNGLE_EDGE, Biomes.DEEP_OCEAN, Biomes.STONE_SHORE, Biomes.SNOWY_BEACH, Biomes.BIRCH_FOREST, Biomes.BIRCH_FOREST_HILLS, Biomes.DARK_FOREST, Biomes.SNOWY_TAIGA, Biomes.SNOWY_TAIGA_HILLS, Biomes.GIANT_TREE_TAIGA, Biomes.GIANT_TREE_TAIGA_HILLS, Biomes.WOODED_MOUNTAINS, Biomes.SAVANNA, Biomes.SAVANNA_PLATEAU, Biomes.BADLANDS, Biomes.WOODED_BADLANDS_PLATEAU, Biomes.BADLANDS_PLATEAU, Biomes.WARM_OCEAN, Biomes.LUKEWARM_OCEAN, Biomes.COLD_OCEAN, Biomes.DEEP_WARM_OCEAN, Biomes.DEEP_LUKEWARM_OCEAN, Biomes.DEEP_COLD_OCEAN, Biomes.DEEP_FROZEN_OCEAN, Biomes.SUNFLOWER_PLAINS, Biomes.DESERT_LAKES, Biomes.GRAVELLY_MOUNTAINS, Biomes.FLOWER_FOREST, Biomes.TAIGA_MOUNTAINS, Biomes.SWAMP_HILLS, Biomes.ICE_SPIKES, Biomes.MODIFIED_JUNGLE, Biomes.MODIFIED_JUNGLE_EDGE, Biomes.TALL_BIRCH_FOREST, Biomes.TALL_BIRCH_HILLS, Biomes.DARK_FOREST_HILLS, Biomes.SNOWY_TAIGA_MOUNTAINS, Biomes.GIANT_SPRUCE_TAIGA, Biomes.GIANT_SPRUCE_TAIGA_HILLS, Biomes.MODIFIED_GRAVELLY_MOUNTAINS, Biomes.SHATTERED_SAVANNA, Biomes.SHATTERED_SAVANNA_PLATEAU, Biomes.ERODED_BADLANDS, Biomes.MODIFIED_WOODED_BADLANDS_PLATEAU, Biomes.MODIFIED_BADLANDS_PLATEAU);
|
||||
BIOMES = ImmutableSet.of(Biomes.OCEAN, Biomes.PLAINS, Biomes.DESERT, Biomes.MOUNTAINS, Biomes.FOREST, Biomes.TAIGA, Biomes.SWAMP, Biomes.RIVER, Biomes.FROZEN_OCEAN, Biomes.FROZEN_RIVER, Biomes.SNOWY_TUNDRA, Biomes.SNOWY_MOUNTAINS, Biomes.MUSHROOM_FIELDS, Biomes.MUSHROOM_FIELD_SHORE, Biomes.BEACH, Biomes.DESERT_HILLS, Biomes.WOODED_HILLS, Biomes.TAIGA_HILLS, Biomes.MOUNTAIN_EDGE, Biomes.JUNGLE, Biomes.JUNGLE_HILLS, Biomes.JUNGLE_EDGE, Biomes.DEEP_OCEAN, Biomes.STONE_SHORE, Biomes.SNOWY_BEACH, Biomes.BIRCH_FOREST, Biomes.BIRCH_FOREST_HILLS, Biomes.DARK_FOREST, Biomes.SNOWY_TAIGA, Biomes.SNOWY_TAIGA_HILLS, Biomes.GIANT_TREE_TAIGA, Biomes.GIANT_TREE_TAIGA_HILLS, Biomes.WOODED_MOUNTAINS, Biomes.SAVANNA, Biomes.SAVANNA_PLATEAU, Biomes.BADLANDS, Biomes.WOODED_BADLANDS_PLATEAU, Biomes.BADLANDS_PLATEAU, Biomes.WARM_OCEAN, Biomes.LUKEWARM_OCEAN, Biomes.COLD_OCEAN, Biomes.DEEP_WARM_OCEAN, Biomes.DEEP_LUKEWARM_OCEAN, Biomes.DEEP_COLD_OCEAN, Biomes.DEEP_FROZEN_OCEAN, Biomes.SUNFLOWER_PLAINS, Biomes.DESERT_LAKES, Biomes.GRAVELLY_MOUNTAINS, Biomes.FLOWER_FOREST, Biomes.TAIGA_MOUNTAINS, Biomes.SWAMP_HILLS, Biomes.ICE_SPIKES, Biomes.MODIFIED_JUNGLE, Biomes.MODIFIED_JUNGLE_EDGE, Biomes.TALL_BIRCH_FOREST, Biomes.TALL_BIRCH_HILLS, Biomes.DARK_FOREST_HILLS, Biomes.SNOWY_TAIGA_MOUNTAINS, Biomes.GIANT_SPRUCE_TAIGA, Biomes.GIANT_SPRUCE_TAIGA_HILLS, Biomes.MODIFIED_GRAVELLY_MOUNTAINS, Biomes.SHATTERED_SAVANNA, Biomes.SHATTERED_SAVANNA_PLATEAU, Biomes.ERODED_BADLANDS, Biomes.MODIFIED_WOODED_BADLANDS_PLATEAU, Biomes.MODIFIED_BADLANDS_PLATEAU);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package kaptainwutax.seedcracker.cracker;
|
||||
|
||||
import kaptainwutax.seedcracker.util.Rand;
|
||||
|
||||
public interface ISeedData {
|
||||
|
||||
boolean test(long seed, Rand rand);
|
||||
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import kaptainwutax.seedcracker.util.Rand;
|
||||
import kaptainwutax.seedcracker.util.Seeds;
|
||||
import net.minecraft.util.math.ChunkPos;
|
||||
|
||||
public class SlimeChunkData {
|
||||
public class SlimeChunkData implements ISeedData {
|
||||
|
||||
protected ChunkPos chunkPos;
|
||||
protected boolean isSlimeChunk;
|
||||
@@ -14,6 +14,7 @@ public class SlimeChunkData {
|
||||
this.isSlimeChunk = isSlimeChunk;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean test(long seed, Rand rand) {
|
||||
Seeds.setSlimeChunkSeed(rand, seed, this.chunkPos.x, this.chunkPos.z, 987234911L);
|
||||
return (rand.nextInt(10) == 0) == this.isSlimeChunk;
|
||||
|
||||
@@ -43,7 +43,7 @@ public class TimeMachine {
|
||||
|
||||
for(DecoratorData decoratorData : decoratorDataList) {
|
||||
if(!goodSeed)break;
|
||||
if(!decoratorData.test(structureSeed))goodSeed = false;
|
||||
if(!decoratorData.test(structureSeed, rand))goodSeed = false;
|
||||
}
|
||||
|
||||
if(goodSeed) {
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package kaptainwutax.seedcracker.cracker.population;
|
||||
|
||||
import kaptainwutax.seedcracker.cracker.DecoratorCache;
|
||||
import kaptainwutax.seedcracker.cracker.ISeedData;
|
||||
import kaptainwutax.seedcracker.util.Rand;
|
||||
import net.minecraft.util.math.ChunkPos;
|
||||
import net.minecraft.world.biome.Biome;
|
||||
import net.minecraft.world.gen.decorator.Decorator;
|
||||
|
||||
public abstract class DecoratorData {
|
||||
public abstract class DecoratorData implements ISeedData {
|
||||
|
||||
private final ChunkPos chunkPos;
|
||||
private final Decorator<?> decorator;
|
||||
@@ -18,8 +19,9 @@ public abstract class DecoratorData {
|
||||
this.biome = biome;
|
||||
}
|
||||
|
||||
public final boolean test(long structureSeed) {
|
||||
long decoratorSeed = this.getPopulationSeed(structureSeed, this.chunkPos.x << 4, this.chunkPos.z << 4);
|
||||
@Override
|
||||
public final boolean test(long seed, Rand rand) {
|
||||
long decoratorSeed = this.getPopulationSeed(seed, this.chunkPos.x << 4, this.chunkPos.z << 4);
|
||||
int salt = DecoratorCache.get().getSalt(this.biome, this.decorator, true);
|
||||
|
||||
if(salt == DecoratorCache.INVALID) {
|
||||
@@ -29,7 +31,8 @@ public abstract class DecoratorData {
|
||||
decoratorSeed += salt;
|
||||
decoratorSeed ^= Rand.JAVA_LCG.multiplier;
|
||||
decoratorSeed &= Rand.JAVA_LCG.modulo - 1;
|
||||
return this.testDecorator(new Rand(decoratorSeed, false));
|
||||
rand.setSeed(decoratorSeed, false);
|
||||
return this.testDecorator(rand);
|
||||
}
|
||||
|
||||
public long getPopulationSeed(long structureSeed, int x, int z) {
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
package kaptainwutax.seedcracker.cracker.structure;
|
||||
|
||||
import kaptainwutax.seedcracker.cracker.ISeedData;
|
||||
import kaptainwutax.seedcracker.cracker.structure.type.FeatureType;
|
||||
import kaptainwutax.seedcracker.util.Seeds;
|
||||
import kaptainwutax.seedcracker.util.Rand;
|
||||
import net.minecraft.util.math.ChunkPos;
|
||||
|
||||
public class StructureData {
|
||||
public class StructureData implements ISeedData {
|
||||
|
||||
public int chunkX;
|
||||
public int chunkZ;
|
||||
@@ -22,6 +23,7 @@ public class StructureData {
|
||||
this.featureType.build(this, chunkPos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean test(long structureSeed, Rand rand) {
|
||||
Seeds.setRegionSeed(rand, structureSeed, this.regionX, this.regionZ, this.salt);
|
||||
return this.featureType.test(rand, this, structureSeed);
|
||||
|
||||
Reference in New Issue
Block a user