9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2025-12-28 03:29:06 +00:00

Merge remote-tracking branch 'origin/master'

This commit is contained in:
cyberpwn
2021-09-04 14:05:52 -04:00
79 changed files with 623 additions and 740 deletions

View File

@@ -22,13 +22,7 @@ import com.google.common.util.concurrent.AtomicDouble;
import com.volmit.iris.Iris;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.object.InferredType;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisDecorationPart;
import com.volmit.iris.engine.object.IrisDecorator;
import com.volmit.iris.engine.object.IrisFeaturePositional;
import com.volmit.iris.engine.object.IrisGenerator;
import com.volmit.iris.engine.object.IrisRegion;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.data.DataProvider;

View File

@@ -34,11 +34,7 @@ import com.volmit.iris.engine.mantle.EngineMantle;
import com.volmit.iris.engine.modifier.IrisCarveModifier;
import com.volmit.iris.engine.modifier.IrisDepositModifier;
import com.volmit.iris.engine.modifier.IrisPostModifier;
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.IrisEngineData;
import com.volmit.iris.engine.object.IrisObjectPlacement;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.engine.scripting.EngineExecutionEnvironment;
import com.volmit.iris.util.atomics.AtomicRollingSequence;
import com.volmit.iris.util.collection.KMap;
@@ -136,8 +132,7 @@ public class IrisEngine implements Engine {
}
private void tickRandomPlayer() {
if(perSecondBudLatch.flip())
{
if (perSecondBudLatch.flip()) {
buds.set(bud.get());
bud.set(0);
}
@@ -433,9 +428,9 @@ public class IrisEngine implements Engine {
getTerrainActuator().actuate(x, z, blocks, multicore);
getBiomeActuator().actuate(x, z, vbiomes, multicore);
getDecorantActuator().actuate(x, z, blocks, multicore);
getDepositModifier().modify(x, z, blocks, multicore);
getCaveModifier().modify(x >> 4, z >> 4, blocks, multicore);
getPostModifier().modify(x, z, blocks, multicore);
getDepositModifier().modify(x, z, blocks, multicore);
getMantle().insertMatter(x >> 4, z >> 4, BlockData.class, blocks, multicore);
}
getMetrics().getTotal().put(p.getMilliseconds());

View File

@@ -25,7 +25,6 @@ import com.volmit.iris.engine.framework.EnginePlayer;
import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.math.M;
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import java.util.List;

View File

@@ -23,15 +23,11 @@ import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.mantle.EngineMantle;
import com.volmit.iris.engine.mantle.MantleComponent;
import com.volmit.iris.engine.mantle.components.*;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisDepositGenerator;
import com.volmit.iris.engine.object.IrisFeaturePotential;
import com.volmit.iris.engine.object.IrisJigsawStructurePlacement;
import com.volmit.iris.engine.object.IrisObject;
import com.volmit.iris.engine.object.IrisObjectPlacement;
import com.volmit.iris.engine.object.IrisObjectScale;
import com.volmit.iris.engine.object.IrisRegion;
import com.volmit.iris.engine.mantle.components.MantleCarvingComponent;
import com.volmit.iris.engine.mantle.components.MantleFeatureComponent;
import com.volmit.iris.engine.mantle.components.MantleJigsawComponent;
import com.volmit.iris.engine.mantle.components.MantleObjectComponent;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.collection.KSet;

View File

@@ -22,15 +22,7 @@ import com.volmit.iris.Iris;
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.IrisBiome;
import com.volmit.iris.engine.object.IrisBlockDrops;
import com.volmit.iris.engine.object.IRare;
import com.volmit.iris.engine.object.IrisEngineChunkData;
import com.volmit.iris.engine.object.IrisEngineData;
import com.volmit.iris.engine.object.IrisEngineSpawnerCooldown;
import com.volmit.iris.engine.object.IrisEntitySpawn;
import com.volmit.iris.engine.object.IrisRegion;
import com.volmit.iris.engine.object.IrisSpawner;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.format.Form;
@@ -105,8 +97,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
interrupt();
}
if(!getEngine().getWorld().hasRealWorld() && clw.flip())
{
if (!getEngine().getWorld().hasRealWorld() && clw.flip()) {
getEngine().getWorld().tryGetRealWorld();
}
@@ -227,8 +218,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
Chunk c = cc[RNG.r.nextInt(cc.length)];
if(!c.isLoaded() || !Chunks.isSafe(c.getWorld(), c.getX(), c.getZ()))
{
if (!c.isLoaded() || !Chunks.isSafe(c.getWorld(), c.getX(), c.getZ())) {
continue;
}

View File

@@ -26,18 +26,7 @@ import com.volmit.iris.engine.IrisComplex;
import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.data.chunk.TerrainChunk;
import com.volmit.iris.engine.mantle.EngineMantle;
import com.volmit.iris.engine.object.IrisColor;
import com.volmit.iris.engine.object.IrisPosition;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisWorld;
import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.object.IrisEngineData;
import com.volmit.iris.engine.object.IrisLootMode;
import com.volmit.iris.engine.object.IrisLootReference;
import com.volmit.iris.engine.object.IrisLootTable;
import com.volmit.iris.engine.object.InventorySlotType;
import com.volmit.iris.engine.object.IrisObjectPlacement;
import com.volmit.iris.engine.object.IrisRegion;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.engine.scripting.EngineExecutionEnvironment;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KMap;
@@ -195,6 +184,21 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
return getComplex().getRegionStream().get(x, z);
}
@BlockCoordinates
default IrisBiome getCaveOrMantleBiome(int x, int y, int z) {
MatterCavern m = getMantle().getMantle().get(x, y, z, MatterCavern.class);
if (m != null && m.getCustomBiome() != null && !m.getCustomBiome().isEmpty()) {
IrisBiome biome = getData().getBiomeLoader().load(m.getCustomBiome());
if (biome != null) {
return biome;
}
}
return getCaveBiome(x, z);
}
@BlockCoordinates
default IrisBiome getCaveBiome(int x, int z) {
return getComplex().getCaveBiomeStream().get(x, z);
@@ -672,6 +676,14 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
return getSurfaceBiome(x, z);
}
default IrisBiome getBiomeOrMantle(int x, int y, int z) {
if (y <= getHeight(x, z) - 2) {
return getCaveOrMantleBiome(x, y, z);
}
return getSurfaceBiome(x, z);
}
default String getObjectPlacementKey(int x, int y, int z) {
PlacedObject o = getObjectPlacement(x, y, z);
@@ -712,4 +724,8 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
}
int getCacheID();
default IrisBiome getBiomeOrMantle(Location l) {
return getBiomeOrMantle(l.getBlockX(), l.getBlockY(), l.getBlockZ());
}
}

View File

@@ -33,13 +33,9 @@ public abstract class EngineAssignedModifier<T> extends EngineAssignedComponent
@BlockCoordinates
@Override
public void modify(int x, int z, Hunk<T> output, boolean multicore) {
try
{
try {
onModify(x, z, output, multicore);
}
catch(Throwable e)
{
} catch (Throwable e) {
Iris.error("Modifier Failure: " + getName());
e.printStackTrace();
}

View File

@@ -19,8 +19,8 @@
package com.volmit.iris.engine.framework;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.engine.object.IrisWorld;
import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.object.IrisWorld;
import com.volmit.iris.util.parallel.MultiBurst;
import lombok.Data;

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.InventorySlotType;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.math.RNG;
import org.bukkit.block.Block;

View File

@@ -21,16 +21,7 @@ package com.volmit.iris.engine.jigsaw;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.core.tools.IrisToolbelt;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.object.IrisPosition;
import com.volmit.iris.engine.object.IObjectPlacer;
import com.volmit.iris.engine.object.IrisJigsawPiece;
import com.volmit.iris.engine.object.IrisJigsawPieceConnector;
import com.volmit.iris.engine.object.IrisLootTable;
import com.volmit.iris.engine.object.InventorySlotType;
import com.volmit.iris.engine.object.IrisObject;
import com.volmit.iris.engine.object.IrisObjectRotation;
import com.volmit.iris.engine.object.IrisObjectTranslate;
import com.volmit.iris.engine.object.TileData;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.engine.platform.PlatformChunkGenerator;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.math.AxisAlignedBB;

View File

@@ -35,7 +35,6 @@ import com.volmit.iris.util.mantle.MantleFlag;
import com.volmit.iris.util.matter.Matter;
import com.volmit.iris.util.matter.MatterCavern;
import com.volmit.iris.util.matter.MatterMarker;
import com.volmit.iris.util.matter.slices.MarkerMatter;
import com.volmit.iris.util.matter.slices.UpdateMatter;
import com.volmit.iris.util.parallel.BurstExecutor;
import com.volmit.iris.util.parallel.MultiBurst;
@@ -65,12 +64,10 @@ public interface EngineMantle extends IObjectPlacer {
}
@ChunkCoordinates
default KList<IrisPosition> findMarkers(int x, int z, MatterMarker marker)
{
default KList<IrisPosition> findMarkers(int x, int z, MatterMarker marker) {
KList<IrisPosition> p = new KList<>();
getMantle().iterateChunk(x, z, MatterMarker.class, (xx, yy, zz, mm) -> {
if(marker.equals(mm))
{
if (marker.equals(mm)) {
p.add(new IrisPosition(xx + (x << 4), yy, zz + (z << 4)));
}
});
@@ -315,4 +312,8 @@ public interface EngineMantle extends IObjectPlacer {
default boolean dequeueRegenerate(int x, int z) {
return false;// TODO:
}
default int getLoadedRegionCount() {
return getMantle().getLoadedRegionCount();
}
}

View File

@@ -22,9 +22,9 @@ import com.google.common.collect.ImmutableList;
import com.volmit.iris.Iris;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.object.IrisPosition;
import com.volmit.iris.engine.object.IObjectPlacer;
import com.volmit.iris.engine.object.IrisFeaturePositional;
import com.volmit.iris.engine.object.IrisPosition;
import com.volmit.iris.engine.object.TileData;
import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.collection.KSet;
@@ -475,7 +475,7 @@ public class MantleWriter implements IObjectPlacer {
}
}
public <T> void setConsumer(Set<IrisPosition> positions, Function3<Integer,Integer,Integer,T> data) {
public <T> void setConsumer(Set<IrisPosition> positions, Function3<Integer, Integer, Integer, T> data) {
for (IrisPosition i : positions) {
set(i, data.apply(i.getX(), i.getY(), i.getZ()));
}

View File

@@ -22,13 +22,7 @@ import com.volmit.iris.engine.jigsaw.PlannedStructure;
import com.volmit.iris.engine.mantle.EngineMantle;
import com.volmit.iris.engine.mantle.IrisMantleComponent;
import com.volmit.iris.engine.mantle.MantleWriter;
import com.volmit.iris.engine.object.IrisPosition;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisFeaturePositional;
import com.volmit.iris.engine.object.IrisJigsawStructure;
import com.volmit.iris.engine.object.IrisJigsawStructurePlacement;
import com.volmit.iris.engine.object.NoiseStyle;
import com.volmit.iris.engine.object.IrisRegion;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.util.documentation.BlockCoordinates;
import com.volmit.iris.util.documentation.ChunkCoordinates;
import com.volmit.iris.util.mantle.MantleFlag;

View File

@@ -23,13 +23,7 @@ import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.mantle.EngineMantle;
import com.volmit.iris.engine.mantle.IrisMantleComponent;
import com.volmit.iris.engine.mantle.MantleWriter;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisFeature;
import com.volmit.iris.engine.object.IrisFeaturePositional;
import com.volmit.iris.engine.object.IrisFeaturePotential;
import com.volmit.iris.engine.object.IrisObject;
import com.volmit.iris.engine.object.IrisObjectPlacement;
import com.volmit.iris.engine.object.IrisRegion;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.util.documentation.BlockCoordinates;
import com.volmit.iris.util.documentation.ChunkCoordinates;
import com.volmit.iris.util.mantle.MantleFlag;

View File

@@ -23,11 +23,7 @@ import com.volmit.iris.engine.actuator.IrisDecorantActuator;
import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.EngineAssignedModifier;
import com.volmit.iris.engine.object.IrisPosition;
import com.volmit.iris.engine.object.InferredType;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisDecorationPart;
import com.volmit.iris.engine.object.IrisDecorator;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.data.B;
@@ -51,6 +47,7 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
private final RNG rng;
private final BlockData AIR = Material.CAVE_AIR.createBlockData();
private final BlockData WATER = Material.WATER.createBlockData();
private final BlockData LAVA = Material.LAVA.createBlockData();
public IrisCarveModifier(Engine engine) {
super(engine, "Carve");
@@ -65,8 +62,7 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
KMap<Long, KList<Integer>> positions = new KMap<>();
KMap<IrisPosition, MatterCavern> walls = new KMap<>();
Consumer4<Integer, Integer, Integer, MatterCavern> iterator = (xx, yy, zz, c) -> {
if(c == null)
{
if (c == null) {
return;
}
@@ -105,14 +101,13 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
return;
}
if(c.isWater())
{
output.set(rx, yy, rz, WATER);
if (c.isWater()) {
output.set(rx, yy, rz, WATER);
} else if(c.isLava()) {
output.set(rx, yy, rz, LAVA);
}
else
{
output.set(rx, yy, rz, AIR);
else {
output.set(rx, yy, rz, AIR);
}
};
@@ -127,7 +122,7 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
biome.setInferredType(InferredType.CAVE);
BlockData d = biome.getWall().get(rng, i.getX() + (x << 4), i.getY(), i.getZ() + (z << 4), getData());
if (d != null && B.isSolid(output.get(i.getX(), i.getY(), i.getZ()))) {
if (d != null && B.isSolid(output.get(i.getX(), i.getY(), i.getZ())) && i.getY() <= getComplex().getHeightStream().get(i.getX() + (x << 4), i.getZ() + (z << 4))) {
output.set(i.getX(), i.getY(), i.getZ(), d);
}
}
@@ -169,20 +164,28 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
getEngine().getMetrics().getDeposit().put(p.getMilliseconds());
}
private void processZone(Hunk<BlockData> output, MantleChunk mc, Mantle mantle, CaveZone zone, int rx, int rz, int xx, int zz) {
private void processZone(Hunk<BlockData> output, MantleChunk mc, Mantle mantle, CaveZone zone, int rx, int rz, int xx, int zz) {
boolean decFloor = B.isSolid(output.get(rx, zone.floor - 1, rz));
boolean decCeiling = B.isSolid(output.get(rx, zone.ceiling + 1, rz));
int center = (zone.floor + zone.ceiling) / 2;
int thickness = zone.airThickness();
String customBiome = "";
if(M.r(1D/16D))
if(B.isDecorant(output.get(rx, zone.ceiling+1, rz)))
{
output.set(rx, zone.ceiling+1, rz, AIR);
}
if(B.isDecorant(output.get(rx, zone.ceiling, rz)))
{
output.set(rx, zone.ceiling, rz, AIR);
}
if (M.r(1D / 16D)) {
mantle.set(xx, zone.ceiling, zz, MarkerMatter.CAVE_CEILING);
}
if(M.r(1D/16D))
{
if (M.r(1D / 16D)) {
mantle.set(xx, zone.floor, zz, MarkerMatter.CAVE_FLOOR);
}
@@ -240,15 +243,19 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
break;
}
if (!B.isSolid(output.get(rx, zone.ceiling + i + 1, rz))) {
BlockData b = blocks.get(i);
BlockData up = output.get(rx, zone.ceiling + i + 1, rz);
if (!B.isSolid(up)) {
continue;
}
if (B.isOre(output.get(rx, zone.ceiling + i + 1, rz))) {
if (B.isOre(up)) {
output.set(rx, zone.ceiling + i + 1, rz, B.toDeepSlateOre(up, b));
continue;
}
output.set(rx, zone.ceiling + i + 1, rz, blocks.get(i));
output.set(rx, zone.ceiling + i + 1, rz, b);
}
}

View File

@@ -24,6 +24,7 @@ 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.util.data.B;
import com.volmit.iris.util.data.HeightMap;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.util.math.RNG;
@@ -120,20 +121,9 @@ public class IrisDepositModifier extends EngineAssignedModifier<BlockData> {
continue;
}
boolean allow = false;
BlockData b = data.get(nx, ny, nz);
if (b != null) {
for (BlockData f : getDimension().getRockPalette().getBlockData(getData())) {
if (f.getMaterial().equals(b.getMaterial())) {
allow = true;
break;
}
}
}
if (allow) {
data.set(nx, ny, nz, clump.getBlocks().get(j));
if(!getEngine().getMantle().isCarved((cx << 4) + nx, ny, (cz << 4) + nz))
{
data.set(nx, ny, nz, B.toDeepSlateOre(data.get(nx, ny, nz), clump.getBlocks().get(j)));
}
}
}

View File

@@ -18,6 +18,7 @@
package com.volmit.iris.engine.object;
import com.volmit.iris.Iris;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.core.loader.IrisRegistrant;
import com.volmit.iris.engine.framework.Engine;
@@ -65,7 +66,6 @@ public class IrisCave extends IrisRegistrant {
return "Cave";
}
public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) {
generate(writer, rng, engine, x, y, z, -1);
}
@@ -73,42 +73,34 @@ public class IrisCave extends IrisRegistrant {
public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z, int waterHint) {
double girth = getWorm().getGirth().get(rng, x, z, engine.getData());
KList<IrisPosition> points = getWorm().generate(rng, engine.getData(), writer, verticalRange, x, y, z,
(at) -> {});
KList<IrisPosition> points = getWorm().generate(rng, engine.getData(), writer, verticalRange, x, y, z, (at) -> {});
int highestWater = Math.max(waterHint, -1);
boolean water = false;
if(highestWater == -1)
{
for(IrisPosition i : points)
{
if (highestWater == -1) {
for (IrisPosition i : points) {
double yy = i.getY() + girth;
int th = engine.getHeight(x, z, true);
if(yy > th && th < engine.getDimension().getFluidHeight())
{
highestWater = Math.max(highestWater, (int)yy);
water = true;
if (yy > th && th < engine.getDimension().getFluidHeight()) {
highestWater = Math.max(highestWater, (int) yy);
break;
}
}
}
else
{
water = true;
}
int h = Math.min(Math.max(highestWater, waterHint), engine.getDimension().getFluidHeight());
int h = Math.min(Math.max(highestWater, waterHint), engine.getDimension().getFluidHeight());
for(IrisPosition i : points)
{
for (IrisPosition i : points) {
fork.doCarving(writer, rng, engine, i.getX(), i.getY(), i.getZ(), h);
}
MatterCavern c = new MatterCavern(true, customBiome, (byte) 0);
MatterCavern w = new MatterCavern(true, customBiome, (byte) 1);
writer.setLineConsumer(points,
girth, true,
(xf, yf, zf) -> new MatterCavern(true, customBiome, yf <= h));
girth, true,
(xf, yf, zf) -> yf <= h ? w : c);
}
@Override

View File

@@ -62,6 +62,7 @@ public class IrisCavePlacer implements IRare {
public IrisCave getRealCave(IrisData data) {
return caveCache.aquire(() -> data.getCaveLoader().load(getCave()));
}
public void generateCave(MantleWriter mantle, RNG rng, Engine engine, int x, int y, int z) {
generateCave(mantle, rng, engine, x, y, z, -1);
}
@@ -101,8 +102,7 @@ public class IrisCavePlacer implements IRare {
public int getSize(IrisData data) {
IrisCave cave = getRealCave(data);
if(cave != null)
{
if (cave != null) {
return cave.getMaxSize(data);
}

View File

@@ -287,7 +287,7 @@ public class IrisDimension extends IrisRegistrant {
int jump = strongholdJumpDistance;
RNG rng = new RNG((seed * 223) + 12945);
for (int i = 0; i < maxStrongholds; i++) {
for (int i = 0; i < maxStrongholds+1; i++) {
int m = i + 1;
pos.add(new Position2(
(int) ((rng.i(jump * i) + (jump * i)) * (rng.b() ? -1D : 1D)),
@@ -295,6 +295,8 @@ public class IrisDimension extends IrisRegistrant {
));
}
pos.remove(0);
return pos;
});
}

View File

@@ -55,7 +55,7 @@ public class IrisElipsoid implements IRare {
writer.setElipsoid(x, y, z,
xRadius.get(rng, z, y, engine.getData()),
yRadius.get(rng, x, z, engine.getData()),
zRadius.get(rng, y, x, engine.getData()), true, matterNodeCache.aquire(() -> CavernMatter.get(getCustomBiome(), false)));
zRadius.get(rng, y, x, engine.getData()), true, matterNodeCache.aquire(() -> CavernMatter.get(getCustomBiome(), 0)));
}
public double maxSize() {

View File

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

View File

@@ -166,8 +166,7 @@ public class IrisEntity extends IrisRegistrant {
}
public Entity spawn(Engine gen, Location at, RNG rng) {
if(!Chunks.isSafe(at))
{
if (!Chunks.isSafe(at)) {
return null;
}
@@ -180,8 +179,7 @@ public class IrisEntity extends IrisRegistrant {
Entity ee = doSpawn(at);
if(ee == null && !Chunks.isSafe(at))
{
if (ee == null && !Chunks.isSafe(at)) {
return null;
}
@@ -345,8 +343,7 @@ public class IrisEntity extends IrisRegistrant {
AtomicInteger t = new AtomicInteger(0);
AtomicInteger v = new AtomicInteger(0);
v.set(J.sr(() -> {
if(t.get() > 100)
{
if (t.get() > 100) {
J.csr(v.get());
return;
}
@@ -389,8 +386,7 @@ public class IrisEntity extends IrisRegistrant {
}
private Entity doSpawn(Location at) {
if(!Chunks.isSafe(at))
{
if (!Chunks.isSafe(at)) {
return null;
}

View File

@@ -19,14 +19,11 @@
package com.volmit.iris.engine.object;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.IrisComplex;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.format.C;
import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.matter.MatterMarker;
import com.volmit.iris.util.matter.slices.MarkerMatter;
import lombok.AllArgsConstructor;
import lombok.Data;

View File

@@ -34,6 +34,8 @@ import lombok.experimental.Accessors;
@Desc("Configures rotation for iris")
@Data
public class IrisInterpolator {
public static final IrisInterpolator DEFAULT = new IrisInterpolator();
@Required
@Desc("The interpolation method when two biomes use different heights but this same generator")
private InterpolationMethod function = InterpolationMethod.BILINEAR_STARCAST_6;

View File

@@ -19,7 +19,6 @@
package com.volmit.iris.engine.object;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.util.collection.KList;
import lombok.AllArgsConstructor;
import lombok.Data;

View File

@@ -21,8 +21,6 @@ package com.volmit.iris.engine.object;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.engine.object.IrisBlockData;
import com.volmit.iris.engine.object.IrisLootTable;
import com.volmit.iris.util.collection.KList;
import lombok.AllArgsConstructor;
import lombok.Data;

View File

@@ -21,8 +21,6 @@ package com.volmit.iris.engine.object;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.engine.object.IrisBlockData;
import com.volmit.iris.engine.object.IrisMaterialPalette;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.noise.CNG;

View File

@@ -46,7 +46,7 @@ public class IrisPyramid implements IRare {
private transient final AtomicCache<MatterCavern> matterNodeCache = new AtomicCache<>();
public void generate(RNG rng, Engine engine, MantleWriter writer, int x, int y, int z) {
writer.setPyramid(x, y, z, matterNodeCache.aquire(() -> CavernMatter.get(getCustomBiome(), false)),
writer.setPyramid(x, y, z, matterNodeCache.aquire(() -> CavernMatter.get(getCustomBiome(), 0)),
(int) baseWidth.get(rng, z, y, engine.getData()), true);
}

View File

@@ -18,6 +18,7 @@
package com.volmit.iris.engine.object;
import com.volmit.iris.Iris;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.core.loader.IrisRegistrant;
import com.volmit.iris.engine.framework.Engine;
@@ -62,15 +63,18 @@ public class IrisRavine extends IrisRegistrant {
private IrisShapedGeneratorStyle baseWidthStyle = new IrisShapedGeneratorStyle(NoiseStyle.PERLIN, 3, 6);
@MinNumber(1)
@MaxNumber(70)
@MaxNumber(100)
@Desc("The angle at which the ravine widens as it gets closer to the surface")
private double angle = 18;
@MinNumber(1)
@MaxNumber(70)
@MaxNumber(100)
@Desc("The angle at which the ravine widens as it gets closer to the surface")
private double topAngle = 38;
@Desc("To fill this cave with lava, set the lava level to a height from the bottom most point of the cave.")
private int lavaLevel = -1;
@Desc("How many worm nodes must be placed to actually generate a ravine? Higher reduces the chances but also reduces ravine 'holes'")
private int nodeThreshold = 5;
@@ -88,93 +92,97 @@ public class IrisRavine extends IrisRegistrant {
public String getTypeName() {
return "Ravine";
}
public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) {
generate(writer, rng, engine, x, y, z, -1);
}
public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z, int waterHint) {
KList<IrisPosition> pos = getWorm().generate(rng, engine.getData(), writer, null, x, y, z, (at) -> {});
KList<IrisPosition> pos = getWorm().generate(rng, engine.getData(), writer, null, x, y, z, (at) -> {
});
CNG dg = depthStyle.getGenerator().createNoCache(rng, engine.getData());
CNG bw = baseWidthStyle.getGenerator().createNoCache(rng, engine.getData());
int highestWater = Math.max(waterHint, -1);
boolean water = false;
if(highestWater == -1)
{
for(IrisPosition i : pos)
{
if (highestWater == -1) {
for (IrisPosition i : pos) {
int rsurface = y == -1 ? engine.getComplex().getHeightStream().get(x, z).intValue() : y;
int depth = (int) Math.round(dg.fitDouble(depthStyle.getMin(), depthStyle.getMax(), i.getX(), i.getZ()));
int surface = (int) Math.round(rsurface - depth * 0.45);
int yy = surface + depth;
int th = engine.getHeight(x, z, true);
if(yy > th && th < engine.getDimension().getFluidHeight())
{
if (yy > th && th < engine.getDimension().getFluidHeight()) {
highestWater = Math.max(highestWater, yy);
water = true;
break;
}
}
}
else
{
} else {
water = true;
}
MatterCavern c = new MatterCavern(true, customBiome, water);
MatterCavern c = new MatterCavern(true, customBiome, (byte) (water ? 1 : 0));
MatterCavern l = new MatterCavern(true, customBiome, (byte) 2);
if(pos.size() < nodeThreshold)
{
if (pos.size() < nodeThreshold) {
return;
}
for(IrisPosition p : pos)
{
for (IrisPosition p : pos) {
int rsurface = y == -1 ? engine.getComplex().getHeightStream().get(x, z).intValue() : y;
int depth = (int) Math.round(dg.fitDouble(depthStyle.getMin(), depthStyle.getMax(), p.getX(), p.getZ()));
int width = (int) Math.round(bw.fitDouble(baseWidthStyle.getMin(), baseWidthStyle.getMax(), p.getX(), p.getZ()));
int surface = (int) Math.round(rsurface - depth * 0.45);
fork.doCarving(writer, rng, engine, p.getX(), rng.i(surface-depth, surface), p.getZ(), Math.max(highestWater, waterHint));
fork.doCarving(writer, rng, engine, p.getX(), rng.i(surface - depth, surface), p.getZ(), Math.max(highestWater, waterHint));
for(int i = surface + depth; i >= surface; i--)
{
if(i % ribThickness == 0) {
for (int i = surface + depth; i >= surface; i--) {
if (i % ribThickness == 0) {
double v = width + ((((surface + depth) - i) * (angle / 360D)));
if(v <= 0.25)
{
if (v <= 0.25) {
break;
}
if(i <= ribThickness+2)
{
if (i <= ribThickness + 2) {
break;
}
writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, c);
if(lavaLevel >= 0 && i <= lavaLevel + (surface - depthStyle.getMid()))
{
writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, l);
}
else
{
writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, c);
}
}
}
for(int i = surface - depth; i <= surface; i++)
{
if(i % ribThickness == 0) {
for (int i = surface - depth; i <= surface; i++) {
if (i % ribThickness == 0) {
double v = width - ((((surface - depth) - i) * (angle / 360D)));
if(v <= 0.25)
{
if (v <= 0.25) {
break;
}
if(i <= ribThickness+2)
{
if (i <= ribThickness + 2) {
break;
}
writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, c);
if(lavaLevel >= 0 && i <= lavaLevel + (surface - depthStyle.getMid()))
{
writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, l);
}
else
{
writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, c);
}
}
}
}

View File

@@ -0,0 +1,47 @@
/*
* 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.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.Snippet;
import com.volmit.iris.util.math.RNG;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Snippet("color")
@Accessors(chain = true)
@NoArgsConstructor
@Desc("Represents a color")
@Data
public class IrisSeed {
@Desc("The seed to use")
private long seed = 1337;
@Desc("To calculate a seed Iris passes in it's natural seed for the current feature, then mixes it with your seed. Setting this to true ignores the parent seed and always uses your exact seed ignoring the input of Iris feature seeds. You can use this to match seeds on other generators.")
private boolean ignoreNaturalSeedInput = false;
public long getSeed(long seed) {
return (seed * 47) + getSeed() + 29334667L;
}
public RNG rng(long inseed) {
return new RNG(getSeed(inseed));
}
}

View File

@@ -66,4 +66,8 @@ public class IrisShapedGeneratorStyle {
public boolean isFlat() {
return min == max || getGenerator().isFlat();
}
public int getMid() {
return (getMax() + getMin()) / 2;
}
}

View File

@@ -46,7 +46,7 @@ public class IrisSphere implements IRare {
private transient final AtomicCache<MatterCavern> matterNodeCache = new AtomicCache<>();
public void generate(RNG rng, Engine engine, MantleWriter writer, int x, int y, int z) {
writer.setSphere(x, y, z, radius.get(rng, z, y, engine.getData()), true, matterNodeCache.aquire(() -> CavernMatter.get(getCustomBiome(), false)));
writer.setSphere(x, y, z, radius.get(rng, z, y, engine.getData()), true, matterNodeCache.aquire(() -> CavernMatter.get(getCustomBiome(), 0)));
}
public double maxSize() {

View File

@@ -65,4 +65,8 @@ public class IrisStyledRange {
public boolean isFlat() {
return getMax() == getMin() || style.isFlat();
}
public int getMid() {
return (int) ((getMax() + getMin()) / 2);
}
}

View File

@@ -21,7 +21,7 @@ package com.volmit.iris.engine.object.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Retention(RUNTIME)

View File

@@ -26,8 +26,8 @@ import com.volmit.iris.engine.data.chunk.TerrainChunk;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.EngineTarget;
import com.volmit.iris.engine.framework.WrongEngineBroException;
import com.volmit.iris.engine.object.IrisWorld;
import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.object.IrisWorld;
import com.volmit.iris.engine.object.StudioMode;
import com.volmit.iris.engine.platform.studio.StudioGenerator;
import com.volmit.iris.util.collection.KList;
@@ -93,7 +93,7 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun
this.dimensionKey = dimensionKey;
this.folder = new ReactiveFolder(dataLocation, (_a, _b, _c) -> hotload());
setupEngine();
this.hotloader = new Looper() {
this.hotloader = studio ? new Looper() {
@Override
protected long loop() {
if (hotloadChecker.flip()) {
@@ -102,10 +102,14 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun
return 250;
}
};
hotloader.setPriority(Thread.MIN_PRIORITY);
hotloader.start();
hotloader.setName(getTarget().getWorld().name() + " Hotloader");
} : null;
if(studio)
{
hotloader.setPriority(Thread.MIN_PRIORITY);
hotloader.start();
hotloader.setName(getTarget().getWorld().name() + " Hotloader");
}
}
private void setupEngine() {
@@ -117,7 +121,7 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun
IrisDimension test = IrisData.loadAnyDimension(dimensionKey);
if (test != null) {
Iris.warn("Looks like " + dimensionKey + " exists in " + test.getLoadFile().getPath());
Iris.warn("Looks like " + dimensionKey + " exists in " + test.getLoadFile().getPath() + " ");
Iris.service(StudioSVC.class).installIntoWorld(Iris.getSender(), dimensionKey, dataLocation.getParentFile().getParentFile());
Iris.warn("Attempted to install into " + data.getDataFolder().getPath());
data.dump();
@@ -232,7 +236,11 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun
@Override
public void close() {
withExclusiveControl(() -> {
hotloader.interrupt();
if(isStudio())
{
hotloader.interrupt();
}
getEngine().close();
});
}
@@ -244,6 +252,11 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun
@Override
public void hotload() {
if(!isStudio())
{
return;
}
withExclusiveControl(() -> getEngine().hotload());
}