Region rarity

This commit is contained in:
Daniel Mills 2020-08-07 13:36:41 -04:00
parent e5384509cf
commit c158e74fb5
19 changed files with 356 additions and 44 deletions

View File

@ -285,7 +285,7 @@ public class Iris extends MortarPlugin implements BoardProvider
@Override
public ChunkGenerator getDefaultWorldGenerator(String worldName, String id)
{
return new IrisChunkGenerator("overworld", 16);
return new IrisChunkGenerator(16);
}
public static void msg(String string)

View File

@ -26,6 +26,7 @@ public class IrisDataManager
{
private File dataFolder;
private File packs;
private boolean prod;
private ResourceLoader<IrisBiome> biomeLoader;
private ResourceLoader<IrisRegion> regionLoader;
private ResourceLoader<IrisDimension> dimensionLoader;
@ -35,6 +36,12 @@ public class IrisDataManager
public void hotloaded()
{
if(prod)
{
return;
}
File packs = this.packs.getName().equals("packs") ? this.packs : dataFolder;
packs.mkdirs();
this.regionLoader = new ResourceLoader<>(packs, "regions", "Region", IrisRegion.class);
this.biomeLoader = new ResourceLoader<>(packs, "biomes", "Biome", IrisBiome.class);
@ -42,14 +49,28 @@ public class IrisDataManager
this.structureLoader = new ResourceLoader<>(packs, "structures", "Structure", IrisStructure.class);
this.generatorLoader = new ResourceLoader<>(packs, "generators", "Generator", IrisGenerator.class);
this.objectLoader = new ObjectResourceLoader(packs, "objects", "Object");
writeExamples();
if(packs.getName().equals("packs"))
{
writeExamples();
}
}
public IrisDataManager(File dataFolder)
{
this.dataFolder = dataFolder;
this.packs = new File(dataFolder, "packs");
boolean pr = false;
if(!packs.exists())
{
if(new File(dataFolder, "iris").exists())
{
pr = true;
packs = new File(dataFolder, "iris");
}
}
hotloaded();
prod = pr;
}
private void writeExamples()

View File

@ -164,7 +164,7 @@ public class ProjectManager
}
}
public void compilePackage(MortarSender sender, String dim, boolean obfuscate)
public File compilePackage(MortarSender sender, String dim, boolean obfuscate)
{
String dimm = dim;
IrisDimension dimension = Iris.globaldata.getDimensionLoader().load(dimm);
@ -317,15 +317,19 @@ public class ProjectManager
meta.put("time", M.ms());
meta.put("version", dimension.getVersion());
IO.writeAll(new File(folder, "package.json"), meta.toString(0));
ZipUtil.pack(folder, new File(Iris.instance.getDataFolder(), "exports/" + dimension.getLoadKey() + ".iris"), 9);
File p = new File(Iris.instance.getDataFolder(), "exports/" + dimension.getLoadKey() + ".iris");
ZipUtil.pack(folder, p, 9);
IO.delete(folder);
sender.sendMessage("Done!");
return p;
}
catch(Throwable e)
{
e.printStackTrace();
}
sender.sendMessage("Done!");
sender.sendMessage("Failed!");
return null;
}
}

View File

