From 094b421f9769aee5e254420b50b38c5adf9e2a17 Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Thu, 19 Nov 2020 17:23:08 -0600 Subject: [PATCH 1/2] Use Faster XoRoShiRo128PlusRandom XoRoShiRo128PlusRandom is a Faster Random Class that is many times faster than standard Java Random. It also features better random distribution and the ability to be split and retain the exact same noise output like Splitable random. http://dsiutils.di.unimi.it/docs/it/unimi/dsi/util/XoRoShiRo128PlusRandom.html --- build.gradle.kts | 3 +++ src/main/java/com/dfsek/terra/EventListener.java | 5 +++-- .../java/com/dfsek/terra/async/AsyncStructureFinder.java | 3 ++- src/main/java/com/dfsek/terra/carving/Cavern.java | 5 +++-- src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java | 5 +++-- src/main/java/com/dfsek/terra/command/OreCommand.java | 3 ++- .../java/com/dfsek/terra/config/genconfig/FloraConfig.java | 3 ++- .../java/com/dfsek/terra/config/genconfig/PaletteConfig.java | 3 ++- .../dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java | 5 +++-- .../terra/config/genconfig/biome/BiomePaletteConfig.java | 3 ++- .../dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java | 3 ++- .../java/com/dfsek/terra/population/StructurePopulator.java | 3 ++- src/main/java/com/dfsek/terra/procgen/GridSpawn.java | 3 ++- .../com/dfsek/terra/structure/features/EntityFeature.java | 3 ++- src/main/java/com/dfsek/terra/util/DataUtil.java | 3 ++- 15 files changed, 35 insertions(+), 18 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 9b1740852..0f8a1ac85 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -55,6 +55,8 @@ dependencies { compileOnly("org.spigotmc:spigot-api:1.16.2-R0.1-SNAPSHOT") implementation("io.papermc:paperlib:1.0.5") + implementation("it.unimi.dsi:dsiutils:2.6.14") + // JUnit. testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0") @@ -105,6 +107,7 @@ tasks.named("shadowJar") { relocate("org.bstats.bukkit", "com.dfsek.terra.lib.bstats") relocate("parsii", "com.dfsek.terra.lib.parsii") relocate("io.papermc.lib", "com.dfsek.terra.lib.paperlib") + relocate("it.unimi.dsi", "com.dfsek.terra.lib.unimi") } tasks.build { diff --git a/src/main/java/com/dfsek/terra/EventListener.java b/src/main/java/com/dfsek/terra/EventListener.java index cc5773687..a26f350b8 100644 --- a/src/main/java/com/dfsek/terra/EventListener.java +++ b/src/main/java/com/dfsek/terra/EventListener.java @@ -23,6 +23,7 @@ import org.bukkit.event.world.StructureGrowEvent; import org.polydev.gaea.GaeaPlugin; import org.polydev.gaea.tree.Tree; import org.polydev.gaea.tree.TreeType; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import java.util.Random; @@ -82,9 +83,9 @@ public class EventListener implements Listener { Tree tree = registry.get(TreeType.fromBukkit(e.getSpecies()).toString()); Debug.info("Overriding tree type: " + e.getSpecies()); if(tree instanceof TreeConfig) { - if(!((TreeConfig) tree).plantBlockCheck(e.getLocation(), new Random())) { + if(!((TreeConfig) tree).plantBlockCheck(e.getLocation(), new XoRoShiRo128PlusRandom())) { block.setBlockData(data); } - } else if(!tree.plant(e.getLocation(), new Random(), Terra.getInstance())) block.setBlockData(data); + } else if(!tree.plant(e.getLocation(), new XoRoShiRo128PlusRandom(), Terra.getInstance())) block.setBlockData(data); } } diff --git a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java index c0f3c7bad..77dbbc7c1 100644 --- a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java +++ b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java @@ -6,6 +6,7 @@ import com.dfsek.terra.biome.grid.TerraBiomeGrid; import com.dfsek.terra.config.genconfig.structure.StructureConfig; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.util.Vector; @@ -35,7 +36,7 @@ public class AsyncStructureFinder extends AsyncFeatureFinder { Location spawn = target.getSpawn().getChunkSpawn(x, z, world.getSeed()).toLocation(world); if(!TerraWorld.getWorld(world).getConfig().getBiome((UserDefinedBiome) getGrid().getBiome(spawn)).getStructures().contains(target)) return false; - Random r2 = new Random(spawn.hashCode()); + Random r2 = new XoRoShiRo128PlusRandom(spawn.hashCode()); Structure struc = target.getStructure(r2); Rotation rotation = Rotation.fromDegrees(r2.nextInt(4) * 90); for(int y = target.getSearchStart().get(r2); y > 0; y--) { diff --git a/src/main/java/com/dfsek/terra/carving/Cavern.java b/src/main/java/com/dfsek/terra/carving/Cavern.java index 65a842202..f0bac8e2e 100644 --- a/src/main/java/com/dfsek/terra/carving/Cavern.java +++ b/src/main/java/com/dfsek/terra/carving/Cavern.java @@ -4,6 +4,7 @@ import com.dfsek.terra.procgen.GridSpawn; import com.dfsek.terra.procgen.voxel.DeformedSphere; import com.dfsek.terra.procgen.voxel.Tube; import com.dfsek.terra.procgen.voxel.VoxelGeometry; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.util.Vector; @@ -23,7 +24,7 @@ public class Cavern { public VoxelGeometry carveChunk(int chunkX, int chunkZ) { long seedC = MathUtil.getCarverChunkSeed(chunkX, chunkZ, seed); - Random chunk = new Random(seedC); + Random chunk = new XoRoShiRo128PlusRandom(seedC); Vector org = node.getNodeLocation((chunkX << 4) + 8, (chunkZ << 4) + 8).clone().setY(chunk.nextInt(128)); VoxelGeometry carve = VoxelGeometry.getBlank(); @@ -33,7 +34,7 @@ public class Cavern { Bukkit.getLogger().info("Cavern: " + org.toString()); carve.merge(new DeformedSphere(org.clone(), chunk.nextInt(4) + 3, 0.75, smpl)); - Vector _00 = new Vector(org.getX() + 16, new Random(MathUtil.getCarverChunkSeed(chunkX + 1, chunkZ, seed)).nextInt(128), org.getZ()); + Vector _00 = new Vector(org.getX() + 16, new XoRoShiRo128PlusRandom(MathUtil.getCarverChunkSeed(chunkX + 1, chunkZ, seed)).nextInt(128), org.getZ()); carve.merge(new Tube(org, _00, 4)); return carve; diff --git a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java index b9fcc35cb..f438a8a30 100644 --- a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java +++ b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java @@ -3,6 +3,7 @@ package com.dfsek.terra.carving; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.base.ConfigPack; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.bukkit.util.Vector; @@ -40,7 +41,7 @@ public class UserDefinedCarver extends Carver { @Override public Worm getWorm(long l, Vector vector) { - Random r = new Random(l + hash); + Random r = new XoRoShiRo128PlusRandom(l + hash); return new UserDefinedWorm(length.get(r) / 2, r, vector, radius.getMax(), topCut, bottomCut); } @@ -59,7 +60,7 @@ public class UserDefinedCarver extends Carver { @Override public boolean isChunkCarved(World w, int chunkX, int chunkZ, Random random) { ConfigPack c = TerraWorld.getWorld(w).getConfig(); - return new Random(random.nextLong() + hash).nextInt(100) < c.getBiome((UserDefinedBiome) TerraWorld.getWorld(w).getGrid().getBiome(chunkX << 4, chunkZ << 4, GenerationPhase.POPULATE)).getCarverChance(this); + return new XoRoShiRo128PlusRandom(random.nextLong() + hash).nextInt(100) < c.getBiome((UserDefinedBiome) TerraWorld.getWorld(w).getGrid().getBiome(chunkX << 4, chunkZ << 4, GenerationPhase.POPULATE)).getCarverChance(this); } private class UserDefinedWorm extends Worm { diff --git a/src/main/java/com/dfsek/terra/command/OreCommand.java b/src/main/java/com/dfsek/terra/command/OreCommand.java index fdc6db1f2..8bd6c9125 100644 --- a/src/main/java/com/dfsek/terra/command/OreCommand.java +++ b/src/main/java/com/dfsek/terra/command/OreCommand.java @@ -3,6 +3,7 @@ package com.dfsek.terra.command; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.config.genconfig.OreConfig; import com.dfsek.terra.config.lang.LangUtil; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.bukkit.block.Block; @@ -36,7 +37,7 @@ public class OreCommand extends WorldCommand { return true; } Vector source = new Vector(FastMath.floorMod(bl.getX(), 16), bl.getY(), FastMath.floorMod(bl.getZ(), 16)); - ore.doVein(source, bl.getChunk(), new Random()); + ore.doVein(source, bl.getChunk(), new XoRoShiRo128PlusRandom()); } else { LangUtil.send("command.ore.main-menu", sender); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java index dab183643..6edecb4ee 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java @@ -4,6 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.config.exception.ConfigException; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; @@ -53,7 +54,7 @@ public class FloraConfig extends TerraConfig implements Flora { physics = getBoolean("physics", false); ceiling = getBoolean("ceiling", false); - Palette p = new RandomPalette<>(new Random(getInt("seed", 4))); + Palette p = new RandomPalette<>(new XoRoShiRo128PlusRandom(getInt("seed", 4))); floraPalette = PaletteConfig.getPalette(getMapList("layers"), p); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java index b6a3d2cb4..6e218359d 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java @@ -4,6 +4,7 @@ import com.dfsek.terra.Debug; import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.exception.ConfigException; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.Bukkit; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.InvalidConfigurationException; @@ -36,7 +37,7 @@ public class PaletteConfig extends TerraConfig { pNoise.setFractalOctaves(4); pNoise.setFrequency(getDouble("frequency", 0.02)); pal = new SimplexPalette<>(pNoise); - } else pal = new RandomPalette<>(new Random(getInt("seed", 2403))); + } else pal = new RandomPalette<>(new XoRoShiRo128PlusRandom(getInt("seed", 2403))); palette = getPalette(getMapList("layers"), pal); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java index 55d233fe7..01520333d 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java @@ -4,6 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; @@ -16,7 +17,7 @@ import org.polydev.gaea.world.palette.RandomPalette; import java.util.Random; public class BiomeOceanConfig extends TerraConfigSection { - private static final Palette oceanDefault = new RandomPalette(new Random(0)).add(Material.WATER.createBlockData(), 1); + private static final Palette oceanDefault = new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(Material.WATER.createBlockData(), 1); private final Palette ocean; private final int seaLevel; @@ -27,7 +28,7 @@ public class BiomeOceanConfig extends TerraConfigSection { if(oceanN != null) { if(oceanN.startsWith("BLOCK:")) { try { - ocean = new RandomPalette(new Random(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(oceanN.substring(6)), 1), 1); + ocean = new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(oceanN.substring(6)), 1), 1); } catch(IllegalArgumentException ex) { throw new ConfigException("BlockData \"" + oceanN + "\" is invalid! (Ocean Palette)", parent.getID()); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java index ff70cca9b..77afb8581 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java @@ -4,6 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.Bukkit; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.InvalidConfigurationException; @@ -29,7 +30,7 @@ public class BiomePaletteConfig extends TerraConfigSection { try { if(((String) entry.getKey()).startsWith("BLOCK:")) { try { - paletteMap.put((Integer) entry.getValue(), new RandomPalette(new Random(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getKey()).substring(6)), 1), 1)); + paletteMap.put((Integer) entry.getValue(), new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getKey()).substring(6)), 1), 1)); } catch(IllegalArgumentException ex) { throw new ConfigException("BlockData " + entry.getKey() + " is invalid! (Palettes)", parent.getID()); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java index 2639f6cff..e0197f94a 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java @@ -5,6 +5,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; @@ -42,7 +43,7 @@ public class BiomeSlabConfig extends TerraConfigSection { if(((String) entry.getValue()).startsWith("BLOCK:")) { try { Debug.info("Adding slab palette with single material " + entry.getKey()); - paletteMap.put(Bukkit.createBlockData((String) entry.getKey()).getMaterial(), new RandomPalette(new Random(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getValue()).substring(6)), 1), 1)); + paletteMap.put(Bukkit.createBlockData((String) entry.getKey()).getMaterial(), new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getValue()).substring(6)), 1), 1)); } catch(IllegalArgumentException ex) { throw new ConfigException("Invalid BlockData in slab configuration: " + ex.getMessage(), getParent().getConfig().getID()); } diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java index f3e14fa40..8a3b524fc 100644 --- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java +++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java @@ -13,6 +13,7 @@ import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureContainedInventory; import com.dfsek.terra.structure.features.Feature; import com.dfsek.terra.util.structure.RotationUtil; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; @@ -41,7 +42,7 @@ public class StructurePopulator extends BlockPopulator { for(StructureConfig conf : config.getAllStructures()) { Location spawn = conf.getSpawn().getNearestSpawn(cx + 8, cz + 8, world.getSeed()).toLocation(world); if(!config.getBiome((UserDefinedBiome) grid.getBiome(spawn)).getStructures().contains(conf)) continue; - Random r2 = new Random(spawn.hashCode()); + Random r2 = new XoRoShiRo128PlusRandom(spawn.hashCode()); Structure struc = conf.getStructure(r2); Rotation rotation = Rotation.fromDegrees(r2.nextInt(4) * 90); for(int y = conf.getSearchStart().get(r2); y > 0; y--) { diff --git a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java index 50d267139..696751fd0 100644 --- a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java +++ b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java @@ -1,5 +1,6 @@ package com.dfsek.terra.procgen; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.util.Vector; import org.polydev.gaea.math.MathUtil; @@ -53,7 +54,7 @@ public class GridSpawn { * @return Vector representing spawnpoint */ public Vector getChunkSpawn(int structureChunkX, int structureChunkZ, long seed) { - Random r = new Random(MathUtil.getCarverChunkSeed(structureChunkX, structureChunkZ, seed)); + Random r = new XoRoShiRo128PlusRandom(MathUtil.getCarverChunkSeed(structureChunkX, structureChunkZ, seed)); int offsetX = r.nextInt(width); int offsetZ = r.nextInt(width); int sx = structureChunkX * (width + 2 * separation) + offsetX; diff --git a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java index 2fd2162d7..da4fa10e6 100644 --- a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java +++ b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java @@ -4,6 +4,7 @@ import com.dfsek.terra.Debug; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureInfo; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; @@ -55,7 +56,7 @@ public class EntityFeature implements Feature { @Override public void apply(Structure structure, Rotation r, Location l, Chunk chunk) { - Random random = new Random(MathUtil.getCarverChunkSeed(chunk.getX(), chunk.getZ(), chunk.getWorld().getSeed())); + Random random = new XoRoShiRo128PlusRandom(MathUtil.getCarverChunkSeed(chunk.getX(), chunk.getZ(), chunk.getWorld().getSeed())); for(Location attempt : getLocations(structure, r, l, random, amount.get(random))) { if(!isInChunk(chunk, attempt)) continue; // Don't attempt spawn if not in current chunk. attemptSpawn(attempt, l); diff --git a/src/main/java/com/dfsek/terra/util/DataUtil.java b/src/main/java/com/dfsek/terra/util/DataUtil.java index 546acbad3..c02dec1eb 100644 --- a/src/main/java/com/dfsek/terra/util/DataUtil.java +++ b/src/main/java/com/dfsek/terra/util/DataUtil.java @@ -1,5 +1,6 @@ package com.dfsek.terra.util; +import it.unimi.dsi.util.XoRoShiRo128PlusRandom; import org.bukkit.Material; import org.bukkit.block.data.BlockData; import org.polydev.gaea.world.palette.Palette; @@ -12,5 +13,5 @@ public final class DataUtil { public static final BlockData SNOW = Material.SNOW.createBlockData(); public static final BlockData WATER = Material.WATER.createBlockData(); public static final BlockData AIR = Material.AIR.createBlockData(); - public static final Palette BLANK_PALETTE = new RandomPalette(new Random(2403)).add(AIR, 1); + public static final Palette BLANK_PALETTE = new RandomPalette(new XoRoShiRo128PlusRandom(2403)).add(AIR, 1); } From bb4ecee1f817ae18ef42764d8e4818401fd28bc5 Mon Sep 17 00:00:00 2001 From: Bud Gidiere Date: Thu, 19 Nov 2020 17:38:45 -0600 Subject: [PATCH 2/2] Use XoRoShiRo128PlusPlusRandom instead of XoRoShiRo128PlusRandom --- src/main/java/com/dfsek/terra/EventListener.java | 8 +++----- .../java/com/dfsek/terra/async/AsyncStructureFinder.java | 4 ++-- src/main/java/com/dfsek/terra/carving/Cavern.java | 6 +++--- .../java/com/dfsek/terra/carving/UserDefinedCarver.java | 6 +++--- src/main/java/com/dfsek/terra/command/OreCommand.java | 5 ++--- .../com/dfsek/terra/config/genconfig/FloraConfig.java | 5 ++--- .../com/dfsek/terra/config/genconfig/PaletteConfig.java | 5 ++--- .../terra/config/genconfig/biome/BiomeOceanConfig.java | 8 +++----- .../terra/config/genconfig/biome/BiomePaletteConfig.java | 5 ++--- .../terra/config/genconfig/biome/BiomeSlabConfig.java | 5 ++--- .../com/dfsek/terra/population/StructurePopulator.java | 4 ++-- src/main/java/com/dfsek/terra/procgen/GridSpawn.java | 4 ++-- .../com/dfsek/terra/structure/features/EntityFeature.java | 4 ++-- src/main/java/com/dfsek/terra/util/DataUtil.java | 6 ++---- 14 files changed, 32 insertions(+), 43 deletions(-) diff --git a/src/main/java/com/dfsek/terra/EventListener.java b/src/main/java/com/dfsek/terra/EventListener.java index a26f350b8..9dcf6fa62 100644 --- a/src/main/java/com/dfsek/terra/EventListener.java +++ b/src/main/java/com/dfsek/terra/EventListener.java @@ -6,6 +6,7 @@ import com.dfsek.terra.config.genconfig.TreeConfig; import com.dfsek.terra.config.genconfig.structure.StructureConfig; import com.dfsek.terra.registry.TreeRegistry; import com.dfsek.terra.util.StructureTypeEnum; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; @@ -23,9 +24,6 @@ import org.bukkit.event.world.StructureGrowEvent; import org.polydev.gaea.GaeaPlugin; import org.polydev.gaea.tree.Tree; import org.polydev.gaea.tree.TreeType; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; - -import java.util.Random; public class EventListener implements Listener { private final GaeaPlugin main; @@ -83,9 +81,9 @@ public class EventListener implements Listener { Tree tree = registry.get(TreeType.fromBukkit(e.getSpecies()).toString()); Debug.info("Overriding tree type: " + e.getSpecies()); if(tree instanceof TreeConfig) { - if(!((TreeConfig) tree).plantBlockCheck(e.getLocation(), new XoRoShiRo128PlusRandom())) { + if(!((TreeConfig) tree).plantBlockCheck(e.getLocation(), new XoRoShiRo128PlusPlusRandom())) { block.setBlockData(data); } - } else if(!tree.plant(e.getLocation(), new XoRoShiRo128PlusRandom(), Terra.getInstance())) block.setBlockData(data); + } else if(!tree.plant(e.getLocation(), new XoRoShiRo128PlusPlusRandom(), Terra.getInstance())) block.setBlockData(data); } } diff --git a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java index 77dbbc7c1..c3ed76555 100644 --- a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java +++ b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java @@ -6,7 +6,7 @@ import com.dfsek.terra.biome.grid.TerraBiomeGrid; import com.dfsek.terra.config.genconfig.structure.StructureConfig; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.util.Vector; @@ -36,7 +36,7 @@ public class AsyncStructureFinder extends AsyncFeatureFinder { Location spawn = target.getSpawn().getChunkSpawn(x, z, world.getSeed()).toLocation(world); if(!TerraWorld.getWorld(world).getConfig().getBiome((UserDefinedBiome) getGrid().getBiome(spawn)).getStructures().contains(target)) return false; - Random r2 = new XoRoShiRo128PlusRandom(spawn.hashCode()); + Random r2 = new XoRoShiRo128PlusPlusRandom(spawn.hashCode()); Structure struc = target.getStructure(r2); Rotation rotation = Rotation.fromDegrees(r2.nextInt(4) * 90); for(int y = target.getSearchStart().get(r2); y > 0; y--) { diff --git a/src/main/java/com/dfsek/terra/carving/Cavern.java b/src/main/java/com/dfsek/terra/carving/Cavern.java index f0bac8e2e..d963e95b9 100644 --- a/src/main/java/com/dfsek/terra/carving/Cavern.java +++ b/src/main/java/com/dfsek/terra/carving/Cavern.java @@ -4,7 +4,7 @@ import com.dfsek.terra.procgen.GridSpawn; import com.dfsek.terra.procgen.voxel.DeformedSphere; import com.dfsek.terra.procgen.voxel.Tube; import com.dfsek.terra.procgen.voxel.VoxelGeometry; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.util.Vector; @@ -24,7 +24,7 @@ public class Cavern { public VoxelGeometry carveChunk(int chunkX, int chunkZ) { long seedC = MathUtil.getCarverChunkSeed(chunkX, chunkZ, seed); - Random chunk = new XoRoShiRo128PlusRandom(seedC); + Random chunk = new XoRoShiRo128PlusPlusRandom(seedC); Vector org = node.getNodeLocation((chunkX << 4) + 8, (chunkZ << 4) + 8).clone().setY(chunk.nextInt(128)); VoxelGeometry carve = VoxelGeometry.getBlank(); @@ -34,7 +34,7 @@ public class Cavern { Bukkit.getLogger().info("Cavern: " + org.toString()); carve.merge(new DeformedSphere(org.clone(), chunk.nextInt(4) + 3, 0.75, smpl)); - Vector _00 = new Vector(org.getX() + 16, new XoRoShiRo128PlusRandom(MathUtil.getCarverChunkSeed(chunkX + 1, chunkZ, seed)).nextInt(128), org.getZ()); + Vector _00 = new Vector(org.getX() + 16, new XoRoShiRo128PlusPlusRandom(MathUtil.getCarverChunkSeed(chunkX + 1, chunkZ, seed)).nextInt(128), org.getZ()); carve.merge(new Tube(org, _00, 4)); return carve; diff --git a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java index f438a8a30..1df4c251c 100644 --- a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java +++ b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java @@ -3,7 +3,7 @@ package com.dfsek.terra.carving; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.base.ConfigPack; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.bukkit.util.Vector; @@ -41,7 +41,7 @@ public class UserDefinedCarver extends Carver { @Override public Worm getWorm(long l, Vector vector) { - Random r = new XoRoShiRo128PlusRandom(l + hash); + Random r = new XoRoShiRo128PlusPlusRandom(l + hash); return new UserDefinedWorm(length.get(r) / 2, r, vector, radius.getMax(), topCut, bottomCut); } @@ -60,7 +60,7 @@ public class UserDefinedCarver extends Carver { @Override public boolean isChunkCarved(World w, int chunkX, int chunkZ, Random random) { ConfigPack c = TerraWorld.getWorld(w).getConfig(); - return new XoRoShiRo128PlusRandom(random.nextLong() + hash).nextInt(100) < c.getBiome((UserDefinedBiome) TerraWorld.getWorld(w).getGrid().getBiome(chunkX << 4, chunkZ << 4, GenerationPhase.POPULATE)).getCarverChance(this); + return new XoRoShiRo128PlusPlusRandom(random.nextLong() + hash).nextInt(100) < c.getBiome((UserDefinedBiome) TerraWorld.getWorld(w).getGrid().getBiome(chunkX << 4, chunkZ << 4, GenerationPhase.POPULATE)).getCarverChance(this); } private class UserDefinedWorm extends Worm { diff --git a/src/main/java/com/dfsek/terra/command/OreCommand.java b/src/main/java/com/dfsek/terra/command/OreCommand.java index 8bd6c9125..dfae3ec5b 100644 --- a/src/main/java/com/dfsek/terra/command/OreCommand.java +++ b/src/main/java/com/dfsek/terra/command/OreCommand.java @@ -3,7 +3,7 @@ package com.dfsek.terra.command; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.config.genconfig.OreConfig; import com.dfsek.terra.config.lang.LangUtil; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.World; import org.bukkit.block.Block; @@ -16,7 +16,6 @@ import org.polydev.gaea.command.WorldCommand; import java.util.Collections; import java.util.List; -import java.util.Random; public class OreCommand extends WorldCommand { public OreCommand(org.polydev.gaea.command.Command parent) { @@ -37,7 +36,7 @@ public class OreCommand extends WorldCommand { return true; } Vector source = new Vector(FastMath.floorMod(bl.getX(), 16), bl.getY(), FastMath.floorMod(bl.getZ(), 16)); - ore.doVein(source, bl.getChunk(), new XoRoShiRo128PlusRandom()); + ore.doVein(source, bl.getChunk(), new XoRoShiRo128PlusPlusRandom()); } else { LangUtil.send("command.ore.main-menu", sender); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java index 6edecb4ee..338a22940 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java @@ -4,7 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.config.exception.ConfigException; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; @@ -22,7 +22,6 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Random; import java.util.Set; public class FloraConfig extends TerraConfig implements Flora { @@ -54,7 +53,7 @@ public class FloraConfig extends TerraConfig implements Flora { physics = getBoolean("physics", false); ceiling = getBoolean("ceiling", false); - Palette p = new RandomPalette<>(new XoRoShiRo128PlusRandom(getInt("seed", 4))); + Palette p = new RandomPalette<>(new XoRoShiRo128PlusPlusRandom(getInt("seed", 4))); floraPalette = PaletteConfig.getPalette(getMapList("layers"), p); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java index 6e218359d..412d11bb9 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java @@ -4,7 +4,7 @@ import com.dfsek.terra.Debug; import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.exception.ConfigException; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Bukkit; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.InvalidConfigurationException; @@ -18,7 +18,6 @@ import java.io.File; import java.io.IOException; import java.util.List; import java.util.Map; -import java.util.Random; public class PaletteConfig extends TerraConfig { private final Palette palette; @@ -37,7 +36,7 @@ public class PaletteConfig extends TerraConfig { pNoise.setFractalOctaves(4); pNoise.setFrequency(getDouble("frequency", 0.02)); pal = new SimplexPalette<>(pNoise); - } else pal = new RandomPalette<>(new XoRoShiRo128PlusRandom(getInt("seed", 2403))); + } else pal = new RandomPalette<>(new XoRoShiRo128PlusPlusRandom(getInt("seed", 2403))); palette = getPalette(getMapList("layers"), pal); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java index 01520333d..de316e4af 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOceanConfig.java @@ -4,7 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; @@ -14,10 +14,8 @@ import org.polydev.gaea.math.ProbabilityCollection; import org.polydev.gaea.world.palette.Palette; import org.polydev.gaea.world.palette.RandomPalette; -import java.util.Random; - public class BiomeOceanConfig extends TerraConfigSection { - private static final Palette oceanDefault = new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(Material.WATER.createBlockData(), 1); + private static final Palette oceanDefault = new RandomPalette(new XoRoShiRo128PlusPlusRandom(0)).add(Material.WATER.createBlockData(), 1); private final Palette ocean; private final int seaLevel; @@ -28,7 +26,7 @@ public class BiomeOceanConfig extends TerraConfigSection { if(oceanN != null) { if(oceanN.startsWith("BLOCK:")) { try { - ocean = new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(oceanN.substring(6)), 1), 1); + ocean = new RandomPalette(new XoRoShiRo128PlusPlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(oceanN.substring(6)), 1), 1); } catch(IllegalArgumentException ex) { throw new ConfigException("BlockData \"" + oceanN + "\" is invalid! (Ocean Palette)", parent.getID()); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java index 77afb8581..315bddd14 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomePaletteConfig.java @@ -4,7 +4,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Bukkit; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.InvalidConfigurationException; @@ -14,7 +14,6 @@ import org.polydev.gaea.world.palette.RandomPalette; import java.util.List; import java.util.Map; -import java.util.Random; import java.util.TreeMap; public class BiomePaletteConfig extends TerraConfigSection { @@ -30,7 +29,7 @@ public class BiomePaletteConfig extends TerraConfigSection { try { if(((String) entry.getKey()).startsWith("BLOCK:")) { try { - paletteMap.put((Integer) entry.getValue(), new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getKey()).substring(6)), 1), 1)); + paletteMap.put((Integer) entry.getValue(), new RandomPalette(new XoRoShiRo128PlusPlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getKey()).substring(6)), 1), 1)); } catch(IllegalArgumentException ex) { throw new ConfigException("BlockData " + entry.getKey() + " is invalid! (Palettes)", parent.getID()); } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java index e0197f94a..ca15aef79 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSlabConfig.java @@ -5,7 +5,7 @@ import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; @@ -18,7 +18,6 @@ import org.polydev.gaea.world.palette.RandomPalette; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Random; public class BiomeSlabConfig extends TerraConfigSection { private final Map> slabs; @@ -43,7 +42,7 @@ public class BiomeSlabConfig extends TerraConfigSection { if(((String) entry.getValue()).startsWith("BLOCK:")) { try { Debug.info("Adding slab palette with single material " + entry.getKey()); - paletteMap.put(Bukkit.createBlockData((String) entry.getKey()).getMaterial(), new RandomPalette(new XoRoShiRo128PlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getValue()).substring(6)), 1), 1)); + paletteMap.put(Bukkit.createBlockData((String) entry.getKey()).getMaterial(), new RandomPalette(new XoRoShiRo128PlusPlusRandom(0)).add(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getValue()).substring(6)), 1), 1)); } catch(IllegalArgumentException ex) { throw new ConfigException("Invalid BlockData in slab configuration: " + ex.getMessage(), getParent().getConfig().getID()); } diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java index 8a3b524fc..7b1d7aefa 100644 --- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java +++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java @@ -13,7 +13,7 @@ import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureContainedInventory; import com.dfsek.terra.structure.features.Feature; import com.dfsek.terra.util.structure.RotationUtil; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; @@ -42,7 +42,7 @@ public class StructurePopulator extends BlockPopulator { for(StructureConfig conf : config.getAllStructures()) { Location spawn = conf.getSpawn().getNearestSpawn(cx + 8, cz + 8, world.getSeed()).toLocation(world); if(!config.getBiome((UserDefinedBiome) grid.getBiome(spawn)).getStructures().contains(conf)) continue; - Random r2 = new XoRoShiRo128PlusRandom(spawn.hashCode()); + Random r2 = new XoRoShiRo128PlusPlusRandom(spawn.hashCode()); Structure struc = conf.getStructure(r2); Rotation rotation = Rotation.fromDegrees(r2.nextInt(4) * 90); for(int y = conf.getSearchStart().get(r2); y > 0; y--) { diff --git a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java index 696751fd0..70e4a6f47 100644 --- a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java +++ b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java @@ -1,6 +1,6 @@ package com.dfsek.terra.procgen; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.util.Vector; import org.polydev.gaea.math.MathUtil; @@ -54,7 +54,7 @@ public class GridSpawn { * @return Vector representing spawnpoint */ public Vector getChunkSpawn(int structureChunkX, int structureChunkZ, long seed) { - Random r = new XoRoShiRo128PlusRandom(MathUtil.getCarverChunkSeed(structureChunkX, structureChunkZ, seed)); + Random r = new XoRoShiRo128PlusPlusRandom(MathUtil.getCarverChunkSeed(structureChunkX, structureChunkZ, seed)); int offsetX = r.nextInt(width); int offsetZ = r.nextInt(width); int sx = structureChunkX * (width + 2 * separation) + offsetX; diff --git a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java index da4fa10e6..65ce8f51a 100644 --- a/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java +++ b/src/main/java/com/dfsek/terra/structure/features/EntityFeature.java @@ -4,7 +4,7 @@ import com.dfsek.terra.Debug; import com.dfsek.terra.structure.Rotation; import com.dfsek.terra.structure.Structure; import com.dfsek.terra.structure.StructureInfo; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.apache.commons.math3.util.FastMath; import org.bukkit.Chunk; import org.bukkit.Location; @@ -56,7 +56,7 @@ public class EntityFeature implements Feature { @Override public void apply(Structure structure, Rotation r, Location l, Chunk chunk) { - Random random = new XoRoShiRo128PlusRandom(MathUtil.getCarverChunkSeed(chunk.getX(), chunk.getZ(), chunk.getWorld().getSeed())); + Random random = new XoRoShiRo128PlusPlusRandom(MathUtil.getCarverChunkSeed(chunk.getX(), chunk.getZ(), chunk.getWorld().getSeed())); for(Location attempt : getLocations(structure, r, l, random, amount.get(random))) { if(!isInChunk(chunk, attempt)) continue; // Don't attempt spawn if not in current chunk. attemptSpawn(attempt, l); diff --git a/src/main/java/com/dfsek/terra/util/DataUtil.java b/src/main/java/com/dfsek/terra/util/DataUtil.java index c02dec1eb..b2091c6a1 100644 --- a/src/main/java/com/dfsek/terra/util/DataUtil.java +++ b/src/main/java/com/dfsek/terra/util/DataUtil.java @@ -1,17 +1,15 @@ package com.dfsek.terra.util; -import it.unimi.dsi.util.XoRoShiRo128PlusRandom; +import it.unimi.dsi.util.XoRoShiRo128PlusPlusRandom; import org.bukkit.Material; import org.bukkit.block.data.BlockData; import org.polydev.gaea.world.palette.Palette; import org.polydev.gaea.world.palette.RandomPalette; -import java.util.Random; - public final class DataUtil { public static final BlockData STONE = Material.STONE.createBlockData(); public static final BlockData SNOW = Material.SNOW.createBlockData(); public static final BlockData WATER = Material.WATER.createBlockData(); public static final BlockData AIR = Material.AIR.createBlockData(); - public static final Palette BLANK_PALETTE = new RandomPalette(new XoRoShiRo128PlusRandom(2403)).add(AIR, 1); + public static final Palette BLANK_PALETTE = new RandomPalette(new XoRoShiRo128PlusPlusRandom(2403)).add(AIR, 1); }