From dd45e24400fd2a9aaf5d40720eee94ef4e08a02d Mon Sep 17 00:00:00 2001 From: Unknown Date: Fri, 10 Jan 2020 16:36:33 -0500 Subject: [PATCH] extracted test logic to ISeedData --- .../seedcracker/cracker/ChestLootData.java | 13 +++++++++---- .../seedcracker/cracker/FakeBiomeSource.java | 2 +- .../kaptainwutax/seedcracker/cracker/ISeedData.java | 9 +++++++++ .../seedcracker/cracker/SlimeChunkData.java | 3 ++- .../seedcracker/cracker/TimeMachine.java | 2 +- .../cracker/population/DecoratorData.java | 11 +++++++---- .../cracker/structure/StructureData.java | 4 +++- 7 files changed, 32 insertions(+), 12 deletions(-) create mode 100644 src/main/java/kaptainwutax/seedcracker/cracker/ISeedData.java diff --git a/src/main/java/kaptainwutax/seedcracker/cracker/ChestLootData.java b/src/main/java/kaptainwutax/seedcracker/cracker/ChestLootData.java index d7055ce..06ae207 100644 --- a/src/main/java/kaptainwutax/seedcracker/cracker/ChestLootData.java +++ b/src/main/java/kaptainwutax/seedcracker/cracker/ChestLootData.java @@ -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> 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 itemStacks = this.lootTable.getDrops(lootContext); Set foundItems = new HashSet<>(); diff --git a/src/main/java/kaptainwutax/seedcracker/cracker/FakeBiomeSource.java b/src/main/java/kaptainwutax/seedcracker/cracker/FakeBiomeSource.java index cf7968c..76eb2f7 100644 --- a/src/main/java/kaptainwutax/seedcracker/cracker/FakeBiomeSource.java +++ b/src/main/java/kaptainwutax/seedcracker/cracker/FakeBiomeSource.java @@ -43,7 +43,7 @@ public class FakeBiomeSource extends BiomeSource { } static { - 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); + 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); } } diff --git a/src/main/java/kaptainwutax/seedcracker/cracker/ISeedData.java b/src/main/java/kaptainwutax/seedcracker/cracker/ISeedData.java new file mode 100644 index 0000000..e52614a --- /dev/null +++ b/src/main/java/kaptainwutax/seedcracker/cracker/ISeedData.java @@ -0,0 +1,9 @@ +package kaptainwutax.seedcracker.cracker; + +import kaptainwutax.seedcracker.util.Rand; + +public interface ISeedData { + + boolean test(long seed, Rand rand); + +} diff --git a/src/main/java/kaptainwutax/seedcracker/cracker/SlimeChunkData.java b/src/main/java/kaptainwutax/seedcracker/cracker/SlimeChunkData.java index beea311..54506fb 100644 --- a/src/main/java/kaptainwutax/seedcracker/cracker/SlimeChunkData.java +++ b/src/main/java/kaptainwutax/seedcracker/cracker/SlimeChunkData.java @@ -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; diff --git a/src/main/java/kaptainwutax/seedcracker/cracker/TimeMachine.java b/src/main/java/kaptainwutax/seedcracker/cracker/TimeMachine.java index 682bcdb..1868881 100644 --- a/src/main/java/kaptainwutax/seedcracker/cracker/TimeMachine.java +++ b/src/main/java/kaptainwutax/seedcracker/cracker/TimeMachine.java @@ -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) { diff --git a/src/main/java/kaptainwutax/seedcracker/cracker/population/DecoratorData.java b/src/main/java/kaptainwutax/seedcracker/cracker/population/DecoratorData.java index 55c73e9..4f9cb88 100644 --- a/src/main/java/kaptainwutax/seedcracker/cracker/population/DecoratorData.java +++ b/src/main/java/kaptainwutax/seedcracker/cracker/population/DecoratorData.java @@ -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) { diff --git a/src/main/java/kaptainwutax/seedcracker/cracker/structure/StructureData.java b/src/main/java/kaptainwutax/seedcracker/cracker/structure/StructureData.java index 219a96e..4627e0b 100644 --- a/src/main/java/kaptainwutax/seedcracker/cracker/structure/StructureData.java +++ b/src/main/java/kaptainwutax/seedcracker/cracker/structure/StructureData.java @@ -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);