Carving slice

This commit is contained in:
cyberpwn 2021-08-27 10:24:13 -04:00
parent a09829ed4b
commit 2fa5c7eca4
6 changed files with 74 additions and 17 deletions

View File

@ -35,6 +35,8 @@ import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.mantle.Mantle;
import com.volmit.iris.util.mantle.MantleChunk; import com.volmit.iris.util.mantle.MantleChunk;
import com.volmit.iris.util.mantle.MantleFlag; import com.volmit.iris.util.mantle.MantleFlag;
import com.volmit.iris.util.matter.slices.CavernMatter;
import com.volmit.iris.util.matter.slices.UpdateMatter;
import com.volmit.iris.util.parallel.BurstExecutor; import com.volmit.iris.util.parallel.BurstExecutor;
import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.parallel.MultiBurst;
import org.bukkit.Chunk; import org.bukkit.Chunk;
@ -226,7 +228,12 @@ public interface EngineMantle extends IObjectPlacer {
@BlockCoordinates @BlockCoordinates
default void updateBlock(int x, int y, int z) { default void updateBlock(int x, int y, int z) {
getMantle().set(x, y, z, true); getMantle().set(x, y, z, UpdateMatter.ON);
}
@BlockCoordinates
default void cavernBlock(int x, int y, int z) {
getMantle().set(x, y, z, CavernMatter.ON);
} }
@ChunkCoordinates @ChunkCoordinates

View File

@ -33,6 +33,7 @@ import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.data.B; import com.volmit.iris.util.data.B;
import com.volmit.iris.util.json.JSONObject; import com.volmit.iris.util.json.JSONObject;
import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.matter.slices.CavernMatter;
import com.volmit.iris.util.plugin.VolmitSender; import com.volmit.iris.util.plugin.VolmitSender;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
@ -56,9 +57,6 @@ public class IrisCave extends IrisRegistrant {
@Desc("Define potential forking features") @Desc("Define potential forking features")
private IrisCarving fork = new IrisCarving(); private IrisCarving fork = new IrisCarving();
@Desc("Change the air block to fill worms with as caves")
private IrisBlockData fill = new IrisBlockData("cave_air");
@Desc("Limit the worm from ever getting higher or lower than this range") @Desc("Limit the worm from ever getting higher or lower than this range")
private IrisRange verticalRange = new IrisRange(3, 255); private IrisRange verticalRange = new IrisRange(3, 255);
@ -77,7 +75,7 @@ public class IrisCave extends IrisRegistrant {
writer.setLine(getWorm().generate(rng, engine.getData(), writer, verticalRange, x, y, z, writer.setLine(getWorm().generate(rng, engine.getData(), writer, verticalRange, x, y, z,
(at) -> fork.doCarving(writer, rng, engine, at.getX(), at.getY(), at.getZ())), (at) -> fork.doCarving(writer, rng, engine, at.getX(), at.getY(), at.getZ())),
getWorm().getGirth().get(rng, x, z, engine.getData()), true, getWorm().getGirth().get(rng, x, z, engine.getData()), true,
fill.getBlockData(engine.getData())); CavernMatter.ON);
} }
@Override @Override

View File

@ -29,6 +29,7 @@ import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
import com.volmit.iris.engine.object.noise.IrisStyledRange; import com.volmit.iris.engine.object.noise.IrisStyledRange;
import com.volmit.iris.engine.object.noise.NoiseStyle; import com.volmit.iris.engine.object.noise.NoiseStyle;
import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.matter.slices.CavernMatter;
import lombok.Data; import lombok.Data;
@Desc("Represents an procedural eliptical shape") @Desc("Represents an procedural eliptical shape")
@ -40,9 +41,6 @@ public class IrisElipsoid implements IRare
@MinNumber(1) @MinNumber(1)
private int rarity = 1; private int rarity = 1;
@Desc("Change the air block to fill elipsoids with as caves")
private IrisBlockData fill = new IrisBlockData("cave_air");
@Desc("The styled random radius for x") @Desc("The styled random radius for x")
private IrisStyledRange xRadius = new IrisStyledRange(1, 5, new IrisGeneratorStyle(NoiseStyle.STATIC)); private IrisStyledRange xRadius = new IrisStyledRange(1, 5, new IrisGeneratorStyle(NoiseStyle.STATIC));
@ -57,7 +55,7 @@ public class IrisElipsoid implements IRare
writer.setElipsoid(x, y, z, writer.setElipsoid(x, y, z,
xRadius.get(rng, z, y, engine.getData()), xRadius.get(rng, z, y, engine.getData()),
yRadius.get(rng, x, z, engine.getData()), yRadius.get(rng, x, z, engine.getData()),
zRadius.get(rng, y, x, engine.getData()), true, fill.getBlockData(engine.getData())); zRadius.get(rng, y, x, engine.getData()), true, CavernMatter.ON);
} }
public double maxSize() { public double maxSize() {

View File

@ -29,6 +29,7 @@ import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
import com.volmit.iris.engine.object.noise.IrisStyledRange; import com.volmit.iris.engine.object.noise.IrisStyledRange;
import com.volmit.iris.engine.object.noise.NoiseStyle; import com.volmit.iris.engine.object.noise.NoiseStyle;
import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.matter.slices.CavernMatter;
import lombok.Data; import lombok.Data;
@Desc("Represents an procedural eliptical shape") @Desc("Represents an procedural eliptical shape")
@ -40,15 +41,12 @@ public class IrisPyramid implements IRare
@MinNumber(1) @MinNumber(1)
private int rarity = 1; private int rarity = 1;
@Desc("Change the air block to fill elipsoids with as caves")
private IrisBlockData fill = new IrisBlockData("cave_air");
@Desc("The styled random radius for x") @Desc("The styled random radius for x")
private IrisStyledRange baseWidth = new IrisStyledRange(1, 5, new IrisGeneratorStyle(NoiseStyle.STATIC)); private IrisStyledRange baseWidth = new IrisStyledRange(1, 5, new IrisGeneratorStyle(NoiseStyle.STATIC));
public void generate(RNG rng, Engine engine, MantleWriter writer, int x, int y, int z) public void generate(RNG rng, Engine engine, MantleWriter writer, int x, int y, int z)
{ {
writer.setPyramid(x, y, z, fill.getBlockData(engine.getData()), writer.setPyramid(x, y, z, CavernMatter.ON,
(int)baseWidth.get(rng, z, y, engine.getData()), true); (int)baseWidth.get(rng, z, y, engine.getData()), true);
} }

View File

@ -29,6 +29,7 @@ import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
import com.volmit.iris.engine.object.noise.IrisStyledRange; import com.volmit.iris.engine.object.noise.IrisStyledRange;
import com.volmit.iris.engine.object.noise.NoiseStyle; import com.volmit.iris.engine.object.noise.NoiseStyle;
import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.matter.slices.CavernMatter;
import lombok.Data; import lombok.Data;
@Desc("Represents an procedural eliptical shape") @Desc("Represents an procedural eliptical shape")
@ -40,15 +41,12 @@ public class IrisSphere implements IRare
@MinNumber(1) @MinNumber(1)
private int rarity = 1; private int rarity = 1;
@Desc("Change the air block to fill elipsoids with as caves")
private IrisBlockData fill = new IrisBlockData("cave_air");
@Desc("The styled random radius for x") @Desc("The styled random radius for x")
private IrisStyledRange radius = new IrisStyledRange(1, 5, new IrisGeneratorStyle(NoiseStyle.STATIC)); private IrisStyledRange radius = new IrisStyledRange(1, 5, new IrisGeneratorStyle(NoiseStyle.STATIC));
public void generate(RNG rng, Engine engine, MantleWriter writer, int x, int y, int z) 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, fill.getBlockData(engine.getData())); writer.setSphere(x, y, z, radius.get(rng, z, y, engine.getData()),true, CavernMatter.ON);
} }
public double maxSize() { public double maxSize() {

View File

@ -0,0 +1,58 @@
/*
* 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.util.matter.slices;
import com.volmit.iris.util.matter.Sliced;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
@Sliced
public class CavernMatter extends RawMatter<CavernMatter.MatterCavern> {
public static final MatterCavern ON = new MatterCavern(true);
public static final MatterCavern OFF = new MatterCavern(false);
public CavernMatter() {
this(1, 1, 1);
}
public CavernMatter(int width, int height, int depth) {
super(width, height, depth, MatterCavern.class);
}
@Override
public void writeNode(MatterCavern b, DataOutputStream dos) throws IOException {
dos.writeBoolean(b.cavern);
}
@Override
public MatterCavern readNode(DataInputStream din) throws IOException {
return din.readBoolean() ? ON : OFF;
}
@Data
@AllArgsConstructor
public static class MatterCavern {
private final boolean cavern;
}
}