9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2025-12-28 11:39:07 +00:00

Objectify objects

This commit is contained in:
Daniel Mills
2021-08-04 18:30:58 -04:00
parent 77f8f11d99
commit f640abda91
214 changed files with 1164 additions and 940 deletions

View File

@@ -25,8 +25,16 @@ import com.volmit.iris.engine.actuator.IrisTerrainNormalActuator;
import com.volmit.iris.engine.data.DataProvider;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.modifier.IrisCaveModifier;
import com.volmit.iris.engine.object.biome.InferredType;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.decoration.IrisDecorationPart;
import com.volmit.iris.engine.object.decoration.IrisDecorator;
import com.volmit.iris.engine.object.dimensional.IrisTerrainMode;
import com.volmit.iris.engine.object.feature.IrisFeaturePositional;
import com.volmit.iris.engine.object.noise.LoaderGenerator;
import com.volmit.iris.engine.object.noise.IrisInterpolator;
import com.volmit.iris.engine.object.regional.LoaderRegion;
import com.volmit.iris.util.noise.CNG;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.engine.object.common.CaveResult;
import com.volmit.iris.util.stream.ProceduralStream;
import com.volmit.iris.util.stream.interpolation.Interpolated;
@@ -47,9 +55,9 @@ public class IrisComplex implements DataProvider {
private RNG rng;
private double fluidHeight;
private IrisData data;
private KList<IrisGenerator> generators;
private KList<LoaderGenerator> generators;
private static final BlockData AIR = Material.AIR.createBlockData();
private ProceduralStream<IrisRegion> regionStream;
private ProceduralStream<LoaderRegion> regionStream;
private ProceduralStream<Double> regionStyleStream;
private ProceduralStream<Double> regionIdentityStream;
private ProceduralStream<UUID> regionIDStream;
@@ -57,14 +65,14 @@ public class IrisComplex implements DataProvider {
private ProceduralStream<Double> islandHeightStream;
private ProceduralStream<Double> islandDepthStream;
private ProceduralStream<InferredType> bridgeStream;
private ProceduralStream<IrisBiome> landBiomeStream;
private ProceduralStream<IrisBiome> caveBiomeStream;
private ProceduralStream<IrisBiome> seaBiomeStream;
private ProceduralStream<IrisBiome> shoreBiomeStream;
private ProceduralStream<IrisBiome> baseBiomeStream;
private ProceduralStream<LoaderBiome> landBiomeStream;
private ProceduralStream<LoaderBiome> caveBiomeStream;
private ProceduralStream<LoaderBiome> seaBiomeStream;
private ProceduralStream<LoaderBiome> shoreBiomeStream;
private ProceduralStream<LoaderBiome> baseBiomeStream;
private ProceduralStream<UUID> baseBiomeIDStream;
private ProceduralStream<IrisBiome> trueBiomeStream;
private ProceduralStream<IrisBiome> trueBiomeStreamNoFeatures;
private ProceduralStream<LoaderBiome> trueBiomeStream;
private ProceduralStream<LoaderBiome> trueBiomeStreamNoFeatures;
private ProceduralStream<Biome> trueBiomeDerivativeStream;
private ProceduralStream<Double> heightStream;
private ProceduralStream<Double> heightStreamNoFeatures;
@@ -87,9 +95,9 @@ public class IrisComplex implements DataProvider {
private ProceduralStream<IrisDecorator> shoreSurfaceDecoration;
private ProceduralStream<BlockData> rockStream;
private ProceduralStream<BlockData> fluidStream;
private IrisBiome focus;
private LoaderBiome focus;
public ProceduralStream<IrisBiome> getBiomeStream(InferredType type) {
public ProceduralStream<LoaderBiome> getBiomeStream(InferredType type) {
switch (type) {
case CAVE:
return caveBiomeStream;
@@ -115,7 +123,7 @@ public class IrisComplex implements DataProvider {
public IrisComplex(Engine engine, boolean simple) {
int cacheSize = 131072;
IrisBiome emptyBiome = new IrisBiome();
LoaderBiome emptyBiome = new LoaderBiome();
UUID focusUUID = UUID.nameUUIDFromBytes("focus".getBytes());
this.rng = new RNG(engine.getWorld().seed());
this.data = engine.getData();
@@ -123,13 +131,13 @@ public class IrisComplex implements DataProvider {
fluidHeight = engine.getDimension().getFluidHeight();
generators = new KList<>();
focus = engine.getFocus();
KMap<InferredType, ProceduralStream<IrisBiome>> inferredStreams = new KMap<>();
KMap<InferredType, ProceduralStream<LoaderBiome>> inferredStreams = new KMap<>();
if (focus != null) {
focus.setInferredType(InferredType.LAND);
}
IrisRegion focusRegion = focus != null ? findRegion(focus, engine) : null;
LoaderRegion focusRegion = focus != null ? findRegion(focus, engine) : null;
RNG rng = new RNG(engine.getWorld().seed());
//@builder
engine.getDimension().getRegions().forEach((i) -> data.getRegionLoader().load(i)
@@ -211,11 +219,11 @@ public class IrisComplex implements DataProvider {
bridgeStream.convertAware2D((t, x, z) -> inferredStreams.get(t).get(x, z))
.convertAware2D(this::implode).cache2D(cacheSize);
heightStream = ProceduralStream.of((x, z) -> {
IrisBiome b = focus != null ? focus : baseBiomeStream.get(x, z);
LoaderBiome b = focus != null ? focus : baseBiomeStream.get(x, z);
return getHeight(engine, b, x, z, engine.getWorld().seed(), true);
}, Interpolated.DOUBLE).clamp(0, engine.getHeight()).cache2D(cacheSize);
heightStreamNoFeatures = ProceduralStream.of((x, z) -> {
IrisBiome b = focus != null ? focus : baseBiomeStream.get(x, z);
LoaderBiome b = focus != null ? focus : baseBiomeStream.get(x, z);
return getHeight(engine, b, x, z, engine.getWorld().seed(), false);
}, Interpolated.DOUBLE).clamp(0, engine.getHeight()).cache2D(cacheSize);
slopeStream = heightStream.slope(3).cache2D(cacheSize);
@@ -234,7 +242,7 @@ public class IrisComplex implements DataProvider {
trueBiomeStream = focus != null ? ProceduralStream.of((x, y) -> focus, Interpolated.of(a -> 0D,
b -> focus)).convertAware2D((b, x, z) -> {
for (IrisFeaturePositional i : engine.getFramework().getEngineParallax().forEachFeature(x, z)) {
IrisBiome bx = i.filter(x, z, b, rng);
LoaderBiome bx = i.filter(x, z, b, rng);
if (bx != null) {
bx.setInferredType(b.getInferredType());
@@ -250,7 +258,7 @@ public class IrisComplex implements DataProvider {
regionStream.get(x, z), x, z, fluidHeight))
.convertAware2D((b, x, z) -> {
for (IrisFeaturePositional i : engine.getFramework().getEngineParallax().forEachFeature(x, z)) {
IrisBiome bx = i.filter(x, z, b, rng);
LoaderBiome bx = i.filter(x, z, b, rng);
if (bx != null) {
bx.setInferredType(b.getInferredType());
@@ -264,7 +272,7 @@ public class IrisComplex implements DataProvider {
trueBiomeStream = focus != null ? ProceduralStream.of((x, y) -> focus, Interpolated.of(a -> 0D,
b -> focus)).convertAware2D((b, x, z) -> {
for (IrisFeaturePositional i : engine.getFramework().getEngineParallax().forEachFeature(x, z)) {
IrisBiome bx = i.filter(x, z, b, rng);
LoaderBiome bx = i.filter(x, z, b, rng);
if (bx != null) {
bx.setInferredType(b.getInferredType());
@@ -280,7 +288,7 @@ public class IrisComplex implements DataProvider {
regionStream.get(x, z), x, z, fluidHeight))
.convertAware2D((b, x, z) -> {
for (IrisFeaturePositional i : engine.getFramework().getEngineParallax().forEachFeature(x, z)) {
IrisBiome bx = i.filter(x, z, b, rng);
LoaderBiome bx = i.filter(x, z, b, rng);
if (bx != null) {
bx.setInferredType(b.getInferredType());
@@ -298,23 +306,23 @@ public class IrisComplex implements DataProvider {
fixBiomeType(h, baseBiomeStream.get(x, z),
regionStream.get(x, z), x, z, fluidHeight))
.cache2D(cacheSize);
trueBiomeDerivativeStream = trueBiomeStream.convert(IrisBiome::getDerivative).cache2D(cacheSize);
trueBiomeDerivativeStream = trueBiomeStream.convert(LoaderBiome::getDerivative).cache2D(cacheSize);
heightFluidStream = heightStream.max(fluidHeight).cache2D(cacheSize);
maxHeightStream = ProceduralStream.ofDouble((x, z) -> height);
terrainSurfaceDecoration = trueBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.NONE)).cache2D(cacheSize);
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.NONE)).cache2D(cacheSize);
terrainCeilingDecoration = trueBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.CEILING)).cache2D(cacheSize);
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.CEILING)).cache2D(cacheSize);
terrainCaveSurfaceDecoration = caveBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.NONE)).cache2D(cacheSize);
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.NONE)).cache2D(cacheSize);
terrainCaveCeilingDecoration = caveBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.CEILING)).cache2D(cacheSize);
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.CEILING)).cache2D(cacheSize);
shoreSurfaceDecoration = trueBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.SHORE_LINE)).cache2D(cacheSize);
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.SHORE_LINE)).cache2D(cacheSize);
seaSurfaceDecoration = trueBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.SEA_SURFACE)).cache2D(cacheSize);
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.SEA_SURFACE)).cache2D(cacheSize);
seaFloorDecoration = trueBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.SEA_FLOOR)).cache2D(cacheSize);
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.SEA_FLOOR)).cache2D(cacheSize);
trueHeightStream = ProceduralStream.of((x, z) -> {
int rx = (int) Math.round(engine.modifyX(x));
int rz = (int) Math.round(engine.modifyZ(z));
@@ -375,8 +383,8 @@ public class IrisComplex implements DataProvider {
});
}
private IrisRegion findRegion(IrisBiome focus, Engine engine) {
for (IrisRegion i : engine.getDimension().getAllRegions(engine)) {
private LoaderRegion findRegion(LoaderBiome focus, Engine engine) {
for (LoaderRegion i : engine.getDimension().getAllRegions(engine)) {
if (i.getAllBiomeIds().contains(focus.getLoadKey())) {
return i;
}
@@ -385,7 +393,7 @@ public class IrisComplex implements DataProvider {
return null;
}
private IrisDecorator decorateFor(IrisBiome b, double x, double z, DecorationPart part) {
private IrisDecorator decorateFor(LoaderBiome b, double x, double z, IrisDecorationPart part) {
RNG rngc = chunkRngStream.get(x, z);
for (IrisDecorator i : b.getDecorators()) {
@@ -403,7 +411,7 @@ public class IrisComplex implements DataProvider {
return null;
}
private IrisBiome fixBiomeType(Double height, IrisBiome biome, IrisRegion region, Double x, Double z, double fluidHeight) {
private LoaderBiome fixBiomeType(Double height, LoaderBiome biome, LoaderRegion region, Double x, Double z, double fluidHeight) {
double sh = region.getShoreHeight(x, z);
if (height >= fluidHeight - 1 && height <= fluidHeight + sh && !biome.isShore()) {
@@ -425,14 +433,14 @@ public class IrisComplex implements DataProvider {
return biome;
}
private double getHeight(Engine engine, IrisBiome b, double x, double z, long seed, boolean features) {
private double getHeight(Engine engine, LoaderBiome b, double x, double z, long seed, boolean features) {
double h = 0;
for (IrisGenerator gen : generators) {
for (LoaderGenerator gen : generators) {
h += gen.getInterpolator().interpolate(x, z, (xx, zz) ->
{
try {
IrisBiome bx = baseBiomeStream.get(xx, zz);
LoaderBiome bx = baseBiomeStream.get(xx, zz);
return M.lerp(bx.getGenLinkMin(gen.getLoadKey()),
bx.getGenLinkMax(gen.getLoadKey()),
@@ -460,8 +468,8 @@ public class IrisComplex implements DataProvider {
return Math.min(engine.getHeight(), Math.max(noise.get(), 0));
}
private void registerGenerator(IrisGenerator cachedGenerator) {
for (IrisGenerator i : generators) {
private void registerGenerator(LoaderGenerator cachedGenerator) {
for (LoaderGenerator i : generators) {
if (i.getLoadKey().equals(cachedGenerator.getLoadKey())) {
return;
}
@@ -470,7 +478,7 @@ public class IrisComplex implements DataProvider {
generators.add(cachedGenerator);
}
private IrisBiome implode(IrisBiome b, Double x, Double z) {
private LoaderBiome implode(LoaderBiome b, Double x, Double z) {
if (b.getChildren().isEmpty()) {
return b;
}
@@ -478,7 +486,7 @@ public class IrisComplex implements DataProvider {
return implode(b, x, z, 3);
}
private IrisBiome implode(IrisBiome b, Double x, Double z, int max) {
private LoaderBiome implode(LoaderBiome b, Double x, Double z, int max) {
if (max < 0) {
return b;
}
@@ -488,9 +496,9 @@ public class IrisComplex implements DataProvider {
}
CNG childCell = b.getChildrenGenerator(rng, 123, b.getChildShrinkFactor());
KList<IrisBiome> chx = b.getRealChildren(this).copy();
KList<LoaderBiome> chx = b.getRealChildren(this).copy();
chx.add(b);
IrisBiome biome = childCell.fitRarity(chx, x, z);
LoaderBiome biome = childCell.fitRarity(chx, x, z);
biome.setInferredType(b.getInferredType());
return implode(biome, x, z, max - 1);
}

View File

@@ -22,13 +22,13 @@ import com.google.gson.Gson;
import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.core.events.IrisEngineHotloadEvent;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.framework.*;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisBiomePaletteLayer;
import com.volmit.iris.engine.object.IrisDecorator;
import com.volmit.iris.engine.object.IrisObjectPlacement;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.biome.IrisBiomePaletteLayer;
import com.volmit.iris.engine.object.decoration.IrisDecorator;
import com.volmit.iris.engine.object.objects.IrisObjectPlacement;
import com.volmit.iris.engine.object.engine.IrisEngineData;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KMap;
@@ -142,7 +142,7 @@ public class IrisEngine extends BlockPopulator implements Engine {
}
private void computeBiomeMaxes() {
for (IrisBiome i : getDimension().getAllBiomes(this)) {
for (LoaderBiome i : getDimension().getAllBiomes(this)) {
double density = 0;
for (IrisObjectPlacement j : i.getObjects()) {
@@ -257,7 +257,7 @@ public class IrisEngine extends BlockPopulator implements Engine {
}
@Override
public IrisBiome getFocus() {
public LoaderBiome getFocus() {
if (getDimension().getFocus() == null || getDimension().getFocus().trim().isEmpty()) {
return null;
}

View File

@@ -26,9 +26,9 @@ import com.volmit.iris.engine.framework.EngineCompound;
import com.volmit.iris.engine.framework.EngineData;
import com.volmit.iris.engine.framework.EngineTarget;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.object.IrisDimensionIndex;
import com.volmit.iris.engine.object.IrisPosition;
import com.volmit.iris.engine.object.dimensional.LoaderDimension;
import com.volmit.iris.engine.object.dimensional.IrisDimensionIndex;
import com.volmit.iris.engine.object.basic.IrisPosition;
import com.volmit.iris.engine.object.common.IrisWorld;
import com.volmit.iris.util.parallel.MultiBurst;
import com.volmit.iris.util.atomics.AtomicRollingSequence;
@@ -71,7 +71,7 @@ public class IrisEngineCompound implements EngineCompound {
private final KList<BlockPopulator> populators;
@Getter
private final IrisDimension rootDimension;
private final LoaderDimension rootDimension;
@Getter
private final int threadCount = -1;
@@ -80,7 +80,7 @@ public class IrisEngineCompound implements EngineCompound {
@Setter
private boolean studio;
public IrisEngineCompound(IrisWorld world, IrisDimension rootDimension, IrisData data, int maximumThreads) {
public IrisEngineCompound(IrisWorld world, LoaderDimension rootDimension, IrisData data, int maximumThreads) {
wallClock = new AtomicRollingSequence(32);
this.rootDimension = rootDimension;
Iris.info("Initializing Engine Composite for " + world.name());
@@ -115,7 +115,7 @@ public class IrisEngineCompound implements EngineCompound {
for (int i = 0; i < engines.length; i++) {
IrisDimensionIndex index = rootDimension.getDimensionalComposite().get(i);
IrisDimension dimension = data.getDimensionLoader().load(index.getDimension());
LoaderDimension dimension = data.getDimensionLoader().load(index.getDimension());
// TODO: WARNING HEIGHT
engines[i] = new IrisEngine(new EngineTarget(world, dimension, data.copy(), (int) Math.floor(256D * (index.getWeight() / totalWeight)), index.isInverted(), threadDist), this, i);
engines[i].setMinHeight(buf);

View File

@@ -19,13 +19,17 @@
package com.volmit.iris.engine;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.cache.Cache;
import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.EngineAssignedWorldManager;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.block.IrisBlockDrops;
import com.volmit.iris.engine.object.common.IRare;
import com.volmit.iris.engine.object.engine.IrisEngineData;
import com.volmit.iris.engine.object.engine.IrisEngineSpawnerCooldown;
import com.volmit.iris.engine.object.entity.IrisEntitySpawn;
import com.volmit.iris.engine.object.regional.LoaderRegion;
import com.volmit.iris.engine.object.spawners.LoaderSpawner;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.format.Form;
@@ -44,7 +48,6 @@ import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.inventory.ItemStack;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -162,8 +165,8 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
}
Chunk c = cc[RNG.r.nextInt(cc.length)];
IrisBiome biome = getEngine().getSurfaceBiome(c);
IrisRegion region = getEngine().getRegion(c);
LoaderBiome biome = getEngine().getSurfaceBiome(c);
LoaderRegion region = getEngine().getRegion(c);
spawnIn(c, biome, region, maxGroups);
chunkCooldowns.put(Cache.key(c), M.ms());
}
@@ -176,7 +179,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
energy = M.clip(energy, 1D, 1000D);
}
private void spawnIn(Chunk c, IrisBiome biome, IrisRegion region, int max) {
private void spawnIn(Chunk c, LoaderBiome biome, LoaderRegion region, int max) {
for(Entity i : c.getEntities())
{
if(i instanceof LivingEntity)
@@ -218,7 +221,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
}
}
private Stream<IrisEntitySpawn> stream(IrisSpawner s) {
private Stream<IrisEntitySpawn> stream(LoaderSpawner s) {
for (IrisEntitySpawn i : s.getSpawns()) {
i.setReferenceSpawner(s);
}
@@ -240,12 +243,12 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
return rarityTypes;
}
public boolean canSpawn(IrisSpawner i) {
public boolean canSpawn(LoaderSpawner i) {
return i.isValid(getEngine().getWorld().realWorld())
&& getCooldown(i).canSpawn(i.getMaximumRate());
}
private IrisEngineSpawnerCooldown getCooldown(IrisSpawner i) {
private IrisEngineSpawnerCooldown getCooldown(LoaderSpawner i) {
IrisEngineData ed = getEngine().getEngineData();
IrisEngineSpawnerCooldown cd = null;
@@ -295,7 +298,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
if (e.getBlock().getWorld().equals(getTarget().getWorld().realWorld()) && getEngine().contains(e.getBlock().getLocation())) {
KList<ItemStack> d = new KList<>();
Runnable drop = () -> J.s(() -> d.forEach((i) -> e.getBlock().getWorld().dropItemNaturally(e.getBlock().getLocation().clone().add(0.5, 0.5, 0.5), i)));
IrisBiome b = getEngine().getBiome(e.getBlock().getLocation());
LoaderBiome b = getEngine().getBiome(e.getBlock().getLocation());
for (IrisBlockDrops i : b.getBlockDrops()) {
if (i.shouldDropFor(e.getBlock().getBlockData(), getData())) {
@@ -312,7 +315,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
}
}
IrisRegion r = getEngine().getRegion(e.getBlock().getLocation());
LoaderRegion r = getEngine().getRegion(e.getBlock().getLocation());
for (IrisBlockDrops i : r.getBlockDrops()) {
if (i.shouldDropFor(e.getBlock().getBlockData(), getData())) {

View File

@@ -25,8 +25,8 @@ import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.EngineAssignedActuator;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.util.hunk.view.BiomeGridHunkView;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisBiomeCustom;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.biome.IrisBiomeCustom;
import com.volmit.iris.util.documentation.BlockCoordinates;
import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
@@ -66,7 +66,7 @@ public class IrisBiomeActuator extends EngineAssignedActuator<Biome> {
public void onActuate(int x, int z, Hunk<Biome> h, boolean multicore) {
PrecisionStopwatch p = PrecisionStopwatch.start();
int zf, maxHeight;
IrisBiome ib;
LoaderBiome ib;
for (int xf = 0; xf < h.getWidth(); xf++) {
for (zf = 0; zf < h.getDepth(); zf++) {

View File

@@ -23,8 +23,8 @@ import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.EngineAssignedActuator;
import com.volmit.iris.engine.framework.EngineDecorator;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisCaveLayer;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.carve.IrisCaveLayer;
import com.volmit.iris.util.documentation.BlockCoordinates;
import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
@@ -88,7 +88,7 @@ public class IrisDecorantActuator extends EngineAssignedActuator<BlockData> {
PrecisionStopwatch p = PrecisionStopwatch.start();
int j, realX, realZ, height;
IrisBiome biome, cave;
LoaderBiome biome, cave;
for (int i = 0; i < output.getWidth(); i++) {

View File

@@ -21,7 +21,7 @@ package com.volmit.iris.engine.actuator;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.EngineAssignedActuator;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.documentation.BlockCoordinates;
import com.volmit.iris.util.math.RNG;
@@ -56,7 +56,7 @@ public class IrisTerrainIslandActuator extends EngineAssignedActuator<BlockData>
public void onActuate(int x, int z, Hunk<BlockData> h, boolean multicore) {
PrecisionStopwatch p = PrecisionStopwatch.start();
int i, zf, depth, surface, realX, realZ;
IrisBiome biome;
LoaderBiome biome;
KList<BlockData> blocks, fblocks;
int hi, lo;
double hh;

View File

@@ -21,7 +21,7 @@ package com.volmit.iris.engine.actuator;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.EngineAssignedActuator;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.util.parallel.BurstExecutor;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.documentation.BlockCoordinates;
@@ -82,7 +82,7 @@ public class IrisTerrainNormalActuator extends EngineAssignedActuator<BlockData>
@BlockCoordinates
public void terrainSliver(int x, int z, int xf, Hunk<BlockData> h) {
int i, depth, realX, realZ, hf, he, b, fdepth;
IrisBiome biome;
LoaderBiome biome;
KList<BlockData> blocks, fblocks;
for (int zf = 0; zf < h.getDepth(); zf++) {

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.cache;
package com.volmit.iris.engine.data.cache;
import com.volmit.iris.util.math.M;
import com.volmit.iris.util.scheduling.IrisLock;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.cache;
package com.volmit.iris.engine.data.cache;
import org.bukkit.Chunk;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.cache;
package com.volmit.iris.engine.data.cache;
public interface Multicache {
<V> Cache<V> getCache(int id);

View File

@@ -20,7 +20,7 @@ package com.volmit.iris.engine.data.mca;
import com.volmit.iris.Iris;
import com.volmit.iris.core.nms.INMS;
import com.volmit.iris.engine.cache.Cache;
import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.data.B;
import com.volmit.iris.engine.data.nbt.tag.CompoundTag;
import com.volmit.iris.engine.data.nbt.tag.StringTag;

View File

@@ -18,23 +18,23 @@
package com.volmit.iris.engine.decorator;
import com.volmit.iris.engine.cache.Cache;
import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.DecorationPart;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisDecorator;
import com.volmit.iris.engine.object.decoration.IrisDecorationPart;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.decoration.IrisDecorator;
import com.volmit.iris.util.documentation.BlockCoordinates;
import org.bukkit.block.data.BlockData;
public class IrisCeilingDecorator extends IrisEngineDecorator {
public IrisCeilingDecorator(Engine engine) {
super(engine, "Ceiling", DecorationPart.CEILING);
super(engine, "Ceiling", IrisDecorationPart.CEILING);
}
@BlockCoordinates
@Override
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, LoaderBiome biome, int height, int max) {
IrisDecorator decorator = getDecorator(biome, realX, realZ);
if (decorator != null) {

View File

@@ -19,13 +19,13 @@
package com.volmit.iris.engine.decorator;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.cache.Cache;
import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.EngineAssignedComponent;
import com.volmit.iris.engine.framework.EngineDecorator;
import com.volmit.iris.engine.object.DecorationPart;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisDecorator;
import com.volmit.iris.engine.object.decoration.IrisDecorationPart;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.decoration.IrisDecorator;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.math.RNG;
import lombok.Getter;
@@ -36,15 +36,15 @@ public abstract class IrisEngineDecorator extends EngineAssignedComponent implem
private final RNG rng;
@Getter
private final DecorationPart part;
private final IrisDecorationPart part;
public IrisEngineDecorator(Engine engine, String name, DecorationPart part) {
public IrisEngineDecorator(Engine engine, String name, IrisDecorationPart part) {
super(engine, name + " Decorator");
this.part = part;
this.rng = new RNG(getSeed() + 29356788 - (part.ordinal() * 10439677L));
}
protected IrisDecorator getDecorator(IrisBiome biome, double realX, double realZ) {
protected IrisDecorator getDecorator(LoaderBiome biome, double realX, double realZ) {
KList<IrisDecorator> v = new KList<>();
RNG rng = new RNG(Cache.key((int) realX, (int) realZ));

View File

@@ -18,23 +18,23 @@
package com.volmit.iris.engine.decorator;
import com.volmit.iris.engine.cache.Cache;
import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.DecorationPart;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisDecorator;
import com.volmit.iris.engine.object.decoration.IrisDecorationPart;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.decoration.IrisDecorator;
import com.volmit.iris.util.documentation.BlockCoordinates;
import org.bukkit.block.data.BlockData;
public class IrisSeaFloorDecorator extends IrisEngineDecorator {
public IrisSeaFloorDecorator(Engine engine) {
super(engine, "Sea Floor", DecorationPart.SEA_FLOOR);
super(engine, "Sea Floor", IrisDecorationPart.SEA_FLOOR);
}
@BlockCoordinates
@Override
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, LoaderBiome biome, int height, int max) {
IrisDecorator decorator = getDecorator(biome, realX, realZ);
if (decorator != null) {

View File

@@ -18,23 +18,23 @@
package com.volmit.iris.engine.decorator;
import com.volmit.iris.engine.cache.Cache;
import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.DecorationPart;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisDecorator;
import com.volmit.iris.engine.object.decoration.IrisDecorationPart;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.decoration.IrisDecorator;
import com.volmit.iris.util.documentation.BlockCoordinates;
import org.bukkit.block.data.BlockData;
public class IrisSeaSurfaceDecorator extends IrisEngineDecorator {
public IrisSeaSurfaceDecorator(Engine engine) {
super(engine, "Sea Surface", DecorationPart.SEA_SURFACE);
super(engine, "Sea Surface", IrisDecorationPart.SEA_SURFACE);
}
@BlockCoordinates
@Override
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, LoaderBiome biome, int height, int max) {
IrisDecorator decorator = getDecorator(biome, realX, realZ);
if (decorator != null) {

View File

@@ -18,23 +18,23 @@
package com.volmit.iris.engine.decorator;
import com.volmit.iris.engine.cache.Cache;
import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.DecorationPart;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisDecorator;
import com.volmit.iris.engine.object.decoration.IrisDecorationPart;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.decoration.IrisDecorator;
import com.volmit.iris.util.documentation.BlockCoordinates;
import org.bukkit.block.data.BlockData;
public class IrisShoreLineDecorator extends IrisEngineDecorator {
public IrisShoreLineDecorator(Engine engine) {
super(engine, "Shore Line", DecorationPart.SHORE_LINE);
super(engine, "Shore Line", IrisDecorationPart.SHORE_LINE);
}
@BlockCoordinates
@Override
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, LoaderBiome biome, int height, int max) {
if (height == getDimension().getFluidHeight()) {
if (Math.round(getComplex().getHeightStream().get(realX1, realZ)) < getComplex().getFluidHeight() ||

View File

@@ -19,25 +19,25 @@
package com.volmit.iris.engine.decorator;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.cache.Cache;
import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.DecorationPart;
import com.volmit.iris.engine.object.InferredType;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisDecorator;
import com.volmit.iris.engine.object.decoration.IrisDecorationPart;
import com.volmit.iris.engine.object.biome.InferredType;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.decoration.IrisDecorator;
import com.volmit.iris.util.documentation.BlockCoordinates;
import org.bukkit.block.data.Bisected;
import org.bukkit.block.data.BlockData;
public class IrisSurfaceDecorator extends IrisEngineDecorator {
public IrisSurfaceDecorator(Engine engine) {
super(engine, "Surface", DecorationPart.NONE);
super(engine, "Surface", IrisDecorationPart.NONE);
}
@BlockCoordinates
@Override
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, LoaderBiome biome, int height, int max) {
if (biome.getInferredType().equals(InferredType.SHORE) && height < getDimension().getFluidHeight()) {
return;
}

View File

@@ -22,11 +22,18 @@ import com.volmit.iris.Iris;
import com.volmit.iris.core.gui.components.RenderType;
import com.volmit.iris.core.gui.components.Renderer;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.cache.Cache;
import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.data.B;
import com.volmit.iris.engine.data.DataProvider;
import com.volmit.iris.engine.object.basic.IrisColor;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.dimensional.LoaderDimension;
import com.volmit.iris.engine.object.loot.IrisLootReference;
import com.volmit.iris.engine.object.loot.LoaderLootTable;
import com.volmit.iris.engine.object.loot.LootMode;
import com.volmit.iris.engine.object.meta.InventorySlotType;
import com.volmit.iris.engine.object.regional.LoaderRegion;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.engine.object.common.IrisWorld;
import com.volmit.iris.engine.object.engine.IrisEngineData;
import com.volmit.iris.engine.parallax.ParallaxAccess;
@@ -125,7 +132,7 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
return getTarget().getWorld();
}
default IrisDimension getDimension() {
default LoaderDimension getDimension() {
return getTarget().getDimension();
}
@@ -135,8 +142,8 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
@BlockCoordinates
default Color draw(double x, double z) {
IrisRegion region = getRegion((int) x, (int) z);
IrisBiome biome = getSurfaceBiome((int) x, (int) z);
LoaderRegion region = getRegion((int) x, (int) z);
LoaderBiome biome = getSurfaceBiome((int) x, (int) z);
int height = getHeight((int) x, (int) z);
double heightFactor = M.lerpInverse(0, getHeight(), height);
Color irc = region.getColor(this.getFramework().getComplex(), RenderType.BIOME);
@@ -150,7 +157,7 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
@BlockCoordinates
@Override
default IrisRegion getRegion(int x, int z) {
default LoaderRegion getRegion(int x, int z) {
return getFramework().getComplex().getRegionStream().get(x, z);
}
@@ -161,13 +168,13 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
@BlockCoordinates
@Override
default IrisBiome getCaveBiome(int x, int z) {
default LoaderBiome getCaveBiome(int x, int z) {
return getFramework().getComplex().getCaveBiomeStream().get(x, z);
}
@BlockCoordinates
@Override
default IrisBiome getSurfaceBiome(int x, int z) {
default LoaderBiome getSurfaceBiome(int x, int z) {
return getFramework().getComplex().getTrueBiomeStream().get(x, z);
}
@@ -255,7 +262,7 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
}
if (slot != null) {
KList<IrisLootTable> tables = getLootTables(rx, block);
KList<LoaderLootTable> tables = getLootTables(rx, block);
try {
InventoryHolder m = (InventoryHolder) block.getState();
@@ -308,7 +315,7 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
}
@Override
default void injectTables(KList<IrisLootTable> list, IrisLootReference r) {
default void injectTables(KList<LoaderLootTable> list, IrisLootReference r) {
if (r.getMode().equals(LootMode.CLEAR) || r.getMode().equals(LootMode.REPLACE)) {
list.clear();
}
@@ -318,7 +325,7 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
@BlockCoordinates
@Override
default KList<IrisLootTable> getLootTables(RNG rng, Block b) {
default KList<LoaderLootTable> getLootTables(RNG rng, Block b) {
int rx = b.getX();
int rz = b.getZ();
double he = getFramework().getComplex().getHeightStream().get(rx, rz);
@@ -326,16 +333,16 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
if (po != null && po.getPlacement() != null) {
if (B.isStorageChest(b.getBlockData())) {
IrisLootTable table = po.getPlacement().getTable(b.getBlockData(), getData());
LoaderLootTable table = po.getPlacement().getTable(b.getBlockData(), getData());
if (table != null) {
return new KList<>(table);
}
}
}
IrisRegion region = getFramework().getComplex().getRegionStream().get(rx, rz);
IrisBiome biomeSurface = getFramework().getComplex().getTrueBiomeStream().get(rx, rz);
IrisBiome biomeUnder = b.getY() < he ? getFramework().getComplex().getCaveBiomeStream().get(rx, rz) : biomeSurface;
KList<IrisLootTable> tables = new KList<>();
LoaderRegion region = getFramework().getComplex().getRegionStream().get(rx, rz);
LoaderBiome biomeSurface = getFramework().getComplex().getTrueBiomeStream().get(rx, rz);
LoaderBiome biomeUnder = b.getY() < he ? getFramework().getComplex().getCaveBiomeStream().get(rx, rz) : biomeSurface;
KList<LoaderLootTable> tables = new KList<>();
double multiplier = 1D * getDimension().getLoot().getMultiplier() * region.getLoot().getMultiplier() * biomeSurface.getLoot().getMultiplier() * biomeUnder.getLoot().getMultiplier();
injectTables(tables, getDimension().getLoot());
injectTables(tables, region.getLoot());
@@ -358,11 +365,11 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
}
@Override
default void addItems(boolean debug, Inventory inv, RNG rng, KList<IrisLootTable> tables, InventorySlotType slot, int x, int y, int z, int mgf) {
default void addItems(boolean debug, Inventory inv, RNG rng, KList<LoaderLootTable> tables, InventorySlotType slot, int x, int y, int z, int mgf) {
KList<ItemStack> items = new KList<>();
int b = 4;
for (IrisLootTable i : tables) {
for (LoaderLootTable i : tables) {
b++;
items.addAll(i.getLoot(debug, items.isEmpty(), rng, slot, x, y, z, b + b, mgf + b));
}
@@ -395,12 +402,12 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
}
@BlockCoordinates
default IrisBiome getBiome(Location l) {
default LoaderBiome getBiome(Location l) {
return getBiome(l.getBlockX(), l.getBlockY(), l.getBlockZ());
}
@BlockCoordinates
default IrisRegion getRegion(Location l) {
default LoaderRegion getRegion(Location l) {
return getRegion(l.getBlockX(), l.getBlockZ());
}
@@ -409,15 +416,15 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
return l.getBlockY() >= getMinHeight() && l.getBlockY() <= getMaxHeight();
}
IrisBiome getFocus();
LoaderBiome getFocus();
IrisEngineData getEngineData();
default IrisBiome getSurfaceBiome(Chunk c) {
default LoaderBiome getSurfaceBiome(Chunk c) {
return getSurfaceBiome((c.getX() << 4) + 8, (c.getZ() << 4) + 8);
}
default IrisRegion getRegion(Chunk c) {
default LoaderRegion getRegion(Chunk c) {
return getRegion((c.getX() << 4) + 8, (c.getZ() << 4) + 8);
}
}

View File

@@ -19,11 +19,9 @@
package com.volmit.iris.engine.framework;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.object.IrisPosition;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.math.Position2;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.entity.EnderSignal;
@@ -33,7 +31,6 @@ import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntitySpawnEvent;
import org.bukkit.event.entity.ProjectileLaunchEvent;
import org.bukkit.event.world.ChunkLoadEvent;
import org.bukkit.event.world.WorldSaveEvent;
import org.bukkit.event.world.WorldUnloadEvent;

View File

@@ -21,7 +21,7 @@ package com.volmit.iris.engine.framework;
import com.volmit.iris.Iris;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.IrisComplex;
import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.object.dimensional.LoaderDimension;
import com.volmit.iris.engine.parallax.ParallaxAccess;
import com.volmit.iris.util.math.RollingSequence;
import org.bukkit.event.Listener;
@@ -64,7 +64,7 @@ public interface EngineComponent {
return getEngine().getTarget();
}
default IrisDimension getDimension() {
default LoaderDimension getDimension() {
return getEngine().getDimension();
}

View File

@@ -30,11 +30,11 @@ import com.volmit.iris.engine.data.chunk.MCATerrainChunk;
import com.volmit.iris.engine.data.chunk.TerrainChunk;
import com.volmit.iris.engine.data.mca.NBTWorld;
import com.volmit.iris.engine.data.nbt.tag.CompoundTag;
import com.volmit.iris.engine.headless.HeadlessGenerator;
import com.volmit.iris.engine.framework.headless.HeadlessGenerator;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.object.IrisPosition;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.dimensional.LoaderDimension;
import com.volmit.iris.engine.object.basic.IrisPosition;
import com.volmit.iris.engine.object.common.IrisWorld;
import com.volmit.iris.util.parallel.BurstExecutor;
import com.volmit.iris.util.parallel.MultiBurst;
@@ -202,11 +202,11 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
return false;
}
private synchronized IrisDimension getDimension(IrisWorld world) {
private synchronized LoaderDimension getDimension(IrisWorld world) {
String query = dimensionQuery;
query = Iris.linkMultiverseCore.getWorldNameType(world.name(), query);
IrisDimension dim = null;
LoaderDimension dim = null;
if (query == null) {
File iris = new File(world.worldFolder(), "iris");
@@ -253,7 +253,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
}
if (production) {
IrisDimension od = dim;
LoaderDimension od = dim;
dim = new IrisData(getDataFolder(world)).getDimensionLoader().load(od.getLoadKey());
if (dim == null) {
@@ -270,9 +270,9 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
return dim;
}
private synchronized IrisDimension getDimension(String world) {
private synchronized LoaderDimension getDimension(String world) {
String query = dimensionQuery;
IrisDimension dim = null;
LoaderDimension dim = null;
if (query == null) {
File iris = new File(world + "/iris");
@@ -319,7 +319,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
}
if (production) {
IrisDimension od = dim;
LoaderDimension od = dim;
dim = new IrisData(getDataFolder(world)).getDimensionLoader().load(od.getLoadKey());
if (dim == null) {
@@ -345,7 +345,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
try {
initialized.set(true);
IrisDimension dim = getDimension(world);
LoaderDimension dim = getDimension(world);
IrisData data = production ? new IrisData(getDataFolder(world)) : dim.getLoader().copy();
compound.set(new IrisEngineCompound(world, dim, data, IrisSettings.getThreadCount(IrisSettings.get().getConcurrency().getEngineThreadCount())));
compound.get().setStudio(!production);
@@ -673,12 +673,12 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
}
@Override
public IrisBiome getBiome(int x, int z) {
public LoaderBiome getBiome(int x, int z) {
return getBiome(x, 0, z);
}
@Override
public IrisBiome getCaveBiome(int x, int z) {
public LoaderBiome getCaveBiome(int x, int z) {
return getCaveBiome(x, 0, z);
}
@@ -693,13 +693,13 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
}
@Override
public IrisBiome getBiome(int x, int y, int z) {
public LoaderBiome getBiome(int x, int y, int z) {
// TODO: REMOVE GET ABS BIOME OR THIS ONE
return getEngineAccess(y).getBiome(x, y - getComposite().getEngineForHeight(y).getMinHeight(), z);
}
@Override
public IrisBiome getCaveBiome(int x, int y, int z) {
public LoaderBiome getCaveBiome(int x, int y, int z) {
return getEngineAccess(y).getCaveBiome(x, z);
}
@@ -792,12 +792,12 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
return false;
}
public KList<IrisBiome> getAllBiomes(String worldName) {
public KList<LoaderBiome> getAllBiomes(String worldName) {
if (getComposite() != null) {
return getComposite().getAllBiomes();
} else {
KMap<String, IrisBiome> v = new KMap<>();
IrisDimension dim = getDimension(worldName);
KMap<String, LoaderBiome> v = new KMap<>();
LoaderDimension dim = getDimension(worldName);
dim.getAllAnyBiomes().forEach((i) -> v.put(i.getLoadKey(), i));
try {

View File

@@ -23,9 +23,9 @@ import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.actuator.IrisTerrainNormalActuator;
import com.volmit.iris.engine.data.DataProvider;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.object.IrisPosition;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.dimensional.LoaderDimension;
import com.volmit.iris.engine.object.basic.IrisPosition;
import com.volmit.iris.engine.object.common.IrisWorld;
import com.volmit.iris.util.parallel.MultiBurst;
import com.volmit.iris.util.collection.KList;
@@ -39,7 +39,7 @@ import org.bukkit.generator.BlockPopulator;
import java.util.List;
public interface EngineCompound extends Listener, Hotloadable, DataProvider {
IrisDimension getRootDimension();
LoaderDimension getRootDimension();
void generate(int x, int z, Hunk<BlockData> blocks, Hunk<BlockData> postblocks, Hunk<Biome> biomes, boolean multicore);
@@ -133,10 +133,10 @@ public interface EngineCompound extends Listener, Hotloadable, DataProvider {
Engine getDefaultEngine();
default KList<IrisBiome> getAllBiomes() {
KMap<String, IrisBiome> v = new KMap<>();
default KList<LoaderBiome> getAllBiomes() {
KMap<String, LoaderBiome> v = new KMap<>();
IrisDimension dim = getRootDimension();
LoaderDimension dim = getRootDimension();
dim.getAllBiomes(this).forEach((i) -> v.put(i.getLoadKey(), i));
try {

View File

@@ -20,7 +20,7 @@ package com.volmit.iris.engine.framework;
import com.google.gson.Gson;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.object.IrisPosition;
import com.volmit.iris.engine.object.basic.IrisPosition;
import com.volmit.iris.util.io.IO;
import lombok.Data;

View File

@@ -20,17 +20,17 @@ package com.volmit.iris.engine.framework;
import com.volmit.iris.engine.data.B;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.util.documentation.BlockCoordinates;
import org.bukkit.block.data.BlockData;
public interface EngineDecorator extends EngineComponent {
@BlockCoordinates
void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max);
void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, LoaderBiome biome, int height, int max);
@BlockCoordinates
default void decorate(int x, int z, int realX, int realZ, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
default void decorate(int x, int z, int realX, int realZ, Hunk<BlockData> data, LoaderBiome biome, int height, int max) {
decorate(x, z, realX, realX, realX, realZ, realZ, realZ, data, biome, height, max);
}

View File

@@ -21,12 +21,24 @@ package com.volmit.iris.engine.framework;
import com.volmit.iris.Iris;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.IrisComplex;
import com.volmit.iris.engine.cache.Cache;
import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.data.B;
import com.volmit.iris.engine.data.DataProvider;
import com.volmit.iris.engine.object.basic.IrisPosition;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.biome.IrisBiomeMutation;
import com.volmit.iris.engine.object.deposits.IrisDepositGenerator;
import com.volmit.iris.engine.object.feature.IrisFeature;
import com.volmit.iris.engine.object.feature.IrisFeaturePositional;
import com.volmit.iris.engine.object.feature.IrisFeaturePotential;
import com.volmit.iris.engine.object.jigsaw.LoaderJigsawStructure;
import com.volmit.iris.engine.object.jigsaw.IrisJigsawStructurePlacement;
import com.volmit.iris.engine.object.objects.LoaderObject;
import com.volmit.iris.engine.object.objects.IrisObjectPlacement;
import com.volmit.iris.engine.object.objects.IrisObjectScale;
import com.volmit.iris.engine.object.regional.LoaderRegion;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.jigsaw.PlannedStructure;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.engine.object.common.IObjectPlacer;
import com.volmit.iris.engine.object.tile.TileData;
import com.volmit.iris.engine.parallax.ParallaxAccess;
@@ -78,8 +90,8 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
return getEngine().getFramework().getComplex();
}
default KList<IrisRegion> getAllRegions() {
KList<IrisRegion> r = new KList<>();
default KList<LoaderRegion> getAllRegions() {
KList<LoaderRegion> r = new KList<>();
for (String i : getEngine().getDimension().getRegions()) {
r.add(getEngine().getData().getRegionLoader().load(i));
@@ -96,10 +108,10 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
return r;
}
default KList<IrisBiome> getAllBiomes() {
KList<IrisBiome> r = new KList<>();
default KList<LoaderBiome> getAllBiomes() {
KList<LoaderBiome> r = new KList<>();
for (IrisRegion i : getAllRegions()) {
for (LoaderRegion i : getAllRegions()) {
r.addAll(i.getAllBiomes(this));
}
@@ -287,8 +299,8 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
getParallaxAccess().setFeatureGenerated(xx, zz);
burst.queue(() -> {
RNG rng = new RNG(Cache.key(xx, zz) + getEngine().getTarget().getWorld().seed());
IrisRegion region = getComplex().getRegionStream().get(xxx, zzz);
IrisBiome biome = getComplex().getTrueBiomeStreamNoFeatures().get(xxx, zzz);
LoaderRegion region = getComplex().getRegionStream().get(xxx, zzz);
LoaderBiome biome = getComplex().getTrueBiomeStreamNoFeatures().get(xxx, zzz);
generateParallaxFeatures(rng, xx, zz, region, biome);
});
}
@@ -349,8 +361,8 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
int xx = x << 4;
int zz = z << 4;
RNG rng = new RNG(Cache.key(x, z)).nextParallelRNG(getEngine().getTarget().getWorld().seed());
IrisRegion region = getComplex().getRegionStream().get(xx + 8, zz + 8);
IrisBiome biome = getComplex().getTrueBiomeStreamNoFeatures().get(xx + 8, zz + 8);
LoaderRegion region = getComplex().getRegionStream().get(xx + 8, zz + 8);
LoaderBiome biome = getComplex().getTrueBiomeStreamNoFeatures().get(xx + 8, zz + 8);
after.addAll(generateParallaxJigsaw(rng, x, z, biome, region));
generateParallaxSurface(rng, x, z, biome, region, true);
generateParallaxMutations(rng, x, z, true);
@@ -368,14 +380,14 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
int zz = z << 4;
getParallaxAccess().setParallaxGenerated(x, z);
RNG rng = new RNG(Cache.key(x, z)).nextParallelRNG(getEngine().getTarget().getWorld().seed());
IrisBiome biome = getComplex().getTrueBiomeStreamNoFeatures().get(xx + 8, zz + 8);
IrisRegion region = getComplex().getRegionStream().get(xx + 8, zz + 8);
LoaderBiome biome = getComplex().getTrueBiomeStreamNoFeatures().get(xx + 8, zz + 8);
LoaderRegion region = getComplex().getRegionStream().get(xx + 8, zz + 8);
generateParallaxSurface(rng, x, z, biome, region, false);
generateParallaxMutations(rng, x, z, false);
}
@ChunkCoordinates
default void generateParallaxFeatures(RNG rng, int cx, int cz, IrisRegion region, IrisBiome biome) {
default void generateParallaxFeatures(RNG rng, int cx, int cz, LoaderRegion region, LoaderBiome biome) {
for (IrisFeaturePotential i : getEngine().getDimension().getFeatures()) {
placeZone(rng, cx, cz, i);
}
@@ -403,7 +415,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
generateParallaxLayer(x, z, false);
}
default KList<Runnable> placeStructure(IrisPosition position, IrisJigsawStructure structure, RNG rng) {
default KList<Runnable> placeStructure(IrisPosition position, LoaderJigsawStructure structure, RNG rng) {
KList<Runnable> placeAfter = new KList<>();
if (structure == null) {
@@ -423,7 +435,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
return placeAfter;
}
default KList<Runnable> generateParallaxJigsaw(RNG rng, int x, int z, IrisBiome biome, IrisRegion region) {
default KList<Runnable> generateParallaxJigsaw(RNG rng, int x, int z, LoaderBiome biome, LoaderRegion region) {
KList<Runnable> placeAfter = new KList<>();
if (getEngine().getDimension().isPlaceObjects()) {
@@ -435,7 +447,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
if (poss != null) {
for (Position2 pos : poss) {
if (x == pos.getX() >> 4 && z == pos.getZ() >> 4) {
IrisJigsawStructure structure = getData().getJigsawStructureLoader().load(getEngine().getDimension().getStronghold());
LoaderJigsawStructure structure = getData().getJigsawStructureLoader().load(getEngine().getDimension().getStronghold());
placeAfter.addAll(placeStructure(pos.toIris(), structure, rng));
placed = true;
}
@@ -447,7 +459,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
for (IrisJigsawStructurePlacement i : biome.getJigsawStructures()) {
if (rng.nextInt(i.getRarity()) == 0) {
IrisPosition position = new IrisPosition((x << 4) + rng.nextInt(15), 0, (z << 4) + rng.nextInt(15));
IrisJigsawStructure structure = getData().getJigsawStructureLoader().load(i.getStructure());
LoaderJigsawStructure structure = getData().getJigsawStructureLoader().load(i.getStructure());
placeAfter.addAll(placeStructure(position, structure, rng));
placed = true;
}
@@ -458,7 +470,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
for (IrisJigsawStructurePlacement i : region.getJigsawStructures()) {
if (rng.nextInt(i.getRarity()) == 0) {
IrisPosition position = new IrisPosition((x << 4) + rng.nextInt(15), 0, (z << 4) + rng.nextInt(15));
IrisJigsawStructure structure = getData().getJigsawStructureLoader().load(i.getStructure());
LoaderJigsawStructure structure = getData().getJigsawStructureLoader().load(i.getStructure());
placeAfter.addAll(placeStructure(position, structure, rng));
placed = true;
}
@@ -469,7 +481,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
for (IrisJigsawStructurePlacement i : getEngine().getDimension().getJigsawStructures()) {
if (rng.nextInt(i.getRarity()) == 0) {
IrisPosition position = new IrisPosition((x << 4) + rng.nextInt(15), 0, (z << 4) + rng.nextInt(15));
IrisJigsawStructure structure = getData().getJigsawStructureLoader().load(i.getStructure());
LoaderJigsawStructure structure = getData().getJigsawStructureLoader().load(i.getStructure());
placeAfter.addAll(placeStructure(position, structure, rng));
placed = true;
}
@@ -480,7 +492,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
return placeAfter;
}
default void generateParallaxSurface(RNG rng, int x, int z, IrisBiome biome, IrisRegion region, boolean useFeatures) {
default void generateParallaxSurface(RNG rng, int x, int z, LoaderBiome biome, LoaderRegion region, boolean useFeatures) {
for (IrisObjectPlacement i : biome.getSurfaceObjects()) {
if (i.usesFeatures() != useFeatures) {
@@ -527,8 +539,8 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
searching:
for (IrisBiomeMutation k : getEngine().getDimension().getMutations()) {
for (int l = 0; l < k.getChecks(); l++) {
IrisBiome sa = getComplex().getTrueBiomeStreamNoFeatures().get(((x * 16) + rng.nextInt(16)) + rng.i(-k.getRadius(), k.getRadius()), ((z * 16) + rng.nextInt(16)) + rng.i(-k.getRadius(), k.getRadius()));
IrisBiome sb = getComplex().getTrueBiomeStreamNoFeatures().get(((x * 16) + rng.nextInt(16)) + rng.i(-k.getRadius(), k.getRadius()), ((z * 16) + rng.nextInt(16)) + rng.i(-k.getRadius(), k.getRadius()));
LoaderBiome sa = getComplex().getTrueBiomeStreamNoFeatures().get(((x * 16) + rng.nextInt(16)) + rng.i(-k.getRadius(), k.getRadius()), ((z * 16) + rng.nextInt(16)) + rng.i(-k.getRadius(), k.getRadius()));
LoaderBiome sb = getComplex().getTrueBiomeStreamNoFeatures().get(((x * 16) + rng.nextInt(16)) + rng.i(-k.getRadius(), k.getRadius()), ((z * 16) + rng.nextInt(16)) + rng.i(-k.getRadius(), k.getRadius()));
if (sa.getLoadKey().equals(sb.getLoadKey())) {
continue;
@@ -553,7 +565,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
place(rng, x, -1, z, objectPlacement);
}
default void placePiece(RNG rng, int xx, int forceY, int zz, IrisObject v, IrisObjectPlacement p) {
default void placePiece(RNG rng, int xx, int forceY, int zz, LoaderObject v, IrisObjectPlacement p) {
int id = rng.i(0, Integer.MAX_VALUE);
int maxf = 10000;
AtomicBoolean pl = new AtomicBoolean(false);
@@ -600,7 +612,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
default void place(RNG rng, int x, int forceY, int z, IrisObjectPlacement objectPlacement) {
placing:
for (int i = 0; i < objectPlacement.getDensity(); i++) {
IrisObject v = objectPlacement.getScale().get(rng, objectPlacement.getObject(getComplex(), rng));
LoaderObject v = objectPlacement.getScale().get(rng, objectPlacement.getObject(getComplex(), rng));
if (v == null) {
return;
}
@@ -644,7 +656,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
}
}
default void updateParallaxChunkObjectData(int minY, int maxY, int x, int z, IrisObject v) {
default void updateParallaxChunkObjectData(int minY, int maxY, int x, int z, LoaderObject v) {
ParallaxChunkMeta meta = getParallaxAccess().getMetaRW(x >> 4, z >> 4);
meta.setObjects(true);
meta.setMaxObject(Math.max(maxY, meta.getMaxObject()));
@@ -664,10 +676,10 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
int z = zg.get();
if (getEngine().getDimension().isPlaceObjects()) {
KList<IrisRegion> r = getAllRegions();
KList<IrisBiome> b = getAllBiomes();
KList<LoaderRegion> r = getAllRegions();
KList<LoaderBiome> b = getAllBiomes();
for (IrisBiome i : b) {
for (LoaderBiome i : b) {
for (IrisObjectPlacement j : i.getObjects()) {
if (j.getScale().canScaleBeyond()) {
scalars.put(j.getScale(), j.getPlace());
@@ -681,7 +693,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
}
}
for (IrisRegion i : r) {
for (LoaderRegion i : r) {
for (IrisObjectPlacement j : i.getObjects()) {
if (j.getScale().canScaleBeyond()) {
scalars.put(j.getScale(), j.getPlace());
@@ -721,7 +733,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
}
try {
return IrisObject.sampleSize(getData().getObjectLoader().findFile(i));
return LoaderObject.sampleSize(getData().getObjectLoader().findFile(i));
} catch (IOException ex) {
Iris.reportError(ex);
ex.printStackTrace();
@@ -761,7 +773,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
}
try {
return IrisObject.sampleSize(getData().getObjectLoader().findFile(j));
return LoaderObject.sampleSize(getData().getObjectLoader().findFile(j));
} catch (IOException ioException) {
Iris.reportError(ioException);
ioException.printStackTrace();
@@ -802,7 +814,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
z = Math.max(max, z);
}
for (IrisRegion v : r) {
for (LoaderRegion v : r) {
for (IrisDepositGenerator i : v.getDeposits()) {
int max = i.getMaxDimension();
x = Math.max(max, x);
@@ -810,7 +822,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
}
}
for (IrisBiome v : b) {
for (LoaderBiome v : b) {
for (IrisDepositGenerator i : v.getDeposits()) {
int max = i.getMaxDimension();
x = Math.max(max, x);

View File

@@ -19,9 +19,9 @@
package com.volmit.iris.engine.framework;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisEffect;
import com.volmit.iris.engine.object.IrisRegion;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.meta.IrisEffect;
import com.volmit.iris.engine.object.regional.LoaderRegion;
import com.volmit.iris.util.math.M;
import com.volmit.iris.util.scheduling.J;
import lombok.Data;
@@ -32,8 +32,8 @@ import org.bukkit.entity.Player;
public class EnginePlayer {
private final Engine engine;
private final Player player;
private IrisBiome biome;
private IrisRegion region;
private LoaderBiome biome;
private LoaderRegion region;
private Location lastLocation;
private long lastSample;

View File

@@ -20,7 +20,7 @@ package com.volmit.iris.engine.framework;
import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.object.dimensional.LoaderDimension;
import com.volmit.iris.engine.object.common.IrisWorld;
import com.volmit.iris.engine.parallax.ParallaxWorld;
import com.volmit.iris.util.parallel.MultiBurst;
@@ -32,14 +32,14 @@ import java.io.File;
public class EngineTarget {
private final MultiBurst parallaxBurster;
private final MultiBurst burster;
private final IrisDimension dimension;
private final LoaderDimension dimension;
private IrisWorld world;
private final int height;
private final IrisData data;
private final ParallaxWorld parallaxWorld;
private final boolean inverted;
public EngineTarget(IrisWorld world, IrisDimension dimension, IrisData data, int height, boolean inverted, int threads) {
public EngineTarget(IrisWorld world, LoaderDimension dimension, IrisData data, int height, boolean inverted, int threads) {
this.world = world;
this.height = height;
this.dimension = dimension;
@@ -50,7 +50,7 @@ public class EngineTarget {
this.parallaxWorld = new ParallaxWorld(parallaxBurster, 256, new File(world.worldFolder(), "iris/" + dimension.getLoadKey() + "/parallax"));
}
public EngineTarget(IrisWorld world, IrisDimension dimension, IrisData data, int height, int threads) {
public EngineTarget(IrisWorld world, LoaderDimension dimension, IrisData data, int height, int threads) {
this(world, dimension, data, height, false, threads);
}

View File

@@ -21,25 +21,25 @@ package com.volmit.iris.engine.framework;
import com.volmit.iris.core.gui.components.Renderer;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.data.DataProvider;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisObjectPlacement;
import com.volmit.iris.engine.object.IrisRegion;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.objects.IrisObjectPlacement;
import com.volmit.iris.engine.object.regional.LoaderRegion;
import com.volmit.iris.engine.parallax.ParallaxAccess;
public interface GeneratorAccess extends DataProvider, Renderer {
IrisRegion getRegion(int x, int z);
LoaderRegion getRegion(int x, int z);
ParallaxAccess getParallaxAccess();
IrisData getData();
IrisBiome getCaveBiome(int x, int z);
LoaderBiome getCaveBiome(int x, int z);
IrisBiome getSurfaceBiome(int x, int z);
LoaderBiome getSurfaceBiome(int x, int z);
int getHeight(int x, int z);
default IrisBiome getBiome(int x, int y, int z) {
default LoaderBiome getBiome(int x, int y, int z) {
if (y <= getHeight(x, z) - 2) {
return getCaveBiome(x, z);
}
@@ -57,7 +57,7 @@ public interface GeneratorAccess extends DataProvider, Renderer {
String[] v = objectAt.split("\\Q@\\E");
String object = v[0];
int id = Integer.parseInt(v[1]);
IrisRegion region = getRegion(x, z);
LoaderRegion region = getRegion(x, z);
for (IrisObjectPlacement i : region.getObjects()) {
if (i.getPlace().contains(object)) {
@@ -65,7 +65,7 @@ public interface GeneratorAccess extends DataProvider, Renderer {
}
}
IrisBiome biome = getBiome(x, y, z);
LoaderBiome biome = getBiome(x, y, z);
for (IrisObjectPlacement i : biome.getObjects()) {
if (i.getPlace().contains(object)) {

View File

@@ -23,9 +23,9 @@ import com.volmit.iris.core.pregenerator.PregenListener;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.data.DataProvider;
import com.volmit.iris.engine.data.mca.NBTWorld;
import com.volmit.iris.engine.headless.HeadlessGenerator;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisRegion;
import com.volmit.iris.engine.framework.headless.HeadlessGenerator;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.regional.LoaderRegion;
import com.volmit.iris.engine.object.common.IrisWorld;
import com.volmit.iris.util.parallel.MultiBurst;
import com.volmit.iris.util.collection.KList;
@@ -71,29 +71,29 @@ public interface IrisAccess extends Hotloadable, DataProvider {
* @param l the location
* @return the biome
*/
default IrisBiome getBiome(Location l) {
default LoaderBiome getBiome(Location l) {
return getBiome(l.toVector());
}
default IrisRegion getRegion(int x, int y, int z) {
default LoaderRegion getRegion(int x, int y, int z) {
return getEngineAccess(y).getRegion(x, z);
}
default IrisRegion getRegion(Location l) {
default LoaderRegion getRegion(Location l) {
return getRegion(l.getBlockX(), l.getBlockY(), l.getBlockZ());
}
default IrisBiome getBiome(Vector l) {
default LoaderBiome getBiome(Vector l) {
return getBiome(l.getBlockX(), l.getBlockY(), l.getBlockZ());
}
IrisBiome getBiome(int x, int y, int z);
LoaderBiome getBiome(int x, int y, int z);
IrisBiome getCaveBiome(int x, int y, int z);
LoaderBiome getCaveBiome(int x, int y, int z);
IrisBiome getBiome(int x, int z);
LoaderBiome getBiome(int x, int z);
IrisBiome getCaveBiome(int x, int z);
LoaderBiome getCaveBiome(int x, int z);
GeneratorAccess getEngineAccess(int y);
@@ -117,7 +117,7 @@ public interface IrisAccess extends Hotloadable, DataProvider {
boolean isStudio();
default Location lookForBiome(IrisBiome biome, long timeout, Consumer<Integer> triesc) {
default Location lookForBiome(LoaderBiome biome, long timeout, Consumer<Integer> triesc) {
if (!getCompound().getWorld().hasRealWorld()) {
Iris.error("Cannot GOTO without a bound world (headless mode)");
return null;
@@ -146,7 +146,7 @@ public interface IrisAccess extends Hotloadable, DataProvider {
J.a(() -> {
try {
Engine e;
IrisBiome b;
LoaderBiome b;
int x, z;
while (!found.get() && running.get()) {
@@ -198,7 +198,7 @@ public interface IrisAccess extends Hotloadable, DataProvider {
return location.get();
}
default Location lookForRegion(IrisRegion reg, long timeout, Consumer<Integer> triesc) {
default Location lookForRegion(LoaderRegion reg, long timeout, Consumer<Integer> triesc) {
if (!getCompound().getWorld().hasRealWorld()) {
Iris.error("Cannot GOTO without a bound world (headless mode)");
return null;
@@ -227,7 +227,7 @@ public interface IrisAccess extends Hotloadable, DataProvider {
for (int i = 0; i < cpus; i++) {
J.a(() -> {
Engine e;
IrisRegion b;
LoaderRegion b;
int x, z;
while (!found.get() && running.get()) {

View File

@@ -18,9 +18,9 @@
package com.volmit.iris.engine.framework;
import com.volmit.iris.engine.object.InventorySlotType;
import com.volmit.iris.engine.object.IrisLootReference;
import com.volmit.iris.engine.object.IrisLootTable;
import com.volmit.iris.engine.object.meta.InventorySlotType;
import com.volmit.iris.engine.object.loot.IrisLootReference;
import com.volmit.iris.engine.object.loot.LoaderLootTable;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.math.RNG;
import org.bukkit.block.Block;
@@ -29,9 +29,9 @@ import org.bukkit.inventory.Inventory;
public interface LootProvider {
void scramble(Inventory inventory, RNG rng);
void injectTables(KList<IrisLootTable> list, IrisLootReference r);
void injectTables(KList<LoaderLootTable> list, IrisLootReference r);
KList<IrisLootTable> getLootTables(RNG rng, Block b);
KList<LoaderLootTable> getLootTables(RNG rng, Block b);
void addItems(boolean debug, Inventory inv, RNG rng, KList<IrisLootTable> tables, InventorySlotType slot, int x, int y, int z, int mgf);
void addItems(boolean debug, Inventory inv, RNG rng, KList<LoaderLootTable> tables, InventorySlotType slot, int x, int y, int z, int mgf);
}

View File

@@ -18,8 +18,8 @@
package com.volmit.iris.engine.framework;
import com.volmit.iris.engine.object.IrisObject;
import com.volmit.iris.engine.object.IrisObjectPlacement;
import com.volmit.iris.engine.object.objects.LoaderObject;
import com.volmit.iris.engine.object.objects.IrisObjectPlacement;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -31,7 +31,7 @@ public class PlacedObject {
@Nullable
private IrisObjectPlacement placement;
@Nullable
private IrisObject object;
private LoaderObject object;
private int id;
private int xx;
private int zz;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.headless;
package com.volmit.iris.engine.framework.headless;
import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.core.pregenerator.PregenListener;

View File

@@ -16,13 +16,13 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.headless;
package com.volmit.iris.engine.framework.headless;
import com.volmit.iris.Iris;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.EngineCompositeGenerator;
import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.object.dimensional.LoaderDimension;
import com.volmit.iris.engine.object.common.IrisWorld;
import com.volmit.iris.util.plugin.VolmitSender;
import lombok.Data;
@@ -35,16 +35,16 @@ import java.io.File;
@Data
@SuppressWarnings("ResultOfMethodCallIgnored")
public class HeadlessWorld {
private final IrisDimension dimension;
private final LoaderDimension dimension;
private final String worldName;
private final IrisWorld world;
private boolean studio = false;
public HeadlessWorld(String worldName, IrisDimension dimension, long seed) {
public HeadlessWorld(String worldName, LoaderDimension dimension, long seed) {
this(worldName, dimension, seed, false);
}
public HeadlessWorld(String worldName, IrisDimension dimension, long seed, boolean studio) {
public HeadlessWorld(String worldName, LoaderDimension dimension, long seed, boolean studio) {
this.worldName = worldName;
this.dimension = dimension;
this.studio = studio;

View File

@@ -19,7 +19,7 @@
package com.volmit.iris.engine.framework.placer;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.object.IrisObjectPlacement;
import com.volmit.iris.engine.object.objects.IrisObjectPlacement;
import com.volmit.iris.engine.object.common.IObjectPlacer;
import com.volmit.iris.engine.object.tile.TileData;
import com.volmit.iris.util.math.RNG;

View File

@@ -1,133 +0,0 @@
/*
* Iris is a World Generator for Minecraft Bukkit Servers
* Copyright (c) 2021 Arcane Arts (Volmit Software)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.interpolation;
import com.volmit.iris.engine.object.annotations.Desc;
@Desc("An interpolation method (or function) is simply a method of smoothing a position based on surrounding points on a grid. Bicubic for example is smoother, but has 4 times the checks than Bilinear for example. Try using BILINEAR_STARCAST_9 for beautiful results.")
public enum InterpolationMethod {
@Desc("No interpolation. Nearest Neighbor (bad for terrain, great for performance).")
NONE,
@Desc("Uses 4 nearby points in a square to calculate a 2d slope. Very fast but creates square artifacts. See: https://en.wikipedia.org/wiki/Bilinear_interpolation")
BILINEAR,
@Desc("Starcast is Iris's own creation. It uses raytrace checks to find a horizontal boundary nearby. 3 Checks in a circle. Typically starcast is used with another interpolation method. See BILINEAR_STARCAST_9 For example. Starcast is meant to 'break up' large, abrupt cliffs to make cheap interpolation smoother.")
STARCAST_3,
@Desc("Starcast is Iris's own creation. It uses raytrace checks to find a horizontal boundary nearby. 6 Checks in a circle. Typically starcast is used with another interpolation method. See BILINEAR_STARCAST_9 For example. Starcast is meant to 'break up' large, abrupt cliffs to make cheap interpolation smoother.")
STARCAST_6,
@Desc("Starcast is Iris's own creation. It uses raytrace checks to find a horizontal boundary nearby. 9 Checks in a circle. Typically starcast is used with another interpolation method. See BILINEAR_STARCAST_9 For example. Starcast is meant to 'break up' large, abrupt cliffs to make cheap interpolation smoother.")
STARCAST_9,
@Desc("Starcast is Iris's own creation. It uses raytrace checks to find a horizontal boundary nearby. 12 Checks in a circle. Typically starcast is used with another interpolation method. See BILINEAR_STARCAST_9 For example. Starcast is meant to 'break up' large, abrupt cliffs to make cheap interpolation smoother.")
STARCAST_12,
@Desc("Uses starcast to break up the abrupt sharp cliffs, then smooths the rest out with bilinear.")
BILINEAR_STARCAST_3,
@Desc("Uses starcast to break up the abrupt sharp cliffs, then smooths the rest out with bilinear.")
BILINEAR_STARCAST_6,
@Desc("Uses starcast to break up the abrupt sharp cliffs, then smooths the rest out with bilinear.")
BILINEAR_STARCAST_9,
@Desc("Uses starcast to break up the abrupt sharp cliffs, then smooths the rest out with bilinear.")
BILINEAR_STARCAST_12,
@Desc("Uses starcast to break up the abrupt sharp cliffs, then smooths the rest out with hermite.")
HERMITE_STARCAST_3,
@Desc("Uses starcast to break up the abrupt sharp cliffs, then smooths the rest out with hermite.")
HERMITE_STARCAST_6,
@Desc("Uses starcast to break up the abrupt sharp cliffs, then smooths the rest out with hermite.")
HERMITE_STARCAST_9,
@Desc("Uses starcast to break up the abrupt sharp cliffs, then smooths the rest out with hermite.")
HERMITE_STARCAST_12,
@Desc("Uses bilinear but on a bezier curve. See: https://en.wikipedia.org/wiki/Bezier_curve")
BILINEAR_BEZIER,
@Desc("Uses Bilinear but with parametric curves alpha 2.")
BILINEAR_PARAMETRIC_2,
@Desc("Uses Bilinear but with parametric curves alpha 4.")
BILINEAR_PARAMETRIC_4,
@Desc("Uses Bilinear but with parametric curves alpha 1.5.")
BILINEAR_PARAMETRIC_1_5,
@Desc("Bicubic noise creates 4, 4-point splines for a total of 16 checks. Bcubic can go higher than expected and lower than expected right before a large change in slope.")
BICUBIC,
@Desc("Hermite is similar to bicubic, but faster and it can be tuned a little bit")
HERMITE,
@Desc("Essentially bicubic with zero tension")
CATMULL_ROM_SPLINE,
@Desc("Essentially bicubic with max tension")
HERMITE_TENSE,
@Desc("Hermite is similar to bicubic, this variant reduces the dimple artifacts of bicubic")
HERMITE_LOOSE,
@Desc("Hermite is similar to bicubic, this variant reduces the dimple artifacts of bicubic")
HERMITE_LOOSE_HALF_POSITIVE_BIAS,
@Desc("Hermite is similar to bicubic, this variant reduces the dimple artifacts of bicubic")
HERMITE_LOOSE_HALF_NEGATIVE_BIAS,
@Desc("Hermite is similar to bicubic, this variant reduces the dimple artifacts of bicubic")
HERMITE_LOOSE_FULL_POSITIVE_BIAS,
@Desc("Hermite is similar to bicubic, this variant reduces the dimple artifacts of bicubic")
HERMITE_LOOSE_FULL_NEGATIVE_BIAS,
}

View File

@@ -1,37 +0,0 @@
/*
* Iris is a World Generator for Minecraft Bukkit Servers
* Copyright (c) 2021 Arcane Arts (Volmit Software)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.interpolation;
import com.volmit.iris.engine.object.annotations.Desc;
@Desc("An interpolation method (or function) is simply a method of smoothing a position based on surrounding points on a grid. Bicubic for example is smoother, but has 4 times the checks than Bilinear for example. Try using BILINEAR_STARCAST_9 for beautiful results.")
public enum InterpolationMethod3D {
TRILINEAR,
TRICUBIC,
TRIHERMITE,
TRISTARCAST_3,
TRISTARCAST_6,
TRISTARCAST_9,
TRISTARCAST_12,
TRILINEAR_TRISTARCAST_3,
TRILINEAR_TRISTARCAST_6,
TRILINEAR_TRISTARCAST_9,
TRILINEAR_TRISTARCAST_12,
NONE
}

View File

@@ -1,27 +0,0 @@
/*
* Iris is a World Generator for Minecraft Bukkit Servers
* Copyright (c) 2021 Arcane Arts (Volmit Software)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.interpolation;
public enum InterpolationType {
LINEAR,
PARAMETRIC_2,
PARAMETRIC_4,
BEZIER,
NONE
}

View File

@@ -1,970 +0,0 @@
/*
* Iris is a World Generator for Minecraft Bukkit Servers
* Copyright (c) 2021 Arcane Arts (Volmit Software)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.interpolation;
import com.google.common.util.concurrent.AtomicDouble;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.util.noise.CNG;
import com.volmit.iris.engine.object.NoiseStyle;
import com.volmit.iris.util.function.NoiseProvider;
import com.volmit.iris.util.function.NoiseProvider3;
import com.volmit.iris.util.math.RNG;
import java.util.HashMap;
public class IrisInterpolation {
public static double bezier(double t) {
return t * t * (3.0d - 2.0d * t);
}
public static double parametric(double t, double alpha) {
double sqt = Math.pow(t, alpha);
return sqt / (alpha * (sqt - Math.pow(t, alpha - 1)) + 1.0d);
}
public static float lerpf(float a, float b, float f) {
return a + (f * (b - a));
}
public static double lerpBezier(double a, double b, double f) {
return a + (bezier(f) * (b - a));
}
public static double sinCenter(double f) {
return Math.sin(f * Math.PI);
}
public static double lerpCenterSinBezier(double a, double b, double f) {
return lerpBezier(a, b, sinCenter(f));
}
public static double lerpCenterSin(double a, double b, double f) {
return lerpBezier(a, b, sinCenter(f));
}
public static double lerpParametric(double a, double b, double f, double v) {
return a + (parametric(f, v) * (b - a));
}
public static double blerp(double a, double b, double c, double d, double tx, double ty, InterpolationType type) {
if (type.equals(InterpolationType.LINEAR)) {
return blerp(a, b, c, d, tx, ty);
}
if (type.equals(InterpolationType.BEZIER)) {
return blerpBezier(a, b, c, d, tx, ty);
}
if (type.equals(InterpolationType.PARAMETRIC_2)) {
return blerpParametric(a, b, c, d, tx, ty, 2);
}
if (type.equals(InterpolationType.PARAMETRIC_4)) {
return blerpParametric(a, b, c, d, tx, ty, 4);
}
return 0;
}
public static double blerpBezier(double a, double b, double c, double d, double tx, double ty) {
return lerpBezier(lerpBezier(a, b, tx), lerpBezier(c, d, tx), ty);
}
public static double blerpSinCenter(double a, double b, double c, double d, double tx, double ty) {
return lerpCenterSin(lerpCenterSin(a, b, tx), lerpCenterSin(c, d, tx), ty);
}
public static double blerpParametric(double a, double b, double c, double d, double tx, double ty, double v) {
return lerpParametric(lerpParametric(a, b, tx, v), lerpParametric(c, d, tx, v), ty, v);
}
public static double hermiteBezier(double p0, double p1, double p2, double p3, double mu, double tension, double bias) {
return bezier(hermite(p0, p1, p2, p3, mu, tension, bias));
}
public static double hermiteParametric(double p0, double p1, double p2, double p3, double mu, double tension, double bias, double a) {
return parametric(hermite(p0, p1, p2, p3, mu, tension, bias), a);
}
public static double bihermiteBezier(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy, double tension, double bias) {
//@builder
return hermiteBezier(
hermiteBezier(p00, p01, p02, p03, muy, tension, bias),
hermiteBezier(p10, p11, p12, p13, muy, tension, bias),
hermiteBezier(p20, p21, p22, p23, muy, tension, bias),
hermiteBezier(p30, p31, p32, p33, muy, tension, bias),
mux, tension, bias);
//@done
}
public static double bihermiteParametric(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy, double tension, double bias, double a) {
//@builder
return hermiteParametric(
hermiteParametric(p00, p01, p02, p03, muy, tension, bias, a),
hermiteParametric(p10, p11, p12, p13, muy, tension, bias, a),
hermiteParametric(p20, p21, p22, p23, muy, tension, bias, a),
hermiteParametric(p30, p31, p32, p33, muy, tension, bias, a),
mux, tension, bias, a);
//@done
}
public static double cubicBezier(double p0, double p1, double p2, double p3, double mu) {
return bezier(cubic(p0, p1, p2, p3, mu));
}
public static double cubicParametric(double p0, double p1, double p2, double p3, double mu, double a) {
return parametric(cubic(p0, p1, p2, p3, mu), a);
}
public static double hermite(double p0, double p1, double p2, double p3, double mu, double tension, double bias) {
double m0, m1, mu2, mu3;
double a0, a1, a2, a3;
mu2 = mu * mu;
mu3 = mu2 * mu;
m0 = (p1 - p0) * (1 + bias) * (1 - tension) / 2;
m0 += (p2 - p1) * (1 - bias) * (1 - tension) / 2;
m1 = (p2 - p1) * (1 + bias) * (1 - tension) / 2;
m1 += (p3 - p2) * (1 - bias) * (1 - tension) / 2;
a0 = 2 * mu3 - 3 * mu2 + 1;
a1 = mu3 - 2 * mu2 + mu;
a2 = mu3 - mu2;
a3 = -2 * mu3 + 3 * mu2;
return (a0 * p1 + a1 * m0 + a2 * m1 + a3 * p2);
}
public static double cubic(double p0, double p1, double p2, double p3, double mu) {
double a0, a1, a2, a3, mu2;
mu2 = mu * mu;
a0 = p3 - p2 - p0 + p1;
a1 = p0 - p1 - a0;
a2 = p2 - p0;
a3 = p1;
return a0 * mu * mu2 + a1 * mu2 + a2 * mu + a3;
}
public static double bicubic(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy) {
//@builder
return cubic(
cubic(p00, p01, p02, p03, muy),
cubic(p10, p11, p12, p13, muy),
cubic(p20, p21, p22, p23, muy),
cubic(p30, p31, p32, p33, muy),
mux);
//@done
}
public static double bihermite(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy, double tension, double bias) {
//@builder
return hermite(
hermite(p00, p01, p02, p03, muy, tension, bias),
hermite(p10, p11, p12, p13, muy, tension, bias),
hermite(p20, p21, p22, p23, muy, tension, bias),
hermite(p30, p31, p32, p33, muy, tension, bias),
mux, tension, bias);
//@done
}
public static double trihermite(double p000, double p001, double p002, double p003, double p010, double p011, double p012, double p013, double p020, double p021, double p022, double p023, double p030, double p031, double p032, double p033, double p100, double p101, double p102, double p103, double p110, double p111, double p112, double p113, double p120, double p121, double p122, double p123, double p130, double p131, double p132, double p133, double p200, double p201, double p202, double p203, double p210, double p211, double p212, double p213, double p220, double p221, double p222, double p223, double p230, double p231, double p232, double p233, double p300, double p301, double p302, double p303, double p310, double p311, double p312, double p313, double p320, double p321, double p322, double p323, double p330, double p331, double p332, double p333, double mux, double muy, double muz, double tension, double bias) {
//@builder
return hermite(
bihermite(p000, p001, p002, p003,
p010, p011, p012, p013,
p020, p021, p022, p023,
p030, p031, p032, p033,
mux, muy, tension, bias),
bihermite(p100, p101, p102, p103,
p110, p111, p112, p113,
p120, p121, p122, p123,
p130, p131, p132, p133,
mux, muy, tension, bias),
bihermite(p200, p201, p202, p203,
p210, p211, p212, p213,
p220, p221, p222, p223,
p230, p231, p232, p233,
mux, muy, tension, bias),
bihermite(p300, p301, p302, p303,
p310, p311, p312, p313,
p320, p321, p322, p323,
p330, p331, p332, p333,
mux, muy, tension, bias),
muz, tension, bias);
//@done
}
public static double tricubic(double p000,
double p001,
double p002,
double p003,
double p010,
double p011,
double p012, double p013, double p020, double p021, double p022, double p023, double p030, double p031, double p032, double p033, double p100, double p101, double p102, double p103, double p110, double p111, double p112, double p113, double p120, double p121, double p122, double p123, double p130, double p131, double p132, double p133, double p200, double p201, double p202, double p203, double p210, double p211, double p212, double p213, double p220, double p221, double p222, double p223, double p230, double p231, double p232, double p233, double p300, double p301, double p302, double p303, double p310, double p311, double p312, double p313, double p320, double p321, double p322, double p323, double p330, double p331, double p332, double p333, double mux, double muy, double muz) {
//@builder
return cubic(
bicubic(p000, p001, p002, p003,
p010, p011, p012, p013,
p020, p021, p022, p023,
p030, p031, p032, p033,
mux, muy),
bicubic(p100, p101, p102, p103,
p110, p111, p112, p113,
p120, p121, p122, p123,
p130, p131, p132, p133,
mux, muy),
bicubic(p200, p201, p202, p203,
p210, p211, p212, p213,
p220, p221, p222, p223,
p230, p231, p232, p233,
mux, muy),
bicubic(p300, p301, p302, p303,
p310, p311, p312, p313,
p320, p321, p322, p323,
p330, p331, p332, p333,
mux, muy),
muz);
//@done
}
public static double lerp(double a, double b, double f) {
return a + (f * (b - a));
}
public static double blerp(double a, double b, double c, double d, double tx, double ty) {
return lerp(lerp(a, b, tx), lerp(c, d, tx), ty);
}
public static double trilerp(double v1, double v2, double v3, double v4, double v5, double v6, double v7, double v8, double x, double y, double z) {
return lerp(blerp(v1, v2, v3, v4, x, y), blerp(v5, v6, v7, v8, x, y), z);
}
public static double bicubicBezier(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy) {
//@builder
return cubicBezier(
cubicBezier(p00, p01, p02, p03, muy),
cubicBezier(p10, p11, p12, p13, muy),
cubicBezier(p20, p21, p22, p23, muy),
cubicBezier(p30, p31, p32, p33, muy),
mux);
//@done
}
public static double bicubicParametric(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy, double a) {
//@builder
return cubicParametric(
cubicParametric(p00, p01, p02, p03, muy, a),
cubicParametric(p10, p11, p12, p13, muy, a),
cubicParametric(p20, p21, p22, p23, muy, a),
cubicParametric(p30, p31, p32, p33, muy, a),
mux, a);
//@done
}
public static CNG cng = NoiseStyle.SIMPLEX.create(new RNG());
public static double getBilinearNoise(int x, int z, double rad, NoiseProvider n) {
int fx = (int) Math.floor(x / rad);
int fz = (int) Math.floor(z / rad);
int x1 = (int) Math.round(fx * rad);
int z1 = (int) Math.round(fz * rad);
int x2 = (int) Math.round((fx + 1) * rad);
int z2 = (int) Math.round((fz + 1) * rad);
double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z);
//@builder
return blerp(
n.noise(x1, z1),
n.noise(x2, z1),
n.noise(x1, z2),
n.noise(x2, z2),
px, pz);
//@done
}
public static double getStarcast(int x, int z, double rad, double checks, NoiseProvider n) {
double m = (360 / checks);
double v = 0;
for (int i = 0; i < 360; i += m) {
double sin = Math.sin(Math.toRadians(i));
double cos = Math.cos(Math.toRadians(i));
double cx = x + ((rad * cos) - (rad * sin));
double cz = z + ((rad * sin) + (rad * cos));
v += n.noise(cx, cz);
}
return v / checks;
}
public static double getStarcast3D(int x, int y, int z, double rad, double checks, NoiseProvider3 n) {
return (getStarcast(x, z, rad, checks, (xx, zz) -> n.noise(xx, y, zz))
+ getStarcast(x, y, rad, checks, (xx, yy) -> n.noise(xx, yy, z))
+ getStarcast(y, z, rad, checks, (yy, zz) -> n.noise(x, yy, zz))) / 3D;
}
public static double getBilinearBezierNoise(int x, int z, double rad, NoiseProvider n) {
int fx = (int) Math.floor(x / rad);
int fz = (int) Math.floor(z / rad);
int x1 = (int) Math.round(fx * rad);
int z1 = (int) Math.round(fz * rad);
int x2 = (int) Math.round((fx + 1) * rad);
int z2 = (int) Math.round((fz + 1) * rad);
double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z);
//@builder
return blerpBezier(
n.noise(x1, z1),
n.noise(x2, z1),
n.noise(x1, z2),
n.noise(x2, z2),
px, pz);
//@done
}
public static double getBilinearParametricNoise(int x, int z, double rad, NoiseProvider n, double a) {
int fx = (int) Math.floor(x / rad);
int fz = (int) Math.floor(z / rad);
int x1 = (int) Math.round(fx * rad);
int z1 = (int) Math.round(fz * rad);
int x2 = (int) Math.round((fx + 1) * rad);
int z2 = (int) Math.round((fz + 1) * rad);
double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z);
//@builder
return blerpParametric(
n.noise(x1, z1),
n.noise(x2, z1),
n.noise(x1, z2),
n.noise(x2, z2),
px, pz, a);
//@done
}
public static double getTrilinear(int x, int y, int z, double rad, NoiseProvider3 n) {
return getTrilinear(x, y, z, rad, rad, rad, n);
}
public static double getTrilinear(int x, int y, int z, double radx, double rady, double radz, NoiseProvider3 n) {
int fx = (int) Math.floor(x / radx);
int fy = (int) Math.floor(y / rady);
int fz = (int) Math.floor(z / radz);
int x1 = (int) Math.round(fx * radx);
int y1 = (int) Math.round(fy * rady);
int z1 = (int) Math.round(fz * radz);
int x2 = (int) Math.round((fx + 1) * radx);
int y2 = (int) Math.round((fy + 1) * rady);
int z2 = (int) Math.round((fz + 1) * radz);
double px = rangeScale(0, 1, x1, x2, x);
double py = rangeScale(0, 1, y1, y2, y);
double pz = rangeScale(0, 1, z1, z2, z);
//@builder
return trilerp(
n.noise(x1, y1, z1),
n.noise(x2, y1, z1),
n.noise(x1, y2, z1),
n.noise(x2, y2, z1),
n.noise(x1, y1, z2),
n.noise(x2, y1, z2),
n.noise(x1, y2, z2),
n.noise(x2, y2, z2),
px, py, pz);
//@done
}
public static double getTricubic(int x, int y, int z, double rad, NoiseProvider3 n) {
return getTricubic(x, y, z, rad, rad, rad, n);
}
public static double getTricubic(int x, int y, int z, double radx, double rady, double radz, NoiseProvider3 n) {
int fx = (int) Math.floor(x / radx);
int fy = (int) Math.floor(y / rady);
int fz = (int) Math.floor(z / radz);
int x0 = (int) Math.round((fx - 1) * radx);
int y0 = (int) Math.round((fy - 1) * rady);
int z0 = (int) Math.round((fz - 1) * radz);
int x1 = (int) Math.round(fx * radx);
int y1 = (int) Math.round(fy * rady);
int z1 = (int) Math.round(fz * radz);
int x2 = (int) Math.round((fx + 1) * radx);
int y2 = (int) Math.round((fy + 1) * rady);
int z2 = (int) Math.round((fz + 1) * radz);
int x3 = (int) Math.round((fx + 2) * radx);
int y3 = (int) Math.round((fy + 2) * rady);
int z3 = (int) Math.round((fz + 2) * radz);
double px = rangeScale(0, 1, x1, x2, x);
double py = rangeScale(0, 1, y1, y2, y);
double pz = rangeScale(0, 1, z1, z2, z);
//@builder
//!!!!!!!!!!!!!!!!!! 2 1 3
return tricubic(
n.noise(x0, y0, z0),
n.noise(x0, y1, z0),
n.noise(x0, y2, z0),
n.noise(x0, y3, z0),
n.noise(x1, y0, z0),
n.noise(x1, y1, z0),
n.noise(x1, y2, z0),
n.noise(x1, y3, z0),
n.noise(x2, y0, z0),
n.noise(x2, y1, z0),
n.noise(x2, y2, z0),
n.noise(x2, y3, z0),
n.noise(x3, y0, z0),
n.noise(x3, y1, z0),
n.noise(x3, y2, z0),
n.noise(x3, y3, z0),
n.noise(x0, y0, z1),
n.noise(x0, y1, z1),
n.noise(x0, y2, z1),
n.noise(x0, y3, z1),
n.noise(x1, y0, z1),
n.noise(x1, y1, z1),
n.noise(x1, y2, z1),
n.noise(x1, y3, z1),
n.noise(x2, y0, z1),
n.noise(x2, y1, z1),
n.noise(x2, y2, z1),
n.noise(x2, y3, z1),
n.noise(x3, y0, z1),
n.noise(x3, y1, z1),
n.noise(x3, y2, z1),
n.noise(x3, y3, z1),
n.noise(x0, y0, z2),
n.noise(x0, y1, z2),
n.noise(x0, y2, z2),
n.noise(x0, y3, z2),
n.noise(x1, y0, z2),
n.noise(x1, y1, z2),
n.noise(x1, y2, z2),
n.noise(x1, y3, z2),
n.noise(x2, y0, z2),
n.noise(x2, y1, z2),
n.noise(x2, y2, z2),
n.noise(x2, y3, z2),
n.noise(x3, y0, z2),
n.noise(x3, y1, z2),
n.noise(x3, y2, z2),
n.noise(x3, y3, z2),
n.noise(x0, y0, z3),
n.noise(x0, y1, z3),
n.noise(x0, y2, z3),
n.noise(x0, y3, z3),
n.noise(x1, y0, z3),
n.noise(x1, y1, z3),
n.noise(x1, y2, z3),
n.noise(x1, y3, z3),
n.noise(x2, y0, z3),
n.noise(x2, y1, z3),
n.noise(x2, y2, z3),
n.noise(x2, y3, z3),
n.noise(x3, y0, z3),
n.noise(x3, y1, z3),
n.noise(x3, y2, z3),
n.noise(x3, y3, z3),
px, py, pz);
//@done
}
public static double getTrihermite(int x, int y, int z, double rad, NoiseProvider3 n, double tension, double bias) {
return getTrihermite(x, y, z, rad, rad, rad, n, tension, bias);
}
public static double getTrihermite(int x, int y, int z, double rad, NoiseProvider3 n) {
return getTrihermite(x, y, z, rad, rad, rad, n, 0D, 0D);
}
public static double getTrihermite(int x, int y, int z, double radx, double rady, double radz, NoiseProvider3 n) {
return getTrihermite(x, y, z, radx, rady, radz, n, 0D, 0D);
}
public static double getTrihermite(int x, int y, int z, double radx, double rady, double radz, NoiseProvider3 n, double tension, double bias) {
int fx = (int) Math.floor(x / radx);
int fy = (int) Math.floor(y / rady);
int fz = (int) Math.floor(z / radz);
int x0 = (int) Math.round((fx - 1) * radx);
int y0 = (int) Math.round((fy - 1) * rady);
int z0 = (int) Math.round((fz - 1) * radz);
int x1 = (int) Math.round(fx * radx);
int y1 = (int) Math.round(fy * rady);
int z1 = (int) Math.round(fz * radz);
int x2 = (int) Math.round((fx + 1) * radx);
int y2 = (int) Math.round((fy + 1) * rady);
int z2 = (int) Math.round((fz + 1) * radz);
int x3 = (int) Math.round((fx + 2) * radx);
int y3 = (int) Math.round((fy + 2) * rady);
int z3 = (int) Math.round((fz + 2) * radz);
double px = rangeScale(0, 1, x1, x2, x);
double py = rangeScale(0, 1, y1, y2, y);
double pz = rangeScale(0, 1, z1, z2, z);
//@builder
//!!!!!!!!!!!!!!!!!! 2 1 3
return trihermite(
n.noise(x0, y0, z0),
n.noise(x0, y1, z0),
n.noise(x0, y2, z0),
n.noise(x0, y3, z0),
n.noise(x1, y0, z0),
n.noise(x1, y1, z0),
n.noise(x1, y2, z0),
n.noise(x1, y3, z0),
n.noise(x2, y0, z0),
n.noise(x2, y1, z0),
n.noise(x2, y2, z0),
n.noise(x2, y3, z0),
n.noise(x3, y0, z0),
n.noise(x3, y1, z0),
n.noise(x3, y2, z0),
n.noise(x3, y3, z0),
n.noise(x0, y0, z1),
n.noise(x0, y1, z1),
n.noise(x0, y2, z1),
n.noise(x0, y3, z1),
n.noise(x1, y0, z1),
n.noise(x1, y1, z1),
n.noise(x1, y2, z1),
n.noise(x1, y3, z1),
n.noise(x2, y0, z1),
n.noise(x2, y1, z1),
n.noise(x2, y2, z1),
n.noise(x2, y3, z1),
n.noise(x3, y0, z1),
n.noise(x3, y1, z1),
n.noise(x3, y2, z1),
n.noise(x3, y3, z1),
n.noise(x0, y0, z2),
n.noise(x0, y1, z2),
n.noise(x0, y2, z2),
n.noise(x0, y3, z2),
n.noise(x1, y0, z2),
n.noise(x1, y1, z2),
n.noise(x1, y2, z2),
n.noise(x1, y3, z2),
n.noise(x2, y0, z2),
n.noise(x2, y1, z2),
n.noise(x2, y2, z2),
n.noise(x2, y3, z2),
n.noise(x3, y0, z2),
n.noise(x3, y1, z2),
n.noise(x3, y2, z2),
n.noise(x3, y3, z2),
n.noise(x0, y0, z3),
n.noise(x0, y1, z3),
n.noise(x0, y2, z3),
n.noise(x0, y3, z3),
n.noise(x1, y0, z3),
n.noise(x1, y1, z3),
n.noise(x1, y2, z3),
n.noise(x1, y3, z3),
n.noise(x2, y0, z3),
n.noise(x2, y1, z3),
n.noise(x2, y2, z3),
n.noise(x2, y3, z3),
n.noise(x3, y0, z3),
n.noise(x3, y1, z3),
n.noise(x3, y2, z3),
n.noise(x3, y3, z3),
px, py, pz, tension, bias);
//@done
}
public static double getBilinearCenterSineNoise(int x, int z, double rad, NoiseProvider n) {
int fx = (int) Math.floor(x / rad);
int fz = (int) Math.floor(z / rad);
int x1 = (int) Math.round(fx * rad);
int z1 = (int) Math.round(fz * rad);
int x2 = (int) Math.round((fx + 1) * rad);
int z2 = (int) Math.round((fz + 1) * rad);
double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z);
//@builder
return blerpSinCenter(
n.noise(x1, z1),
n.noise(x2, z1),
n.noise(x1, z2),
n.noise(x2, z2),
px, pz);
//@done
}
public static double getBicubicNoise(int x, int z, double rad, NoiseProvider n) {
int fx = (int) Math.floor(x / rad);
int fz = (int) Math.floor(z / rad);
int x0 = (int) Math.round((fx - 1) * rad);
int z0 = (int) Math.round((fz - 1) * rad);
int x1 = (int) Math.round(fx * rad);
int z1 = (int) Math.round(fz * rad);
int x2 = (int) Math.round((fx + 1) * rad);
int z2 = (int) Math.round((fz + 1) * rad);
int x3 = (int) Math.round((fx + 2) * rad);
int z3 = (int) Math.round((fz + 2) * rad);
double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z);
//@builder
return bicubic(
n.noise(x0, z0),
n.noise(x0, z1),
n.noise(x0, z2),
n.noise(x0, z3),
n.noise(x1, z0),
n.noise(x1, z1),
n.noise(x1, z2),
n.noise(x1, z3),
n.noise(x2, z0),
n.noise(x2, z1),
n.noise(x2, z2),
n.noise(x2, z3),
n.noise(x3, z0),
n.noise(x3, z1),
n.noise(x3, z2),
n.noise(x3, z3),
px, pz);
//@done
}
public static double getBicubicBezierNoise(int x, int z, double rad, NoiseProvider n) {
int fx = (int) Math.floor(x / rad);
int fz = (int) Math.floor(z / rad);
int x0 = (int) Math.round((fx - 1) * rad);
int z0 = (int) Math.round((fz - 1) * rad);
int x1 = (int) Math.round(fx * rad);
int z1 = (int) Math.round(fz * rad);
int x2 = (int) Math.round((fx + 1) * rad);
int z2 = (int) Math.round((fz + 1) * rad);
int x3 = (int) Math.round((fx + 2) * rad);
int z3 = (int) Math.round((fz + 2) * rad);
double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z);
//@builder
return bicubicBezier(
n.noise(x0, z0),
n.noise(x0, z1),
n.noise(x0, z2),
n.noise(x0, z3),
n.noise(x1, z0),
n.noise(x1, z1),
n.noise(x1, z2),
n.noise(x1, z3),
n.noise(x2, z0),
n.noise(x2, z1),
n.noise(x2, z2),
n.noise(x2, z3),
n.noise(x3, z0),
n.noise(x3, z1),
n.noise(x3, z2),
n.noise(x3, z3),
px, pz);
//@done
}
public static double getBicubicParametricNoise(int x, int z, double rad, NoiseProvider n, double a) {
int fx = (int) Math.floor(x / rad);
int fz = (int) Math.floor(z / rad);
int x0 = (int) Math.round((fx - 1) * rad);
int z0 = (int) Math.round((fz - 1) * rad);
int x1 = (int) Math.round(fx * rad);
int z1 = (int) Math.round(fz * rad);
int x2 = (int) Math.round((fx + 1) * rad);
int z2 = (int) Math.round((fz + 1) * rad);
int x3 = (int) Math.round((fx + 2) * rad);
int z3 = (int) Math.round((fz + 2) * rad);
double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z);
//@builder
return bicubicParametric(
n.noise(x0, z0),
n.noise(x0, z1),
n.noise(x0, z2),
n.noise(x0, z3),
n.noise(x1, z0),
n.noise(x1, z1),
n.noise(x1, z2),
n.noise(x1, z3),
n.noise(x2, z0),
n.noise(x2, z1),
n.noise(x2, z2),
n.noise(x2, z3),
n.noise(x3, z0),
n.noise(x3, z1),
n.noise(x3, z2),
n.noise(x3, z3),
px, pz, a);
//@done
}
public static double getHermiteNoise(int x, int z, double rad, NoiseProvider n) {
return getHermiteNoise(x, z, rad, n, 0.5, 0);
}
public static double getHermiteBezierNoise(int x, int z, double rad, NoiseProvider n) {
return getHermiteBezierNoise(x, z, rad, n, 0.5, 0);
}
public static double getHermiteParametricNoise(int x, int z, double rad, NoiseProvider n, double a) {
return getHermiteParametricNoise(x, z, rad, n, 0.5, 0, a);
}
public static double getHermiteNoise(int x, int z, double rad, NoiseProvider n, double t, double b) {
int fx = (int) Math.floor(x / rad);
int fz = (int) Math.floor(z / rad);
int x0 = (int) Math.round((fx - 1) * rad);
int z0 = (int) Math.round((fz - 1) * rad);
int x1 = (int) Math.round(fx * rad);
int z1 = (int) Math.round(fz * rad);
int x2 = (int) Math.round((fx + 1) * rad);
int z2 = (int) Math.round((fz + 1) * rad);
int x3 = (int) Math.round((fx + 2) * rad);
int z3 = (int) Math.round((fz + 2) * rad);
double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z);
//@builder
return bihermite(
n.noise(x0, z0),
n.noise(x0, z1),
n.noise(x0, z2),
n.noise(x0, z3),
n.noise(x1, z0),
n.noise(x1, z1),
n.noise(x1, z2),
n.noise(x1, z3),
n.noise(x2, z0),
n.noise(x2, z1),
n.noise(x2, z2),
n.noise(x2, z3),
n.noise(x3, z0),
n.noise(x3, z1),
n.noise(x3, z2),
n.noise(x3, z3),
px, pz, t, b);
//@done
}
public static double getHermiteBezierNoise(int x, int z, double rad, NoiseProvider n, double t, double b) {
int fx = (int) Math.floor(x / rad);
int fz = (int) Math.floor(z / rad);
int x0 = (int) Math.round((fx - 1) * rad);
int z0 = (int) Math.round((fz - 1) * rad);
int x1 = (int) Math.round(fx * rad);
int z1 = (int) Math.round(fz * rad);
int x2 = (int) Math.round((fx + 1) * rad);
int z2 = (int) Math.round((fz + 1) * rad);
int x3 = (int) Math.round((fx + 2) * rad);
int z3 = (int) Math.round((fz + 2) * rad);
double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z);
//@builder
return bihermiteBezier(
n.noise(x0, z0),
n.noise(x0, z1),
n.noise(x0, z2),
n.noise(x0, z3),
n.noise(x1, z0),
n.noise(x1, z1),
n.noise(x1, z2),
n.noise(x1, z3),
n.noise(x2, z0),
n.noise(x2, z1),
n.noise(x2, z2),
n.noise(x2, z3),
n.noise(x3, z0),
n.noise(x3, z1),
n.noise(x3, z2),
n.noise(x3, z3),
px, pz, t, b);
//@done
}
public static double getHermiteParametricNoise(int x, int z, double rad, NoiseProvider n, double t, double b, double a) {
int fx = (int) Math.floor(x / rad);
int fz = (int) Math.floor(z / rad);
int x0 = (int) Math.round((fx - 1) * rad);
int z0 = (int) Math.round((fz - 1) * rad);
int x1 = (int) Math.round(fx * rad);
int z1 = (int) Math.round(fz * rad);
int x2 = (int) Math.round((fx + 1) * rad);
int z2 = (int) Math.round((fz + 1) * rad);
int x3 = (int) Math.round((fx + 2) * rad);
int z3 = (int) Math.round((fz + 2) * rad);
double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z);
//@builder
return bihermiteParametric(
n.noise(x0, z0),
n.noise(x0, z1),
n.noise(x0, z2),
n.noise(x0, z3),
n.noise(x1, z0),
n.noise(x1, z1),
n.noise(x1, z2),
n.noise(x1, z3),
n.noise(x2, z0),
n.noise(x2, z1),
n.noise(x2, z2),
n.noise(x2, z3),
n.noise(x3, z0),
n.noise(x3, z1),
n.noise(x3, z2),
n.noise(x3, z3),
px, pz, t, b, a);
//@done
}
public static double getRealRadius(InterpolationMethod method, double h) {
AtomicDouble rad = new AtomicDouble(h);
AtomicDouble accessX = new AtomicDouble();
AtomicDouble accessZ = new AtomicDouble();
NoiseProvider np = (x1, z1) -> {
double d = Math.max(Math.abs(x1), Math.abs(z1));
if (d > rad.get()) {
rad.set(d);
}
return 0;
};
getNoise(method, 0, 0, h, np);
return rad.get();
}
public static double getNoise3D(InterpolationMethod3D method, int x, int y, int z, double radx, double rady, double radz, NoiseProvider3 n) {
return switch (method) {
case TRILINEAR -> getTrilinear(x, y, z, radx, rady, radz, n);
case TRICUBIC -> getTricubic(x, y, z, radx, rady, radz, n);
case TRIHERMITE -> getTrihermite(x, y, z, radx, rady, radz, n);
case TRISTARCAST_3 -> getStarcast3D(x, y, z, radx, 3D, n);
case TRISTARCAST_6 -> getStarcast3D(x, y, z, radx, 6D, n);
case TRISTARCAST_9 -> getStarcast3D(x, y, z, radx, 9D, n);
case TRISTARCAST_12 -> getStarcast3D(x, y, z, radx, 12D, n);
case TRILINEAR_TRISTARCAST_3 -> getStarcast3D(x, y, z, radx, 3D, (xx, yy, zz) -> getTrilinear((int) xx, (int) yy, (int) zz, radx, rady, radz, n));
case TRILINEAR_TRISTARCAST_6 -> getStarcast3D(x, y, z, radx, 6D, (xx, yy, zz) -> getTrilinear((int) xx, (int) yy, (int) zz, radx, rady, radz, n));
case TRILINEAR_TRISTARCAST_9 -> getStarcast3D(x, y, z, radx, 9D, (xx, yy, zz) -> getTrilinear((int) xx, (int) yy, (int) zz, radx, rady, radz, n));
case TRILINEAR_TRISTARCAST_12 -> getStarcast3D(x, y, z, radx, 12D, (xx, yy, zz) -> getTrilinear((int) xx, (int) yy, (int) zz, radx, rady, radz, n));
case NONE -> n.noise(x, y, z);
};
}
public static Hunk<Double> getNoise3D(InterpolationMethod3D method, int xo, int yo, int zo, int w, int h, int d, double rad, NoiseProvider3 n) {
return getNoise3D(method, xo, yo, zo, w, h, d, rad, rad, rad, n);
}
/**
* Get the interpolated 3D noise within a given cuboid size with offsets
*
* @param method the interpolation method to use
* @param xo the x offset for noise
* @param yo the y offset for noise
* @param zo the z offset for noise
* @param w the width of the result
* @param h the height of the result
* @param d the depth of the result
* @param radX the interpolation radius for the x axis
* @param radY the interpolation radius for the y axis
* @param radZ the interpolation radius for the z axis
* @param n the noise provider
* @return the resulting hunk of noise
*/
public static Hunk<Double> getNoise3D(InterpolationMethod3D method, int xo, int yo, int zo, int w, int h, int d, double radX, double radY, double radZ, NoiseProvider3 n) {
Hunk<Double> hunk = Hunk.newAtomicDoubleHunk(w, h, d);
HashMap<Integer, Double> cache = new HashMap<>();
int i, j, k;
for (i = 0; i < w; i++) {
int fi = i;
for (j = 0; j < h; j++) {
int fj = j;
for (k = 0; k < d; k++) {
int fk = k;
hunk.set(i, j, k, cache.compute((k * w * h) + (j * w) + i, (p, v)
-> getNoise3D(method, fi + xo, fj + yo, fk + zo,
radX, radY, radZ, n)));
}
}
}
return hunk;
}
public static double getNoise3D(InterpolationMethod3D method, int x, int y, int z, double rad, NoiseProvider3 n) {
return getNoise3D(method, x, y, z, rad, rad, rad, n);
}
public static double getNoise(InterpolationMethod method, int x, int z, double h, NoiseProvider n) {
if (method.equals(InterpolationMethod.BILINEAR)) {
return getBilinearNoise(x, z, h, n);
} else if (method.equals(InterpolationMethod.STARCAST_3)) {
return getStarcast(x, z, h, 3D, n);
} else if (method.equals(InterpolationMethod.STARCAST_6)) {
return getStarcast(x, z, h, 6D, n);
} else if (method.equals(InterpolationMethod.STARCAST_9)) {
return getStarcast(x, z, h, 9D, n);
} else if (method.equals(InterpolationMethod.STARCAST_12)) {
return getStarcast(x, z, h, 12D, n);
} else if (method.equals(InterpolationMethod.BILINEAR_STARCAST_3)) {
return getStarcast(x, z, h, 3D, (xx, zz) -> getBilinearNoise((int) xx, (int) zz, h, n));
} else if (method.equals(InterpolationMethod.BILINEAR_STARCAST_6)) {
return getStarcast(x, z, h, 6D, (xx, zz) -> getBilinearNoise((int) xx, (int) zz, h, n));
} else if (method.equals(InterpolationMethod.BILINEAR_STARCAST_9)) {
return getStarcast(x, z, h, 9D, (xx, zz) -> getBilinearNoise((int) xx, (int) zz, h, n));
} else if (method.equals(InterpolationMethod.BILINEAR_STARCAST_12)) {
return getStarcast(x, z, h, 12D, (xx, zz) -> getBilinearNoise((int) xx, (int) zz, h, n));
} else if (method.equals(InterpolationMethod.HERMITE_STARCAST_3)) {
return getStarcast(x, z, h, 3D, (xx, zz) -> getHermiteNoise((int) xx, (int) zz, h, n, 0D, 0D));
} else if (method.equals(InterpolationMethod.HERMITE_STARCAST_6)) {
return getStarcast(x, z, h, 6D, (xx, zz) -> getHermiteNoise((int) xx, (int) zz, h, n, 0D, 0D));
} else if (method.equals(InterpolationMethod.HERMITE_STARCAST_9)) {
return getStarcast(x, z, h, 9D, (xx, zz) -> getHermiteNoise((int) xx, (int) zz, h, n, 0D, 0D));
} else if (method.equals(InterpolationMethod.HERMITE_STARCAST_12)) {
return getStarcast(x, z, h, 12D, (xx, zz) -> getHermiteNoise((int) xx, (int) zz, h, n, 0D, 0D));
} else if (method.equals(InterpolationMethod.BILINEAR_BEZIER)) {
return getBilinearBezierNoise(x, z, h, n);
} else if (method.equals(InterpolationMethod.BILINEAR_PARAMETRIC_2)) {
return getBilinearParametricNoise(x, z, h, n, 2);
} else if (method.equals(InterpolationMethod.BILINEAR_PARAMETRIC_4)) {
return getBilinearParametricNoise(x, z, h, n, 4);
} else if (method.equals(InterpolationMethod.BILINEAR_PARAMETRIC_1_5)) {
return getBilinearParametricNoise(x, z, h, n, 1.5);
} else if (method.equals(InterpolationMethod.BICUBIC)) {
return getBilinearNoise(x, z, h, n);
} else if (method.equals(InterpolationMethod.HERMITE)) {
return getHermiteNoise(x, z, h, n);
} else if (method.equals(InterpolationMethod.HERMITE_TENSE)) {
return getHermiteNoise(x, z, h, n, 0.8D, 0D);
} else if (method.equals(InterpolationMethod.CATMULL_ROM_SPLINE)) {
return getHermiteNoise(x, z, h, n, 1D, 0D);
} else if (method.equals(InterpolationMethod.HERMITE_LOOSE)) {
return getHermiteNoise(x, z, h, n, 0D, 0D);
} else if (method.equals(InterpolationMethod.HERMITE_LOOSE_HALF_NEGATIVE_BIAS)) {
return getHermiteNoise(x, z, h, n, 0D, -0.5D);
} else if (method.equals(InterpolationMethod.HERMITE_LOOSE_HALF_POSITIVE_BIAS)) {
return getHermiteNoise(x, z, h, n, 0D, 0.5D);
} else if (method.equals(InterpolationMethod.HERMITE_LOOSE_FULL_NEGATIVE_BIAS)) {
return getHermiteNoise(x, z, h, n, 0D, -1D);
} else if (method.equals(InterpolationMethod.HERMITE_LOOSE_FULL_POSITIVE_BIAS)) {
return getHermiteNoise(x, z, h, n, 0D, 1D);
}
return n.noise(x, z);
}
public static double rangeScale(double amin, double amax, double bmin, double bmax, double b) {
return amin + ((amax - amin) * ((b - bmin) / (bmax - bmin)));
}
}

View File

@@ -22,8 +22,14 @@ import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.engine.object.basic.IrisPosition;
import com.volmit.iris.engine.object.common.IObjectPlacer;
import com.volmit.iris.engine.object.jigsaw.LoaderJigsawPiece;
import com.volmit.iris.engine.object.jigsaw.IrisJigsawPieceConnector;
import com.volmit.iris.engine.object.loot.LoaderLootTable;
import com.volmit.iris.engine.object.meta.InventorySlotType;
import com.volmit.iris.engine.object.objects.LoaderObject;
import com.volmit.iris.engine.object.objects.IrisObjectRotation;
import com.volmit.iris.engine.object.tile.TileData;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.math.AxisAlignedBB;
@@ -43,9 +49,9 @@ import org.bukkit.util.BlockVector;
@Data
public class PlannedPiece {
private IrisPosition position;
private IrisObject object;
private IrisObject ogObject;
private IrisJigsawPiece piece;
private LoaderObject object;
private LoaderObject ogObject;
private LoaderJigsawPiece piece;
private IrisObjectRotation rotation;
private IrisData data;
private KList<IrisJigsawPieceConnector> connected;
@@ -53,15 +59,15 @@ public class PlannedPiece {
private AxisAlignedBB box;
private PlannedStructure structure;
public PlannedPiece(PlannedStructure structure, IrisPosition position, IrisJigsawPiece piece) {
public PlannedPiece(PlannedStructure structure, IrisPosition position, LoaderJigsawPiece piece) {
this(structure, position, piece, 0, 0, 0);
}
public PlannedPiece(PlannedStructure structure, IrisPosition position, IrisJigsawPiece piece, int rx, int ry, int rz) {
public PlannedPiece(PlannedStructure structure, IrisPosition position, LoaderJigsawPiece piece, int rx, int ry, int rz) {
this(structure, position, piece, IrisObjectRotation.of(rx * 90D, ry * 90D, rz * 90D));
}
public PlannedPiece(PlannedStructure structure, IrisPosition position, IrisJigsawPiece piece, IrisObjectRotation rot) {
public PlannedPiece(PlannedStructure structure, IrisPosition position, LoaderJigsawPiece piece, IrisObjectRotation rot) {
this.structure = structure;
this.position = position;
this.data = piece.getLoader();
@@ -181,7 +187,7 @@ public class PlannedPiece {
if (a != null && getPiece().getPlacementOptions().getLoot().isNotEmpty() &&
block.getState() instanceof InventoryHolder) {
IrisLootTable table = getPiece().getPlacementOptions().getTable(block.getBlockData(), getData());
LoaderLootTable table = getPiece().getPlacementOptions().getTable(block.getBlockData(), getData());
if (table == null) return;
Engine engine = a.getCompound().getEngineForHeight(y);
engine.addItems(false, ((InventoryHolder) block.getState()).getInventory(),

View File

@@ -24,9 +24,16 @@ import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.EngineParallaxManager;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.engine.interpolation.InterpolationMethod;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.engine.object.basic.IrisPosition;
import com.volmit.iris.util.interpolation.InterpolationMethod;
import com.volmit.iris.engine.object.common.IObjectPlacer;
import com.volmit.iris.engine.object.entity.LoaderEntity;
import com.volmit.iris.engine.object.feature.IrisFeature;
import com.volmit.iris.engine.object.feature.IrisFeaturePositional;
import com.volmit.iris.engine.object.jigsaw.LoaderJigsawPiece;
import com.volmit.iris.engine.object.jigsaw.IrisJigsawPieceConnector;
import com.volmit.iris.engine.object.jigsaw.LoaderJigsawStructure;
import com.volmit.iris.engine.object.objects.*;
import com.volmit.iris.engine.parallax.ParallaxChunkMeta;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.math.RNG;
@@ -39,20 +46,20 @@ import org.bukkit.entity.Entity;
@Data
public class PlannedStructure {
private KList<PlannedPiece> pieces;
private IrisJigsawStructure structure;
private LoaderJigsawStructure structure;
private IrisPosition position;
private IrisData data;
private RNG rng;
private boolean verbose;
private boolean terminating;
private static transient ConcurrentLinkedHashMap<String, IrisObject> objectRotationCache
= new ConcurrentLinkedHashMap.Builder<String, IrisObject>()
private static transient ConcurrentLinkedHashMap<String, LoaderObject> objectRotationCache
= new ConcurrentLinkedHashMap.Builder<String, LoaderObject>()
.initialCapacity(64)
.maximumWeightedCapacity(1024)
.concurrencyLevel(32)
.build();
public PlannedStructure(IrisJigsawStructure structure, IrisPosition position, RNG rng) {
public PlannedStructure(LoaderJigsawStructure structure, IrisPosition position, RNG rng) {
terminating = false;
verbose = true;
this.pieces = new KList<>();
@@ -96,8 +103,8 @@ public class PlannedStructure {
options.setMode(i.getPiece().getPlaceMode());
}
IrisObject vo = i.getOgObject();
IrisObject v = i.getObject();
LoaderObject vo = i.getOgObject();
LoaderObject v = i.getObject();
int sx = (v.getW() / 2);
int sz = (v.getD() / 2);
int xx = i.getPosition().getX() + sx;
@@ -169,7 +176,7 @@ public class PlannedStructure {
break;
}
IrisPosition p = i.getWorldPosition(j).add(new IrisPosition(j.getDirection().toVector().multiply(2)));
IrisEntity e = getData().getEntityLoader().load(j.getSpawnEntity());
LoaderEntity e = getData().getEntityLoader().load(j.getSpawnEntity());
if (a != null) {
Entity entity = e.spawn(a.getCompound().getEngineForHeight(p.getY()), new Location(world, p.getX() + 0.5, p.getY(), p.getZ() + 0.5), rng);
@@ -206,7 +213,7 @@ public class PlannedStructure {
}
private boolean generateConnectorOutwards(PlannedPiece piece, IrisJigsawPieceConnector pieceConnector) {
for (IrisJigsawPiece i : getShuffledPiecesFor(pieceConnector)) {
for (LoaderJigsawPiece i : getShuffledPiecesFor(pieceConnector)) {
if (generateRotatedPiece(piece, pieceConnector, i)) {
return true;
}
@@ -215,7 +222,7 @@ public class PlannedStructure {
return false;
}
private boolean generateRotatedPiece(PlannedPiece piece, IrisJigsawPieceConnector pieceConnector, IrisJigsawPiece idea) {
private boolean generateRotatedPiece(PlannedPiece piece, IrisJigsawPieceConnector pieceConnector, LoaderJigsawPiece idea) {
if (!piece.getPiece().getPlacementOptions().getRotation().isEnabled()) {
if (generateRotatedPiece(piece, pieceConnector, idea, 0, 0, 0)) {
return true;
@@ -249,7 +256,7 @@ public class PlannedStructure {
return false;
}
private boolean generateRotatedPiece(PlannedPiece piece, IrisJigsawPieceConnector pieceConnector, IrisJigsawPiece idea, IrisObjectRotation rotation) {
private boolean generateRotatedPiece(PlannedPiece piece, IrisJigsawPieceConnector pieceConnector, LoaderJigsawPiece idea, IrisObjectRotation rotation) {
if (!idea.getPlacementOptions().getRotation().isEnabled())
rotation = piece.getRotation(); //Inherit parent rotation
@@ -264,7 +271,7 @@ public class PlannedStructure {
return false;
}
private boolean generateRotatedPiece(PlannedPiece piece, IrisJigsawPieceConnector pieceConnector, IrisJigsawPiece idea, int x, int y, int z) {
private boolean generateRotatedPiece(PlannedPiece piece, IrisJigsawPieceConnector pieceConnector, LoaderJigsawPiece idea, int x, int y, int z) {
return generateRotatedPiece(piece, pieceConnector, idea, IrisObjectRotation.of(x, y, z));
}
@@ -299,12 +306,12 @@ public class PlannedStructure {
return true;
}
private KList<IrisJigsawPiece> getShuffledPiecesFor(IrisJigsawPieceConnector c) {
KList<IrisJigsawPiece> p = new KList<>();
private KList<LoaderJigsawPiece> getShuffledPiecesFor(IrisJigsawPieceConnector c) {
KList<LoaderJigsawPiece> p = new KList<>();
for (String i : c.getPools().shuffleCopy(rng)) {
for (String j : getData().getJigsawPoolLoader().load(i).getPieces().shuffleCopy(rng)) {
IrisJigsawPiece pi = getData().getJigsawPieceLoader().load(j);
LoaderJigsawPiece pi = getData().getJigsawPieceLoader().load(j);
if (pi == null || (terminating && !pi.isTerminal())) {
continue;
@@ -375,7 +382,7 @@ public class PlannedStructure {
return false;
}
public IrisObject rotated(IrisJigsawPiece piece, IrisObjectRotation rotation) {
public LoaderObject rotated(LoaderJigsawPiece piece, IrisObjectRotation rotation) {
String key = piece.getObject() + "-" + rotation.hashCode();
return objectRotationCache.compute(key, (k, v) -> {

View File

@@ -23,8 +23,8 @@ import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.EngineAssignedModifier;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.util.noise.FastNoiseDouble;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisCaveLayer;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.carve.IrisCaveLayer;
import com.volmit.iris.engine.object.common.CaveResult;
import com.volmit.iris.util.parallel.BurstExecutor;
import com.volmit.iris.util.collection.KList;
@@ -77,7 +77,7 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData> {
KList<CaveResult> caves = genCaves(x + finalI, z + j, finalI, j, a);
int he = (int) Math.round(getComplex().getHeightStream().get(x + finalI, z + j));
if (caves != null && caves.isNotEmpty()) {
IrisBiome cave = getComplex().getCaveBiomeStream().get(x + finalI, z + j);
LoaderBiome cave = getComplex().getCaveBiomeStream().get(x + finalI, z + j);
if (cave == null) {
continue;

View File

@@ -21,10 +21,10 @@ package com.volmit.iris.engine.modifier;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.EngineAssignedModifier;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisDepositGenerator;
import com.volmit.iris.engine.object.IrisObject;
import com.volmit.iris.engine.object.IrisRegion;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.deposits.IrisDepositGenerator;
import com.volmit.iris.engine.object.objects.LoaderObject;
import com.volmit.iris.engine.object.regional.LoaderRegion;
import com.volmit.iris.util.data.HeightMap;
import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
@@ -48,8 +48,8 @@ public class IrisDepositModifier extends EngineAssignedModifier<BlockData> {
public void generateDeposits(RNG rx, Hunk<BlockData> terrain, int x, int z) {
RNG ro = rx.nextParallelRNG(x * x).nextParallelRNG(z * z);
IrisRegion region = getComplex().getRegionStream().get((x * 16) + 7, (z * 16) + 7);
IrisBiome biome = getComplex().getTrueBiomeStream().get((x * 16) + 7, (z * 16) + 7);
LoaderRegion region = getComplex().getRegionStream().get((x * 16) + 7, (z * 16) + 7);
LoaderBiome biome = getComplex().getTrueBiomeStream().get((x * 16) + 7, (z * 16) + 7);
for (IrisDepositGenerator k : getDimension().getDeposits()) {
generate(k, terrain, ro, x, z, false);
@@ -74,7 +74,7 @@ public class IrisDepositModifier extends EngineAssignedModifier<BlockData> {
public void generate(IrisDepositGenerator k, Hunk<BlockData> data, RNG rng, int cx, int cz, boolean safe, HeightMap he) {
for (int l = 0; l < rng.i(k.getMinPerChunk(), k.getMaxPerChunk()); l++) {
IrisObject clump = k.getClump(rng, getData());
LoaderObject clump = k.getClump(rng, getData());
int af = (int) Math.ceil(clump.getW() / 2D);
int bf = (int) Math.floor(16D - (clump.getW() / 2D));

View File

@@ -23,7 +23,7 @@ import com.volmit.iris.engine.data.B;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.EngineAssignedModifier;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.common.CaveResult;
import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
@@ -136,7 +136,7 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
}
// Wall Patcher
IrisBiome biome = getComplex().getTrueBiomeStream().get(x, z);
LoaderBiome biome = getComplex().getTrueBiomeStream().get(x, z);
if (getDimension().isPostProcessingWalls()) {
if (!biome.getWall().getPalette().isEmpty()) {
@@ -231,7 +231,7 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
}
if (getDimension().isPostProcessCaves()) {
IrisBiome cave = getComplex().getCaveBiomeStream().get(x, z);
LoaderBiome cave = getComplex().getCaveBiomeStream().get(x, z);
if (cave != null) {
for (CaveResult i : ((IrisCaveModifier) getFramework().getCaveModifier()).genCaves(x, z, 0, 0, null)) {

View File

@@ -23,7 +23,7 @@ import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.EngineAssignedModifier;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.util.noise.CNG;
import com.volmit.iris.engine.object.NoiseStyle;
import com.volmit.iris.engine.object.noise.NoiseStyle;
import com.volmit.iris.util.math.BlockPosition;
import com.volmit.iris.util.math.MathHelper;
import com.volmit.iris.util.math.Position2;

View File

@@ -1,24 +0,0 @@
/*
* Iris is a World Generator for Minecraft Bukkit Servers
* Copyright (c) 2021 Arcane Arts (Volmit Software)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
// Because Red Matter is too weak
public class IrisMatter {
}

View File

@@ -1,49 +0,0 @@
/*
* Iris is a World Generator for Minecraft Bukkit Servers
* Copyright (c) 2021 Arcane Arts (Volmit Software)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
import com.volmit.iris.Iris;
import com.volmit.iris.core.project.loader.IrisData;
import lombok.Data;
import java.awt.*;
import java.io.File;
@Data
public abstract class IrisRegistrant {
private transient IrisData loader;
private transient String loadKey;
private transient File loadFile;
public abstract String getFolderName();
public abstract String getTypeName();
public File openInVSCode() {
try {
Desktop.getDesktop().open(getLoadFile());
} catch (Throwable e) {
Iris.reportError(e);
}
return getLoadFile();
}
}

View File

@@ -18,7 +18,7 @@
package com.volmit.iris.engine.object.annotations;
import com.volmit.iris.engine.object.IrisRegistrant;
import com.volmit.iris.core.project.loader.LoaderRegistrant;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -29,5 +29,5 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Retention(RUNTIME)
@Target({PARAMETER, TYPE, FIELD})
public @interface RegistryListResource {
Class<? extends IrisRegistrant> value();
Class<? extends LoaderRegistrant> value();
}

View File

@@ -16,10 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.basic;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MaxNumber;
import com.volmit.iris.engine.object.annotations.MinNumber;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.basic;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.util.format.Form;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.basic;
import com.volmit.iris.engine.object.annotations.Desc;
import lombok.AllArgsConstructor;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.basic;
import com.volmit.iris.engine.object.annotations.Desc;
import lombok.AllArgsConstructor;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.basic;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.util.math.RNG;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.basic;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.util.format.Form;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.basic;
import com.volmit.iris.engine.object.annotations.Desc;
import lombok.Data;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.basic;
import com.volmit.iris.engine.object.annotations.Desc;
import org.bukkit.World;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.biome;
import com.volmit.iris.engine.object.annotations.Desc;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.biome;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.object.annotations.*;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.biome;
import com.volmit.iris.engine.object.annotations.Desc;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.biome;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MaxNumber;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.biome;
import com.volmit.iris.engine.object.annotations.Desc;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.biome;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MaxNumber;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.biome;
import com.volmit.iris.engine.object.annotations.Desc;

View File

@@ -16,12 +16,13 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.biome;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.data.DataProvider;
import com.volmit.iris.engine.interpolation.IrisInterpolation;
import com.volmit.iris.util.interpolation.IrisInterpolation;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.engine.object.noise.LoaderGenerator;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -34,7 +35,7 @@ import lombok.experimental.Accessors;
@Data
public class IrisBiomeGeneratorLink {
@RegistryListResource(IrisGenerator.class)
@RegistryListResource(LoaderGenerator.class)
@Desc("The generator id")
private String generator = "default";
@@ -52,15 +53,15 @@ public class IrisBiomeGeneratorLink {
@Desc("The max block value (value + fluidHeight)")
private int max = 0;
private final transient AtomicCache<IrisGenerator> gen = new AtomicCache<>();
private final transient AtomicCache<LoaderGenerator> gen = new AtomicCache<>();
public IrisGenerator getCachedGenerator(DataProvider g) {
public LoaderGenerator getCachedGenerator(DataProvider g) {
return gen.aquire(() ->
{
IrisGenerator gen = g.getData().getGeneratorLoader().load(getGenerator());
LoaderGenerator gen = g.getData().getGeneratorLoader().load(getGenerator());
if (gen == null) {
gen = new IrisGenerator();
gen = new LoaderGenerator();
}
return gen;

View File

@@ -16,11 +16,13 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.biome;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.data.DataProvider;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.engine.object.objects.LoaderObject;
import com.volmit.iris.engine.object.objects.IrisObjectPlacement;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KSet;
import lombok.AllArgsConstructor;
@@ -34,13 +36,13 @@ import lombok.experimental.Accessors;
@Desc("A biome mutation if a condition is met")
@Data
public class IrisBiomeMutation {
@RegistryListResource(IrisBiome.class)
@RegistryListResource(LoaderBiome.class)
@Required
@ArrayType(min = 1, type = String.class)
@Desc("One of The following biomes or regions must show up")
private KList<String> sideA = new KList<>();
@RegistryListResource(IrisBiome.class)
@RegistryListResource(LoaderBiome.class)
@Required
@ArrayType(min = 1, type = String.class)
@Desc("One of The following biomes or regions must show up")
@@ -58,7 +60,7 @@ public class IrisBiomeMutation {
@Desc("How many tries per chunk to check for this mutation")
private int checks = 2;
@RegistryListResource(IrisObject.class)
@RegistryListResource(LoaderObject.class)
@ArrayType(min = 1, type = IrisObjectPlacement.class)
@Desc("Objects define what schematics (iob files) iris will place in this biome mutation")
private KList<IrisObjectPlacement> objects = new KList<>();

View File

@@ -16,10 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.biome;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.block.LoaderBlockData;
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
import com.volmit.iris.engine.object.noise.IrisSlopeClip;
import com.volmit.iris.engine.object.noise.NoiseStyle;
import com.volmit.iris.util.noise.CNG;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.util.collection.KList;
@@ -62,9 +66,9 @@ public class IrisBiomePaletteLayer {
private double zoom = 5;
@Required
@ArrayType(min = 1, type = IrisBlockData.class)
@ArrayType(min = 1, type = LoaderBlockData.class)
@Desc("The palette of blocks to be used in this layer")
private KList<IrisBlockData> palette = new KList<IrisBlockData>().qadd(new IrisBlockData("GRASS_BLOCK"));
private KList<LoaderBlockData> palette = new KList<LoaderBlockData>().qadd(new LoaderBlockData("GRASS_BLOCK"));
private final transient AtomicCache<KList<BlockData>> blockData = new AtomicCache<>();
private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>();
@@ -94,8 +98,8 @@ public class IrisBiomePaletteLayer {
});
}
public KList<IrisBlockData> add(String b) {
palette.add(new IrisBlockData(b));
public KList<LoaderBlockData> add(String b) {
palette.add(new LoaderBlockData(b));
return palette;
}
@@ -104,7 +108,7 @@ public class IrisBiomePaletteLayer {
return blockData.aquire(() ->
{
KList<BlockData> blockData = new KList<>();
for (IrisBlockData ix : palette) {
for (LoaderBlockData ix : palette) {
BlockData bx = ix.getBlockData(data);
if (bx != null) {
for (int i = 0; i < ix.getWeight(); i++) {

View File

@@ -16,17 +16,31 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.biome;
import com.volmit.iris.Iris;
import com.volmit.iris.core.gui.components.RenderType;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.core.project.loader.LoaderRegistrant;
import com.volmit.iris.engine.IrisComplex;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.data.B;
import com.volmit.iris.engine.data.DataProvider;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.engine.object.block.IrisBlockDrops;
import com.volmit.iris.engine.object.decoration.IrisDecorator;
import com.volmit.iris.engine.object.deposits.IrisDepositGenerator;
import com.volmit.iris.engine.object.feature.IrisFeaturePotential;
import com.volmit.iris.engine.object.jigsaw.IrisJigsawStructurePlacement;
import com.volmit.iris.engine.object.loot.IrisLootReference;
import com.volmit.iris.engine.object.meta.IrisEffect;
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
import com.volmit.iris.engine.object.noise.IrisSlopeClip;
import com.volmit.iris.engine.object.noise.NoiseStyle;
import com.volmit.iris.engine.object.objects.LoaderObject;
import com.volmit.iris.engine.object.objects.IrisObjectPlacement;
import com.volmit.iris.engine.object.spawners.LoaderSpawner;
import com.volmit.iris.util.noise.CNG;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.engine.object.common.IRare;
@@ -54,7 +68,7 @@ import java.awt.*;
@Desc("Represents a biome in iris. Biomes are placed inside of regions and hold objects.\nA biome consists of layers (block palletes), decorations, objects & generators.")
@Data
@EqualsAndHashCode(callSuper = false)
public class IrisBiome extends IrisRegistrant implements IRare {
public class LoaderBiome extends LoaderRegistrant implements IRare {
@MinNumber(2)
@Required
@Desc("This is the human readable name for this biome. This can and should be different than the file name. This is not used for loading biomes in other objects.")
@@ -66,7 +80,7 @@ public class IrisBiome extends IrisRegistrant implements IRare {
@Desc("Spawn Entities in this area over time. Iris will continually replenish these mobs just like vanilla does.")
@ArrayType(min = 1, type = String.class)
@RegistryListResource(IrisSpawner.class)
@RegistryListResource(LoaderSpawner.class)
private KList<String> entitySpawners = new KList<>();
@Desc("Add random chances for terrain features")
@@ -132,7 +146,7 @@ public class IrisBiome extends IrisRegistrant implements IRare {
@Desc("If this biome has children biomes, and the gen layer chooses one of this biomes children, How will it be shaped?")
private IrisGeneratorStyle childStyle = NoiseStyle.CELLULAR_IRIS_DOUBLE.style();
@RegistryListResource(IrisBiome.class)
@RegistryListResource(LoaderBiome.class)
@ArrayType(min = 1, type = String.class)
@Desc("List any biome names (file names without.json) here as children. Portions of this biome can sometimes morph into their children. Iris supports cyclic relationships such as A > B > A > B. Iris will stop checking 9 biomes down the tree.")
private KList<String> children = new KList<>();
@@ -141,7 +155,7 @@ public class IrisBiome extends IrisRegistrant implements IRare {
@Desc("Jigsaw structures")
private KList<IrisJigsawStructurePlacement> jigsawStructures = new KList<>();
@RegistryListResource(IrisBiome.class)
@RegistryListResource(LoaderBiome.class)
@Desc("The carving biome. If specified the biome will be used when under a carving instead of this current biome.")
private String carvingBiome = "";
@@ -193,8 +207,8 @@ public class IrisBiome extends IrisRegistrant implements IRare {
private final transient AtomicCache<CNG> biomeGenerator = new AtomicCache<>();
private final transient AtomicCache<Integer> maxHeight = new AtomicCache<>();
private final transient AtomicCache<Integer> maxWithObjectHeight = new AtomicCache<>();
private final transient AtomicCache<IrisBiome> realCarveBiome = new AtomicCache<>();
private final transient AtomicCache<KList<IrisBiome>> realChildren = new AtomicCache<>();
private final transient AtomicCache<LoaderBiome> realCarveBiome = new AtomicCache<>();
private final transient AtomicCache<KList<LoaderBiome>> realChildren = new AtomicCache<>();
private final transient AtomicCache<KList<CNG>> layerHeightGenerators = new AtomicCache<>();
private final transient AtomicCache<KList<CNG>> layerSeaHeightGenerators = new AtomicCache<>();
@@ -249,10 +263,10 @@ public class IrisBiome extends IrisRegistrant implements IRare {
}).get(loadKey);
}
public IrisBiome getRealCarvingBiome(IrisData data) {
public LoaderBiome getRealCarvingBiome(IrisData data) {
return realCarveBiome.aquire(() ->
{
IrisBiome biome = data.getBiomeLoader().load(getCarvingBiome());
LoaderBiome biome = data.getBiomeLoader().load(getCarvingBiome());
if (biome == null) {
biome = this;
@@ -431,7 +445,7 @@ public class IrisBiome extends IrisRegistrant implements IRare {
int gg = 0;
for (IrisObjectPlacement i : getObjects()) {
for (IrisObject j : data.getObjectLoader().loadAll(i.getPlace())) {
for (LoaderObject j : data.getObjectLoader().loadAll(i.getPlace())) {
gg = Math.max(gg, j.getH());
}
}
@@ -440,7 +454,7 @@ public class IrisBiome extends IrisRegistrant implements IRare {
});
}
public IrisBiome infer(InferredType t, InferredType type) {
public LoaderBiome infer(InferredType t, InferredType type) {
setInferredType(t.equals(InferredType.DEFER) ? type : t);
return this;
}
@@ -568,10 +582,10 @@ public class IrisBiome extends IrisRegistrant implements IRare {
return customDerivitives.get(getBiomeGenerator(rng).fit(0, customDerivitives.size() - 1, x, y, z));
}
public KList<IrisBiome> getRealChildren(DataProvider g) {
public KList<LoaderBiome> getRealChildren(DataProvider g) {
return realChildren.aquire(() ->
{
KList<IrisBiome> realChildren = new KList<>();
KList<LoaderBiome> realChildren = new KList<>();
for (String i : getChildren()) {
realChildren.add(g.getData().getBiomeLoader().load(i));
@@ -588,7 +602,7 @@ public class IrisBiome extends IrisRegistrant implements IRare {
if (limit > 0) {
for (String i : getChildren()) {
IrisBiome b = g.getData().getBiomeLoader().load(i);
LoaderBiome b = g.getData().getBiomeLoader().load(i);
m.addAll(b.getAllChildren(g, limit));
}
}

View File

@@ -16,13 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.block;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.annotations.ArrayType;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.Required;
import com.volmit.iris.engine.object.loot.IrisLoot;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.math.RNG;
import lombok.AllArgsConstructor;
@@ -39,9 +40,9 @@ import org.bukkit.inventory.ItemStack;
@Data
public class IrisBlockDrops {
@Required
@ArrayType(min = 1, type = IrisBlockData.class)
@ArrayType(min = 1, type = LoaderBlockData.class)
@Desc("The blocks that drop loot")
private KList<IrisBlockData> blocks = new KList<>();
private KList<LoaderBlockData> blocks = new KList<>();
@Desc("If exact blocks is set to true, minecraft:barrel[axis=x] will only drop for that axis. When exact is false (default) any barrel will drop the defined drops.")
private boolean exactBlocks = false;
@@ -63,7 +64,7 @@ public class IrisBlockDrops {
{
KList<BlockData> b = new KList<>();
for (IrisBlockData i : getBlocks()) {
for (LoaderBlockData i : getBlocks()) {
BlockData dd = i.getBlockData(rdata);
if (dd != null) {

View File

@@ -16,10 +16,12 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.block;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
import com.volmit.iris.engine.object.noise.NoiseStyle;
import com.volmit.iris.util.noise.CNG;
import com.volmit.iris.engine.object.annotations.ArrayType;
import com.volmit.iris.engine.object.annotations.Desc;
@@ -47,9 +49,9 @@ public class IrisMaterialPalette {
private double zoom = 5;
@Required
@ArrayType(min = 1, type = IrisBlockData.class)
@ArrayType(min = 1, type = LoaderBlockData.class)
@Desc("The palette of blocks to be used in this layer")
private KList<IrisBlockData> palette = new KList<IrisBlockData>().qadd(new IrisBlockData("STONE"));
private KList<LoaderBlockData> palette = new KList<LoaderBlockData>().qadd(new LoaderBlockData("STONE"));
private final transient AtomicCache<KList<BlockData>> blockData = new AtomicCache<>();
private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>();
@@ -80,14 +82,14 @@ public class IrisMaterialPalette {
return this;
}
public KList<IrisBlockData> add(String b) {
palette.add(new IrisBlockData(b));
public KList<LoaderBlockData> add(String b) {
palette.add(new LoaderBlockData(b));
return palette;
}
public IrisMaterialPalette qadd(String b) {
palette.add(new IrisBlockData(b));
palette.add(new LoaderBlockData(b));
return this;
}
@@ -96,7 +98,7 @@ public class IrisMaterialPalette {
return blockData.aquire(() ->
{
KList<BlockData> blockData = new KList<>();
for (IrisBlockData ix : palette) {
for (LoaderBlockData ix : palette) {
BlockData bx = ix.getBlockData(rdata);
if (bx != null) {
for (int i = 0; i < ix.getWeight(); i++) {

View File

@@ -16,12 +16,13 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.block;
import com.volmit.iris.Iris;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.data.B;
import com.volmit.iris.core.project.loader.LoaderRegistrant;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KMap;
@@ -41,7 +42,7 @@ import java.util.Map;
@Desc("Represents Block Data")
@Data
@EqualsAndHashCode(callSuper = false)
public class IrisBlockData extends IrisRegistrant {
public class LoaderBlockData extends LoaderRegistrant {
@RegistryListBlockType
@Required
@Desc("The block to use")
@@ -59,7 +60,7 @@ public class IrisBlockData extends IrisRegistrant {
private int weight = 1;
@Desc("If the block cannot be created on this version, Iris will attempt to use this backup block data instead.")
private IrisBlockData backup = null;
private LoaderBlockData backup = null;
@Desc("Optional properties for this block data such as 'waterlogged': true")
private KMap<String, Object> data = new KMap<>();
@@ -67,7 +68,7 @@ public class IrisBlockData extends IrisRegistrant {
private final transient AtomicCache<BlockData> blockdata = new AtomicCache<>();
private final transient AtomicCache<String> realProperties = new AtomicCache<>();
public IrisBlockData(String b) {
public LoaderBlockData(String b) {
this.block = b;
}
@@ -94,7 +95,7 @@ public class IrisBlockData extends IrisRegistrant {
{
BlockData b = null;
IrisBlockData customData = data.getBlockLoader().load(getBlock(), false);
LoaderBlockData customData = data.getBlockLoader().load(getBlock(), false);
if (customData != null) {
b = customData.getBlockData(data);
@@ -151,8 +152,8 @@ public class IrisBlockData extends IrisRegistrant {
});
}
public static IrisBlockData from(String j) {
IrisBlockData b = new IrisBlockData();
public static LoaderBlockData from(String j) {
LoaderBlockData b = new LoaderBlockData();
String m = j.toLowerCase().trim();
if (m.contains(":")) {

View File

@@ -16,11 +16,12 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.carve;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.interpolation.IrisInterpolation;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.util.interpolation.IrisInterpolation;
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
import com.volmit.iris.util.noise.CNG;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MaxNumber;

View File

@@ -16,11 +16,12 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.carve;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.data.B;
import com.volmit.iris.engine.object.block.LoaderBlockData;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MaxNumber;
import com.volmit.iris.engine.object.annotations.MinNumber;
@@ -48,7 +49,7 @@ public class IrisCaveFluid {
@Required
@Desc("The fluid type that should spawn here")
private IrisBlockData fluidType = new IrisBlockData("CAVE_AIR");
private LoaderBlockData fluidType = new LoaderBlockData("CAVE_AIR");
private final transient AtomicCache<BlockData> fluidData = new AtomicCache<>();

View File

@@ -16,11 +16,12 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.carve;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MinNumber;
import com.volmit.iris.engine.object.annotations.Required;
import com.volmit.iris.engine.object.noise.IrisShapedGeneratorStyle;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

View File

@@ -16,14 +16,15 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.carve;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MaxNumber;
import com.volmit.iris.engine.object.annotations.MinNumber;
import com.volmit.iris.engine.object.common.IRare;
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
import com.volmit.iris.util.stream.ProceduralStream;
import com.volmit.iris.util.math.RNG;
import lombok.AllArgsConstructor;

View File

@@ -16,12 +16,15 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.carve;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.annotations.ArrayType;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
import com.volmit.iris.engine.object.noise.IrisInterpolator3D;
import com.volmit.iris.engine.object.noise.NoiseStyle;
import com.volmit.iris.util.stream.ProceduralStream;
import com.volmit.iris.util.stream.interpolation.Interpolated;
import com.volmit.iris.util.collection.KList;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.compat;
import com.google.gson.Gson;
import com.volmit.iris.Iris;

View File

@@ -16,10 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.compat;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.data.B;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.Required;

View File

@@ -16,10 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.compat;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.data.B;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.Required;

View File

@@ -16,12 +16,12 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.decoration;
import com.volmit.iris.engine.object.annotations.Desc;
@Desc("Represents a location where decorations should go")
public enum DecorationPart {
public enum IrisDecorationPart {
@Desc("The default, decorate anywhere")
NONE,

View File

@@ -16,11 +16,15 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.decoration;
import com.volmit.iris.Iris;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.block.LoaderBlockData;
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
import com.volmit.iris.engine.object.noise.NoiseStyle;
import com.volmit.iris.util.noise.CNG;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.util.collection.KList;
@@ -51,7 +55,7 @@ public class IrisDecorator {
private IrisGeneratorStyle heightVariance = NoiseStyle.STATIC.style();
@Desc("Tells iris where this decoration is a part of. I.e. SHORE_LINE or SEA_SURFACE")
private DecorationPart partOf = DecorationPart.NONE;
private IrisDecorationPart partOf = IrisDecorationPart.NONE;
@DependsOn({"stackMin", "stackMax"})
@MinNumber(1)
@@ -78,13 +82,13 @@ public class IrisDecorator {
private double chance = 0.1;
@Required
@ArrayType(min = 1, type = IrisBlockData.class)
@ArrayType(min = 1, type = LoaderBlockData.class)
@Desc("The palette of blocks to pick from when this decorator needs to place.")
private KList<IrisBlockData> palette = new KList<IrisBlockData>().qadd(new IrisBlockData("grass"));
private KList<LoaderBlockData> palette = new KList<LoaderBlockData>().qadd(new LoaderBlockData("grass"));
@ArrayType(min = 1, type = IrisBlockData.class)
@ArrayType(min = 1, type = LoaderBlockData.class)
@Desc("The palette of blocks used at the very top of a 'stackMax' of higher than 1. For example, bamboo tops.")
private KList<IrisBlockData> topPalette = new KList<>();
private KList<LoaderBlockData> topPalette = new KList<>();
@DependsOn("topPalette")
@MinNumber(0.01)
@@ -122,12 +126,12 @@ public class IrisDecorator {
.scale(1D / variance.getZoom()));
}
public KList<IrisBlockData> add(String b) {
palette.add(new IrisBlockData(b));
public KList<LoaderBlockData> add(String b) {
palette.add(new LoaderBlockData(b));
return palette;
}
public BlockData getBlockData(IrisBiome b, RNG rng, double x, double z, IrisData data) {
public BlockData getBlockData(LoaderBiome b, RNG rng, double x, double z, IrisData data) {
if (getBlockData(data).isEmpty()) {
Iris.warn("Empty Block Data for " + b.getName());
return null;
@@ -147,7 +151,7 @@ public class IrisDecorator {
return null;
}
public BlockData getBlockData100(IrisBiome b, RNG rng, double x, double y, double z, IrisData data) {
public BlockData getBlockData100(LoaderBiome b, RNG rng, double x, double y, double z, IrisData data) {
if (getBlockData(data).isEmpty()) {
Iris.warn("Empty Block Data for " + b.getName());
return null;
@@ -170,7 +174,7 @@ public class IrisDecorator {
return getVarianceGenerator(rng, data).fit(getBlockData(data), z, y, x).clone(); //X and Z must be switched
}
public BlockData getBlockDataForTop(IrisBiome b, RNG rng, double x, double y, double z, IrisData data) {
public BlockData getBlockDataForTop(LoaderBiome b, RNG rng, double x, double y, double z, IrisData data) {
if (getBlockDataTops(data).isEmpty()) {
return getBlockData100(b, rng, x, y, z, data);
}
@@ -193,7 +197,7 @@ public class IrisDecorator {
return blockData.aquire(() ->
{
KList<BlockData> blockData = new KList<>();
for (IrisBlockData i : palette) {
for (LoaderBlockData i : palette) {
BlockData bx = i.getBlockData(data);
if (bx != null) {
for (int n = 0; n < i.getWeight(); n++) {
@@ -210,7 +214,7 @@ public class IrisDecorator {
return blockDataTops.aquire(() ->
{
KList<BlockData> blockDataTops = new KList<>();
for (IrisBlockData i : topPalette) {
for (LoaderBlockData i : topPalette) {
BlockData bx = i.getBlockData(data);
if (bx != null) {
for (int n = 0; n < i.getWeight(); n++) {

View File

@@ -16,11 +16,13 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.deposits;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.engine.object.block.LoaderBlockData;
import com.volmit.iris.engine.object.objects.LoaderObject;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.math.RNG;
import lombok.AllArgsConstructor;
@@ -73,23 +75,23 @@ public class IrisDepositGenerator {
private int minPerChunk = 1;
@Required
@ArrayType(min = 1, type = IrisBlockData.class)
@ArrayType(min = 1, type = LoaderBlockData.class)
@Desc("The palette of blocks to be used in this deposit generator")
private KList<IrisBlockData> palette = new KList<>();
private KList<LoaderBlockData> palette = new KList<>();
@MinNumber(1)
@MaxNumber(64)
@Desc("Ore varience is how many different objects clumps iris will create")
private int varience = 3;
private final transient AtomicCache<KList<IrisObject>> objects = new AtomicCache<>();
private final transient AtomicCache<KList<LoaderObject>> objects = new AtomicCache<>();
private final transient AtomicCache<KList<BlockData>> blockData = new AtomicCache<>();
public IrisObject getClump(RNG rng, IrisData rdata) {
KList<IrisObject> objects = this.objects.aquire(() ->
public LoaderObject getClump(RNG rng, IrisData rdata) {
KList<LoaderObject> objects = this.objects.aquire(() ->
{
RNG rngv = rng.nextParallelRNG(3957778);
KList<IrisObject> objectsf = new KList<>();
KList<LoaderObject> objectsf = new KList<>();
for (int i = 0; i < varience; i++) {
objectsf.add(generateClumpObject(rngv.nextParallelRNG(2349 * i + 3598), rdata));
@@ -104,11 +106,11 @@ public class IrisDepositGenerator {
return Math.min(11, (int) Math.round(Math.pow(maxSize, 1D / 3D)));
}
private IrisObject generateClumpObject(RNG rngv, IrisData rdata) {
private LoaderObject generateClumpObject(RNG rngv, IrisData rdata) {
int s = rngv.i(minSize, maxSize);
int dim = Math.min(11, (int) Math.round(Math.pow(maxSize, 1D / 3D)));
int w = dim / 2;
IrisObject o = new IrisObject(dim, dim, dim);
LoaderObject o = new LoaderObject(dim, dim, dim);
if (s == 1) {
o.getBlocks().put(o.getCenter(), nextBlock(rngv, rdata));
@@ -133,7 +135,7 @@ public class IrisDepositGenerator {
{
KList<BlockData> blockData = new KList<>();
for (IrisBlockData ix : palette) {
for (LoaderBlockData ix : palette) {
BlockData bx = ix.getBlockData(rdata);
if (bx != null) {

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.dimensional;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MinNumber;
@@ -47,7 +47,7 @@ public class IrisDimensionIndex {
private boolean primary = false;
@Required
@RegistryListResource(IrisDimension.class)
@RegistryListResource(LoaderDimension.class)
@MinNumber(1)
@Desc("Name of dimension")
private String dimension = "";

View File

@@ -16,11 +16,13 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.dimensional;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MaxNumber;
import com.volmit.iris.engine.object.annotations.MinNumber;
import com.volmit.iris.engine.object.noise.IrisInterpolator;
import com.volmit.iris.engine.object.noise.IrisStyledRange;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.dimensional;
import com.volmit.iris.engine.object.annotations.Desc;

View File

@@ -16,12 +16,36 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.dimensional;
import com.volmit.iris.Iris;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.core.project.loader.LoaderRegistrant;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.data.DataProvider;
import com.volmit.iris.engine.object.biome.InferredType;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.biome.IrisBiomeCustom;
import com.volmit.iris.engine.object.biome.IrisBiomeMutation;
import com.volmit.iris.engine.object.block.IrisBlockDrops;
import com.volmit.iris.engine.object.block.IrisMaterialPalette;
import com.volmit.iris.engine.object.carve.IrisCarveLayer;
import com.volmit.iris.engine.object.carve.IrisCaveFluid;
import com.volmit.iris.engine.object.carve.IrisCaveLayer;
import com.volmit.iris.engine.object.carve.IrisCaverns;
import com.volmit.iris.engine.object.deposits.IrisDepositGenerator;
import com.volmit.iris.engine.object.feature.IrisFeaturePositional;
import com.volmit.iris.engine.object.feature.IrisFeaturePotential;
import com.volmit.iris.engine.object.jigsaw.LoaderJigsawStructure;
import com.volmit.iris.engine.object.jigsaw.IrisJigsawStructurePlacement;
import com.volmit.iris.engine.object.loot.IrisLootReference;
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
import com.volmit.iris.engine.object.noise.IrisShapedGeneratorStyle;
import com.volmit.iris.engine.object.noise.NoiseStyle;
import com.volmit.iris.engine.object.objects.IrisObjectPlacement;
import com.volmit.iris.engine.object.regional.LoaderRegion;
import com.volmit.iris.engine.object.spawners.LoaderSpawner;
import com.volmit.iris.engine.object.trees.IrisTreeSettings;
import com.volmit.iris.util.noise.CNG;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.util.collection.KList;
@@ -47,7 +71,7 @@ import java.io.IOException;
@Desc("Represents a dimension")
@Data
@EqualsAndHashCode(callSuper = false)
public class IrisDimension extends IrisRegistrant {
public class LoaderDimension extends LoaderRegistrant {
public static final BlockData STONE = Material.STONE.createBlockData();
public static final BlockData WATER = Material.WATER.createBlockData();
@@ -61,9 +85,9 @@ public class IrisDimension extends IrisRegistrant {
private KList<IrisDimensionIndex> dimensionalComposite = new KList<>();
@Desc("Create an inverted dimension in the sky (like the nether)")
private IrisDimension sky = null;
private LoaderDimension sky = null;
@RegistryListResource(IrisJigsawStructure.class)
@RegistryListResource(LoaderJigsawStructure.class)
@Desc("If defined, Iris will place the given jigsaw structure where minecraft should place the overworld stronghold.")
private String stronghold;
@@ -90,7 +114,7 @@ public class IrisDimension extends IrisRegistrant {
@Desc("Spawn Entities in this dimension over time. Iris will continually replenish these mobs just like vanilla does.")
@ArrayType(min = 1, type = String.class)
@RegistryListResource(IrisSpawner.class)
@RegistryListResource(LoaderSpawner.class)
private KList<String> entitySpawners = new KList<>();
@Desc("Add specific features in exact positions")
@@ -194,7 +218,7 @@ public class IrisDimension extends IrisRegistrant {
@Desc("The world environment")
private Environment environment = Environment.NORMAL;
@RegistryListResource(IrisRegion.class)
@RegistryListResource(LoaderRegion.class)
@Required
@ArrayType(min = 1, type = String.class)
@Desc("Define all of the regions to include in this dimension. Dimensions -> Regions -> Biomes -> Objects etc")
@@ -210,11 +234,11 @@ public class IrisDimension extends IrisRegistrant {
@Desc("The fluid height for this dimension")
private int fluidHeight = 63;
@RegistryListResource(IrisBiome.class)
@RegistryListResource(LoaderBiome.class)
@Desc("Keep this either undefined or empty. Setting any biome name into this will force iris to only generate the specified biome. Great for testing.")
private String focus = "";
@RegistryListResource(IrisBiome.class)
@RegistryListResource(LoaderBiome.class)
@Desc("Keep this either undefined or empty. Setting any region name into this will force iris to only generate the specified region. Great for testing.")
private String focusRegion = "";
@@ -385,8 +409,8 @@ public class IrisDimension extends IrisRegistrant {
return cosr.aquire(() -> Math.cos(getDimensionAngle()));
}
public KList<IrisRegion> getAllRegions(DataProvider g) {
KList<IrisRegion> r = new KList<>();
public KList<LoaderRegion> getAllRegions(DataProvider g) {
KList<LoaderRegion> r = new KList<>();
for (String i : getRegions()) {
r.add(g.getData().getRegionLoader().load(i));
@@ -395,8 +419,8 @@ public class IrisDimension extends IrisRegistrant {
return r;
}
public KList<IrisRegion> getAllAnyRegions() {
KList<IrisRegion> r = new KList<>();
public KList<LoaderRegion> getAllAnyRegions() {
KList<LoaderRegion> r = new KList<>();
for (String i : getRegions()) {
r.add(IrisData.loadAnyRegion(i));
@@ -405,14 +429,14 @@ public class IrisDimension extends IrisRegistrant {
return r;
}
public KList<IrisBiome> getAllBiomes(DataProvider g) {
public KList<LoaderBiome> getAllBiomes(DataProvider g) {
return g.getData().getBiomeLoader().loadAll(g.getData().getBiomeLoader().getPossibleKeys());
}
public KList<IrisBiome> getAllAnyBiomes() {
KList<IrisBiome> r = new KList<>();
public KList<LoaderBiome> getAllAnyBiomes() {
KList<LoaderBiome> r = new KList<>();
for (IrisRegion i : getAllAnyRegions()) {
for (LoaderRegion i : getAllAnyRegions()) {
if (i == null) {
continue;
}
@@ -450,7 +474,7 @@ public class IrisDimension extends IrisRegistrant {
IO.delete(new File(datapacks, "iris/data/" + getLoadKey()));
for (IrisBiome i : getAllBiomes(data)) {
for (LoaderBiome i : getAllBiomes(data)) {
if (i.isCustom()) {
write = true;
@@ -500,7 +524,7 @@ public class IrisDimension extends IrisRegistrant {
return true;
}
for (IrisRegion i : getAllRegions(data)) {
for (LoaderRegion i : getAllRegions(data)) {
if (i.getFeatures().isNotEmpty()) {
return true;
}
@@ -511,7 +535,7 @@ public class IrisDimension extends IrisRegistrant {
}
}
for (IrisBiome j : i.getAllBiomes(data)) {
for (LoaderBiome j : i.getAllBiomes(data)) {
if (j.getFeatures().isNotEmpty()) {
return true;
}

View File

@@ -19,7 +19,7 @@
package com.volmit.iris.engine.object.engine;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.object.IrisRate;
import com.volmit.iris.engine.object.basic.IrisRate;
import com.volmit.iris.util.math.M;
import lombok.Data;

View File

@@ -16,14 +16,16 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.entity;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.IrisComplex;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.EngineFramework;
import com.volmit.iris.engine.modifier.IrisCaveModifier;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.spawners.LoaderSpawner;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MinNumber;
import com.volmit.iris.engine.object.annotations.RegistryListResource;
@@ -38,9 +40,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.bukkit.Chunk;
import org.bukkit.HeightMap;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
@Accessors(chain = true)
@@ -49,7 +49,7 @@ import org.bukkit.entity.Entity;
@Desc("Represents an entity spawn during initial chunk generation")
@Data
public class IrisEntitySpawn implements IRare {
@RegistryListResource(IrisEntity.class)
@RegistryListResource(LoaderEntity.class)
@Required
@Desc("The entity")
private String entity = "";
@@ -69,9 +69,9 @@ public class IrisEntitySpawn implements IRare {
@Desc("The max of this entity to spawn")
private int maxSpawns = 1;
private transient IrisSpawner referenceSpawner;
private transient LoaderSpawner referenceSpawner;
private final transient AtomicCache<RNG> rng = new AtomicCache<>();
private final transient AtomicCache<IrisEntity> ent = new AtomicCache<>();
private final transient AtomicCache<LoaderEntity> ent = new AtomicCache<>();
public int spawn(Engine gen, Chunk c, RNG rng) {
int spawns = minSpawns == maxSpawns ? minSpawns : rng.i(Math.min(minSpawns, maxSpawns), Math.max(minSpawns, maxSpawns));
@@ -88,7 +88,7 @@ public class IrisEntitySpawn implements IRare {
case CAVE -> {
IrisComplex comp = gen.getFramework().getComplex();
EngineFramework frame = gen.getFramework();
IrisBiome cave = comp.getCaveBiomeStream().get(x, z);
LoaderBiome cave = comp.getCaveBiomeStream().get(x, z);
KList<Location> r = new KList<>();
if (cave != null) {
for (CaveResult i : ((IrisCaveModifier) frame.getCaveModifier()).genCaves(x, z)) {
@@ -116,7 +116,7 @@ public class IrisEntitySpawn implements IRare {
return s;
}
public IrisEntity getRealEntity(Engine g) {
public LoaderEntity getRealEntity(Engine g) {
return ent.aquire(() -> g.getData().getEntityLoader().load(getEntity()));
}
@@ -134,7 +134,7 @@ public class IrisEntitySpawn implements IRare {
private Entity spawn100(Engine g, Location at) {
try {
IrisEntity irisEntity = getRealEntity(g);
LoaderEntity irisEntity = getRealEntity(g);
if (!irisEntity.getSurface().matches(at.clone().subtract(0, 1, 0).getBlock().getState())) return null; //Make sure it can spawn on the block

View File

@@ -16,9 +16,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.entity;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MinNumber;
@@ -40,7 +40,7 @@ import org.bukkit.event.entity.EntitySpawnEvent;
@Desc("Represents an entity spawn")
@Data
public class IrisEntitySpawnOverride {
@RegistryListResource(IrisEntity.class)
@RegistryListResource(LoaderEntity.class)
@Required
@Desc("The entity")
private String entity = "";
@@ -57,7 +57,7 @@ public class IrisEntitySpawnOverride {
private int rarity = 1;
private final transient AtomicCache<RNG> rng = new AtomicCache<>();
private final transient AtomicCache<IrisEntity> ent = new AtomicCache<>();
private final transient AtomicCache<LoaderEntity> ent = new AtomicCache<>();
public Entity on(Engine g, Location at, EntityType t, EntitySpawnEvent ee) {
@@ -89,7 +89,7 @@ public class IrisEntitySpawnOverride {
return null;
}
public IrisEntity getRealEntity(Engine g) {
public LoaderEntity getRealEntity(Engine g) {
return ent.aquire(() -> g.getData().getEntityLoader().load(getEntity()));
}
}

View File

@@ -16,13 +16,21 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.entity;
import com.volmit.iris.Iris;
import com.volmit.iris.core.project.loader.LoaderRegistrant;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.object.annotations.ArrayType;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.Required;
import com.volmit.iris.engine.object.loot.IrisLoot;
import com.volmit.iris.engine.object.loot.IrisLootReference;
import com.volmit.iris.engine.object.loot.LoaderLootTable;
import com.volmit.iris.engine.object.meta.InventorySlotType;
import com.volmit.iris.engine.object.meta.IrisAttributeModifier;
import com.volmit.iris.engine.object.meta.IrisEffect;
import com.volmit.iris.engine.object.spawners.IrisSurface;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.format.C;
import com.volmit.iris.util.math.RNG;
@@ -57,7 +65,7 @@ import java.util.concurrent.atomic.AtomicReference;
@Desc("Represents an iris entity.")
@Data
@EqualsAndHashCode(callSuper = false)
public class IrisEntity extends IrisRegistrant {
public class LoaderEntity extends LoaderRegistrant {
@Required
@Desc("The type of entity to spawn. To spawn a mythic mob, set this type to unknown and define mythic type.")
private EntityType type = EntityType.UNKNOWN;
@@ -111,8 +119,8 @@ public class IrisEntity extends IrisRegistrant {
private IrisLoot offHand = null;
@Desc("Make other entities ride this entity")
@ArrayType(min = 1, type = IrisEntity.class)
private KList<IrisEntity> passengers = new KList<>();
@ArrayType(min = 1, type = LoaderEntity.class)
private KList<LoaderEntity> passengers = new KList<>();
@Desc("Attribute modifiers for this entity")
@ArrayType(min = 1, type = IrisAttributeModifier.class)
@@ -122,7 +130,7 @@ public class IrisEntity extends IrisRegistrant {
private IrisLootReference loot = new IrisLootReference();
@Desc("If specified, this entity will be leashed by this entity. I.e. THIS ENTITY Leashed by SPECIFIED. This has no effect on EnderDragons, Withers, Players, or Bats.Non-living entities excluding leashes will not persist as leashholders.")
private IrisEntity leashHolder = null;
private LoaderEntity leashHolder = null;
@Desc("If specified, this entity will spawn with an effect")
private IrisEffect spawnEffect = null;
@@ -163,7 +171,7 @@ public class IrisEntity extends IrisRegistrant {
e.setPersistent(isKeepEntity());
int gg = 0;
for (IrisEntity i : passengers) {
for (LoaderEntity i : passengers) {
Entity passenger = i.spawn(gen, at, rng.nextParallelRNG(234858 + gg++));
if (!Bukkit.isPrimaryThread()) {
J.s(() -> e.addPassenger(passenger));
@@ -185,7 +193,7 @@ public class IrisEntity extends IrisRegistrant {
l.setLootTable(new LootTable() {
@Override
public NamespacedKey getKey() {
return new NamespacedKey(Iris.instance, "loot-" + IrisEntity.this.hashCode());
return new NamespacedKey(Iris.instance, "loot-" + LoaderEntity.this.hashCode());
}
@Override
@@ -193,7 +201,7 @@ public class IrisEntity extends IrisRegistrant {
KList<ItemStack> items = new KList<>();
for (String fi : getLoot().getTables()) {
IrisLootTable i = gen.getData().getLootLoader().load(fi);
LoaderLootTable i = gen.getData().getLootLoader().load(fi);
items.addAll(i.getLoot(gen.isStudio(), false, rng.nextParallelRNG(345911), InventorySlotType.STORAGE, at.getBlockX(), at.getBlockY(), at.getBlockZ(), 8, 4));
}

View File

@@ -16,13 +16,16 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.feature;
import com.google.gson.Gson;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.interpolation.InterpolationMethod;
import com.volmit.iris.engine.interpolation.IrisInterpolation;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.util.interpolation.InterpolationMethod;
import com.volmit.iris.util.interpolation.IrisInterpolation;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.spawners.LoaderSpawner;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
import com.volmit.iris.util.collection.KList;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -47,7 +50,7 @@ public class IrisFeature {
@Desc("The chance an object that should be place actually will place. Set to below 1 to affect objects in this zone")
private double objectChance = 1;
@RegistryListResource(IrisBiome.class)
@RegistryListResource(LoaderBiome.class)
@Desc("Apply a custom biome here")
private String customBiome = null;
@@ -82,7 +85,7 @@ public class IrisFeature {
@Desc("Fracture the radius ring with additional noise")
private IrisGeneratorStyle fractureRadius = null;
@RegistryListResource(IrisSpawner.class)
@RegistryListResource(LoaderSpawner.class)
@ArrayType(min = 1, type = String.class)
@Desc("Within this noise feature, use the following spawners")
private KList<String> entitySpawners = new KList<>();

View File

@@ -16,12 +16,13 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.feature;
import com.google.gson.Gson;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.interpolation.IrisInterpolation;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.util.interpolation.IrisInterpolation;
import com.volmit.iris.engine.object.biome.LoaderBiome;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.Required;
import com.volmit.iris.util.documentation.BlockCoordinates;
@@ -124,10 +125,10 @@ public class IrisFeaturePositional {
return M.lerp(1, getFeature().getObjectChance(), getStrength(x, z, rng, data));
}
public IrisBiome filter(double x, double z, IrisBiome biome, RNG rng) {
public LoaderBiome filter(double x, double z, LoaderBiome biome, RNG rng) {
if (getFeature().getCustomBiome() != null) {
if (getStrength(x, z, rng, biome.getLoader()) >= getFeature().getBiomeStrengthThreshold()) {
IrisBiome b = biome.getLoader().getBiomeLoader().load(getFeature().getCustomBiome());
LoaderBiome b = biome.getLoader().getBiomeLoader().load(getFeature().getCustomBiome());
b.setInferredType(biome.getInferredType());
return b;
}

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.feature;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MinNumber;

View File

@@ -16,8 +16,11 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.jigsaw;
import com.volmit.iris.engine.object.objects.IrisDirection;
import com.volmit.iris.engine.object.entity.LoaderEntity;
import com.volmit.iris.engine.object.basic.IrisPosition;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.util.collection.KList;
import lombok.AllArgsConstructor;
@@ -49,13 +52,13 @@ public class IrisJigsawPieceConnector {
@Desc("If set to true, this connector is allowed to place pieces inside of it's own piece. For example if you are adding a light post, or house on top of a path piece, you would set this to true to allow the piece to collide with the path bounding box.")
private boolean innerConnector = false;
@RegistryListResource(IrisJigsawPool.class)
@RegistryListResource(LoaderJigsawPool.class)
@Desc("Pick piece pools to place onto this connector")
@ArrayType(type = String.class, min = 1)
@Required
private KList<String> pools = new KList<>();
@RegistryListResource(IrisEntity.class)
@RegistryListResource(LoaderEntity.class)
@Desc("Pick an entity to spawn on this connector")
private String spawnEntity;

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.jigsaw;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MinNumber;
@@ -33,7 +33,7 @@ import lombok.experimental.Accessors;
@Desc("Represents a jigsaw placement")
@Data
public class IrisJigsawPlacement {
@RegistryListResource(IrisJigsawStructure.class)
@RegistryListResource(LoaderJigsawStructure.class)
@Required
@Desc("The jigsaw structure to use")
private String structure = "";

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.jigsaw;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.RegistryListResource;
@@ -36,7 +36,7 @@ import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = false)
public class IrisJigsawStructurePlacement {
@RegistryListResource(IrisJigsawStructure.class)
@RegistryListResource(LoaderJigsawStructure.class)
@Required
@Desc("The structure to place")
private String structure;

View File

@@ -16,14 +16,19 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.jigsaw;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.basic.IrisPosition;
import com.volmit.iris.core.project.loader.LoaderRegistrant;
import com.volmit.iris.engine.object.objects.ObjectPlaceMode;
import com.volmit.iris.engine.object.annotations.ArrayType;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.RegistryListResource;
import com.volmit.iris.engine.object.annotations.Required;
import com.volmit.iris.engine.object.objects.LoaderObject;
import com.volmit.iris.engine.object.objects.IrisObjectPlacement;
import com.volmit.iris.util.collection.KList;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -42,8 +47,8 @@ import java.io.IOException;
@Desc("Represents a structure tile")
@Data
@EqualsAndHashCode(callSuper = false)
public class IrisJigsawPiece extends IrisRegistrant {
@RegistryListResource(IrisObject.class)
public class LoaderJigsawPiece extends LoaderRegistrant {
@RegistryListResource(LoaderObject.class)
@Required
@Desc("The object this piece represents")
private String object = "";
@@ -62,7 +67,7 @@ public class IrisJigsawPiece extends IrisRegistrant {
public int getMax2dDimension() {
return max2dDim.aquire(() -> {
try {
BlockVector v = IrisObject.sampleSize(getLoader().getObjectLoader().findFile(getObject()));
BlockVector v = LoaderObject.sampleSize(getLoader().getObjectLoader().findFile(getObject()));
return Math.max(v.getBlockX(), v.getBlockZ());
} catch (IOException e) {
Iris.reportError(e);
@@ -76,7 +81,7 @@ public class IrisJigsawPiece extends IrisRegistrant {
public int getMax3dDimension() {
return max3dDim.aquire(() -> {
try {
BlockVector v = IrisObject.sampleSize(getLoader().getObjectLoader().findFile(getObject()));
BlockVector v = LoaderObject.sampleSize(getLoader().getObjectLoader().findFile(getObject()));
return Math.max(Math.max(v.getBlockX(), v.getBlockZ()), v.getBlockY());
} catch (IOException e) {
Iris.reportError(e);
@@ -98,8 +103,8 @@ public class IrisJigsawPiece extends IrisRegistrant {
return null;
}
public IrisJigsawPiece copy() {
IrisJigsawPiece p = new IrisJigsawPiece();
public LoaderJigsawPiece copy() {
LoaderJigsawPiece p = new LoaderJigsawPiece();
p.setObject(getObject());
p.setLoader(getLoader());
p.setLoadKey(getLoadKey());

View File

@@ -16,8 +16,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.jigsaw;
import com.volmit.iris.core.project.loader.LoaderRegistrant;
import com.volmit.iris.engine.object.annotations.ArrayType;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.RegistryListResource;
@@ -37,8 +38,8 @@ import lombok.experimental.Accessors;
@Desc("Represents a structure piece pool")
@Data
@EqualsAndHashCode(callSuper = false)
public class IrisJigsawPool extends IrisRegistrant {
@RegistryListResource(IrisJigsawPiece.class)
public class LoaderJigsawPool extends LoaderRegistrant {
@RegistryListResource(LoaderJigsawPiece.class)
@Required
@ArrayType(min = 1, type = String.class)
@Desc("A list of structure piece pools")

View File

@@ -16,10 +16,12 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.jigsaw;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.feature.IrisFeature;
import com.volmit.iris.core.project.loader.LoaderRegistrant;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.util.collection.KList;
import lombok.AllArgsConstructor;
@@ -36,8 +38,8 @@ import lombok.experimental.Accessors;
@Desc("Represents a jigsaw structure")
@Data
@EqualsAndHashCode(callSuper = false)
public class IrisJigsawStructure extends IrisRegistrant {
@RegistryListResource(IrisJigsawPiece.class)
public class LoaderJigsawStructure extends LoaderRegistrant {
@RegistryListResource(LoaderJigsawPiece.class)
@Required
@ArrayType(min = 1, type = String.class)
@Desc("The starting pieces. Randomly chooses a starting piece, then connects pieces using the pools define in the starting piece.")
@@ -64,7 +66,7 @@ public class IrisJigsawStructure extends IrisRegistrant {
return;
}
IrisJigsawPool pool = getLoader().getJigsawPoolLoader().load(p);
LoaderJigsawPool pool = getLoader().getJigsawPoolLoader().load(p);
if (pool == null) {
Iris.warn("Can't find jigsaw pool: " + p);
@@ -79,7 +81,7 @@ public class IrisJigsawStructure extends IrisRegistrant {
}
private void loadPiece(String p, KList<String> pools, KList<String> pieces) {
IrisJigsawPiece piece = getLoader().getJigsawPieceLoader().load(p);
LoaderJigsawPiece piece = getLoader().getJigsawPieceLoader().load(p);
if (piece == null) {
Iris.warn("Can't find jigsaw piece: " + p);

View File

@@ -16,11 +16,15 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.loot;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.data.B;
import com.volmit.iris.engine.object.meta.InventorySlotType;
import com.volmit.iris.engine.object.meta.IrisAttributeModifier;
import com.volmit.iris.engine.object.meta.IrisEnchantment;
import com.volmit.iris.engine.object.noise.NoiseStyle;
import com.volmit.iris.util.noise.CNG;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.util.collection.KList;
@@ -191,7 +195,7 @@ public class IrisLoot {
return new ItemStack(Material.AIR);
}
public ItemStack get(boolean debug, boolean giveSomething, IrisLootTable table, RNG rng, int x, int y, int z) {
public ItemStack get(boolean debug, boolean giveSomething, LoaderLootTable table, RNG rng, int x, int y, int z) {
if (debug) {
chance.reset();
}

View File

@@ -16,9 +16,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine.object;
package com.volmit.iris.engine.object.loot;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.data.DataProvider;
import com.volmit.iris.engine.object.annotations.ArrayType;
import com.volmit.iris.engine.object.annotations.Desc;
@@ -39,7 +39,7 @@ public class IrisLootReference {
@Desc("Add = add on top of parent tables, Replace = clear first then add these. Clear = Remove all and dont add loot from this or parent.")
private LootMode mode = LootMode.ADD;
@RegistryListResource(IrisLootTable.class)
@RegistryListResource(LoaderLootTable.class)
@ArrayType(min = 1, type = String.class)
@Desc("Add loot table registries here")
private KList<String> tables = new KList<>();
@@ -48,12 +48,12 @@ public class IrisLootReference {
@Desc("Increase the chance of loot in this area")
private double multiplier = 1D;
private final transient AtomicCache<KList<IrisLootTable>> tt = new AtomicCache<>();
private final transient AtomicCache<KList<LoaderLootTable>> tt = new AtomicCache<>();
public KList<IrisLootTable> getLootTables(DataProvider g) {
public KList<LoaderLootTable> getLootTables(DataProvider g) {
return tt.aquire(() ->
{
KList<IrisLootTable> t = new KList<>();
KList<LoaderLootTable> t = new KList<>();
for (String i : tables) {
t.add(g.getData().getLootLoader().load(i));

Some files were not shown because too many files have changed in this diff Show More