mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-06-18 14:50:57 +00:00
Cave placers
This commit is contained in:
@@ -22,6 +22,9 @@ import com.volmit.iris.core.project.loader.IrisData;
|
|||||||
import com.volmit.iris.core.project.loader.IrisRegistrant;
|
import com.volmit.iris.core.project.loader.IrisRegistrant;
|
||||||
import com.volmit.iris.engine.object.annotations.Desc;
|
import com.volmit.iris.engine.object.annotations.Desc;
|
||||||
import com.volmit.iris.engine.object.noise.IrisWorm;
|
import com.volmit.iris.engine.object.noise.IrisWorm;
|
||||||
|
import com.volmit.iris.util.collection.KList;
|
||||||
|
import com.volmit.iris.util.data.B;
|
||||||
|
import com.volmit.iris.util.mantle.Mantle;
|
||||||
import com.volmit.iris.util.math.RNG;
|
import com.volmit.iris.util.math.RNG;
|
||||||
import com.volmit.iris.util.noise.Worm;
|
import com.volmit.iris.util.noise.Worm;
|
||||||
import com.volmit.iris.util.noise.Worm3;
|
import com.volmit.iris.util.noise.Worm3;
|
||||||
@@ -31,6 +34,8 @@ import lombok.Data;
|
|||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
|
import org.bukkit.block.data.BlockData;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Accessors(chain = true)
|
@Accessors(chain = true)
|
||||||
@@ -51,14 +56,4 @@ public class IrisCave extends IrisRegistrant {
|
|||||||
public String getTypeName() {
|
public String getTypeName() {
|
||||||
return "Cave";
|
return "Cave";
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateCave(RNG rng, IrisData data, int x, int y, int z)
|
|
||||||
{
|
|
||||||
WormIterator3 w = worm.iterate3D(rng, data, x, y, z);
|
|
||||||
|
|
||||||
while(w.hasNext())
|
|
||||||
{
|
|
||||||
Worm3 wx = w.next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* 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.engine.object.cave;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.core.project.loader.IrisData;
|
||||||
|
import com.volmit.iris.engine.data.cache.AtomicCache;
|
||||||
|
import com.volmit.iris.engine.object.annotations.Desc;
|
||||||
|
import com.volmit.iris.engine.object.annotations.MinNumber;
|
||||||
|
import com.volmit.iris.engine.object.annotations.RegistryListResource;
|
||||||
|
import com.volmit.iris.engine.object.annotations.Required;
|
||||||
|
import com.volmit.iris.engine.object.common.IRare;
|
||||||
|
import com.volmit.iris.util.collection.KList;
|
||||||
|
import com.volmit.iris.util.data.B;
|
||||||
|
import com.volmit.iris.util.mantle.Mantle;
|
||||||
|
import com.volmit.iris.util.math.RNG;
|
||||||
|
import com.volmit.iris.util.noise.Worm3;
|
||||||
|
import com.volmit.iris.util.noise.WormIterator3;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
import org.bukkit.block.data.BlockData;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Desc("Translate objects")
|
||||||
|
@Data
|
||||||
|
public class IrisCavePlacer implements IRare {
|
||||||
|
private static final BlockData CAVE_AIR = B.get("CAVE_AIR");
|
||||||
|
|
||||||
|
@Required
|
||||||
|
@Desc("Typically a 1 in RARITY on a per chunk basis")
|
||||||
|
@MinNumber(1)
|
||||||
|
private int rarity = 15;
|
||||||
|
|
||||||
|
@MinNumber(1)
|
||||||
|
@Required
|
||||||
|
@RegistryListResource(IrisCave.class)
|
||||||
|
private String cave;
|
||||||
|
|
||||||
|
private transient final AtomicCache<IrisCave> caveCache = new AtomicCache<>();
|
||||||
|
private transient final AtomicBoolean fail = new AtomicBoolean(false);
|
||||||
|
|
||||||
|
public IrisCave getRealCave(IrisData data)
|
||||||
|
{
|
||||||
|
return caveCache.aquire(() -> data.getCaveLoader().load(getCave()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void generateCave(Mantle mantle, RNG rng, IrisData data, int x, int y, int z)
|
||||||
|
{
|
||||||
|
if(fail.get())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
IrisCave cave = getRealCave(data);
|
||||||
|
|
||||||
|
if(cave == null)
|
||||||
|
{
|
||||||
|
Iris.warn("Unable to locate cave for generation!");
|
||||||
|
fail.set(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
WormIterator3 w = cave.getWorm().iterate3D(rng, data, x, y, z);
|
||||||
|
KList<Vector> points = new KList<>();
|
||||||
|
|
||||||
|
while(w.hasNext())
|
||||||
|
{
|
||||||
|
Worm3 wx = w.next();
|
||||||
|
points.add(new Vector(wx.getX().getPosition(), wx.getY().getPosition(), wx.getZ().getPosition()));
|
||||||
|
}
|
||||||
|
|
||||||
|
mantle.setSpline(points, cave.getWorm().getGirth().get(rng, x, z, data), true, CAVE_AIR);
|
||||||
|
|
||||||
|
// TODO decorate somehow
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user