mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-04-08 00:36:19 +00:00
ERADICATE V1
This commit is contained in:
@@ -1,37 +1,22 @@
|
||||
package com.volmit.iris.object;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
import org.bukkit.block.Biome;
|
||||
|
||||
import com.volmit.iris.Iris;
|
||||
import com.volmit.iris.generator.legacy.ContextualTerrainProvider;
|
||||
import com.volmit.iris.generator.legacy.atomics.AtomicCache;
|
||||
import com.volmit.iris.scaffold.data.DataProvider;
|
||||
import com.volmit.iris.manager.IrisDataManager;
|
||||
import com.volmit.iris.generator.noise.CNG;
|
||||
import com.volmit.iris.util.ArrayType;
|
||||
import com.volmit.iris.util.B;
|
||||
import com.volmit.iris.util.DependsOn;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.IRare;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.KMap;
|
||||
import com.volmit.iris.util.KSet;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.RegistryListBiome;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import com.volmit.iris.manager.IrisDataManager;
|
||||
import com.volmit.iris.scaffold.data.DataProvider;
|
||||
import com.volmit.iris.scaffold.engine.IrisAccess;
|
||||
import com.volmit.iris.util.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
@Accessors(chain = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@@ -47,11 +32,6 @@ public class IrisBiome extends IrisRegistrant implements IRare
|
||||
@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.")
|
||||
private String name = "A Biome";
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("Place text on terrain. Iris will render text into block schematics and randomly place them in this biome.")
|
||||
@ArrayType(min = 1, type = IrisTextPlacement.class)
|
||||
private KList<IrisTextPlacement> text = new KList<>();
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("The type of fluid if this biome is underwater. To 'defer' this value to whatever the parent dimension fluid type is, use an emtpy string.")
|
||||
private String fluidType = "";
|
||||
@@ -329,7 +309,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
|
||||
});
|
||||
}
|
||||
|
||||
public double getHeight(ContextualTerrainProvider xg, double x, double z, long seed)
|
||||
public double getHeight(IrisAccess xg, double x, double z, long seed)
|
||||
{
|
||||
double height = 0;
|
||||
|
||||
|
||||
@@ -1,28 +1,14 @@
|
||||
package com.volmit.iris.object;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.generator.ChunkGenerator.ChunkData;
|
||||
import org.bukkit.util.BlockVector;
|
||||
|
||||
import com.volmit.iris.generator.legacy.TopographicTerrainProvider;
|
||||
import com.volmit.iris.generator.legacy.atomics.AtomicCache;
|
||||
import com.volmit.iris.manager.IrisDataManager;
|
||||
import com.volmit.iris.util.ArrayType;
|
||||
import com.volmit.iris.util.B;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.HeightMap;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import com.volmit.iris.util.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.util.BlockVector;
|
||||
|
||||
@Accessors(chain = true)
|
||||
@NoArgsConstructor
|
||||
@@ -160,92 +146,4 @@ public class IrisDepositGenerator
|
||||
return blockData;
|
||||
});
|
||||
}
|
||||
|
||||
public void generate(ChunkData data, RNG rng, TopographicTerrainProvider g, int cx, int cz, boolean safe)
|
||||
{
|
||||
generate(data, rng, g, cx, cz, safe, null);
|
||||
}
|
||||
|
||||
public void generate(ChunkData data, RNG rng, TopographicTerrainProvider g, int cx, int cz, boolean safe, HeightMap he)
|
||||
{
|
||||
for(int l = 0; l < rng.i(getMinPerChunk(), getMaxPerChunk()); l++)
|
||||
{
|
||||
IrisObject clump = getClump(rng, g.getData());
|
||||
|
||||
int af = (int) Math.ceil(clump.getW() / 2D);
|
||||
int bf = (int) Math.floor(16D - (clump.getW() / 2D));
|
||||
|
||||
if(af > bf || af < 0 || bf > 15 || af > 15 || bf < 0)
|
||||
{
|
||||
af = 6;
|
||||
bf = 9;
|
||||
}
|
||||
|
||||
int x = rng.i(af, bf);
|
||||
int z = rng.i(af, bf);
|
||||
int height = (he != null ? he.getHeight((cx << 4) + x, (cz << 4) + z) : (int) (Math.round(g.getCarvedWaterHeight((cx << 4) + x, (cz << 4) + z)))) - 7;
|
||||
|
||||
if(height <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int i = Math.max(0, minHeight);
|
||||
int a = Math.min(height, Math.min(256, maxHeight));
|
||||
|
||||
if(i >= a)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int h = rng.i(i, a);
|
||||
|
||||
if(h > maxHeight || h < minHeight || h > height - 2)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for(BlockVector j : clump.getBlocks().keySet())
|
||||
{
|
||||
int nx = j.getBlockX() + x;
|
||||
int ny = j.getBlockY() + h;
|
||||
int nz = j.getBlockZ() + z;
|
||||
|
||||
if(ny > height - 2 || nx > 15 || nx < 0 || ny > 255 || ny < 0 || nz < 0 || nz > 15)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
boolean allow = !safe;
|
||||
|
||||
if(!allow)
|
||||
{
|
||||
BlockData b = data.getBlockData(nx, ny, nz);
|
||||
for(BlockData f : g.getDimension().getRockPalette().getBlockData(g.getData()))
|
||||
{
|
||||
if(f.getMaterial().equals(b.getMaterial()))
|
||||
{
|
||||
allow = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!safe && allow)
|
||||
{
|
||||
BlockData b = data.getBlockData(nx, ny, nz);
|
||||
|
||||
if(b.getMaterial().equals(Material.ICE) || b.getMaterial().equals(Material.PACKED_ICE) || b.getMaterial().equals(B.mat("BLUE_ICE").getMaterial()) || b.getMaterial().equals(B.mat("FROSTED_ICE").getMaterial()) || b.getMaterial().equals(Material.SAND) || b.getMaterial().equals(Material.RED_SAND) || !B.isSolid(b.getMaterial()))
|
||||
{
|
||||
allow = false;
|
||||
}
|
||||
}
|
||||
|
||||
if(allow)
|
||||
{
|
||||
data.setBlock(nx, ny, nz, clump.getBlocks().get(j));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,37 +1,18 @@
|
||||
package com.volmit.iris.object;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World.Environment;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.util.BlockVector;
|
||||
|
||||
import com.volmit.iris.Iris;
|
||||
import com.volmit.iris.generator.legacy.ContextualTerrainProvider;
|
||||
import com.volmit.iris.generator.legacy.ParallelTerrainProvider;
|
||||
import com.volmit.iris.generator.legacy.atomics.AtomicCache;
|
||||
import com.volmit.iris.generator.noise.CNG;
|
||||
import com.volmit.iris.util.ArrayType;
|
||||
import com.volmit.iris.util.ChunkPosition;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.Form;
|
||||
import com.volmit.iris.util.IrisLock;
|
||||
import com.volmit.iris.util.IrisPostBlockFilter;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.KSet;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.O;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.RegistryListBiome;
|
||||
import com.volmit.iris.util.RegistryListRegion;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import com.volmit.iris.scaffold.engine.GeneratorAccess;
|
||||
import com.volmit.iris.util.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World.Environment;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
@Accessors(chain = true)
|
||||
@AllArgsConstructor
|
||||
@@ -70,11 +51,6 @@ public class IrisDimension extends IrisRegistrant
|
||||
@Desc("Upon joining this world, Iris will send a resource pack request to the client. If they have previously selected yes, it will auto-switch depending on which dimension they go to.")
|
||||
private String resourcePack = "";
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("Place text on terrain")
|
||||
@ArrayType(min = 1, type = IrisTextPlacement.class)
|
||||
private KList<IrisTextPlacement> text = new KList<>();
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("Entity spawns to override or add to this dimension")
|
||||
@ArrayType(min = 1, type = IrisEntitySpawnOverride.class)
|
||||
@@ -348,7 +324,6 @@ public class IrisDimension extends IrisRegistrant
|
||||
|
||||
private transient boolean skyDimension = false;
|
||||
private final transient AtomicCache<ChunkPosition> parallaxSize = new AtomicCache<>();
|
||||
private final transient AtomicCache<KList<IrisPostBlockFilter>> cacheFilters = new AtomicCache<>();
|
||||
private final transient AtomicCache<CNG> rockLayerGenerator = new AtomicCache<>();
|
||||
private final transient AtomicCache<CNG> fluidLayerGenerator = new AtomicCache<>();
|
||||
private final transient AtomicCache<CNG> coordFracture = new AtomicCache<>();
|
||||
@@ -402,19 +377,19 @@ public class IrisDimension extends IrisRegistrant
|
||||
return cosr.aquire(() -> Math.cos(getDimensionAngle()));
|
||||
}
|
||||
|
||||
public KList<IrisRegion> getAllRegions(ContextualTerrainProvider g)
|
||||
public KList<IrisRegion> getAllRegions(GeneratorAccess g)
|
||||
{
|
||||
KList<IrisRegion> r = new KList<>();
|
||||
|
||||
for(String i : getRegions())
|
||||
{
|
||||
r.add(g != null ? g.loadRegion(i) : Iris.globaldata.getRegionLoader().load(i));
|
||||
r.add(g != null ? g.getData().getRegionLoader().load(i) : Iris.globaldata.getRegionLoader().load(i));
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
public KList<IrisBiome> getAllBiomes(ContextualTerrainProvider g)
|
||||
public KList<IrisBiome> getAllBiomes(GeneratorAccess g)
|
||||
{
|
||||
KList<IrisBiome> r = new KList<>();
|
||||
|
||||
@@ -426,114 +401,6 @@ public class IrisDimension extends IrisRegistrant
|
||||
return r;
|
||||
}
|
||||
|
||||
public ChunkPosition getParallaxSize(ParallelTerrainProvider g)
|
||||
{
|
||||
return parallaxSize.aquire(() ->
|
||||
{
|
||||
Iris.verbose("Calculating the Parallax Size in Parallel");
|
||||
O<Integer> xg = new O<>();
|
||||
O<Integer> zg = new O<>();
|
||||
xg.set(0);
|
||||
zg.set(0);
|
||||
|
||||
KSet<String> objects = new KSet<>();
|
||||
KList<IrisRegion> r = getAllRegions(g);
|
||||
KList<IrisBiome> b = getAllBiomes(g);
|
||||
|
||||
for(IrisBiome i : b)
|
||||
{
|
||||
for(IrisObjectPlacement j : i.getObjects())
|
||||
{
|
||||
objects.addAll(j.getPlace());
|
||||
}
|
||||
}
|
||||
|
||||
IrisLock t = new IrisLock("t");
|
||||
Iris.verbose("Checking sizes for " + Form.f(objects.size()) + " referenced objects.");
|
||||
|
||||
for(String i : objects)
|
||||
{
|
||||
g.getAccelerant().queue("tx-psize", () ->
|
||||
{
|
||||
try
|
||||
{
|
||||
BlockVector bv = IrisObject.sampleSize(g.getData().getObjectLoader().findFile(i));
|
||||
t.lock();
|
||||
xg.set(bv.getBlockX() > xg.get() ? bv.getBlockX() : xg.get());
|
||||
zg.set(bv.getBlockZ() > zg.get() ? bv.getBlockZ() : zg.get());
|
||||
t.unlock();
|
||||
}
|
||||
|
||||
catch(Throwable e)
|
||||
{
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
g.getAccelerant().waitFor("tx-psize");
|
||||
int x = xg.get();
|
||||
int z = zg.get();
|
||||
|
||||
for(IrisDepositGenerator i : getDeposits())
|
||||
{
|
||||
int max = i.getMaxDimension();
|
||||
x = max > x ? max : x;
|
||||
z = max > z ? max : z;
|
||||
}
|
||||
|
||||
for(IrisTextPlacement i : getText())
|
||||
{
|
||||
int max = i.maxDimension();
|
||||
x = max > x ? max : x;
|
||||
z = max > z ? max : z;
|
||||
}
|
||||
|
||||
for(IrisRegion v : r)
|
||||
{
|
||||
for(IrisDepositGenerator i : v.getDeposits())
|
||||
{
|
||||
int max = i.getMaxDimension();
|
||||
x = max > x ? max : x;
|
||||
z = max > z ? max : z;
|
||||
}
|
||||
|
||||
for(IrisTextPlacement i : v.getText())
|
||||
{
|
||||
int max = i.maxDimension();
|
||||
x = max > x ? max : x;
|
||||
z = max > z ? max : z;
|
||||
}
|
||||
}
|
||||
|
||||
for(IrisBiome v : b)
|
||||
{
|
||||
for(IrisDepositGenerator i : v.getDeposits())
|
||||
{
|
||||
int max = i.getMaxDimension();
|
||||
x = max > x ? max : x;
|
||||
z = max > z ? max : z;
|
||||
}
|
||||
|
||||
for(IrisTextPlacement i : v.getText())
|
||||
{
|
||||
int max = i.maxDimension();
|
||||
x = max > x ? max : x;
|
||||
z = max > z ? max : z;
|
||||
}
|
||||
}
|
||||
|
||||
x = (Math.max(x, 16) + 16) >> 4;
|
||||
z = (Math.max(z, 16) + 16) >> 4;
|
||||
x = x % 2 == 0 ? x + 1 : x;
|
||||
z = z % 2 == 0 ? z + 1 : z;
|
||||
x = Math.max(x, z);
|
||||
z = x;
|
||||
Iris.verbose("Done! Parallax Size: " + x + ", " + z);
|
||||
return new ChunkPosition(x, z);
|
||||
});
|
||||
}
|
||||
|
||||
public BlockData resolveBlock(String bd)
|
||||
{
|
||||
return Iris.compat.getBlock(bd);
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
package com.volmit.iris.object;
|
||||
|
||||
import com.volmit.iris.Iris;
|
||||
import com.volmit.iris.generator.legacy.atomics.AtomicCache;
|
||||
import com.volmit.iris.scaffold.engine.GeneratorAccess;
|
||||
import com.volmit.iris.util.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.Sound;
|
||||
@@ -7,23 +15,6 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
import com.volmit.iris.Iris;
|
||||
import com.volmit.iris.generator.legacy.IrisTerrainProvider;
|
||||
import com.volmit.iris.generator.legacy.atomics.AtomicCache;
|
||||
import com.volmit.iris.util.ChronoLatch;
|
||||
import com.volmit.iris.util.DependsOn;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@Accessors(chain = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@@ -222,7 +213,7 @@ public class IrisEffect
|
||||
});
|
||||
}
|
||||
|
||||
public void apply(Player p, IrisTerrainProvider g)
|
||||
public void apply(Player p, GeneratorAccess g)
|
||||
{
|
||||
if(!canTick())
|
||||
{
|
||||
@@ -244,7 +235,7 @@ public class IrisEffect
|
||||
{
|
||||
Location part = p.getLocation().clone().add(p.getLocation().getDirection().clone().multiply(RNG.r.i(particleDistance) + particleAway)).clone().add(p.getLocation().getDirection().clone().rotateAroundY(Math.toRadians(90)).multiply(RNG.r.d(-particleDistanceWidth, particleDistanceWidth)));
|
||||
|
||||
part.setY(Math.round(g.getCarvedHeight(part.getBlockX(), part.getBlockZ(), true)) + 1);
|
||||
part.setY(Math.round(g.getHeight(part.getBlockX(), part.getBlockZ())) + 1);
|
||||
part.add(RNG.r.d(), 0, RNG.r.d());
|
||||
if(extra != 0)
|
||||
{
|
||||
|
||||
@@ -59,11 +59,6 @@ public class IrisRegion extends IrisRegistrant implements IRare
|
||||
@Desc("The rarity of the region")
|
||||
private int rarity = 1;
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("Place text on terrain")
|
||||
@ArrayType(min = 1, type = IrisTextPlacement.class)
|
||||
private KList<IrisTextPlacement> text = new KList<>();
|
||||
|
||||
@ArrayType(min = 1, type = IrisBlockDrops.class)
|
||||
@DontObfuscate
|
||||
@Desc("Define custom block drops for this region")
|
||||
|
||||
@@ -1,20 +1,10 @@
|
||||
package com.volmit.iris.object;
|
||||
|
||||
import com.volmit.iris.Iris;
|
||||
import com.volmit.iris.generator.legacy.ParallaxTerrainProvider;
|
||||
import com.volmit.iris.generator.legacy.atomics.AtomicCache;
|
||||
import com.volmit.iris.generator.noise.CellGenerator;
|
||||
import com.volmit.iris.util.ChunkPosition;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.KSet;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.RegistryListStructure;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import com.volmit.iris.scaffold.data.DataProvider;
|
||||
import com.volmit.iris.util.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
@@ -67,97 +57,6 @@ public class IrisStructurePlacement
|
||||
private final transient AtomicCache<IrisStructure> structure = new AtomicCache<>();
|
||||
private final transient AtomicCache<IrisObjectPlacement> config = new AtomicCache<>();
|
||||
|
||||
public void place(ParallaxTerrainProvider g, RNG rngno, int cx, int cz)
|
||||
{
|
||||
try
|
||||
{
|
||||
RNG rng = g.getMasterRandom().nextParallelRNG(-88738456 + rngno.nextInt());
|
||||
RNG rnp = rng.nextParallelRNG(cx - (cz * cz << 3) + rngno.nextInt());
|
||||
int s = gridSize(g) - (getStructure(g).isMergeEdges() ? 1 : 0);
|
||||
int sh = gridHeight(g) - (getStructure(g).isMergeEdges() ? 1 : 0);
|
||||
KSet<ChunkPosition> m = new KSet<>();
|
||||
|
||||
for(int i = cx << 4; i <= (cx << 4) + 15; i += 1)
|
||||
{
|
||||
if(Math.floorDiv(i, s) * s >> 4 < cx)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for(int j = cz << 4; j <= (cz << 4) + 15; j += 1)
|
||||
{
|
||||
if(Math.floorDiv(j, s) * s >> 4 < cz)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
ChunkPosition p = new ChunkPosition(Math.floorDiv(i, s) * s, Math.floorDiv(j, s) * s);
|
||||
|
||||
if(m.contains(p))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
m.add(p);
|
||||
|
||||
if(getStructure(g).getMaxLayers() <= 1)
|
||||
{
|
||||
placeLayer(g, rng, rnp, i, 0, j, s, sh);
|
||||
continue;
|
||||
}
|
||||
|
||||
for(int k = 0; k < s * getStructure(g).getMaxLayers(); k += Math.max(sh, 1))
|
||||
{
|
||||
placeLayer(g, rng, rnp, i, k, j, s, sh);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
catch(Throwable e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void placeLayer(ParallaxTerrainProvider g, RNG rng, RNG rnp, int i, int k, int j, int s, int sh)
|
||||
{
|
||||
if(!hasStructure(g, rng, i, k, j))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int h = (height == -1 ? 0 : height) + (Math.floorDiv(k, sh) * sh);
|
||||
TileResult t = getStructure(g).getTile(rng, Math.floorDiv(i, s) * s, h, Math.floorDiv(j, s) * s);
|
||||
|
||||
if(t != null)
|
||||
{
|
||||
IrisObject o = null;
|
||||
|
||||
for(IrisRareObject l : t.getTile().getRareObjects())
|
||||
{
|
||||
if(rnp.i(1, l.getRarity()) == 1)
|
||||
{
|
||||
o = load(g, l.getObject());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
o = o != null ? o : load(g, t.getTile().getObjects().get(rnp.nextInt(t.getTile().getObjects().size())));
|
||||
o.place(
|
||||
Math.floorDiv(i, s) * s,
|
||||
height == -1 ? -1 : h,
|
||||
Math.floorDiv(j, s) * s,
|
||||
g,
|
||||
t.getPlacement(),
|
||||
rng,
|
||||
(gg) -> g.getParallaxChunk(gg.getChunkX(), gg.getChunkZ()).setStructure(gg.getY(), t.getStructure(), t.getTile()),
|
||||
null,
|
||||
g.getData()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private IrisObjectPlacement getConfig()
|
||||
{
|
||||
return config.aquire(() ->
|
||||
@@ -188,32 +87,6 @@ public class IrisStructurePlacement
|
||||
return structure.aquire(() -> (g == null ? Iris.globaldata : g.getData()).getStructureLoader().load(getTileset()));
|
||||
}
|
||||
|
||||
public boolean hasStructure(ParallaxTerrainProvider g, RNG random, double x, double y, double z)
|
||||
{
|
||||
if(g.getGlCarve().isCarved((int) x, (int) y, (int) z))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(getChanceGenerator(g, random).getIndex(x / zoom, y / zoom, z / zoom, getRarity()) == getRarity() / 2)
|
||||
{
|
||||
return ratio > 0 ? getChanceGenerator(g, random).getDistance(x / zoom, z / zoom) > ratio : getChanceGenerator(g, random).getDistance(x / zoom, z / zoom) < Math.abs(ratio);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public CellGenerator getChanceGenerator(ParallaxTerrainProvider g, RNG random)
|
||||
{
|
||||
return chanceCell.aquire(() ->
|
||||
{
|
||||
CellGenerator chanceCell = new CellGenerator(g.getMasterRandom().nextParallelRNG(-72346).nextParallelRNG((height + 10000) * rarity));
|
||||
chanceCell.setCellScale(1D);
|
||||
chanceCell.setShuffle(getShuffle());
|
||||
return chanceCell;
|
||||
});
|
||||
}
|
||||
|
||||
public CellGenerator getChanceGenerator(RNG g)
|
||||
{
|
||||
return chanceCell.aquire(() ->
|
||||
|
||||
@@ -1,124 +0,0 @@
|
||||
package com.volmit.iris.object;
|
||||
|
||||
import com.volmit.iris.generator.legacy.ParallaxTerrainProvider;
|
||||
import com.volmit.iris.generator.legacy.atomics.AtomicCache;
|
||||
import com.volmit.iris.util.ArrayType;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@Accessors(chain = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Desc("A text renderer to place text on terrain")
|
||||
@Data
|
||||
public class IrisTextPlacement
|
||||
{
|
||||
|
||||
@MinNumber(0)
|
||||
@MaxNumber(1)
|
||||
@DontObfuscate
|
||||
@Desc("The chance to place this font per chunk")
|
||||
private double chance = 0.1;
|
||||
|
||||
@MinNumber(0)
|
||||
@DontObfuscate
|
||||
@Desc("The amount of times to place randomly in a chunk if the chance passes")
|
||||
private int density = 1;
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("The rotation for this text placement")
|
||||
private IrisObjectRotation rotation = new IrisObjectRotation();
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("The mode to place this text")
|
||||
private ObjectPlaceMode mode = ObjectPlaceMode.PAINT;
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("The translation for this text placement")
|
||||
private IrisObjectTranslate translate = new IrisObjectTranslate();
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("The clamp for this text placement")
|
||||
private IrisObjectLimit clamp = new IrisObjectLimit();
|
||||
|
||||
@Required
|
||||
@DontObfuscate
|
||||
@Desc("The text renderers to pick from")
|
||||
@ArrayType(min = 1, type = IrisTextRenderer.class)
|
||||
private KList<IrisTextRenderer> render = new KList<>();
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("If set to true, objects will place on the terrain height, ignoring the water surface.")
|
||||
private boolean underwater = false;
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("If set to true, Blocks placed underwater that could be waterlogged are waterlogged.")
|
||||
private boolean waterloggable = true;
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("If set to true, objects will place on the fluid height level Such as boats.")
|
||||
private boolean onwater = false;
|
||||
|
||||
private final AtomicCache<IrisObjectPlacement> config = new AtomicCache<>();
|
||||
|
||||
public IrisObjectPlacement getConfig()
|
||||
{
|
||||
return config.aquire(() ->
|
||||
{
|
||||
IrisObjectPlacement p = new IrisObjectPlacement();
|
||||
|
||||
p.setRotation(getRotation());
|
||||
p.setBore(false);
|
||||
p.setDensity(getDensity());
|
||||
p.setChance(getChance());
|
||||
p.setTranslate(getTranslate());
|
||||
p.setClamp(getClamp());
|
||||
p.setOnwater(isOnwater());
|
||||
p.setUnderwater(isUnderwater());
|
||||
p.setWaterloggable(isWaterloggable());
|
||||
p.setMode(getMode());
|
||||
|
||||
return p;
|
||||
});
|
||||
}
|
||||
|
||||
public int maxDimension()
|
||||
{
|
||||
int m = 0;
|
||||
|
||||
for(IrisTextRenderer i : getRender())
|
||||
{
|
||||
int g = (int) Math.ceil(i.getMaxLength());
|
||||
|
||||
if(g > m)
|
||||
{
|
||||
m = g;
|
||||
}
|
||||
}
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
public void place(ParallaxTerrainProvider g, RNG rng, int x, int z)
|
||||
{
|
||||
int tr = getConfig().getTriesForChunk(rng);
|
||||
|
||||
for(int i = 0; i < tr; i++)
|
||||
{
|
||||
rng = rng.nextParallelRNG((i * 3 + 8) - 23040);
|
||||
int xb = (x * 16) + rng.nextInt(16);
|
||||
int zb = (z * 16) + rng.nextInt(16);
|
||||
getRender().get(rng.nextInt(getRender().size())).place(g, rng, getConfig(), xb, zb);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,147 +0,0 @@
|
||||
package com.volmit.iris.object;
|
||||
|
||||
import java.awt.Canvas;
|
||||
import java.awt.Font;
|
||||
import java.awt.FontMetrics;
|
||||
|
||||
import com.volmit.iris.generator.legacy.ParallaxTerrainProvider;
|
||||
import com.volmit.iris.generator.legacy.atomics.AtomicCache;
|
||||
import com.volmit.iris.util.ArrayType;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.RegistryListFont;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@Accessors(chain = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Desc("A text renderer to place text on terrain")
|
||||
@Data
|
||||
public class IrisTextRenderer
|
||||
{
|
||||
|
||||
@RegistryListFont
|
||||
@Required
|
||||
@DontObfuscate
|
||||
@Desc("The font to use for this renderer")
|
||||
private String font = "default";
|
||||
|
||||
@MinNumber(4)
|
||||
@MaxNumber(48)
|
||||
@DontObfuscate
|
||||
@Desc("The font scale 1 = 1pt = ~1-2 blocks high per character")
|
||||
private int size = 18;
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("The font style to use while rendering text")
|
||||
private FontStyle fontStyle = FontStyle.PLAIN;
|
||||
|
||||
@Required
|
||||
@DontObfuscate
|
||||
@Desc("The lines of text to randomly pick from")
|
||||
@ArrayType(min = 1, type = String.class)
|
||||
private KList<String> text = new KList<>();
|
||||
|
||||
@Required
|
||||
@DontObfuscate
|
||||
@Desc("The palette of blocks to use when drawing text")
|
||||
private IrisMaterialPalette blockPalette = new IrisMaterialPalette();
|
||||
|
||||
private final transient AtomicCache<KList<IrisObject>> objects = new AtomicCache<>();
|
||||
private final transient AtomicCache<Font> fontData = new AtomicCache<>();
|
||||
private final transient AtomicCache<FontMetrics> fontMetrics = new AtomicCache<>();
|
||||
private final transient AtomicCache<Double> maxLength = new AtomicCache<>();
|
||||
private final transient AtomicCache<Integer> fontStyleData = new AtomicCache<>();
|
||||
|
||||
public KList<IrisObject> getObjects(ParallaxTerrainProvider g, RNG rng)
|
||||
{
|
||||
return objects.aquire(() ->
|
||||
{
|
||||
KList<IrisObject> o = new KList<>();
|
||||
|
||||
for(String i : text)
|
||||
{
|
||||
o.add(g.getGlText().createTextObject(rng, i, (int) getLength(i), getFontData(), getBlockPalette()));
|
||||
}
|
||||
|
||||
return o;
|
||||
});
|
||||
}
|
||||
|
||||
public String getText(RNG rng)
|
||||
{
|
||||
return text.get(rng.nextInt(text.size()));
|
||||
}
|
||||
|
||||
public double getMaxLength()
|
||||
{
|
||||
return maxLength.aquire(() ->
|
||||
{
|
||||
String l = "";
|
||||
|
||||
for(String i : text)
|
||||
{
|
||||
if(i.length() > l.length())
|
||||
{
|
||||
l = i;
|
||||
}
|
||||
}
|
||||
|
||||
return getLength(l);
|
||||
});
|
||||
}
|
||||
|
||||
public double getLength(String str)
|
||||
{
|
||||
return getFontMetrics().stringWidth(str);
|
||||
}
|
||||
|
||||
public double getHeight(String str)
|
||||
{
|
||||
return getSize() * 1.2;
|
||||
}
|
||||
|
||||
public Font getFontData()
|
||||
{
|
||||
return fontData.aquire(() ->
|
||||
{
|
||||
return new Font(getFont(), fontStyleData.aquire(() ->
|
||||
{
|
||||
if(getFontStyle().equals(FontStyle.ITALIC))
|
||||
{
|
||||
return Font.ITALIC;
|
||||
}
|
||||
|
||||
if(getFontStyle().equals(FontStyle.BOLD))
|
||||
{
|
||||
return Font.BOLD;
|
||||
}
|
||||
|
||||
return Font.PLAIN;
|
||||
}), getSize());
|
||||
});
|
||||
}
|
||||
|
||||
public FontMetrics getFontMetrics()
|
||||
{
|
||||
return fontMetrics.aquire(() ->
|
||||
{
|
||||
Canvas c = new Canvas();
|
||||
return c.getFontMetrics(getFontData());
|
||||
});
|
||||
}
|
||||
|
||||
public void place(ParallaxTerrainProvider g, RNG rng, IrisObjectPlacement config, int xb, int zb)
|
||||
{
|
||||
getObjects(g, rng).get(rng.nextInt(getObjects(g, rng).size())).place(xb, zb, g, config, rng, g.getData());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user