@ -19,6 +19,9 @@ public class CommandIris extends MortarCommand
@Command
private CommandIrisObject object;
@Command
private CommandIrisCreate create;
public CommandIris()
{
super("iris", "ir", "irs");

View File

@ -0,0 +1,199 @@
package com.volmit.iris.command;
import java.io.File;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.bukkit.WorldType;
import org.bukkit.entity.Player;
import org.zeroturnaround.zip.ZipUtil;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisDataManager;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.gen.IrisChunkGenerator;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.util.Form;
import com.volmit.iris.util.J;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.O;
import com.volmit.iris.util.PregenJob;
public class CommandIrisCreate extends MortarCommand
{
public CommandIrisCreate()
{
super("create", "new", "+");
requiresPermission(Iris.perm.studio);
setCategory("Create");
setDescription("Create a new Iris World!");
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
String worldName = args[0];
String type = "overworld";
long seed = 1337;
int pregen = 0;
boolean zip = false;
File folder = new File(worldName);
if(folder.exists())
{
sender.sendMessage("That world folder already exists!");
return true;
}
File iris = new File(folder, "iris");
iris.mkdirs();
for(String i : args)
{
if(i.equals("-zip"))
{
zip = true;
}
type = i.startsWith("type=") ? i.split("\\Q=\\E")[1] : type;
seed = i.startsWith("seed=") ? Long.valueOf(i.split("\\Q=\\E")[1]) : seed;
pregen = i.startsWith("pregen=") ? Integer.parseInt(i.split("\\Q=\\E")[1]) : pregen;
}
sender.sendMessage("Looking for Package: " + type);
IrisDimension dim = Iris.globaldata.getDimensionLoader().load(type);
if(dim == null)
{
for(File i : Iris.instance.getDataFolder("packs").listFiles())
{
if(i.isFile() && i.getName().equals(type + ".iris"))
{
sender.sendMessage("Found " + type + ".iris in packs folder");
ZipUtil.unpack(i, iris);
break;
}
}
}
else
{
sender.sendMessage("Foind " + type + " dimension in packs folder. Repackaging");
ZipUtil.unpack(Iris.proj.compilePackage(sender, type, true), iris);
}
File dimf = new File(iris, "dimensions/" + type + ".json");
if(!dimf.exists() || !dimf.isFile())
{
sender.sendMessage("Can't find the " + dimf.getName() + " in the dimensions folder of this pack! Failed!");
return true;
}
IrisDataManager dm = new IrisDataManager(folder);
dim = dm.getDimensionLoader().load(type);
if(dim == null)
{
sender.sendMessage("Can't load the dimension! Failed!");
return true;
}
sender.sendMessage(worldName + " type installed. Generating Spawn Area...");
IrisChunkGenerator gen = new IrisChunkGenerator("", 16);
sender.sendMessage("Generating with " + IrisSettings.get().threads + " threads per chunk");
O<Boolean> done = new O<Boolean>();
done.set(false);
J.a(() ->
{
double last = 0;
int req = 800;
while(!done.get())
{
boolean derp = false;
double v = (double) gen.getGenerated() / (double) req;
if(last > v || v > 1)
{
derp = true;
v = last;
}
else
{
last = v;
}
sender.sendMessage("Generating " + Form.pc(v) + (derp ? " (Waiting on Server...)" : ""));
J.sleep(3000);
}
});
World world = Bukkit.createWorld(new WorldCreator(worldName).seed(seed).generator(gen).type(WorldType.NORMAL).environment(dim.getEnvironment()));
done.set(true);
sender.sendMessage(worldName + " Spawn Area generated.");
O<Boolean> b = new O<Boolean>();
b.set(true);
if(pregen > 0)
{
b.set(false);
sender.sendMessage("Pregenerating " + worldName + " " + pregen + " x " + pregen);
sender.sendMessage("Expect Extreme server lag during this time. Use '/iris world pregen stop' to cancel");
new PregenJob(world, pregen, sender, () ->
{
b.set(true);
});
}
boolean zipp = zip;
J.a(() ->
{
while(!b.get())
{
J.sleep(1000);
}
Bukkit.getScheduler().scheduleSyncDelayedTask(Iris.instance, () ->
{
world.save();
for(Player i : world.getPlayers())
{
i.kickPlayer("Please Rejoin in a different world.");
}
if(!Bukkit.unloadWorld(world, true))
{
sender.sendMessage("Couldn't unload the world for some reason.... Aborting zip.");
return;
}
if(zipp)
{
sender.sendMessage("Zipping up world");
ZipUtil.pack(folder, new File("" + folder.getName() + ".zip"), 9);
sender.sendMessage("Zipped to " + folder.getName() + ".zip");
}
sender.sendMessage("All Done!");
});
});
return true;
}
@Override
protected String getArgsUsage()
{
return "<name> [type=overworld] [seed=1337] [pregen=5000] [-zip]";
}
}

View File

@ -39,7 +39,9 @@ public class CommandIrisPregen extends MortarCommand
{
Player p = sender.player();
World world = p.getWorld();
new PregenJob(world, Integer.valueOf(args[0]));
new PregenJob(world, Integer.valueOf(args[0]), sender, () ->
{
});
return true;
}

View File

@ -51,6 +51,7 @@ public abstract class BiomeChunkGenerator extends DimensionChunkGenerator
public void onInit(World world, RNG rng)
{
super.onInit(world, rng);
loadGenerators();
glBiome = new GenLayerBiome(this, masterRandom.nextParallelRNG(1));
masterFracture = CNG.signature(rng.nextParallelRNG(13)).scale(0.12);

View File

@ -1,6 +1,5 @@
package com.volmit.iris.gen;
import java.io.File;
import java.util.List;
import java.util.Random;
@ -137,7 +136,7 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
return;
}
data = new IrisDataManager(new File(getWorld().getWorldFolder(), "iris"));
data = new IrisDataManager(getWorld().getWorldFolder());
this.world = world;
this.masterRandom = new RNG(world.getSeed());
metrics = new IrisMetrics(128);

View File

@ -1,6 +1,9 @@
package com.volmit.iris.gen;
import java.io.File;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.data.BlockData;
import com.volmit.iris.Iris;
@ -10,6 +13,7 @@ import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.object.IrisRegion;
import com.volmit.iris.util.B;
import com.volmit.iris.util.BiomeResult;
import com.volmit.iris.util.RNG;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -18,7 +22,7 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = false)
public abstract class DimensionChunkGenerator extends ContextualChunkGenerator
{
protected final String dimensionName;
protected String dimensionName;
protected static final BlockData AIR = Material.AIR.createBlockData();
protected static final BlockData CAVE_AIR = B.get("CAVE_AIR");
protected static final BlockData BEDROCK = Material.BEDROCK.createBlockData();
@ -29,6 +33,34 @@ public abstract class DimensionChunkGenerator extends ContextualChunkGenerator
this.dimensionName = dimensionName;
}
public void onInit(World world, RNG masterRandom)
{
if(dimensionName.isEmpty())
{
File folder = new File(world.getWorldFolder(), "iris/dimensions");
if(!folder.exists())
{
Iris.error("Missing World iris/dimensions folder!");
dimensionName = "error-missing-dimension";
return;
}
for(File i : folder.listFiles())
{
if(i.isFile() && i.getName().endsWith(".json"))
{
dimensionName = i.getName().replaceAll("\\Q.json\\E", "");
return;
}
}
Iris.error("Missing World iris/dimensions/<dimension-name>.json file. Assuming overworld!");
dimensionName = "error-missing-dimension";
fail(new RuntimeException("Missing dimension folder/file in " + folder.getAbsolutePath()));
}
}
public IrisDimension getDimension()
{
IrisDimension d = loadDimension(dimensionName);

View File

@ -41,6 +41,12 @@ public class IrisChunkGenerator extends CeilingChunkGenerator implements IrisCon
lock = new IrisLock("IrisChunkGenerator");
}
public IrisChunkGenerator(int tc)
{
super("", tc);
lock = new IrisLock("IrisChunkGenerator");
}
@Override
protected void onGenerate(RNG random, int x, int z, ChunkData data, BiomeGrid grid)
{

View File

@ -2,10 +2,11 @@ package com.volmit.iris.gen.layer;
import com.volmit.iris.gen.ContextualChunkGenerator;
import com.volmit.iris.object.InferredType;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisRegion;
import com.volmit.iris.util.RarityCellGenerator;
import com.volmit.iris.util.BiomeResult;
import com.volmit.iris.util.RNG;
import com.volmit.iris.util.RarityCellGenerator;
import lombok.Data;
@ -13,14 +14,14 @@ import lombok.Data;
public class BiomeDataProvider
{
private InferredType type;
private RarityCellGenerator generator;
private RarityCellGenerator<IrisBiome> generator;
private GenLayerBiome layer;
public BiomeDataProvider(GenLayerBiome layer, InferredType type, RNG rng)
{
this.type = type;
this.layer = layer;
generator = new RarityCellGenerator(rng.nextParallelRNG(4645079 + (type.ordinal() * 23845)));
generator = new RarityCellGenerator<IrisBiome>(rng.nextParallelRNG(4645079 + (type.ordinal() * 23845)));
}
public BiomeResult generatePureData(ContextualChunkGenerator g, double bx, double bz, int rawX, int rawZ, IrisRegion regionData)

View File

@ -21,7 +21,7 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = false)
public class GenLayerBiome extends GenLayer
{
private CellGenerator regionGenerator;
private RarityCellGenerator<IrisRegion> regionGenerator;
private CellGenerator bridgeGenerator;
private BiomeDataProvider seaProvider;
private BiomeDataProvider landProvider;
@ -41,7 +41,7 @@ public class GenLayerBiome extends GenLayer
caveProvider = new BiomeDataProvider(this, InferredType.CAVE, rng);
islandProvider = new BiomeDataProvider(this, InferredType.ISLAND, rng);
skylandProvider = new BiomeDataProvider(this, InferredType.SKYLAND, rng);
regionGenerator = new CellGenerator(rng.nextParallelRNG(1188519));
regionGenerator = new RarityCellGenerator<IrisRegion>(rng.nextParallelRNG(1188519));
bridgeGenerator = new CellGenerator(rng.nextParallelRNG(1541462));
}
@ -53,13 +53,12 @@ public class GenLayerBiome extends GenLayer
return null;
}
regionGenerator.setShuffle(11);
regionGenerator.setCellScale(0.33 / iris.getDimension().getRegionZoom());
double x = bx / iris.getDimension().getBiomeZoom();
double z = bz / iris.getDimension().getBiomeZoom();
String regionId = iris.getDimension().getRegions().get(regionGenerator.getIndex(x, z, iris.getDimension().getRegions().size()));
regionGenerator.setShuffle(iris.getDimension().getRegionShuffle());
regionGenerator.setCellScale(0.35);
double x = bx / iris.getDimension().getRegionZoom();
double z = bz / iris.getDimension().getRegionZoom();
return iris.loadRegion(regionId);
return regionGenerator.get(x, z, iris.getDimension().getAllRegions(iris));
}
public BiomeResult generateData(double bx, double bz, int rawX, int rawZ)
@ -119,14 +118,14 @@ public class GenLayerBiome extends GenLayer
public InferredType getType(double bx, double bz, IrisRegion regionData)
{
bridgeGenerator.setShuffle(47);
bridgeGenerator.setCellScale(0.33 / iris.getDimension().getContinentZoom());
double x = bx / iris.getDimension().getBiomeZoom();
double z = bz / iris.getDimension().getBiomeZoom();
bridgeGenerator.setShuffle(iris.getDimension().getContinentalShuffle());
bridgeGenerator.setCellScale(0.33);
double x = bx / iris.getDimension().getContinentZoom();
double z = bz / iris.getDimension().getContinentZoom();
return bridgeGenerator.getIndex(x, z, 2) == 1 ? InferredType.LAND : InferredType.SEA;
}
public BiomeResult generateBiomeData(double bx, double bz, IrisRegion regionData, RarityCellGenerator cell, KList<IrisBiome> biomes, InferredType inferredType)
public BiomeResult generateBiomeData(double bx, double bz, IrisRegion regionData, RarityCellGenerator<IrisBiome> cell, KList<IrisBiome> biomes, InferredType inferredType)
{
if(biomes.isEmpty())
{
@ -162,12 +161,12 @@ public class GenLayerBiome extends GenLayer
return pureResult;
}
public BiomeResult implode(double bx, double bz, IrisRegion regionData, RarityCellGenerator parentCell, BiomeResult parent)
public BiomeResult implode(double bx, double bz, IrisRegion regionData, RarityCellGenerator<IrisBiome> parentCell, BiomeResult parent)
{
return implode(bx, bz, regionData, parentCell, parent, 1);
}
public BiomeResult implode(double bx, double bz, IrisRegion regionData, RarityCellGenerator parentCell, BiomeResult parent, int hits)
public BiomeResult implode(double bx, double bz, IrisRegion regionData, RarityCellGenerator<IrisBiome> parentCell, BiomeResult parent, int hits)
{
if(hits > 9)
{
@ -181,7 +180,7 @@ public class GenLayerBiome extends GenLayer
{
if(!parent.getBiome().getRealChildren(iris).isEmpty())
{
RarityCellGenerator childCell = parent.getBiome().getChildrenGenerator(rng, 123, parentCell.getCellScale() * parent.getBiome().getChildShrinkFactor());
RarityCellGenerator<IrisBiome> childCell = parent.getBiome().getChildrenGenerator(rng, 123, parentCell.getCellScale() * parent.getBiome().getChildShrinkFactor());
KList<IrisBiome> chx = parent.getBiome().getRealChildren(iris).copy();
chx.add(parent.getBiome());
IrisBiome biome = childCell.get(x, z, chx);

View File

@ -6,13 +6,14 @@ import org.bukkit.block.data.BlockData;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.ContextualChunkGenerator;
import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.RarityCellGenerator;
import com.volmit.iris.util.CNG;
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.KSet;
import com.volmit.iris.util.RNG;
import com.volmit.iris.util.RarityCellGenerator;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -21,7 +22,7 @@ import lombok.EqualsAndHashCode;
@Desc("Represents a biome in iris.")
@Data
@EqualsAndHashCode(callSuper = false)
public class IrisBiome extends IrisRegistrant
public class IrisBiome extends IrisRegistrant implements IRare
{
@DontObfuscate
@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.")
@ -100,7 +101,7 @@ public class IrisBiome extends IrisRegistrant
private KList<IrisDepositGenerator> deposits = new KList<>();
private transient InferredType inferredType;
private transient AtomicCache<RarityCellGenerator> childrenCell = new AtomicCache<>();
private transient AtomicCache<RarityCellGenerator<IrisBiome>> childrenCell = new AtomicCache<>();
private transient AtomicCache<CNG> biomeGenerator = new AtomicCache<>();
private transient AtomicCache<Integer> maxHeight = new AtomicCache<>();
private transient AtomicCache<KList<IrisBiome>> realChildren = new AtomicCache<>();
@ -132,11 +133,11 @@ public class IrisBiome extends IrisRegistrant
});
}
public RarityCellGenerator getChildrenGenerator(RNG random, int sig, double scale)
public RarityCellGenerator<IrisBiome> getChildrenGenerator(RNG random, int sig, double scale)
{
return childrenCell.aquire(() ->
{
RarityCellGenerator childrenCell = new RarityCellGenerator(random.nextParallelRNG(sig * 2137));
RarityCellGenerator<IrisBiome> childrenCell = new RarityCellGenerator<IrisBiome>(random.nextParallelRNG(sig * 2137));
childrenCell.setCellScale(scale);
return childrenCell;
});

View File

@ -182,6 +182,14 @@ public class IrisDimension extends IrisRegistrant
@Desc("Change the size of regions")
private double regionZoom = 1;
@DontObfuscate
@Desc("The shuffle of regions")
private double regionShuffle = 11;
@DontObfuscate
@Desc("The shuffle of land vs sea")
private double continentalShuffle = 99;
@DontObfuscate
@Desc("Disable this to stop placing schematics in biomes")
private boolean placeObjects = true;

View File

@ -6,6 +6,7 @@ import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.CNG;
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;
@ -17,12 +18,16 @@ import lombok.EqualsAndHashCode;
@Desc("Represents an iris region")
@Data
@EqualsAndHashCode(callSuper = false)
public class IrisRegion extends IrisRegistrant
public class IrisRegion extends IrisRegistrant implements IRare
{
@DontObfuscate
@Desc("The name of the region")
private String name = "A Region";
@DontObfuscate
@Desc("The rarity of the region")
private int rarity = 1;
@DontObfuscate
@Desc("The shore ration (How much percent of land should be a shore)")
private double shoreRatio = 0.13;
@ -182,6 +187,9 @@ public class IrisRegion extends IrisRegistrant
KMap<String, IrisBiome> b = new KMap<>();
KSet<String> names = new KSet<>();
names.addAll(landBiomes);
names.addAll(islandBiomes);
names.addAll(caveBiomes);
names.addAll(skylandBiomes);
names.addAll(seaBiomes);
names.addAll(shoreBiomes);
spotBiomes.forEach((i) -> names.add(i.getBiome()));

View File

@ -0,0 +1,6 @@
package com.volmit.iris.util;
public interface IRare
{
public int getRarity();
}

View File

@ -20,18 +20,22 @@ public class PregenJob
public static int task = -1;
private PrecisionStopwatch s;
private ChronoLatch cl;
private MortarSender sender;
private Runnable onDone;
public PregenJob(World world, int size)
public PregenJob(World world, int size, MortarSender sender, Runnable onDone)
{
this.s = PrecisionStopwatch.start();
this.world = world;
this.size = size;
this.onDone = onDone;
world.getWorldBorder().setCenter(0, 0);
world.getWorldBorder().setWarningDistance(64);
world.getWorldBorder().setSize(size);
mcaX = mca(min());
mcaZ = mca(min());
rcx = 0;
this.sender = sender;
cl = new ChronoLatch(3000);
rcz = 0;
total = (size / 16) * (size / 16);
@ -83,7 +87,12 @@ public class PregenJob
private void tickMetrics()
{
long eta = (long) ((total - genned) * (s.getMilliseconds() / (double) genned));
Iris.info("Pregen: Generating: " + Form.pc(Math.min((double) genned / (double) total, 1.0), 0) + ", Elapsed: " + Form.duration((long) s.getMilliseconds()) + ", ETA: " + (genned >= total - 5 ? "Any second..." : s.getMilliseconds() < 25000 ? "Calculating..." : Form.duration(eta)) + " MS: " + Form.duration((s.getMilliseconds() / (double) genned), 2));
String ss = "Pregen: " + Form.pc(Math.min((double) genned / (double) total, 1.0), 0) + ", Elapsed: " + Form.duration((long) s.getMilliseconds()) + ", ETA: " + (genned >= total - 5 ? "Any second..." : s.getMilliseconds() < 25000 ? "Calculating..." : Form.duration(eta)) + " MS: " + Form.duration((s.getMilliseconds() / (double) genned), 2);
Iris.info(ss);
if(sender.isPlayer() && sender.player().isOnline())
{
sender.sendMessage(ss);
}
}
public void tick()
@ -117,6 +126,10 @@ public class PregenJob
completed = true;
stop();
Iris.info("Pregen Completed!");
if(sender.isPlayer() && sender.player().isOnline())
{
sender.sendMessage("Pregen Completed!");
}
for(Chunk i : world.getLoadedChunks())
{
@ -124,6 +137,8 @@ public class PregenJob
}
world.save();
onDone.run();
return;
}
@ -149,6 +164,12 @@ public class PregenJob
catch(Throwable e)
{
Iris.warn("Pregen Crash!");
if(sender.isPlayer() && sender.player().isOnline())
{
sender.sendMessage("Pregen Completed!");
}
onDone.run();
e.printStackTrace();
stop();
}

View File

@ -1,15 +1,13 @@
package com.volmit.iris.util;
import com.volmit.iris.object.IrisBiome;
public class RarityCellGenerator extends CellGenerator
public class RarityCellGenerator<T extends IRare> extends CellGenerator
{
public RarityCellGenerator(RNG rng)
{
super(rng);
}
public IrisBiome get(double x, double z, KList<IrisBiome> b)
public T get(double x, double z, KList<T> b)
{
if(b.size() == 0)
{
@ -21,10 +19,10 @@ public class RarityCellGenerator extends CellGenerator
return b.get(0);
}
KList<IrisBiome> rarityMapped = new KList<>();
KList<T> rarityMapped = new KList<>();
boolean o = false;
int max = 1;
for(IrisBiome i : b)
for(T i : b)
{
if(i.getRarity() > max)
{
@ -34,7 +32,7 @@ public class RarityCellGenerator extends CellGenerator
max++;
for(IrisBiome i : b)
for(T i : b)
{
for(int j = 0; j < max - i.getRarity(); j++)
{

View File

@ -6,6 +6,9 @@ import com.google.gson.Gson;
import com.volmit.iris.Iris;
import com.volmit.iris.object.IrisRegistrant;
import lombok.Data;
@Data
public class ResourceLoader<T extends IrisRegistrant>
{
protected File root;