Skip to content

Commit 2ca4a60

Browse files
authored
Improve bedrock vein randomness (#4574)
1 parent 4256a62 commit 2ca4a60

File tree

2 files changed

+8
-11
lines changed

2 files changed

+8
-11
lines changed

src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockfluid/BedrockFluidVeinSavedData.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.gregtechceu.gtceu.api.GTValues;
44
import com.gregtechceu.gtceu.api.data.worldgen.WorldGeneratorUtils;
55
import com.gregtechceu.gtceu.api.registry.GTRegistries;
6-
import com.gregtechceu.gtceu.utils.GTMath;
76

87
import net.minecraft.MethodsReturnNonnullByDefault;
98
import net.minecraft.core.BlockPos;
@@ -12,9 +11,9 @@
1211
import net.minecraft.nbt.ListTag;
1312
import net.minecraft.nbt.Tag;
1413
import net.minecraft.server.level.ServerLevel;
15-
import net.minecraft.util.RandomSource;
1614
import net.minecraft.world.level.ChunkPos;
1715
import net.minecraft.world.level.biome.Biome;
16+
import net.minecraft.world.level.levelgen.XoroshiroRandomSource;
1817
import net.minecraft.world.level.material.Fluid;
1918
import net.minecraft.world.level.saveddata.SavedData;
2019

@@ -86,8 +85,8 @@ public FluidVeinWorldEntry getFluidVeinWorldEntry(int chunkX, int chunkZ) {
8685
ChunkPos pos = new ChunkPos(chunkX, chunkZ);
8786
if (!veinFluids.containsKey(pos)) {
8887
BedrockFluidDefinition definition = null;
89-
int query = RandomSource
90-
.create(GTMath.hashLongs(serverLevel.getSeed(), getVeinCoord(chunkX), getVeinCoord(chunkZ)))
88+
int query = new XoroshiroRandomSource(
89+
serverLevel.getSeed() ^ ChunkPos.asLong(getVeinCoord(chunkX), getVeinCoord(chunkZ)))
9190
.nextInt();
9291
var biome = serverLevel.getBiome(new BlockPos(chunkX << 4, 64, chunkZ << 4));
9392
int totalWeight = getTotalWeight(biome);
@@ -108,7 +107,7 @@ public FluidVeinWorldEntry getFluidVeinWorldEntry(int chunkX, int chunkZ) {
108107
}
109108
}
110109

111-
var random = RandomSource.create(31L * 31 * chunkX + chunkZ * 31L + Long.hashCode(serverLevel.getSeed()));
110+
var random = new XoroshiroRandomSource(serverLevel.getSeed() ^ ChunkPos.asLong(chunkX, chunkZ));
112111

113112
int maximumYield = 0;
114113
if (definition != null) {

src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/BedrockOreVeinSavedData.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.gregtechceu.gtceu.api.data.worldgen.WorldGeneratorUtils;
55
import com.gregtechceu.gtceu.api.registry.GTRegistries;
66
import com.gregtechceu.gtceu.config.ConfigHolder;
7-
import com.gregtechceu.gtceu.utils.GTMath;
87

98
import net.minecraft.MethodsReturnNonnullByDefault;
109
import net.minecraft.core.BlockPos;
@@ -13,9 +12,9 @@
1312
import net.minecraft.nbt.ListTag;
1413
import net.minecraft.nbt.Tag;
1514
import net.minecraft.server.level.ServerLevel;
16-
import net.minecraft.util.RandomSource;
1715
import net.minecraft.world.level.ChunkPos;
1816
import net.minecraft.world.level.biome.Biome;
17+
import net.minecraft.world.level.levelgen.XoroshiroRandomSource;
1918
import net.minecraft.world.level.saveddata.SavedData;
2019

2120
import it.unimi.dsi.fastutil.objects.Object2IntMap;
@@ -95,8 +94,8 @@ public OreVeinWorldEntry getOreVeinWorldEntry(int chunkX, int chunkZ) {
9594
}
9695

9796
BedrockOreDefinition definition = null;
98-
int query = RandomSource
99-
.create(GTMath.hashLongs(serverLevel.getSeed(), getVeinCoord(chunkX), getVeinCoord(chunkZ)))
97+
int query = new XoroshiroRandomSource(
98+
serverLevel.getSeed() ^ ChunkPos.asLong(getVeinCoord(chunkX), getVeinCoord(chunkZ)))
10099
.nextInt();
101100
var biome = serverLevel.getBiome(new BlockPos(chunkX << 4, 64, chunkZ << 4));
102101
int totalWeight = getTotalWeight(biome);
@@ -138,8 +137,7 @@ public void createVein(ChunkPos pos, @Nullable BedrockOreDefinition definition)
138137
distanceFromOriginal = distanceFromOriginal == 0 ? 1 : distanceFromOriginal;
139138
distanceFromOriginal = (float) Math.pow(distanceFromOriginal, 2);
140139

141-
var random = RandomSource
142-
.create(31L * 31 * pos2.x + pos2.z * 31L + Long.hashCode(serverLevel.getSeed()));
140+
var random = new XoroshiroRandomSource(serverLevel.getSeed() ^ pos2.toLong());
143141

144142
int maximumYield;
145143
if ((definition.yield().getMaxValue() - definition.yield().getMinValue()) / distanceFromOriginal <=

0 commit comments

Comments
 (0)