diff --git a/src/main/java/com/volmit/iris/generator/actuator/IrisBiomeActuator.java b/src/main/java/com/volmit/iris/generator/actuator/IrisBiomeActuator.java index 6b1a315c0..245d34fbe 100644 --- a/src/main/java/com/volmit/iris/generator/actuator/IrisBiomeActuator.java +++ b/src/main/java/com/volmit/iris/generator/actuator/IrisBiomeActuator.java @@ -2,6 +2,7 @@ package com.volmit.iris.generator.actuator; import com.volmit.iris.nms.INMS; import com.volmit.iris.object.IrisBiome; +import com.volmit.iris.object.IrisBiomeCustom; import com.volmit.iris.scaffold.engine.Engine; import com.volmit.iris.scaffold.engine.EngineAssignedActuator; import com.volmit.iris.scaffold.hunk.Hunk; @@ -13,8 +14,11 @@ import com.volmit.iris.util.RNG; import org.bukkit.block.Biome; public class IrisBiomeActuator extends EngineAssignedActuator { + private final RNG rng; + public IrisBiomeActuator(Engine engine) { super(engine, "Biome"); + rng = new RNG(engine.getWorld().getSeed() + 243995); } @Override @@ -35,7 +39,8 @@ public class IrisBiomeActuator extends EngineAssignedActuator { { try { - Object biomeBase = INMS.get().getCustomBiomeBaseFor(getDimension().getLoadKey()+":"+ib.getCustom().getId()); + IrisBiomeCustom custom = ib.getCustomBiome(rng, x, 0, z); + Object biomeBase = INMS.get().getCustomBiomeBaseFor(getDimension().getLoadKey()+":"+custom.getId()); ((BiomeGridHunkView)h).forceBiomeBaseInto(x, 0, z, biomeBase); for (int i = 0; i < h.getHeight(); i++) { @@ -46,7 +51,7 @@ public class IrisBiomeActuator extends EngineAssignedActuator { catch(Throwable e) { e.printStackTrace(); - Biome v = ib.getSkyBiome(RNG.r, x, 0, z); + Biome v = ib.getSkyBiome(rng, x, 0, z); for (int i = 0; i < h.getHeight(); i++) { h.set(xxf, i, zzf, v); } @@ -55,7 +60,7 @@ public class IrisBiomeActuator extends EngineAssignedActuator { else { - Biome v = ib.getSkyBiome(RNG.r, x, 0, z); + Biome v = ib.getSkyBiome(rng, x, 0, z); for (int i = 0; i < h.getHeight(); i++) { h.set(xxf, i, zzf, v); } diff --git a/src/main/java/com/volmit/iris/object/IrisBiome.java b/src/main/java/com/volmit/iris/object/IrisBiome.java index 32d55ac23..ed6aab2fe 100644 --- a/src/main/java/com/volmit/iris/object/IrisBiome.java +++ b/src/main/java/com/volmit/iris/object/IrisBiome.java @@ -32,8 +32,9 @@ public class IrisBiome extends IrisRegistrant implements IRare { private String name = "A Biome"; @DontObfuscate + @ArrayType(min = 1, type = IrisBiomeCustom.class) @Desc("If the biome type custom is defined, specify this") - private IrisBiomeCustom custom; + private KList customDerivitives; @DontObfuscate @Desc("Entity spawns to override or add to this biome. Anytime an entity spawns, it has a chance to be replaced as one of these overrides.") @@ -201,7 +202,7 @@ public class IrisBiome extends IrisRegistrant implements IRare { public boolean isCustom() { - return getCustom() != null; + return getCustomDerivitives() != null && getCustomDerivitives().isNotEmpty(); } public double getGenLinkMax(String loadKey) { @@ -535,6 +536,14 @@ public class IrisBiome extends IrisRegistrant implements IRare { return biomeSkyScatter.get(getBiomeGenerator(rng).fit(0, biomeSkyScatter.size() - 1, x, y, z)); } + public IrisBiomeCustom getCustomBiome(RNG rng, double x, double y, double z) { + if (customDerivitives.size() == 1) { + return customDerivitives.get(0); + } + + return customDerivitives.get(getBiomeGenerator(rng).fit(0, customDerivitives.size() - 1, x, y, z)); + } + public KList getRealChildren(DataProvider g) { return realChildren.aquire(() -> { @@ -564,6 +573,7 @@ public class IrisBiome extends IrisRegistrant implements IRare { return new KList(m); } + //TODO: Test public Biome getGroundBiome(RNG rng, double x, double y, double z) { if (biomeScatter.isEmpty()) { return getDerivative(); diff --git a/src/main/java/com/volmit/iris/object/IrisBlockDrops.java b/src/main/java/com/volmit/iris/object/IrisBlockDrops.java index 9f8edc7dd..67d7197f8 100644 --- a/src/main/java/com/volmit/iris/object/IrisBlockDrops.java +++ b/src/main/java/com/volmit/iris/object/IrisBlockDrops.java @@ -65,6 +65,8 @@ public class IrisBlockDrops { return false; } + // TODO: WARNING USES RNG.R + @Deprecated public void fillDrops(boolean debug, KList d) { for (IrisLoot i : getDrops()) { if (RNG.r.i(1, i.getRarity()) == i.getRarity()) { diff --git a/src/main/java/com/volmit/iris/object/IrisDimension.java b/src/main/java/com/volmit/iris/object/IrisDimension.java index 938cde1f7..0664fdb65 100644 --- a/src/main/java/com/volmit/iris/object/IrisDimension.java +++ b/src/main/java/com/volmit/iris/object/IrisDimension.java @@ -468,19 +468,23 @@ public class IrisDimension extends IrisRegistrant { if(i.isCustom()) { write = true; - File output = new File(datapacks, "iris/data/" + getLoadKey() + "/worldgen/biome/" + i.getCustom().getId() + ".json"); - if(!output.exists()) + for(IrisBiomeCustom j : i.getCustomDerivitives()) { - changed = true; - } + File output = new File(datapacks, "iris/data/" + getLoadKey() + "/worldgen/biome/" + j.getId() + ".json"); - Iris.verbose(" Installing Data Pack Biome: " + output.getPath()); - output.getParentFile().mkdirs(); - try { - IO.writeAll(output, i.getCustom().generateJson()); - } catch (IOException e) { - e.printStackTrace(); + if(!output.exists()) + { + changed = true; + } + + Iris.verbose(" Installing Data Pack Biome: " + output.getPath()); + output.getParentFile().mkdirs(); + try { + IO.writeAll(output, j.generateJson()); + } catch (IOException e) { + e.printStackTrace(); + } } } }