diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandStudio.java b/core/src/main/java/com/volmit/iris/core/commands/CommandStudio.java index a81e473e6..6ebb7bac1 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandStudio.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandStudio.java @@ -370,7 +370,7 @@ public class CommandStudio implements DecreeExecutor { int d = radius * 2; KMap data = new KMap<>(); engine.getDimension().getRegions().forEach(key -> data.put(key, new AtomicInteger(0))); - var multiBurst = new MultiBurst("Region Sampler", Thread.MIN_PRIORITY); + var multiBurst = new MultiBurst("Region Sampler"); var executor = multiBurst.burst(radius * radius); sender.sendMessage(C.GRAY + "Generating data..."); var loc = player.getLocation(); diff --git a/core/src/main/java/com/volmit/iris/engine/IrisComplex.java b/core/src/main/java/com/volmit/iris/engine/IrisComplex.java index 1ce21d29d..9435dc822 100644 --- a/core/src/main/java/com/volmit/iris/engine/IrisComplex.java +++ b/core/src/main/java/com/volmit/iris/engine/IrisComplex.java @@ -116,6 +116,7 @@ public class IrisComplex implements DataProvider { .getAllBiomes(this) .forEach(this::registerGenerators)); } + boolean legacy = engine.getDimension().isLegacyRarity(); overlayStream = ProceduralStream.ofDouble((x, z) -> 0.0D).waste("Overlay Stream"); engine.getDimension().getOverlayNoise().forEach(i -> overlayStream = overlayStream.add((x, z) -> i.get(rng, getData(), x, z))); rockStream = engine.getDimension().getRockPalette().getLayerGenerator(rng.nextParallelRNG(45), data).stream() @@ -129,7 +130,7 @@ public class IrisComplex implements DataProvider { ProceduralStream.of((x, z) -> focusRegion, Interpolated.of(a -> 0D, a -> focusRegion)) : regionStyleStream - .selectRarity(data.getRegionLoader().loadAll(engine.getDimension().getRegions())) + .selectRarity(data.getRegionLoader().loadAll(engine.getDimension().getRegions()), legacy) .cache2D("regionStream", engine, cacheSize).waste("Region Stream"); regionIDStream = regionIdentityStream.convertCached((i) -> new UUID(Double.doubleToLongBits(i), String.valueOf(i * 38445).hashCode() * 3245556666L)).waste("Region ID Stream"); @@ -138,7 +139,7 @@ public class IrisComplex implements DataProvider { -> engine.getDimension().getCaveBiomeStyle().create(rng.nextParallelRNG(InferredType.CAVE.ordinal()), getData()).stream() .zoom(engine.getDimension().getBiomeZoom()) .zoom(r.getCaveBiomeZoom()) - .selectRarity(data.getBiomeLoader().loadAll(r.getCaveBiomes())) + .selectRarity(data.getBiomeLoader().loadAll(r.getCaveBiomes()), legacy) .onNull(emptyBiome) ).convertAware2D(ProceduralStream::get).cache2D("caveBiomeStream", engine, cacheSize).waste("Cave Biome Stream"); inferredStreams.put(InferredType.CAVE, caveBiomeStream); @@ -148,7 +149,7 @@ public class IrisComplex implements DataProvider { .zoom(engine.getDimension().getBiomeZoom()) .zoom(engine.getDimension().getLandZoom()) .zoom(r.getLandBiomeZoom()) - .selectRarity(data.getBiomeLoader().loadAll(r.getLandBiomes(), (t) -> t.setInferredType(InferredType.LAND))) + .selectRarity(data.getBiomeLoader().loadAll(r.getLandBiomes(), (t) -> t.setInferredType(InferredType.LAND)), legacy) ).convertAware2D(ProceduralStream::get) .cache2D("landBiomeStream", engine, cacheSize).waste("Land Biome Stream"); inferredStreams.put(InferredType.LAND, landBiomeStream); @@ -158,7 +159,7 @@ public class IrisComplex implements DataProvider { .zoom(engine.getDimension().getBiomeZoom()) .zoom(engine.getDimension().getSeaZoom()) .zoom(r.getSeaBiomeZoom()) - .selectRarity(data.getBiomeLoader().loadAll(r.getSeaBiomes(), (t) -> t.setInferredType(InferredType.SEA))) + .selectRarity(data.getBiomeLoader().loadAll(r.getSeaBiomes(), (t) -> t.setInferredType(InferredType.SEA)), legacy) ).convertAware2D(ProceduralStream::get) .cache2D("seaBiomeStream", engine, cacheSize).waste("Sea Biome Stream"); inferredStreams.put(InferredType.SEA, seaBiomeStream); @@ -167,7 +168,7 @@ public class IrisComplex implements DataProvider { -> engine.getDimension().getShoreBiomeStyle().create(rng.nextParallelRNG(InferredType.SHORE.ordinal()), getData()).stream() .zoom(engine.getDimension().getBiomeZoom()) .zoom(r.getShoreBiomeZoom()) - .selectRarity(data.getBiomeLoader().loadAll(r.getShoreBiomes(), (t) -> t.setInferredType(InferredType.SHORE))) + .selectRarity(data.getBiomeLoader().loadAll(r.getShoreBiomes(), (t) -> t.setInferredType(InferredType.SHORE)), legacy) ).convertAware2D(ProceduralStream::get).cache2D("shoreBiomeStream", engine, cacheSize).waste("Shore Biome Stream"); inferredStreams.put(InferredType.SHORE, shoreBiomeStream); bridgeStream = focusBiome != null ? ProceduralStream.of((x, z) -> focusBiome.getInferredType(), diff --git a/core/src/main/java/com/volmit/iris/engine/object/IRare.java b/core/src/main/java/com/volmit/iris/engine/object/IRare.java index f010046d4..f78931830 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IRare.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IRare.java @@ -25,9 +25,9 @@ import com.volmit.iris.util.stream.interpolation.Interpolated; import java.util.List; public interface IRare { - static ProceduralStream stream(ProceduralStream noise, List possibilities) { - return ProceduralStream.of((x, z) -> pick(possibilities, noise.get(x, z)), - (x, y, z) -> pick(possibilities, noise.get(x, y, z)), + static ProceduralStream stream(ProceduralStream noise, List possibilities, boolean legacyRarity) { + return ProceduralStream.of(legacyRarity ? (x, z) -> pickLegacy(possibilities, noise.get(x, z)) : (x, z) -> pick(possibilities, noise.get(x, z)), + legacyRarity ? (x, y, z) -> pickLegacy(possibilities, noise.get(x, y, z)) : (x, y, z) -> pick(possibilities, noise.get(x, y, z)), new Interpolated() { @Override public double toDouble(T t) { diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java b/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java index 704d0b014..2d7917a6d 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java @@ -257,6 +257,8 @@ public class IrisDimension extends IrisRegistrant { @RegistryListResource(IrisScript.class) @ArrayType(type = String.class, min = 1) private KList dataScripts = new KList<>(); + @Desc("Use legacy rarity instead of modern one\nWARNING: Changing this may break expressions and image maps") + private boolean legacyRarity = true; public int getMaxHeight() { return (int) getDimensionHeight().getMax(); diff --git a/core/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java b/core/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java index e860f299a..539a0f224 100644 --- a/core/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java +++ b/core/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java @@ -336,6 +336,7 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated { } @SuppressWarnings("unchecked") + @Deprecated(forRemoval = true) default ProceduralStream selectRarity(V... types) { KList rarityTypes = new KList<>(); int totalRarity = 0; @@ -350,16 +351,16 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated { return new SelectionStream(this, rarityTypes); } - default ProceduralStream selectRarity(List types) { - return IRare.stream(this.forceDouble(), types); + default ProceduralStream selectRarity(List types, boolean legacy) { + return IRare.stream(this.forceDouble(), types, legacy); } - default ProceduralStream selectRarity(List types, Function loader) { + default ProceduralStream selectRarity(List types, Function loader, boolean legacy) { List r = new ArrayList<>(); for (V f : types) { r.add(loader.apply(f)); } - return selectRarity(r); + return selectRarity(r, legacy); } default int countPossibilities(List types, Function loader) {