mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-12-26 18:49:06 +00:00
Cleanup
This commit is contained in:
@@ -32,7 +32,6 @@ import com.volmit.iris.engine.object.IrisBiome;
|
||||
import com.volmit.iris.engine.object.IrisBiomeCustom;
|
||||
import com.volmit.iris.engine.object.IrisCompat;
|
||||
import com.volmit.iris.engine.object.IrisDimension;
|
||||
import com.volmit.iris.engine.stream.utility.CachedStream2D;
|
||||
import com.volmit.iris.util.collection.KList;
|
||||
import com.volmit.iris.util.collection.KSet;
|
||||
import com.volmit.iris.util.format.C;
|
||||
@@ -319,8 +318,7 @@ public class Iris extends VolmitPlugin implements Listener {
|
||||
return instance.getDataFolder("cache", "temp");
|
||||
}
|
||||
|
||||
public void verifyDataPacksPost()
|
||||
{
|
||||
public void verifyDataPacksPost() {
|
||||
File packs = new File("plugins/Iris/packs");
|
||||
File dpacks = getDatapacksFolder();
|
||||
|
||||
@@ -342,9 +340,8 @@ public class Iris extends VolmitPlugin implements Listener {
|
||||
if (j.getName().endsWith(".json")) {
|
||||
IrisDimension dim = data.getDimensionLoader().load(j.getName().split("\\Q.\\E")[0]);
|
||||
|
||||
if(!verifyDataPackInstalled(dim))
|
||||
{
|
||||
bad = true;
|
||||
if (!verifyDataPackInstalled(dim)) {
|
||||
bad = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -353,8 +350,7 @@ public class Iris extends VolmitPlugin implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
if(bad && INMS.get().supportsDataPacks())
|
||||
{
|
||||
if (bad && INMS.get().supportsDataPacks()) {
|
||||
Iris.error("============================================================================");
|
||||
Iris.error(C.ITALIC + "You need to restart your server to properly generate custom biomes.");
|
||||
Iris.error(C.ITALIC + "By continuing, Iris will use backup biomes in place of the custom biomes.");
|
||||
@@ -362,10 +358,8 @@ public class Iris extends VolmitPlugin implements Listener {
|
||||
Iris.error(C.UNDERLINE + "IT IS HIGHLY RECOMMENDED YOU RESTART THE SERVER BEFORE GENERATING!");
|
||||
Iris.error("============================================================================");
|
||||
|
||||
for(Player i : Bukkit.getOnlinePlayers())
|
||||
{
|
||||
if(i.isOp() || Iris.perm.has(i))
|
||||
{
|
||||
for (Player i : Bukkit.getOnlinePlayers()) {
|
||||
if (i.isOp() || Iris.perm.has(i)) {
|
||||
VolmitSender sender = new VolmitSender(i, getTag("WARNING"));
|
||||
sender.sendMessage("There are some Iris Packs that have custom biomes in them");
|
||||
sender.sendMessage("You need to restart your server to use these packs.");
|
||||
@@ -374,27 +368,21 @@ public class Iris extends VolmitPlugin implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean verifyDataPackInstalled(IrisDimension dimension)
|
||||
{
|
||||
public boolean verifyDataPackInstalled(IrisDimension dimension) {
|
||||
IrisDataManager idm = new IrisDataManager(getDataFolder("packs", dimension.getLoadKey()));
|
||||
KSet<String> keys = new KSet<>();
|
||||
boolean warn = false;
|
||||
|
||||
for(IrisBiome i : dimension.getAllBiomes(() -> idm))
|
||||
{
|
||||
if(i.isCustom())
|
||||
{
|
||||
for(IrisBiomeCustom j : i.getCustomDerivitives())
|
||||
{
|
||||
keys.add(dimension.getLoadKey() +":"+ j.getId());
|
||||
for (IrisBiome i : dimension.getAllBiomes(() -> idm)) {
|
||||
if (i.isCustom()) {
|
||||
for (IrisBiomeCustom j : i.getCustomDerivitives()) {
|
||||
keys.add(dimension.getLoadKey() + ":" + j.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!INMS.get().supportsDataPacks())
|
||||
{
|
||||
if(!keys.isEmpty())
|
||||
{
|
||||
if (!INMS.get().supportsDataPacks()) {
|
||||
if (!keys.isEmpty()) {
|
||||
Iris.warn("===================================================================================");
|
||||
Iris.warn("Pack " + dimension.getLoadKey() + " has " + keys.size() + " custom biome(s). ");
|
||||
Iris.warn("Your server version does not yet support datapacks for iris.");
|
||||
@@ -405,19 +393,16 @@ public class Iris extends VolmitPlugin implements Listener {
|
||||
return true;
|
||||
}
|
||||
|
||||
for(String i : keys)
|
||||
{
|
||||
for (String i : keys) {
|
||||
Object o = INMS.get().getCustomBiomeBaseFor(i);
|
||||
|
||||
if(o == null)
|
||||
{
|
||||
if (o == null) {
|
||||
Iris.warn("The Biome " + i + " is not registered on the server.");
|
||||
warn = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(warn)
|
||||
{
|
||||
if (warn) {
|
||||
Iris.error("The Pack " + dimension.getLoadKey() + " is INCAPABLE of generating custom biomes, restart your server before generating with this pack!");
|
||||
}
|
||||
|
||||
|
||||
@@ -72,8 +72,7 @@ public class CommandIrisStudioGoto extends MortarCommand {
|
||||
}
|
||||
|
||||
if (sender.isPlayer()) {
|
||||
if(looking.get())
|
||||
{
|
||||
if (looking.get()) {
|
||||
sender.sendMessage("A Search is already running, please wait!");
|
||||
}
|
||||
|
||||
|
||||
@@ -245,16 +245,11 @@ public class CommandIrisCreate extends MortarCommand {
|
||||
World w = INMS.get().createWorld(wc);
|
||||
world.set(w);
|
||||
|
||||
try
|
||||
{
|
||||
if(pregen.get() > 0)
|
||||
{
|
||||
try {
|
||||
if (pregen.get() > 0) {
|
||||
new Pregenerator(w, pregen.get());
|
||||
}
|
||||
}
|
||||
|
||||
catch(Throwable e)
|
||||
{
|
||||
} catch (Throwable e) {
|
||||
Iris.reportError(e);
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,6 @@ import lombok.Data;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
@@ -55,8 +54,6 @@ import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Comparator;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
@@ -53,8 +53,7 @@ public interface INMSBinding {
|
||||
|
||||
void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk);
|
||||
|
||||
default boolean supportsDataPacks()
|
||||
{
|
||||
default boolean supportsDataPacks() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,8 +43,7 @@ public class NMSBinding17_1 implements INMSBinding {
|
||||
private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
|
||||
private Field biomeStorageCache = null;
|
||||
|
||||
public boolean supportsDataPacks()
|
||||
{
|
||||
public boolean supportsDataPacks() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -108,10 +107,7 @@ public class NMSBinding17_1 implements INMSBinding {
|
||||
public Object getCustomBiomeBaseFor(String mckey) {
|
||||
try {
|
||||
return getCustomBiomeRegistry().d(ResourceKey.a(IRegistry.aO, new MinecraftKey(mckey)));
|
||||
}
|
||||
|
||||
catch(Throwable e)
|
||||
{
|
||||
} catch (Throwable e) {
|
||||
Iris.reportError(e);
|
||||
}
|
||||
|
||||
|
||||
@@ -160,8 +160,7 @@ public class IrisEngine extends BlockPopulator implements Engine {
|
||||
Hunk<BlockData> blocks = vblocks;
|
||||
|
||||
|
||||
switch(getDimension().getTerrainMode())
|
||||
{
|
||||
switch (getDimension().getTerrainMode()) {
|
||||
case NORMAL -> {
|
||||
getFramework().getEngineParallax().generateParallaxArea(x >> 4, z >> 4);
|
||||
getFramework().getBiomeActuator().actuate(x, z, vbiomes);
|
||||
|
||||
@@ -117,7 +117,7 @@ public class IrisEngineFramework implements EngineFramework {
|
||||
|
||||
@Override
|
||||
public EngineActuator<BlockData> getTerrainActuator() {
|
||||
return switch (getEngine().getDimension().getTerrainMode()){
|
||||
return switch (getEngine().getDimension().getTerrainMode()) {
|
||||
case NORMAL -> getTerrainNormalActuator();
|
||||
case ISLANDS -> getTerrainIslandActuator();
|
||||
};
|
||||
|
||||
@@ -22,7 +22,6 @@ import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap;
|
||||
import com.volmit.iris.engine.framework.Engine;
|
||||
import com.volmit.iris.engine.framework.EngineParallaxManager;
|
||||
import com.volmit.iris.engine.object.IrisFeaturePositional;
|
||||
import com.volmit.iris.engine.stream.utility.CachedStream2D;
|
||||
import com.volmit.iris.util.collection.KList;
|
||||
import com.volmit.iris.util.scheduling.IrisLock;
|
||||
import lombok.Getter;
|
||||
|
||||
@@ -18,13 +18,11 @@
|
||||
|
||||
package com.volmit.iris.engine.actuator;
|
||||
|
||||
import com.volmit.iris.Iris;
|
||||
import com.volmit.iris.engine.framework.Engine;
|
||||
import com.volmit.iris.engine.framework.EngineAssignedActuator;
|
||||
import com.volmit.iris.engine.hunk.Hunk;
|
||||
import com.volmit.iris.engine.object.IrisBiome;
|
||||
import com.volmit.iris.util.collection.KList;
|
||||
import com.volmit.iris.util.math.M;
|
||||
import com.volmit.iris.util.math.RNG;
|
||||
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
|
||||
import lombok.Getter;
|
||||
@@ -64,13 +62,11 @@ public class IrisTerrainIslandActuator extends EngineAssignedActuator<BlockData>
|
||||
realX = (int) modX(xf + x);
|
||||
realZ = (int) modZ(zf + z);
|
||||
|
||||
if(getComplex().getIslandStream().get(realX, realZ))
|
||||
{
|
||||
if (getComplex().getIslandStream().get(realX, realZ)) {
|
||||
surface = getComplex().getIslandHeightStream().get(realX, realZ).intValue();
|
||||
depth = getComplex().getIslandDepthStream().get(realX, realZ).intValue();
|
||||
|
||||
for(i = surface - depth; i < surface; i++)
|
||||
{
|
||||
for (i = surface - depth; i < surface; i++) {
|
||||
h.set(xf, i, zf, BEDROCK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ import com.google.common.util.concurrent.AtomicDouble;
|
||||
import com.google.gson.Gson;
|
||||
import com.volmit.iris.Iris;
|
||||
import com.volmit.iris.core.IrisDataManager;
|
||||
import com.volmit.iris.engine.hunk.storage.AtomicDoubleHunk;
|
||||
import com.volmit.iris.engine.object.IrisRegistrant;
|
||||
import com.volmit.iris.util.collection.KList;
|
||||
import com.volmit.iris.util.collection.KMap;
|
||||
|
||||
@@ -31,14 +31,12 @@ import com.volmit.iris.engine.data.DirectWorldWriter;
|
||||
import com.volmit.iris.engine.data.chunk.TerrainChunk;
|
||||
import com.volmit.iris.engine.hunk.Hunk;
|
||||
import com.volmit.iris.engine.object.IrisBiome;
|
||||
import com.volmit.iris.engine.object.IrisBiomeCustom;
|
||||
import com.volmit.iris.engine.object.IrisDimension;
|
||||
import com.volmit.iris.engine.object.IrisPosition;
|
||||
import com.volmit.iris.engine.parallel.BurstExecutor;
|
||||
import com.volmit.iris.engine.parallel.MultiBurst;
|
||||
import com.volmit.iris.util.collection.KList;
|
||||
import com.volmit.iris.util.collection.KMap;
|
||||
import com.volmit.iris.util.collection.KSet;
|
||||
import com.volmit.iris.util.fakenews.FakeWorld;
|
||||
import com.volmit.iris.util.format.C;
|
||||
import com.volmit.iris.util.format.Form;
|
||||
@@ -464,8 +462,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
||||
generated++;
|
||||
ps.end();
|
||||
|
||||
if(IrisSettings.get().getGeneral().isDebug())
|
||||
{
|
||||
if (IrisSettings.get().getGeneral().isDebug()) {
|
||||
Iris.debug("Chunk " + C.GREEN + x + "," + z + C.LIGHT_PURPLE + " in " + C.YELLOW + Form.duration(ps.getMillis(), 2) + C.LIGHT_PURPLE + " Rate: " + C.BLUE + Form.f(getGeneratedPerSecond(), 0) + "/s");
|
||||
}
|
||||
|
||||
|
||||
@@ -199,11 +199,10 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
|
||||
IrisLock getFeatureLock();
|
||||
|
||||
default void forEachFeature(double x, double z, Consumer<IrisFeaturePositional> f) {
|
||||
long key = Cache.key(((int)x)>>4, ((int)z) >> 4);
|
||||
long key = Cache.key(((int) x) >> 4, ((int) z) >> 4);
|
||||
|
||||
for(IrisFeaturePositional ipf : getFeatureCache().compute(key, (ke, v) -> {
|
||||
if(v != null)
|
||||
{
|
||||
for (IrisFeaturePositional ipf : getFeatureCache().compute(key, (ke, v) -> {
|
||||
if (v != null) {
|
||||
return v;
|
||||
}
|
||||
|
||||
@@ -226,8 +225,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
|
||||
ParallaxChunkMeta m = getParallaxAccess().getMetaR(i + cx, j + cz);
|
||||
|
||||
try {
|
||||
synchronized (m.getFeatures())
|
||||
{
|
||||
synchronized (m.getFeatures()) {
|
||||
for (IrisFeaturePositional k : m.getFeatures()) {
|
||||
if (k.shouldFilter(x, z)) {
|
||||
pos.add(k);
|
||||
@@ -244,16 +242,14 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
|
||||
getFeatureLock().unlock();
|
||||
|
||||
return pos;
|
||||
}))
|
||||
{
|
||||
})) {
|
||||
f.accept(ipf);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("SynchronizationOnLocalVariableOrMethodParameter")
|
||||
default void generateParallaxArea(int x, int z) {
|
||||
if(!getEngine().getDimension().isPlaceObjects())
|
||||
{
|
||||
if (!getEngine().getDimension().isPlaceObjects()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -354,9 +354,8 @@ public class IrisInterpolation {
|
||||
//@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 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) {
|
||||
@@ -387,7 +386,7 @@ public class IrisInterpolation {
|
||||
}
|
||||
|
||||
public static double getTricubic(int x, int y, int z, double rad, NoiseProvider3 n) {
|
||||
return getTricubic(x,y,z,rad,rad,rad,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) {
|
||||
@@ -841,19 +840,19 @@ public class IrisInterpolation {
|
||||
}
|
||||
|
||||
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);
|
||||
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);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public static double getNoise3D(InterpolationMethod3D method, int x, int y, int z, double rad, NoiseProvider3 n) {
|
||||
return switch (method){
|
||||
case TRILINEAR -> getTrilinear(x,y,z,rad, rad, rad, n);
|
||||
case TRICUBIC -> getTricubic(x,y,z,rad, rad, rad, n);
|
||||
case TRIHERMITE -> getTrihermite(x,y,z,rad, rad, rad, n);
|
||||
return switch (method) {
|
||||
case TRILINEAR -> getTrilinear(x, y, z, rad, rad, rad, n);
|
||||
case TRICUBIC -> getTricubic(x, y, z, rad, rad, rad, n);
|
||||
case TRIHERMITE -> getTrihermite(x, y, z, rad, rad, rad, n);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -25,8 +25,6 @@ import com.volmit.iris.engine.framework.EngineAssignedModifier;
|
||||
import com.volmit.iris.engine.hunk.Hunk;
|
||||
import com.volmit.iris.engine.object.IrisBiome;
|
||||
import com.volmit.iris.engine.object.common.CaveResult;
|
||||
import com.volmit.iris.engine.parallel.BurstExecutor;
|
||||
import com.volmit.iris.engine.parallel.MultiBurst;
|
||||
import com.volmit.iris.util.math.RNG;
|
||||
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
|
||||
import org.bukkit.Material;
|
||||
|
||||
@@ -450,15 +450,13 @@ public class IrisBiome extends IrisRegistrant implements IRare {
|
||||
|
||||
int gg = 0;
|
||||
|
||||
for(IrisObjectPlacement i : getObjects())
|
||||
{
|
||||
for(IrisObject j : data.getObjectLoader().loadAll(i.getPlace()))
|
||||
{
|
||||
for (IrisObjectPlacement i : getObjects()) {
|
||||
for (IrisObject j : data.getObjectLoader().loadAll(i.getPlace())) {
|
||||
gg = Math.max(gg, j.getH());
|
||||
}
|
||||
}
|
||||
|
||||
return maxHeight + gg+3;
|
||||
return maxHeight + gg + 3;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -49,8 +49,7 @@ public class IrisStyledRange {
|
||||
return min;
|
||||
}
|
||||
|
||||
if(style.isFlat())
|
||||
{
|
||||
if (style.isFlat()) {
|
||||
return M.lerp(min, max, 0.5);
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ import lombok.Data;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.function.Function;
|
||||
|
||||
@AllArgsConstructor
|
||||
|
||||
@@ -65,13 +65,11 @@ public interface ProceduralStream<T> extends ProceduralLayer, Interpolated<T> {
|
||||
return new FunctionStream<>(f, f2, helper);
|
||||
}
|
||||
|
||||
default ProceduralStream<Boolean> chance(double chance)
|
||||
{
|
||||
default ProceduralStream<Boolean> chance(double chance) {
|
||||
return of((x, z) -> getDouble(x, z) < chance, Interpolated.BOOLEAN);
|
||||
}
|
||||
|
||||
default ProceduralStream<Boolean> seededChance(RNG brng, long rootSeed, double chance)
|
||||
{
|
||||
default ProceduralStream<Boolean> seededChance(RNG brng, long rootSeed, double chance) {
|
||||
RNG rng = brng.nextParallelRNG(rootSeed - 3995L);
|
||||
return of((x, z) -> {
|
||||
double ch = getDouble(x, z);
|
||||
@@ -365,11 +363,10 @@ public interface ProceduralStream<T> extends ProceduralLayer, Interpolated<T> {
|
||||
return new FittedStream<T>(this, min, max);
|
||||
}
|
||||
|
||||
default ProceduralStream<Double> style(RNG rng, IrisStyledRange range)
|
||||
{
|
||||
default ProceduralStream<Double> style(RNG rng, IrisStyledRange range) {
|
||||
return ProceduralStream.of((x, z) -> {
|
||||
double d = getDouble(x, z);
|
||||
return range.get(rng,d, -d);
|
||||
return range.get(rng, d, -d);
|
||||
}, Interpolated.DOUBLE);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
|
||||
package com.volmit.iris.engine.stream.interpolation;
|
||||
|
||||
import com.volmit.iris.engine.interpolation.IrisInterpolation;
|
||||
import com.volmit.iris.engine.interpolation.InterpolationMethod;
|
||||
import com.volmit.iris.engine.interpolation.IrisInterpolation;
|
||||
import com.volmit.iris.engine.stream.BasicStream;
|
||||
import com.volmit.iris.engine.stream.ProceduralStream;
|
||||
import com.volmit.iris.util.function.NoiseProvider;
|
||||
|
||||
@@ -24,8 +24,6 @@ import com.volmit.iris.engine.cache.Cache;
|
||||
import com.volmit.iris.engine.stream.BasicStream;
|
||||
import com.volmit.iris.engine.stream.ProceduralStream;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public class CachedStream2D<T> extends BasicStream<T> implements ProceduralStream<T> {
|
||||
private final ProceduralStream<T> stream;
|
||||
private final ConcurrentLinkedHashMap<Long, T> cache;
|
||||
@@ -52,8 +50,7 @@ public class CachedStream2D<T> extends BasicStream<T> implements ProceduralStrea
|
||||
|
||||
@Override
|
||||
public T get(double x, double z) {
|
||||
if(IrisComplex.cacheLock.get())
|
||||
{
|
||||
if (IrisComplex.cacheLock.get()) {
|
||||
return stream.get((int) x, (int) z);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
|
||||
package com.volmit.iris.util.data;
|
||||
|
||||
import com.volmit.iris.Iris;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.generator.ChunkGenerator.BiomeGrid;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
Reference in New Issue
Block a user