mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-12-22 16:49:14 +00:00
Cleanup
This commit is contained in:
@@ -23,8 +23,8 @@ import com.volmit.iris.core.link.IrisPapiExpansion;
|
|||||||
import com.volmit.iris.core.link.MultiverseCoreLink;
|
import com.volmit.iris.core.link.MultiverseCoreLink;
|
||||||
import com.volmit.iris.core.link.MythicMobsLink;
|
import com.volmit.iris.core.link.MythicMobsLink;
|
||||||
import com.volmit.iris.core.link.OraxenLink;
|
import com.volmit.iris.core.link.OraxenLink;
|
||||||
import com.volmit.iris.core.nms.INMS;
|
|
||||||
import com.volmit.iris.core.loader.IrisData;
|
import com.volmit.iris.core.loader.IrisData;
|
||||||
|
import com.volmit.iris.core.nms.INMS;
|
||||||
import com.volmit.iris.core.service.StudioSVC;
|
import com.volmit.iris.core.service.StudioSVC;
|
||||||
import com.volmit.iris.engine.object.biome.IrisBiome;
|
import com.volmit.iris.engine.object.biome.IrisBiome;
|
||||||
import com.volmit.iris.engine.object.biome.IrisBiomeCustom;
|
import com.volmit.iris.engine.object.biome.IrisBiomeCustom;
|
||||||
@@ -47,7 +47,10 @@ import com.volmit.iris.util.io.JarScanner;
|
|||||||
import com.volmit.iris.util.math.M;
|
import com.volmit.iris.util.math.M;
|
||||||
import com.volmit.iris.util.math.RNG;
|
import com.volmit.iris.util.math.RNG;
|
||||||
import com.volmit.iris.util.parallel.MultiBurst;
|
import com.volmit.iris.util.parallel.MultiBurst;
|
||||||
import com.volmit.iris.util.plugin.*;
|
import com.volmit.iris.util.plugin.IrisService;
|
||||||
|
import com.volmit.iris.util.plugin.Metrics;
|
||||||
|
import com.volmit.iris.util.plugin.VolmitPlugin;
|
||||||
|
import com.volmit.iris.util.plugin.VolmitSender;
|
||||||
import com.volmit.iris.util.reflect.ShadeFix;
|
import com.volmit.iris.util.reflect.ShadeFix;
|
||||||
import com.volmit.iris.util.scheduling.J;
|
import com.volmit.iris.util.scheduling.J;
|
||||||
import com.volmit.iris.util.scheduling.Queue;
|
import com.volmit.iris.util.scheduling.Queue;
|
||||||
@@ -129,17 +132,17 @@ public class Iris extends VolmitPlugin implements Listener {
|
|||||||
J.a(this::verifyDataPacksPost, 20);
|
J.a(this::verifyDataPacksPost, 20);
|
||||||
splash();
|
splash();
|
||||||
|
|
||||||
if(IrisSettings.get().getGeneral().isAutoStartDefaultStudio())
|
if (IrisSettings.get().getGeneral().isAutoStartDefaultStudio()) {
|
||||||
{
|
|
||||||
Iris.info("Starting up auto Studio!");
|
Iris.info("Starting up auto Studio!");
|
||||||
try {
|
try {
|
||||||
Player r = new KList<>(getServer().getOnlinePlayers()).getRandom();
|
Player r = new KList<>(getServer().getOnlinePlayers()).getRandom();
|
||||||
Iris.service(StudioSVC.class).open(r != null ? new VolmitSender(r) : sender, 1337, IrisSettings.get().getGenerator().getDefaultWorldType(), (w) -> {
|
Iris.service(StudioSVC.class).open(r != null ? new VolmitSender(r) : sender, 1337, IrisSettings.get().getGenerator().getDefaultWorldType(), (w) -> {
|
||||||
J.s(() -> {for(Player i : getServer().getOnlinePlayers())
|
J.s(() -> {
|
||||||
{
|
for (Player i : getServer().getOnlinePlayers()) {
|
||||||
i.setGameMode(GameMode.SPECTATOR);
|
i.setGameMode(GameMode.SPECTATOR);
|
||||||
i.teleport(new Location(w, 0, 200, 0));
|
i.teleport(new Location(w, 0, 200, 0));
|
||||||
}});
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
} catch (IrisException e) {
|
} catch (IrisException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
@@ -204,10 +204,10 @@ public class CommandObject implements DecreeExecutor {
|
|||||||
// ,
|
// ,
|
||||||
// @Param(description = "The scale interpolator to use", defaultValue = "none")
|
// @Param(description = "The scale interpolator to use", defaultValue = "none")
|
||||||
// IrisObjectPlacementScaleInterpolator interpolator
|
// IrisObjectPlacementScaleInterpolator interpolator
|
||||||
){
|
) {
|
||||||
IrisObject o = IrisData.loadAnyObject(object);
|
IrisObject o = IrisData.loadAnyObject(object);
|
||||||
double maxScale = Double.max(10 - o.getBlocks().size() / 10000d, 1);
|
double maxScale = Double.max(10 - o.getBlocks().size() / 10000d, 1);
|
||||||
if (scale > maxScale){
|
if (scale > maxScale) {
|
||||||
sender().sendMessage(C.YELLOW + "Indicated scale exceeds maximum. Downscaled to maximum: " + maxScale);
|
sender().sendMessage(C.YELLOW + "Indicated scale exceeds maximum. Downscaled to maximum: " + maxScale);
|
||||||
scale = maxScale;
|
scale = maxScale;
|
||||||
}
|
}
|
||||||
@@ -326,7 +326,7 @@ public class CommandObject implements DecreeExecutor {
|
|||||||
String name,
|
String name,
|
||||||
@Param(description = "Overwrite existing object files", defaultValue = "false", aliases = "force")
|
@Param(description = "Overwrite existing object files", defaultValue = "false", aliases = "force")
|
||||||
boolean overwrite
|
boolean overwrite
|
||||||
){
|
) {
|
||||||
IrisObject o = WandSVC.createSchematic(player().getInventory().getItemInMainHand());
|
IrisObject o = WandSVC.createSchematic(player().getInventory().getItemInMainHand());
|
||||||
|
|
||||||
if (o == null) {
|
if (o == null) {
|
||||||
@@ -342,7 +342,7 @@ public class CommandObject implements DecreeExecutor {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
o.write(file);
|
o.write(file);
|
||||||
} catch (IOException e){
|
} catch (IOException e) {
|
||||||
sender().sendMessage(C.RED + "Failed to save object because of an IOException: " + e.getMessage());
|
sender().sendMessage(C.RED + "Failed to save object because of an IOException: " + e.getMessage());
|
||||||
Iris.reportError(e);
|
Iris.reportError(e);
|
||||||
}
|
}
|
||||||
@@ -355,7 +355,7 @@ public class CommandObject implements DecreeExecutor {
|
|||||||
public void shift(
|
public void shift(
|
||||||
@Param(description = "The amount to shift by", defaultValue = "1")
|
@Param(description = "The amount to shift by", defaultValue = "1")
|
||||||
int amount
|
int amount
|
||||||
){
|
) {
|
||||||
if (!WandSVC.isHoldingWand(player())) {
|
if (!WandSVC.isHoldingWand(player())) {
|
||||||
sender().sendMessage("Hold your wand.");
|
sender().sendMessage("Hold your wand.");
|
||||||
return;
|
return;
|
||||||
@@ -379,7 +379,7 @@ public class CommandObject implements DecreeExecutor {
|
|||||||
public void undo(
|
public void undo(
|
||||||
@Param(description = "The amount of pastes to undo", defaultValue = "1")
|
@Param(description = "The amount of pastes to undo", defaultValue = "1")
|
||||||
int amount
|
int amount
|
||||||
){
|
) {
|
||||||
ObjectSVC service = Iris.service(ObjectSVC.class);
|
ObjectSVC service = Iris.service(ObjectSVC.class);
|
||||||
int actualReverts = Math.min(service.getUndos().size(), amount);
|
int actualReverts = Math.min(service.getUndos().size(), amount);
|
||||||
service.revertChanges(actualReverts);
|
service.revertChanges(actualReverts);
|
||||||
@@ -394,8 +394,8 @@ public class CommandObject implements DecreeExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Decree(name = "x&y", description = "Autoselect up, down & out", sync = true)
|
@Decree(name = "x&y", description = "Autoselect up, down & out", sync = true)
|
||||||
public void xay(){
|
public void xay() {
|
||||||
if (!WandSVC.isHoldingWand(player())){
|
if (!WandSVC.isHoldingWand(player())) {
|
||||||
sender().sendMessage(C.YELLOW + "Hold your wand!");
|
sender().sendMessage(C.YELLOW + "Hold your wand!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ import com.volmit.iris.Iris;
|
|||||||
import com.volmit.iris.core.IrisSettings;
|
import com.volmit.iris.core.IrisSettings;
|
||||||
import com.volmit.iris.core.gui.NoiseExplorerGUI;
|
import com.volmit.iris.core.gui.NoiseExplorerGUI;
|
||||||
import com.volmit.iris.core.gui.VisionGUI;
|
import com.volmit.iris.core.gui.VisionGUI;
|
||||||
import com.volmit.iris.core.project.IrisProject;
|
|
||||||
import com.volmit.iris.core.loader.IrisData;
|
import com.volmit.iris.core.loader.IrisData;
|
||||||
|
import com.volmit.iris.core.project.IrisProject;
|
||||||
import com.volmit.iris.core.service.ConversionSVC;
|
import com.volmit.iris.core.service.ConversionSVC;
|
||||||
import com.volmit.iris.core.service.StudioSVC;
|
import com.volmit.iris.core.service.StudioSVC;
|
||||||
import com.volmit.iris.core.tools.IrisToolbelt;
|
import com.volmit.iris.core.tools.IrisToolbelt;
|
||||||
@@ -309,7 +309,7 @@ public class CommandStudio implements DecreeExecutor {
|
|||||||
|
|
||||||
@Decree(description = "Charges all spawners in the area", aliases = "zzt", origin = DecreeOrigin.PLAYER)
|
@Decree(description = "Charges all spawners in the area", aliases = "zzt", origin = DecreeOrigin.PLAYER)
|
||||||
public void charge() {
|
public void charge() {
|
||||||
if (!IrisToolbelt.isIrisWorld(world())){
|
if (!IrisToolbelt.isIrisWorld(world())) {
|
||||||
sender().sendMessage(C.RED + "You must be in an Iris world to charge spawners!");
|
sender().sendMessage(C.RED + "You must be in an Iris world to charge spawners!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -377,13 +377,13 @@ public class CommandStudio implements DecreeExecutor {
|
|||||||
|
|
||||||
if (regionPosition == null && region != null) {
|
if (regionPosition == null && region != null) {
|
||||||
sender().sendMessage(C.RED + "Could not find the region you specified.");
|
sender().sendMessage(C.RED + "Could not find the region you specified.");
|
||||||
} else if (regionPosition != null){
|
} else if (regionPosition != null) {
|
||||||
sender().sendMessage(C.GREEN + "Found the region at: " + regionPosition.toString());
|
sender().sendMessage(C.GREEN + "Found the region at: " + regionPosition);
|
||||||
}
|
}
|
||||||
if (biomePosition == null && biome != null) {
|
if (biomePosition == null && biome != null) {
|
||||||
sender().sendMessage(C.RED + "Could not find the biome you specified.");
|
sender().sendMessage(C.RED + "Could not find the biome you specified.");
|
||||||
} else if (biomePosition != null){
|
} else if (biomePosition != null) {
|
||||||
sender().sendMessage(C.GREEN + "Found the biome at: " + biomePosition.toString());
|
sender().sendMessage(C.GREEN + "Found the biome at: " + biomePosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
final IrisPosition finalL = regionPosition == null ? biomePosition : regionPosition;
|
final IrisPosition finalL = regionPosition == null ? biomePosition : regionPosition;
|
||||||
@@ -705,7 +705,7 @@ public class CommandStudio implements DecreeExecutor {
|
|||||||
@Decree(aliases = {"find-features", "nf"}, description = "Get the noise feature data in your chunk")
|
@Decree(aliases = {"find-features", "nf"}, description = "Get the noise feature data in your chunk")
|
||||||
public void features() {
|
public void features() {
|
||||||
|
|
||||||
if (!IrisToolbelt.isIrisWorld(player().getWorld())){
|
if (!IrisToolbelt.isIrisWorld(player().getWorld())) {
|
||||||
sender().sendMessage(C.RED + "Iris worlds only");
|
sender().sendMessage(C.RED + "Iris worlds only");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -719,7 +719,7 @@ public class CommandStudio implements DecreeExecutor {
|
|||||||
|
|
||||||
@Decree(aliases = "find-objects", description = "Get information about nearby structures")
|
@Decree(aliases = "find-objects", description = "Get information about nearby structures")
|
||||||
public void objects() {
|
public void objects() {
|
||||||
if (!IrisToolbelt.isIrisWorld(player().getWorld())){
|
if (!IrisToolbelt.isIrisWorld(player().getWorld())) {
|
||||||
sender().sendMessage(C.RED + "You must be in an Iris world");
|
sender().sendMessage(C.RED + "You must be in an Iris world");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,9 @@ import com.volmit.iris.util.decree.DecreeOrigin;
|
|||||||
import com.volmit.iris.util.decree.annotations.Decree;
|
import com.volmit.iris.util.decree.annotations.Decree;
|
||||||
import com.volmit.iris.util.format.C;
|
import com.volmit.iris.util.format.C;
|
||||||
import com.volmit.iris.util.json.JSONObject;
|
import com.volmit.iris.util.json.JSONObject;
|
||||||
import org.bukkit.*;
|
import org.bukkit.Chunk;
|
||||||
|
import org.bukkit.FluidCollisionMode;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ import com.volmit.iris.util.format.Form;
|
|||||||
import com.volmit.iris.util.io.IO;
|
import com.volmit.iris.util.io.IO;
|
||||||
import com.volmit.iris.util.json.JSONArray;
|
import com.volmit.iris.util.json.JSONArray;
|
||||||
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.plugin.VolmitSender;
|
import com.volmit.iris.util.plugin.VolmitSender;
|
||||||
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
|
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -54,6 +53,7 @@ public class IrisPack {
|
|||||||
/**
|
/**
|
||||||
* Create an iris pack backed by a data folder
|
* Create an iris pack backed by a data folder
|
||||||
* the data folder is assumed to be in the Iris/packs/NAME folder
|
* the data folder is assumed to be in the Iris/packs/NAME folder
|
||||||
|
*
|
||||||
* @param name the name
|
* @param name the name
|
||||||
*/
|
*/
|
||||||
public IrisPack(String name) {
|
public IrisPack(String name) {
|
||||||
@@ -62,18 +62,17 @@ public class IrisPack {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an iris pack backed by a data folder
|
* Create an iris pack backed by a data folder
|
||||||
|
*
|
||||||
* @param folder the folder of the pack. Must be a directory
|
* @param folder the folder of the pack. Must be a directory
|
||||||
*/
|
*/
|
||||||
public IrisPack(File folder) {
|
public IrisPack(File folder) {
|
||||||
this.folder = folder;
|
this.folder = folder;
|
||||||
|
|
||||||
if(!folder.exists())
|
if (!folder.exists()) {
|
||||||
{
|
|
||||||
throw new RuntimeException("Cannot open Pack " + folder.getPath() + " (directory doesnt exist)");
|
throw new RuntimeException("Cannot open Pack " + folder.getPath() + " (directory doesnt exist)");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!folder.isDirectory())
|
if (!folder.isDirectory()) {
|
||||||
{
|
|
||||||
throw new RuntimeException("Cannot open Pack " + folder.getPath() + " (not a directory)");
|
throw new RuntimeException("Cannot open Pack " + folder.getPath() + " (not a directory)");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,6 +90,7 @@ public class IrisPack {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new pack from the input url
|
* Create a new pack from the input url
|
||||||
|
*
|
||||||
* @param sender the sender
|
* @param sender the sender
|
||||||
* @param url the url, or name, or really anything see IrisPackRepository.from(String)
|
* @param url the url, or name, or really anything see IrisPackRepository.from(String)
|
||||||
* @return the iris pack
|
* @return the iris pack
|
||||||
@@ -98,8 +98,7 @@ public class IrisPack {
|
|||||||
*/
|
*/
|
||||||
public static Future<IrisPack> from(VolmitSender sender, String url) throws IrisException {
|
public static Future<IrisPack> from(VolmitSender sender, String url) throws IrisException {
|
||||||
IrisPackRepository repo = IrisPackRepository.from(url);
|
IrisPackRepository repo = IrisPackRepository.from(url);
|
||||||
if(repo == null)
|
if (repo == null) {
|
||||||
{
|
|
||||||
throw new IrisException("Null Repo");
|
throw new IrisException("Null Repo");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,15 +111,16 @@ public class IrisPack {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the name of this pack
|
* Get the name of this pack
|
||||||
|
*
|
||||||
* @return the pack name
|
* @return the pack name
|
||||||
*/
|
*/
|
||||||
public String getName()
|
public String getName() {
|
||||||
{
|
|
||||||
return folder.getName();
|
return folder.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the file path of the workspace file
|
* Get the file path of the workspace file
|
||||||
|
*
|
||||||
* @return the workspace file path
|
* @return the workspace file path
|
||||||
*/
|
*/
|
||||||
public File getWorkspaceFile() {
|
public File getWorkspaceFile() {
|
||||||
@@ -129,6 +129,7 @@ public class IrisPack {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the workspace file
|
* Update the workspace file
|
||||||
|
*
|
||||||
* @return true if it was updated
|
* @return true if it was updated
|
||||||
*/
|
*/
|
||||||
public boolean updateWorkspace() {
|
public boolean updateWorkspace() {
|
||||||
@@ -160,33 +161,32 @@ public class IrisPack {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Install this pack into a world
|
* Install this pack into a world
|
||||||
|
*
|
||||||
* @param world the world to install into (world/iris/pack)
|
* @param world the world to install into (world/iris/pack)
|
||||||
* @return the installed pack
|
* @return the installed pack
|
||||||
*/
|
*/
|
||||||
public IrisPack install(World world) throws IrisException
|
public IrisPack install(World world) throws IrisException {
|
||||||
{
|
|
||||||
return install(new File(world.getWorldFolder(), "iris/pack"));
|
return install(new File(world.getWorldFolder(), "iris/pack"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Install this pack into a world
|
* Install this pack into a world
|
||||||
|
*
|
||||||
* @param world the world to install into (world/iris/pack)
|
* @param world the world to install into (world/iris/pack)
|
||||||
* @return the installed pack
|
* @return the installed pack
|
||||||
*/
|
*/
|
||||||
public IrisPack install(IrisWorld world) throws IrisException
|
public IrisPack install(IrisWorld world) throws IrisException {
|
||||||
{
|
|
||||||
return install(new File(world.worldFolder(), "iris/pack"));
|
return install(new File(world.worldFolder(), "iris/pack"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Install this pack into a world
|
* Install this pack into a world
|
||||||
|
*
|
||||||
* @param folder the folder to install this pack into
|
* @param folder the folder to install this pack into
|
||||||
* @return the installed pack
|
* @return the installed pack
|
||||||
*/
|
*/
|
||||||
public IrisPack install(File folder) throws IrisException
|
public IrisPack install(File folder) throws IrisException {
|
||||||
{
|
if (folder.exists()) {
|
||||||
if(folder.exists())
|
|
||||||
{
|
|
||||||
throw new IrisException("Cannot install new pack because the folder " + folder.getName() + " already exists!");
|
throw new IrisException("Cannot install new pack because the folder " + folder.getName() + " already exists!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,15 +204,14 @@ public class IrisPack {
|
|||||||
/**
|
/**
|
||||||
* Create a new pack using this pack as a template. The new pack will be renamed & have a renamed dimension
|
* Create a new pack using this pack as a template. The new pack will be renamed & have a renamed dimension
|
||||||
* to match it.
|
* to match it.
|
||||||
|
*
|
||||||
* @param newName the new pack name
|
* @param newName the new pack name
|
||||||
* @return the new IrisPack
|
* @return the new IrisPack
|
||||||
*/
|
*/
|
||||||
public IrisPack install(String newName) throws IrisException
|
public IrisPack install(String newName) throws IrisException {
|
||||||
{
|
|
||||||
File newPack = packsPack(newName);
|
File newPack = packsPack(newName);
|
||||||
|
|
||||||
if(newPack.exists())
|
if (newPack.exists()) {
|
||||||
{
|
|
||||||
throw new IrisException("Cannot install new pack because the folder " + newName + " already exists!");
|
throw new IrisException("Cannot install new pack because the folder " + newName + " already exists!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -242,24 +241,25 @@ public class IrisPack {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* The dimension's assumed loadkey
|
* The dimension's assumed loadkey
|
||||||
|
*
|
||||||
* @return getName()
|
* @return getName()
|
||||||
*/
|
*/
|
||||||
public String getDimensionKey()
|
public String getDimensionKey() {
|
||||||
{
|
|
||||||
return getName();
|
return getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the main dimension object
|
* Get the main dimension object
|
||||||
|
*
|
||||||
* @return the dimension (folder name as dim key)
|
* @return the dimension (folder name as dim key)
|
||||||
*/
|
*/
|
||||||
public IrisDimension getDimension()
|
public IrisDimension getDimension() {
|
||||||
{
|
|
||||||
return getData().getDimensionLoader().load(getDimensionKey());
|
return getData().getDimensionLoader().load(getDimensionKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find all files in this pack with the given extension
|
* Find all files in this pack with the given extension
|
||||||
|
*
|
||||||
* @param fileExtension the extension
|
* @param fileExtension the extension
|
||||||
* @return the list of files
|
* @return the list of files
|
||||||
*/
|
*/
|
||||||
@@ -314,6 +314,7 @@ public class IrisPack {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a pack from a repo
|
* Create a pack from a repo
|
||||||
|
*
|
||||||
* @param sender the sender
|
* @param sender the sender
|
||||||
* @param repo the repo
|
* @param repo the repo
|
||||||
* @return the pack
|
* @return the pack
|
||||||
@@ -329,6 +330,7 @@ public class IrisPack {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a blank pack with a given name
|
* Create a blank pack with a given name
|
||||||
|
*
|
||||||
* @param name the name of the pack
|
* @param name the name of the pack
|
||||||
* @return the pack
|
* @return the pack
|
||||||
* @throws IrisException if the pack already exists or another error
|
* @throws IrisException if the pack already exists or another error
|
||||||
@@ -336,8 +338,7 @@ public class IrisPack {
|
|||||||
public static IrisPack blank(String name) throws IrisException {
|
public static IrisPack blank(String name) throws IrisException {
|
||||||
File f = packsPack(name);
|
File f = packsPack(name);
|
||||||
|
|
||||||
if(f.exists())
|
if (f.exists()) {
|
||||||
{
|
|
||||||
throw new IrisException("Already exists");
|
throw new IrisException("Already exists");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -345,7 +346,7 @@ public class IrisPack {
|
|||||||
fd.getParentFile().mkdirs();
|
fd.getParentFile().mkdirs();
|
||||||
try {
|
try {
|
||||||
IO.writeAll(fd, "{\n" +
|
IO.writeAll(fd, "{\n" +
|
||||||
" \"name\": \""+Form.capitalize(name)+"\",\n" +
|
" \"name\": \"" + Form.capitalize(name) + "\",\n" +
|
||||||
" \"version\": 1\n" +
|
" \"version\": 1\n" +
|
||||||
"}\n");
|
"}\n");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -359,11 +360,11 @@ public class IrisPack {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a packs pack folder for a name. Such that overworld would resolve as Iris/packs/overworld
|
* Get a packs pack folder for a name. Such that overworld would resolve as Iris/packs/overworld
|
||||||
|
*
|
||||||
* @param name the name
|
* @param name the name
|
||||||
* @return the file path
|
* @return the file path
|
||||||
*/
|
*/
|
||||||
public static File packsPack(String name)
|
public static File packsPack(String name) {
|
||||||
{
|
|
||||||
return Iris.instance.getDataFolderNoCreate(StudioSVC.WORKSPACE_NAME, name);
|
return Iris.instance.getDataFolderNoCreate(StudioSVC.WORKSPACE_NAME, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ public class IrisPackRepository {
|
|||||||
private String tag = "";
|
private String tag = "";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @param g
|
* @param g
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@@ -127,10 +126,7 @@ public class IrisPackRepository {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
})).execute(sender, whenComplete);
|
})).execute(sender, whenComplete);
|
||||||
}
|
} else {
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sender.sendMessage("Pack already exists!");
|
sender.sendMessage("Pack already exists!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
package com.volmit.iris.core.service;
|
package com.volmit.iris.core.service;
|
||||||
|
|
||||||
import com.volmit.iris.util.collection.KList;
|
|
||||||
import com.volmit.iris.util.plugin.IrisService;
|
import com.volmit.iris.util.plugin.IrisService;
|
||||||
import com.volmit.iris.util.scheduling.J;
|
import com.volmit.iris.util.scheduling.J;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayDeque;
|
||||||
|
import java.util.Deque;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class ObjectSVC implements IrisService {
|
public class ObjectSVC implements IrisService {
|
||||||
|
|
||||||
|
|||||||
@@ -22,9 +22,9 @@ import com.google.gson.Gson;
|
|||||||
import com.google.gson.JsonSyntaxException;
|
import com.google.gson.JsonSyntaxException;
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.core.IrisSettings;
|
import com.volmit.iris.core.IrisSettings;
|
||||||
|
import com.volmit.iris.core.loader.IrisData;
|
||||||
import com.volmit.iris.core.pack.IrisPack;
|
import com.volmit.iris.core.pack.IrisPack;
|
||||||
import com.volmit.iris.core.project.IrisProject;
|
import com.volmit.iris.core.project.IrisProject;
|
||||||
import com.volmit.iris.core.loader.IrisData;
|
|
||||||
import com.volmit.iris.core.tools.IrisToolbelt;
|
import com.volmit.iris.core.tools.IrisToolbelt;
|
||||||
import com.volmit.iris.engine.data.cache.AtomicCache;
|
import com.volmit.iris.engine.data.cache.AtomicCache;
|
||||||
import com.volmit.iris.engine.object.dimensional.IrisDimension;
|
import com.volmit.iris.engine.object.dimensional.IrisDimension;
|
||||||
@@ -60,8 +60,7 @@ public class StudioSVC implements IrisService {
|
|||||||
String pack = IrisSettings.get().getGenerator().getDefaultWorldType();
|
String pack = IrisSettings.get().getGenerator().getDefaultWorldType();
|
||||||
File f = IrisPack.packsPack(pack);
|
File f = IrisPack.packsPack(pack);
|
||||||
|
|
||||||
if(!f.exists())
|
if (!f.exists()) {
|
||||||
{
|
|
||||||
Iris.info("Downloading Default Pack " + pack);
|
Iris.info("Downloading Default Pack " + pack);
|
||||||
downloadSearch(Iris.getSender(), pack, false);
|
downloadSearch(Iris.getSender(), pack, false);
|
||||||
}
|
}
|
||||||
@@ -323,7 +322,8 @@ public class StudioSVC implements IrisService {
|
|||||||
|
|
||||||
public void open(VolmitSender sender, long seed, String dimm) {
|
public void open(VolmitSender sender, long seed, String dimm) {
|
||||||
try {
|
try {
|
||||||
open(sender, seed, dimm, (w) -> {});
|
open(sender, seed, dimm, (w) -> {
|
||||||
|
});
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Iris.reportError(e);
|
Iris.reportError(e);
|
||||||
sender.sendMessage("Error when creating studio world:");
|
sender.sendMessage("Error when creating studio world:");
|
||||||
|
|||||||
@@ -21,11 +21,11 @@ package com.volmit.iris.core.tools;
|
|||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.core.IrisSettings;
|
import com.volmit.iris.core.IrisSettings;
|
||||||
import com.volmit.iris.core.gui.PregeneratorJob;
|
import com.volmit.iris.core.gui.PregeneratorJob;
|
||||||
|
import com.volmit.iris.core.loader.IrisData;
|
||||||
import com.volmit.iris.core.pregenerator.PregenTask;
|
import com.volmit.iris.core.pregenerator.PregenTask;
|
||||||
import com.volmit.iris.core.pregenerator.PregeneratorMethod;
|
import com.volmit.iris.core.pregenerator.PregeneratorMethod;
|
||||||
import com.volmit.iris.core.pregenerator.methods.HeadlessPregenMethod;
|
import com.volmit.iris.core.pregenerator.methods.HeadlessPregenMethod;
|
||||||
import com.volmit.iris.core.pregenerator.methods.HybridPregenMethod;
|
import com.volmit.iris.core.pregenerator.methods.HybridPregenMethod;
|
||||||
import com.volmit.iris.core.loader.IrisData;
|
|
||||||
import com.volmit.iris.core.service.StudioSVC;
|
import com.volmit.iris.core.service.StudioSVC;
|
||||||
import com.volmit.iris.engine.object.dimensional.IrisDimension;
|
import com.volmit.iris.engine.object.dimensional.IrisDimension;
|
||||||
import com.volmit.iris.engine.platform.HeadlessGenerator;
|
import com.volmit.iris.engine.platform.HeadlessGenerator;
|
||||||
|
|||||||
@@ -21,11 +21,9 @@ package com.volmit.iris.engine;
|
|||||||
import com.google.common.util.concurrent.AtomicDouble;
|
import com.google.common.util.concurrent.AtomicDouble;
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.core.loader.IrisData;
|
import com.volmit.iris.core.loader.IrisData;
|
||||||
import com.volmit.iris.engine.actuator.IrisTerrainNormalActuator;
|
|
||||||
import com.volmit.iris.engine.framework.Engine;
|
import com.volmit.iris.engine.framework.Engine;
|
||||||
import com.volmit.iris.engine.object.biome.InferredType;
|
import com.volmit.iris.engine.object.biome.InferredType;
|
||||||
import com.volmit.iris.engine.object.biome.IrisBiome;
|
import com.volmit.iris.engine.object.biome.IrisBiome;
|
||||||
import com.volmit.iris.engine.object.common.CaveResult;
|
|
||||||
import com.volmit.iris.engine.object.decoration.IrisDecorationPart;
|
import com.volmit.iris.engine.object.decoration.IrisDecorationPart;
|
||||||
import com.volmit.iris.engine.object.decoration.IrisDecorator;
|
import com.volmit.iris.engine.object.decoration.IrisDecorator;
|
||||||
import com.volmit.iris.engine.object.feature.IrisFeaturePositional;
|
import com.volmit.iris.engine.object.feature.IrisFeaturePositional;
|
||||||
@@ -44,7 +42,6 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
|||||||
@@ -415,7 +415,7 @@ public class IrisEngine implements Engine {
|
|||||||
getBiomeActuator().actuate(x, z, vbiomes, multicore);
|
getBiomeActuator().actuate(x, z, vbiomes, multicore);
|
||||||
getDecorantActuator().actuate(x, z, blocks, multicore);
|
getDecorantActuator().actuate(x, z, blocks, multicore);
|
||||||
getDepositModifier().modify(x, z, blocks, multicore);
|
getDepositModifier().modify(x, z, blocks, multicore);
|
||||||
getCaveModifier().modify(x >> 4,z >> 4, blocks, multicore);
|
getCaveModifier().modify(x >> 4, z >> 4, blocks, multicore);
|
||||||
getPostModifier().modify(x, z, blocks, multicore);
|
getPostModifier().modify(x, z, blocks, multicore);
|
||||||
getMantle().insertMatter(x >> 4, z >> 4, BlockData.class, blocks, multicore);
|
getMantle().insertMatter(x >> 4, z >> 4, BlockData.class, blocks, multicore);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import com.volmit.iris.engine.mantle.components.MantleFeatureComponent;
|
|||||||
import com.volmit.iris.engine.mantle.components.MantleJigsawComponent;
|
import com.volmit.iris.engine.mantle.components.MantleJigsawComponent;
|
||||||
import com.volmit.iris.engine.mantle.components.MantleObjectComponent;
|
import com.volmit.iris.engine.mantle.components.MantleObjectComponent;
|
||||||
import com.volmit.iris.engine.object.biome.IrisBiome;
|
import com.volmit.iris.engine.object.biome.IrisBiome;
|
||||||
import com.volmit.iris.engine.object.carving.IrisCarving;
|
|
||||||
import com.volmit.iris.engine.object.deposits.IrisDepositGenerator;
|
import com.volmit.iris.engine.object.deposits.IrisDepositGenerator;
|
||||||
import com.volmit.iris.engine.object.feature.IrisFeaturePotential;
|
import com.volmit.iris.engine.object.feature.IrisFeaturePotential;
|
||||||
import com.volmit.iris.engine.object.jigsaw.IrisJigsawStructurePlacement;
|
import com.volmit.iris.engine.object.jigsaw.IrisJigsawStructurePlacement;
|
||||||
@@ -316,13 +315,11 @@ public class IrisEngineMantle implements EngineMantle {
|
|||||||
|
|
||||||
m = Math.max(m, getDimension().getCarving().getMaxRange(getData()));
|
m = Math.max(m, getDimension().getCarving().getMaxRange(getData()));
|
||||||
|
|
||||||
for(IrisRegion i : getDimension().getAllRegions(getEngine()))
|
for (IrisRegion i : getDimension().getAllRegions(getEngine())) {
|
||||||
{
|
|
||||||
m = Math.max(m, i.getCarving().getMaxRange(getData()));
|
m = Math.max(m, i.getCarving().getMaxRange(getData()));
|
||||||
}
|
}
|
||||||
|
|
||||||
for(IrisBiome i : getDimension().getAllBiomes(getEngine()))
|
for (IrisBiome i : getDimension().getAllBiomes(getEngine())) {
|
||||||
{
|
|
||||||
m = Math.max(m, i.getCarving().getMaxRange(getData()));
|
m = Math.max(m, i.getCarving().getMaxRange(getData()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -155,12 +155,9 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
|
|||||||
for (Player i : getEngine().getWorld().realWorld().getPlayers()) {
|
for (Player i : getEngine().getWorld().realWorld().getPlayers()) {
|
||||||
int r = 2;
|
int r = 2;
|
||||||
Chunk c = i.getLocation().getChunk();
|
Chunk c = i.getLocation().getChunk();
|
||||||
for(int x = -r; x <= r; x++)
|
for (int x = -r; x <= r; x++) {
|
||||||
{
|
for (int z = -r; z <= r; z++) {
|
||||||
for(int z = -r; z <= r; z++)
|
if (c.getWorld().isChunkLoaded(c.getX() + x, c.getZ() + z)) {
|
||||||
{
|
|
||||||
if(c.getWorld().isChunkLoaded(c.getX() + x, c.getZ() + z))
|
|
||||||
{
|
|
||||||
getEngine().updateChunk(c.getWorld().getChunkAt(c.getX() + x, c.getZ() + z));
|
getEngine().updateChunk(c.getWorld().getChunkAt(c.getX() + x, c.getZ() + z));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -381,9 +378,8 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
|
|||||||
() -> J.a(() -> spawnIn(e, true), RNG.r.i(5, 200))));
|
() -> J.a(() -> spawnIn(e, true), RNG.r.i(5, 200))));
|
||||||
energy += 0.3;
|
energy += 0.3;
|
||||||
fixEnergy();
|
fixEnergy();
|
||||||
if(!getMantle().hasFlag(e.getX(), e.getZ(), MantleFlag.UPDATE))
|
if (!getMantle().hasFlag(e.getX(), e.getZ(), MantleFlag.UPDATE)) {
|
||||||
{
|
J.a(() -> getEngine().updateChunk(e), 20);
|
||||||
J.a(() -> getEngine().updateChunk(e),20);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ import lombok.Getter;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
import java.util.function.BiPredicate;
|
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
public class IrisDecorantActuator extends EngineAssignedActuator<BlockData> {
|
public class IrisDecorantActuator extends EngineAssignedActuator<BlockData> {
|
||||||
|
|||||||
@@ -70,37 +70,27 @@ public class IrisCeilingDecorator extends IrisEngineDecorator {
|
|||||||
decorator.getBlockDataForTop(biome, getRng(), realX, h, realZ, getData()) :
|
decorator.getBlockDataForTop(biome, getRng(), realX, h, realZ, getData()) :
|
||||||
decorator.getBlockData100(biome, getRng(), realX, h, realZ, getData());
|
decorator.getBlockData100(biome, getRng(), realX, h, realZ, getData());
|
||||||
|
|
||||||
if(bd instanceof PointedDripstone)
|
if (bd instanceof PointedDripstone) {
|
||||||
{
|
|
||||||
PointedDripstone.Thickness th = PointedDripstone.Thickness.BASE;
|
PointedDripstone.Thickness th = PointedDripstone.Thickness.BASE;
|
||||||
|
|
||||||
if(stack == 2)
|
if (stack == 2) {
|
||||||
{
|
|
||||||
th = PointedDripstone.Thickness.FRUSTUM;
|
th = PointedDripstone.Thickness.FRUSTUM;
|
||||||
|
|
||||||
if(i == stack-1)
|
if (i == stack - 1) {
|
||||||
{
|
|
||||||
th = PointedDripstone.Thickness.TIP;
|
th = PointedDripstone.Thickness.TIP;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
if (i == stack - 1) {
|
||||||
else
|
|
||||||
{
|
|
||||||
if(i == stack-1)
|
|
||||||
{
|
|
||||||
th = PointedDripstone.Thickness.TIP;
|
th = PointedDripstone.Thickness.TIP;
|
||||||
}
|
} else if (i == stack - 2) {
|
||||||
|
|
||||||
else if(i == stack-2)
|
|
||||||
{
|
|
||||||
th = PointedDripstone.Thickness.FRUSTUM;
|
th = PointedDripstone.Thickness.FRUSTUM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bd = Material.POINTED_DRIPSTONE.createBlockData();
|
bd = Material.POINTED_DRIPSTONE.createBlockData();
|
||||||
((PointedDripstone)bd).setThickness(th);
|
((PointedDripstone) bd).setThickness(th);
|
||||||
((PointedDripstone)bd).setVerticalDirection(BlockFace.DOWN);
|
((PointedDripstone) bd).setVerticalDirection(BlockFace.DOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
data.set(x, h, z, bd);
|
data.set(x, h, z, bd);
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ import com.volmit.iris.engine.object.decoration.IrisDecorationPart;
|
|||||||
import com.volmit.iris.engine.object.decoration.IrisDecorator;
|
import com.volmit.iris.engine.object.decoration.IrisDecorator;
|
||||||
import com.volmit.iris.util.documentation.BlockCoordinates;
|
import com.volmit.iris.util.documentation.BlockCoordinates;
|
||||||
import com.volmit.iris.util.hunk.Hunk;
|
import com.volmit.iris.util.hunk.Hunk;
|
||||||
import net.minecraft.world.level.block.PointedDripstoneBlock;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.data.Bisected;
|
import org.bukkit.block.data.Bisected;
|
||||||
@@ -112,37 +111,27 @@ public class IrisSurfaceDecorator extends IrisEngineDecorator {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(bd instanceof PointedDripstone)
|
if (bd instanceof PointedDripstone) {
|
||||||
{
|
|
||||||
PointedDripstone.Thickness th = PointedDripstone.Thickness.BASE;
|
PointedDripstone.Thickness th = PointedDripstone.Thickness.BASE;
|
||||||
|
|
||||||
if(stack == 2)
|
if (stack == 2) {
|
||||||
{
|
|
||||||
th = PointedDripstone.Thickness.FRUSTUM;
|
th = PointedDripstone.Thickness.FRUSTUM;
|
||||||
|
|
||||||
if(i == stack-1)
|
if (i == stack - 1) {
|
||||||
{
|
|
||||||
th = PointedDripstone.Thickness.TIP;
|
th = PointedDripstone.Thickness.TIP;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
if (i == stack - 1) {
|
||||||
else
|
|
||||||
{
|
|
||||||
if(i == stack-1)
|
|
||||||
{
|
|
||||||
th = PointedDripstone.Thickness.TIP;
|
th = PointedDripstone.Thickness.TIP;
|
||||||
}
|
} else if (i == stack - 2) {
|
||||||
|
|
||||||
else if(i == stack-2)
|
|
||||||
{
|
|
||||||
th = PointedDripstone.Thickness.FRUSTUM;
|
th = PointedDripstone.Thickness.FRUSTUM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bd = Material.POINTED_DRIPSTONE.createBlockData();
|
bd = Material.POINTED_DRIPSTONE.createBlockData();
|
||||||
((PointedDripstone)bd).setThickness(th);
|
((PointedDripstone) bd).setThickness(th);
|
||||||
((PointedDripstone)bd).setVerticalDirection(BlockFace.UP);
|
((PointedDripstone) bd).setVerticalDirection(BlockFace.UP);
|
||||||
}
|
}
|
||||||
|
|
||||||
data.set(x, height + 1 + i, z, bd);
|
data.set(x, height + 1 + i, z, bd);
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ import com.volmit.iris.util.data.B;
|
|||||||
import com.volmit.iris.util.data.DataProvider;
|
import com.volmit.iris.util.data.DataProvider;
|
||||||
import com.volmit.iris.util.documentation.BlockCoordinates;
|
import com.volmit.iris.util.documentation.BlockCoordinates;
|
||||||
import com.volmit.iris.util.documentation.ChunkCoordinates;
|
import com.volmit.iris.util.documentation.ChunkCoordinates;
|
||||||
import com.volmit.iris.util.format.Form;
|
|
||||||
import com.volmit.iris.util.function.Function2;
|
import com.volmit.iris.util.function.Function2;
|
||||||
import com.volmit.iris.util.hunk.Hunk;
|
import com.volmit.iris.util.hunk.Hunk;
|
||||||
import com.volmit.iris.util.mantle.MantleFlag;
|
import com.volmit.iris.util.mantle.MantleFlag;
|
||||||
@@ -55,7 +54,6 @@ import com.volmit.iris.util.math.M;
|
|||||||
import com.volmit.iris.util.math.RNG;
|
import com.volmit.iris.util.math.RNG;
|
||||||
import com.volmit.iris.util.matter.MatterCavern;
|
import com.volmit.iris.util.matter.MatterCavern;
|
||||||
import com.volmit.iris.util.matter.MatterUpdate;
|
import com.volmit.iris.util.matter.MatterUpdate;
|
||||||
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 com.volmit.iris.util.scheduling.ChronoLatch;
|
import com.volmit.iris.util.scheduling.ChronoLatch;
|
||||||
@@ -63,20 +61,20 @@ import com.volmit.iris.util.scheduling.J;
|
|||||||
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
|
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
|
||||||
import com.volmit.iris.util.stream.ProceduralStream;
|
import com.volmit.iris.util.stream.ProceduralStream;
|
||||||
import io.papermc.lib.PaperLib;
|
import io.papermc.lib.PaperLib;
|
||||||
import org.bukkit.*;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Chunk;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.craftbukkit.v1_17_R1.CraftWorld;
|
|
||||||
import org.bukkit.craftbukkit.v1_17_R1.block.CraftBlock;
|
|
||||||
import org.bukkit.generator.ChunkGenerator;
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.Color;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
@@ -235,28 +233,25 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
|
|||||||
@ChunkCoordinates
|
@ChunkCoordinates
|
||||||
@Override
|
@Override
|
||||||
default void updateChunk(Chunk c) {
|
default void updateChunk(Chunk c) {
|
||||||
if(c.getWorld().isChunkLoaded(c.getX() + 1, c.getZ() + 1)
|
if (c.getWorld().isChunkLoaded(c.getX() + 1, c.getZ() + 1)
|
||||||
&& c.getWorld().isChunkLoaded(c.getX(), c.getZ() + 1)
|
&& c.getWorld().isChunkLoaded(c.getX(), c.getZ() + 1)
|
||||||
&& c.getWorld().isChunkLoaded(c.getX() + 1, c.getZ())
|
&& c.getWorld().isChunkLoaded(c.getX() + 1, c.getZ())
|
||||||
&& c.getWorld().isChunkLoaded(c.getX() - 1, c.getZ() - 1)
|
&& c.getWorld().isChunkLoaded(c.getX() - 1, c.getZ() - 1)
|
||||||
&& c.getWorld().isChunkLoaded(c.getX(), c.getZ() - 1)
|
&& c.getWorld().isChunkLoaded(c.getX(), c.getZ() - 1)
|
||||||
&& c.getWorld().isChunkLoaded(c.getX() - 1, c.getZ())
|
&& c.getWorld().isChunkLoaded(c.getX() - 1, c.getZ())
|
||||||
&& c.getWorld().isChunkLoaded(c.getX() + 1, c.getZ() - 1)
|
&& c.getWorld().isChunkLoaded(c.getX() + 1, c.getZ() - 1)
|
||||||
&& c.getWorld().isChunkLoaded(c.getX() - 1, c.getZ() + 1))
|
&& c.getWorld().isChunkLoaded(c.getX() - 1, c.getZ() + 1)) {
|
||||||
{
|
|
||||||
getMantle().getMantle().raiseFlag(c.getX(), c.getZ(), MantleFlag.UPDATE, () -> J.s(() -> {
|
getMantle().getMantle().raiseFlag(c.getX(), c.getZ(), MantleFlag.UPDATE, () -> J.s(() -> {
|
||||||
PrecisionStopwatch p = PrecisionStopwatch.start();
|
PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||||
KMap<Long, Integer> updates = new KMap<>();
|
KMap<Long, Integer> updates = new KMap<>();
|
||||||
RNG r = new RNG(Cache.key(c.getX(), c.getZ()));
|
RNG r = new RNG(Cache.key(c.getX(), c.getZ()));
|
||||||
getMantle().getMantle().iterateChunk(c.getX(), c.getZ(), MatterCavern.class, (x, y, z, v) -> {
|
getMantle().getMantle().iterateChunk(c.getX(), c.getZ(), MatterCavern.class, (x, y, z, v) -> {
|
||||||
if(B.isAir(c.getBlock(x & 15, y, z & 15).getBlockData()))
|
if (B.isAir(c.getBlock(x & 15, y, z & 15).getBlockData())) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
updates.compute(Cache.key(x & 15, z & 15), (k,vv) -> {
|
updates.compute(Cache.key(x & 15, z & 15), (k, vv) -> {
|
||||||
if(vv != null)
|
if (vv != null) {
|
||||||
{
|
|
||||||
return Math.max(vv, y);
|
return Math.max(vv, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,7 +259,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
updates.forEach((k,v) -> update(Cache.keyX(k), v, Cache.keyZ(k), c, r));
|
updates.forEach((k, v) -> update(Cache.keyX(k), v, Cache.keyZ(k), c, r));
|
||||||
getMantle().getMantle().iterateChunk(c.getX(), c.getZ(), MatterUpdate.class, (x, y, z, v) -> {
|
getMantle().getMantle().iterateChunk(c.getX(), c.getZ(), MatterUpdate.class, (x, y, z, v) -> {
|
||||||
if (v != null && v.isUpdate()) {
|
if (v != null && v.isUpdate()) {
|
||||||
int vx = x & 15;
|
int vx = x & 15;
|
||||||
@@ -322,10 +317,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
|
|||||||
Iris.reportError(e);
|
Iris.reportError(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
block.setType(Material.AIR, false);
|
block.setType(Material.AIR, false);
|
||||||
block.setBlockData(data, true);
|
block.setBlockData(data, true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,8 +84,7 @@ public interface EngineMantle extends IObjectPlacer {
|
|||||||
return getComplex().getTrueHeightStream().get(x, z);
|
return getComplex().getTrueHeightStream().get(x, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
default boolean isCarved(int x, int h, int z)
|
default boolean isCarved(int x, int h, int z) {
|
||||||
{
|
|
||||||
return getMantle().get(x, h, z, MatterCavern.class) != null;
|
return getMantle().get(x, h, z, MatterCavern.class) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -248,8 +247,7 @@ public interface EngineMantle extends IObjectPlacer {
|
|||||||
default void dropCavernBlock(int x, int y, int z) {
|
default void dropCavernBlock(int x, int y, int z) {
|
||||||
Matter matter = getMantle().getChunk(x & 15, z & 15).get(y & 15);
|
Matter matter = getMantle().getChunk(x & 15, z & 15).get(y & 15);
|
||||||
|
|
||||||
if(matter != null)
|
if (matter != null) {
|
||||||
{
|
|
||||||
matter.slice(MatterCavern.class).set(x & 15, y & 15, z & 15, null);
|
matter.slice(MatterCavern.class).set(x & 15, y & 15, z & 15, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,22 +26,16 @@ import com.volmit.iris.engine.object.basic.IrisPosition;
|
|||||||
import com.volmit.iris.engine.object.common.IObjectPlacer;
|
import com.volmit.iris.engine.object.common.IObjectPlacer;
|
||||||
import com.volmit.iris.engine.object.feature.IrisFeaturePositional;
|
import com.volmit.iris.engine.object.feature.IrisFeaturePositional;
|
||||||
import com.volmit.iris.engine.object.tile.TileData;
|
import com.volmit.iris.engine.object.tile.TileData;
|
||||||
import com.volmit.iris.util.collection.KList;
|
|
||||||
import com.volmit.iris.util.collection.KMap;
|
import com.volmit.iris.util.collection.KMap;
|
||||||
import com.volmit.iris.util.collection.KSet;
|
import com.volmit.iris.util.collection.KSet;
|
||||||
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.math.INode;
|
|
||||||
import com.volmit.iris.util.math.KochanekBartelsInterpolation;
|
|
||||||
import com.volmit.iris.util.math.M;
|
|
||||||
import com.volmit.iris.util.math.PathInterpolation;
|
|
||||||
import com.volmit.iris.util.matter.Matter;
|
import com.volmit.iris.util.matter.Matter;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.bukkit.block.TileState;
|
import org.bukkit.block.TileState;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -150,6 +144,7 @@ public class MantleWriter implements IObjectPlacer {
|
|||||||
public void setTile(int xx, int yy, int zz, TileData<? extends TileState> tile) {
|
public void setTile(int xx, int yy, int zz, TileData<? extends TileState> tile) {
|
||||||
getEngineMantle().setTile(xx, yy, zz, tile);
|
getEngineMantle().setTile(xx, yy, zz, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a sphere into the mantle
|
* Set a sphere into the mantle
|
||||||
*
|
*
|
||||||
@@ -534,8 +529,7 @@ public class MantleWriter implements IObjectPlacer {
|
|||||||
return isWithin(pos.getBlockX(), pos.getBlockY(), pos.getBlockZ());
|
return isWithin(pos.getBlockX(), pos.getBlockY(), pos.getBlockZ());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isWithin(int x, int y, int z)
|
public boolean isWithin(int x, int y, int z) {
|
||||||
{
|
|
||||||
int cx = x >> 4;
|
int cx = x >> 4;
|
||||||
int cz = z >> 4;
|
int cz = z >> 4;
|
||||||
|
|
||||||
@@ -543,11 +537,7 @@ public class MantleWriter implements IObjectPlacer {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cx >= this.x - radius && cx <= this.x + radius
|
return cx >= this.x - radius && cx <= this.x + radius
|
||||||
&& cz >= this.z - radius && cz <= this.z + radius) {
|
&& cz >= this.z - radius && cz <= this.z + radius;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,10 +24,7 @@ import com.volmit.iris.engine.mantle.IrisMantleComponent;
|
|||||||
import com.volmit.iris.engine.mantle.MantleWriter;
|
import com.volmit.iris.engine.mantle.MantleWriter;
|
||||||
import com.volmit.iris.engine.object.biome.IrisBiome;
|
import com.volmit.iris.engine.object.biome.IrisBiome;
|
||||||
import com.volmit.iris.engine.object.carving.IrisCarving;
|
import com.volmit.iris.engine.object.carving.IrisCarving;
|
||||||
import com.volmit.iris.engine.object.feature.IrisFeaturePositional;
|
|
||||||
import com.volmit.iris.engine.object.feature.IrisFeaturePotential;
|
|
||||||
import com.volmit.iris.engine.object.regional.IrisRegion;
|
import com.volmit.iris.engine.object.regional.IrisRegion;
|
||||||
import com.volmit.iris.util.collection.KList;
|
|
||||||
import com.volmit.iris.util.documentation.ChunkCoordinates;
|
import com.volmit.iris.util.documentation.ChunkCoordinates;
|
||||||
import com.volmit.iris.util.mantle.MantleFlag;
|
import com.volmit.iris.util.mantle.MantleFlag;
|
||||||
import com.volmit.iris.util.math.RNG;
|
import com.volmit.iris.util.math.RNG;
|
||||||
|
|||||||
@@ -64,8 +64,7 @@ public class MantleFeatureComponent extends IrisMantleComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void placeZone(MantleWriter writer, RNG rng, int cx, int cz, IrisFeaturePotential i) {
|
private void placeZone(MantleWriter writer, RNG rng, int cx, int cz, IrisFeaturePotential i) {
|
||||||
if(i.hasZone(rng, cx, cz))
|
if (i.hasZone(rng, cx, cz)) {
|
||||||
{
|
|
||||||
int x = (cx << 4) + rng.nextInt(16);
|
int x = (cx << 4) + rng.nextInt(16);
|
||||||
int z = (cz << 4) + rng.nextInt(16);
|
int z = (cz << 4) + rng.nextInt(16);
|
||||||
writer.setData(x, 0, z, new IrisFeaturePositional(x, z, i.getZone()));
|
writer.setData(x, 0, z, new IrisFeaturePositional(x, z, i.getZone()));
|
||||||
|
|||||||
@@ -18,7 +18,6 @@
|
|||||||
|
|
||||||
package com.volmit.iris.engine.modifier;
|
package com.volmit.iris.engine.modifier;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.engine.IrisEngine;
|
import com.volmit.iris.engine.IrisEngine;
|
||||||
import com.volmit.iris.engine.actuator.IrisDecorantActuator;
|
import com.volmit.iris.engine.actuator.IrisDecorantActuator;
|
||||||
import com.volmit.iris.engine.data.cache.Cache;
|
import com.volmit.iris.engine.data.cache.Cache;
|
||||||
@@ -32,14 +31,11 @@ import com.volmit.iris.engine.object.decoration.IrisDecorator;
|
|||||||
import com.volmit.iris.util.collection.KList;
|
import com.volmit.iris.util.collection.KList;
|
||||||
import com.volmit.iris.util.collection.KMap;
|
import com.volmit.iris.util.collection.KMap;
|
||||||
import com.volmit.iris.util.data.B;
|
import com.volmit.iris.util.data.B;
|
||||||
import com.volmit.iris.util.format.Form;
|
|
||||||
import com.volmit.iris.util.hunk.Hunk;
|
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.math.M;
|
|
||||||
import com.volmit.iris.util.math.RNG;
|
import com.volmit.iris.util.math.RNG;
|
||||||
import com.volmit.iris.util.matter.MatterCavern;
|
import com.volmit.iris.util.matter.MatterCavern;
|
||||||
import com.volmit.iris.util.scheduling.J;
|
|
||||||
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
|
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@@ -66,8 +62,7 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
KMap<IrisPosition, MatterCavern> walls = new KMap<>();
|
KMap<IrisPosition, MatterCavern> walls = new KMap<>();
|
||||||
|
|
||||||
mc.iterate(MatterCavern.class, (xx, yy, zz, c) -> {
|
mc.iterate(MatterCavern.class, (xx, yy, zz, c) -> {
|
||||||
if(yy > 256 || yy < 0)
|
if (yy > 256 || yy < 0) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,27 +70,29 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
int rz = zz & 15;
|
int rz = zz & 15;
|
||||||
BlockData current = output.get(rx, yy, rz);
|
BlockData current = output.get(rx, yy, rz);
|
||||||
|
|
||||||
if(B.isFluid(current))
|
if (B.isFluid(current)) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
positions.compute(Cache.key(rx, rz), (k,v) -> Objects.requireNonNullElseGet(v, (Supplier<KList<Integer>>) KList::new).qadd(yy));
|
positions.compute(Cache.key(rx, rz), (k, v) -> Objects.requireNonNullElseGet(v, (Supplier<KList<Integer>>) KList::new).qadd(yy));
|
||||||
|
|
||||||
if(rz < 15 && mantle.get(xx, yy, zz + 1, MatterCavern.class) == null)
|
if (rz < 15 && mantle.get(xx, yy, zz + 1, MatterCavern.class) == null) {
|
||||||
{walls.put(new IrisPosition(rx, yy, rz + 1), c);}
|
walls.put(new IrisPosition(rx, yy, rz + 1), c);
|
||||||
|
}
|
||||||
|
|
||||||
if(rx < 15 && mantle.get(xx + 1, yy, zz, MatterCavern.class) == null)
|
if (rx < 15 && mantle.get(xx + 1, yy, zz, MatterCavern.class) == null) {
|
||||||
{walls.put(new IrisPosition(rx + 1, yy, rz), c);}
|
walls.put(new IrisPosition(rx + 1, yy, rz), c);
|
||||||
|
}
|
||||||
|
|
||||||
if(rz > 0 && mantle.get(xx, yy, zz - 1, MatterCavern.class) == null)
|
if (rz > 0 && mantle.get(xx, yy, zz - 1, MatterCavern.class) == null) {
|
||||||
{walls.put(new IrisPosition(rx, yy, rz - 1), c);}
|
walls.put(new IrisPosition(rx, yy, rz - 1), c);
|
||||||
|
}
|
||||||
|
|
||||||
if(rx > 0 && mantle.get(xx - 1, yy, zz, MatterCavern.class) == null)
|
if (rx > 0 && mantle.get(xx - 1, yy, zz, MatterCavern.class) == null) {
|
||||||
{walls.put(new IrisPosition(rx - 1, yy, rz), c);}
|
walls.put(new IrisPosition(rx - 1, yy, rz), c);
|
||||||
|
}
|
||||||
|
|
||||||
if(current.getMaterial().isAir())
|
if (current.getMaterial().isAir()) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,20 +104,18 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
? getEngine().getCaveBiome(i.getX() + (x << 4), i.getZ() + (z << 4))
|
? getEngine().getCaveBiome(i.getX() + (x << 4), i.getZ() + (z << 4))
|
||||||
: getEngine().getData().getBiomeLoader().load(v.getCustomBiome());
|
: getEngine().getData().getBiomeLoader().load(v.getCustomBiome());
|
||||||
|
|
||||||
if(biome != null)
|
if (biome != null) {
|
||||||
{
|
|
||||||
biome.setInferredType(InferredType.CAVE);
|
biome.setInferredType(InferredType.CAVE);
|
||||||
BlockData d = biome.getWall().get(rng, i.getX() + (x << 4), i.getY(), i.getZ() + (z << 4), getData());
|
BlockData d = biome.getWall().get(rng, i.getX() + (x << 4), i.getY(), i.getZ() + (z << 4), getData());
|
||||||
|
|
||||||
if(d != null && B.isSolid(output.get(i.getX(), i.getY(), i.getZ()))) {
|
if (d != null && B.isSolid(output.get(i.getX(), i.getY(), i.getZ()))) {
|
||||||
output.set(i.getX(), i.getY(), i.getZ(), d);
|
output.set(i.getX(), i.getY(), i.getZ(), d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
positions.forEach((k, v) -> {
|
positions.forEach((k, v) -> {
|
||||||
if(v.isEmpty())
|
if (v.isEmpty()) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,19 +126,15 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
zone.setFloor(v.get(0));
|
zone.setFloor(v.get(0));
|
||||||
int buf = v.get(0) - 1;
|
int buf = v.get(0) - 1;
|
||||||
|
|
||||||
for(Integer i : v) {
|
for (Integer i : v) {
|
||||||
if (i < 0 || i > 255) {
|
if (i < 0 || i > 255) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == buf + 1)
|
if (i == buf + 1) {
|
||||||
{
|
|
||||||
buf = i;
|
buf = i;
|
||||||
zone.ceiling = buf;
|
zone.ceiling = buf;
|
||||||
}
|
} else if (zone.isValid()) {
|
||||||
|
|
||||||
else if(zone.isValid())
|
|
||||||
{
|
|
||||||
processZone(output, mc, zone, rx, rz, rx + (x << 4), rz + (z << 4));
|
processZone(output, mc, zone, rx, rz, rx + (x << 4), rz + (z << 4));
|
||||||
zone = new CaveZone();
|
zone = new CaveZone();
|
||||||
zone.setFloor(i);
|
zone.setFloor(i);
|
||||||
@@ -151,8 +142,7 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(zone.isValid())
|
if (zone.isValid()) {
|
||||||
{
|
|
||||||
processZone(output, mc, zone, rx, rz, rx + (x << 4), rz + (z << 4));
|
processZone(output, mc, zone, rx, rz, rx + (x << 4), rz + (z << 4));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -167,13 +157,11 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
int thickness = zone.airThickness();
|
int thickness = zone.airThickness();
|
||||||
String customBiome = "";
|
String customBiome = "";
|
||||||
|
|
||||||
for(int i = zone.floor; i <= zone.ceiling; i++)
|
for (int i = zone.floor; i <= zone.ceiling; i++) {
|
||||||
{
|
|
||||||
MatterCavern cavernData = (MatterCavern) mc.getOrCreate(i >> 4).slice(MatterCavern.class)
|
MatterCavern cavernData = (MatterCavern) mc.getOrCreate(i >> 4).slice(MatterCavern.class)
|
||||||
.get(rx, i & 15, rz);
|
.get(rx, i & 15, rz);
|
||||||
|
|
||||||
if(cavernData != null && !cavernData.getCustomBiome().isEmpty())
|
if (cavernData != null && !cavernData.getCustomBiome().isEmpty()) {
|
||||||
{
|
|
||||||
customBiome = cavernData.getCustomBiome();
|
customBiome = cavernData.getCustomBiome();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -183,38 +171,33 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
? getEngine().getCaveBiome(xx, zz)
|
? getEngine().getCaveBiome(xx, zz)
|
||||||
: getEngine().getData().getBiomeLoader().load(customBiome);
|
: getEngine().getData().getBiomeLoader().load(customBiome);
|
||||||
|
|
||||||
if(biome == null)
|
if (biome == null) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
biome.setInferredType(InferredType.CAVE);
|
biome.setInferredType(InferredType.CAVE);
|
||||||
|
|
||||||
IrisDecorantActuator actuator = (IrisDecorantActuator) ((IrisEngine)getEngine()).getDecorantActuator();
|
IrisDecorantActuator actuator = (IrisDecorantActuator) ((IrisEngine) getEngine()).getDecorantActuator();
|
||||||
for(IrisDecorator i : biome.getDecorators()) {
|
for (IrisDecorator i : biome.getDecorators()) {
|
||||||
if (i.getPartOf().equals(IrisDecorationPart.NONE) && B.isSolid(output.get(rx, zone.getFloor()-1, rz))) {
|
if (i.getPartOf().equals(IrisDecorationPart.NONE) && B.isSolid(output.get(rx, zone.getFloor() - 1, rz))) {
|
||||||
actuator.getSurfaceDecorator().decorate(rx, rz, xx, xx, xx, zz, zz, zz, output, biome, zone.getFloor() - 1, zone.airThickness());
|
actuator.getSurfaceDecorator().decorate(rx, rz, xx, xx, xx, zz, zz, zz, output, biome, zone.getFloor() - 1, zone.airThickness());
|
||||||
} else if (i.getPartOf().equals(IrisDecorationPart.CEILING) && B.isSolid(output.get(rx, zone.getCeiling()+1, rz))) {
|
} else if (i.getPartOf().equals(IrisDecorationPart.CEILING) && B.isSolid(output.get(rx, zone.getCeiling() + 1, rz))) {
|
||||||
actuator.getCeilingDecorator().decorate(rx, rz, xx, xx, xx, zz, zz, zz, output, biome, zone.getCeiling(), zone.airThickness());
|
actuator.getCeilingDecorator().decorate(rx, rz, xx, xx, xx, zz, zz, zz, output, biome, zone.getCeiling(), zone.airThickness());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
KList<BlockData> blocks = biome.generateLayers(getDimension(), xx, zz, rng, 3, zone.floor, getData(), getComplex());
|
KList<BlockData> blocks = biome.generateLayers(getDimension(), xx, zz, rng, 3, zone.floor, getData(), getComplex());
|
||||||
|
|
||||||
for(int i = 0; i < zone.floor-1; i++)
|
for (int i = 0; i < zone.floor - 1; i++) {
|
||||||
{
|
if (!blocks.hasIndex(i)) {
|
||||||
if(!blocks.hasIndex(i))
|
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!B.isSolid(output.get(rx, zone.floor - i - 1, rz)))
|
if (!B.isSolid(output.get(rx, zone.floor - i - 1, rz))) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(B.isOre(output.get(rx, zone.floor - i - 1, rz)))
|
if (B.isOre(output.get(rx, zone.floor - i - 1, rz))) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,20 +206,16 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
|
|
||||||
blocks = biome.generateCeilingLayers(getDimension(), xx, zz, rng, 3, zone.ceiling, getData(), getComplex());
|
blocks = biome.generateCeilingLayers(getDimension(), xx, zz, rng, 3, zone.ceiling, getData(), getComplex());
|
||||||
|
|
||||||
for(int i = 0; i < zone.ceiling+1; i++)
|
for (int i = 0; i < zone.ceiling + 1; i++) {
|
||||||
{
|
if (!blocks.hasIndex(i)) {
|
||||||
if(!blocks.hasIndex(i))
|
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!B.isSolid(output.get(rx, zone.ceiling + i + 1, rz)))
|
if (!B.isSolid(output.get(rx, zone.ceiling + i + 1, rz))) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(B.isOre(output.get(rx, zone.ceiling + i + 1, rz)))
|
if (B.isOre(output.get(rx, zone.ceiling + i + 1, rz))) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,23 +224,19 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public static class CaveZone
|
public static class CaveZone {
|
||||||
{
|
|
||||||
private int ceiling = -1;
|
private int ceiling = -1;
|
||||||
private int floor = -1;
|
private int floor = -1;
|
||||||
|
|
||||||
public int airThickness()
|
public int airThickness() {
|
||||||
{
|
|
||||||
return (ceiling - floor) - 1;
|
return (ceiling - floor) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isValid()
|
public boolean isValid() {
|
||||||
{
|
|
||||||
return floor < ceiling && ceiling - floor >= 1 && floor >= 0 && ceiling <= 255 && airThickness() > 0;
|
return floor < ceiling && ceiling - floor >= 1 && floor >= 0 && ceiling <= 255 && airThickness() > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString()
|
public String toString() {
|
||||||
{
|
|
||||||
return floor + "-" + ceiling;
|
return floor + "-" + ceiling;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,11 +18,9 @@
|
|||||||
|
|
||||||
package com.volmit.iris.engine.modifier;
|
package com.volmit.iris.engine.modifier;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.engine.framework.Engine;
|
import com.volmit.iris.engine.framework.Engine;
|
||||||
import com.volmit.iris.engine.framework.EngineAssignedModifier;
|
import com.volmit.iris.engine.framework.EngineAssignedModifier;
|
||||||
import com.volmit.iris.engine.object.biome.IrisBiome;
|
import com.volmit.iris.engine.object.biome.IrisBiome;
|
||||||
import com.volmit.iris.engine.object.common.CaveResult;
|
|
||||||
import com.volmit.iris.util.data.B;
|
import com.volmit.iris.util.data.B;
|
||||||
import com.volmit.iris.util.hunk.Hunk;
|
import com.volmit.iris.util.hunk.Hunk;
|
||||||
import com.volmit.iris.util.math.RNG;
|
import com.volmit.iris.util.math.RNG;
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ public class IrisPosition {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLongerThan(IrisPosition s, int maxLength) {
|
public boolean isLongerThan(IrisPosition s, int maxLength) {
|
||||||
return Math.abs(Math.pow(s.x - x,2) + Math.pow(s.y - y,2) + Math.pow(s.z - z,2)) > maxLength * maxLength;
|
return Math.abs(Math.pow(s.x - x, 2) + Math.pow(s.y - y, 2) + Math.pow(s.z - z, 2)) > maxLength * maxLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector toVector() {
|
public Vector toVector() {
|
||||||
|
|||||||
@@ -59,50 +59,37 @@ public class IrisCarving {
|
|||||||
|
|
||||||
@BlockCoordinates
|
@BlockCoordinates
|
||||||
public void doCarving(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) {
|
public void doCarving(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) {
|
||||||
if(caves.isNotEmpty())
|
if (caves.isNotEmpty()) {
|
||||||
{
|
for (IrisCavePlacer i : caves) {
|
||||||
for(IrisCavePlacer i : caves)
|
|
||||||
{
|
|
||||||
i.generateCave(writer, rng, engine, x, y, z);
|
i.generateCave(writer, rng, engine, x, y, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ravines.isNotEmpty())
|
if (ravines.isNotEmpty()) {
|
||||||
{
|
for (IrisRavinePlacer i : ravines) {
|
||||||
for(IrisRavinePlacer i : ravines)
|
|
||||||
{
|
|
||||||
i.generateRavine(writer, rng, engine, x, y, z);
|
i.generateRavine(writer, rng, engine, x, y, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(spheres.isNotEmpty())
|
if (spheres.isNotEmpty()) {
|
||||||
{
|
for (IrisSphere i : spheres) {
|
||||||
for(IrisSphere i : spheres)
|
if (rng.nextInt(i.getRarity()) == 0) {
|
||||||
{
|
|
||||||
if(rng.nextInt(i.getRarity()) == 0)
|
|
||||||
{
|
|
||||||
i.generate(rng, engine, writer, x, y, z);
|
i.generate(rng, engine, writer, x, y, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(elipsoids.isNotEmpty())
|
if (elipsoids.isNotEmpty()) {
|
||||||
{
|
for (IrisElipsoid i : elipsoids) {
|
||||||
for(IrisElipsoid i : elipsoids)
|
if (rng.nextInt(i.getRarity()) == 0) {
|
||||||
{
|
|
||||||
if(rng.nextInt(i.getRarity()) == 0)
|
|
||||||
{
|
|
||||||
i.generate(rng, engine, writer, x, y, z);
|
i.generate(rng, engine, writer, x, y, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(pyramids.isNotEmpty())
|
if (pyramids.isNotEmpty()) {
|
||||||
{
|
for (IrisPyramid i : pyramids) {
|
||||||
for(IrisPyramid i : pyramids)
|
if (rng.nextInt(i.getRarity()) == 0) {
|
||||||
{
|
|
||||||
if(rng.nextInt(i.getRarity()) == 0)
|
|
||||||
{
|
|
||||||
i.generate(rng, engine, writer, x, y, z);
|
i.generate(rng, engine, writer, x, y, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -112,23 +99,19 @@ public class IrisCarving {
|
|||||||
public int getMaxRange(IrisData data) {
|
public int getMaxRange(IrisData data) {
|
||||||
int max = 0;
|
int max = 0;
|
||||||
|
|
||||||
for(IrisCavePlacer i : caves)
|
for (IrisCavePlacer i : caves) {
|
||||||
{
|
|
||||||
max = Math.max(max, i.getSize(data));
|
max = Math.max(max, i.getSize(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(elipsoids.isNotEmpty())
|
if (elipsoids.isNotEmpty()) {
|
||||||
{
|
|
||||||
max = (int) Math.max(elipsoids.stream().mapToDouble(IrisElipsoid::maxSize).max().getAsDouble(), max);
|
max = (int) Math.max(elipsoids.stream().mapToDouble(IrisElipsoid::maxSize).max().getAsDouble(), max);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(spheres.isNotEmpty())
|
if (spheres.isNotEmpty()) {
|
||||||
{
|
|
||||||
max = (int) Math.max(spheres.stream().mapToDouble(IrisSphere::maxSize).max().getAsDouble(), max);
|
max = (int) Math.max(spheres.stream().mapToDouble(IrisSphere::maxSize).max().getAsDouble(), max);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(pyramids.isNotEmpty())
|
if (pyramids.isNotEmpty()) {
|
||||||
{
|
|
||||||
max = (int) Math.max(pyramids.stream().mapToDouble(IrisPyramid::maxSize).max().getAsDouble(), max);
|
max = (int) Math.max(pyramids.stream().mapToDouble(IrisPyramid::maxSize).max().getAsDouble(), max);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,6 @@
|
|||||||
|
|
||||||
package com.volmit.iris.engine.object.carving;
|
package com.volmit.iris.engine.object.carving;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.core.loader.IrisData;
|
import com.volmit.iris.core.loader.IrisData;
|
||||||
import com.volmit.iris.core.loader.IrisRegistrant;
|
import com.volmit.iris.core.loader.IrisRegistrant;
|
||||||
import com.volmit.iris.engine.data.cache.AtomicCache;
|
import com.volmit.iris.engine.data.cache.AtomicCache;
|
||||||
@@ -26,14 +25,9 @@ import com.volmit.iris.engine.framework.Engine;
|
|||||||
import com.volmit.iris.engine.mantle.MantleWriter;
|
import com.volmit.iris.engine.mantle.MantleWriter;
|
||||||
import com.volmit.iris.engine.object.annotations.Desc;
|
import com.volmit.iris.engine.object.annotations.Desc;
|
||||||
import com.volmit.iris.engine.object.annotations.RegistryListResource;
|
import com.volmit.iris.engine.object.annotations.RegistryListResource;
|
||||||
import com.volmit.iris.engine.object.basic.IrisPosition;
|
|
||||||
import com.volmit.iris.engine.object.basic.IrisRange;
|
import com.volmit.iris.engine.object.basic.IrisRange;
|
||||||
import com.volmit.iris.engine.object.biome.IrisBiome;
|
import com.volmit.iris.engine.object.biome.IrisBiome;
|
||||||
import com.volmit.iris.engine.object.block.IrisBlockData;
|
|
||||||
import com.volmit.iris.engine.object.noise.IrisWorm;
|
import com.volmit.iris.engine.object.noise.IrisWorm;
|
||||||
import com.volmit.iris.engine.object.objects.IrisObjectLimit;
|
|
||||||
import com.volmit.iris.util.collection.KList;
|
|
||||||
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.MatterCavern;
|
import com.volmit.iris.util.matter.MatterCavern;
|
||||||
@@ -44,9 +38,6 @@ 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 java.util.List;
|
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Accessors(chain = true)
|
@Accessors(chain = true)
|
||||||
|
|||||||
@@ -74,8 +74,7 @@ public class IrisCavePlacer implements IRare {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(rng.nextInt(rarity) != 0)
|
if (rng.nextInt(rarity) != 0) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,20 +87,15 @@ public class IrisCavePlacer implements IRare {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(y == -1)
|
if (y == -1) {
|
||||||
{
|
int h = (int) caveStartHeight.get(rng, x, z, data);
|
||||||
int h = (int) caveStartHeight.get(rng,x, z,data);
|
|
||||||
int ma = breakSurface ? h : (int) (engine.getComplex().getHeightStream().get(x, z) - 9);
|
int ma = breakSurface ? h : (int) (engine.getComplex().getHeightStream().get(x, z) - 9);
|
||||||
y = Math.min(h, ma);
|
y = Math.min(h, ma);
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
cave.generate(mantle, rng, engine, x + rng.nextInt(15), y, z + rng.nextInt(15));
|
cave.generate(mantle, rng, engine, x + rng.nextInt(15), y, z + rng.nextInt(15));
|
||||||
}
|
} catch (Throwable e) {
|
||||||
|
|
||||||
catch(Throwable e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
fail.set(true);
|
fail.set(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import com.volmit.iris.engine.object.annotations.MinNumber;
|
|||||||
import com.volmit.iris.engine.object.annotations.RegistryListResource;
|
import com.volmit.iris.engine.object.annotations.RegistryListResource;
|
||||||
import com.volmit.iris.engine.object.annotations.Required;
|
import com.volmit.iris.engine.object.annotations.Required;
|
||||||
import com.volmit.iris.engine.object.biome.IrisBiome;
|
import com.volmit.iris.engine.object.biome.IrisBiome;
|
||||||
import com.volmit.iris.engine.object.block.IrisBlockData;
|
|
||||||
import com.volmit.iris.engine.object.common.IRare;
|
import com.volmit.iris.engine.object.common.IRare;
|
||||||
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
|
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
|
||||||
import com.volmit.iris.engine.object.noise.IrisStyledRange;
|
import com.volmit.iris.engine.object.noise.IrisStyledRange;
|
||||||
@@ -38,8 +37,7 @@ import lombok.Data;
|
|||||||
|
|
||||||
@Desc("Represents an procedural eliptical shape")
|
@Desc("Represents an procedural eliptical shape")
|
||||||
@Data
|
@Data
|
||||||
public class IrisElipsoid implements IRare
|
public class IrisElipsoid implements IRare {
|
||||||
{
|
|
||||||
@Required
|
@Required
|
||||||
@Desc("Typically a 1 in RARITY on a per fork basis")
|
@Desc("Typically a 1 in RARITY on a per fork basis")
|
||||||
@MinNumber(1)
|
@MinNumber(1)
|
||||||
@@ -60,8 +58,7 @@ public class IrisElipsoid implements IRare
|
|||||||
private transient final AtomicCache<MatterCavern> matterNodeCache = new AtomicCache<>();
|
private transient final AtomicCache<MatterCavern> matterNodeCache = new AtomicCache<>();
|
||||||
|
|
||||||
@SuppressWarnings("SuspiciousNameCombination")
|
@SuppressWarnings("SuspiciousNameCombination")
|
||||||
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.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()),
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import com.volmit.iris.engine.object.annotations.MinNumber;
|
|||||||
import com.volmit.iris.engine.object.annotations.RegistryListResource;
|
import com.volmit.iris.engine.object.annotations.RegistryListResource;
|
||||||
import com.volmit.iris.engine.object.annotations.Required;
|
import com.volmit.iris.engine.object.annotations.Required;
|
||||||
import com.volmit.iris.engine.object.biome.IrisBiome;
|
import com.volmit.iris.engine.object.biome.IrisBiome;
|
||||||
import com.volmit.iris.engine.object.block.IrisBlockData;
|
|
||||||
import com.volmit.iris.engine.object.common.IRare;
|
import com.volmit.iris.engine.object.common.IRare;
|
||||||
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
|
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
|
||||||
import com.volmit.iris.engine.object.noise.IrisStyledRange;
|
import com.volmit.iris.engine.object.noise.IrisStyledRange;
|
||||||
@@ -38,8 +37,7 @@ import lombok.Data;
|
|||||||
|
|
||||||
@Desc("Represents an procedural eliptical shape")
|
@Desc("Represents an procedural eliptical shape")
|
||||||
@Data
|
@Data
|
||||||
public class IrisPyramid implements IRare
|
public class IrisPyramid implements IRare {
|
||||||
{
|
|
||||||
@Required
|
@Required
|
||||||
@Desc("Typically a 1 in RARITY on a per fork basis")
|
@Desc("Typically a 1 in RARITY on a per fork basis")
|
||||||
@MinNumber(1)
|
@MinNumber(1)
|
||||||
@@ -53,10 +51,10 @@ public class IrisPyramid implements IRare
|
|||||||
private IrisStyledRange baseWidth = new IrisStyledRange(1, 5, new IrisGeneratorStyle(NoiseStyle.STATIC));
|
private IrisStyledRange baseWidth = new IrisStyledRange(1, 5, new IrisGeneratorStyle(NoiseStyle.STATIC));
|
||||||
|
|
||||||
private transient final AtomicCache<MatterCavern> matterNodeCache = new AtomicCache<>();
|
private transient final AtomicCache<MatterCavern> matterNodeCache = new AtomicCache<>();
|
||||||
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, matterNodeCache.aquire(() -> CavernMatter.get(getCustomBiome())),
|
writer.setPyramid(x, y, z, matterNodeCache.aquire(() -> CavernMatter.get(getCustomBiome())),
|
||||||
(int)baseWidth.get(rng, z, y, engine.getData()), true);
|
(int) baseWidth.get(rng, z, y, engine.getData()), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double maxSize() {
|
public double maxSize() {
|
||||||
|
|||||||
@@ -18,7 +18,6 @@
|
|||||||
|
|
||||||
package com.volmit.iris.engine.object.carving;
|
package com.volmit.iris.engine.object.carving;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.core.loader.IrisData;
|
import com.volmit.iris.core.loader.IrisData;
|
||||||
import com.volmit.iris.core.loader.IrisRegistrant;
|
import com.volmit.iris.core.loader.IrisRegistrant;
|
||||||
import com.volmit.iris.engine.data.cache.AtomicCache;
|
import com.volmit.iris.engine.data.cache.AtomicCache;
|
||||||
@@ -29,7 +28,6 @@ import com.volmit.iris.engine.object.annotations.MaxNumber;
|
|||||||
import com.volmit.iris.engine.object.annotations.MinNumber;
|
import com.volmit.iris.engine.object.annotations.MinNumber;
|
||||||
import com.volmit.iris.engine.object.annotations.RegistryListResource;
|
import com.volmit.iris.engine.object.annotations.RegistryListResource;
|
||||||
import com.volmit.iris.engine.object.basic.IrisPosition;
|
import com.volmit.iris.engine.object.basic.IrisPosition;
|
||||||
import com.volmit.iris.engine.object.basic.IrisRange;
|
|
||||||
import com.volmit.iris.engine.object.biome.IrisBiome;
|
import com.volmit.iris.engine.object.biome.IrisBiome;
|
||||||
import com.volmit.iris.engine.object.noise.IrisShapedGeneratorStyle;
|
import com.volmit.iris.engine.object.noise.IrisShapedGeneratorStyle;
|
||||||
import com.volmit.iris.engine.object.noise.IrisWorm;
|
import com.volmit.iris.engine.object.noise.IrisWorm;
|
||||||
@@ -89,6 +87,7 @@ public class IrisRavine extends IrisRegistrant {
|
|||||||
private double ribThickness = 3;
|
private double ribThickness = 3;
|
||||||
|
|
||||||
private transient final AtomicCache<MatterCavern> matterNodeCache = new AtomicCache<>();
|
private transient final AtomicCache<MatterCavern> matterNodeCache = new AtomicCache<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getFolderName() {
|
public String getFolderName() {
|
||||||
return "ravines";
|
return "ravines";
|
||||||
@@ -101,36 +100,32 @@ public class IrisRavine extends IrisRegistrant {
|
|||||||
|
|
||||||
public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) {
|
public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) {
|
||||||
|
|
||||||
KList<IrisPosition> pos = getWorm().generate(rng, engine.getData(), writer, null, x, y, z, (at) -> {});
|
KList<IrisPosition> pos = getWorm().generate(rng, engine.getData(), writer, null, x, y, z, (at) -> {
|
||||||
|
});
|
||||||
CNG dg = depthStyle.getGenerator().createNoCache(rng, engine.getData());
|
CNG dg = depthStyle.getGenerator().createNoCache(rng, engine.getData());
|
||||||
CNG bw = baseWidthStyle.getGenerator().createNoCache(rng, engine.getData());
|
CNG bw = baseWidthStyle.getGenerator().createNoCache(rng, engine.getData());
|
||||||
|
|
||||||
if(pos.size() < nodeThreshold)
|
if (pos.size() < nodeThreshold) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(IrisPosition p : pos)
|
for (IrisPosition p : pos) {
|
||||||
{
|
|
||||||
int rsurface = y == -1 ? engine.getComplex().getHeightStream().get(x, z).intValue() : y;
|
int rsurface = y == -1 ? engine.getComplex().getHeightStream().get(x, z).intValue() : y;
|
||||||
int depth = (int) Math.round(dg.fitDouble(depthStyle.getMin(), depthStyle.getMax(), p.getX(), p.getZ()));
|
int depth = (int) Math.round(dg.fitDouble(depthStyle.getMin(), depthStyle.getMax(), p.getX(), p.getZ()));
|
||||||
int width = (int) Math.round(bw.fitDouble(baseWidthStyle.getMin(), baseWidthStyle.getMax(), p.getX(), p.getZ()));
|
int width = (int) Math.round(bw.fitDouble(baseWidthStyle.getMin(), baseWidthStyle.getMax(), p.getX(), p.getZ()));
|
||||||
int surface = (int) Math.round(rsurface - depth * 0.45);
|
int surface = (int) Math.round(rsurface - depth * 0.45);
|
||||||
|
|
||||||
fork.doCarving(writer, rng, engine, p.getX(), rng.i(surface-depth, surface), p.getZ());
|
fork.doCarving(writer, rng, engine, p.getX(), rng.i(surface - depth, surface), p.getZ());
|
||||||
|
|
||||||
for(int i = surface + depth; i >= surface; i--)
|
for (int i = surface + depth; i >= surface; i--) {
|
||||||
{
|
if (i % ribThickness == 0) {
|
||||||
if(i % ribThickness == 0) {
|
|
||||||
double v = width + ((((surface + depth) - i) * (angle / 360D)));
|
double v = width + ((((surface + depth) - i) * (angle / 360D)));
|
||||||
|
|
||||||
if(v <= 0.25)
|
if (v <= 0.25) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(i <= ribThickness+2)
|
if (i <= ribThickness + 2) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,18 +133,15 @@ public class IrisRavine extends IrisRegistrant {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = surface - depth; i <= surface; i++)
|
for (int i = surface - depth; i <= surface; i++) {
|
||||||
{
|
if (i % ribThickness == 0) {
|
||||||
if(i % ribThickness == 0) {
|
|
||||||
double v = width - ((((surface - depth) - i) * (angle / 360D)));
|
double v = width - ((((surface - depth) - i) * (angle / 360D)));
|
||||||
|
|
||||||
if(v <= 0.25)
|
if (v <= 0.25) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(i <= ribThickness+2)
|
if (i <= ribThickness + 2) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,9 +28,6 @@ import com.volmit.iris.engine.object.annotations.MinNumber;
|
|||||||
import com.volmit.iris.engine.object.annotations.RegistryListResource;
|
import com.volmit.iris.engine.object.annotations.RegistryListResource;
|
||||||
import com.volmit.iris.engine.object.annotations.Required;
|
import com.volmit.iris.engine.object.annotations.Required;
|
||||||
import com.volmit.iris.engine.object.common.IRare;
|
import com.volmit.iris.engine.object.common.IRare;
|
||||||
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
|
|
||||||
import com.volmit.iris.engine.object.noise.IrisStyledRange;
|
|
||||||
import com.volmit.iris.engine.object.noise.NoiseStyle;
|
|
||||||
import com.volmit.iris.util.math.RNG;
|
import com.volmit.iris.util.math.RNG;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -68,8 +65,7 @@ public class IrisRavinePlacer implements IRare {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(rng.nextInt(rarity) != 0)
|
if (rng.nextInt(rarity) != 0) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,15 +78,11 @@ public class IrisRavinePlacer implements IRare {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
int xx = x + rng.nextInt(15);
|
int xx = x + rng.nextInt(15);
|
||||||
int zz = z + rng.nextInt(15);
|
int zz = z + rng.nextInt(15);
|
||||||
ravine.generate(mantle, rng, engine, xx, y, zz);
|
ravine.generate(mantle, rng, engine, xx, y, zz);
|
||||||
}
|
} catch (Throwable e) {
|
||||||
|
|
||||||
catch(Throwable e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
fail.set(true);
|
fail.set(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import com.volmit.iris.engine.object.annotations.MinNumber;
|
|||||||
import com.volmit.iris.engine.object.annotations.RegistryListResource;
|
import com.volmit.iris.engine.object.annotations.RegistryListResource;
|
||||||
import com.volmit.iris.engine.object.annotations.Required;
|
import com.volmit.iris.engine.object.annotations.Required;
|
||||||
import com.volmit.iris.engine.object.biome.IrisBiome;
|
import com.volmit.iris.engine.object.biome.IrisBiome;
|
||||||
import com.volmit.iris.engine.object.block.IrisBlockData;
|
|
||||||
import com.volmit.iris.engine.object.common.IRare;
|
import com.volmit.iris.engine.object.common.IRare;
|
||||||
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
|
import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
|
||||||
import com.volmit.iris.engine.object.noise.IrisStyledRange;
|
import com.volmit.iris.engine.object.noise.IrisStyledRange;
|
||||||
@@ -38,8 +37,7 @@ import lombok.Data;
|
|||||||
|
|
||||||
@Desc("Represents an procedural eliptical shape")
|
@Desc("Represents an procedural eliptical shape")
|
||||||
@Data
|
@Data
|
||||||
public class IrisSphere implements IRare
|
public class IrisSphere implements IRare {
|
||||||
{
|
|
||||||
@Required
|
@Required
|
||||||
@Desc("Typically a 1 in RARITY on a per fork basis")
|
@Desc("Typically a 1 in RARITY on a per fork basis")
|
||||||
@MinNumber(1)
|
@MinNumber(1)
|
||||||
@@ -53,9 +51,9 @@ public class IrisSphere implements IRare
|
|||||||
private IrisStyledRange radius = new IrisStyledRange(1, 5, new IrisGeneratorStyle(NoiseStyle.STATIC));
|
private IrisStyledRange radius = new IrisStyledRange(1, 5, new IrisGeneratorStyle(NoiseStyle.STATIC));
|
||||||
|
|
||||||
private transient final AtomicCache<MatterCavern> matterNodeCache = new AtomicCache<>();
|
private transient final AtomicCache<MatterCavern> matterNodeCache = new AtomicCache<>();
|
||||||
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, matterNodeCache.aquire(() -> CavernMatter.get(getCustomBiome())));
|
writer.setSphere(x, y, z, radius.get(rng, z, y, engine.getData()), true, matterNodeCache.aquire(() -> CavernMatter.get(getCustomBiome())));
|
||||||
}
|
}
|
||||||
|
|
||||||
public double maxSize() {
|
public double maxSize() {
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ import com.volmit.iris.engine.object.annotations.MinNumber;
|
|||||||
import com.volmit.iris.engine.object.annotations.RegistryListResource;
|
import com.volmit.iris.engine.object.annotations.RegistryListResource;
|
||||||
import com.volmit.iris.engine.object.annotations.Required;
|
import com.volmit.iris.engine.object.annotations.Required;
|
||||||
import com.volmit.iris.engine.object.biome.IrisBiome;
|
import com.volmit.iris.engine.object.biome.IrisBiome;
|
||||||
import com.volmit.iris.engine.object.common.CaveResult;
|
|
||||||
import com.volmit.iris.engine.object.common.IRare;
|
import com.volmit.iris.engine.object.common.IRare;
|
||||||
import com.volmit.iris.engine.object.spawners.IrisSpawner;
|
import com.volmit.iris.engine.object.spawners.IrisSpawner;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import com.volmit.iris.util.collection.KList;
|
||||||
@@ -87,7 +86,7 @@ public class IrisEntitySpawn implements IRare {
|
|||||||
IrisComplex comp = gen.getComplex();
|
IrisComplex comp = gen.getComplex();
|
||||||
IrisBiome cave = comp.getCaveBiomeStream().get(x, z);
|
IrisBiome cave = comp.getCaveBiomeStream().get(x, z);
|
||||||
KList<Location> r = new KList<>();
|
KList<Location> r = new KList<>();
|
||||||
r.add( new Location(c.getWorld(), x, hf + 1, z)); // TODO CAVE HEIGHT
|
r.add(new Location(c.getWorld(), x, hf + 1, z)); // TODO CAVE HEIGHT
|
||||||
|
|
||||||
yield r.getRandom(rng);
|
yield r.getRandom(rng);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,8 +75,7 @@ public class IrisGeneratorStyle {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CNG createNoCache(RNG rng, IrisData data)
|
public CNG createNoCache(RNG rng, IrisData data) {
|
||||||
{
|
|
||||||
if (getExpression() != null) {
|
if (getExpression() != null) {
|
||||||
IrisExpression e = data.getExpressionLoader().load(getExpression());
|
IrisExpression e = data.getExpressionLoader().load(getExpression());
|
||||||
|
|
||||||
|
|||||||
@@ -18,16 +18,13 @@
|
|||||||
|
|
||||||
package com.volmit.iris.engine.object.noise;
|
package com.volmit.iris.engine.object.noise;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.core.loader.IrisData;
|
import com.volmit.iris.core.loader.IrisData;
|
||||||
import com.volmit.iris.engine.data.cache.AtomicCache;
|
|
||||||
import com.volmit.iris.engine.mantle.MantleWriter;
|
import com.volmit.iris.engine.mantle.MantleWriter;
|
||||||
import com.volmit.iris.engine.object.annotations.Desc;
|
import com.volmit.iris.engine.object.annotations.Desc;
|
||||||
import com.volmit.iris.engine.object.basic.IrisPosition;
|
import com.volmit.iris.engine.object.basic.IrisPosition;
|
||||||
import com.volmit.iris.engine.object.basic.IrisRange;
|
import com.volmit.iris.engine.object.basic.IrisRange;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import com.volmit.iris.util.collection.KList;
|
||||||
import com.volmit.iris.util.collection.KSet;
|
import com.volmit.iris.util.collection.KSet;
|
||||||
import com.volmit.iris.util.function.NoiseProvider;
|
|
||||||
import com.volmit.iris.util.math.RNG;
|
import com.volmit.iris.util.math.RNG;
|
||||||
import com.volmit.iris.util.noise.CNG;
|
import com.volmit.iris.util.noise.CNG;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
@@ -65,8 +62,7 @@ public class IrisWorm {
|
|||||||
private IrisStyledRange girth = new IrisStyledRange().setMin(3).setMax(5)
|
private IrisStyledRange girth = new IrisStyledRange().setMin(3).setMax(5)
|
||||||
.setStyle(new IrisGeneratorStyle(NoiseStyle.PERLIN));
|
.setStyle(new IrisGeneratorStyle(NoiseStyle.PERLIN));
|
||||||
|
|
||||||
public KList<IrisPosition> generate(RNG rng, IrisData data, MantleWriter writer, IrisRange verticalRange, int x, int y, int z, Consumer<IrisPosition> fork)
|
public KList<IrisPosition> generate(RNG rng, IrisData data, MantleWriter writer, IrisRange verticalRange, int x, int y, int z, Consumer<IrisPosition> fork) {
|
||||||
{
|
|
||||||
int itr = maxIterations;
|
int itr = maxIterations;
|
||||||
double jx, jy, jz;
|
double jx, jy, jz;
|
||||||
double cx = x;
|
double cx = x;
|
||||||
@@ -79,14 +75,12 @@ public class IrisWorm {
|
|||||||
CNG gy = xStyle.getGenerator().createNoCache(new RNG(rng.lmax()), data);
|
CNG gy = xStyle.getGenerator().createNoCache(new RNG(rng.lmax()), data);
|
||||||
CNG gz = xStyle.getGenerator().createNoCache(new RNG(rng.lmax()), data);
|
CNG gz = xStyle.getGenerator().createNoCache(new RNG(rng.lmax()), data);
|
||||||
|
|
||||||
while(itr-- > 0)
|
while (itr-- > 0) {
|
||||||
{
|
|
||||||
IrisPosition current = new IrisPosition(Math.round(cx), Math.round(cy), Math.round(cz));
|
IrisPosition current = new IrisPosition(Math.round(cx), Math.round(cy), Math.round(cz));
|
||||||
fork.accept(current);
|
fork.accept(current);
|
||||||
pos.add(current);
|
pos.add(current);
|
||||||
|
|
||||||
if(check != null)
|
if (check != null) {
|
||||||
{
|
|
||||||
check.add(current);
|
check.add(current);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,23 +92,19 @@ public class IrisWorm {
|
|||||||
cz += jz;
|
cz += jz;
|
||||||
IrisPosition next = new IrisPosition(Math.round(cx), Math.round(cy), Math.round(cz));
|
IrisPosition next = new IrisPosition(Math.round(cx), Math.round(cy), Math.round(cz));
|
||||||
|
|
||||||
if(verticalRange != null && !verticalRange.contains(next.getY()))
|
if (verticalRange != null && !verticalRange.contains(next.getY())) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!writer.isWithin((int)Math.round(cx), verticalRange != null ? (int)Math.round(cy) : 5, (int)Math.round(cz)))
|
if (!writer.isWithin((int) Math.round(cx), verticalRange != null ? (int) Math.round(cy) : 5, (int) Math.round(cz))) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(next.isLongerThan(start, maxDistance))
|
if (next.isLongerThan(start, maxDistance)) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(check != null && check.contains(next))
|
if (check != null && check.contains(next)) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -464,8 +464,7 @@ public class IrisObject extends IrisRegistrant {
|
|||||||
if (yv < 0) {
|
if (yv < 0) {
|
||||||
if (config.getMode().equals(ObjectPlaceMode.CENTER_HEIGHT)) {
|
if (config.getMode().equals(ObjectPlaceMode.CENTER_HEIGHT)) {
|
||||||
y = (c != null ? c.getSurface() : placer.getHighest(x, z, getLoader(), config.isUnderwater())) + rty;
|
y = (c != null ? c.getSurface() : placer.getHighest(x, z, getLoader(), config.isUnderwater())) + rty;
|
||||||
if(placer.isCarved(x, y, z) || placer.isCarved(x, y-1, z))
|
if (placer.isCarved(x, y, z) || placer.isCarved(x, y - 1, z)) {
|
||||||
{
|
|
||||||
bail = true;
|
bail = true;
|
||||||
}
|
}
|
||||||
} else if (config.getMode().equals(ObjectPlaceMode.MAX_HEIGHT) || config.getMode().equals(ObjectPlaceMode.STILT)) {
|
} else if (config.getMode().equals(ObjectPlaceMode.MAX_HEIGHT) || config.getMode().equals(ObjectPlaceMode.STILT)) {
|
||||||
@@ -476,8 +475,7 @@ public class IrisObject extends IrisRegistrant {
|
|||||||
for (int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j++) {
|
for (int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j++) {
|
||||||
int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty;
|
int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty;
|
||||||
|
|
||||||
if(placer.isCarved(i, h, j))
|
if (placer.isCarved(i, h, j)) {
|
||||||
{
|
|
||||||
bail = true;
|
bail = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -495,8 +493,7 @@ public class IrisObject extends IrisRegistrant {
|
|||||||
for (int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j += (rotatedDimensions.getBlockZ() / 2) + 1) {
|
for (int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j += (rotatedDimensions.getBlockZ() / 2) + 1) {
|
||||||
int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty;
|
int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty;
|
||||||
|
|
||||||
if(placer.isCarved(i, h, j))
|
if (placer.isCarved(i, h, j)) {
|
||||||
{
|
|
||||||
bail = true;
|
bail = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -514,8 +511,7 @@ public class IrisObject extends IrisRegistrant {
|
|||||||
for (int i = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i <= x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i++) {
|
for (int i = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i <= x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i++) {
|
||||||
for (int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j++) {
|
for (int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j++) {
|
||||||
int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty;
|
int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty;
|
||||||
if(placer.isCarved(i, h, j))
|
if (placer.isCarved(i, h, j)) {
|
||||||
{
|
|
||||||
bail = true;
|
bail = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -532,8 +528,7 @@ public class IrisObject extends IrisRegistrant {
|
|||||||
for (int i = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i <= x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i += (rotatedDimensions.getBlockX() / 2) + 1) {
|
for (int i = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i <= x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i += (rotatedDimensions.getBlockX() / 2) + 1) {
|
||||||
for (int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j += (rotatedDimensions.getBlockZ() / 2) + 1) {
|
for (int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j += (rotatedDimensions.getBlockZ() / 2) + 1) {
|
||||||
int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty;
|
int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty;
|
||||||
if(placer.isCarved(i, h, j))
|
if (placer.isCarved(i, h, j)) {
|
||||||
{
|
|
||||||
bail = true;
|
bail = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -544,15 +539,13 @@ public class IrisObject extends IrisRegistrant {
|
|||||||
}
|
}
|
||||||
} else if (config.getMode().equals(ObjectPlaceMode.PAINT)) {
|
} else if (config.getMode().equals(ObjectPlaceMode.PAINT)) {
|
||||||
y = placer.getHighest(x, z, getLoader(), config.isUnderwater()) + rty;
|
y = placer.getHighest(x, z, getLoader(), config.isUnderwater()) + rty;
|
||||||
if(placer.isCarved(x, y, z))
|
if (placer.isCarved(x, y, z)) {
|
||||||
{
|
|
||||||
bail = true;
|
bail = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
y = yv;
|
y = yv;
|
||||||
if(placer.isCarved(x, y, z))
|
if (placer.isCarved(x, y, z)) {
|
||||||
{
|
|
||||||
bail = true;
|
bail = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -562,8 +555,7 @@ public class IrisObject extends IrisRegistrant {
|
|||||||
bail = placer.isCarved(x, y, z);
|
bail = placer.isCarved(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(bail)
|
if (bail) {
|
||||||
{
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -441,7 +441,7 @@ public class B {
|
|||||||
return isLit(mat)
|
return isLit(mat)
|
||||||
|| isStorage(mat)
|
|| isStorage(mat)
|
||||||
|| (mat instanceof PointedDripstone
|
|| (mat instanceof PointedDripstone
|
||||||
&& ((PointedDripstone)mat).getThickness().equals(PointedDripstone.Thickness.TIP));
|
&& ((PointedDripstone) mat).getThickness().equals(PointedDripstone.Thickness.TIP));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isFoliage(Material d) {
|
public static boolean isFoliage(Material d) {
|
||||||
@@ -525,6 +525,6 @@ public class B {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isWaterLogged(BlockData b) {
|
public static boolean isWaterLogged(BlockData b) {
|
||||||
return (b instanceof Waterlogged) && ((Waterlogged)b).isWaterlogged();
|
return (b instanceof Waterlogged) && ((Waterlogged) b).isWaterlogged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public class DecreeNode {
|
|||||||
|
|
||||||
for (Parameter i : method.getParameters()) {
|
for (Parameter i : method.getParameters()) {
|
||||||
DecreeParameter p = new DecreeParameter(i);
|
DecreeParameter p = new DecreeParameter(i);
|
||||||
if (p.isRequired()){
|
if (p.isRequired()) {
|
||||||
required.add(p);
|
required.add(p);
|
||||||
} else {
|
} else {
|
||||||
optional.add(p);
|
optional.add(p);
|
||||||
|
|||||||
@@ -60,8 +60,7 @@ public interface DecreeSystem extends CommandExecutor, TabCompleter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
default boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
default boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||||
if(!sender.hasPermission("iris.all"))
|
if (!sender.hasPermission("iris.all")) {
|
||||||
{
|
|
||||||
sender.sendMessage("You lack the Permission 'iris.all'");
|
sender.sendMessage("You lack the Permission 'iris.all'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import com.volmit.iris.util.decree.DecreeSystem;
|
|||||||
import com.volmit.iris.util.decree.exceptions.DecreeParsingException;
|
import com.volmit.iris.util.decree.exceptions.DecreeParsingException;
|
||||||
import com.volmit.iris.util.decree.exceptions.DecreeWhichException;
|
import com.volmit.iris.util.decree.exceptions.DecreeWhichException;
|
||||||
import com.volmit.iris.util.format.Form;
|
import com.volmit.iris.util.format.Form;
|
||||||
import com.volmit.iris.util.plugin.VolmitSender;
|
|
||||||
import org.bukkit.FluidCollisionMode;
|
import org.bukkit.FluidCollisionMode;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.util.BlockVector;
|
import org.bukkit.util.BlockVector;
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public class WorldHandler implements DecreeParameterHandler<World> {
|
|||||||
public KList<World> getPossibilities() {
|
public KList<World> getPossibilities() {
|
||||||
KList<World> options = new KList<>();
|
KList<World> options = new KList<>();
|
||||||
for (World world : Bukkit.getWorlds()) {
|
for (World world : Bukkit.getWorlds()) {
|
||||||
if (!world.getName().toLowerCase().startsWith("iris/")){
|
if (!world.getName().toLowerCase().startsWith("iris/")) {
|
||||||
options.add(world);
|
options.add(world);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,12 +18,10 @@
|
|||||||
|
|
||||||
package com.volmit.iris.util.mantle;
|
package com.volmit.iris.util.mantle;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.engine.data.cache.Cache;
|
import com.volmit.iris.engine.data.cache.Cache;
|
||||||
import com.volmit.iris.engine.mantle.EngineMantle;
|
import com.volmit.iris.engine.mantle.EngineMantle;
|
||||||
import com.volmit.iris.engine.mantle.MantleWriter;
|
import com.volmit.iris.engine.mantle.MantleWriter;
|
||||||
import com.volmit.iris.engine.object.basic.IrisPosition;
|
|
||||||
import com.volmit.iris.engine.object.feature.IrisFeaturePositional;
|
import com.volmit.iris.engine.object.feature.IrisFeaturePositional;
|
||||||
import com.volmit.iris.util.collection.KMap;
|
import com.volmit.iris.util.collection.KMap;
|
||||||
import com.volmit.iris.util.collection.KSet;
|
import com.volmit.iris.util.collection.KSet;
|
||||||
@@ -33,21 +31,16 @@ import com.volmit.iris.util.documentation.RegionCoordinates;
|
|||||||
import com.volmit.iris.util.format.C;
|
import com.volmit.iris.util.format.C;
|
||||||
import com.volmit.iris.util.format.Form;
|
import com.volmit.iris.util.format.Form;
|
||||||
import com.volmit.iris.util.function.Consumer4;
|
import com.volmit.iris.util.function.Consumer4;
|
||||||
import com.volmit.iris.util.math.INode;
|
|
||||||
import com.volmit.iris.util.math.KochanekBartelsInterpolation;
|
|
||||||
import com.volmit.iris.util.math.M;
|
import com.volmit.iris.util.math.M;
|
||||||
import com.volmit.iris.util.math.PathInterpolation;
|
|
||||||
import com.volmit.iris.util.matter.Matter;
|
import com.volmit.iris.util.matter.Matter;
|
||||||
import com.volmit.iris.util.matter.MatterCavern;
|
|
||||||
import com.volmit.iris.util.parallel.BurstExecutor;
|
import com.volmit.iris.util.parallel.BurstExecutor;
|
||||||
import com.volmit.iris.util.parallel.HyperLock;
|
import com.volmit.iris.util.parallel.HyperLock;
|
||||||
import com.volmit.iris.util.parallel.MultiBurst;
|
import com.volmit.iris.util.parallel.MultiBurst;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.Map;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
|
|||||||
@@ -243,11 +243,9 @@ public class MantleChunk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void deleteSlices(Class<?> c) {
|
public void deleteSlices(Class<?> c) {
|
||||||
for(int i = 0; i < sections.length(); i++)
|
for (int i = 0; i < sections.length(); i++) {
|
||||||
{
|
|
||||||
Matter m = sections.get(i);
|
Matter m = sections.get(i);
|
||||||
if(m != null && m.hasSlice(c))
|
if (m != null && m.hasSlice(c)) {
|
||||||
{
|
|
||||||
m.deleteSlice(c);
|
m.deleteSlice(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,8 +20,6 @@ package com.volmit.iris.util.matter.slices;
|
|||||||
|
|
||||||
import com.volmit.iris.util.matter.MatterCavern;
|
import com.volmit.iris.util.matter.MatterCavern;
|
||||||
import com.volmit.iris.util.matter.Sliced;
|
import com.volmit.iris.util.matter.Sliced;
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
@@ -32,10 +30,8 @@ public class CavernMatter extends RawMatter<MatterCavern> {
|
|||||||
public static final MatterCavern ON = new MatterCavern(true, "");
|
public static final MatterCavern ON = new MatterCavern(true, "");
|
||||||
public static final MatterCavern OFF = new MatterCavern(false, "");
|
public static final MatterCavern OFF = new MatterCavern(false, "");
|
||||||
|
|
||||||
public static MatterCavern get(String customBiome)
|
public static MatterCavern get(String customBiome) {
|
||||||
{
|
if (customBiome.isEmpty()) {
|
||||||
if(customBiome.isEmpty())
|
|
||||||
{
|
|
||||||
return ON;
|
return ON;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,8 +20,6 @@ package com.volmit.iris.util.matter.slices;
|
|||||||
|
|
||||||
import com.volmit.iris.util.matter.MatterUpdate;
|
import com.volmit.iris.util.matter.MatterUpdate;
|
||||||
import com.volmit.iris.util.matter.Sliced;
|
import com.volmit.iris.util.matter.Sliced;
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
|
|||||||
@@ -388,8 +388,7 @@ public class CNG {
|
|||||||
return noise(dim);
|
return noise(dim);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double noiseSym(double... dim)
|
public double noiseSym(double... dim) {
|
||||||
{
|
|
||||||
return (noise(dim) * 2) - 1;
|
return (noise(dim) * 2) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ import org.bukkit.permissions.PermissionAttachmentInfo;
|
|||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
@@ -439,7 +438,7 @@ public class VolmitSender implements CommandSender {
|
|||||||
String usage = "<#bbe03f>✒ <#a8e0a2><font:minecraft:uniform>";
|
String usage = "<#bbe03f>✒ <#a8e0a2><font:minecraft:uniform>";
|
||||||
String onClick;
|
String onClick;
|
||||||
if (i.isNode()) {
|
if (i.isNode()) {
|
||||||
if (i.getNode().getParameters().isEmpty()){
|
if (i.getNode().getParameters().isEmpty()) {
|
||||||
usage += "There are no parameters. Click to run.";
|
usage += "There are no parameters. Click to run.";
|
||||||
onClick = "run_command";
|
onClick = "run_command";
|
||||||
} else {
|
} else {
|
||||||
@@ -461,7 +460,7 @@ public class VolmitSender implements CommandSender {
|
|||||||
|
|
||||||
/// Params
|
/// Params
|
||||||
StringBuilder nodes = new StringBuilder();
|
StringBuilder nodes = new StringBuilder();
|
||||||
if (i.isNode()){
|
if (i.isNode()) {
|
||||||
for (DecreeParameter p : i.getNode().getParameters()) {
|
for (DecreeParameter p : i.getNode().getParameters()) {
|
||||||
|
|
||||||
String nTitle = "<gradient:#d665f0:#a37feb>" + p.getName();
|
String nTitle = "<gradient:#d665f0:#a37feb>" + p.getName();
|
||||||
@@ -469,19 +468,19 @@ public class VolmitSender implements CommandSender {
|
|||||||
String nDescription = "<#3fe05a>✎ <#6ad97d><font:minecraft:uniform>" + p.getDescription();
|
String nDescription = "<#3fe05a>✎ <#6ad97d><font:minecraft:uniform>" + p.getDescription();
|
||||||
String nUsage;
|
String nUsage;
|
||||||
String context = "";
|
String context = "";
|
||||||
if (p.isRequired()){
|
if (p.isRequired()) {
|
||||||
nUsage = "<#db4321>⚠ <#faa796><font:minecraft:uniform>This parameter is required.";
|
nUsage = "<#db4321>⚠ <#faa796><font:minecraft:uniform>This parameter is required.";
|
||||||
} else if (p.hasDefault()) {
|
} else if (p.hasDefault()) {
|
||||||
nUsage = "<#2181db>✔ <#78dcf0><font:minecraft:uniform>Defaults to \""+ p.getParam().defaultValue()+"\" if undefined.";
|
nUsage = "<#2181db>✔ <#78dcf0><font:minecraft:uniform>Defaults to \"" + p.getParam().defaultValue() + "\" if undefined.";
|
||||||
} else {
|
} else {
|
||||||
nUsage = "<#a73abd>✔ <#78dcf0><font:minecraft:uniform>This parameter is optional.";
|
nUsage = "<#a73abd>✔ <#78dcf0><font:minecraft:uniform>This parameter is optional.";
|
||||||
}
|
}
|
||||||
if (p.isContextual()){
|
if (p.isContextual()) {
|
||||||
context = "<#ff9900>➱ <#ffcc00><font:minecraft:uniform>The value may be derived from environment context" + newline;
|
context = "<#ff9900>➱ <#ffcc00><font:minecraft:uniform>The value may be derived from environment context" + newline;
|
||||||
}
|
}
|
||||||
String type = "<#cc00ff>✢ <#ff33cc><font:minecraft:uniform>This parameter is of type " + p.getType().getSimpleName();
|
String type = "<#cc00ff>✢ <#ff33cc><font:minecraft:uniform>This parameter is of type " + p.getType().getSimpleName();
|
||||||
String fullTitle;
|
String fullTitle;
|
||||||
if (p.isRequired()){
|
if (p.isRequired()) {
|
||||||
fullTitle = "<red>[" + nTitle + "<red>] ";
|
fullTitle = "<red>[" + nTitle + "<red>] ";
|
||||||
} else {
|
} else {
|
||||||
fullTitle = "<#4f4f4f>⊰" + nTitle + "<#4f4f4f>⊱";
|
fullTitle = "<#4f4f4f>⊰" + nTitle + "<#4f4f4f>⊱";
|
||||||
|
|||||||
@@ -50,7 +50,8 @@ public interface Job {
|
|||||||
|
|
||||||
|
|
||||||
default void execute(VolmitSender sender) {
|
default void execute(VolmitSender sender) {
|
||||||
execute(sender, () -> {});
|
execute(sender, () -> {
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
default void execute(VolmitSender sender, Runnable whenComplete) {
|
default void execute(VolmitSender sender, Runnable whenComplete) {
|
||||||
|
|||||||
Reference in New Issue
Block a user