mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-06-17 14:21:33 +00:00
Cleanup SRC
This commit is contained in:
@@ -1,18 +1,15 @@
|
|||||||
package com.volmit.iris;
|
package com.volmit.iris;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.volmit.iris.manager.*;
|
import com.volmit.iris.manager.*;
|
||||||
import com.volmit.iris.manager.command.CommandIris;
|
import com.volmit.iris.manager.command.CommandIris;
|
||||||
import com.volmit.iris.manager.command.world.CommandLocate;
|
|
||||||
import com.volmit.iris.manager.command.PermissionIris;
|
import com.volmit.iris.manager.command.PermissionIris;
|
||||||
|
import com.volmit.iris.manager.command.world.CommandLocate;
|
||||||
import com.volmit.iris.manager.link.BKLink;
|
import com.volmit.iris.manager.link.BKLink;
|
||||||
import com.volmit.iris.manager.link.CitizensLink;
|
import com.volmit.iris.manager.link.CitizensLink;
|
||||||
import com.volmit.iris.manager.link.MultiverseCoreLink;
|
import com.volmit.iris.manager.link.MultiverseCoreLink;
|
||||||
import com.volmit.iris.manager.link.MythicMobsLink;
|
import com.volmit.iris.manager.link.MythicMobsLink;
|
||||||
import com.volmit.iris.nms.INMS;
|
import com.volmit.iris.nms.INMS;
|
||||||
import com.volmit.iris.object.IrisCompat;
|
import com.volmit.iris.object.IrisCompat;
|
||||||
import com.volmit.iris.object.IrisObject;
|
|
||||||
import com.volmit.iris.object.IrisObjectPlacement;
|
|
||||||
import com.volmit.iris.scaffold.IrisWorlds;
|
import com.volmit.iris.scaffold.IrisWorlds;
|
||||||
import com.volmit.iris.scaffold.engine.EngineCompositeGenerator;
|
import com.volmit.iris.scaffold.engine.EngineCompositeGenerator;
|
||||||
import com.volmit.iris.util.*;
|
import com.volmit.iris.util.*;
|
||||||
@@ -21,523 +18,424 @@ import org.bukkit.Bukkit;
|
|||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
|
||||||
import org.bukkit.generator.ChunkGenerator;
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
public class Iris extends VolmitPlugin implements Listener
|
public class Iris extends VolmitPlugin implements Listener {
|
||||||
{
|
public static KList<GroupedExecutor> executors = new KList<>();
|
||||||
public static KList<GroupedExecutor> executors = new KList<>();
|
public static Iris instance;
|
||||||
public static Iris instance;
|
public static ProjectManager proj;
|
||||||
public static ProjectManager proj;
|
public static ConversionManager convert;
|
||||||
public static ConversionManager convert;
|
public static WandManager wand;
|
||||||
public static WandManager wand;
|
public static EditManager edit;
|
||||||
public static EditManager edit;
|
public static IrisBoardManager board;
|
||||||
public static IrisBoardManager board;
|
public static BKLink linkBK;
|
||||||
public static BKLink linkBK;
|
public static MultiverseCoreLink linkMultiverseCore;
|
||||||
public static MultiverseCoreLink linkMultiverseCore;
|
public static MythicMobsLink linkMythicMobs;
|
||||||
public static MythicMobsLink linkMythicMobs;
|
public static CitizensLink linkCitizens;
|
||||||
public static CitizensLink linkCitizens;
|
private static final Queue<Runnable> syncJobs = new ShurikenQueue<>();
|
||||||
private static final Queue<Runnable> syncJobs = new ShurikenQueue<>();
|
public static boolean customModels = doesSupportCustomModels();
|
||||||
public static boolean customModels = doesSupportCustomModels();
|
public static boolean awareEntities = doesSupportAwareness();
|
||||||
public static boolean awareEntities = doesSupportAwareness();
|
public static boolean biome3d = doesSupport3DBiomes();
|
||||||
public static boolean biome3d = doesSupport3DBiomes();
|
public static boolean lowMemoryMode = false;
|
||||||
public static boolean lowMemoryMode = false;
|
public static IrisCompat compat;
|
||||||
public static IrisCompat compat;
|
public static FileWatcher configWatcher;
|
||||||
public static FileWatcher configWatcher;
|
|
||||||
|
|
||||||
@Permission
|
@Permission
|
||||||
public static PermissionIris perm;
|
public static PermissionIris perm;
|
||||||
|
|
||||||
@com.volmit.iris.util.Command
|
@com.volmit.iris.util.Command
|
||||||
public CommandIris commandIris;
|
public CommandIris commandIris;
|
||||||
|
|
||||||
public Iris()
|
public Iris() {
|
||||||
{
|
instance = this;
|
||||||
instance = this;
|
INMS.get();
|
||||||
INMS.get();
|
IO.delete(new File("iris"));
|
||||||
IO.delete(new File("iris"));
|
lowMemoryMode = Runtime.getRuntime().maxMemory() < 4000000000L; // 4 * 1000 * 1000 * 1000 // 4;
|
||||||
lowMemoryMode = Runtime.getRuntime().maxMemory() < 4000000000L; // 4 * 1000 * 1000 * 1000 // 4;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static int getThreadCount()
|
public static int getThreadCount() {
|
||||||
{
|
int tc = IrisSettings.get().getConcurrency().getThreadCount();
|
||||||
int tc = IrisSettings.get().getConcurrency().getThreadCount();
|
|
||||||
|
|
||||||
if(tc <= 0)
|
if (tc <= 0) {
|
||||||
{
|
int p = Runtime.getRuntime().availableProcessors();
|
||||||
int p = Runtime.getRuntime().availableProcessors();
|
|
||||||
|
|
||||||
return p > 16 ? 16 : p < 4 ? 4 : p;
|
return p > 16 ? 16 : p < 4 ? 4 : p;
|
||||||
}
|
}
|
||||||
|
|
||||||
return tc;
|
return tc;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean doesSupport3DBiomes()
|
private static boolean doesSupport3DBiomes() {
|
||||||
{
|
try {
|
||||||
try
|
int v = Integer.parseInt(Bukkit.getBukkitVersion().split("\\Q-\\E")[0].split("\\Q.\\E")[1]);
|
||||||
{
|
|
||||||
int v = Integer.parseInt(Bukkit.getBukkitVersion().split("\\Q-\\E")[0].split("\\Q.\\E")[1]);
|
|
||||||
|
|
||||||
return v >= 15;
|
return v >= 15;
|
||||||
}
|
} catch (Throwable e) {
|
||||||
|
|
||||||
catch(Throwable e)
|
}
|
||||||
{
|
|
||||||
|
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
private static boolean doesSupportCustomModels() {
|
||||||
}
|
try {
|
||||||
|
int v = Integer.parseInt(Bukkit.getBukkitVersion().split("\\Q-\\E")[0].split("\\Q.\\E")[1]);
|
||||||
|
|
||||||
private static boolean doesSupportCustomModels()
|
return v >= 14;
|
||||||
{
|
} catch (Throwable e) {
|
||||||
try
|
|
||||||
{
|
|
||||||
int v = Integer.parseInt(Bukkit.getBukkitVersion().split("\\Q-\\E")[0].split("\\Q.\\E")[1]);
|
|
||||||
|
|
||||||
return v >= 14;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
catch(Throwable e)
|
return false;
|
||||||
{
|
}
|
||||||
|
|
||||||
}
|
private static boolean doesSupportAwareness() {
|
||||||
|
try {
|
||||||
|
int v = Integer.parseInt(Bukkit.getBukkitVersion().split("\\Q-\\E")[0].split("\\Q.\\E")[1]);
|
||||||
|
|
||||||
return false;
|
return v >= 15;
|
||||||
}
|
} catch (Throwable e) {
|
||||||
|
|
||||||
private static boolean doesSupportAwareness()
|
}
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
int v = Integer.parseInt(Bukkit.getBukkitVersion().split("\\Q-\\E")[0].split("\\Q.\\E")[1]);
|
|
||||||
|
|
||||||
return v >= 15;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
catch(Throwable e)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start()
|
public void start() {
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void stop()
|
public void stop() {
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTag(String subTag)
|
public String getTag(String subTag) {
|
||||||
{
|
return C.BOLD + "" + C.DARK_GRAY + "[" + C.BOLD + "" + C.GREEN + "Iris" + C.BOLD + C.DARK_GRAY + "]" + C.RESET + "" + C.GRAY + ": ";
|
||||||
return C.BOLD + "" + C.DARK_GRAY + "[" + C.BOLD + "" + C.GREEN + "Iris" + C.BOLD + C.DARK_GRAY + "]" + C.RESET + "" + C.GRAY + ": ";
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void onEnable()
|
public void onEnable() {
|
||||||
{
|
instance = this;
|
||||||
instance = this;
|
try {
|
||||||
try {
|
compat = IrisCompat.configured(getDataFile("compat.json"));
|
||||||
compat = IrisCompat.configured(getDataFile("compat.json"));
|
} catch (IOException e) {
|
||||||
} catch (IOException e){
|
// Do nothing. Everything continues properly but the exception is still there.
|
||||||
// Do nothing. Everything continues properly but the exception is still there.
|
}
|
||||||
}
|
proj = new ProjectManager();
|
||||||
proj = new ProjectManager();
|
convert = new ConversionManager();
|
||||||
convert = new ConversionManager();
|
wand = new WandManager();
|
||||||
wand = new WandManager();
|
board = new IrisBoardManager();
|
||||||
board = new IrisBoardManager();
|
linkMultiverseCore = new MultiverseCoreLink();
|
||||||
linkMultiverseCore = new MultiverseCoreLink();
|
linkBK = new BKLink();
|
||||||
linkBK = new BKLink();
|
linkMythicMobs = new MythicMobsLink();
|
||||||
linkMythicMobs = new MythicMobsLink();
|
edit = new EditManager();
|
||||||
edit = new EditManager();
|
configWatcher = new FileWatcher(getDataFile("settings.json"));
|
||||||
configWatcher = new FileWatcher(getDataFile("settings.json"));
|
J.a(() -> IO.delete(getTemp()));
|
||||||
J.a(() -> IO.delete(getTemp()));
|
J.a(this::bstats);
|
||||||
J.a(this::bstats);
|
J.s(this::splash, 20);
|
||||||
J.s(this::splash, 20);
|
J.sr(this::tickQueue, 0);
|
||||||
J.sr(this::tickQueue, 0);
|
J.ar(this::checkConfigHotload, 50);
|
||||||
J.ar(this::checkConfigHotload, 50);
|
PaperLib.suggestPaper(this);
|
||||||
PaperLib.suggestPaper(this);
|
getServer().getPluginManager().registerEvents(new CommandLocate(), this);
|
||||||
getServer().getPluginManager().registerEvents(new CommandLocate(), this);
|
getServer().getPluginManager().registerEvents(new WandManager(), this);
|
||||||
getServer().getPluginManager().registerEvents(new WandManager() ,this);
|
super.onEnable();
|
||||||
super.onEnable();
|
Bukkit.getPluginManager().registerEvents(this, this);
|
||||||
Bukkit.getPluginManager().registerEvents(this, this);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void checkConfigHotload() {
|
private void checkConfigHotload() {
|
||||||
if(configWatcher.checkModified())
|
if (configWatcher.checkModified()) {
|
||||||
{
|
IrisSettings.invalidate();
|
||||||
IrisSettings.invalidate();
|
IrisSettings.get();
|
||||||
IrisSettings.get();
|
configWatcher.checkModified();
|
||||||
configWatcher.checkModified();
|
Iris.info("Hotloaded settings.json");
|
||||||
Iris.info("Hotloaded settings.json");
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void onDisable()
|
public void onDisable() {
|
||||||
{
|
if (IrisSettings.get().isStudio()) {
|
||||||
if(IrisSettings.get().isStudio())
|
proj.close();
|
||||||
{
|
|
||||||
proj.close();
|
|
||||||
|
|
||||||
for(World i : Bukkit.getWorlds())
|
for (World i : Bukkit.getWorlds()) {
|
||||||
{
|
if (IrisWorlds.isIrisWorld(i)) {
|
||||||
if(IrisWorlds.isIrisWorld(i))
|
IrisWorlds.access(i).close();
|
||||||
{
|
}
|
||||||
IrisWorlds.access(i).close();
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(GroupedExecutor i : executors)
|
for (GroupedExecutor i : executors) {
|
||||||
{
|
i.close();
|
||||||
i.close();
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
executors.clear();
|
executors.clear();
|
||||||
board.disable();
|
board.disable();
|
||||||
Bukkit.getScheduler().cancelTasks(this);
|
Bukkit.getScheduler().cancelTasks(this);
|
||||||
HandlerList.unregisterAll((Plugin) this);
|
HandlerList.unregisterAll((Plugin) this);
|
||||||
super.onDisable();
|
super.onDisable();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void sq(Runnable r)
|
public static void sq(Runnable r) {
|
||||||
{
|
synchronized (syncJobs) {
|
||||||
synchronized(syncJobs)
|
syncJobs.queue(r);
|
||||||
{
|
}
|
||||||
syncJobs.queue(r);
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void tickQueue()
|
private void tickQueue() {
|
||||||
{
|
synchronized (Iris.syncJobs) {
|
||||||
synchronized(Iris.syncJobs)
|
if (!Iris.syncJobs.hasNext()) {
|
||||||
{
|
return;
|
||||||
if(!Iris.syncJobs.hasNext())
|
}
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
long ms = M.ms();
|
long ms = M.ms();
|
||||||
|
|
||||||
while(Iris.syncJobs.hasNext() && M.ms() - ms < 25)
|
while (Iris.syncJobs.hasNext() && M.ms() - ms < 25) {
|
||||||
{
|
try {
|
||||||
try
|
Iris.syncJobs.next().run();
|
||||||
{
|
} catch (Throwable e) {
|
||||||
Iris.syncJobs.next().run();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
catch(Throwable e)
|
private void bstats() {
|
||||||
{
|
if (IrisSettings.get().getGeneral().isPluginMetrics()) {
|
||||||
e.printStackTrace();
|
J.s(() -> {
|
||||||
}
|
Metrics m = new Metrics(Iris.instance, 8757);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void bstats()
|
m.addCustomChart(new Metrics.SingleLineChart("custom_dimensions", new Callable<Integer>() {
|
||||||
{
|
@Override
|
||||||
if(IrisSettings.get().getGeneral().isPluginMetrics())
|
public Integer call() throws Exception {
|
||||||
{
|
return ProjectManager.countUniqueDimensions();
|
||||||
J.s(() -> {
|
}
|
||||||
Metrics m = new Metrics(Iris.instance, 8757);
|
}));
|
||||||
|
|
||||||
m.addCustomChart(new Metrics.SingleLineChart("custom_dimensions", new Callable<Integer>() {
|
m.addCustomChart(new Metrics.SimplePie("using_custom_dimensions", new Callable<String>() {
|
||||||
@Override
|
@Override
|
||||||
public Integer call() throws Exception {
|
public String call() throws Exception {
|
||||||
return ProjectManager.countUniqueDimensions();
|
return ProjectManager.countUniqueDimensions() > 0 ? "Active Projects" : "No Projects";
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m.addCustomChart(new Metrics.SimplePie("using_custom_dimensions", new Callable<String>() {
|
public static File getTemp() {
|
||||||
@Override
|
return instance.getDataFolder("cache", "temp");
|
||||||
public String call() throws Exception {
|
}
|
||||||
return ProjectManager.countUniqueDimensions() > 0 ? "Active Projects" : "No Projects";
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static File getTemp()
|
@Override
|
||||||
{
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
return instance.getDataFolder("cache", "temp");
|
return super.onCommand(sender, command, label, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public void imsg(CommandSender s, String msg) {
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)
|
s.sendMessage(C.GREEN + "[" + C.DARK_GRAY + "Iris" + C.GREEN + "]" + C.GRAY + ": " + msg);
|
||||||
{
|
}
|
||||||
return super.onCommand(sender, command, label, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void imsg(CommandSender s, String msg)
|
|
||||||
{
|
|
||||||
s.sendMessage(C.GREEN + "[" + C.DARK_GRAY + "Iris" + C.GREEN + "]" + C.GRAY + ": " + msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ChunkGenerator getDefaultWorldGenerator(String worldName, String id) {
|
||||||
|
String dimension = IrisSettings.get().getGenerator().getDefaultWorldType();
|
||||||
|
|
||||||
@Override
|
if (id != null && !id.isEmpty()) {
|
||||||
public ChunkGenerator getDefaultWorldGenerator(String worldName, String id)
|
dimension = id;
|
||||||
{
|
Iris.info("Generator ID: " + id + " requested by bukkit/plugin. Assuming IrisDimension: " + id);
|
||||||
String dimension = IrisSettings.get().getGenerator().getDefaultWorldType();
|
}
|
||||||
|
|
||||||
if(id != null && !id.isEmpty())
|
return new EngineCompositeGenerator(dimension, true);
|
||||||
{
|
}
|
||||||
dimension = id;
|
|
||||||
Iris.info("Generator ID: " + id + " requested by bukkit/plugin. Assuming IrisDimension: " + id);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new EngineCompositeGenerator(dimension, true);
|
public static void msg(String string) {
|
||||||
}
|
try {
|
||||||
|
if (instance == null) {
|
||||||
|
System.out.println("[Iris]: " + string);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
public static void msg(String string)
|
String msg = C.GRAY + "[" + C.GREEN + "Iris" + C.GRAY + "]: " + string;
|
||||||
{
|
Bukkit.getConsoleSender().sendMessage(msg);
|
||||||
try
|
} catch (Throwable e) {
|
||||||
{
|
System.out.println("[Iris]: " + string);
|
||||||
if(instance == null)
|
}
|
||||||
{
|
}
|
||||||
System.out.println("[Iris]: " + string);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String msg = C.GRAY + "[" + C.GREEN + "Iris" + C.GRAY + "]: " + string;
|
public static File getCached(String name, String url) {
|
||||||
Bukkit.getConsoleSender().sendMessage(msg);
|
String h = IO.hash(name + "@" + url);
|
||||||
}
|
File f = Iris.instance.getDataFile("cache", h.substring(0, 2), h.substring(3, 5), h);
|
||||||
|
|
||||||
catch(Throwable e)
|
if (!f.exists()) {
|
||||||
{
|
try (BufferedInputStream in = new BufferedInputStream(new URL(url).openStream()); FileOutputStream fileOutputStream = new FileOutputStream(f)) {
|
||||||
System.out.println("[Iris]: " + string);
|
byte[] dataBuffer = new byte[1024];
|
||||||
}
|
int bytesRead;
|
||||||
}
|
while ((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) {
|
||||||
|
fileOutputStream.write(dataBuffer, 0, bytesRead);
|
||||||
|
Iris.verbose("Aquiring " + name);
|
||||||
|
}
|
||||||
|
} catch (IOException ignored) {
|
||||||
|
|
||||||
public static File getCached(String name, String url)
|
}
|
||||||
{
|
}
|
||||||
String h = IO.hash(name + "@" + url);
|
|
||||||
File f = Iris.instance.getDataFile("cache", h.substring(0, 2), h.substring(3, 5), h);
|
|
||||||
|
|
||||||
if(!f.exists())
|
return f.exists() ? f : null;
|
||||||
{
|
}
|
||||||
try(BufferedInputStream in = new BufferedInputStream(new URL(url).openStream()); FileOutputStream fileOutputStream = new FileOutputStream(f))
|
|
||||||
{
|
|
||||||
byte[] dataBuffer = new byte[1024];
|
|
||||||
int bytesRead;
|
|
||||||
while((bytesRead = in.read(dataBuffer, 0, 1024)) != -1)
|
|
||||||
{
|
|
||||||
fileOutputStream.write(dataBuffer, 0, bytesRead);
|
|
||||||
Iris.verbose("Aquiring " + name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(IOException ignored)
|
public static String getNonCached(String name, String url) {
|
||||||
{
|
String h = IO.hash(name + "*" + url);
|
||||||
|
File f = Iris.instance.getDataFile("cache", h.substring(0, 2), h.substring(3, 5), h);
|
||||||
|
|
||||||
}
|
try (BufferedInputStream in = new BufferedInputStream(new URL(url).openStream()); FileOutputStream fileOutputStream = new FileOutputStream(f)) {
|
||||||
}
|
byte[] dataBuffer = new byte[1024];
|
||||||
|
int bytesRead;
|
||||||
|
while ((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) {
|
||||||
|
fileOutputStream.write(dataBuffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
} catch (IOException ignored) {
|
||||||
|
|
||||||
return f.exists() ? f : null;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static String getNonCached(String name, String url)
|
try {
|
||||||
{
|
return IO.readAll(f);
|
||||||
String h = IO.hash(name + "*" + url);
|
} catch (IOException ignored) {
|
||||||
File f = Iris.instance.getDataFile("cache", h.substring(0, 2), h.substring(3, 5), h);
|
|
||||||
|
|
||||||
try(BufferedInputStream in = new BufferedInputStream(new URL(url).openStream()); FileOutputStream fileOutputStream = new FileOutputStream(f))
|
}
|
||||||
{
|
|
||||||
byte[] dataBuffer = new byte[1024];
|
|
||||||
int bytesRead;
|
|
||||||
while((bytesRead = in.read(dataBuffer, 0, 1024)) != -1)
|
|
||||||
{
|
|
||||||
fileOutputStream.write(dataBuffer, 0, bytesRead);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(IOException ignored)
|
return "";
|
||||||
{
|
}
|
||||||
|
|
||||||
}
|
public static File getNonCachedFile(String name, String url) {
|
||||||
|
String h = IO.hash(name + "*" + url);
|
||||||
|
File f = Iris.instance.getDataFile("cache", h.substring(0, 2), h.substring(3, 5), h);
|
||||||
|
Iris.verbose("Download " + name + " -> " + url);
|
||||||
|
try (BufferedInputStream in = new BufferedInputStream(new URL(url).openStream()); FileOutputStream fileOutputStream = new FileOutputStream(f)) {
|
||||||
|
byte[] dataBuffer = new byte[1024];
|
||||||
|
int bytesRead;
|
||||||
|
while ((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) {
|
||||||
|
fileOutputStream.write(dataBuffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
try
|
return f;
|
||||||
{
|
}
|
||||||
return IO.readAll(f);
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(IOException ignored)
|
public static void warn(String string) {
|
||||||
{
|
msg(C.YELLOW + string);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
public static void error(String string) {
|
||||||
|
msg(C.RED + string);
|
||||||
|
}
|
||||||
|
|
||||||
return "";
|
public static void verbose(String string) {
|
||||||
}
|
try {
|
||||||
|
if (IrisSettings.get().getGeneral().isVerbose()) {
|
||||||
|
msg(C.GRAY + string);
|
||||||
|
}
|
||||||
|
} catch (Throwable e) {
|
||||||
|
msg(C.GRAY + string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static File getNonCachedFile(String name, String url)
|
public static void success(String string) {
|
||||||
{
|
msg(C.GREEN + string);
|
||||||
String h = IO.hash(name + "*" + url);
|
}
|
||||||
File f = Iris.instance.getDataFile("cache", h.substring(0, 2), h.substring(3, 5), h);
|
|
||||||
Iris.verbose("Download " + name + " -> " + url);
|
|
||||||
try(BufferedInputStream in = new BufferedInputStream(new URL(url).openStream()); FileOutputStream fileOutputStream = new FileOutputStream(f))
|
|
||||||
{
|
|
||||||
byte[] dataBuffer = new byte[1024];
|
|
||||||
int bytesRead;
|
|
||||||
while((bytesRead = in.read(dataBuffer, 0, 1024)) != -1)
|
|
||||||
{
|
|
||||||
fileOutputStream.write(dataBuffer, 0, bytesRead);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(IOException e)
|
public static void info(String string) {
|
||||||
{
|
msg(C.WHITE + string);
|
||||||
e.printStackTrace();
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return f;
|
public void hit(long hits2) {
|
||||||
}
|
board.hits.put(hits2);
|
||||||
|
}
|
||||||
|
|
||||||
public static void warn(String string)
|
public void splash() {
|
||||||
{
|
if (!IrisSettings.get().getGeneral().isSplashLogoStartup()) {
|
||||||
msg(C.YELLOW + string);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void error(String string)
|
// @NoArgsConstructor
|
||||||
{
|
String padd = Form.repeat(" ", 8);
|
||||||
msg(C.RED + string);
|
String padd2 = Form.repeat(" ", 4);
|
||||||
}
|
String[] info = {"", "", "", "", "", padd2 + C.GREEN + " Iris", padd2 + C.GRAY + " by " + C.randomColor() + "V" + C.randomColor() + "o" + C.randomColor() + "l" + C.randomColor() + "m" + C.randomColor() + "i" + C.randomColor() + "t" + C.randomColor() + "S" + C.randomColor() + "o" + C.randomColor() + "f" + C.randomColor() + "t" + C.randomColor() + "w" + C.randomColor() + "a" + C.randomColor() + "r" + C.randomColor() + "e", padd2 + C.GRAY + " v" + getDescription().getVersion(),
|
||||||
|
};
|
||||||
|
String[] splash = {padd + C.GRAY + " @@@@@@@@@@@@@@" + C.DARK_GRAY + "@@@", padd + C.GRAY + " @@&&&&&&&&&" + C.DARK_GRAY + "&&&&&&" + C.GREEN + " .(((()))). ", padd + C.GRAY + "@@@&&&&&&&&" + C.DARK_GRAY + "&&&&&" + C.GREEN + " .((((((())))))). ", padd + C.GRAY + "@@@&&&&&" + C.DARK_GRAY + "&&&&&&&" + C.GREEN + " ((((((((())))))))) " + C.GRAY + " @", padd + C.GRAY + "@@@&&&&" + C.DARK_GRAY + "@@@@@&" + C.GREEN + " ((((((((-))))))))) " + C.GRAY + " @@", padd + C.GRAY + "@@@&&" + C.GREEN + " ((((((({ })))))))) " + C.GRAY + " &&@@@", padd + C.GRAY + "@@" + C.GREEN + " ((((((((-))))))))) " + C.DARK_GRAY + "&@@@@@" + C.GRAY + "&&&&@@@", padd + C.GRAY + "@" + C.GREEN + " ((((((((())))))))) " + C.DARK_GRAY + "&&&&&" + C.GRAY + "&&&&&&&@@@", padd + C.GRAY + "" + C.GREEN + " '((((((()))))))' " + C.DARK_GRAY + "&&&&&" + C.GRAY + "&&&&&&&&@@@", padd + C.GRAY + "" + C.GREEN + " '(((())))' " + C.DARK_GRAY + "&&&&&&&&" + C.GRAY + "&&&&&&&@@", padd + C.GRAY + " " + C.DARK_GRAY + "@@@" + C.GRAY + "@@@@@@@@@@@@@@"
|
||||||
|
};
|
||||||
|
//@done
|
||||||
|
Iris.info("Server type & version: " + Bukkit.getVersion());
|
||||||
|
Iris.info("Bukkit version: " + Bukkit.getBukkitVersion());
|
||||||
|
Iris.info("Java version: " + getJavaVersion());
|
||||||
|
for (int i = 0; i < info.length; i++) {
|
||||||
|
splash[i] += info[i];
|
||||||
|
}
|
||||||
|
|
||||||
public static void verbose(String string)
|
Iris.info("\n\n " + new KList<>(splash).toString("\n") + "\n");
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if(IrisSettings.get().getGeneral().isVerbose())
|
|
||||||
{
|
|
||||||
msg(C.GRAY + string);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(Throwable e)
|
if (lowMemoryMode) {
|
||||||
{
|
Iris.verbose("* Low Memory mode Activated! For better performance, allocate 4gb or more to this server.");
|
||||||
msg(C.GRAY + string);
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void success(String string)
|
if (!biome3d) {
|
||||||
{
|
Iris.verbose("* This version of minecraft does not support 3D biomes (1.15 and up). Iris will generate as normal, but biome colors will not vary underground & in the sky.");
|
||||||
msg(C.GREEN + string);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static void info(String string)
|
if (!customModels) {
|
||||||
{
|
Iris.verbose("* This version of minecraft does not support custom model data in loot items (1.14 and up). Iris will generate as normal, but loot will not have custom models.");
|
||||||
msg(C.WHITE + string);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void hit(long hits2)
|
if (!doesSupportAwareness()) {
|
||||||
{
|
Iris.verbose("* This version of minecraft does not support entity awareness.");
|
||||||
board.hits.put(hits2);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void splash()
|
@SuppressWarnings("deprecation")
|
||||||
{
|
public static void later(NastyRunnable object) {
|
||||||
if(!IrisSettings.get().getGeneral().isSplashLogoStartup())
|
Bukkit.getScheduler().scheduleAsyncDelayedTask(instance, () ->
|
||||||
{
|
{
|
||||||
return;
|
try {
|
||||||
}
|
object.run();
|
||||||
|
} catch (Throwable e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}, RNG.r.i(100, 1200));
|
||||||
|
}
|
||||||
|
|
||||||
// @NoArgsConstructor
|
public static int jobCount() {
|
||||||
String padd = Form.repeat(" ", 8);
|
return syncJobs.size();
|
||||||
String padd2 = Form.repeat(" ", 4);
|
}
|
||||||
String[] info = {"", "", "", "", "", padd2 + C.GREEN + " Iris", padd2 + C.GRAY + " by " + C.randomColor() + "V" + C.randomColor() + "o" + C.randomColor() + "l" + C.randomColor() + "m" + C.randomColor() + "i" + C.randomColor() + "t" + C.randomColor() + "S" + C.randomColor() + "o" + C.randomColor() + "f" + C.randomColor() + "t" + C.randomColor() + "w" + C.randomColor() + "a" + C.randomColor() + "r" + C.randomColor() + "e", padd2 + C.GRAY + " v" + getDescription().getVersion(),
|
|
||||||
};
|
|
||||||
String[] splash = {padd + C.GRAY + " @@@@@@@@@@@@@@" + C.DARK_GRAY + "@@@", padd + C.GRAY + " @@&&&&&&&&&" + C.DARK_GRAY + "&&&&&&" + C.GREEN + " .(((()))). ", padd + C.GRAY + "@@@&&&&&&&&" + C.DARK_GRAY + "&&&&&" + C.GREEN + " .((((((())))))). ", padd + C.GRAY + "@@@&&&&&" + C.DARK_GRAY + "&&&&&&&" + C.GREEN + " ((((((((())))))))) " + C.GRAY + " @", padd + C.GRAY + "@@@&&&&" + C.DARK_GRAY + "@@@@@&" + C.GREEN + " ((((((((-))))))))) " + C.GRAY + " @@", padd + C.GRAY + "@@@&&" + C.GREEN + " ((((((({ })))))))) " + C.GRAY + " &&@@@", padd + C.GRAY + "@@" + C.GREEN + " ((((((((-))))))))) " + C.DARK_GRAY + "&@@@@@" + C.GRAY + "&&&&@@@", padd + C.GRAY + "@" + C.GREEN + " ((((((((())))))))) " + C.DARK_GRAY + "&&&&&" + C.GRAY + "&&&&&&&@@@", padd + C.GRAY + "" + C.GREEN + " '((((((()))))))' " + C.DARK_GRAY + "&&&&&" + C.GRAY + "&&&&&&&&@@@", padd + C.GRAY + "" + C.GREEN + " '(((())))' " + C.DARK_GRAY + "&&&&&&&&" + C.GRAY + "&&&&&&&@@", padd + C.GRAY + " " + C.DARK_GRAY + "@@@" + C.GRAY + "@@@@@@@@@@@@@@"
|
|
||||||
};
|
|
||||||
//@done
|
|
||||||
Iris.info("Server type & version: " + Bukkit.getVersion());
|
|
||||||
Iris.info("Bukkit version: " + Bukkit.getBukkitVersion());
|
|
||||||
Iris.info("Java version: " + getJavaVersion());
|
|
||||||
for(int i = 0; i < info.length; i++)
|
|
||||||
{
|
|
||||||
splash[i] += info[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
Iris.info("\n\n " + new KList<>(splash).toString("\n") + "\n");
|
public static void clearQueues() {
|
||||||
|
synchronized (syncJobs) {
|
||||||
|
syncJobs.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(lowMemoryMode)
|
private static int getJavaVersion() {
|
||||||
{
|
String version = System.getProperty("java.version");
|
||||||
Iris.verbose("* Low Memory mode Activated! For better performance, allocate 4gb or more to this server.");
|
if (version.startsWith("1.")) {
|
||||||
}
|
version = version.substring(2, 3);
|
||||||
|
} else {
|
||||||
if(!biome3d)
|
int dot = version.indexOf(".");
|
||||||
{
|
if (dot != -1) {
|
||||||
Iris.verbose("* This version of minecraft does not support 3D biomes (1.15 and up). Iris will generate as normal, but biome colors will not vary underground & in the sky.");
|
version = version.substring(0, dot);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if(!customModels)
|
return Integer.parseInt(version);
|
||||||
{
|
}
|
||||||
Iris.verbose("* This version of minecraft does not support custom model data in loot items (1.14 and up). Iris will generate as normal, but loot will not have custom models.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!doesSupportAwareness())
|
|
||||||
{
|
|
||||||
Iris.verbose("* This version of minecraft does not support entity awareness.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public static void later(NastyRunnable object)
|
|
||||||
{
|
|
||||||
Bukkit.getScheduler().scheduleAsyncDelayedTask(instance, () ->
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
object.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(Throwable e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}, RNG.r.i(100, 1200));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int jobCount()
|
|
||||||
{
|
|
||||||
return syncJobs.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void clearQueues()
|
|
||||||
{
|
|
||||||
synchronized(syncJobs)
|
|
||||||
{
|
|
||||||
syncJobs.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int getJavaVersion() {
|
|
||||||
String version = System.getProperty("java.version");
|
|
||||||
if(version.startsWith("1.")) {
|
|
||||||
version = version.substring(2, 3);
|
|
||||||
} else {
|
|
||||||
int dot = version.indexOf(".");
|
|
||||||
if(dot != -1) { version = version.substring(0, dot); }
|
|
||||||
} return Integer.parseInt(version);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isMCA() {
|
public boolean isMCA() {
|
||||||
return IrisSettings.get().getGenerator().isMcaPregenerator();
|
return IrisSettings.get().getGenerator().isMcaPregenerator();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,258 +8,215 @@ import java.io.File;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class IrisSettings
|
public class IrisSettings {
|
||||||
{
|
public static transient IrisSettings settings;
|
||||||
public static transient IrisSettings settings;
|
private IrisSettingsCache cache = new IrisSettingsCache();
|
||||||
private IrisSettingsCache cache = new IrisSettingsCache();
|
private IrisSettingsConcurrency concurrency = new IrisSettingsConcurrency();
|
||||||
private IrisSettingsConcurrency concurrency = new IrisSettingsConcurrency();
|
private IrisSettingsParallax parallax = new IrisSettingsParallax();
|
||||||
private IrisSettingsParallax parallax = new IrisSettingsParallax();
|
private IrisSettingsGeneral general = new IrisSettingsGeneral();
|
||||||
private IrisSettingsGeneral general = new IrisSettingsGeneral();
|
private IrisSettingsGUI gui = new IrisSettingsGUI();
|
||||||
private IrisSettingsGUI gui = new IrisSettingsGUI();
|
private IrisSettingsGenerator generator = new IrisSettingsGenerator();
|
||||||
private IrisSettingsGenerator generator = new IrisSettingsGenerator();
|
private IrisSettingsStudio studio = new IrisSettingsStudio();
|
||||||
private IrisSettingsStudio studio = new IrisSettingsStudio();
|
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public int configurationVersion = 3;
|
public int configurationVersion = 3;
|
||||||
|
|
||||||
public boolean isStudio() {
|
public boolean isStudio() {
|
||||||
return getStudio().isStudio();
|
return getStudio().isStudio();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUseServerLaunchedGuis() {
|
public boolean isUseServerLaunchedGuis() {
|
||||||
return getGui().isUseServerLaunchedGuis();
|
return getGui().isUseServerLaunchedGuis();
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getParallaxRegionEvictionMS() {
|
public long getParallaxRegionEvictionMS() {
|
||||||
return getParallax().getParallaxRegionEvictionMS();
|
return getParallax().getParallaxRegionEvictionMS();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public static class IrisSettingsCache
|
public static class IrisSettingsCache {
|
||||||
{
|
@DontObfuscate
|
||||||
@DontObfuscate
|
public int streamingCacheSize = 8192;
|
||||||
public int streamingCacheSize = 8192;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public static class IrisSettingsConcurrency
|
public static class IrisSettingsConcurrency {
|
||||||
{
|
@DontObfuscate
|
||||||
@DontObfuscate
|
public int threadCount = -1;
|
||||||
public int threadCount = -1;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public static class IrisSettingsParallax
|
public static class IrisSettingsParallax {
|
||||||
{
|
@DontObfuscate
|
||||||
@DontObfuscate
|
public int parallaxRegionEvictionMS = 15000;
|
||||||
public int parallaxRegionEvictionMS = 15000;
|
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public int parallaxChunkEvictionMS = 5000;
|
public int parallaxChunkEvictionMS = 5000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public static class IrisSettingsGeneral
|
public static class IrisSettingsGeneral {
|
||||||
{
|
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public boolean commandSounds = true;
|
public boolean commandSounds = true;
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public boolean verbose = false;
|
public boolean verbose = false;
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public boolean ignoreWorldEdit = false;
|
public boolean ignoreWorldEdit = false;
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public boolean disableNMS = false;
|
public boolean disableNMS = false;
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public boolean pluginMetrics = true;
|
public boolean pluginMetrics = true;
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public boolean splashLogoStartup = true;
|
public boolean splashLogoStartup = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public static class IrisSettingsGUI
|
public static class IrisSettingsGUI {
|
||||||
{
|
@DontObfuscate
|
||||||
@DontObfuscate
|
public boolean useServerLaunchedGuis = true;
|
||||||
public boolean useServerLaunchedGuis = true;
|
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public boolean maximumPregenGuiFPS = false;
|
public boolean maximumPregenGuiFPS = false;
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public boolean localPregenGui = true;
|
public boolean localPregenGui = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public static class IrisSettingsGenerator
|
public static class IrisSettingsGenerator {
|
||||||
{
|
@DontObfuscate
|
||||||
@DontObfuscate
|
public String defaultWorldType = "overworld";
|
||||||
public String defaultWorldType = "overworld";
|
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public boolean mcaPregenerator = false;
|
public boolean mcaPregenerator = false;
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public boolean systemEffects = true;
|
public boolean systemEffects = true;
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public boolean systemEntitySpawnOverrides = true;
|
public boolean systemEntitySpawnOverrides = true;
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public boolean systemEntityInitialSpawns = true;
|
public boolean systemEntityInitialSpawns = true;
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public int maxBiomeChildDepth = 5;
|
public int maxBiomeChildDepth = 5;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public static class IrisSettingsStudio
|
public static class IrisSettingsStudio {
|
||||||
{
|
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public boolean studio = true;
|
public boolean studio = true;
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public boolean openVSCode = true;
|
public boolean openVSCode = true;
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public boolean disableTimeAndWeather = true;
|
public boolean disableTimeAndWeather = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IrisSettings get()
|
public static IrisSettings get() {
|
||||||
{
|
if (settings != null) {
|
||||||
if(settings != null)
|
return settings;
|
||||||
{
|
}
|
||||||
return settings;
|
|
||||||
}
|
|
||||||
|
|
||||||
IrisSettings defaults = new IrisSettings();
|
IrisSettings defaults = new IrisSettings();
|
||||||
JSONObject def = new JSONObject(new Gson().toJson(defaults));
|
JSONObject def = new JSONObject(new Gson().toJson(defaults));
|
||||||
if(settings == null)
|
if (settings == null) {
|
||||||
{
|
settings = new IrisSettings();
|
||||||
settings = new IrisSettings();
|
|
||||||
|
|
||||||
File s = Iris.instance.getDataFile("settings.json");
|
File s = Iris.instance.getDataFile("settings.json");
|
||||||
|
|
||||||
if(!s.exists())
|
if (!s.exists()) {
|
||||||
{
|
try {
|
||||||
try
|
IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4));
|
||||||
{
|
} catch (JSONException | IOException e) {
|
||||||
IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4));
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
String ss = IO.readAll(s);
|
||||||
|
settings = new Gson().fromJson(ss, IrisSettings.class);
|
||||||
|
|
||||||
catch(JSONException | IOException e)
|
J.a(() ->
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
try {
|
||||||
}
|
JSONObject j = new JSONObject(ss);
|
||||||
}
|
boolean u = false;
|
||||||
|
for (String i : def.keySet()) {
|
||||||
|
if (!j.has(i)) {
|
||||||
|
u = true;
|
||||||
|
j.put(i, def.get(i));
|
||||||
|
Iris.warn("Adding new config key: " + i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
else
|
for (String i : new KSet<>(j.keySet())) {
|
||||||
{
|
if (!def.has(i)) {
|
||||||
try
|
u = true;
|
||||||
{
|
j.remove(i);
|
||||||
String ss = IO.readAll(s);
|
Iris.warn("Removing unused config key: " + i);
|
||||||
settings = new Gson().fromJson(ss, IrisSettings.class);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
J.a(() ->
|
if (u) {
|
||||||
{
|
try {
|
||||||
try
|
IO.writeAll(s, j.toString(4));
|
||||||
{
|
Iris.info("Updated Configuration Files");
|
||||||
JSONObject j = new JSONObject(ss);
|
} catch (Throwable e) {
|
||||||
boolean u = false;
|
e.printStackTrace();
|
||||||
for(String i : def.keySet())
|
}
|
||||||
{
|
}
|
||||||
if(!j.has(i))
|
} catch (Throwable ee) {
|
||||||
{
|
Iris.error("Configuration Error in settings.json! " + ee.getClass().getSimpleName() + ": " + ee.getMessage());
|
||||||
u = true;
|
Iris.warn("Attempting to fix configuration while retaining valid in-memory settings...");
|
||||||
j.put(i, def.get(i));
|
|
||||||
Iris.warn("Adding new config key: " + i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(String i : new KSet<>(j.keySet()))
|
try {
|
||||||
{
|
IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4));
|
||||||
if(!def.has(i))
|
Iris.info("Configuration Fixed!");
|
||||||
{
|
} catch (IOException e) {
|
||||||
u = true;
|
e.printStackTrace();
|
||||||
j.remove(i);
|
Iris.error("ERROR! CONFIGURATION IMPOSSIBLE TO READ! Using an unmodifiable configuration from memory. Please delete the settings.json at some point to try to restore configurability!");
|
||||||
Iris.warn("Removing unused config key: " + i);
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
} catch (Throwable ee) {
|
||||||
|
Iris.error("Configuration Error in settings.json! " + ee.getClass().getSimpleName() + ": " + ee.getMessage());
|
||||||
|
Iris.warn("Attempting to fix configuration while retaining valid in-memory settings...");
|
||||||
|
|
||||||
if(u)
|
try {
|
||||||
{
|
IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4));
|
||||||
try
|
Iris.info("Configuration Fixed!");
|
||||||
{
|
} catch (IOException e) {
|
||||||
IO.writeAll(s, j.toString(4));
|
e.printStackTrace();
|
||||||
Iris.info("Updated Configuration Files");
|
Iris.error("ERROR! CONFIGURATION IMPOSSIBLE TO READ! Using an unmodifiable configuration from memory. Please delete the settings.json at some point to try to restore configurability!");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
catch(Throwable e)
|
if (!s.exists()) {
|
||||||
{
|
try {
|
||||||
e.printStackTrace();
|
IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4));
|
||||||
}
|
} catch (JSONException | IOException e) {
|
||||||
}
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
catch(Throwable ee)
|
return settings;
|
||||||
{
|
}
|
||||||
Iris.error("Configuration Error in settings.json! " + ee.getClass().getSimpleName() + ": " + ee.getMessage());
|
|
||||||
Iris.warn("Attempting to fix configuration while retaining valid in-memory settings...");
|
|
||||||
|
|
||||||
try {
|
public static void invalidate() {
|
||||||
IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4));
|
synchronized (settings) {
|
||||||
Iris.info("Configuration Fixed!");
|
settings = null;
|
||||||
} catch (IOException e) {
|
}
|
||||||
e.printStackTrace();
|
}
|
||||||
Iris.error("ERROR! CONFIGURATION IMPOSSIBLE TO READ! Using an unmodifiable configuration from memory. Please delete the settings.json at some point to try to restore configurability!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(Throwable ee)
|
|
||||||
{
|
|
||||||
Iris.error("Configuration Error in settings.json! " + ee.getClass().getSimpleName() + ": " + ee.getMessage());
|
|
||||||
Iris.warn("Attempting to fix configuration while retaining valid in-memory settings...");
|
|
||||||
|
|
||||||
try {
|
|
||||||
IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4));
|
|
||||||
Iris.info("Configuration Fixed!");
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
Iris.error("ERROR! CONFIGURATION IMPOSSIBLE TO READ! Using an unmodifiable configuration from memory. Please delete the settings.json at some point to try to restore configurability!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!s.exists())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4));
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(JSONException | IOException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return settings;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void invalidate()
|
|
||||||
{
|
|
||||||
synchronized(settings)
|
|
||||||
{
|
|
||||||
settings = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,377 +12,340 @@ import com.volmit.iris.scaffold.data.DataProvider;
|
|||||||
import com.volmit.iris.scaffold.engine.Engine;
|
import com.volmit.iris.scaffold.engine.Engine;
|
||||||
import com.volmit.iris.scaffold.stream.ProceduralStream;
|
import com.volmit.iris.scaffold.stream.ProceduralStream;
|
||||||
import com.volmit.iris.scaffold.stream.interpolation.Interpolated;
|
import com.volmit.iris.scaffold.stream.interpolation.Interpolated;
|
||||||
import com.volmit.iris.util.*;
|
import com.volmit.iris.util.CaveResult;
|
||||||
|
import com.volmit.iris.util.KList;
|
||||||
|
import com.volmit.iris.util.M;
|
||||||
|
import com.volmit.iris.util.RNG;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.bukkit.Material;
|
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;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class IrisComplex implements DataProvider
|
public class IrisComplex implements DataProvider {
|
||||||
{
|
private RNG rng;
|
||||||
private RNG rng;
|
private double fluidHeight;
|
||||||
private double fluidHeight;
|
private IrisDataManager data;
|
||||||
private IrisDataManager data;
|
private KList<IrisGenerator> generators;
|
||||||
private KList<IrisGenerator> generators;
|
private static final BlockData AIR = Material.AIR.createBlockData();
|
||||||
private static final BlockData AIR = Material.AIR.createBlockData();
|
private ProceduralStream<IrisRegion> regionStream;
|
||||||
private ProceduralStream<IrisRegion> regionStream;
|
private ProceduralStream<InferredType> bridgeStream;
|
||||||
private ProceduralStream<InferredType> bridgeStream;
|
private ProceduralStream<IrisBiome> landBiomeStream;
|
||||||
private ProceduralStream<IrisBiome> landBiomeStream;
|
private ProceduralStream<IrisBiome> caveBiomeStream;
|
||||||
private ProceduralStream<IrisBiome> caveBiomeStream;
|
private ProceduralStream<IrisBiome> seaBiomeStream;
|
||||||
private ProceduralStream<IrisBiome> seaBiomeStream;
|
private ProceduralStream<IrisBiome> shoreBiomeStream;
|
||||||
private ProceduralStream<IrisBiome> shoreBiomeStream;
|
private ProceduralStream<IrisBiome> baseBiomeStream;
|
||||||
private ProceduralStream<IrisBiome> baseBiomeStream;
|
private ProceduralStream<IrisBiome> trueBiomeStream;
|
||||||
private ProceduralStream<IrisBiome> trueBiomeStream;
|
private ProceduralStream<Biome> trueBiomeDerivativeStream;
|
||||||
private ProceduralStream<Biome> trueBiomeDerivativeStream;
|
private ProceduralStream<Double> heightStream;
|
||||||
private ProceduralStream<Double> heightStream;
|
private ProceduralStream<Double> objectChanceStream;
|
||||||
private ProceduralStream<Double> objectChanceStream;
|
private ProceduralStream<Double> maxHeightStream;
|
||||||
private ProceduralStream<Double> maxHeightStream;
|
private ProceduralStream<Double> overlayStream;
|
||||||
private ProceduralStream<Double> overlayStream;
|
private ProceduralStream<Double> heightFluidStream;
|
||||||
private ProceduralStream<Double> heightFluidStream;
|
private ProceduralStream<Integer> trueHeightStream;
|
||||||
private ProceduralStream<Integer> trueHeightStream;
|
private ProceduralStream<Double> slopeStream;
|
||||||
private ProceduralStream<Double> slopeStream;
|
private ProceduralStream<RNG> rngStream;
|
||||||
private ProceduralStream<RNG> rngStream;
|
private ProceduralStream<RNG> chunkRngStream;
|
||||||
private ProceduralStream<RNG> chunkRngStream;
|
private ProceduralStream<IrisDecorator> terrainSurfaceDecoration;
|
||||||
private ProceduralStream<IrisDecorator> terrainSurfaceDecoration;
|
private ProceduralStream<IrisDecorator> terrainCeilingDecoration;
|
||||||
private ProceduralStream<IrisDecorator> terrainCeilingDecoration;
|
private ProceduralStream<IrisDecorator> terrainCaveSurfaceDecoration;
|
||||||
private ProceduralStream<IrisDecorator> terrainCaveSurfaceDecoration;
|
private ProceduralStream<IrisDecorator> terrainCaveCeilingDecoration;
|
||||||
private ProceduralStream<IrisDecorator> terrainCaveCeilingDecoration;
|
private ProceduralStream<IrisDecorator> seaSurfaceDecoration;
|
||||||
private ProceduralStream<IrisDecorator> seaSurfaceDecoration;
|
private ProceduralStream<IrisDecorator> seaFloorDecoration;
|
||||||
private ProceduralStream<IrisDecorator> seaFloorDecoration;
|
private ProceduralStream<IrisDecorator> shoreSurfaceDecoration;
|
||||||
private ProceduralStream<IrisDecorator> shoreSurfaceDecoration;
|
private ProceduralStream<BlockData> rockStream;
|
||||||
private ProceduralStream<BlockData> rockStream;
|
private ProceduralStream<BlockData> fluidStream;
|
||||||
private ProceduralStream<BlockData> fluidStream;
|
private IrisBiome focus;
|
||||||
private IrisBiome focus;
|
|
||||||
|
|
||||||
public ProceduralStream<IrisBiome> getBiomeStream(InferredType type)
|
public ProceduralStream<IrisBiome> getBiomeStream(InferredType type) {
|
||||||
{
|
switch (type) {
|
||||||
switch(type)
|
case CAVE:
|
||||||
{
|
return caveBiomeStream;
|
||||||
case CAVE:
|
case LAND:
|
||||||
return caveBiomeStream;
|
return landBiomeStream;
|
||||||
case LAND:
|
case SEA:
|
||||||
return landBiomeStream;
|
return seaBiomeStream;
|
||||||
case SEA:
|
case SHORE:
|
||||||
return seaBiomeStream;
|
return shoreBiomeStream;
|
||||||
case SHORE:
|
case DEFER:
|
||||||
return shoreBiomeStream;
|
case LAKE:
|
||||||
case DEFER:
|
case RIVER:
|
||||||
case LAKE:
|
default:
|
||||||
case RIVER:
|
break;
|
||||||
default:
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IrisComplex(Engine engine)
|
public IrisComplex(Engine engine) {
|
||||||
{
|
int cacheSize = IrisSettings.get().getCache().getStreamingCacheSize();
|
||||||
int cacheSize = IrisSettings.get().getCache().getStreamingCacheSize();
|
this.rng = new RNG(engine.getWorld().getSeed());
|
||||||
this.rng = new RNG(engine.getWorld().getSeed());
|
this.data = engine.getData();
|
||||||
this.data = engine.getData();
|
double height = engine.getHeight();
|
||||||
double height = engine.getHeight();
|
fluidHeight = engine.getDimension().getFluidHeight();
|
||||||
fluidHeight = engine.getDimension().getFluidHeight();
|
generators = new KList<>();
|
||||||
generators = new KList<>();
|
focus = engine.getFocus();
|
||||||
focus = engine.getFocus();
|
IrisRegion focusRegion = focus != null ? findRegion(focus, engine) : null;
|
||||||
IrisRegion focusRegion = focus != null ? findRegion(focus, engine) : null;
|
RNG rng = new RNG(engine.getWorld().getSeed());
|
||||||
RNG rng = new RNG(engine.getWorld().getSeed());
|
//@builder
|
||||||
//@builder
|
engine.getDimension().getRegions().forEach((i) -> data.getRegionLoader().load(i)
|
||||||
engine.getDimension().getRegions().forEach((i) -> data.getRegionLoader().load(i)
|
.getAllBiomes(this).forEach((b) -> b
|
||||||
.getAllBiomes(this).forEach((b) -> b
|
.getGenerators()
|
||||||
.getGenerators()
|
.forEach((c) -> registerGenerator(c.getCachedGenerator(this)))));
|
||||||
.forEach((c) -> registerGenerator(c.getCachedGenerator(this)))));
|
overlayStream = ProceduralStream.ofDouble((x, z) -> 0D);
|
||||||
overlayStream = ProceduralStream.ofDouble((x, z) -> 0D);
|
engine.getDimension().getOverlayNoise().forEach((i) -> overlayStream.add((x, z) -> i.get(rng, x, z)));
|
||||||
engine.getDimension().getOverlayNoise().forEach((i) -> overlayStream.add((x, z) -> i.get(rng, x, z)));
|
rngStream = ProceduralStream.of((x, z) -> new RNG(((x.longValue()) << 32) | (z.longValue() & 0xffffffffL))
|
||||||
rngStream = ProceduralStream.of((x, z) -> new RNG(((x.longValue()) << 32) | (z.longValue() & 0xffffffffL))
|
.nextParallelRNG(engine.getWorld().getSeed()), Interpolated.RNG);
|
||||||
.nextParallelRNG(engine.getWorld().getSeed()), Interpolated.RNG);
|
chunkRngStream = rngStream.blockToChunkCoords();
|
||||||
chunkRngStream = rngStream.blockToChunkCoords();
|
rockStream = engine.getDimension().getRockPalette().getLayerGenerator(rng.nextParallelRNG(45), data).stream()
|
||||||
rockStream = engine.getDimension().getRockPalette().getLayerGenerator(rng.nextParallelRNG(45), data).stream()
|
.select(engine.getDimension().getRockPalette().getBlockData(data));
|
||||||
.select(engine.getDimension().getRockPalette().getBlockData(data));
|
fluidStream = engine.getDimension().getFluidPalette().getLayerGenerator(rng.nextParallelRNG(78), data).stream()
|
||||||
fluidStream = engine.getDimension().getFluidPalette().getLayerGenerator(rng.nextParallelRNG(78), data).stream()
|
.select(engine.getDimension().getFluidPalette().getBlockData(data));
|
||||||
.select(engine.getDimension().getFluidPalette().getBlockData(data));
|
regionStream = focusRegion != null ?
|
||||||
regionStream = focusRegion != null ?
|
ProceduralStream.of((x, z) -> focusRegion,
|
||||||
ProceduralStream.of((x,z) -> focusRegion,
|
Interpolated.of(a -> 0D, a -> focusRegion))
|
||||||
Interpolated.of(a -> 0D, a -> focusRegion))
|
: engine.getDimension().getRegionStyle().create(rng.nextParallelRNG(883)).stream()
|
||||||
: engine.getDimension().getRegionStyle().create(rng.nextParallelRNG(883)).stream()
|
.zoom(engine.getDimension().getRegionZoom())
|
||||||
.zoom(engine.getDimension().getRegionZoom())
|
.selectRarity(engine.getDimension().getRegions())
|
||||||
.selectRarity(engine.getDimension().getRegions())
|
.convertCached((s) -> data.getRegionLoader().load(s)).cache2D(cacheSize);
|
||||||
.convertCached((s) -> data.getRegionLoader().load(s)).cache2D(cacheSize);
|
caveBiomeStream = regionStream.convert((r)
|
||||||
caveBiomeStream = regionStream.convert((r)
|
-> engine.getDimension().getCaveBiomeStyle().create(rng.nextParallelRNG(1221)).stream()
|
||||||
-> engine.getDimension().getCaveBiomeStyle().create(rng.nextParallelRNG(1221)).stream()
|
.zoom(r.getCaveBiomeZoom())
|
||||||
.zoom(r.getCaveBiomeZoom())
|
.selectRarity(r.getCaveBiomes())
|
||||||
.selectRarity(r.getCaveBiomes())
|
.onNull("")
|
||||||
.onNull("")
|
.convertCached((s) -> {
|
||||||
.convertCached((s) -> {
|
if (s.isEmpty()) {
|
||||||
if(s.isEmpty())
|
return new IrisBiome();
|
||||||
{
|
}
|
||||||
return new IrisBiome();
|
|
||||||
}
|
|
||||||
|
|
||||||
return data.getBiomeLoader().load(s)
|
return data.getBiomeLoader().load(s)
|
||||||
.setInferredType(InferredType.CAVE);
|
.setInferredType(InferredType.CAVE);
|
||||||
})
|
})
|
||||||
).convertAware2D(ProceduralStream::get).cache2D(cacheSize);
|
).convertAware2D(ProceduralStream::get).cache2D(cacheSize);
|
||||||
landBiomeStream = regionStream.convert((r)
|
landBiomeStream = regionStream.convert((r)
|
||||||
-> engine.getDimension().getLandBiomeStyle().create(rng.nextParallelRNG(234234234)).stream()
|
-> engine.getDimension().getLandBiomeStyle().create(rng.nextParallelRNG(234234234)).stream()
|
||||||
.zoom(r.getLandBiomeZoom())
|
.zoom(r.getLandBiomeZoom())
|
||||||
.selectRarity(r.getLandBiomes())
|
.selectRarity(r.getLandBiomes())
|
||||||
.convertCached((s) -> data.getBiomeLoader().load(s)
|
.convertCached((s) -> data.getBiomeLoader().load(s)
|
||||||
.setInferredType(InferredType.LAND))
|
.setInferredType(InferredType.LAND))
|
||||||
).convertAware2D(ProceduralStream::get)
|
).convertAware2D(ProceduralStream::get)
|
||||||
.cache2D(cacheSize);
|
.cache2D(cacheSize);
|
||||||
seaBiomeStream = regionStream.convert((r)
|
seaBiomeStream = regionStream.convert((r)
|
||||||
-> engine.getDimension().getSeaBiomeStyle().create(rng.nextParallelRNG(11232323)).stream()
|
-> engine.getDimension().getSeaBiomeStyle().create(rng.nextParallelRNG(11232323)).stream()
|
||||||
.zoom(r.getSeaBiomeZoom())
|
.zoom(r.getSeaBiomeZoom())
|
||||||
.selectRarity(r.getSeaBiomes())
|
.selectRarity(r.getSeaBiomes())
|
||||||
.convertCached((s) -> data.getBiomeLoader().load(s)
|
.convertCached((s) -> data.getBiomeLoader().load(s)
|
||||||
.setInferredType(InferredType.SEA))
|
.setInferredType(InferredType.SEA))
|
||||||
).convertAware2D(ProceduralStream::get)
|
).convertAware2D(ProceduralStream::get)
|
||||||
.cache2D(cacheSize);
|
.cache2D(cacheSize);
|
||||||
shoreBiomeStream = regionStream.convert((r)
|
shoreBiomeStream = regionStream.convert((r)
|
||||||
-> engine.getDimension().getShoreBiomeStyle().create(rng.nextParallelRNG(7787845)).stream()
|
-> engine.getDimension().getShoreBiomeStyle().create(rng.nextParallelRNG(7787845)).stream()
|
||||||
.zoom(r.getShoreBiomeZoom())
|
.zoom(r.getShoreBiomeZoom())
|
||||||
.selectRarity(r.getShoreBiomes())
|
.selectRarity(r.getShoreBiomes())
|
||||||
.convertCached((s) -> data.getBiomeLoader().load(s)
|
.convertCached((s) -> data.getBiomeLoader().load(s)
|
||||||
.setInferredType(InferredType.SHORE))
|
.setInferredType(InferredType.SHORE))
|
||||||
).convertAware2D(ProceduralStream::get).cache2D(cacheSize);
|
).convertAware2D(ProceduralStream::get).cache2D(cacheSize);
|
||||||
bridgeStream = focus != null ? ProceduralStream.of((x,z)->focus.getInferredType(),
|
bridgeStream = focus != null ? ProceduralStream.of((x, z) -> focus.getInferredType(),
|
||||||
Interpolated.of(a -> 0D, a -> focus.getInferredType())) :
|
Interpolated.of(a -> 0D, a -> focus.getInferredType())) :
|
||||||
engine.getDimension().getContinentalStyle().create(rng.nextParallelRNG(234234565))
|
engine.getDimension().getContinentalStyle().create(rng.nextParallelRNG(234234565))
|
||||||
.bake().scale(1D / engine.getDimension().getContinentZoom()).bake().stream()
|
.bake().scale(1D / engine.getDimension().getContinentZoom()).bake().stream()
|
||||||
.convert((v) -> v >= engine.getDimension().getLandChance() ? InferredType.SEA : InferredType.LAND);
|
.convert((v) -> v >= engine.getDimension().getLandChance() ? InferredType.SEA : InferredType.LAND);
|
||||||
baseBiomeStream = focus != null ? ProceduralStream.of((x,z) -> focus,
|
baseBiomeStream = focus != null ? ProceduralStream.of((x, z) -> focus,
|
||||||
Interpolated.of(a -> 0D, a -> focus)) :
|
Interpolated.of(a -> 0D, a -> focus)) :
|
||||||
bridgeStream.convertAware2D((t, x, z) -> t.equals(InferredType.SEA)
|
bridgeStream.convertAware2D((t, x, z) -> t.equals(InferredType.SEA)
|
||||||
? seaBiomeStream.get(x, z) : landBiomeStream.get(x, z))
|
? seaBiomeStream.get(x, z) : landBiomeStream.get(x, z))
|
||||||
.convertAware2D(this::implode).cache2D(cacheSize);
|
.convertAware2D(this::implode).cache2D(cacheSize);
|
||||||
heightStream = ProceduralStream.of((x, z) -> {
|
heightStream = ProceduralStream.of((x, z) -> {
|
||||||
IrisBiome b = focus != null ? focus : baseBiomeStream.get(x, z);
|
IrisBiome b = focus != null ? focus : baseBiomeStream.get(x, z);
|
||||||
return getHeight(engine, b, x, z, engine.getWorld().getSeed());
|
return getHeight(engine, b, x, z, engine.getWorld().getSeed());
|
||||||
}, Interpolated.DOUBLE).cache2D(cacheSize);
|
}, Interpolated.DOUBLE).cache2D(cacheSize);
|
||||||
slopeStream = heightStream.slope(3).interpolate().bilinear(3, 3).cache2D(cacheSize);
|
slopeStream = heightStream.slope(3).interpolate().bilinear(3, 3).cache2D(cacheSize);
|
||||||
objectChanceStream = ProceduralStream.ofDouble((x, z) -> {
|
objectChanceStream = ProceduralStream.ofDouble((x, z) -> {
|
||||||
AtomicDouble str = new AtomicDouble(1D);
|
AtomicDouble str = new AtomicDouble(1D);
|
||||||
engine.getFramework().getEngineParallax().forEachFeature(x, z, (i)
|
engine.getFramework().getEngineParallax().forEachFeature(x, z, (i)
|
||||||
-> str.set(Math.min(str.get(), i.getObjectChanceModifier(x, z))));
|
-> str.set(Math.min(str.get(), i.getObjectChanceModifier(x, z))));
|
||||||
return str.get();
|
return str.get();
|
||||||
});
|
});
|
||||||
|
|
||||||
trueBiomeStream = focus != null ? ProceduralStream.of((x,y) -> focus, Interpolated.of(a -> 0D,
|
trueBiomeStream = focus != null ? ProceduralStream.of((x, y) -> focus, Interpolated.of(a -> 0D,
|
||||||
b -> focus)) : heightStream
|
b -> focus)) : heightStream
|
||||||
.convertAware2D((h, x, z) ->
|
.convertAware2D((h, x, z) ->
|
||||||
fixBiomeType(h, baseBiomeStream.get(x, z),
|
fixBiomeType(h, baseBiomeStream.get(x, z),
|
||||||
regionStream.get(x, z), x, z, fluidHeight)).cache2D(cacheSize);
|
regionStream.get(x, z), x, z, fluidHeight)).cache2D(cacheSize);
|
||||||
trueBiomeDerivativeStream = trueBiomeStream.convert(IrisBiome::getDerivative).cache2D(cacheSize);
|
trueBiomeDerivativeStream = trueBiomeStream.convert(IrisBiome::getDerivative).cache2D(cacheSize);
|
||||||
heightFluidStream = heightStream.max(fluidHeight).cache2D(cacheSize);
|
heightFluidStream = heightStream.max(fluidHeight).cache2D(cacheSize);
|
||||||
maxHeightStream = ProceduralStream.ofDouble((x, z) -> height);
|
maxHeightStream = ProceduralStream.ofDouble((x, z) -> height);
|
||||||
terrainSurfaceDecoration = trueBiomeStream
|
terrainSurfaceDecoration = trueBiomeStream
|
||||||
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.NONE));
|
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.NONE));
|
||||||
terrainCeilingDecoration = trueBiomeStream
|
terrainCeilingDecoration = trueBiomeStream
|
||||||
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.CEILING));
|
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.CEILING));
|
||||||
terrainCaveSurfaceDecoration = caveBiomeStream
|
terrainCaveSurfaceDecoration = caveBiomeStream
|
||||||
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.NONE));
|
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.NONE));
|
||||||
terrainCaveCeilingDecoration = caveBiomeStream
|
terrainCaveCeilingDecoration = caveBiomeStream
|
||||||
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.CEILING));
|
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.CEILING));
|
||||||
shoreSurfaceDecoration = trueBiomeStream
|
shoreSurfaceDecoration = trueBiomeStream
|
||||||
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.SHORE_LINE));
|
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.SHORE_LINE));
|
||||||
seaSurfaceDecoration = trueBiomeStream
|
seaSurfaceDecoration = trueBiomeStream
|
||||||
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.SEA_SURFACE));
|
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.SEA_SURFACE));
|
||||||
seaFloorDecoration = trueBiomeStream
|
seaFloorDecoration = trueBiomeStream
|
||||||
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.SEA_FLOOR));
|
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.SEA_FLOOR));
|
||||||
trueHeightStream = ProceduralStream.of((x, z) -> {
|
trueHeightStream = ProceduralStream.of((x, z) -> {
|
||||||
int rx = (int) Math.round(engine.modifyX(x));
|
int rx = (int) Math.round(engine.modifyX(x));
|
||||||
int rz = (int) Math.round(engine.modifyZ(z));
|
int rz = (int) Math.round(engine.modifyZ(z));
|
||||||
int heightf = (int) Math.round(getHeightStream().get(rx, rz));
|
int heightf = (int) Math.round(getHeightStream().get(rx, rz));
|
||||||
int m = heightf;
|
int m = heightf;
|
||||||
|
|
||||||
if(engine.getDimension().isCarving())
|
if (engine.getDimension().isCarving()) {
|
||||||
{
|
if (engine.getDimension().isCarved(rx, m, rz, ((IrisTerrainActuator) engine.getFramework().getTerrainActuator()).getRng(), heightf)) {
|
||||||
if(engine.getDimension().isCarved(rx, m, rz, ((IrisTerrainActuator)engine.getFramework().getTerrainActuator()).getRng(), heightf))
|
m--;
|
||||||
{
|
|
||||||
m--;
|
|
||||||
|
|
||||||
while(engine.getDimension().isCarved(rx, m, rz, ((IrisTerrainActuator)engine.getFramework().getTerrainActuator()).getRng(), heightf))
|
while (engine.getDimension().isCarved(rx, m, rz, ((IrisTerrainActuator) engine.getFramework().getTerrainActuator()).getRng(), heightf)) {
|
||||||
{
|
m--;
|
||||||
m--;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(engine.getDimension().isCaves())
|
if (engine.getDimension().isCaves()) {
|
||||||
{
|
KList<CaveResult> caves = ((IrisCaveModifier) engine.getFramework().getCaveModifier()).genCaves(rx, rz, 0, 0, null);
|
||||||
KList<CaveResult> caves = ((IrisCaveModifier)engine.getFramework().getCaveModifier()).genCaves(rx, rz, 0, 0, null);
|
boolean again = true;
|
||||||
boolean again = true;
|
|
||||||
|
|
||||||
while(again)
|
while (again) {
|
||||||
{
|
again = false;
|
||||||
again = false;
|
for (CaveResult i : caves) {
|
||||||
for(CaveResult i : caves)
|
if (i.getCeiling() > m && i.getFloor() < m) {
|
||||||
{
|
m = i.getFloor();
|
||||||
if(i.getCeiling() > m && i.getFloor() < m)
|
again = true;
|
||||||
{
|
}
|
||||||
m = i.getFloor();
|
}
|
||||||
again = true;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
}, Interpolated.INT).cache2D(cacheSize);
|
}, Interpolated.INT).cache2D(cacheSize);
|
||||||
//@done
|
//@done
|
||||||
}
|
}
|
||||||
private IrisRegion findRegion(IrisBiome focus, Engine engine) {
|
|
||||||
for(IrisRegion i : engine.getDimension().getAllRegions(engine))
|
|
||||||
{
|
|
||||||
if(i.getAllBiomeIds().contains(focus.getLoadKey()))
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
private IrisRegion findRegion(IrisBiome focus, Engine engine) {
|
||||||
}
|
for (IrisRegion i : engine.getDimension().getAllRegions(engine)) {
|
||||||
|
if (i.getAllBiomeIds().contains(focus.getLoadKey())) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private IrisDecorator decorateFor(IrisBiome b, double x, double z, DecorationPart part)
|
return null;
|
||||||
{
|
}
|
||||||
RNG rngc = chunkRngStream.get(x, z);
|
|
||||||
|
|
||||||
for(IrisDecorator i : b.getDecorators())
|
private IrisDecorator decorateFor(IrisBiome b, double x, double z, DecorationPart part) {
|
||||||
{
|
RNG rngc = chunkRngStream.get(x, z);
|
||||||
if(!i.getPartOf().equals(part))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
BlockData block = i.getBlockData(b, rngc, x, z, data);
|
for (IrisDecorator i : b.getDecorators()) {
|
||||||
|
if (!i.getPartOf().equals(part)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if(block != null)
|
BlockData block = i.getBlockData(b, rngc, x, z, data);
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
if (block != null) {
|
||||||
}
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private IrisBiome implode(IrisBiome b, Double x, Double z)
|
return null;
|
||||||
{
|
}
|
||||||
if(b.getChildren().isEmpty())
|
|
||||||
{
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
|
|
||||||
return implode(b, x, z, 3);
|
private IrisBiome implode(IrisBiome b, Double x, Double z) {
|
||||||
}
|
if (b.getChildren().isEmpty()) {
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
private IrisBiome implode(IrisBiome b, Double x, Double z, int max)
|
return implode(b, x, z, 3);
|
||||||
{
|
}
|
||||||
if(max < 0)
|
|
||||||
{
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(b.getChildren().isEmpty())
|
private IrisBiome implode(IrisBiome b, Double x, Double z, int max) {
|
||||||
{
|
if (max < 0) {
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
CNG childCell = b.getChildrenGenerator(rng, 123, b.getChildShrinkFactor());
|
if (b.getChildren().isEmpty()) {
|
||||||
KList<IrisBiome> chx = b.getRealChildren(this).copy();
|
return b;
|
||||||
chx.add(b);
|
}
|
||||||
IrisBiome biome = childCell.fitRarity(chx, x, z);
|
|
||||||
biome.setInferredType(b.getInferredType());
|
|
||||||
return implode(biome, x, z, max - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
private IrisBiome fixBiomeType(Double height, IrisBiome biome, IrisRegion region, Double x, Double z, double fluidHeight)
|
CNG childCell = b.getChildrenGenerator(rng, 123, b.getChildShrinkFactor());
|
||||||
{
|
KList<IrisBiome> chx = b.getRealChildren(this).copy();
|
||||||
double sh = region.getShoreHeight(x, z);
|
chx.add(b);
|
||||||
|
IrisBiome biome = childCell.fitRarity(chx, x, z);
|
||||||
|
biome.setInferredType(b.getInferredType());
|
||||||
|
return implode(biome, x, z, max - 1);
|
||||||
|
}
|
||||||
|
|
||||||
if(height >= fluidHeight-1 && height <= fluidHeight + sh && !biome.isShore())
|
private IrisBiome fixBiomeType(Double height, IrisBiome biome, IrisRegion region, Double x, Double z, double fluidHeight) {
|
||||||
{
|
double sh = region.getShoreHeight(x, z);
|
||||||
return shoreBiomeStream.get(x, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(height > fluidHeight + sh && !biome.isLand())
|
if (height >= fluidHeight - 1 && height <= fluidHeight + sh && !biome.isShore()) {
|
||||||
{
|
return shoreBiomeStream.get(x, z);
|
||||||
return landBiomeStream.get(x, z);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(height < fluidHeight && !biome.isAquatic())
|
if (height > fluidHeight + sh && !biome.isLand()) {
|
||||||
{
|
return landBiomeStream.get(x, z);
|
||||||
return seaBiomeStream.get(x, z);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(height == fluidHeight && !biome.isShore())
|
if (height < fluidHeight && !biome.isAquatic()) {
|
||||||
{
|
return seaBiomeStream.get(x, z);
|
||||||
return shoreBiomeStream.get(x, z);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return biome;
|
if (height == fluidHeight && !biome.isShore()) {
|
||||||
}
|
return shoreBiomeStream.get(x, z);
|
||||||
|
}
|
||||||
|
|
||||||
private double getHeight(Engine engine, IrisBiome b, double x, double z, long seed)
|
return biome;
|
||||||
{
|
}
|
||||||
double h = 0;
|
|
||||||
|
|
||||||
for(IrisGenerator gen : generators)
|
private double getHeight(Engine engine, IrisBiome b, double x, double z, long seed) {
|
||||||
{
|
double h = 0;
|
||||||
double hi = gen.getInterpolator().interpolate(x, z, (xx, zz) ->
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
IrisBiome bx = baseBiomeStream.get(xx, zz);
|
|
||||||
|
|
||||||
return bx.getGenLinkMax(gen.getLoadKey());
|
for (IrisGenerator gen : generators) {
|
||||||
}
|
double hi = gen.getInterpolator().interpolate(x, z, (xx, zz) ->
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
IrisBiome bx = baseBiomeStream.get(xx, zz);
|
||||||
|
|
||||||
catch(Throwable e)
|
return bx.getGenLinkMax(gen.getLoadKey());
|
||||||
{
|
} catch (Throwable e) {
|
||||||
Iris.warn("Failed to sample hi biome at " + xx + " " + zz + " using the generator " + gen.getLoadKey());
|
Iris.warn("Failed to sample hi biome at " + xx + " " + zz + " using the generator " + gen.getLoadKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
double lo = gen.getInterpolator().interpolate(x, z, (xx, zz) ->
|
double lo = gen.getInterpolator().interpolate(x, z, (xx, zz) ->
|
||||||
{
|
{
|
||||||
try
|
try {
|
||||||
{
|
IrisBiome bx = baseBiomeStream.get(xx, zz);
|
||||||
IrisBiome bx = baseBiomeStream.get(xx, zz);
|
|
||||||
|
|
||||||
return bx.getGenLinkMin(gen.getLoadKey());
|
return bx.getGenLinkMin(gen.getLoadKey());
|
||||||
}
|
} catch (Throwable e) {
|
||||||
|
Iris.warn("Failed to sample lo biome at " + xx + " " + zz + " using the generator " + gen.getLoadKey());
|
||||||
|
}
|
||||||
|
|
||||||
catch(Throwable e)
|
return 0;
|
||||||
{
|
});
|
||||||
Iris.warn("Failed to sample lo biome at " + xx + " " + zz + " using the generator " + gen.getLoadKey());
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
h += M.lerp(lo, hi, gen.getHeight(x, z, seed + 239945));
|
||||||
});
|
}
|
||||||
|
|
||||||
h += M.lerp(lo, hi, gen.getHeight(x, z, seed + 239945));
|
AtomicDouble noise = new AtomicDouble(h + fluidHeight + overlayStream.get(x, z));
|
||||||
}
|
engine.getFramework().getEngineParallax().forEachFeature(x, z, (i)
|
||||||
|
-> noise.set(i.filter(x, z, noise.get())));
|
||||||
|
return Math.min(engine.getHeight(), Math.max(noise.get(), 0));
|
||||||
|
}
|
||||||
|
|
||||||
AtomicDouble noise = new AtomicDouble(h + fluidHeight + overlayStream.get(x,z));
|
private void registerGenerator(IrisGenerator cachedGenerator) {
|
||||||
engine.getFramework().getEngineParallax().forEachFeature(x, z, (i)
|
for (IrisGenerator i : generators) {
|
||||||
-> noise.set(i.filter(x, z, noise.get())));
|
if (i.getLoadKey().equals(cachedGenerator.getLoadKey())) {
|
||||||
return Math.min(engine.getHeight(), Math.max(noise.get(), 0));
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void registerGenerator(IrisGenerator cachedGenerator)
|
generators.add(cachedGenerator);
|
||||||
{
|
}
|
||||||
for(IrisGenerator i : generators)
|
|
||||||
{
|
|
||||||
if(i.getLoadKey().equals(cachedGenerator.getLoadKey()))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
generators.add(cachedGenerator);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.volmit.iris.generator;
|
|||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.object.IrisBiome;
|
import com.volmit.iris.object.IrisBiome;
|
||||||
import com.volmit.iris.scaffold.cache.AtomicCache;
|
|
||||||
import com.volmit.iris.scaffold.engine.*;
|
import com.volmit.iris.scaffold.engine.*;
|
||||||
import com.volmit.iris.scaffold.hunk.Hunk;
|
import com.volmit.iris.scaffold.hunk.Hunk;
|
||||||
import com.volmit.iris.util.J;
|
import com.volmit.iris.util.J;
|
||||||
@@ -19,8 +18,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
public class IrisEngine extends BlockPopulator implements Engine
|
public class IrisEngine extends BlockPopulator implements Engine {
|
||||||
{
|
|
||||||
@Getter
|
@Getter
|
||||||
private final EngineCompound compound;
|
private final EngineCompound compound;
|
||||||
|
|
||||||
@@ -54,8 +52,7 @@ public class IrisEngine extends BlockPopulator implements Engine
|
|||||||
private int cacheId;
|
private int cacheId;
|
||||||
private final int art;
|
private final int art;
|
||||||
|
|
||||||
public IrisEngine(EngineTarget target, EngineCompound compound, int index)
|
public IrisEngine(EngineTarget target, EngineCompound compound, int index) {
|
||||||
{
|
|
||||||
Iris.info("Initializing Engine: " + target.getWorld().getName() + "/" + target.getDimension().getLoadKey() + " (" + target.getHeight() + " height)");
|
Iris.info("Initializing Engine: " + target.getWorld().getName() + "/" + target.getDimension().getLoadKey() + " (" + target.getHeight() + " height)");
|
||||||
metrics = new EngineMetrics(32);
|
metrics = new EngineMetrics(32);
|
||||||
this.target = target;
|
this.target = target;
|
||||||
@@ -72,8 +69,7 @@ public class IrisEngine extends BlockPopulator implements Engine
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close()
|
public void close() {
|
||||||
{
|
|
||||||
J.car(art);
|
J.car(art);
|
||||||
closed = true;
|
closed = true;
|
||||||
getWorldManager().close();
|
getWorldManager().close();
|
||||||
@@ -102,11 +98,10 @@ public class IrisEngine extends BlockPopulator implements Engine
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generate(int x, int z, Hunk<BlockData> vblocks, Hunk<Biome> vbiomes) {
|
public void generate(int x, int z, Hunk<BlockData> vblocks, Hunk<Biome> vbiomes) {
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
PrecisionStopwatch p = PrecisionStopwatch.start();
|
PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||||
Hunk<BlockData> blocks = vblocks.synchronize().listen((xx,y,zz,t) -> catchBlockUpdates(x+xx,y+getMinHeight(),z+zz, t));
|
Hunk<BlockData> blocks = vblocks.synchronize().listen((xx, y, zz, t) -> catchBlockUpdates(x + xx, y + getMinHeight(), z + zz, t));
|
||||||
getFramework().getEngineParallax().generateParallaxArea(x>>4, z>>4);
|
getFramework().getEngineParallax().generateParallaxArea(x >> 4, z >> 4);
|
||||||
getFramework().getBiomeActuator().actuate(x, z, vbiomes);
|
getFramework().getBiomeActuator().actuate(x, z, vbiomes);
|
||||||
getFramework().getTerrainActuator().actuate(x, z, blocks);
|
getFramework().getTerrainActuator().actuate(x, z, blocks);
|
||||||
getFramework().getCaveModifier().modify(x, z, blocks);
|
getFramework().getCaveModifier().modify(x, z, blocks);
|
||||||
@@ -116,18 +111,14 @@ public class IrisEngine extends BlockPopulator implements Engine
|
|||||||
getFramework().getEngineParallax().insertParallax(x, z, blocks);
|
getFramework().getEngineParallax().insertParallax(x, z, blocks);
|
||||||
getFramework().getDepositModifier().modify(x, z, blocks);
|
getFramework().getDepositModifier().modify(x, z, blocks);
|
||||||
getMetrics().getTotal().put(p.getMilliseconds());
|
getMetrics().getTotal().put(p.getMilliseconds());
|
||||||
}
|
} catch (Throwable e) {
|
||||||
|
|
||||||
catch(Throwable e)
|
|
||||||
{
|
|
||||||
fail("Failed to generate " + x + ", " + z, e);
|
fail("Failed to generate " + x + ", " + z, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IrisBiome getFocus() {
|
public IrisBiome getFocus() {
|
||||||
if(getDimension().getFocus() == null || getDimension().getFocus().trim().isEmpty())
|
if (getDimension().getFocus() == null || getDimension().getFocus().trim().isEmpty()) {
|
||||||
{
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,8 +126,7 @@ public class IrisEngine extends BlockPopulator implements Engine
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk c)
|
public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk c) {
|
||||||
{
|
|
||||||
getWorldManager().spawnInitialEntities(c);
|
getWorldManager().spawnInitialEntities(c);
|
||||||
updateChunk(c);
|
updateChunk(c);
|
||||||
placeTiles(c);
|
placeTiles(c);
|
||||||
|
|||||||
@@ -14,10 +14,6 @@ import com.volmit.iris.scaffold.parallel.MultiBurst;
|
|||||||
import com.volmit.iris.util.*;
|
import com.volmit.iris.util.*;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import net.minecraft.core.BlockPosition;
|
|
||||||
import net.minecraft.world.level.chunk.ChunkGenerator;
|
|
||||||
import net.minecraft.world.level.levelgen.feature.StructureGenerator;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
@@ -27,14 +23,7 @@ import org.bukkit.event.world.WorldSaveEvent;
|
|||||||
import org.bukkit.generator.BlockPopulator;
|
import org.bukkit.generator.BlockPopulator;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
|
|
||||||
public class IrisEngineCompound implements EngineCompound {
|
public class IrisEngineCompound implements EngineCompound {
|
||||||
@Getter
|
@Getter
|
||||||
@@ -65,8 +54,7 @@ public class IrisEngineCompound implements EngineCompound {
|
|||||||
@Setter
|
@Setter
|
||||||
private boolean studio;
|
private boolean studio;
|
||||||
|
|
||||||
public IrisEngineCompound(World world, IrisDimension rootDimension, IrisDataManager data, int maximumThreads)
|
public IrisEngineCompound(World world, IrisDimension rootDimension, IrisDataManager data, int maximumThreads) {
|
||||||
{
|
|
||||||
wallClock = new AtomicRollingSequence(32);
|
wallClock = new AtomicRollingSequence(32);
|
||||||
this.rootDimension = rootDimension;
|
this.rootDimension = rootDimension;
|
||||||
Iris.info("Initializing Engine Composite for " + world.getName());
|
Iris.info("Initializing Engine Composite for " + world.getName());
|
||||||
@@ -78,58 +66,47 @@ public class IrisEngineCompound implements EngineCompound {
|
|||||||
saveEngineMetadata();
|
saveEngineMetadata();
|
||||||
populators = new KList<>();
|
populators = new KList<>();
|
||||||
|
|
||||||
if(rootDimension.getDimensionalComposite().isEmpty())
|
if (rootDimension.getDimensionalComposite().isEmpty()) {
|
||||||
{
|
|
||||||
burster = null;
|
burster = null;
|
||||||
// TODO: WARNING HEIGHT
|
// TODO: WARNING HEIGHT
|
||||||
engines = new Engine[]{new IrisEngine(new EngineTarget(world, rootDimension, data, 256, maximumThreads), this, 0)};
|
engines = new Engine[]{new IrisEngine(new EngineTarget(world, rootDimension, data, 256, maximumThreads), this, 0)};
|
||||||
defaultEngine = engines[0];
|
defaultEngine = engines[0];
|
||||||
}
|
} else {
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
double totalWeight = 0D;
|
double totalWeight = 0D;
|
||||||
engines = new Engine[rootDimension.getDimensionalComposite().size()];
|
engines = new Engine[rootDimension.getDimensionalComposite().size()];
|
||||||
burster = engines.length > 1 ? new MultiBurst(engines.length) : null;
|
burster = engines.length > 1 ? new MultiBurst(engines.length) : null;
|
||||||
int threadDist = (Math.max(2, maximumThreads - engines.length)) / engines.length;
|
int threadDist = (Math.max(2, maximumThreads - engines.length)) / engines.length;
|
||||||
|
|
||||||
if((threadDist * engines.length) + engines.length > maximumThreads)
|
if ((threadDist * engines.length) + engines.length > maximumThreads) {
|
||||||
{
|
|
||||||
Iris.warn("Using " + ((threadDist * engines.length) + engines.length) + " threads instead of the configured " + maximumThreads + " maximum thread count due to the requirements of this dimension!");
|
Iris.warn("Using " + ((threadDist * engines.length) + engines.length) + " threads instead of the configured " + maximumThreads + " maximum thread count due to the requirements of this dimension!");
|
||||||
}
|
}
|
||||||
|
|
||||||
for(IrisDimensionIndex i : rootDimension.getDimensionalComposite())
|
for (IrisDimensionIndex i : rootDimension.getDimensionalComposite()) {
|
||||||
{
|
|
||||||
totalWeight += i.getWeight();
|
totalWeight += i.getWeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
int buf = 0;
|
int buf = 0;
|
||||||
|
|
||||||
for(int i = 0; i < engines.length; i++)
|
for (int i = 0; i < engines.length; i++) {
|
||||||
{
|
|
||||||
IrisDimensionIndex index = rootDimension.getDimensionalComposite().get(i);
|
IrisDimensionIndex index = rootDimension.getDimensionalComposite().get(i);
|
||||||
IrisDimension dimension = data.getDimensionLoader().load(index.getDimension());
|
IrisDimension dimension = data.getDimensionLoader().load(index.getDimension());
|
||||||
// TODO: WARNING HEIGHT
|
// TODO: WARNING HEIGHT
|
||||||
engines[i] = new IrisEngine(new EngineTarget(world, dimension, data.copy(), (int)Math.floor(256D * (index.getWeight() / totalWeight)), index.isInverted(), threadDist), this, i);
|
engines[i] = new IrisEngine(new EngineTarget(world, dimension, data.copy(), (int) Math.floor(256D * (index.getWeight() / totalWeight)), index.isInverted(), threadDist), this, i);
|
||||||
engines[i].setMinHeight(buf);
|
engines[i].setMinHeight(buf);
|
||||||
buf += engines[i].getHeight();
|
buf += engines[i].getHeight();
|
||||||
|
|
||||||
if(index.isPrimary())
|
if (index.isPrimary()) {
|
||||||
{
|
|
||||||
defaultEngine = engines[i];
|
defaultEngine = engines[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(defaultEngine == null)
|
if (defaultEngine == null) {
|
||||||
{
|
|
||||||
defaultEngine = engines[0];
|
defaultEngine = engines[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(Engine i : engines)
|
for (Engine i : engines) {
|
||||||
{
|
if (i instanceof BlockPopulator) {
|
||||||
if(i instanceof BlockPopulator)
|
|
||||||
{
|
|
||||||
populators.add((BlockPopulator) i);
|
populators.add((BlockPopulator) i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -137,40 +114,33 @@ public class IrisEngineCompound implements EngineCompound {
|
|||||||
Iris.instance.registerListener(this);
|
Iris.instance.registerListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<IrisPosition> getStrongholdPositions()
|
public List<IrisPosition> getStrongholdPositions() {
|
||||||
{
|
|
||||||
return engineMetadata.getStrongholdPositions();
|
return engineMetadata.getStrongholdPositions();
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void on(WorldSaveEvent e)
|
public void on(WorldSaveEvent e) {
|
||||||
{
|
if (world != null && e.getWorld().equals(world)) {
|
||||||
if(world != null &&e.getWorld().equals(world))
|
|
||||||
{
|
|
||||||
save();
|
save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void printMetrics(CommandSender sender)
|
public void printMetrics(CommandSender sender) {
|
||||||
{
|
|
||||||
KMap<String, Double> totals = new KMap<>();
|
KMap<String, Double> totals = new KMap<>();
|
||||||
KMap<String, Double> weights = new KMap<>();
|
KMap<String, Double> weights = new KMap<>();
|
||||||
double masterWallClock = wallClock.getAverage();
|
double masterWallClock = wallClock.getAverage();
|
||||||
|
|
||||||
for(int i = 0; i < getSize(); i++)
|
for (int i = 0; i < getSize(); i++) {
|
||||||
{
|
|
||||||
Engine e = getEngine(i);
|
Engine e = getEngine(i);
|
||||||
KMap<String, Double> timings = e.getMetrics().pull();
|
KMap<String, Double> timings = e.getMetrics().pull();
|
||||||
double totalWeight = 0;
|
double totalWeight = 0;
|
||||||
double wallClock = e.getMetrics().getTotal().getAverage();
|
double wallClock = e.getMetrics().getTotal().getAverage();
|
||||||
|
|
||||||
for(double j : timings.values())
|
for (double j : timings.values()) {
|
||||||
{
|
|
||||||
totalWeight += j;
|
totalWeight += j;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(String j : timings.k())
|
for (String j : timings.k()) {
|
||||||
{
|
|
||||||
weights.put(e.getName() + "[" + e.getIndex() + "]." + j, (wallClock / totalWeight) * timings.get(j));
|
weights.put(e.getName() + "[" + e.getIndex() + "]." + j, (wallClock / totalWeight) * timings.get(j));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,44 +149,38 @@ public class IrisEngineCompound implements EngineCompound {
|
|||||||
|
|
||||||
double mtotals = 0;
|
double mtotals = 0;
|
||||||
|
|
||||||
for(double i : totals.values())
|
for (double i : totals.values()) {
|
||||||
{
|
mtotals += i;
|
||||||
mtotals+=i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for(String i : totals.k())
|
for (String i : totals.k()) {
|
||||||
{
|
|
||||||
totals.put(i, (masterWallClock / mtotals) * totals.get(i));
|
totals.put(i, (masterWallClock / mtotals) * totals.get(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
double v = 0;
|
double v = 0;
|
||||||
|
|
||||||
for(double i : weights.values())
|
for (double i : weights.values()) {
|
||||||
{
|
v += i;
|
||||||
v+=i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for(String i : weights.k())
|
for (String i : weights.k()) {
|
||||||
{
|
|
||||||
weights.put(i, weights.get(i) / v);
|
weights.put(i, weights.get(i) / v);
|
||||||
}
|
}
|
||||||
|
|
||||||
sender.sendMessage("Total: " + C.BOLD + C.WHITE + Form.duration(masterWallClock, 0));
|
sender.sendMessage("Total: " + C.BOLD + C.WHITE + Form.duration(masterWallClock, 0));
|
||||||
|
|
||||||
for(String i : totals.k())
|
for (String i : totals.k()) {
|
||||||
{
|
sender.sendMessage(" Engine " + C.UNDERLINE + C.GREEN + i + C.RESET + ": " + C.BOLD + C.WHITE + Form.duration(totals.get(i), 0));
|
||||||
sender.sendMessage(" Engine " + C.UNDERLINE + C.GREEN + i + C.RESET + ": " + C.BOLD + C.WHITE + Form.duration(totals.get(i), 0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sender.sendMessage("Details: ");
|
sender.sendMessage("Details: ");
|
||||||
|
|
||||||
for(String i : weights.sortKNumber().reverse())
|
for (String i : weights.sortKNumber().reverse()) {
|
||||||
{
|
String befb = C.UNDERLINE + "" + C.GREEN + "" + i.split("\\Q[\\E")[0] + C.RESET + C.GRAY + "[";
|
||||||
String befb = C.UNDERLINE +""+ C.GREEN + "" + i.split("\\Q[\\E")[0] + C.RESET + C.GRAY + "[";
|
String num = C.GOLD + i.split("\\Q[\\E")[1].split("]")[0] + C.RESET + C.GRAY + "].";
|
||||||
String num = C.GOLD + i.split("\\Q[\\E")[1].split("]")[0] + C.RESET + C.GRAY + "].";
|
String afb = C.ITALIC + "" + C.AQUA + i.split("\\Q]\\E")[1].substring(1) + C.RESET + C.GRAY;
|
||||||
String afb = C.ITALIC +""+ C.AQUA + i.split("\\Q]\\E")[1].substring(1) + C.RESET + C.GRAY;
|
|
||||||
|
|
||||||
sender.sendMessage(" " + befb + num + afb + ": " + C.BOLD + C.WHITE + Form.pc(weights.get(i), 0));
|
sender.sendMessage(" " + befb + num + afb + ": " + C.BOLD + C.WHITE + Form.pc(weights.get(i), 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,30 +189,23 @@ public class IrisEngineCompound implements EngineCompound {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<BlockData> postblocks, Hunk<Biome> biomes)
|
public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<BlockData> postblocks, Hunk<Biome> biomes) {
|
||||||
{
|
|
||||||
recycle();
|
recycle();
|
||||||
PrecisionStopwatch p = PrecisionStopwatch.start();
|
PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||||
if(engines.length == 1 && !getEngine(0).getTarget().isInverted())
|
if (engines.length == 1 && !getEngine(0).getTarget().isInverted()) {
|
||||||
{
|
|
||||||
engines[0].generate(x, z, blocks, biomes);
|
engines[0].generate(x, z, blocks, biomes);
|
||||||
}
|
} else {
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int i;
|
int i;
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
|
||||||
for(i = 0; i < engines.length; i++)
|
for (i = 0; i < engines.length; i++) {
|
||||||
{
|
|
||||||
Engine engine = engines[i];
|
Engine engine = engines[i];
|
||||||
int doffset = offset;
|
int doffset = offset;
|
||||||
int height = engine.getTarget().getHeight();
|
int height = engine.getTarget().getHeight();
|
||||||
Hunk<BlockData> cblock = Hunk.newArrayHunk(16, height, 16);
|
Hunk<BlockData> cblock = Hunk.newArrayHunk(16, height, 16);
|
||||||
Hunk<Biome> cbiome = Hunk.newArrayHunk(16, height, 16);
|
Hunk<Biome> cbiome = Hunk.newArrayHunk(16, height, 16);
|
||||||
|
|
||||||
if(engine.getTarget().isInverted())
|
if (engine.getTarget().isInverted()) {
|
||||||
{
|
|
||||||
cblock = cblock.invertY();
|
cblock = cblock.invertY();
|
||||||
cbiome = cbiome.invertY();
|
cbiome = cbiome.invertY();
|
||||||
}
|
}
|
||||||
@@ -301,8 +258,7 @@ public class IrisEngineCompound implements EngineCompound {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void hotload() {
|
public void hotload() {
|
||||||
for(int i = 0; i < getSize(); i++)
|
for (int i = 0; i < getSize(); i++) {
|
||||||
{
|
|
||||||
getEngine(i).hotload();
|
getEngine(i).hotload();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ import java.util.UUID;
|
|||||||
import java.util.concurrent.Semaphore;
|
import java.util.concurrent.Semaphore;
|
||||||
|
|
||||||
public class IrisEngineEffects extends EngineAssignedComponent implements EngineEffects {
|
public class IrisEngineEffects extends EngineAssignedComponent implements EngineEffects {
|
||||||
private KMap<UUID, EnginePlayer> players;
|
private final KMap<UUID, EnginePlayer> players;
|
||||||
private Semaphore limit;
|
private final Semaphore limit;
|
||||||
|
|
||||||
public IrisEngineEffects(Engine engine) {
|
public IrisEngineEffects(Engine engine) {
|
||||||
super(engine, "FX");
|
super(engine, "FX");
|
||||||
@@ -30,28 +30,20 @@ public class IrisEngineEffects extends EngineAssignedComponent implements Engine
|
|||||||
|
|
||||||
if (pr == null) return; //Fix for paper returning a world with a null playerlist
|
if (pr == null) return; //Fix for paper returning a world with a null playerlist
|
||||||
|
|
||||||
for(Player i : pr)
|
for (Player i : pr) {
|
||||||
{
|
|
||||||
Location l = i.getLocation();
|
Location l = i.getLocation();
|
||||||
boolean pcc = players.containsKey(i.getUniqueId());
|
boolean pcc = players.containsKey(i.getUniqueId());
|
||||||
if(getEngine().contains(l))
|
if (getEngine().contains(l)) {
|
||||||
{
|
if (!pcc) {
|
||||||
if(!pcc)
|
|
||||||
{
|
|
||||||
players.put(i.getUniqueId(), new EnginePlayer(getEngine(), i));
|
players.put(i.getUniqueId(), new EnginePlayer(getEngine(), i));
|
||||||
}
|
}
|
||||||
}
|
} else if (pcc) {
|
||||||
|
|
||||||
else if(pcc)
|
|
||||||
{
|
|
||||||
players.remove(i.getUniqueId());
|
players.remove(i.getUniqueId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(UUID i : players.k())
|
for (UUID i : players.k()) {
|
||||||
{
|
if (!pr.contains(players.get(i).getPlayer())) {
|
||||||
if(!pr.contains(players.get(i).getPlayer()))
|
|
||||||
{
|
|
||||||
players.remove(i);
|
players.remove(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -59,17 +51,14 @@ public class IrisEngineEffects extends EngineAssignedComponent implements Engine
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tickRandomPlayer() {
|
public void tickRandomPlayer() {
|
||||||
if(limit.tryAcquire())
|
if (limit.tryAcquire()) {
|
||||||
{
|
if (M.r(0.02)) {
|
||||||
if(M.r(0.02))
|
|
||||||
{
|
|
||||||
updatePlayerMap();
|
updatePlayerMap();
|
||||||
limit.release();
|
limit.release();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(players.isEmpty())
|
if (players.isEmpty()) {
|
||||||
{
|
|
||||||
limit.release();
|
limit.release();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -78,8 +67,7 @@ public class IrisEngineEffects extends EngineAssignedComponent implements Engine
|
|||||||
int max = players.size();
|
int max = players.size();
|
||||||
PrecisionStopwatch p = new PrecisionStopwatch();
|
PrecisionStopwatch p = new PrecisionStopwatch();
|
||||||
|
|
||||||
while(max-- > 0 && M.ms() - p.getMilliseconds() < limitms)
|
while (max-- > 0 && M.ms() - p.getMilliseconds() < limitms) {
|
||||||
{
|
|
||||||
players.v().getRandom().tick();
|
players.v().getRandom().tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,8 +52,7 @@ public class IrisEngineFramework implements EngineFramework {
|
|||||||
private final AtomicBoolean cleaning;
|
private final AtomicBoolean cleaning;
|
||||||
private final ChronoLatch cleanLatch;
|
private final ChronoLatch cleanLatch;
|
||||||
|
|
||||||
public IrisEngineFramework(Engine engine)
|
public IrisEngineFramework(Engine engine) {
|
||||||
{
|
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
this.complex = new IrisComplex(getEngine());
|
this.complex = new IrisComplex(getEngine());
|
||||||
this.engineParallax = new IrisEngineParallax(getEngine());
|
this.engineParallax = new IrisEngineParallax(getEngine());
|
||||||
@@ -70,27 +69,21 @@ public class IrisEngineFramework implements EngineFramework {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void recycle() {
|
public synchronized void recycle() {
|
||||||
if(!cleanLatch.flip())
|
if (!cleanLatch.flip()) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cleaning.get())
|
if (cleaning.get()) {
|
||||||
{
|
|
||||||
cleanLatch.flipDown();
|
cleanLatch.flipDown();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cleaning.set(true);
|
cleaning.set(true);
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
getEngine().getParallax().cleanup();
|
getEngine().getParallax().cleanup();
|
||||||
getData().getObjectLoader().clean();
|
getData().getObjectLoader().clean();
|
||||||
}
|
} catch (Throwable e) {
|
||||||
|
|
||||||
catch(Throwable e)
|
|
||||||
{
|
|
||||||
Iris.error("Cleanup failed!");
|
Iris.error("Cleanup failed!");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -99,8 +92,7 @@ public class IrisEngineFramework implements EngineFramework {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close()
|
public void close() {
|
||||||
{
|
|
||||||
getEngineParallax().close();
|
getEngineParallax().close();
|
||||||
getTerrainActuator().close();
|
getTerrainActuator().close();
|
||||||
getDecorantActuator().close();
|
getDecorantActuator().close();
|
||||||
|
|||||||
@@ -11,8 +11,7 @@ public class IrisEngineParallax implements EngineParallaxManager {
|
|||||||
@Getter
|
@Getter
|
||||||
private final int parallaxSize;
|
private final int parallaxSize;
|
||||||
|
|
||||||
public IrisEngineParallax(Engine engine)
|
public IrisEngineParallax(Engine engine) {
|
||||||
{
|
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
parallaxSize = computeParallaxSize();
|
parallaxSize = computeParallaxSize();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import org.bukkit.event.block.BlockBreakEvent;
|
|||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
import org.bukkit.event.entity.EntitySpawnEvent;
|
import org.bukkit.event.entity.EntitySpawnEvent;
|
||||||
|
|
||||||
public class IrisWorldManager extends EngineAssignedWorldManager {
|
public class IrisWorldManager extends EngineAssignedWorldManager {
|
||||||
private boolean spawnable;
|
private boolean spawnable;
|
||||||
|
|
||||||
public IrisWorldManager(Engine engine) {
|
public IrisWorldManager(Engine engine) {
|
||||||
@@ -36,13 +36,12 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
|
|||||||
public void spawnInitialEntities(Chunk c) {
|
public void spawnInitialEntities(Chunk c) {
|
||||||
RNG rng = new RNG(Cache.key(c));
|
RNG rng = new RNG(Cache.key(c));
|
||||||
|
|
||||||
getEngine().getParallaxAccess().getEntitiesR(c.getX(), c.getZ()).iterateSync((x,y,z,e) -> {
|
getEngine().getParallaxAccess().getEntitiesR(c.getX(), c.getZ()).iterateSync((x, y, z, e) -> {
|
||||||
if(e != null)
|
if (e != null) {
|
||||||
{
|
|
||||||
IrisEntity en = getData().getEntityLoader().load(e);
|
IrisEntity en = getData().getEntityLoader().load(e);
|
||||||
|
|
||||||
if(en != null){
|
if (en != null) {
|
||||||
en.spawn(getEngine(), new Location(c.getWorld(), x+(c.getX()<<4),y,z+(c.getZ()<<4)));
|
en.spawn(getEngine(), new Location(c.getWorld(), x + (c.getX() << 4), y, z + (c.getZ() << 4)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -61,17 +60,13 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEntitySpawn(EntitySpawnEvent e)
|
public void onEntitySpawn(EntitySpawnEvent e) {
|
||||||
{
|
if (getTarget().getWorld() == null || !getTarget().getWorld().equals(e.getEntity().getWorld())) {
|
||||||
if(getTarget().getWorld() == null || !getTarget().getWorld().equals(e.getEntity().getWorld()))
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
if (!IrisSettings.get().getGenerator().isSystemEntitySpawnOverrides()) {
|
||||||
if(!IrisSettings.get().getGenerator().isSystemEntitySpawnOverrides())
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,14 +76,12 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
|
|||||||
|
|
||||||
J.a(() ->
|
J.a(() ->
|
||||||
{
|
{
|
||||||
if(spawnable)
|
if (spawnable) {
|
||||||
{
|
|
||||||
IrisDimension dim = getDimension();
|
IrisDimension dim = getDimension();
|
||||||
IrisRegion region = getEngine().getRegion(x, z);
|
IrisRegion region = getEngine().getRegion(x, z);
|
||||||
IrisBiome above = getEngine().getSurfaceBiome(x, z);
|
IrisBiome above = getEngine().getSurfaceBiome(x, z);
|
||||||
IrisBiome bbelow = getEngine().getBiome(x, y, z);
|
IrisBiome bbelow = getEngine().getBiome(x, y, z);
|
||||||
if(above.getLoadKey().equals(bbelow.getLoadKey()))
|
if (above.getLoadKey().equals(bbelow.getLoadKey())) {
|
||||||
{
|
|
||||||
bbelow = null;
|
bbelow = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,54 +89,40 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
|
|||||||
|
|
||||||
J.s(() ->
|
J.s(() ->
|
||||||
{
|
{
|
||||||
if(below != null)
|
if (below != null) {
|
||||||
{
|
if (trySpawn(below.getEntitySpawnOverrides(), e)) {
|
||||||
if(trySpawn(below.getEntitySpawnOverrides(), e))
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(trySpawn(above.getEntitySpawnOverrides(), e))
|
if (trySpawn(above.getEntitySpawnOverrides(), e)) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(trySpawn(region.getEntitySpawnOverrides(), e))
|
if (trySpawn(region.getEntitySpawnOverrides(), e)) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(trySpawn(dim.getEntitySpawnOverrides(), e))
|
if (trySpawn(dim.getEntitySpawnOverrides(), e)) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
} catch (Throwable xe) {
|
||||||
|
|
||||||
catch(Throwable xe)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean trySpawn(KList<IrisEntitySpawnOverride> s, EntitySpawnEvent e)
|
private boolean trySpawn(KList<IrisEntitySpawnOverride> s, EntitySpawnEvent e) {
|
||||||
{
|
for (IrisEntitySpawnOverride i : s) {
|
||||||
for(IrisEntitySpawnOverride i : s)
|
|
||||||
{
|
|
||||||
spawnable = false;
|
spawnable = false;
|
||||||
|
|
||||||
if(i.on(getEngine(), e.getLocation(), e.getEntityType(), e) != null)
|
if (i.on(getEngine(), e.getLocation(), e.getEntityType(), e) != null) {
|
||||||
{
|
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
e.getEntity().remove();
|
e.getEntity().remove();
|
||||||
return true;
|
return true;
|
||||||
}
|
} else {
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
spawnable = true;
|
spawnable = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -151,10 +130,8 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void trySpawn(KList<IrisEntityInitialSpawn> s, Chunk c, RNG rng)
|
private void trySpawn(KList<IrisEntityInitialSpawn> s, Chunk c, RNG rng) {
|
||||||
{
|
for (IrisEntityInitialSpawn i : s) {
|
||||||
for(IrisEntityInitialSpawn i : s)
|
|
||||||
{
|
|
||||||
i.spawn(getEngine(), c, rng);
|
i.spawn(getEngine(), c, rng);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,8 +9,7 @@ import com.volmit.iris.util.PrecisionStopwatch;
|
|||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
|
|
||||||
public class IrisBiomeActuator extends EngineAssignedActuator<Biome>
|
public class IrisBiomeActuator extends EngineAssignedActuator<Biome> {
|
||||||
{
|
|
||||||
public IrisBiomeActuator(Engine engine) {
|
public IrisBiomeActuator(Engine engine) {
|
||||||
super(engine, "Biome");
|
super(engine, "Biome");
|
||||||
}
|
}
|
||||||
@@ -18,20 +17,17 @@ public class IrisBiomeActuator extends EngineAssignedActuator<Biome>
|
|||||||
@Override
|
@Override
|
||||||
public void onActuate(int x, int z, Hunk<Biome> h) {
|
public void onActuate(int x, int z, Hunk<Biome> h) {
|
||||||
PrecisionStopwatch p = PrecisionStopwatch.start();
|
PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||||
int zf,hh;
|
int zf, hh;
|
||||||
BurstExecutor burst = MultiBurst.burst.burst(h.getWidth() * h.getDepth());
|
BurstExecutor burst = MultiBurst.burst.burst(h.getWidth() * h.getDepth());
|
||||||
|
|
||||||
for(int xf = 0; xf < h.getWidth(); xf++)
|
for (int xf = 0; xf < h.getWidth(); xf++) {
|
||||||
{
|
for (zf = 0; zf < h.getDepth(); zf++) {
|
||||||
for(zf = 0; zf < h.getDepth(); zf++)
|
|
||||||
{
|
|
||||||
int xxf = xf;
|
int xxf = xf;
|
||||||
int zzf = zf;
|
int zzf = zf;
|
||||||
|
|
||||||
burst.queue(() -> {
|
burst.queue(() -> {
|
||||||
Biome v = getComplex().getTrueBiomeStream().get(modX(xxf+x), modZ(zzf+z)).getSkyBiome(RNG.r, x, 0, z);
|
Biome v = getComplex().getTrueBiomeStream().get(modX(xxf + x), modZ(zzf + z)).getSkyBiome(RNG.r, x, 0, z);
|
||||||
for(int i = 0; i < h.getHeight(); i++)
|
for (int i = 0; i < h.getHeight(); i++) {
|
||||||
{
|
|
||||||
h.set(xxf, i, zzf, v);
|
h.set(xxf, i, zzf, v);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,25 +1,20 @@
|
|||||||
package com.volmit.iris.generator.actuator;
|
package com.volmit.iris.generator.actuator;
|
||||||
|
|
||||||
import com.volmit.iris.generator.decorator.IrisSeaFloorDecorator;
|
import com.volmit.iris.generator.decorator.*;
|
||||||
import com.volmit.iris.object.IrisBiome;
|
import com.volmit.iris.object.IrisBiome;
|
||||||
import com.volmit.iris.util.PrecisionStopwatch;
|
|
||||||
import com.volmit.iris.util.RNG;
|
|
||||||
import com.volmit.iris.generator.decorator.IrisCeilingDecorator;
|
|
||||||
import com.volmit.iris.generator.decorator.IrisSeaSurfaceDecorator;
|
|
||||||
import com.volmit.iris.generator.decorator.IrisShoreLineDecorator;
|
|
||||||
import com.volmit.iris.generator.decorator.IrisSurfaceDecorator;
|
|
||||||
import com.volmit.iris.scaffold.engine.Engine;
|
import com.volmit.iris.scaffold.engine.Engine;
|
||||||
import com.volmit.iris.scaffold.engine.EngineAssignedActuator;
|
import com.volmit.iris.scaffold.engine.EngineAssignedActuator;
|
||||||
import com.volmit.iris.scaffold.engine.EngineDecorator;
|
import com.volmit.iris.scaffold.engine.EngineDecorator;
|
||||||
import com.volmit.iris.scaffold.hunk.Hunk;
|
import com.volmit.iris.scaffold.hunk.Hunk;
|
||||||
|
import com.volmit.iris.util.PrecisionStopwatch;
|
||||||
|
import com.volmit.iris.util.RNG;
|
||||||
import lombok.Getter;
|
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.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
public class IrisDecorantActuator extends EngineAssignedActuator<BlockData>
|
public class IrisDecorantActuator extends EngineAssignedActuator<BlockData> {
|
||||||
{
|
|
||||||
private static final Predicate<BlockData> PREDICATE_SOLID = (b) -> b != null && !b.getMaterial().isAir() && !b.getMaterial().equals(Material.WATER) && !b.getMaterial().equals(Material.LAVA);
|
private static final Predicate<BlockData> PREDICATE_SOLID = (b) -> b != null && !b.getMaterial().isAir() && !b.getMaterial().equals(Material.WATER) && !b.getMaterial().equals(Material.LAVA);
|
||||||
private final RNG rng;
|
private final RNG rng;
|
||||||
@Getter
|
@Getter
|
||||||
@@ -47,8 +42,7 @@ public class IrisDecorantActuator extends EngineAssignedActuator<BlockData>
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActuate(int x, int z, Hunk<BlockData> output) {
|
public void onActuate(int x, int z, Hunk<BlockData> output) {
|
||||||
if(!getEngine().getDimension().isDecorate())
|
if (!getEngine().getDimension().isDecorate()) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,10 +51,8 @@ public class IrisDecorantActuator extends EngineAssignedActuator<BlockData>
|
|||||||
int j, realX, realZ, height;
|
int j, realX, realZ, height;
|
||||||
IrisBiome biome, cave;
|
IrisBiome biome, cave;
|
||||||
|
|
||||||
for(int i = 0; i < output.getWidth(); i++)
|
for (int i = 0; i < output.getWidth(); i++) {
|
||||||
{
|
for (j = 0; j < output.getDepth(); j++) {
|
||||||
for(j = 0; j < output.getDepth(); j++)
|
|
||||||
{
|
|
||||||
boolean solid;
|
boolean solid;
|
||||||
int emptyFor = 0;
|
int emptyFor = 0;
|
||||||
int lastSolid = 0;
|
int lastSolid = 0;
|
||||||
@@ -70,49 +62,38 @@ public class IrisDecorantActuator extends EngineAssignedActuator<BlockData>
|
|||||||
biome = getComplex().getTrueBiomeStream().get(realX, realZ);
|
biome = getComplex().getTrueBiomeStream().get(realX, realZ);
|
||||||
cave = shouldRay ? getComplex().getCaveBiomeStream().get(realX, realZ) : null;
|
cave = shouldRay ? getComplex().getCaveBiomeStream().get(realX, realZ) : null;
|
||||||
|
|
||||||
if(biome.getDecorators().isEmpty() && (cave == null || cave.getDecorators().isEmpty()))
|
if (biome.getDecorators().isEmpty() && (cave == null || cave.getDecorators().isEmpty())) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(height == getDimension().getFluidHeight())
|
if (height == getDimension().getFluidHeight()) {
|
||||||
{
|
|
||||||
getShoreLineDecorator().decorate(i, j,
|
getShoreLineDecorator().decorate(i, j,
|
||||||
realX, (int) Math.round(modX(x + i+1)), (int) Math.round(modX(x + i-1)),
|
realX, (int) Math.round(modX(x + i + 1)), (int) Math.round(modX(x + i - 1)),
|
||||||
realZ, (int) Math.round(modZ(z + j+1)), (int) Math.round(modZ(z + j-1)),
|
realZ, (int) Math.round(modZ(z + j + 1)), (int) Math.round(modZ(z + j - 1)),
|
||||||
output, biome, height, getEngine().getHeight() - height);
|
output, biome, height, getEngine().getHeight() - height);
|
||||||
}
|
} else if (height == getDimension().getFluidHeight() + 1) {
|
||||||
else if (height == getDimension().getFluidHeight() + 1)
|
|
||||||
{
|
|
||||||
getSeaSurfaceDecorator().decorate(i, j,
|
getSeaSurfaceDecorator().decorate(i, j,
|
||||||
realX, (int) Math.round(modX(x + i+1)), (int) Math.round(modX(x + i-1)),
|
realX, (int) Math.round(modX(x + i + 1)), (int) Math.round(modX(x + i - 1)),
|
||||||
realZ, (int) Math.round(modZ(z + j+1)), (int) Math.round(modZ(z + j-1)),
|
realZ, (int) Math.round(modZ(z + j + 1)), (int) Math.round(modZ(z + j - 1)),
|
||||||
output, biome, height, getEngine().getHeight() - getDimension().getFluidHeight());
|
output, biome, height, getEngine().getHeight() - getDimension().getFluidHeight());
|
||||||
}
|
} else if (height < getDimension().getFluidHeight()) {
|
||||||
else if(height < getDimension().getFluidHeight())
|
|
||||||
{
|
|
||||||
getSeaFloorDecorator().decorate(i, j, realX, realZ, output, biome, height + 1, getDimension().getFluidHeight());
|
getSeaFloorDecorator().decorate(i, j, realX, realZ, output, biome, height + 1, getDimension().getFluidHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
getSurfaceDecorator().decorate(i, j, realX, realZ, output, biome, height, getEngine().getHeight() - height);
|
getSurfaceDecorator().decorate(i, j, realX, realZ, output, biome, height, getEngine().getHeight() - height);
|
||||||
|
|
||||||
if(cave != null && cave.getDecorators().isNotEmpty())
|
if (cave != null && cave.getDecorators().isNotEmpty()) {
|
||||||
{
|
for (int k = height; k > 0; k--) {
|
||||||
for(int k = height; k > 0; k--)
|
|
||||||
{
|
|
||||||
solid = PREDICATE_SOLID.test(output.get(i, k, j));
|
solid = PREDICATE_SOLID.test(output.get(i, k, j));
|
||||||
|
|
||||||
if(solid)
|
if (solid) {
|
||||||
{
|
|
||||||
if (emptyFor > 0) {
|
if (emptyFor > 0) {
|
||||||
getSurfaceDecorator().decorate(i, j, realX, realZ, output, cave, k, emptyFor);
|
getSurfaceDecorator().decorate(i, j, realX, realZ, output, cave, k, emptyFor);
|
||||||
getCeilingDecorator().decorate(i, j, realX, realZ, output, cave, lastSolid - 1, emptyFor);
|
getCeilingDecorator().decorate(i, j, realX, realZ, output, cave, lastSolid - 1, emptyFor);
|
||||||
emptyFor = 0;
|
emptyFor = 0;
|
||||||
}
|
}
|
||||||
lastSolid = k;
|
lastSolid = k;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
emptyFor++;
|
emptyFor++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -123,8 +104,7 @@ public class IrisDecorantActuator extends EngineAssignedActuator<BlockData>
|
|||||||
getEngine().getMetrics().getDecoration().put(p.getMilliseconds());
|
getEngine().getMetrics().getDecoration().put(p.getMilliseconds());
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean shouldRayDecorate()
|
private boolean shouldRayDecorate() {
|
||||||
{
|
|
||||||
return getEngine().getDimension().isCarving() || getEngine().getDimension().isCaves() || getEngine().getDimension().isRavines();
|
return getEngine().getDimension().isCarving() || getEngine().getDimension().isCaves() || getEngine().getDimension().isRavines();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
package com.volmit.iris.generator.actuator;
|
package com.volmit.iris.generator.actuator;
|
||||||
|
|
||||||
import com.volmit.iris.object.IrisBiome;
|
import com.volmit.iris.object.IrisBiome;
|
||||||
import com.volmit.iris.util.KList;
|
|
||||||
import com.volmit.iris.util.PrecisionStopwatch;
|
|
||||||
import com.volmit.iris.util.RNG;
|
|
||||||
import com.volmit.iris.scaffold.engine.Engine;
|
import com.volmit.iris.scaffold.engine.Engine;
|
||||||
import com.volmit.iris.scaffold.engine.EngineAssignedActuator;
|
import com.volmit.iris.scaffold.engine.EngineAssignedActuator;
|
||||||
import com.volmit.iris.scaffold.hunk.Hunk;
|
import com.volmit.iris.scaffold.hunk.Hunk;
|
||||||
|
import com.volmit.iris.util.KList;
|
||||||
|
import com.volmit.iris.util.PrecisionStopwatch;
|
||||||
|
import com.volmit.iris.util.RNG;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
public class IrisTerrainActuator extends EngineAssignedActuator<BlockData>
|
public class IrisTerrainActuator extends EngineAssignedActuator<BlockData> {
|
||||||
{
|
|
||||||
private static final BlockData AIR = Material.AIR.createBlockData();
|
private static final BlockData AIR = Material.AIR.createBlockData();
|
||||||
private static final BlockData BEDROCK = Material.BEDROCK.createBlockData();
|
private static final BlockData BEDROCK = Material.BEDROCK.createBlockData();
|
||||||
private static final BlockData CAVE_AIR = Material.CAVE_AIR.createBlockData();
|
private static final BlockData CAVE_AIR = Material.CAVE_AIR.createBlockData();
|
||||||
@@ -37,56 +36,46 @@ public class IrisTerrainActuator extends EngineAssignedActuator<BlockData>
|
|||||||
IrisBiome biome;
|
IrisBiome biome;
|
||||||
KList<BlockData> blocks, fblocks;
|
KList<BlockData> blocks, fblocks;
|
||||||
|
|
||||||
for(int xf = 0; xf < h.getWidth(); xf++)
|
for (int xf = 0; xf < h.getWidth(); xf++) {
|
||||||
{
|
for (zf = 0; zf < h.getDepth(); zf++) {
|
||||||
for(zf = 0; zf < h.getDepth(); zf++)
|
|
||||||
{
|
|
||||||
realX = (int) modX(xf + x);
|
realX = (int) modX(xf + x);
|
||||||
realZ = (int) modZ(zf + z);
|
realZ = (int) modZ(zf + z);
|
||||||
b = hasUnder ? (int) Math.round(getDimension().getUndercarriage().get(rng, realX, realZ)) : 0;
|
b = hasUnder ? (int) Math.round(getDimension().getUndercarriage().get(rng, realX, realZ)) : 0;
|
||||||
he = (int) Math.round(Math.min(h.getHeight(), getComplex().getHeightStream().get(realX, realZ)));
|
he = (int) Math.round(Math.min(h.getHeight(), getComplex().getHeightStream().get(realX, realZ)));
|
||||||
hf = (int) Math.round(Math.max(Math.min(h.getHeight(), getDimension().getFluidHeight()), he));
|
hf = Math.round(Math.max(Math.min(h.getHeight(), getDimension().getFluidHeight()), he));
|
||||||
biome = getComplex().getTrueBiomeStream().get(realX, realZ);
|
biome = getComplex().getTrueBiomeStream().get(realX, realZ);
|
||||||
blocks = null;
|
blocks = null;
|
||||||
fblocks = null;
|
fblocks = null;
|
||||||
|
|
||||||
if(hf < b)
|
if (hf < b) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i = hf; i >= b; i--) {
|
for (i = hf; i >= b; i--) {
|
||||||
if (i >= h.getHeight())
|
if (i >= h.getHeight()) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(i == b)
|
if (i == b) {
|
||||||
{
|
if (getDimension().isBedrock()) {
|
||||||
if(getDimension().isBedrock())
|
|
||||||
{
|
|
||||||
h.set(xf, i, zf, BEDROCK);
|
h.set(xf, i, zf, BEDROCK);
|
||||||
lastBedrock = i;
|
lastBedrock = i;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(carving && getDimension().isCarved(realX, i, realZ, rng, he))
|
if (carving && getDimension().isCarved(realX, i, realZ, rng, he)) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(i > he && i <= hf)
|
if (i > he && i <= hf) {
|
||||||
{
|
|
||||||
fdepth = hf - i;
|
fdepth = hf - i;
|
||||||
|
|
||||||
if(fblocks == null)
|
if (fblocks == null) {
|
||||||
{
|
|
||||||
fblocks = biome.generateSeaLayers(realX, realZ, rng, hf - he, getData());
|
fblocks = biome.generateSeaLayers(realX, realZ, rng, hf - he, getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(fblocks.hasIndex(fdepth))
|
if (fblocks.hasIndex(fdepth)) {
|
||||||
{
|
|
||||||
h.set(xf, i, zf, fblocks.get(fdepth));
|
h.set(xf, i, zf, fblocks.get(fdepth));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -95,16 +84,13 @@ public class IrisTerrainActuator extends EngineAssignedActuator<BlockData>
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(i <= he)
|
if (i <= he) {
|
||||||
{
|
|
||||||
depth = he - i;
|
depth = he - i;
|
||||||
if(blocks == null)
|
if (blocks == null) {
|
||||||
{
|
blocks = biome.generateLayers(realX, realZ, rng, he, he, getData(), getComplex());
|
||||||
blocks = biome.generateLayers(realX, realZ, rng, (int)he, (int)he, getData(), getComplex());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(blocks.hasIndex(depth))
|
if (blocks.hasIndex(depth)) {
|
||||||
{
|
|
||||||
h.set(xf, i, zf, blocks.get(depth));
|
h.set(xf, i, zf, blocks.get(depth));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,7 @@ import com.volmit.iris.scaffold.engine.Engine;
|
|||||||
import com.volmit.iris.scaffold.hunk.Hunk;
|
import com.volmit.iris.scaffold.hunk.Hunk;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
public class IrisCeilingDecorator extends IrisEngineDecorator
|
public class IrisCeilingDecorator extends IrisEngineDecorator {
|
||||||
{
|
|
||||||
public IrisCeilingDecorator(Engine engine) {
|
public IrisCeilingDecorator(Engine engine) {
|
||||||
super(engine, "Ceiling", DecorationPart.CEILING);
|
super(engine, "Ceiling", DecorationPart.CEILING);
|
||||||
}
|
}
|
||||||
@@ -18,32 +17,24 @@ public class IrisCeilingDecorator extends IrisEngineDecorator
|
|||||||
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
|
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
|
||||||
IrisDecorator decorator = getDecorator(biome, realX, realZ);
|
IrisDecorator decorator = getDecorator(biome, realX, realZ);
|
||||||
|
|
||||||
if(decorator != null)
|
if (decorator != null) {
|
||||||
{
|
if (!decorator.isStacking()) {
|
||||||
if(!decorator.isStacking())
|
if (height >= 0 || height < getEngine().getHeight()) {
|
||||||
{
|
|
||||||
if(height >= 0 || height < getEngine().getHeight())
|
|
||||||
{
|
|
||||||
data.set(x, height, z, decorator.getBlockData100(biome, getRng(), realX, realZ, getData()));
|
data.set(x, height, z, decorator.getBlockData100(biome, getRng(), realX, realZ, getData()));
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int stack = decorator.getHeight(getRng().nextParallelRNG(Cache.key(realX, realZ)), realX, realZ, getData());
|
int stack = decorator.getHeight(getRng().nextParallelRNG(Cache.key(realX, realZ)), realX, realZ, getData());
|
||||||
stack = Math.min(max + 1, stack);
|
stack = Math.min(max + 1, stack);
|
||||||
|
|
||||||
BlockData top = decorator.getBlockDataForTop(biome, getRng(), realX, realZ, getData());
|
BlockData top = decorator.getBlockDataForTop(biome, getRng(), realX, realZ, getData());
|
||||||
BlockData fill = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
|
BlockData fill = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
|
||||||
|
|
||||||
for(int i = 0; i < stack; i++)
|
for (int i = 0; i < stack; i++) {
|
||||||
{
|
if (height - i < 0 || height - i > getEngine().getHeight()) {
|
||||||
if(height - i < 0 || height - i > getEngine().getHeight())
|
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
double threshold = (((double)i) / (double)(stack - 1));
|
double threshold = (((double) i) / (double) (stack - 1));
|
||||||
data.set(x, height - i, z, threshold >= decorator.getTopThreshold() ? top : fill);
|
data.set(x, height - i, z, threshold >= decorator.getTopThreshold() ? top : fill);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,11 +5,11 @@ import com.volmit.iris.object.DecorationPart;
|
|||||||
import com.volmit.iris.object.IrisBiome;
|
import com.volmit.iris.object.IrisBiome;
|
||||||
import com.volmit.iris.object.IrisDecorator;
|
import com.volmit.iris.object.IrisDecorator;
|
||||||
import com.volmit.iris.scaffold.cache.Cache;
|
import com.volmit.iris.scaffold.cache.Cache;
|
||||||
import com.volmit.iris.util.KList;
|
|
||||||
import com.volmit.iris.util.RNG;
|
|
||||||
import com.volmit.iris.scaffold.engine.Engine;
|
import com.volmit.iris.scaffold.engine.Engine;
|
||||||
import com.volmit.iris.scaffold.engine.EngineAssignedComponent;
|
import com.volmit.iris.scaffold.engine.EngineAssignedComponent;
|
||||||
import com.volmit.iris.scaffold.engine.EngineDecorator;
|
import com.volmit.iris.scaffold.engine.EngineDecorator;
|
||||||
|
import com.volmit.iris.util.KList;
|
||||||
|
import com.volmit.iris.util.RNG;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
public abstract class IrisEngineDecorator extends EngineAssignedComponent implements EngineDecorator {
|
public abstract class IrisEngineDecorator extends EngineAssignedComponent implements EngineDecorator {
|
||||||
@@ -26,28 +26,21 @@ public abstract class IrisEngineDecorator extends EngineAssignedComponent implem
|
|||||||
this.rng = new RNG(getSeed() + 29356788 - (part.ordinal() * 10439677));
|
this.rng = new RNG(getSeed() + 29356788 - (part.ordinal() * 10439677));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected IrisDecorator getDecorator(IrisBiome biome, double realX, double realZ)
|
protected IrisDecorator getDecorator(IrisBiome biome, double realX, double realZ) {
|
||||||
{
|
|
||||||
KList<IrisDecorator> v = new KList<>();
|
KList<IrisDecorator> v = new KList<>();
|
||||||
RNG rng = new RNG(Cache.key((int)realX, (int)realZ));
|
RNG rng = new RNG(Cache.key((int) realX, (int) realZ));
|
||||||
|
|
||||||
for(IrisDecorator i : biome.getDecorators())
|
for (IrisDecorator i : biome.getDecorators()) {
|
||||||
{
|
try {
|
||||||
try
|
if (i.getPartOf().equals(part) && i.getBlockData(biome, this.rng, realX, realZ, getData()) != null) {
|
||||||
{
|
|
||||||
if(i.getPartOf().equals(part) && i.getBlockData(biome, this.rng, realX, realZ, getData()) != null)
|
|
||||||
{
|
|
||||||
v.add(i);
|
v.add(i);
|
||||||
}
|
}
|
||||||
}
|
} catch (Throwable e) {
|
||||||
|
|
||||||
catch(Throwable e)
|
|
||||||
{
|
|
||||||
Iris.error("PART OF: " + biome.getLoadFile().getAbsolutePath() + " HAS AN INVALID DECORATOR near 'partOf'!!!");
|
Iris.error("PART OF: " + biome.getLoadFile().getAbsolutePath() + " HAS AN INVALID DECORATOR near 'partOf'!!!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(v.isNotEmpty()) {
|
if (v.isNotEmpty()) {
|
||||||
return v.get(rng.nextInt(v.size()));
|
return v.get(rng.nextInt(v.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,49 +8,40 @@ import com.volmit.iris.scaffold.engine.Engine;
|
|||||||
import com.volmit.iris.scaffold.hunk.Hunk;
|
import com.volmit.iris.scaffold.hunk.Hunk;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
public class IrisSeaFloorDecorator extends IrisEngineDecorator
|
public class IrisSeaFloorDecorator extends IrisEngineDecorator {
|
||||||
{
|
|
||||||
public IrisSeaFloorDecorator(Engine engine) {
|
public IrisSeaFloorDecorator(Engine engine) {
|
||||||
super(engine, "Sea Floor", DecorationPart.SEA_FLOOR);
|
super(engine, "Sea Floor", DecorationPart.SEA_FLOOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
|
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
|
||||||
if(height <= getDimension().getFluidHeight()) {
|
if (height <= getDimension().getFluidHeight()) {
|
||||||
|
|
||||||
IrisDecorator decorator = getDecorator(biome, realX, realZ);
|
IrisDecorator decorator = getDecorator(biome, realX, realZ);
|
||||||
|
|
||||||
if(decorator != null)
|
if (decorator != null) {
|
||||||
{
|
if (!decorator.isStacking()) {
|
||||||
if(!decorator.isStacking())
|
if (height >= 0 || height < getEngine().getHeight()) {
|
||||||
{
|
|
||||||
if(height >= 0 || height < getEngine().getHeight())
|
|
||||||
{
|
|
||||||
data.set(x, height, z, decorator.getBlockData100(biome, getRng(), realX, realZ, getData()));
|
data.set(x, height, z, decorator.getBlockData100(biome, getRng(), realX, realZ, getData()));
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
int stack = decorator.getHeight(getRng().nextParallelRNG(Cache.key(realX, realZ)), realX, realZ, getData());
|
int stack = decorator.getHeight(getRng().nextParallelRNG(Cache.key(realX, realZ)), realX, realZ, getData());
|
||||||
stack = Math.min(stack, getDimension().getFluidHeight() - height + 2);
|
stack = Math.min(stack, getDimension().getFluidHeight() - height + 2);
|
||||||
|
|
||||||
BlockData top = decorator.getBlockDataForTop(biome, getRng(), realX, realZ, getData());
|
BlockData top = decorator.getBlockDataForTop(biome, getRng(), realX, realZ, getData());
|
||||||
BlockData fill = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
|
BlockData fill = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
|
||||||
|
|
||||||
for(int i = 0; i < stack; i++)
|
for (int i = 0; i < stack; i++) {
|
||||||
{
|
if (height - i < 0 || height - i > getEngine().getHeight()) {
|
||||||
if(height - i < 0 || height - i > getEngine().getHeight())
|
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(height+i > getDimension().getFluidHeight())
|
if (height + i > getDimension().getFluidHeight()) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
double threshold = ((double)i) / (stack - 1);
|
double threshold = ((double) i) / (stack - 1);
|
||||||
data.set(x, height+i, z, threshold >= decorator.getTopThreshold() ? top : fill);
|
data.set(x, height + i, z, threshold >= decorator.getTopThreshold() ? top : fill);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,7 @@ import com.volmit.iris.scaffold.engine.Engine;
|
|||||||
import com.volmit.iris.scaffold.hunk.Hunk;
|
import com.volmit.iris.scaffold.hunk.Hunk;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
public class IrisSeaSurfaceDecorator extends IrisEngineDecorator
|
public class IrisSeaSurfaceDecorator extends IrisEngineDecorator {
|
||||||
{
|
|
||||||
public IrisSeaSurfaceDecorator(Engine engine) {
|
public IrisSeaSurfaceDecorator(Engine engine) {
|
||||||
super(engine, "Sea Surface", DecorationPart.SEA_SURFACE);
|
super(engine, "Sea Surface", DecorationPart.SEA_SURFACE);
|
||||||
}
|
}
|
||||||
@@ -18,30 +17,22 @@ public class IrisSeaSurfaceDecorator extends IrisEngineDecorator
|
|||||||
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
|
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
|
||||||
IrisDecorator decorator = getDecorator(biome, realX, realZ);
|
IrisDecorator decorator = getDecorator(biome, realX, realZ);
|
||||||
|
|
||||||
if(decorator != null)
|
if (decorator != null) {
|
||||||
{
|
if (!decorator.isStacking()) {
|
||||||
if(!decorator.isStacking())
|
if (height >= 0 || height < getEngine().getHeight()) {
|
||||||
{
|
data.set(x, getDimension().getFluidHeight() + 1, z, decorator.getBlockData100(biome, getRng(), realX, realZ, getData()));
|
||||||
if(height >= 0 || height < getEngine().getHeight())
|
|
||||||
{
|
|
||||||
data.set(x, getDimension().getFluidHeight()+1, z, decorator.getBlockData100(biome, getRng(), realX, realZ, getData()));
|
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int stack = decorator.getHeight(getRng().nextParallelRNG(Cache.key(realX, realZ)), realX, realZ, getData());
|
int stack = decorator.getHeight(getRng().nextParallelRNG(Cache.key(realX, realZ)), realX, realZ, getData());
|
||||||
|
|
||||||
BlockData top = decorator.getBlockDataForTop(biome, getRng(), realX, realZ, getData());
|
BlockData top = decorator.getBlockDataForTop(biome, getRng(), realX, realZ, getData());
|
||||||
BlockData fill = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
|
BlockData fill = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
|
||||||
for(int i = 0; i < stack; i++)
|
for (int i = 0; i < stack; i++) {
|
||||||
{
|
if (height - i < 0 || height - i > getEngine().getHeight()) {
|
||||||
if(height - i < 0 || height - i > getEngine().getHeight())
|
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
double threshold = ((double)i) / (stack - 1);
|
double threshold = ((double) i) / (stack - 1);
|
||||||
data.set(x, getDimension().getFluidHeight() + 1 + i, z, threshold >= decorator.getTopThreshold() ? top : fill);
|
data.set(x, getDimension().getFluidHeight() + 1 + i, z, threshold >= decorator.getTopThreshold() ? top : fill);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,7 @@ import com.volmit.iris.scaffold.engine.Engine;
|
|||||||
import com.volmit.iris.scaffold.hunk.Hunk;
|
import com.volmit.iris.scaffold.hunk.Hunk;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
public class IrisShoreLineDecorator extends IrisEngineDecorator
|
public class IrisShoreLineDecorator extends IrisEngineDecorator {
|
||||||
{
|
|
||||||
public IrisShoreLineDecorator(Engine engine) {
|
public IrisShoreLineDecorator(Engine engine) {
|
||||||
super(engine, "Shore Line", DecorationPart.SHORE_LINE);
|
super(engine, "Shore Line", DecorationPart.SHORE_LINE);
|
||||||
}
|
}
|
||||||
@@ -17,32 +16,26 @@ public class IrisShoreLineDecorator extends IrisEngineDecorator
|
|||||||
@Override
|
@Override
|
||||||
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
|
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
|
||||||
|
|
||||||
if(height == getDimension().getFluidHeight()) {
|
if (height == getDimension().getFluidHeight()) {
|
||||||
if (Math.round(getComplex().getHeightStream().get(realX1, realZ)) < getComplex().getFluidHeight() ||
|
if (Math.round(getComplex().getHeightStream().get(realX1, realZ)) < getComplex().getFluidHeight() ||
|
||||||
Math.round(getComplex().getHeightStream().get(realX_1, realZ)) < getComplex().getFluidHeight() ||
|
Math.round(getComplex().getHeightStream().get(realX_1, realZ)) < getComplex().getFluidHeight() ||
|
||||||
Math.round(getComplex().getHeightStream().get(realX, realZ1)) < getComplex().getFluidHeight() ||
|
Math.round(getComplex().getHeightStream().get(realX, realZ1)) < getComplex().getFluidHeight() ||
|
||||||
Math.round(getComplex().getHeightStream().get(realX, realZ_1)) < getComplex().getFluidHeight()
|
Math.round(getComplex().getHeightStream().get(realX, realZ_1)) < getComplex().getFluidHeight()
|
||||||
)
|
) {
|
||||||
{
|
|
||||||
IrisDecorator decorator = getDecorator(biome, realX, realZ);
|
IrisDecorator decorator = getDecorator(biome, realX, realZ);
|
||||||
|
|
||||||
if(decorator != null)
|
if (decorator != null) {
|
||||||
{
|
if (!decorator.isStacking()) {
|
||||||
if(!decorator.isStacking())
|
data.set(x, height + 1, z, decorator.getBlockData100(biome, getRng(), realX, realZ, getData()));
|
||||||
{
|
} else {
|
||||||
data.set(x, height+1, z, decorator.getBlockData100(biome, getRng(), realX, realZ, getData()));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int stack = decorator.getHeight(getRng().nextParallelRNG(Cache.key(realX, realZ)), realX, realZ, getData());
|
int stack = decorator.getHeight(getRng().nextParallelRNG(Cache.key(realX, realZ)), realX, realZ, getData());
|
||||||
|
|
||||||
BlockData top = decorator.getBlockDataForTop(biome, getRng(), realX, realZ, getData());
|
BlockData top = decorator.getBlockDataForTop(biome, getRng(), realX, realZ, getData());
|
||||||
BlockData fill = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
|
BlockData fill = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
|
||||||
|
|
||||||
for(int i = 0; i < stack; i++)
|
for (int i = 0; i < stack; i++) {
|
||||||
{
|
double threshold = ((double) i) / (stack - 1);
|
||||||
double threshold = ((double)i) / (stack - 1);
|
data.set(x, height + 1 + i, z, threshold >= decorator.getTopThreshold() ? top : fill);
|
||||||
data.set(x, height+1+i, z, threshold >= decorator.getTopThreshold() ? top : fill);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,16 +10,14 @@ import com.volmit.iris.scaffold.hunk.Hunk;
|
|||||||
import org.bukkit.block.data.Bisected;
|
import org.bukkit.block.data.Bisected;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
public class IrisSurfaceDecorator extends IrisEngineDecorator
|
public class IrisSurfaceDecorator extends IrisEngineDecorator {
|
||||||
{
|
|
||||||
public IrisSurfaceDecorator(Engine engine) {
|
public IrisSurfaceDecorator(Engine engine) {
|
||||||
super(engine, "Surface", DecorationPart.NONE);
|
super(engine, "Surface", DecorationPart.NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
|
public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk<BlockData> data, IrisBiome biome, int height, int max) {
|
||||||
if(biome.getInferredType().equals(InferredType.SHORE) && height < getDimension().getFluidHeight())
|
if (biome.getInferredType().equals(InferredType.SHORE) && height < getDimension().getFluidHeight()) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,44 +26,32 @@ public class IrisSurfaceDecorator extends IrisEngineDecorator
|
|||||||
bdx = data.get(x, height, z);
|
bdx = data.get(x, height, z);
|
||||||
boolean underwater = height < getDimension().getFluidHeight();
|
boolean underwater = height < getDimension().getFluidHeight();
|
||||||
|
|
||||||
if(decorator != null)
|
if (decorator != null) {
|
||||||
{
|
if (!decorator.isStacking()) {
|
||||||
if(!decorator.isStacking())
|
|
||||||
{
|
|
||||||
bd = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
|
bd = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
|
||||||
|
|
||||||
if(!underwater)
|
if (!underwater) {
|
||||||
{
|
if (!canGoOn(bd, bdx)) {
|
||||||
if(!canGoOn(bd, bdx))
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(bd instanceof Bisected)
|
if (bd instanceof Bisected) {
|
||||||
{
|
|
||||||
bd = bd.clone();
|
bd = bd.clone();
|
||||||
((Bisected)bd).setHalf(Bisected.Half.TOP);
|
((Bisected) bd).setHalf(Bisected.Half.TOP);
|
||||||
try
|
try {
|
||||||
{
|
data.set(x, height + 2, z, bd);
|
||||||
data.set(x, height+2, z, bd);
|
} catch (Throwable e) {
|
||||||
}
|
|
||||||
|
|
||||||
catch(Throwable e)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
bd = bd.clone();
|
bd = bd.clone();
|
||||||
((Bisected)bd).setHalf(Bisected.Half.BOTTOM);
|
((Bisected) bd).setHalf(Bisected.Half.BOTTOM);
|
||||||
}
|
}
|
||||||
|
|
||||||
data.set(x, height+1, z, bd);
|
data.set(x, height + 1, z, bd);
|
||||||
|
|
||||||
}
|
} else {
|
||||||
else
|
if (height < getDimension().getFluidHeight()) {
|
||||||
{
|
|
||||||
if (height < getDimension().getFluidHeight())
|
|
||||||
{
|
|
||||||
max = getDimension().getFluidHeight() - height;
|
max = getDimension().getFluidHeight() - height;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,27 +59,23 @@ public class IrisSurfaceDecorator extends IrisEngineDecorator
|
|||||||
BlockData top = decorator.getBlockDataForTop(biome, getRng(), realX, realZ, getData());
|
BlockData top = decorator.getBlockDataForTop(biome, getRng(), realX, realZ, getData());
|
||||||
BlockData fill = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
|
BlockData fill = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
|
||||||
|
|
||||||
for(int i = 0; i < stack; i++)
|
for (int i = 0; i < stack; i++) {
|
||||||
{
|
double threshold = ((double) i) / (stack - 1);
|
||||||
double threshold = ((double)i) / (stack - 1);
|
|
||||||
bd = threshold >= decorator.getTopThreshold() ? top : fill;
|
bd = threshold >= decorator.getTopThreshold() ? top : fill;
|
||||||
|
|
||||||
if(bd == null)
|
if (bd == null) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(i == 0 && !underwater && !canGoOn(bd, bdx))
|
if (i == 0 && !underwater && !canGoOn(bd, bdx)) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(underwater && height + 1 + i > getDimension().getFluidHeight())
|
if (underwater && height + 1 + i > getDimension().getFluidHeight()) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
data.set(x, height+1+i, z, bd);
|
data.set(x, height + 1 + i, z, bd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,8 +12,7 @@ import org.bukkit.block.data.BlockData;
|
|||||||
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
|
public class IrisCaveModifier extends EngineAssignedModifier<BlockData> {
|
||||||
{
|
|
||||||
public static final BlockData CAVE_AIR = B.get("CAVE_AIR");
|
public static final BlockData CAVE_AIR = B.get("CAVE_AIR");
|
||||||
public static final BlockData AIR = B.get("AIR");
|
public static final BlockData AIR = B.get("AIR");
|
||||||
private static final KList<CaveResult> EMPTY = new KList<>();
|
private static final KList<CaveResult> EMPTY = new KList<>();
|
||||||
@@ -28,31 +27,24 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onModify(int x, int z, Hunk<BlockData> a) {
|
public void onModify(int x, int z, Hunk<BlockData> a) {
|
||||||
if(!getDimension().isCaves())
|
if (!getDimension().isCaves()) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PrecisionStopwatch p = PrecisionStopwatch.start();
|
PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||||
for(int i = 0; i < a.getWidth(); i++)
|
for (int i = 0; i < a.getWidth(); i++) {
|
||||||
{
|
for (int j = 0; j < a.getDepth(); j++) {
|
||||||
for(int j = 0; j < a.getDepth(); j++)
|
|
||||||
{
|
|
||||||
KList<CaveResult> caves = genCaves(x + i, z + j, i, j, a);
|
KList<CaveResult> caves = genCaves(x + i, z + j, i, j, a);
|
||||||
int he = (int) Math.round(getComplex().getHeightStream().get(x+i, z+j));
|
int he = (int) Math.round(getComplex().getHeightStream().get(x + i, z + j));
|
||||||
if(caves != null && caves.isNotEmpty())
|
if (caves != null && caves.isNotEmpty()) {
|
||||||
{
|
|
||||||
IrisBiome cave = getComplex().getCaveBiomeStream().get(x + i, z + j);
|
IrisBiome cave = getComplex().getCaveBiomeStream().get(x + i, z + j);
|
||||||
|
|
||||||
if(cave == null)
|
if (cave == null) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(CaveResult cl : caves)
|
for (CaveResult cl : caves) {
|
||||||
{
|
if (cl.getFloor() < 0 || cl.getFloor() > getEngine().getHeight() || cl.getCeiling() > getEngine().getHeight() || cl.getCeiling() < 0) {
|
||||||
if(cl.getFloor() < 0 || cl.getFloor() > getEngine().getHeight() || cl.getCeiling() > getEngine().getHeight() || cl.getCeiling() < 0)
|
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,13 +53,11 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
|
|||||||
he - cl.getCeiling(),
|
he - cl.getCeiling(),
|
||||||
he - cl.getCeiling(), getData(), getComplex());
|
he - cl.getCeiling(), getData(), getComplex());
|
||||||
|
|
||||||
for(int g = 0; g < floor.size(); g++)
|
for (int g = 0; g < floor.size(); g++) {
|
||||||
{
|
|
||||||
a.set(i, cl.getFloor() - g, j, floor.get(g));
|
a.set(i, cl.getFloor() - g, j, floor.get(g));
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int g = ceiling.size() - 1; g > 0; g--)
|
for (int g = ceiling.size() - 1; g > 0; g--) {
|
||||||
{
|
|
||||||
a.set(i, cl.getCeiling() + g, j, ceiling.get(g));
|
a.set(i, cl.getCeiling() + g, j, ceiling.get(g));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -78,10 +68,8 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
|
|||||||
getEngine().getMetrics().getCave().put(p.getMilliseconds());
|
getEngine().getMetrics().getCave().put(p.getMilliseconds());
|
||||||
}
|
}
|
||||||
|
|
||||||
public KList<CaveResult> genCaves(double wxx, double wzz, int x, int z, Hunk<BlockData> data)
|
public KList<CaveResult> genCaves(double wxx, double wzz, int x, int z, Hunk<BlockData> data) {
|
||||||
{
|
if (!getDimension().isCaves()) {
|
||||||
if(!getDimension().isCaves())
|
|
||||||
{
|
|
||||||
return EMPTY;
|
return EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,8 +78,7 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
|
|||||||
gg.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Sub);
|
gg.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Sub);
|
||||||
gg.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
|
gg.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
|
||||||
|
|
||||||
for(int i = 0; i < getDimension().getCaveLayers().size(); i++)
|
for (int i = 0; i < getDimension().getCaveLayers().size(); i++) {
|
||||||
{
|
|
||||||
IrisCaveLayer layer = getDimension().getCaveLayers().get(i);
|
IrisCaveLayer layer = getDimension().getCaveLayers().get(i);
|
||||||
generateCave(result, wxx, wzz, x, z, data, layer, i);
|
generateCave(result, wxx, wzz, x, z, data, layer, i);
|
||||||
}
|
}
|
||||||
@@ -99,23 +86,17 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateCave(KList<CaveResult> result, double wxx, double wzz, int x, int z, Hunk<BlockData> data, IrisCaveLayer layer, int seed)
|
public void generateCave(KList<CaveResult> result, double wxx, double wzz, int x, int z, Hunk<BlockData> data, IrisCaveLayer layer, int seed) {
|
||||||
{
|
|
||||||
double scale = layer.getCaveZoom();
|
double scale = layer.getCaveZoom();
|
||||||
Function<Integer, BlockData> fluid = (height) ->
|
Function<Integer, BlockData> fluid = (height) ->
|
||||||
{
|
{
|
||||||
if(!layer.getFluid().hasFluid(getData()))
|
if (!layer.getFluid().hasFluid(getData())) {
|
||||||
{
|
|
||||||
return CAVE_AIR;
|
return CAVE_AIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(layer.getFluid().isInverseHeight() && height >= layer.getFluid().getFluidHeight())
|
if (layer.getFluid().isInverseHeight() && height >= layer.getFluid().getFluidHeight()) {
|
||||||
{
|
|
||||||
return layer.getFluid().getFluid(getData());
|
return layer.getFluid().getFluid(getData());
|
||||||
}
|
} else if (!layer.getFluid().isInverseHeight() && height <= layer.getFluid().getFluidHeight()) {
|
||||||
|
|
||||||
else if(!layer.getFluid().isInverseHeight() && height <= layer.getFluid().getFluidHeight())
|
|
||||||
{
|
|
||||||
return layer.getFluid().getFluid(getData());
|
return layer.getFluid().getFluid(getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,8 +111,7 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
|
|||||||
double distanceTake = 0.0022 * baseWidth;
|
double distanceTake = 0.0022 * baseWidth;
|
||||||
double caveHeightNoise = layer.getVerticalSlope().get(rng, wxx, wzz);
|
double caveHeightNoise = layer.getVerticalSlope().get(rng, wxx, wzz);
|
||||||
|
|
||||||
if(caveHeightNoise > 259 || caveHeightNoise < -1)
|
if (caveHeightNoise > 259 || caveHeightNoise < -1) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,62 +119,48 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
|
|||||||
int ceiling = -256;
|
int ceiling = -256;
|
||||||
int floor = 512;
|
int floor = 512;
|
||||||
|
|
||||||
for(double tunnelHeight = 1; tunnelHeight <= baseWidth; tunnelHeight++)
|
for (double tunnelHeight = 1; tunnelHeight <= baseWidth; tunnelHeight++) {
|
||||||
{
|
|
||||||
double distance = (gg.GetCellular(((wx + (10000 * seed)) / layer.getCaveZoom()), ((wz - (10000 * seed)) / layer.getCaveZoom())) + 1D) / 2D;
|
double distance = (gg.GetCellular(((wx + (10000 * seed)) / layer.getCaveZoom()), ((wz - (10000 * seed)) / layer.getCaveZoom())) + 1D) / 2D;
|
||||||
if(distance < distanceCheck - (tunnelHeight * distanceTake))
|
if (distance < distanceCheck - (tunnelHeight * distanceTake)) {
|
||||||
{
|
|
||||||
int caveHeight = (int) Math.round(caveHeightNoise);
|
int caveHeight = (int) Math.round(caveHeightNoise);
|
||||||
int pu = (int) (caveHeight + tunnelHeight);
|
int pu = (int) (caveHeight + tunnelHeight);
|
||||||
int pd = (int) (caveHeight - tunnelHeight);
|
int pd = (int) (caveHeight - tunnelHeight);
|
||||||
|
|
||||||
if(pd > surface + 1)
|
if (pd > surface + 1) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!layer.isCanBreakSurface() && pu > surface - 3)
|
if (!layer.isCanBreakSurface() && pu > surface - 3) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((pu > 255 && pd > 255) || (pu < 0 && pd < 0))
|
if ((pu > 255 && pd > 255) || (pu < 0 && pd < 0)) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(data == null)
|
if (data == null) {
|
||||||
{
|
|
||||||
ceiling = Math.max(pu, ceiling);
|
ceiling = Math.max(pu, ceiling);
|
||||||
floor = Math.min(pu, floor);
|
floor = Math.min(pu, floor);
|
||||||
ceiling = Math.max(pd, ceiling);
|
ceiling = Math.max(pd, ceiling);
|
||||||
floor = Math.min(pd, floor);
|
floor = Math.min(pd, floor);
|
||||||
|
|
||||||
if(tunnelHeight == 1)
|
if (tunnelHeight == 1) {
|
||||||
{
|
|
||||||
ceiling = Math.max(caveHeight, ceiling);
|
ceiling = Math.max(caveHeight, ceiling);
|
||||||
floor = Math.min(caveHeight, floor);
|
floor = Math.min(caveHeight, floor);
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
if (dig(x, pu, z, data, fluid)) {
|
||||||
else
|
|
||||||
{
|
|
||||||
if(dig(x, pu, z, data, fluid))
|
|
||||||
{
|
|
||||||
ceiling = Math.max(pu, ceiling);
|
ceiling = Math.max(pu, ceiling);
|
||||||
floor = Math.min(pu, floor);
|
floor = Math.min(pu, floor);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dig(x, pd, z, data, fluid))
|
if (dig(x, pd, z, data, fluid)) {
|
||||||
{
|
|
||||||
ceiling = Math.max(pd, ceiling);
|
ceiling = Math.max(pd, ceiling);
|
||||||
floor = Math.min(pd, floor);
|
floor = Math.min(pd, floor);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(tunnelHeight == 1)
|
if (tunnelHeight == 1) {
|
||||||
{
|
if (dig(x, caveHeight, z, data, fluid)) {
|
||||||
if(dig(x, caveHeight, z, data, fluid))
|
|
||||||
{
|
|
||||||
ceiling = Math.max(caveHeight, ceiling);
|
ceiling = Math.max(caveHeight, ceiling);
|
||||||
floor = Math.min(caveHeight, floor);
|
floor = Math.min(caveHeight, floor);
|
||||||
}
|
}
|
||||||
@@ -203,27 +169,23 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(floor >= 0 && ceiling <= 255)
|
if (floor >= 0 && ceiling <= 255) {
|
||||||
{
|
|
||||||
result.add(new CaveResult(floor, ceiling));
|
result.add(new CaveResult(floor, ceiling));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Material mat(int x, int y, int z, Hunk<BlockData> data)
|
private Material mat(int x, int y, int z, Hunk<BlockData> data) {
|
||||||
{
|
BlockData d = data.get(Math.max(x, 0), Math.max(y, 0), Math.max(z, 0));
|
||||||
BlockData d = data.get(Math.max(x, 0),Math.max(y, 0),Math.max(z,0));
|
|
||||||
|
|
||||||
if(d != null)
|
if (d != null) {
|
||||||
{
|
|
||||||
return d.getMaterial();
|
return d.getMaterial();
|
||||||
}
|
}
|
||||||
|
|
||||||
return Material.CAVE_AIR;
|
return Material.CAVE_AIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean dig(int x, int y, int z, Hunk<BlockData> data, Function<Integer, BlockData> caveFluid)
|
public boolean dig(int x, int y, int z, Hunk<BlockData> data, Function<Integer, BlockData> caveFluid) {
|
||||||
{
|
Material a = mat(x, y, z, data);
|
||||||
Material a = mat(x,y,z, data);
|
|
||||||
Material c = mat(x, y + 1, z, data);
|
Material c = mat(x, y + 1, z, data);
|
||||||
Material d = mat(x, y + 2, z, data);
|
Material d = mat(x, y + 2, z, data);
|
||||||
Material e = mat(x, y + 3, z, data);
|
Material e = mat(x, y + 3, z, data);
|
||||||
@@ -231,8 +193,7 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
|
|||||||
BlockData b = caveFluid.apply(y);
|
BlockData b = caveFluid.apply(y);
|
||||||
BlockData b2 = caveFluid.apply(y + 1);
|
BlockData b2 = caveFluid.apply(y + 1);
|
||||||
|
|
||||||
if(can(a) && canAir(c, b) && canAir(f, b) && canWater(d) && canWater(e))
|
if (can(a) && canAir(c, b) && canAir(f, b) && canWater(d) && canWater(e)) {
|
||||||
{
|
|
||||||
data.set(x, y, z, b);
|
data.set(x, y, z, b);
|
||||||
data.set(x, y + 1, z, b2);
|
data.set(x, y + 1, z, b2);
|
||||||
return true;
|
return true;
|
||||||
@@ -241,8 +202,7 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canAir(Material m, BlockData caveFluid)
|
public boolean canAir(Material m, BlockData caveFluid) {
|
||||||
{
|
|
||||||
return (B.isSolid(m) ||
|
return (B.isSolid(m) ||
|
||||||
(B.isDecorant(m.createBlockData())) || m.equals(Material.AIR)
|
(B.isDecorant(m.createBlockData())) || m.equals(Material.AIR)
|
||||||
|| m.equals(caveFluid.getMaterial()) ||
|
|| m.equals(caveFluid.getMaterial()) ||
|
||||||
@@ -250,13 +210,11 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
|
|||||||
&& !m.equals(Material.BEDROCK);
|
&& !m.equals(Material.BEDROCK);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canWater(Material m)
|
public boolean canWater(Material m) {
|
||||||
{
|
|
||||||
return !m.equals(Material.WATER);
|
return !m.equals(Material.WATER);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean can(Material m)
|
public boolean can(Material m) {
|
||||||
{
|
|
||||||
return B.isSolid(m) && !m.equals(Material.BEDROCK);
|
return B.isSolid(m) && !m.equals(Material.BEDROCK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,9 +15,10 @@ import org.bukkit.util.BlockVector;
|
|||||||
|
|
||||||
public class IrisDepositModifier extends EngineAssignedModifier<BlockData> {
|
public class IrisDepositModifier extends EngineAssignedModifier<BlockData> {
|
||||||
private final RNG rng;
|
private final RNG rng;
|
||||||
|
|
||||||
public IrisDepositModifier(Engine engine) {
|
public IrisDepositModifier(Engine engine) {
|
||||||
super(engine, "Deposit");
|
super(engine, "Deposit");
|
||||||
rng = new RNG(getEngine().getWorld().getSeed()+12938).nextParallelRNG(28348777);
|
rng = new RNG(getEngine().getWorld().getSeed() + 12938).nextParallelRNG(28348777);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -27,50 +28,40 @@ public class IrisDepositModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
getEngine().getMetrics().getDeposit().put(p.getMilliseconds());
|
getEngine().getMetrics().getDeposit().put(p.getMilliseconds());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateDeposits(RNG rx, Hunk<BlockData> terrain, int x, int z)
|
public void generateDeposits(RNG rx, Hunk<BlockData> terrain, int x, int z) {
|
||||||
{
|
|
||||||
RNG ro = rx.nextParallelRNG(x * x).nextParallelRNG(z * z);
|
RNG ro = rx.nextParallelRNG(x * x).nextParallelRNG(z * z);
|
||||||
IrisRegion region = getComplex().getRegionStream().get((x * 16) + 7, (z * 16) + 7);
|
IrisRegion region = getComplex().getRegionStream().get((x * 16) + 7, (z * 16) + 7);
|
||||||
IrisBiome biome = getComplex().getTrueBiomeStream().get((x * 16) + 7, (z * 16) + 7);
|
IrisBiome biome = getComplex().getTrueBiomeStream().get((x * 16) + 7, (z * 16) + 7);
|
||||||
|
|
||||||
for(IrisDepositGenerator k : getDimension().getDeposits())
|
for (IrisDepositGenerator k : getDimension().getDeposits()) {
|
||||||
{
|
|
||||||
generate(k, terrain, ro, x, z, false);
|
generate(k, terrain, ro, x, z, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(IrisDepositGenerator k : region.getDeposits())
|
for (IrisDepositGenerator k : region.getDeposits()) {
|
||||||
{
|
for (int l = 0; l < ro.i(k.getMinPerChunk(), k.getMaxPerChunk()); l++) {
|
||||||
for(int l = 0; l < ro.i(k.getMinPerChunk(), k.getMaxPerChunk()); l++)
|
|
||||||
{
|
|
||||||
generate(k, terrain, ro, x, z, false);
|
generate(k, terrain, ro, x, z, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(IrisDepositGenerator k : biome.getDeposits())
|
for (IrisDepositGenerator k : biome.getDeposits()) {
|
||||||
{
|
for (int l = 0; l < ro.i(k.getMinPerChunk(), k.getMaxPerChunk()); l++) {
|
||||||
for(int l = 0; l < ro.i(k.getMinPerChunk(), k.getMaxPerChunk()); l++)
|
|
||||||
{
|
|
||||||
generate(k, terrain, ro, x, z, false);
|
generate(k, terrain, ro, x, z, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generate(IrisDepositGenerator k, Hunk<BlockData> data, RNG rng, int cx, int cz, boolean safe)
|
public void generate(IrisDepositGenerator k, Hunk<BlockData> data, RNG rng, int cx, int cz, boolean safe) {
|
||||||
{
|
|
||||||
generate(k, data, rng, cx, cz, safe, null);
|
generate(k, data, rng, cx, cz, safe, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generate(IrisDepositGenerator k, Hunk<BlockData> data, RNG rng, int cx, int cz, boolean safe, HeightMap he)
|
public void generate(IrisDepositGenerator k, Hunk<BlockData> data, RNG rng, int cx, int cz, boolean safe, HeightMap he) {
|
||||||
{
|
for (int l = 0; l < rng.i(k.getMinPerChunk(), k.getMaxPerChunk()); l++) {
|
||||||
for(int l = 0; l < rng.i(k.getMinPerChunk(), k.getMaxPerChunk()); l++)
|
|
||||||
{
|
|
||||||
IrisObject clump = k.getClump(rng, getData());
|
IrisObject clump = k.getClump(rng, getData());
|
||||||
|
|
||||||
int af = (int) Math.ceil(clump.getW() / 2D);
|
int af = (int) Math.ceil(clump.getW() / 2D);
|
||||||
int bf = (int) Math.floor(16D - (clump.getW() / 2D));
|
int bf = (int) Math.floor(16D - (clump.getW() / 2D));
|
||||||
|
|
||||||
if(af > bf || af < 0 || bf > 15 || af > 15 || bf < 0)
|
if (af > bf || af < 0 || bf > 15 || af > 15 || bf < 0) {
|
||||||
{
|
|
||||||
af = 6;
|
af = 6;
|
||||||
bf = 9;
|
bf = 9;
|
||||||
}
|
}
|
||||||
@@ -81,8 +72,7 @@ public class IrisDepositModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
getComplex().getHeightStream().get((cx << 4) + x, (cz << 4) + z)
|
getComplex().getHeightStream().get((cx << 4) + x, (cz << 4) + z)
|
||||||
))) - 7;
|
))) - 7;
|
||||||
|
|
||||||
if(height <= 0)
|
if (height <= 0) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,33 +80,29 @@ public class IrisDepositModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
// TODO: WARNING HEIGHT
|
// TODO: WARNING HEIGHT
|
||||||
int a = Math.min(height, Math.min(256, k.getMaxHeight()));
|
int a = Math.min(height, Math.min(256, k.getMaxHeight()));
|
||||||
|
|
||||||
if(i >= a)
|
if (i >= a) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int h = rng.i(i, a);
|
int h = rng.i(i, a);
|
||||||
|
|
||||||
if(h > k.getMaxHeight() || h < k.getMinHeight() || h > height - 2)
|
if (h > k.getMaxHeight() || h < k.getMinHeight() || h > height - 2) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(BlockVector j : clump.getBlocks().keySet())
|
for (BlockVector j : clump.getBlocks().keySet()) {
|
||||||
{
|
|
||||||
int nx = j.getBlockX() + x;
|
int nx = j.getBlockX() + x;
|
||||||
int ny = j.getBlockY() + h;
|
int ny = j.getBlockY() + h;
|
||||||
int nz = j.getBlockZ() + z;
|
int nz = j.getBlockZ() + z;
|
||||||
|
|
||||||
if(ny > height || nx > 15 || nx < 0 || ny > 255 || ny < 0 || nz < 0 || nz > 15)
|
if (ny > height || nx > 15 || nx < 0 || ny > 255 || ny < 0 || nz < 0 || nz > 15) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean allow = false;
|
boolean allow = false;
|
||||||
|
|
||||||
BlockData b = data.get(nx, ny, nz);
|
BlockData b = data.get(nx, ny, nz);
|
||||||
if(b != null) {
|
if (b != null) {
|
||||||
for (BlockData f : getDimension().getRockPalette().getBlockData(getData())) {
|
for (BlockData f : getDimension().getRockPalette().getBlockData(getData())) {
|
||||||
if (f.getMaterial().equals(b.getMaterial())) {
|
if (f.getMaterial().equals(b.getMaterial())) {
|
||||||
allow = true;
|
allow = true;
|
||||||
@@ -125,8 +111,7 @@ public class IrisDepositModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(allow)
|
if (allow) {
|
||||||
{
|
|
||||||
data.set(nx, ny, nz, clump.getBlocks().get(j));
|
data.set(nx, ny, nz, clump.getBlocks().get(j));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
|
|
||||||
public IrisPostModifier(Engine engine) {
|
public IrisPostModifier(Engine engine) {
|
||||||
super(engine, "Post");
|
super(engine, "Post");
|
||||||
rng = new RNG(getEngine().getWorld().getSeed()+12938).nextParallelRNG(28348777);
|
rng = new RNG(getEngine().getWorld().getSeed() + 12938).nextParallelRNG(28348777);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -31,13 +31,11 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
PrecisionStopwatch p = PrecisionStopwatch.start();
|
PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||||
BurstExecutor b = MultiBurst.burst.burst(output.getWidth() * output.getDepth());
|
BurstExecutor b = MultiBurst.burst.burst(output.getWidth() * output.getDepth());
|
||||||
int i, j;
|
int i, j;
|
||||||
for(i = 0; i < output.getWidth(); i++)
|
for (i = 0; i < output.getWidth(); i++) {
|
||||||
{
|
|
||||||
int ii = i;
|
int ii = i;
|
||||||
for(j = 0; j < output.getDepth(); j++)
|
for (j = 0; j < output.getDepth(); j++) {
|
||||||
{
|
|
||||||
int jj = j;
|
int jj = j;
|
||||||
b.queue(() -> post(ii, jj, output, ii+x, jj+z));
|
b.queue(() -> post(ii, jj, output, ii + x, jj + z));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
b.complete();
|
b.complete();
|
||||||
@@ -55,8 +53,7 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
// Floating Nibs
|
// Floating Nibs
|
||||||
int g = 0;
|
int g = 0;
|
||||||
|
|
||||||
if(h < 1)
|
if (h < 1) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,14 +62,11 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
g += hc < h - 1 ? 1 : 0;
|
g += hc < h - 1 ? 1 : 0;
|
||||||
g += hd < h - 1 ? 1 : 0;
|
g += hd < h - 1 ? 1 : 0;
|
||||||
|
|
||||||
if(g == 4 && isAir(x, h - 1, z, currentPostX, currentPostZ, currentData))
|
if (g == 4 && isAir(x, h - 1, z, currentPostX, currentPostZ, currentData)) {
|
||||||
{
|
|
||||||
setPostBlock(x, h, z, AIR, currentPostX, currentPostZ, currentData);
|
setPostBlock(x, h, z, AIR, currentPostX, currentPostZ, currentData);
|
||||||
|
|
||||||
for(int i = h - 1; i > 0; i--)
|
for (int i = h - 1; i > 0; i--) {
|
||||||
{
|
if (!isAir(x, i, z, currentPostX, currentPostZ, currentData)) {
|
||||||
if(!isAir(x, i, z, currentPostX, currentPostZ, currentData))
|
|
||||||
{
|
|
||||||
h = i;
|
h = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -86,24 +80,18 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
g += hc == h - 1 ? 1 : 0;
|
g += hc == h - 1 ? 1 : 0;
|
||||||
g += hd == h - 1 ? 1 : 0;
|
g += hd == h - 1 ? 1 : 0;
|
||||||
|
|
||||||
if(g >= 4)
|
if (g >= 4) {
|
||||||
{
|
|
||||||
BlockData bc = getPostBlock(x, h, z, currentPostX, currentPostZ, currentData);
|
BlockData bc = getPostBlock(x, h, z, currentPostX, currentPostZ, currentData);
|
||||||
BlockData b = getPostBlock(x, h + 1, z, currentPostX, currentPostZ, currentData);
|
BlockData b = getPostBlock(x, h + 1, z, currentPostX, currentPostZ, currentData);
|
||||||
Material m = bc.getMaterial();
|
Material m = bc.getMaterial();
|
||||||
|
|
||||||
if((b.getMaterial().isOccluding() && b.getMaterial().isSolid()))
|
if ((b.getMaterial().isOccluding() && b.getMaterial().isSolid())) {
|
||||||
{
|
if (m.isSolid()) {
|
||||||
if(m.isSolid())
|
|
||||||
{
|
|
||||||
setPostBlock(x, h, z, b, currentPostX, currentPostZ, currentData);
|
setPostBlock(x, h, z, b, currentPostX, currentPostZ, currentData);
|
||||||
h--;
|
h--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Potholes
|
// Potholes
|
||||||
g = 0;
|
g = 0;
|
||||||
g += ha == h + 1 ? 1 : 0;
|
g += ha == h + 1 ? 1 : 0;
|
||||||
@@ -111,8 +99,7 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
g += hc == h + 1 ? 1 : 0;
|
g += hc == h + 1 ? 1 : 0;
|
||||||
g += hd == h + 1 ? 1 : 0;
|
g += hd == h + 1 ? 1 : 0;
|
||||||
|
|
||||||
if(g >= 4)
|
if (g >= 4) {
|
||||||
{
|
|
||||||
BlockData ba = getPostBlock(x, ha, z, currentPostX, currentPostZ, currentData);
|
BlockData ba = getPostBlock(x, ha, z, currentPostX, currentPostZ, currentData);
|
||||||
BlockData bb = getPostBlock(x, hb, z, currentPostX, currentPostZ, currentData);
|
BlockData bb = getPostBlock(x, hb, z, currentPostX, currentPostZ, currentData);
|
||||||
BlockData bc = getPostBlock(x, hc, z, currentPostX, currentPostZ, currentData);
|
BlockData bc = getPostBlock(x, hc, z, currentPostX, currentPostZ, currentData);
|
||||||
@@ -123,8 +110,7 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
g = B.isSolid(bc) ? g + 1 : g;
|
g = B.isSolid(bc) ? g + 1 : g;
|
||||||
g = B.isSolid(bd) ? g + 1 : g;
|
g = B.isSolid(bd) ? g + 1 : g;
|
||||||
|
|
||||||
if(g >= 3)
|
if (g >= 3) {
|
||||||
{
|
|
||||||
setPostBlock(x, h + 1, z, getPostBlock(x, h, z, currentPostX, currentPostZ, currentData), currentPostX, currentPostZ, currentData);
|
setPostBlock(x, h + 1, z, getPostBlock(x, h, z, currentPostX, currentPostZ, currentData), currentPostX, currentPostZ, currentData);
|
||||||
h++;
|
h++;
|
||||||
}
|
}
|
||||||
@@ -132,27 +118,20 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Wall Patcher
|
// Wall Patcher
|
||||||
IrisBiome biome = getComplex().getTrueBiomeStream().get(x,z);
|
IrisBiome biome = getComplex().getTrueBiomeStream().get(x, z);
|
||||||
|
|
||||||
if(getDimension().isPostProcessingWalls())
|
if (getDimension().isPostProcessingWalls()) {
|
||||||
{
|
if (!biome.getWall().getPalette().isEmpty()) {
|
||||||
if(!biome.getWall().getPalette().isEmpty())
|
if (ha < h - 2 || hb < h - 2 || hc < h - 2 || hd < h - 2) {
|
||||||
{
|
|
||||||
if(ha < h - 2 || hb < h - 2 || hc < h - 2 || hd < h - 2)
|
|
||||||
{
|
|
||||||
boolean brokeGround = false;
|
boolean brokeGround = false;
|
||||||
int max = Math.abs(Math.max(h - ha, Math.max(h - hb, Math.max(h - hc, h - hd))));
|
int max = Math.abs(Math.max(h - ha, Math.max(h - hb, Math.max(h - hc, h - hd))));
|
||||||
|
|
||||||
for(int i = h; i > h - max; i--)
|
for (int i = h; i > h - max; i--) {
|
||||||
{
|
|
||||||
BlockData d = biome.getWall().get(rng, x + i, i + h, z + i, getData());
|
BlockData d = biome.getWall().get(rng, x + i, i + h, z + i, getData());
|
||||||
|
|
||||||
if(d != null)
|
if (d != null) {
|
||||||
{
|
if (isAirOrWater(x, i, z, currentPostX, currentPostZ, currentData)) {
|
||||||
if(isAirOrWater(x, i, z, currentPostX, currentPostZ, currentData))
|
if (brokeGround) {
|
||||||
{
|
|
||||||
if(brokeGround)
|
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,10 +147,9 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Slab
|
// Slab
|
||||||
if(getDimension().isPostProcessingSlabs())
|
if (getDimension().isPostProcessingSlabs()) {
|
||||||
{
|
|
||||||
//@builder
|
//@builder
|
||||||
if((ha == h + 1 && isSolidNonSlab(x + 1, ha, z, currentPostX, currentPostZ, currentData))
|
if ((ha == h + 1 && isSolidNonSlab(x + 1, ha, z, currentPostX, currentPostZ, currentData))
|
||||||
|| (hb == h + 1 && isSolidNonSlab(x, hb, z + 1, currentPostX, currentPostZ, currentData))
|
|| (hb == h + 1 && isSolidNonSlab(x, hb, z + 1, currentPostX, currentPostZ, currentData))
|
||||||
|| (hc == h + 1 && isSolidNonSlab(x - 1, hc, z, currentPostX, currentPostZ, currentData))
|
|| (hc == h + 1 && isSolidNonSlab(x - 1, hc, z, currentPostX, currentPostZ, currentData))
|
||||||
|| (hd == h + 1 && isSolidNonSlab(x, hd, z - 1, currentPostX, currentPostZ, currentData)))
|
|| (hd == h + 1 && isSolidNonSlab(x, hd, z - 1, currentPostX, currentPostZ, currentData)))
|
||||||
@@ -179,27 +157,18 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
{
|
{
|
||||||
BlockData d = biome.getSlab().get(rng, x, h, z, getData());
|
BlockData d = biome.getSlab().get(rng, x, h, z, getData());
|
||||||
|
|
||||||
if(d != null)
|
if (d != null) {
|
||||||
{
|
boolean cancel = B.isAir(d);
|
||||||
boolean cancel = false;
|
|
||||||
|
|
||||||
if(B.isAir(d))
|
if (d.getMaterial().equals(Material.SNOW) && h + 1 <= getDimension().getFluidHeight()) {
|
||||||
{
|
|
||||||
cancel = true;
|
cancel = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(d.getMaterial().equals(Material.SNOW) && h + 1 <= getDimension().getFluidHeight())
|
if (isSnowLayer(x, h, z, currentPostX, currentPostZ, currentData)) {
|
||||||
{
|
|
||||||
cancel = true;
|
cancel = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isSnowLayer(x, h, z, currentPostX, currentPostZ, currentData))
|
if (!cancel && isAirOrWater(x, h + 1, z, currentPostX, currentPostZ, currentData)) {
|
||||||
{
|
|
||||||
cancel = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!cancel && isAirOrWater(x, h + 1, z, currentPostX, currentPostZ, currentData))
|
|
||||||
{
|
|
||||||
setPostBlock(x, h + 1, z, d, currentPostX, currentPostZ, currentData);
|
setPostBlock(x, h + 1, z, d, currentPostX, currentPostZ, currentData);
|
||||||
h++;
|
h++;
|
||||||
}
|
}
|
||||||
@@ -210,34 +179,24 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
// Waterlogging
|
// Waterlogging
|
||||||
BlockData b = getPostBlock(x, h, z, currentPostX, currentPostZ, currentData);
|
BlockData b = getPostBlock(x, h, z, currentPostX, currentPostZ, currentData);
|
||||||
|
|
||||||
if(b instanceof Waterlogged)
|
if (b instanceof Waterlogged) {
|
||||||
{
|
|
||||||
Waterlogged ww = (Waterlogged) b.clone();
|
Waterlogged ww = (Waterlogged) b.clone();
|
||||||
boolean w = false;
|
boolean w = false;
|
||||||
|
|
||||||
if (h <= getDimension().getFluidHeight()+1) {
|
if (h <= getDimension().getFluidHeight() + 1) {
|
||||||
if(isWaterOrWaterlogged(x, h + 1, z, currentPostX, currentPostZ, currentData))
|
if (isWaterOrWaterlogged(x, h + 1, z, currentPostX, currentPostZ, currentData)) {
|
||||||
{
|
|
||||||
w = true;
|
w = true;
|
||||||
}
|
} else if ((isWaterOrWaterlogged(x + 1, h, z, currentPostX, currentPostZ, currentData) || isWaterOrWaterlogged(x - 1, h, z, currentPostX, currentPostZ, currentData) || isWaterOrWaterlogged(x, h, z + 1, currentPostX, currentPostZ, currentData) || isWaterOrWaterlogged(x, h, z - 1, currentPostX, currentPostZ, currentData))) {
|
||||||
|
|
||||||
else if((isWaterOrWaterlogged(x + 1, h, z, currentPostX, currentPostZ, currentData) || isWaterOrWaterlogged(x - 1, h, z, currentPostX, currentPostZ, currentData) || isWaterOrWaterlogged(x, h, z + 1, currentPostX, currentPostZ, currentData) || isWaterOrWaterlogged(x, h, z - 1, currentPostX, currentPostZ, currentData)))
|
|
||||||
{
|
|
||||||
w = true;
|
w = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(w != ww.isWaterlogged())
|
if (w != ww.isWaterlogged()) {
|
||||||
{
|
|
||||||
ww.setWaterlogged(w);
|
ww.setWaterlogged(w);
|
||||||
setPostBlock(x, h, z, ww, currentPostX, currentPostZ, currentData);
|
setPostBlock(x, h, z, ww, currentPostX, currentPostZ, currentData);
|
||||||
}
|
}
|
||||||
}
|
} else if (b.getMaterial().equals(Material.AIR) && h <= getDimension().getFluidHeight()) {
|
||||||
|
if ((isWaterOrWaterlogged(x + 1, h, z, currentPostX, currentPostZ, currentData) || isWaterOrWaterlogged(x - 1, h, z, currentPostX, currentPostZ, currentData) || isWaterOrWaterlogged(x, h, z + 1, currentPostX, currentPostZ, currentData) || isWaterOrWaterlogged(x, h, z - 1, currentPostX, currentPostZ, currentData))) {
|
||||||
else if(b.getMaterial().equals(Material.AIR) && h <= getDimension().getFluidHeight())
|
|
||||||
{
|
|
||||||
if((isWaterOrWaterlogged(x + 1, h, z, currentPostX, currentPostZ, currentData) || isWaterOrWaterlogged(x - 1, h, z, currentPostX, currentPostZ, currentData) || isWaterOrWaterlogged(x, h, z + 1, currentPostX, currentPostZ, currentData) || isWaterOrWaterlogged(x, h, z - 1, currentPostX, currentPostZ, currentData)))
|
|
||||||
{
|
|
||||||
setPostBlock(x, h, z, WATER, currentPostX, currentPostZ, currentData);
|
setPostBlock(x, h, z, WATER, currentPostX, currentPostZ, currentData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -245,26 +204,20 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
// Foliage
|
// Foliage
|
||||||
b = getPostBlock(x, h + 1, z, currentPostX, currentPostZ, currentData);
|
b = getPostBlock(x, h + 1, z, currentPostX, currentPostZ, currentData);
|
||||||
|
|
||||||
if(B.isFoliage(b) || b.getMaterial().equals(Material.DEAD_BUSH))
|
if (B.isFoliage(b) || b.getMaterial().equals(Material.DEAD_BUSH)) {
|
||||||
{
|
|
||||||
Material onto = getPostBlock(x, h, z, currentPostX, currentPostZ, currentData).getMaterial();
|
Material onto = getPostBlock(x, h, z, currentPostX, currentPostZ, currentData).getMaterial();
|
||||||
|
|
||||||
if(!B.canPlaceOnto(b.getMaterial(), onto))
|
if (!B.canPlaceOnto(b.getMaterial(), onto)) {
|
||||||
{
|
|
||||||
setPostBlock(x, h + 1, z, AIR, currentPostX, currentPostZ, currentData);
|
setPostBlock(x, h + 1, z, AIR, currentPostX, currentPostZ, currentData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getDimension().isPostProcessCaves())
|
if (getDimension().isPostProcessCaves()) {
|
||||||
{
|
|
||||||
IrisBiome cave = getComplex().getCaveBiomeStream().get(x, z);
|
IrisBiome cave = getComplex().getCaveBiomeStream().get(x, z);
|
||||||
|
|
||||||
if(cave != null)
|
if (cave != null) {
|
||||||
{
|
for (CaveResult i : ((IrisCaveModifier) getFramework().getCaveModifier()).genCaves(x, z, 0, 0, null)) {
|
||||||
for(CaveResult i : ((IrisCaveModifier)getFramework().getCaveModifier()).genCaves(x, z, 0, 0, null))
|
if (i.getCeiling() >= currentData.getMax2DParallelism() || i.getFloor() < 0) {
|
||||||
{
|
|
||||||
if(i.getCeiling() >= currentData.getMax2DParallelism() || i.getFloor() < 0)
|
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,21 +239,16 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
g += fc == f - 1 ? 1 : 0;
|
g += fc == f - 1 ? 1 : 0;
|
||||||
g += fd == f - 1 ? 1 : 0;
|
g += fd == f - 1 ? 1 : 0;
|
||||||
|
|
||||||
if(g >= 4)
|
if (g >= 4) {
|
||||||
{
|
|
||||||
BlockData bc = getPostBlock(x, f, z, currentPostX, currentPostZ, currentData);
|
BlockData bc = getPostBlock(x, f, z, currentPostX, currentPostZ, currentData);
|
||||||
b = getPostBlock(x, f + 1, z, currentPostX, currentPostZ, currentData);
|
b = getPostBlock(x, f + 1, z, currentPostX, currentPostZ, currentData);
|
||||||
Material m = bc.getMaterial();
|
Material m = bc.getMaterial();
|
||||||
|
|
||||||
if(m.isSolid())
|
if (m.isSolid()) {
|
||||||
{
|
|
||||||
setPostBlock(x, f, z, b, currentPostX, currentPostZ, currentData);
|
setPostBlock(x, f, z, b, currentPostX, currentPostZ, currentData);
|
||||||
h--;
|
h--;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Cave Potholes
|
// Cave Potholes
|
||||||
g = 0;
|
g = 0;
|
||||||
g += fa == f + 1 ? 1 : 0;
|
g += fa == f + 1 ? 1 : 0;
|
||||||
@@ -308,8 +256,7 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
g += fc == f + 1 ? 1 : 0;
|
g += fc == f + 1 ? 1 : 0;
|
||||||
g += fd == f + 1 ? 1 : 0;
|
g += fd == f + 1 ? 1 : 0;
|
||||||
|
|
||||||
if(g >= 4)
|
if (g >= 4) {
|
||||||
{
|
|
||||||
BlockData ba = getPostBlock(x, fa, z, currentPostX, currentPostZ, currentData);
|
BlockData ba = getPostBlock(x, fa, z, currentPostX, currentPostZ, currentData);
|
||||||
BlockData bb = getPostBlock(x, fb, z, currentPostX, currentPostZ, currentData);
|
BlockData bb = getPostBlock(x, fb, z, currentPostX, currentPostZ, currentData);
|
||||||
BlockData bc = getPostBlock(x, fc, z, currentPostX, currentPostZ, currentData);
|
BlockData bc = getPostBlock(x, fc, z, currentPostX, currentPostZ, currentData);
|
||||||
@@ -320,18 +267,16 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
g = B.isSolid(bc) ? g + 1 : g;
|
g = B.isSolid(bc) ? g + 1 : g;
|
||||||
g = B.isSolid(bd) ? g + 1 : g;
|
g = B.isSolid(bd) ? g + 1 : g;
|
||||||
|
|
||||||
if(g >= 4)
|
if (g >= 4) {
|
||||||
{
|
|
||||||
setPostBlock(x, f + 1, z, getPostBlock(x, f, z, currentPostX, currentPostZ, currentData), currentPostX, currentPostZ, currentData);
|
setPostBlock(x, f + 1, z, getPostBlock(x, f, z, currentPostX, currentPostZ, currentData), currentPostX, currentPostZ, currentData);
|
||||||
h++;
|
h++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getDimension().isPostProcessingSlabs())
|
if (getDimension().isPostProcessingSlabs()) {
|
||||||
{
|
|
||||||
//@builder
|
//@builder
|
||||||
if((fa == f + 1 && isSolidNonSlab(x + 1, fa, z, currentPostX, currentPostZ, currentData))
|
if ((fa == f + 1 && isSolidNonSlab(x + 1, fa, z, currentPostX, currentPostZ, currentData))
|
||||||
|| (fb == f + 1 && isSolidNonSlab(x, fb, z + 1, currentPostX, currentPostZ, currentData))
|
|| (fb == f + 1 && isSolidNonSlab(x, fb, z + 1, currentPostX, currentPostZ, currentData))
|
||||||
|| (fc == f + 1 && isSolidNonSlab(x - 1, fc, z, currentPostX, currentPostZ, currentData))
|
|| (fc == f + 1 && isSolidNonSlab(x - 1, fc, z, currentPostX, currentPostZ, currentData))
|
||||||
|| (fd == f + 1 && isSolidNonSlab(x, fd, z - 1, currentPostX, currentPostZ, currentData)))
|
|| (fd == f + 1 && isSolidNonSlab(x, fd, z - 1, currentPostX, currentPostZ, currentData)))
|
||||||
@@ -339,34 +284,25 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
{
|
{
|
||||||
BlockData d = cave.getSlab().get(rng, x, f, z, getData());
|
BlockData d = cave.getSlab().get(rng, x, f, z, getData());
|
||||||
|
|
||||||
if(d != null)
|
if (d != null) {
|
||||||
{
|
boolean cancel = B.isAir(d);
|
||||||
boolean cancel = false;
|
|
||||||
|
|
||||||
if(B.isAir(d))
|
if (d.getMaterial().equals(Material.SNOW) && f + 1 <= getDimension().getFluidHeight()) {
|
||||||
{
|
|
||||||
cancel = true;
|
cancel = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(d.getMaterial().equals(Material.SNOW) && f + 1 <= getDimension().getFluidHeight())
|
if (isSnowLayer(x, f, z, currentPostX, currentPostZ, currentData)) {
|
||||||
{
|
|
||||||
cancel = true;
|
cancel = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isSnowLayer(x, f, z, currentPostX, currentPostZ, currentData))
|
if (!cancel && isAirOrWater(x, f + 1, z, currentPostX, currentPostZ, currentData)) {
|
||||||
{
|
|
||||||
cancel = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!cancel && isAirOrWater(x, f + 1, z, currentPostX, currentPostZ, currentData))
|
|
||||||
{
|
|
||||||
setPostBlock(x, f + 1, z, d, currentPostX, currentPostZ, currentData);
|
setPostBlock(x, f + 1, z, d, currentPostX, currentPostZ, currentData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//@builder
|
//@builder
|
||||||
if((ca == c - 1 && isSolidNonSlab(x + 1, ca, z, currentPostX, currentPostZ, currentData))
|
if ((ca == c - 1 && isSolidNonSlab(x + 1, ca, z, currentPostX, currentPostZ, currentData))
|
||||||
|| (cb == c - 1 && isSolidNonSlab(x, cb, z + 1, currentPostX, currentPostZ, currentData))
|
|| (cb == c - 1 && isSolidNonSlab(x, cb, z + 1, currentPostX, currentPostZ, currentData))
|
||||||
|| (cc == c - 1 && isSolidNonSlab(x - 1, cc, z, currentPostX, currentPostZ, currentData))
|
|| (cc == c - 1 && isSolidNonSlab(x - 1, cc, z, currentPostX, currentPostZ, currentData))
|
||||||
|| (cd == c - 1 && isSolidNonSlab(x, cd, z - 1, currentPostX, currentPostZ, currentData)))
|
|| (cd == c - 1 && isSolidNonSlab(x, cd, z - 1, currentPostX, currentPostZ, currentData)))
|
||||||
@@ -374,27 +310,18 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
{
|
{
|
||||||
BlockData d = cave.getSlab().get(rng, x, c, z, getData());
|
BlockData d = cave.getSlab().get(rng, x, c, z, getData());
|
||||||
|
|
||||||
if(d != null)
|
if (d != null) {
|
||||||
{
|
boolean cancel = B.isAir(d);
|
||||||
boolean cancel = false;
|
|
||||||
|
|
||||||
if(B.isAir(d))
|
if (!(d instanceof Slab)) {
|
||||||
{
|
|
||||||
cancel = true;
|
cancel = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(d instanceof Slab))
|
if (isSnowLayer(x, c, z, currentPostX, currentPostZ, currentData)) {
|
||||||
{
|
|
||||||
cancel = true;
|
cancel = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isSnowLayer(x, c, z, currentPostX, currentPostZ, currentData))
|
if (!cancel && isAirOrWater(x, c, z, currentPostX, currentPostZ, currentData)) {
|
||||||
{
|
|
||||||
cancel = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!cancel && isAirOrWater(x, c, z, currentPostX, currentPostZ, currentData))
|
|
||||||
{
|
|
||||||
Slab slab = (Slab) d.clone();
|
Slab slab = (Slab) d.clone();
|
||||||
slab.setType(Slab.Type.TOP);
|
slab.setType(Slab.Type.TOP);
|
||||||
setPostBlock(x, c, z, slab, currentPostX, currentPostZ, currentData);
|
setPostBlock(x, c, z, slab, currentPostX, currentPostZ, currentData);
|
||||||
@@ -407,29 +334,20 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int nearestCaveFloor(int floor, int x, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData)
|
private int nearestCaveFloor(int floor, int x, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
|
||||||
{
|
if (floor >= currentData.getHeight()) {
|
||||||
if(floor >= currentData.getHeight())
|
return currentData.getHeight() - 1;
|
||||||
{
|
|
||||||
return currentData.getHeight()-1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(B.isAir(getPostBlock(x, floor, z, currentPostX, currentPostZ, currentData)))
|
if (B.isAir(getPostBlock(x, floor, z, currentPostX, currentPostZ, currentData))) {
|
||||||
{
|
if (B.isAir(getPostBlock(x, floor - 1, z, currentPostX, currentPostZ, currentData))) {
|
||||||
if(B.isAir(getPostBlock(x, floor - 1, z, currentPostX, currentPostZ, currentData)))
|
|
||||||
{
|
|
||||||
return floor - 2;
|
return floor - 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
return floor - 1;
|
return floor - 1;
|
||||||
}
|
} else {
|
||||||
|
if (!B.isAir(getPostBlock(x, floor + 1, z, currentPostX, currentPostZ, currentData))) {
|
||||||
else
|
if (!B.isAir(getPostBlock(x, floor + 2, z, currentPostX, currentPostZ, currentData))) {
|
||||||
{
|
|
||||||
if(!B.isAir(getPostBlock(x, floor + 1, z, currentPostX, currentPostZ, currentData)))
|
|
||||||
{
|
|
||||||
if(!B.isAir(getPostBlock(x, floor + 2, z, currentPostX, currentPostZ, currentData)))
|
|
||||||
{
|
|
||||||
return floor + 2;
|
return floor + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -440,29 +358,20 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int nearestCaveCeiling(int ceiling, int x, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData)
|
private int nearestCaveCeiling(int ceiling, int x, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
|
||||||
{
|
if (ceiling >= currentData.getHeight()) {
|
||||||
if(ceiling >= currentData.getHeight())
|
return currentData.getHeight() - 1;
|
||||||
{
|
|
||||||
return currentData.getHeight()-1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(B.isAir(getPostBlock(x, ceiling, z, currentPostX, currentPostZ, currentData)))
|
if (B.isAir(getPostBlock(x, ceiling, z, currentPostX, currentPostZ, currentData))) {
|
||||||
{
|
if (B.isAir(getPostBlock(x, ceiling + 1, z, currentPostX, currentPostZ, currentData))) {
|
||||||
if(B.isAir(getPostBlock(x, ceiling + 1, z, currentPostX, currentPostZ, currentData)))
|
|
||||||
{
|
|
||||||
return ceiling + 2;
|
return ceiling + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ceiling + 1;
|
return ceiling + 1;
|
||||||
}
|
} else {
|
||||||
|
if (!B.isAir(getPostBlock(x, ceiling - 1, z, currentPostX, currentPostZ, currentData))) {
|
||||||
else
|
if (!B.isAir(getPostBlock(x, ceiling - 2, z, currentPostX, currentPostZ, currentData))) {
|
||||||
{
|
|
||||||
if(!B.isAir(getPostBlock(x, ceiling - 1, z, currentPostX, currentPostZ, currentData)))
|
|
||||||
{
|
|
||||||
if(!B.isAir(getPostBlock(x, ceiling - 2, z, currentPostX, currentPostZ, currentData)))
|
|
||||||
{
|
|
||||||
return ceiling - 2;
|
return ceiling - 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -473,77 +382,64 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAir(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData)
|
public boolean isAir(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
|
||||||
{
|
|
||||||
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
||||||
return d.getMaterial().equals(Material.AIR) || d.getMaterial().equals(Material.CAVE_AIR);
|
return d.getMaterial().equals(Material.AIR) || d.getMaterial().equals(Material.CAVE_AIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasGravity(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData)
|
public boolean hasGravity(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
|
||||||
{
|
|
||||||
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
||||||
return d.getMaterial().equals(Material.SAND) || d.getMaterial().equals(Material.RED_SAND) || d.getMaterial().equals(Material.BLACK_CONCRETE_POWDER) || d.getMaterial().equals(Material.BLUE_CONCRETE_POWDER) || d.getMaterial().equals(Material.BROWN_CONCRETE_POWDER) || d.getMaterial().equals(Material.CYAN_CONCRETE_POWDER) || d.getMaterial().equals(Material.GRAY_CONCRETE_POWDER) || d.getMaterial().equals(Material.GREEN_CONCRETE_POWDER) || d.getMaterial().equals(Material.LIGHT_BLUE_CONCRETE_POWDER) || d.getMaterial().equals(Material.LIGHT_GRAY_CONCRETE_POWDER) || d.getMaterial().equals(Material.LIME_CONCRETE_POWDER) || d.getMaterial().equals(Material.MAGENTA_CONCRETE_POWDER) || d.getMaterial().equals(Material.ORANGE_CONCRETE_POWDER) || d.getMaterial().equals(Material.PINK_CONCRETE_POWDER) || d.getMaterial().equals(Material.PURPLE_CONCRETE_POWDER) || d.getMaterial().equals(Material.RED_CONCRETE_POWDER) || d.getMaterial().equals(Material.WHITE_CONCRETE_POWDER) || d.getMaterial().equals(Material.YELLOW_CONCRETE_POWDER);
|
return d.getMaterial().equals(Material.SAND) || d.getMaterial().equals(Material.RED_SAND) || d.getMaterial().equals(Material.BLACK_CONCRETE_POWDER) || d.getMaterial().equals(Material.BLUE_CONCRETE_POWDER) || d.getMaterial().equals(Material.BROWN_CONCRETE_POWDER) || d.getMaterial().equals(Material.CYAN_CONCRETE_POWDER) || d.getMaterial().equals(Material.GRAY_CONCRETE_POWDER) || d.getMaterial().equals(Material.GREEN_CONCRETE_POWDER) || d.getMaterial().equals(Material.LIGHT_BLUE_CONCRETE_POWDER) || d.getMaterial().equals(Material.LIGHT_GRAY_CONCRETE_POWDER) || d.getMaterial().equals(Material.LIME_CONCRETE_POWDER) || d.getMaterial().equals(Material.MAGENTA_CONCRETE_POWDER) || d.getMaterial().equals(Material.ORANGE_CONCRETE_POWDER) || d.getMaterial().equals(Material.PINK_CONCRETE_POWDER) || d.getMaterial().equals(Material.PURPLE_CONCRETE_POWDER) || d.getMaterial().equals(Material.RED_CONCRETE_POWDER) || d.getMaterial().equals(Material.WHITE_CONCRETE_POWDER) || d.getMaterial().equals(Material.YELLOW_CONCRETE_POWDER);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSolid(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData)
|
public boolean isSolid(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
|
||||||
{
|
|
||||||
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
||||||
return d.getMaterial().isSolid();
|
return d.getMaterial().isSolid();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSolidNonSlab(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData)
|
public boolean isSolidNonSlab(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
|
||||||
{
|
|
||||||
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
||||||
return d.getMaterial().isSolid() && !(d instanceof Slab);
|
return d.getMaterial().isSolid() && !(d instanceof Slab);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAirOrWater(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData)
|
public boolean isAirOrWater(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
|
||||||
{
|
|
||||||
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
||||||
return d.getMaterial().equals(Material.WATER) || d.getMaterial().equals(Material.AIR) || d.getMaterial().equals(Material.CAVE_AIR);
|
return d.getMaterial().equals(Material.WATER) || d.getMaterial().equals(Material.AIR) || d.getMaterial().equals(Material.CAVE_AIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSlab(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData)
|
public boolean isSlab(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
|
||||||
{
|
|
||||||
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
||||||
return d instanceof Slab;
|
return d instanceof Slab;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSnowLayer(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData)
|
public boolean isSnowLayer(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
|
||||||
{
|
|
||||||
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
||||||
return d.getMaterial().equals(Material.SNOW);
|
return d.getMaterial().equals(Material.SNOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isWater(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData)
|
public boolean isWater(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
|
||||||
{
|
|
||||||
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
||||||
return d.getMaterial().equals(Material.WATER);
|
return d.getMaterial().equals(Material.WATER);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isWaterOrWaterlogged(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData)
|
public boolean isWaterOrWaterlogged(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
|
||||||
{
|
|
||||||
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
||||||
return d.getMaterial().equals(Material.WATER) || (d instanceof Waterlogged && ((Waterlogged) d).isWaterlogged());
|
return d.getMaterial().equals(Material.WATER) || (d instanceof Waterlogged && ((Waterlogged) d).isWaterlogged());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLiquid(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData)
|
public boolean isLiquid(int x, int y, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
|
||||||
{
|
|
||||||
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
|
||||||
return d instanceof Levelled;
|
return d instanceof Levelled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setPostBlock(int x, int y, int z, BlockData d, int currentPostX, int currentPostZ, Hunk<BlockData> currentData)
|
public void setPostBlock(int x, int y, int z, BlockData d, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
|
||||||
{
|
if (y < currentData.getHeight()) {
|
||||||
if(y < currentData.getHeight())
|
|
||||||
{
|
|
||||||
currentData.set(x & 15, y, z & 15, d);
|
currentData.set(x & 15, y, z & 15, d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public BlockData getPostBlock(int x, int y, int z, int cpx, int cpz, Hunk<BlockData> h)
|
public BlockData getPostBlock(int x, int y, int z, int cpx, int cpz, Hunk<BlockData> h) {
|
||||||
{
|
|
||||||
BlockData b = h.getClosest(x & 15, y, z & 15);
|
BlockData b = h.getClosest(x & 15, y, z & 15);
|
||||||
|
|
||||||
return b == null ? AIR : b;
|
return b == null ? AIR : b;
|
||||||
|
|||||||
@@ -2,18 +2,18 @@ package com.volmit.iris.generator.modifier;
|
|||||||
|
|
||||||
import com.volmit.iris.generator.noise.CNG;
|
import com.volmit.iris.generator.noise.CNG;
|
||||||
import com.volmit.iris.object.NoiseStyle;
|
import com.volmit.iris.object.NoiseStyle;
|
||||||
import com.volmit.iris.util.*;
|
|
||||||
import com.volmit.iris.scaffold.engine.Engine;
|
import com.volmit.iris.scaffold.engine.Engine;
|
||||||
import com.volmit.iris.scaffold.engine.EngineAssignedModifier;
|
import com.volmit.iris.scaffold.engine.EngineAssignedModifier;
|
||||||
import com.volmit.iris.scaffold.hunk.Hunk;
|
import com.volmit.iris.scaffold.hunk.Hunk;
|
||||||
|
import com.volmit.iris.util.*;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
|
public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
|
||||||
private static final BlockData CAVE_AIR = B.get("CAVE_AIR");
|
private static final BlockData CAVE_AIR = B.get("CAVE_AIR");
|
||||||
private static final BlockData LAVA = B.get("LAVA");
|
private static final BlockData LAVA = B.get("LAVA");
|
||||||
private CNG cng;
|
private final CNG cng;
|
||||||
private RNG rng;
|
private final RNG rng;
|
||||||
|
|
||||||
public IrisRavineModifier(Engine engine) {
|
public IrisRavineModifier(Engine engine) {
|
||||||
super(engine, "Ravine");
|
super(engine, "Ravine");
|
||||||
@@ -23,8 +23,7 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onModify(int x, int z, Hunk<BlockData> output) {
|
public void onModify(int x, int z, Hunk<BlockData> output) {
|
||||||
if(!getDimension().isRavines())
|
if (!getDimension().isRavines()) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,61 +32,51 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
getEngine().getMetrics().getRavine().put(p.getMilliseconds());
|
getEngine().getMetrics().getRavine().put(p.getMilliseconds());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void set(Hunk<BlockData> pos, int x, int y, int z, BlockData b)
|
private void set(Hunk<BlockData> pos, int x, int y, int z, BlockData b) {
|
||||||
{
|
|
||||||
pos.set(x, y, z, b);
|
pos.set(x, y, z, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
private BlockData get(Hunk<BlockData> pos, int x, int y, int z)
|
private BlockData get(Hunk<BlockData> pos, int x, int y, int z) {
|
||||||
{
|
BlockData bb = pos.get(x, y, z);
|
||||||
BlockData bb = pos.get(x, y, z);
|
|
||||||
|
|
||||||
if(bb == null)
|
if (bb == null) {
|
||||||
{
|
bb = CAVE_AIR;
|
||||||
bb = CAVE_AIR;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return bb;
|
return bb;
|
||||||
}
|
}
|
||||||
|
|
||||||
private BlockData getSurfaceBlock(int n6, int i, RNG rmg)
|
private BlockData getSurfaceBlock(int n6, int i, RNG rmg) {
|
||||||
{
|
return getComplex().getTrueBiomeStream().get(n6, i).getSurfaceBlock(n6, i, rmg, getData());
|
||||||
return getComplex().getTrueBiomeStream().get(n6,i).getSurfaceBlock(n6, i, rmg, getData());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private float[] ravineCache = new float[1024];
|
private final float[] ravineCache = new float[1024];
|
||||||
|
|
||||||
private void doRavine(long seed, int tx, int tz, ChunkPosition pos, double sx, double sy, double sz, float f, float f2, float f3, int n3, int n4, double d4, RNG bbx, Hunk<BlockData> terrain)
|
private void doRavine(long seed, int tx, int tz, ChunkPosition pos, double sx, double sy, double sz, float f, float f2, float f3, int n3, int n4, double d4, RNG bbx, Hunk<BlockData> terrain) {
|
||||||
{
|
|
||||||
int n5;
|
int n5;
|
||||||
RNG random = new RNG(seed);
|
RNG random = new RNG(seed);
|
||||||
double x = tx * 16 + 8;
|
double x = tx * 16 + 8;
|
||||||
double z = tz * 16 + 8;
|
double z = tz * 16 + 8;
|
||||||
float f4 = 0.0f;
|
float f4 = 0.0f;
|
||||||
float f5 = 0.0f;
|
float f5 = 0.0f;
|
||||||
if(n4 <= 0)
|
if (n4 <= 0) {
|
||||||
{
|
|
||||||
n5 = 8 * 16 - 16;
|
n5 = 8 * 16 - 16;
|
||||||
n4 = n5 - random.nextInt(n5 / 4);
|
n4 = n5 - random.nextInt(n5 / 4);
|
||||||
}
|
}
|
||||||
n5 = 0;
|
n5 = 0;
|
||||||
if(n3 == -1)
|
if (n3 == -1) {
|
||||||
{
|
|
||||||
n3 = n4 / 2;
|
n3 = n4 / 2;
|
||||||
n5 = 1;
|
n5 = 1;
|
||||||
}
|
}
|
||||||
float f6 = 1.0f;
|
float f6 = 1.0f;
|
||||||
// TODO: WARNING HEIGHT
|
// TODO: WARNING HEIGHT
|
||||||
for(int i = 0; i < 256; ++i)
|
for (int i = 0; i < 256; ++i) {
|
||||||
{
|
if (i == 0 || random.nextInt(getDimension().getRavineRibRarity()) == 0) {
|
||||||
if(i == 0 || random.nextInt(getDimension().getRavineRibRarity()) == 0)
|
|
||||||
{
|
|
||||||
f6 = 1.0f + random.nextFloat() * random.nextFloat() * 1.0f;
|
f6 = 1.0f + random.nextFloat() * random.nextFloat() * 1.0f;
|
||||||
}
|
}
|
||||||
this.ravineCache[i] = f6 * f6;
|
this.ravineCache[i] = f6 * f6;
|
||||||
}
|
}
|
||||||
while(n3 < n4)
|
while (n3 < n4) {
|
||||||
{
|
|
||||||
double d7 = 1.5 + (double) (MathHelper.sin((float) n3 * 3.1415927f / (float) n4) * f * 1.0f);
|
double d7 = 1.5 + (double) (MathHelper.sin((float) n3 * 3.1415927f / (float) n4) * f * 1.0f);
|
||||||
double d8 = d7 * d4;
|
double d8 = d7 * d4;
|
||||||
d7 *= (double) random.nextFloat() * 0.25 + 0.75;
|
d7 *= (double) random.nextFloat() * 0.25 + 0.75;
|
||||||
@@ -104,18 +93,15 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
f4 *= 0.5f;
|
f4 *= 0.5f;
|
||||||
f5 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0f;
|
f5 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0f;
|
||||||
f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0f;
|
f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0f;
|
||||||
if(n5 != 0 || random.nextInt(4) != 0)
|
if (n5 != 0 || random.nextInt(4) != 0) {
|
||||||
{
|
|
||||||
double d9 = sx - x;
|
double d9 = sx - x;
|
||||||
double d10 = sz - z;
|
double d10 = sz - z;
|
||||||
double d11 = n4 - n3;
|
double d11 = n4 - n3;
|
||||||
double d12 = f + 2.0f + 16.0f;
|
double d12 = f + 2.0f + 16.0f;
|
||||||
if(d9 * d9 + d10 * d10 - d11 * d11 > d12 * d12)
|
if (d9 * d9 + d10 * d10 - d11 * d11 > d12 * d12) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(sx >= x - 16.0 - d7 * 2.0 && sz >= z - 16.0 - d7 * 2.0 && sx <= x + 16.0 + d7 * 2.0 && sz <= z + 16.0 + d7 * 2.0)
|
if (sx >= x - 16.0 - d7 * 2.0 && sz >= z - 16.0 - d7 * 2.0 && sx <= x + 16.0 + d7 * 2.0 && sz <= z + 16.0 + d7 * 2.0) {
|
||||||
{
|
|
||||||
int n6;
|
int n6;
|
||||||
int n7 = MathHelper.floor(sx - d7) - tx * 16 - 1;
|
int n7 = MathHelper.floor(sx - d7) - tx * 16 - 1;
|
||||||
int n8 = MathHelper.floor(sx + d7) - tx * 16 + 1;
|
int n8 = MathHelper.floor(sx + d7) - tx * 16 + 1;
|
||||||
@@ -123,59 +109,47 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
int n10 = MathHelper.floor(sy + d8) + 1;
|
int n10 = MathHelper.floor(sy + d8) + 1;
|
||||||
int n11 = MathHelper.floor(sz - d7) - tz * 16 - 1;
|
int n11 = MathHelper.floor(sz - d7) - tz * 16 - 1;
|
||||||
int n12 = MathHelper.floor(sz + d7) - tz * 16 + 1;
|
int n12 = MathHelper.floor(sz + d7) - tz * 16 + 1;
|
||||||
if(n7 < 0)
|
if (n7 < 0) {
|
||||||
{
|
|
||||||
n7 = 0;
|
n7 = 0;
|
||||||
}
|
}
|
||||||
if(n8 > 16)
|
if (n8 > 16) {
|
||||||
{
|
|
||||||
n8 = 16;
|
n8 = 16;
|
||||||
}
|
}
|
||||||
if(n9 < 1)
|
if (n9 < 1) {
|
||||||
{
|
|
||||||
n9 = 1;
|
n9 = 1;
|
||||||
}
|
}
|
||||||
if(n10 > 248)
|
if (n10 > 248) {
|
||||||
{
|
|
||||||
n10 = 248;
|
n10 = 248;
|
||||||
}
|
}
|
||||||
if(n11 < 0)
|
if (n11 < 0) {
|
||||||
{
|
|
||||||
n11 = 0;
|
n11 = 0;
|
||||||
}
|
}
|
||||||
if(n12 > 16)
|
if (n12 > 16) {
|
||||||
{
|
|
||||||
n12 = 16;
|
n12 = 16;
|
||||||
}
|
}
|
||||||
boolean bl = false;
|
boolean bl = false;
|
||||||
for(int i = n7; !bl && i < n8; ++i)
|
for (int i = n7; !bl && i < n8; ++i) {
|
||||||
{
|
for (n6 = n11; !bl && n6 < n12; ++n6) {
|
||||||
for(n6 = n11; !bl && n6 < n12; ++n6)
|
for (int j = n10 + 1; !bl && j >= n9 - 1; --j) {
|
||||||
{
|
|
||||||
for(int j = n10 + 1; !bl && j >= n9 - 1; --j)
|
|
||||||
{
|
|
||||||
// TODO: WARNING HEIGHT
|
// TODO: WARNING HEIGHT
|
||||||
if(j < 0 || j >= 256)
|
if (j < 0 || j >= 256) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockData bb = get(terrain, i, j, n6);
|
BlockData bb = get(terrain, i, j, n6);
|
||||||
|
|
||||||
if(B.isWater(bb))
|
if (B.isWater(bb)) {
|
||||||
{
|
|
||||||
bl = true;
|
bl = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(j == n9 - 1 || i == n7 || i == n8 - 1 || n6 == n11 || n6 == n12 - 1)
|
if (j == n9 - 1 || i == n7 || i == n8 - 1 || n6 == n11 || n6 == n12 - 1) {
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
j = n9;
|
j = n9;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!bl) {
|
if (!bl) {
|
||||||
BlockPosition bps = new BlockPosition(0, 0, 0);
|
BlockPosition bps = new BlockPosition(0, 0, 0);
|
||||||
for (n6 = n7; n6 < n8; ++n6) {
|
for (n6 = n7; n6 < n8; ++n6) {
|
||||||
double d13 = ((double) (n6 + tx * 16) + 0.5 - sx) / d7;
|
double d13 = ((double) (n6 + tx * 16) + 0.5 - sx) / d7;
|
||||||
@@ -212,8 +186,7 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (n5 != 0)
|
if (n5 != 0) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -223,17 +196,15 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private BlockPosition cSet(BlockPosition bb, double var0, double var2, double var4)
|
private BlockPosition cSet(BlockPosition bb, double var0, double var2, double var4) {
|
||||||
{
|
bb.setX(MathHelper.floor(var0));
|
||||||
bb.setX(MathHelper.floor((double) var0));
|
bb.setY(MathHelper.floor(var2));
|
||||||
bb.setY(MathHelper.floor((double) var2));
|
bb.setZ(MathHelper.floor(var4));
|
||||||
bb.setZ(MathHelper.floor((double) var4));
|
|
||||||
|
|
||||||
return bb;
|
return bb;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isDirt(BlockData d)
|
private boolean isDirt(BlockData d) {
|
||||||
{
|
|
||||||
//@builder
|
//@builder
|
||||||
Material m = d.getMaterial();
|
Material m = d.getMaterial();
|
||||||
return m.equals(Material.DIRT) ||
|
return m.equals(Material.DIRT) ||
|
||||||
@@ -242,8 +213,7 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
//@done
|
//@done
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isSurface(BlockData d)
|
private boolean isSurface(BlockData d) {
|
||||||
{
|
|
||||||
//@builder
|
//@builder
|
||||||
Material m = d.getMaterial();
|
Material m = d.getMaterial();
|
||||||
return m.equals(Material.GRASS_BLOCK) ||
|
return m.equals(Material.GRASS_BLOCK) ||
|
||||||
@@ -254,16 +224,13 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
//@done
|
//@done
|
||||||
}
|
}
|
||||||
|
|
||||||
public void genRavines(int n, int n2, ChunkPosition chunkSnapshot, RNG bbb, Hunk<BlockData> terrain)
|
public void genRavines(int n, int n2, ChunkPosition chunkSnapshot, RNG bbb, Hunk<BlockData> terrain) {
|
||||||
{
|
|
||||||
RNG b = this.rng.nextParallelRNG(21949666);
|
RNG b = this.rng.nextParallelRNG(21949666);
|
||||||
RNG bx = this.rng.nextParallelRNG(6676121);
|
RNG bx = this.rng.nextParallelRNG(6676121);
|
||||||
long l = b.nextLong();
|
long l = b.nextLong();
|
||||||
long l2 = b.nextLong();
|
long l2 = b.nextLong();
|
||||||
for(int i = n - 8; i <= n + 8; ++i)
|
for (int i = n - 8; i <= n + 8; ++i) {
|
||||||
{
|
for (int j = n2 - 8; j <= n2 + 8; ++j) {
|
||||||
for(int j = n2 - 8; j <= n2 + 8; ++j)
|
|
||||||
{
|
|
||||||
long l3 = (long) i * l;
|
long l3 = (long) i * l;
|
||||||
long l4 = (long) j * l2;
|
long l4 = (long) j * l2;
|
||||||
bx = this.rng.nextParallelRNG((int) (l3 ^ l4 ^ 6676121));
|
bx = this.rng.nextParallelRNG((int) (l3 ^ l4 ^ 6676121));
|
||||||
@@ -272,10 +239,8 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doRavines(int tx, int tz, int sx, int sz, ChunkPosition chunkSnapshot, RNG b, Hunk<BlockData> terrain)
|
private void doRavines(int tx, int tz, int sx, int sz, ChunkPosition chunkSnapshot, RNG b, Hunk<BlockData> terrain) {
|
||||||
{
|
if (b.nextInt(getDimension().getRavineRarity()) != 0) {
|
||||||
if(b.nextInt(getDimension().getRavineRarity()) != 0)
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -283,8 +248,7 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
double d2 = b.nextInt(b.nextInt(40) + 8) + 20;
|
double d2 = b.nextInt(b.nextInt(40) + 8) + 20;
|
||||||
double z = tz * 16 + b.nextInt(16);
|
double z = tz * 16 + b.nextInt(16);
|
||||||
int n5 = 1;
|
int n5 = 1;
|
||||||
for(int i = 0; i < n5; ++i)
|
for (int i = 0; i < n5; ++i) {
|
||||||
{
|
|
||||||
float f = b.nextFloat() * 3.1415927f * 2.0f;
|
float f = b.nextFloat() * 3.1415927f * 2.0f;
|
||||||
float f2 = (b.nextFloat() - 0.5f) * 2.0f / 8.0f;
|
float f2 = (b.nextFloat() - 0.5f) * 2.0f / 8.0f;
|
||||||
float f3 = (b.nextFloat() * 2.0f + b.nextFloat()) * 2.0f;
|
float f3 = (b.nextFloat() * 2.0f + b.nextFloat()) * 2.0f;
|
||||||
@@ -292,8 +256,7 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateRavines(RNG nextParallelRNG, int x, int z, Hunk<BlockData> terrain)
|
public void generateRavines(RNG nextParallelRNG, int x, int z, Hunk<BlockData> terrain) {
|
||||||
{
|
|
||||||
genRavines(x, z, new ChunkPosition(x, z), nextParallelRNG.nextParallelRNG(x).nextParallelRNG(z), terrain);
|
genRavines(x, z, new ChunkPosition(x, z), nextParallelRNG.nextParallelRNG(x).nextParallelRNG(z), terrain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,457 +9,383 @@ import lombok.Data;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class CNG
|
public class CNG {
|
||||||
{
|
public static long hits = 0;
|
||||||
public static long hits = 0;
|
public static long creates = 0;
|
||||||
public static long creates = 0;
|
public static final NoiseInjector ADD = (s, v) -> new double[]{s + v, 1};
|
||||||
public static final NoiseInjector ADD = (s, v) -> new double[] {s + v, 1};
|
public static final NoiseInjector SRC_SUBTRACT = (s, v) -> new double[]{s - v < 0 ? 0 : s - v, -1};
|
||||||
public static final NoiseInjector SRC_SUBTRACT = (s, v) -> new double[] {s - v < 0 ? 0 : s - v, -1};
|
public static final NoiseInjector DST_SUBTRACT = (s, v) -> new double[]{v - s < 0 ? 0 : s - v, -1};
|
||||||
public static final NoiseInjector DST_SUBTRACT = (s, v) -> new double[] {v - s < 0 ? 0 : s - v, -1};
|
public static final NoiseInjector MULTIPLY = (s, v) -> new double[]{s * v, 0};
|
||||||
public static final NoiseInjector MULTIPLY = (s, v) -> new double[] {s * v, 0};
|
public static final NoiseInjector MAX = (s, v) -> new double[]{Math.max(s, v), 0};
|
||||||
public static final NoiseInjector MAX = (s, v) -> new double[] {Math.max(s, v), 0};
|
public static final NoiseInjector MIN = (s, v) -> new double[]{Math.min(s, v), 0};
|
||||||
public static final NoiseInjector MIN = (s, v) -> new double[] {Math.min(s, v), 0};
|
public static final NoiseInjector SRC_MOD = (s, v) -> new double[]{s % v, 0};
|
||||||
public static final NoiseInjector SRC_MOD = (s, v) -> new double[] {s % v, 0};
|
public static final NoiseInjector SRC_POW = (s, v) -> new double[]{Math.pow(s, v), 0};
|
||||||
public static final NoiseInjector SRC_POW = (s, v) -> new double[] {Math.pow(s, v), 0};
|
public static final NoiseInjector DST_MOD = (s, v) -> new double[]{v % s, 0};
|
||||||
public static final NoiseInjector DST_MOD = (s, v) -> new double[] {v % s, 0};
|
public static final NoiseInjector DST_POW = (s, v) -> new double[]{Math.pow(v, s), 0};
|
||||||
public static final NoiseInjector DST_POW = (s, v) -> new double[] {Math.pow(v, s), 0};
|
private double scale;
|
||||||
private double scale;
|
private double bakedScale;
|
||||||
private double bakedScale;
|
private double fscale;
|
||||||
private double fscale;
|
private boolean trueFracturing = false;
|
||||||
private boolean trueFracturing = false;
|
private KList<CNG> children;
|
||||||
private KList<CNG> children;
|
private CNG fracture;
|
||||||
private CNG fracture;
|
private NoiseGenerator generator;
|
||||||
private NoiseGenerator generator;
|
private final double opacity;
|
||||||
private final double opacity;
|
private NoiseInjector injector;
|
||||||
private NoiseInjector injector;
|
private RNG rng;
|
||||||
private RNG rng;
|
private boolean noscale;
|
||||||
private boolean noscale;
|
private int oct;
|
||||||
private int oct;
|
private double patch;
|
||||||
private double patch;
|
private double up;
|
||||||
private double up;
|
private double down;
|
||||||
private double down;
|
private double power;
|
||||||
private double power;
|
|
||||||
|
public NoiseGenerator getGen() {
|
||||||
public NoiseGenerator getGen()
|
return generator;
|
||||||
{
|
}
|
||||||
return generator;
|
|
||||||
}
|
public ProceduralStream<Double> stream() {
|
||||||
|
return new CNGStream(this);
|
||||||
public ProceduralStream<Double> stream()
|
}
|
||||||
{
|
|
||||||
return new CNGStream(this);
|
public ProceduralStream<Double> stream(double min, double max) {
|
||||||
}
|
return new FittedStream<Double>(stream(), min, max);
|
||||||
|
}
|
||||||
public ProceduralStream<Double> stream(double min, double max)
|
|
||||||
{
|
public static CNG signature(RNG rng) {
|
||||||
return new FittedStream<Double>(stream(), min, max);
|
return signature(rng, NoiseType.SIMPLEX);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CNG signature(RNG rng)
|
public static CNG signatureHalf(RNG rng) {
|
||||||
{
|
return signatureHalf(rng, NoiseType.SIMPLEX);
|
||||||
return signature(rng, NoiseType.SIMPLEX);
|
}
|
||||||
}
|
|
||||||
|
public static CNG signatureThick(RNG rng) {
|
||||||
public static CNG signatureHalf(RNG rng)
|
return signatureThick(rng, NoiseType.SIMPLEX);
|
||||||
{
|
}
|
||||||
return signatureHalf(rng, NoiseType.SIMPLEX);
|
|
||||||
}
|
public static CNG signatureDouble(RNG rng) {
|
||||||
|
return signatureDouble(rng, NoiseType.SIMPLEX);
|
||||||
public static CNG signatureThick(RNG rng)
|
}
|
||||||
{
|
|
||||||
return signatureThick(rng, NoiseType.SIMPLEX);
|
public static CNG signatureDouble(RNG rng, NoiseType t) {
|
||||||
}
|
return signatureThick(rng, t).fractureWith(signature(rng.nextParallelRNG(4956)), 93);
|
||||||
|
}
|
||||||
public static CNG signatureDouble(RNG rng)
|
|
||||||
{
|
|
||||||
return signatureDouble(rng, NoiseType.SIMPLEX);
|
public static CNG signatureDoubleFast(RNG rng, NoiseType t, NoiseType f) {
|
||||||
}
|
return signatureThickFast(rng, t, f)
|
||||||
|
.fractureWith(signatureFast(rng.nextParallelRNG(4956), t, f), 93);
|
||||||
public static CNG signatureDouble(RNG rng, NoiseType t)
|
}
|
||||||
{
|
|
||||||
return signatureThick(rng, t).fractureWith(signature(rng.nextParallelRNG(4956)), 93);
|
public static CNG signature(RNG rng, NoiseType t) {
|
||||||
}
|
// @NoArgsConstructor
|
||||||
|
return new CNG(rng.nextParallelRNG(17), t, 1D, 1).fractureWith(new CNG(rng.nextParallelRNG(18), 1, 1).scale(0.9).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.21).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.9), 620), 145), 44).bake();
|
||||||
|
// @done
|
||||||
public static CNG signatureDoubleFast(RNG rng, NoiseType t, NoiseType f)
|
}
|
||||||
{
|
|
||||||
return signatureThickFast(rng, t, f)
|
public static CNG signaturePerlin(RNG rng) {
|
||||||
.fractureWith(signatureFast(rng.nextParallelRNG(4956), t, f), 93);
|
return signaturePerlin(rng, NoiseType.PERLIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CNG signature(RNG rng, NoiseType t)
|
public static CNG signaturePerlin(RNG rng, NoiseType t) {
|
||||||
{
|
// @NoArgsConstructor
|
||||||
// @NoArgsConstructor
|
return new CNG(rng.nextParallelRNG(124996), t, 1D, 1)
|
||||||
return new CNG(rng.nextParallelRNG(17), t, 1D, 1).fractureWith(new CNG(rng.nextParallelRNG(18), 1, 1).scale(0.9).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.21).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.9), 620), 145), 44).bake();
|
.fractureWith(new CNG(rng.nextParallelRNG(18), NoiseType.PERLIN, 1, 1).scale(1.25), 250)
|
||||||
// @done
|
.bake();
|
||||||
}
|
// @done
|
||||||
|
}
|
||||||
public static CNG signaturePerlin(RNG rng)
|
|
||||||
{
|
public static CNG signatureFast(RNG rng, NoiseType t, NoiseType f) {
|
||||||
return signaturePerlin(rng, NoiseType.PERLIN);
|
// @NoArgsConstructor
|
||||||
}
|
return new CNG(rng.nextParallelRNG(17), t, 1D, 1)
|
||||||
|
.fractureWith(new CNG(rng.nextParallelRNG(18), f, 1, 1)
|
||||||
public static CNG signaturePerlin(RNG rng, NoiseType t)
|
.scale(0.9)
|
||||||
{
|
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1)
|
||||||
// @NoArgsConstructor
|
.scale(0.21)
|
||||||
return new CNG(rng.nextParallelRNG(124996), t, 1D, 1)
|
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1).scale(0.9), 620), 145), 44)
|
||||||
.fractureWith(new CNG(rng.nextParallelRNG(18), NoiseType.PERLIN, 1, 1).scale(1.25), 250)
|
.bake();
|
||||||
.bake();
|
// @done
|
||||||
// @done
|
}
|
||||||
}
|
|
||||||
|
public static CNG signatureThick(RNG rng, NoiseType t) {
|
||||||
public static CNG signatureFast(RNG rng, NoiseType t, NoiseType f)
|
// @NoArgsConstructor
|
||||||
{
|
return new CNG(rng.nextParallelRNG(133), t, 1D, 1).fractureWith(new CNG(rng.nextParallelRNG(18), 1, 1).scale(0.5).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.11).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.4), 620), 145), 44).bake();
|
||||||
// @NoArgsConstructor
|
// @done
|
||||||
return new CNG(rng.nextParallelRNG(17), t, 1D, 1)
|
}
|
||||||
.fractureWith(new CNG(rng.nextParallelRNG(18), f, 1, 1)
|
|
||||||
.scale(0.9)
|
public static CNG signatureThickFast(RNG rng, NoiseType t, NoiseType f) {
|
||||||
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1)
|
// @NoArgsConstructor
|
||||||
.scale(0.21)
|
return new CNG(rng.nextParallelRNG(133), t, 1D, 1)
|
||||||
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1).scale(0.9), 620), 145), 44)
|
.fractureWith(new CNG(rng.nextParallelRNG(18), f, 1, 1)
|
||||||
.bake();
|
.scale(0.5).fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1)
|
||||||
// @done
|
.scale(0.11).fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1)
|
||||||
}
|
.scale(0.4), 620), 145), 44).bake();
|
||||||
|
// @done
|
||||||
public static CNG signatureThick(RNG rng, NoiseType t)
|
}
|
||||||
{
|
|
||||||
// @NoArgsConstructor
|
public static CNG signatureHalf(RNG rng, NoiseType t) {
|
||||||
return new CNG(rng.nextParallelRNG(133), t, 1D, 1).fractureWith(new CNG(rng.nextParallelRNG(18), 1, 1).scale(0.5).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.11).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.4), 620), 145), 44).bake();
|
// @NoArgsConstructor
|
||||||
// @done
|
return new CNG(rng.nextParallelRNG(127), t, 1D, 1).fractureWith(new CNG(rng.nextParallelRNG(18), 1, 1).scale(0.9).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.21).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.9), 420), 99), 22).bake();
|
||||||
}
|
// @done
|
||||||
|
}
|
||||||
public static CNG signatureThickFast(RNG rng, NoiseType t, NoiseType f)
|
|
||||||
{
|
public static CNG signatureHalfFast(RNG rng, NoiseType t, NoiseType f) {
|
||||||
// @NoArgsConstructor
|
// @NoArgsConstructor
|
||||||
return new CNG(rng.nextParallelRNG(133), t, 1D, 1)
|
return new CNG(rng.nextParallelRNG(127), t, 1D, 1)
|
||||||
.fractureWith(new CNG(rng.nextParallelRNG(18), f, 1, 1)
|
.fractureWith(new CNG(rng.nextParallelRNG(18), f, 1, 1).scale(0.9)
|
||||||
.scale(0.5).fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1)
|
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1).scale(0.21)
|
||||||
.scale(0.11).fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1)
|
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1).scale(0.9), 420), 99), 22).bake();
|
||||||
.scale(0.4), 620), 145), 44).bake();
|
// @done
|
||||||
// @done
|
}
|
||||||
}
|
|
||||||
|
public CNG(RNG random) {
|
||||||
public static CNG signatureHalf(RNG rng, NoiseType t)
|
this(random, 1);
|
||||||
{
|
}
|
||||||
// @NoArgsConstructor
|
|
||||||
return new CNG(rng.nextParallelRNG(127), t, 1D, 1).fractureWith(new CNG(rng.nextParallelRNG(18), 1, 1).scale(0.9).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.21).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.9), 420), 99), 22).bake();
|
public CNG(RNG random, int octaves) {
|
||||||
// @done
|
this(random, 1D, octaves);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CNG signatureHalfFast(RNG rng, NoiseType t, NoiseType f)
|
public CNG(RNG random, double opacity, int octaves) {
|
||||||
{
|
this(random, NoiseType.SIMPLEX, opacity, octaves);
|
||||||
// @NoArgsConstructor
|
}
|
||||||
return new CNG(rng.nextParallelRNG(127), t, 1D, 1)
|
|
||||||
.fractureWith(new CNG(rng.nextParallelRNG(18),f, 1, 1).scale(0.9)
|
public CNG(RNG random, NoiseType t, double opacity, int octaves) {
|
||||||
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1).scale(0.21)
|
creates++;
|
||||||
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1).scale(0.9), 420), 99), 22).bake();
|
noscale = t.equals(NoiseType.WHITE);
|
||||||
// @done
|
this.oct = octaves;
|
||||||
}
|
this.rng = random;
|
||||||
|
power = 1;
|
||||||
public CNG(RNG random)
|
scale = 1;
|
||||||
{
|
patch = 1;
|
||||||
this(random, 1);
|
bakedScale = 1;
|
||||||
}
|
fscale = 1;
|
||||||
|
down = 0;
|
||||||
public CNG(RNG random, int octaves)
|
up = 0;
|
||||||
{
|
fracture = null;
|
||||||
this(random, 1D, octaves);
|
generator = t.create(random.nextParallelRNG(33).lmax());
|
||||||
}
|
this.opacity = opacity;
|
||||||
|
this.injector = ADD;
|
||||||
public CNG(RNG random, double opacity, int octaves)
|
|
||||||
{
|
if (generator instanceof OctaveNoise) {
|
||||||
this(random, NoiseType.SIMPLEX, opacity, octaves);
|
((OctaveNoise) generator).setOctaves(octaves);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public CNG(RNG random, NoiseType t, double opacity, int octaves)
|
|
||||||
{
|
public CNG bake() {
|
||||||
creates++;
|
bakedScale *= scale;
|
||||||
noscale = t.equals(NoiseType.WHITE);
|
scale = 1;
|
||||||
this.oct = octaves;
|
return this;
|
||||||
this.rng = random;
|
}
|
||||||
power = 1;
|
|
||||||
scale = 1;
|
public CNG child(CNG c) {
|
||||||
patch = 1;
|
if (children == null) {
|
||||||
bakedScale = 1;
|
children = new KList<>();
|
||||||
fscale = 1;
|
}
|
||||||
down = 0;
|
|
||||||
up = 0;
|
children.add(c);
|
||||||
fracture = null;
|
return this;
|
||||||
generator = t.create(random.nextParallelRNG(33).lmax());
|
}
|
||||||
this.opacity = opacity;
|
|
||||||
this.injector = ADD;
|
public RNG getRNG() {
|
||||||
|
return rng;
|
||||||
if(generator instanceof OctaveNoise)
|
}
|
||||||
{
|
|
||||||
((OctaveNoise) generator).setOctaves(octaves);
|
public CNG fractureWith(CNG c, double scale) {
|
||||||
}
|
fracture = c;
|
||||||
}
|
fscale = scale;
|
||||||
|
return this;
|
||||||
public CNG bake()
|
}
|
||||||
{
|
|
||||||
bakedScale *= scale;
|
public CNG scale(double c) {
|
||||||
scale = 1;
|
scale = c;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CNG child(CNG c)
|
public CNG patch(double c) {
|
||||||
{
|
patch = c;
|
||||||
if(children == null)
|
return this;
|
||||||
{
|
}
|
||||||
children = new KList<>();
|
|
||||||
}
|
public CNG up(double c) {
|
||||||
|
up = c;
|
||||||
children.add(c);
|
return this;
|
||||||
return this;
|
}
|
||||||
}
|
|
||||||
|
public CNG down(double c) {
|
||||||
public RNG getRNG()
|
down = c;
|
||||||
{
|
return this;
|
||||||
return rng;
|
}
|
||||||
}
|
|
||||||
|
public CNG injectWith(NoiseInjector i) {
|
||||||
public CNG fractureWith(CNG c, double scale)
|
injector = i;
|
||||||
{
|
return this;
|
||||||
fracture = c;
|
}
|
||||||
fscale = scale;
|
|
||||||
return this;
|
public <T extends IRare> T fitRarity(KList<T> b, double... dim) {
|
||||||
}
|
if (b.size() == 0) {
|
||||||
|
return null;
|
||||||
public CNG scale(double c)
|
}
|
||||||
{
|
|
||||||
scale = c;
|
if (b.size() == 1) {
|
||||||
return this;
|
return b.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CNG patch(double c)
|
KList<T> rarityMapped = new KList<>();
|
||||||
{
|
boolean o = false;
|
||||||
patch = c;
|
int max = 1;
|
||||||
return this;
|
for (T i : b) {
|
||||||
}
|
if (i.getRarity() > max) {
|
||||||
|
max = i.getRarity();
|
||||||
public CNG up(double c)
|
}
|
||||||
{
|
}
|
||||||
up = c;
|
|
||||||
return this;
|
max++;
|
||||||
}
|
|
||||||
|
for (T i : b) {
|
||||||
public CNG down(double c)
|
for (int j = 0; j < max - i.getRarity(); j++) {
|
||||||
{
|
if (o = !o) {
|
||||||
down = c;
|
rarityMapped.add(i);
|
||||||
return this;
|
} else {
|
||||||
}
|
rarityMapped.add(0, i);
|
||||||
|
}
|
||||||
public CNG injectWith(NoiseInjector i)
|
}
|
||||||
{
|
}
|
||||||
injector = i;
|
|
||||||
return this;
|
if (rarityMapped.size() == 1) {
|
||||||
}
|
return rarityMapped.get(0);
|
||||||
|
}
|
||||||
public <T extends IRare> T fitRarity(KList<T> b, double... dim)
|
|
||||||
{
|
if (rarityMapped.isEmpty()) {
|
||||||
if(b.size() == 0)
|
throw new RuntimeException("BAD RARITY MAP! RELATED TO: " + b.toString(", or possibly "));
|
||||||
{
|
}
|
||||||
return null;
|
|
||||||
}
|
return fit(rarityMapped, dim);
|
||||||
|
}
|
||||||
if(b.size() == 1)
|
|
||||||
{
|
public <T> T fit(T[] v, double... dim) {
|
||||||
return b.get(0);
|
if (v.length == 0) {
|
||||||
}
|
return null;
|
||||||
|
}
|
||||||
KList<T> rarityMapped = new KList<>();
|
|
||||||
boolean o = false;
|
if (v.length == 1) {
|
||||||
int max = 1;
|
return v[0];
|
||||||
for(T i : b)
|
}
|
||||||
{
|
|
||||||
if(i.getRarity() > max)
|
return v[fit(0, v.length - 1, dim)];
|
||||||
{
|
}
|
||||||
max = i.getRarity();
|
|
||||||
}
|
public <T> T fit(List<T> v, double... dim) {
|
||||||
}
|
if (v.size() == 0) {
|
||||||
|
return null;
|
||||||
max++;
|
}
|
||||||
|
|
||||||
for(T i : b)
|
if (v.size() == 1) {
|
||||||
{
|
return v.get(0);
|
||||||
for(int j = 0; j < max - i.getRarity(); j++)
|
}
|
||||||
{
|
|
||||||
if(o = !o)
|
try {
|
||||||
{
|
return v.get(fit(0, v.size() - 1, dim));
|
||||||
rarityMapped.add(i);
|
} catch (Throwable e) {
|
||||||
}
|
|
||||||
|
}
|
||||||
else
|
|
||||||
{
|
return v.get(0);
|
||||||
rarityMapped.add(0, i);
|
}
|
||||||
}
|
|
||||||
}
|
public int fit(int min, int max, double... dim) {
|
||||||
}
|
if (min == max) {
|
||||||
|
return min;
|
||||||
if(rarityMapped.size() == 1)
|
}
|
||||||
{
|
|
||||||
return rarityMapped.get(0);
|
double noise = noise(dim);
|
||||||
}
|
|
||||||
|
return (int) Math.round(IrisInterpolation.lerp(min, max, noise));
|
||||||
if(rarityMapped.isEmpty())
|
}
|
||||||
{
|
|
||||||
throw new RuntimeException("BAD RARITY MAP! RELATED TO: " + b.toString(", or possibly "));
|
public int fit(double min, double max, double... dim) {
|
||||||
}
|
if (min == max) {
|
||||||
|
return (int) Math.round(min);
|
||||||
return fit(rarityMapped, dim);
|
}
|
||||||
}
|
|
||||||
|
double noise = noise(dim);
|
||||||
public <T> T fit(T[] v, double... dim)
|
|
||||||
{
|
return (int) Math.round(IrisInterpolation.lerp(min, max, noise));
|
||||||
if(v.length == 0)
|
}
|
||||||
{
|
|
||||||
return null;
|
public double fitDouble(double min, double max, double... dim) {
|
||||||
}
|
if (min == max) {
|
||||||
|
return min;
|
||||||
if(v.length == 1)
|
}
|
||||||
{
|
|
||||||
return v[0];
|
double noise = noise(dim);
|
||||||
}
|
|
||||||
|
return IrisInterpolation.lerp(min, max, noise);
|
||||||
return v[fit(0, v.length - 1, dim)];
|
}
|
||||||
}
|
|
||||||
|
private double getNoise(double... dim) {
|
||||||
public <T> T fit(List<T> v, double... dim)
|
if (isTrueFracturing()) {
|
||||||
{
|
if (dim.length == 2) {
|
||||||
if(v.size() == 0)
|
double scale = noscale ? 1 : this.bakedScale * this.scale;
|
||||||
{
|
double f1 = noscale ? 0 : (fracture != null ? (fracture.noise(dim[0], dim[1]) - 0.5) * fscale : 0D);
|
||||||
return null;
|
double f2 = noscale ? 0 : (fracture != null ? (fracture.noise(dim[1], dim[0]) - 0.5) * fscale : 0D);
|
||||||
}
|
double x = dim[0] + f1;
|
||||||
|
double y = dim[1] + -f1;
|
||||||
if(v.size() == 1)
|
double z = 0D;
|
||||||
{
|
return generator.noise(x * scale, y * scale, z * scale) * opacity;
|
||||||
return v.get(0);
|
} else if (dim.length == 3) {
|
||||||
}
|
double scale = noscale ? 1 : this.bakedScale * this.scale;
|
||||||
|
double f1 = noscale ? 0 : (fracture != null ? (fracture.noise(dim[0], dim[2], dim[1]) - 0.5) * fscale : 0D);
|
||||||
try
|
double f2 = noscale ? 0 : (fracture != null ? (fracture.noise(dim[1], dim[0], dim[2]) - 0.5) * fscale : 0D);
|
||||||
{
|
double f3 = noscale ? 0 : (fracture != null ? (fracture.noise(dim[2], dim[1], dim[0]) - 0.5) * fscale : 0D);
|
||||||
return v.get(fit(0, v.size() - 1, dim));
|
double x = dim[0] + f1;
|
||||||
}
|
double y = dim[1] + f3;
|
||||||
|
double z = dim[2] + f2;
|
||||||
catch(Throwable e)
|
return generator.noise(x * scale, y * scale, z * scale) * opacity;
|
||||||
{
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
double scale = noscale ? 1 : this.bakedScale * this.scale;
|
||||||
return v.get(0);
|
double f = noscale ? 0 : (fracture != null ? (fracture.noise(dim) - 0.5) * fscale : 0D);
|
||||||
}
|
double x = dim.length > 0 ? dim[0] + f : 0D;
|
||||||
|
double y = dim.length > 1 ? dim[1] + -f : 0D;
|
||||||
public int fit(int min, int max, double... dim)
|
double z = dim.length > 2 ? dim[2] + -f : 0D;
|
||||||
{
|
return generator.noise(x * scale, y * scale, z * scale) * opacity;
|
||||||
if(min == max)
|
}
|
||||||
{
|
|
||||||
return min;
|
public double noise(double... dim) {
|
||||||
}
|
double n = getNoise(dim);
|
||||||
|
n = power != 1D ? (n < 0 ? -Math.pow(Math.abs(n), power) : Math.pow(n, power)) : n;
|
||||||
double noise = noise(dim);
|
double m = 1;
|
||||||
|
hits += oct;
|
||||||
return (int) Math.round(IrisInterpolation.lerp(min, max, noise));
|
if (children == null) {
|
||||||
}
|
return (n - down + up) * patch;
|
||||||
|
}
|
||||||
public int fit(double min, double max, double... dim)
|
|
||||||
{
|
for (CNG i : children) {
|
||||||
if(min == max)
|
double[] r = injector.combine(n, i.noise(dim));
|
||||||
{
|
n = r[0];
|
||||||
return (int) Math.round(min);
|
m += r[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
double noise = noise(dim);
|
return ((n / m) - down + up) * patch;
|
||||||
|
}
|
||||||
return (int) Math.round(IrisInterpolation.lerp(min, max, noise));
|
|
||||||
}
|
public CNG pow(double power) {
|
||||||
|
this.power = power;
|
||||||
public double fitDouble(double min, double max, double... dim)
|
return this;
|
||||||
{
|
}
|
||||||
if(min == max)
|
|
||||||
{
|
public CNG oct(int octaves) {
|
||||||
return min;
|
oct = octaves;
|
||||||
}
|
return this;
|
||||||
|
}
|
||||||
double noise = noise(dim);
|
|
||||||
|
public double getScale() {
|
||||||
return IrisInterpolation.lerp(min, max, noise);
|
return scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
private double getNoise(double... dim)
|
public boolean isStatic() {
|
||||||
{
|
return generator != null && generator.isStatic();
|
||||||
if(isTrueFracturing())
|
}
|
||||||
{
|
|
||||||
if(dim.length == 2)
|
|
||||||
{
|
|
||||||
double scale = noscale ? 1 : this.bakedScale * this.scale;
|
|
||||||
double f1 = noscale ? 0 : (fracture != null ? (fracture.noise(dim[0], dim[1]) - 0.5) * fscale : 0D);
|
|
||||||
double f2 = noscale ? 0 : (fracture != null ? (fracture.noise(dim[1], dim[0]) - 0.5) * fscale : 0D);
|
|
||||||
double x = dim[0] + f1;
|
|
||||||
double y = dim[1] + -f1;
|
|
||||||
double z = 0D;
|
|
||||||
return generator.noise(x * scale, y * scale, z * scale) * opacity;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if(dim.length == 3)
|
|
||||||
{
|
|
||||||
double scale = noscale ? 1 : this.bakedScale * this.scale;
|
|
||||||
double f1 = noscale ? 0 : (fracture != null ? (fracture.noise(dim[0], dim[2], dim[1]) - 0.5) * fscale : 0D);
|
|
||||||
double f2 = noscale ? 0 : (fracture != null ? (fracture.noise(dim[1], dim[0], dim[2]) - 0.5) * fscale : 0D);
|
|
||||||
double f3 = noscale ? 0 : (fracture != null ? (fracture.noise(dim[2], dim[1], dim[0]) - 0.5) * fscale : 0D);
|
|
||||||
double x = dim[0] + f1;
|
|
||||||
double y = dim[1] + f3;
|
|
||||||
double z = dim[2] + f2;
|
|
||||||
return generator.noise(x * scale, y * scale, z * scale) * opacity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
double scale = noscale ? 1 : this.bakedScale * this.scale;
|
|
||||||
double f = noscale ? 0 : (fracture != null ? (fracture.noise(dim) - 0.5) * fscale : 0D);
|
|
||||||
double x = dim.length > 0 ? dim[0] + f : 0D;
|
|
||||||
double y = dim.length > 1 ? dim[1] + -f : 0D;
|
|
||||||
double z = dim.length > 2 ? dim[2] + -f : 0D;
|
|
||||||
return generator.noise(x * scale, y * scale, z * scale) * opacity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double noise(double... dim)
|
|
||||||
{
|
|
||||||
double n = getNoise(dim);
|
|
||||||
n = power != 1D ? (n < 0 ? -Math.pow(Math.abs(n), power) : Math.pow(n, power)) : n;
|
|
||||||
double m = 1;
|
|
||||||
hits += oct;
|
|
||||||
if(children == null)
|
|
||||||
{
|
|
||||||
return (n - down + up) * patch;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(CNG i : children)
|
|
||||||
{
|
|
||||||
double[] r = injector.combine(n, i.noise(dim));
|
|
||||||
n = r[0];
|
|
||||||
m += r[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
return ((n / m) - down + up) * patch;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CNG pow(double power)
|
|
||||||
{
|
|
||||||
this.power = power;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CNG oct(int octaves)
|
|
||||||
{
|
|
||||||
oct = octaves;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getScale()
|
|
||||||
{
|
|
||||||
return scale;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isStatic() {
|
|
||||||
return generator != null && generator.isStatic();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.volmit.iris.generator.noise;
|
|||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
public interface CNGFactory
|
public interface CNGFactory {
|
||||||
{
|
CNG create(RNG seed);
|
||||||
CNG create(RNG seed);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,88 +1,75 @@
|
|||||||
package com.volmit.iris.generator.noise;
|
package com.volmit.iris.generator.noise;
|
||||||
|
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
public class CellGenerator
|
public class CellGenerator {
|
||||||
{
|
private final FastNoiseDouble fn;
|
||||||
private FastNoiseDouble fn;
|
private final FastNoiseDouble fd;
|
||||||
private FastNoiseDouble fd;
|
private final CNG cng;
|
||||||
private CNG cng;
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
private double cellScale;
|
private double cellScale;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
private double shuffle;
|
private double shuffle;
|
||||||
|
|
||||||
public CellGenerator(RNG rng)
|
public CellGenerator(RNG rng) {
|
||||||
{
|
shuffle = 128;
|
||||||
shuffle = 128;
|
cellScale = 0.73;
|
||||||
cellScale = 0.73;
|
cng = CNG.signature(rng.nextParallelRNG(3204));
|
||||||
cng = CNG.signature(rng.nextParallelRNG(3204));
|
RNG rx = rng.nextParallelRNG(8735652);
|
||||||
RNG rx = rng.nextParallelRNG(8735652);
|
long s = rx.lmax();
|
||||||
long s = rx.lmax();
|
fn = new FastNoiseDouble(s);
|
||||||
fn = new FastNoiseDouble(s);
|
fn.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
|
||||||
fn.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
|
fn.setCellularReturnType(FastNoiseDouble.CellularReturnType.CellValue);
|
||||||
fn.setCellularReturnType(FastNoiseDouble.CellularReturnType.CellValue);
|
fn.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
|
||||||
fn.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
|
fd = new FastNoiseDouble(s);
|
||||||
fd = new FastNoiseDouble(s);
|
fd.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
|
||||||
fd.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
|
fd.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Sub);
|
||||||
fd.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Sub);
|
fd.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
|
||||||
fd.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public double getDistance(double x, double z)
|
public double getDistance(double x, double z) {
|
||||||
{
|
return ((fd.GetCellular(((x * cellScale) + (cng.noise(x, z) * shuffle)), ((z * cellScale) + (cng.noise(z, x) * shuffle)))) + 1f) / 2f;
|
||||||
return ((fd.GetCellular(((x * cellScale) + (cng.noise(x, z) * shuffle)), ((z * cellScale) + (cng.noise(z, x) * shuffle)))) + 1f) / 2f;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public double getDistance(double x, double y, double z)
|
public double getDistance(double x, double y, double z) {
|
||||||
{
|
return ((fd.GetCellular(((x * cellScale) + (cng.noise(x, y, z) * shuffle)), ((y * cellScale) + (cng.noise(x, y, z) * shuffle)), ((z * cellScale) + (cng.noise(z, y, x) * shuffle)))) + 1f) / 2f;
|
||||||
return ((fd.GetCellular(((x * cellScale) + (cng.noise(x, y, z) * shuffle)), ((y * cellScale) + (cng.noise(x, y, z) * shuffle)), ((z * cellScale) + (cng.noise(z, y, x) * shuffle)))) + 1f) / 2f;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public double getValue(double x, double z, int possibilities)
|
public double getValue(double x, double z, int possibilities) {
|
||||||
{
|
if (possibilities == 1) {
|
||||||
if(possibilities == 1)
|
return 0;
|
||||||
{
|
}
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ((fn.GetCellular(((x * cellScale) + (cng.noise(x, z) * shuffle)), ((z * cellScale) + (cng.noise(z, x) * shuffle))) + 1f) / 2f) * (possibilities - 1);
|
return ((fn.GetCellular(((x * cellScale) + (cng.noise(x, z) * shuffle)), ((z * cellScale) + (cng.noise(z, x) * shuffle))) + 1f) / 2f) * (possibilities - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getValue(double x, double y, double z, int possibilities)
|
public double getValue(double x, double y, double z, int possibilities) {
|
||||||
{
|
if (possibilities == 1) {
|
||||||
if(possibilities == 1)
|
return 0;
|
||||||
{
|
}
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ((fn.GetCellular(((x * cellScale) + (cng.noise(x, z) * shuffle)), ((y * 8 * cellScale) + (cng.noise(x, y * 8) * shuffle)), ((z * cellScale) + (cng.noise(z, x) * shuffle))) + 1f) / 2f) * (possibilities - 1);
|
return ((fn.GetCellular(((x * cellScale) + (cng.noise(x, z) * shuffle)), ((y * 8 * cellScale) + (cng.noise(x, y * 8) * shuffle)), ((z * cellScale) + (cng.noise(z, x) * shuffle))) + 1f) / 2f) * (possibilities - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getIndex(double x, double z, int possibilities)
|
public int getIndex(double x, double z, int possibilities) {
|
||||||
{
|
if (possibilities == 1) {
|
||||||
if(possibilities == 1)
|
return 0;
|
||||||
{
|
}
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (int) Math.round(getValue(x, z, possibilities));
|
return (int) Math.round(getValue(x, z, possibilities));
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getIndex(double x, double y, double z, int possibilities)
|
public int getIndex(double x, double y, double z, int possibilities) {
|
||||||
{
|
if (possibilities == 1) {
|
||||||
if(possibilities == 1)
|
return 0;
|
||||||
{
|
}
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (int) Math.round(getValue(x, y, z, possibilities));
|
return (int) Math.round(getValue(x, y, z, possibilities));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,38 +3,32 @@ package com.volmit.iris.generator.noise;
|
|||||||
import com.volmit.iris.util.M;
|
import com.volmit.iris.util.M;
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
public class CellHeightNoise implements NoiseGenerator
|
public class CellHeightNoise implements NoiseGenerator {
|
||||||
{
|
private final FastNoiseDouble n;
|
||||||
private final FastNoiseDouble n;
|
|
||||||
|
|
||||||
public CellHeightNoise(long seed)
|
public CellHeightNoise(long seed) {
|
||||||
{
|
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
||||||
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
n.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
|
||||||
n.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
|
n.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Sub);
|
||||||
n.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Sub);
|
n.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
|
||||||
n.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private double filter(double noise)
|
private double filter(double noise) {
|
||||||
{
|
return M.clip(1D - ((noise / 2D) + 0.5D), 0D, 1D);
|
||||||
return M.clip(1D - ((noise / 2D) + 0.5D), 0D, 1D);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x)
|
public double noise(double x) {
|
||||||
{
|
return filter(n.GetCellular(x, 0));
|
||||||
return filter(n.GetCellular(x, 0));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double z)
|
public double noise(double x, double z) {
|
||||||
{
|
return filter(n.GetCellular(x, z));
|
||||||
return filter(n.GetCellular(x, z));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double y, double z)
|
public double noise(double x, double y, double z) {
|
||||||
{
|
return filter(n.GetCellular(x, y, z));
|
||||||
return filter(n.GetCellular(x, y, z));
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,33 +2,28 @@ package com.volmit.iris.generator.noise;
|
|||||||
|
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
public class CellularNoise implements NoiseGenerator
|
public class CellularNoise implements NoiseGenerator {
|
||||||
{
|
private final FastNoise n;
|
||||||
private final FastNoise n;
|
|
||||||
|
|
||||||
public CellularNoise(long seed)
|
public CellularNoise(long seed) {
|
||||||
{
|
this.n = new FastNoise(new RNG(seed).imax());
|
||||||
this.n = new FastNoise(new RNG(seed).imax());
|
n.SetNoiseType(FastNoise.NoiseType.Cellular);
|
||||||
n.SetNoiseType(FastNoise.NoiseType.Cellular);
|
n.SetCellularReturnType(FastNoise.CellularReturnType.CellValue);
|
||||||
n.SetCellularReturnType(FastNoise.CellularReturnType.CellValue);
|
n.SetCellularDistanceFunction(FastNoise.CellularDistanceFunction.Natural);
|
||||||
n.SetCellularDistanceFunction(FastNoise.CellularDistanceFunction.Natural);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x)
|
public double noise(double x) {
|
||||||
{
|
return (n.GetCellular((float) x, 0) / 2D) + 0.5D;
|
||||||
return (n.GetCellular((float) x, 0) / 2D) + 0.5D;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double z)
|
public double noise(double x, double z) {
|
||||||
{
|
return (n.GetCellular((float) x, (float) z) / 2D) + 0.5D;
|
||||||
return (n.GetCellular((float)x, (float)z) / 2D) + 0.5D;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double y, double z)
|
public double noise(double x, double y, double z) {
|
||||||
{
|
return (n.GetCellular((float) x, (float) y, (float) z) / 2D) + 0.5D;
|
||||||
return (n.GetCellular((float)x, (float)y, (float)z) / 2D) + 0.5D;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,35 +2,29 @@ package com.volmit.iris.generator.noise;
|
|||||||
|
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
public class CubicNoise implements NoiseGenerator
|
public class CubicNoise implements NoiseGenerator {
|
||||||
{
|
private final FastNoiseDouble n;
|
||||||
private final FastNoiseDouble n;
|
|
||||||
|
|
||||||
public CubicNoise(long seed)
|
public CubicNoise(long seed) {
|
||||||
{
|
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
||||||
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private double f(double n)
|
private double f(double n) {
|
||||||
{
|
return (n / 2D) + 0.5D;
|
||||||
return (n / 2D) + 0.5D;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x)
|
public double noise(double x) {
|
||||||
{
|
return f(n.GetCubic(x, 0));
|
||||||
return f(n.GetCubic(x, 0));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double z)
|
public double noise(double x, double z) {
|
||||||
{
|
return f(n.GetCubic(x, z));
|
||||||
return f(n.GetCubic(x, z));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double y, double z)
|
public double noise(double x, double y, double z) {
|
||||||
{
|
return f(n.GetCubic(x, y, z));
|
||||||
return f(n.GetCubic(x, y, z));
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,27 +1,22 @@
|
|||||||
package com.volmit.iris.generator.noise;
|
package com.volmit.iris.generator.noise;
|
||||||
|
|
||||||
public class FlatNoise implements NoiseGenerator
|
public class FlatNoise implements NoiseGenerator {
|
||||||
{
|
public FlatNoise(long seed) {
|
||||||
public FlatNoise(long seed)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x)
|
public double noise(double x) {
|
||||||
{
|
return 1D;
|
||||||
return 1D;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double z)
|
public double noise(double x, double z) {
|
||||||
{
|
return 1D;
|
||||||
return 1D;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double y, double z)
|
public double noise(double x, double y, double z) {
|
||||||
{
|
return 1D;
|
||||||
return 1D;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,43 +3,36 @@ package com.volmit.iris.generator.noise;
|
|||||||
import com.volmit.iris.generator.noise.FastNoiseDouble.FractalType;
|
import com.volmit.iris.generator.noise.FastNoiseDouble.FractalType;
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
public class FractalBillowPerlinNoise implements NoiseGenerator, OctaveNoise
|
public class FractalBillowPerlinNoise implements NoiseGenerator, OctaveNoise {
|
||||||
{
|
private final FastNoiseDouble n;
|
||||||
private final FastNoiseDouble n;
|
|
||||||
|
|
||||||
public FractalBillowPerlinNoise(long seed)
|
public FractalBillowPerlinNoise(long seed) {
|
||||||
{
|
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
||||||
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
n.setFractalOctaves(1);
|
||||||
n.setFractalOctaves(1);
|
n.setFractalType(FractalType.Billow);
|
||||||
n.setFractalType(FractalType.Billow);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public double f(double v)
|
public double f(double v) {
|
||||||
{
|
return (v / 2D) + 0.5D;
|
||||||
return (v / 2D) + 0.5D;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x)
|
public double noise(double x) {
|
||||||
{
|
return f(n.GetPerlinFractal(x, 0f));
|
||||||
return f(n.GetPerlinFractal(x, 0f));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double z)
|
public double noise(double x, double z) {
|
||||||
{
|
return f(n.GetPerlinFractal(x, z));
|
||||||
return f(n.GetPerlinFractal(x, z));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double y, double z)
|
public double noise(double x, double y, double z) {
|
||||||
{
|
return f(n.GetPerlinFractal(x, y, z));
|
||||||
return f(n.GetPerlinFractal(x, y, z));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOctaves(int o)
|
public void setOctaves(int o) {
|
||||||
{
|
n.setFractalOctaves(o);
|
||||||
n.setFractalOctaves(o);
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,43 +3,36 @@ package com.volmit.iris.generator.noise;
|
|||||||
import com.volmit.iris.generator.noise.FastNoiseDouble.FractalType;
|
import com.volmit.iris.generator.noise.FastNoiseDouble.FractalType;
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
public class FractalBillowSimplexNoise implements NoiseGenerator, OctaveNoise
|
public class FractalBillowSimplexNoise implements NoiseGenerator, OctaveNoise {
|
||||||
{
|
private final FastNoiseDouble n;
|
||||||
private final FastNoiseDouble n;
|
|
||||||
|
|
||||||
public FractalBillowSimplexNoise(long seed)
|
public FractalBillowSimplexNoise(long seed) {
|
||||||
{
|
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
||||||
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
n.setFractalOctaves(1);
|
||||||
n.setFractalOctaves(1);
|
n.setFractalType(FractalType.Billow);
|
||||||
n.setFractalType(FractalType.Billow);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public double f(double v)
|
public double f(double v) {
|
||||||
{
|
return (v / 2D) + 0.5D;
|
||||||
return (v / 2D) + 0.5D;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x)
|
public double noise(double x) {
|
||||||
{
|
return f(n.GetSimplexFractal(x, 0d));
|
||||||
return f(n.GetSimplexFractal(x, 0d));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double z)
|
public double noise(double x, double z) {
|
||||||
{
|
return f(n.GetSimplexFractal(x, z));
|
||||||
return f(n.GetSimplexFractal(x, z));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double y, double z)
|
public double noise(double x, double y, double z) {
|
||||||
{
|
return f(n.GetSimplexFractal(x, y, z));
|
||||||
return f(n.GetSimplexFractal(x, y, z));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOctaves(int o)
|
public void setOctaves(int o) {
|
||||||
{
|
n.setFractalOctaves(o);
|
||||||
n.setFractalOctaves(o);
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,36 +3,30 @@ package com.volmit.iris.generator.noise;
|
|||||||
import com.volmit.iris.generator.noise.FastNoiseDouble.FractalType;
|
import com.volmit.iris.generator.noise.FastNoiseDouble.FractalType;
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
public class FractalCubicNoise implements NoiseGenerator
|
public class FractalCubicNoise implements NoiseGenerator {
|
||||||
{
|
private final FastNoiseDouble n;
|
||||||
private final FastNoiseDouble n;
|
|
||||||
|
|
||||||
public FractalCubicNoise(long seed)
|
public FractalCubicNoise(long seed) {
|
||||||
{
|
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
||||||
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
n.setFractalType(FractalType.Billow);
|
||||||
n.setFractalType(FractalType.Billow);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private double f(double n)
|
private double f(double n) {
|
||||||
{
|
return (n / 2D) + 0.5D;
|
||||||
return (n / 2D) + 0.5D;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x)
|
public double noise(double x) {
|
||||||
{
|
return f(n.GetCubicFractal(x, 0));
|
||||||
return f(n.GetCubicFractal(x, 0));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double z)
|
public double noise(double x, double z) {
|
||||||
{
|
return f(n.GetCubicFractal(x, z));
|
||||||
return f(n.GetCubicFractal(x, z));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double y, double z)
|
public double noise(double x, double y, double z) {
|
||||||
{
|
return f(n.GetCubicFractal(x, y, z));
|
||||||
return f(n.GetCubicFractal(x, y, z));
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,43 +3,36 @@ package com.volmit.iris.generator.noise;
|
|||||||
import com.volmit.iris.generator.noise.FastNoiseDouble.FractalType;
|
import com.volmit.iris.generator.noise.FastNoiseDouble.FractalType;
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
public class FractalFBMSimplexNoise implements NoiseGenerator, OctaveNoise
|
public class FractalFBMSimplexNoise implements NoiseGenerator, OctaveNoise {
|
||||||
{
|
private final FastNoiseDouble n;
|
||||||
private final FastNoiseDouble n;
|
|
||||||
|
|
||||||
public FractalFBMSimplexNoise(long seed)
|
public FractalFBMSimplexNoise(long seed) {
|
||||||
{
|
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
||||||
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
n.setFractalOctaves(1);
|
||||||
n.setFractalOctaves(1);
|
n.setFractalType(FractalType.FBM);
|
||||||
n.setFractalType(FractalType.FBM);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public double f(double v)
|
public double f(double v) {
|
||||||
{
|
return (v / 2D) + 0.5D;
|
||||||
return (v / 2D) + 0.5D;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x)
|
public double noise(double x) {
|
||||||
{
|
return f(n.GetSimplexFractal(x, 0d));
|
||||||
return f(n.GetSimplexFractal(x, 0d));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double z)
|
public double noise(double x, double z) {
|
||||||
{
|
return f(n.GetSimplexFractal(x, z));
|
||||||
return f(n.GetSimplexFractal(x, z));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double y, double z)
|
public double noise(double x, double y, double z) {
|
||||||
{
|
return f(n.GetSimplexFractal(x, y, z));
|
||||||
return f(n.GetSimplexFractal(x, y, z));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOctaves(int o)
|
public void setOctaves(int o) {
|
||||||
{
|
n.setFractalOctaves(o);
|
||||||
n.setFractalOctaves(o);
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,43 +3,36 @@ package com.volmit.iris.generator.noise;
|
|||||||
import com.volmit.iris.generator.noise.FastNoiseDouble.FractalType;
|
import com.volmit.iris.generator.noise.FastNoiseDouble.FractalType;
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
public class FractalRigidMultiSimplexNoise implements NoiseGenerator, OctaveNoise
|
public class FractalRigidMultiSimplexNoise implements NoiseGenerator, OctaveNoise {
|
||||||
{
|
private final FastNoiseDouble n;
|
||||||
private final FastNoiseDouble n;
|
|
||||||
|
|
||||||
public FractalRigidMultiSimplexNoise(long seed)
|
public FractalRigidMultiSimplexNoise(long seed) {
|
||||||
{
|
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
||||||
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
n.setFractalOctaves(1);
|
||||||
n.setFractalOctaves(1);
|
n.setFractalType(FractalType.RigidMulti);
|
||||||
n.setFractalType(FractalType.RigidMulti);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public double f(double v)
|
public double f(double v) {
|
||||||
{
|
return (v / 2D) + 0.5D;
|
||||||
return (v / 2D) + 0.5D;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x)
|
public double noise(double x) {
|
||||||
{
|
return f(n.GetSimplexFractal(x, 0d));
|
||||||
return f(n.GetSimplexFractal(x, 0d));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double z)
|
public double noise(double x, double z) {
|
||||||
{
|
return f(n.GetSimplexFractal(x, z));
|
||||||
return f(n.GetSimplexFractal(x, z));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double y, double z)
|
public double noise(double x, double y, double z) {
|
||||||
{
|
return f(n.GetSimplexFractal(x, y, z));
|
||||||
return f(n.GetSimplexFractal(x, y, z));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOctaves(int o)
|
public void setOctaves(int o) {
|
||||||
{
|
n.setFractalOctaves(o);
|
||||||
n.setFractalOctaves(o);
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,38 +2,32 @@ package com.volmit.iris.generator.noise;
|
|||||||
|
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
public class GlobNoise implements NoiseGenerator
|
public class GlobNoise implements NoiseGenerator {
|
||||||
{
|
private final FastNoiseDouble n;
|
||||||
private final FastNoiseDouble n;
|
|
||||||
|
|
||||||
public GlobNoise(long seed)
|
public GlobNoise(long seed) {
|
||||||
{
|
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
||||||
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
n.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
|
||||||
n.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
|
n.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Div);
|
||||||
n.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Div);
|
n.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
|
||||||
n.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private double f(double n)
|
private double f(double n) {
|
||||||
{
|
return n + 1D;
|
||||||
return n + 1D;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x)
|
public double noise(double x) {
|
||||||
{
|
return f(n.GetCellular(x, 0));
|
||||||
return f(n.GetCellular(x, 0));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double z)
|
public double noise(double x, double z) {
|
||||||
{
|
return f(n.GetCellular(x, z));
|
||||||
return f(n.GetCellular(x, z));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double y, double z)
|
public double noise(double x, double y, double z) {
|
||||||
{
|
return f(n.GetCellular(x, y, z));
|
||||||
return f(n.GetCellular(x, y, z));
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.volmit.iris.generator.noise;
|
package com.volmit.iris.generator.noise;
|
||||||
|
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
public interface NoiseFactory
|
public interface NoiseFactory {
|
||||||
{
|
NoiseGenerator create(long seed);
|
||||||
NoiseGenerator create(long seed);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
package com.volmit.iris.generator.noise;
|
package com.volmit.iris.generator.noise;
|
||||||
|
|
||||||
public interface NoiseGenerator
|
public interface NoiseGenerator {
|
||||||
{
|
double noise(double x);
|
||||||
public double noise(double x);
|
|
||||||
|
|
||||||
public double noise(double x, double z);
|
|
||||||
|
|
||||||
public double noise(double x, double y, double z);
|
|
||||||
|
|
||||||
public default boolean isStatic()
|
double noise(double x, double z);
|
||||||
{
|
|
||||||
return false;
|
double noise(double x, double y, double z);
|
||||||
}
|
|
||||||
|
default boolean isStatic() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +1,28 @@
|
|||||||
package com.volmit.iris.generator.noise;
|
package com.volmit.iris.generator.noise;
|
||||||
|
|
||||||
public enum NoiseType {
|
public enum NoiseType {
|
||||||
WHITE(WhiteNoise::new),
|
WHITE(WhiteNoise::new),
|
||||||
SIMPLEX(SimplexNoise::new),
|
SIMPLEX(SimplexNoise::new),
|
||||||
PERLIN(seed -> new PerlinNoise(seed).hermite()),
|
PERLIN(seed -> new PerlinNoise(seed).hermite()),
|
||||||
FRACTAL_BILLOW_SIMPLEX(FractalBillowSimplexNoise::new),
|
FRACTAL_BILLOW_SIMPLEX(FractalBillowSimplexNoise::new),
|
||||||
FRACTAL_BILLOW_PERLIN(FractalBillowPerlinNoise::new),
|
FRACTAL_BILLOW_PERLIN(FractalBillowPerlinNoise::new),
|
||||||
FRACTAL_FBM_SIMPLEX(FractalFBMSimplexNoise::new),
|
FRACTAL_FBM_SIMPLEX(FractalFBMSimplexNoise::new),
|
||||||
FRACTAL_RIGID_MULTI_SIMPLEX(FractalRigidMultiSimplexNoise::new),
|
FRACTAL_RIGID_MULTI_SIMPLEX(FractalRigidMultiSimplexNoise::new),
|
||||||
FLAT(FlatNoise::new),
|
FLAT(FlatNoise::new),
|
||||||
CELLULAR(CellularNoise::new),
|
CELLULAR(CellularNoise::new),
|
||||||
GLOB(GlobNoise::new),
|
GLOB(GlobNoise::new),
|
||||||
CUBIC(CubicNoise::new),
|
CUBIC(CubicNoise::new),
|
||||||
FRACTAL_CUBIC(FractalCubicNoise::new),
|
FRACTAL_CUBIC(FractalCubicNoise::new),
|
||||||
CELLULAR_HEIGHT(CellHeightNoise::new),
|
CELLULAR_HEIGHT(CellHeightNoise::new),
|
||||||
VASCULAR(VascularNoise::new);
|
VASCULAR(VascularNoise::new);
|
||||||
|
|
||||||
private final NoiseFactory f;
|
private final NoiseFactory f;
|
||||||
|
|
||||||
private NoiseType(NoiseFactory f) {
|
NoiseType(NoiseFactory f) {
|
||||||
this.f = f;
|
this.f = f;
|
||||||
}
|
}
|
||||||
|
|
||||||
public NoiseGenerator create(long seed) {
|
public NoiseGenerator create(long seed) {
|
||||||
return f.create(seed);
|
return f.create(seed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.volmit.iris.generator.noise;
|
package com.volmit.iris.generator.noise;
|
||||||
|
|
||||||
public interface OctaveNoise
|
public interface OctaveNoise {
|
||||||
{
|
void setOctaves(int o);
|
||||||
public void setOctaves(int o);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,97 +2,85 @@ package com.volmit.iris.generator.noise;
|
|||||||
|
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
public class PerlinNoise implements NoiseGenerator, OctaveNoise
|
public class PerlinNoise implements NoiseGenerator, OctaveNoise {
|
||||||
{
|
private final FastNoiseDouble n;
|
||||||
private final FastNoiseDouble n;
|
private int octaves;
|
||||||
private int octaves;
|
|
||||||
|
|
||||||
public PerlinNoise(long seed)
|
public PerlinNoise(long seed) {
|
||||||
{
|
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
||||||
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
octaves = 1;
|
||||||
octaves = 1;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public double f(double v)
|
public double f(double v) {
|
||||||
{
|
return (v / 2D) + 0.5D;
|
||||||
return (v / 2D) + 0.5D;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x)
|
public double noise(double x) {
|
||||||
{
|
if (octaves <= 1) {
|
||||||
if(octaves <= 1)
|
return f(n.GetPerlin(x, 0));
|
||||||
{
|
}
|
||||||
return f(n.GetPerlin(x, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
double f = 1;
|
double f = 1;
|
||||||
double m = 0;
|
double m = 0;
|
||||||
double v = 0;
|
double v = 0;
|
||||||
|
|
||||||
for(int i = 0; i < octaves; i++)
|
for (int i = 0; i < octaves; i++) {
|
||||||
{
|
v += n.GetPerlin((x * (f == 1 ? f++ : (f *= 2))), 0) * f;
|
||||||
v += n.GetPerlin((x * (f == 1 ? f++ : (f *= 2))), 0) * f;
|
m += f;
|
||||||
m += f;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return f(v / m);
|
return f(v / m);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double z)
|
public double noise(double x, double z) {
|
||||||
{
|
if (octaves <= 1) {
|
||||||
if(octaves <= 1)
|
return f(n.GetPerlin(x, z));
|
||||||
{
|
}
|
||||||
return f(n.GetPerlin(x, z));
|
double f = 1;
|
||||||
}
|
double m = 0;
|
||||||
double f = 1;
|
double v = 0;
|
||||||
double m = 0;
|
|
||||||
double v = 0;
|
|
||||||
|
|
||||||
for(int i = 0; i < octaves; i++)
|
for (int i = 0; i < octaves; i++) {
|
||||||
{
|
f = f == 1 ? f + 1 : f * 2;
|
||||||
f = f == 1 ? f + 1 : f * 2;
|
v += n.GetPerlin((x * f), (z * f)) * f;
|
||||||
v += n.GetPerlin((x * f), (z * f)) * f;
|
m += f;
|
||||||
m += f;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return f(v / m);
|
return f(v / m);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double y, double z)
|
public double noise(double x, double y, double z) {
|
||||||
{
|
if (octaves <= 1) {
|
||||||
if(octaves <= 1)
|
return f(n.GetPerlin(x, y, z));
|
||||||
{
|
}
|
||||||
return f(n.GetPerlin(x, y, z));
|
double f = 1;
|
||||||
}
|
double m = 0;
|
||||||
double f = 1;
|
double v = 0;
|
||||||
double m = 0;
|
|
||||||
double v = 0;
|
|
||||||
|
|
||||||
for(int i = 0; i < octaves; i++)
|
for (int i = 0; i < octaves; i++) {
|
||||||
{
|
f = f == 1 ? f + 1 : f * 2;
|
||||||
f = f == 1 ? f + 1 : f * 2;
|
v += n.GetPerlin((x * f), (y * f), (z * f)) * f;
|
||||||
v += n.GetPerlin((x * f), (y * f), (z * f)) * f;
|
m += f;
|
||||||
m += f;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return f(v / m);
|
return f(v / m);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOctaves(int o)
|
public void setOctaves(int o) {
|
||||||
{
|
octaves = o;
|
||||||
octaves = o;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public NoiseGenerator hermite() {
|
public NoiseGenerator hermite() {
|
||||||
n.m_longerp = FastNoiseDouble.Longerp.Hermite;
|
n.m_longerp = FastNoiseDouble.Longerp.Hermite;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public NoiseGenerator quad() {
|
|
||||||
n.m_longerp = FastNoiseDouble.Longerp.Qulongic;
|
public NoiseGenerator quad() {
|
||||||
return this;
|
n.m_longerp = FastNoiseDouble.Longerp.Qulongic;
|
||||||
}
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,64 +4,49 @@ import com.volmit.iris.util.IRare;
|
|||||||
import com.volmit.iris.util.KList;
|
import com.volmit.iris.util.KList;
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
public class RarityCellGenerator<T extends IRare> extends CellGenerator
|
public class RarityCellGenerator<T extends IRare> extends CellGenerator {
|
||||||
{
|
public RarityCellGenerator(RNG rng) {
|
||||||
public RarityCellGenerator(RNG rng)
|
super(rng);
|
||||||
{
|
}
|
||||||
super(rng);
|
|
||||||
}
|
|
||||||
|
|
||||||
public T get(double x, double z, KList<T> b)
|
public T get(double x, double z, KList<T> b) {
|
||||||
{
|
if (b.size() == 0) {
|
||||||
if(b.size() == 0)
|
return null;
|
||||||
{
|
}
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(b.size() == 1)
|
if (b.size() == 1) {
|
||||||
{
|
return b.get(0);
|
||||||
return b.get(0);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
KList<T> rarityMapped = new KList<>();
|
KList<T> rarityMapped = new KList<>();
|
||||||
boolean o = false;
|
boolean o = false;
|
||||||
int max = 1;
|
int max = 1;
|
||||||
for(T i : b)
|
for (T i : b) {
|
||||||
{
|
if (i.getRarity() > max) {
|
||||||
if(i.getRarity() > max)
|
max = i.getRarity();
|
||||||
{
|
}
|
||||||
max = i.getRarity();
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
max++;
|
max++;
|
||||||
|
|
||||||
for(T i : b)
|
for (T i : b) {
|
||||||
{
|
for (int j = 0; j < max - i.getRarity(); j++) {
|
||||||
for(int j = 0; j < max - i.getRarity(); j++)
|
if (o = !o) {
|
||||||
{
|
rarityMapped.add(i);
|
||||||
if(o = !o)
|
} else {
|
||||||
{
|
rarityMapped.add(0, i);
|
||||||
rarityMapped.add(i);
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
else
|
if (rarityMapped.size() == 1) {
|
||||||
{
|
return rarityMapped.get(0);
|
||||||
rarityMapped.add(0, i);
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(rarityMapped.size() == 1)
|
if (rarityMapped.isEmpty()) {
|
||||||
{
|
throw new RuntimeException("BAD RARITY MAP! RELATED TO: " + b.toString(", or possibly "));
|
||||||
return rarityMapped.get(0);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(rarityMapped.isEmpty())
|
return rarityMapped.get(getIndex(x, z, rarityMapped.size()));
|
||||||
{
|
}
|
||||||
throw new RuntimeException("BAD RARITY MAP! RELATED TO: " + b.toString(", or possibly "));
|
|
||||||
}
|
|
||||||
|
|
||||||
return rarityMapped.get(getIndex(x, z, rarityMapped.size()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,88 +2,75 @@ package com.volmit.iris.generator.noise;
|
|||||||
|
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
public class SimplexNoise implements NoiseGenerator, OctaveNoise
|
public class SimplexNoise implements NoiseGenerator, OctaveNoise {
|
||||||
{
|
private final FastNoiseDouble n;
|
||||||
private final FastNoiseDouble n;
|
private int octaves;
|
||||||
private int octaves;
|
|
||||||
|
|
||||||
public SimplexNoise(long seed)
|
public SimplexNoise(long seed) {
|
||||||
{
|
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
||||||
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
octaves = 1;
|
||||||
octaves = 1;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public double f(double v)
|
public double f(double v) {
|
||||||
{
|
return (v / 2D) + 0.5D;
|
||||||
return (v / 2D) + 0.5D;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x)
|
public double noise(double x) {
|
||||||
{
|
if (octaves <= 1) {
|
||||||
if(octaves <= 1)
|
return f(n.GetSimplex(x, 0d));
|
||||||
{
|
}
|
||||||
return f(n.GetSimplex(x, 0d));
|
|
||||||
}
|
|
||||||
|
|
||||||
double f = 1;
|
double f = 1;
|
||||||
double m = 0;
|
double m = 0;
|
||||||
double v = 0;
|
double v = 0;
|
||||||
|
|
||||||
for(int i = 0; i < octaves; i++)
|
for (int i = 0; i < octaves; i++) {
|
||||||
{
|
v += n.GetSimplex((x * (f == 1 ? f++ : (f *= 2))), 0d) * f;
|
||||||
v += n.GetSimplex((x * (f == 1 ? f++ : (f *= 2))), 0d) * f;
|
m += f;
|
||||||
m += f;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return f(v / m);
|
return f(v / m);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double z)
|
public double noise(double x, double z) {
|
||||||
{
|
if (octaves <= 1) {
|
||||||
if(octaves <= 1)
|
return f(n.GetSimplex(x, z));
|
||||||
{
|
}
|
||||||
return f(n.GetSimplex(x, z));
|
double f = 1;
|
||||||
}
|
double m = 0;
|
||||||
double f = 1;
|
double v = 0;
|
||||||
double m = 0;
|
|
||||||
double v = 0;
|
|
||||||
|
|
||||||
for(int i = 0; i < octaves; i++)
|
for (int i = 0; i < octaves; i++) {
|
||||||
{
|
f = f == 1 ? f + 1 : f * 2;
|
||||||
f = f == 1 ? f + 1 : f * 2;
|
v += n.GetSimplex((x * f), (z * f)) * f;
|
||||||
v += n.GetSimplex((x * f), (z * f)) * f;
|
m += f;
|
||||||
m += f;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return f(v / m);
|
return f(v / m);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double y, double z)
|
public double noise(double x, double y, double z) {
|
||||||
{
|
if (octaves <= 1) {
|
||||||
if(octaves <= 1)
|
return f(n.GetSimplex(x, y, z));
|
||||||
{
|
}
|
||||||
return f(n.GetSimplex(x, y, z));
|
double f = 1;
|
||||||
}
|
double m = 0;
|
||||||
double f = 1;
|
double v = 0;
|
||||||
double m = 0;
|
|
||||||
double v = 0;
|
|
||||||
|
|
||||||
for(int i = 0; i < octaves; i++)
|
for (int i = 0; i < octaves; i++) {
|
||||||
{
|
f = f == 1 ? f + 1 : f * 2;
|
||||||
f = f == 1 ? f + 1 : f * 2;
|
v += n.GetSimplex((x * f), (y * f), (z * f)) * f;
|
||||||
v += n.GetSimplex((x * f), (y * f), (z * f)) * f;
|
m += f;
|
||||||
m += f;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return f(v / m);
|
return f(v / m);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOctaves(int o)
|
public void setOctaves(int o) {
|
||||||
{
|
octaves = o;
|
||||||
octaves = o;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,38 +3,32 @@ package com.volmit.iris.generator.noise;
|
|||||||
import com.volmit.iris.util.M;
|
import com.volmit.iris.util.M;
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
public class VascularNoise implements NoiseGenerator
|
public class VascularNoise implements NoiseGenerator {
|
||||||
{
|
private final FastNoiseDouble n;
|
||||||
private final FastNoiseDouble n;
|
|
||||||
|
|
||||||
public VascularNoise(long seed)
|
public VascularNoise(long seed) {
|
||||||
{
|
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
||||||
this.n = new FastNoiseDouble(new RNG(seed).lmax());
|
n.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
|
||||||
n.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
|
n.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Sub);
|
||||||
n.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Sub);
|
n.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
|
||||||
n.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private double filter(double noise)
|
private double filter(double noise) {
|
||||||
{
|
return M.clip((noise / 2D) + 0.5D, 0D, 1D);
|
||||||
return M.clip((noise / 2D) + 0.5D, 0D, 1D);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x)
|
public double noise(double x) {
|
||||||
{
|
return filter(n.GetCellular(x, 0));
|
||||||
return filter(n.GetCellular(x, 0));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double z)
|
public double noise(double x, double z) {
|
||||||
{
|
return filter(n.GetCellular(x, z));
|
||||||
return filter(n.GetCellular(x, z));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double y, double z)
|
public double noise(double x, double y, double z) {
|
||||||
{
|
return filter(n.GetCellular(x, y, z));
|
||||||
return filter(n.GetCellular(x, y, z));
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,40 +2,33 @@ package com.volmit.iris.generator.noise;
|
|||||||
|
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
public class WhiteNoise implements NoiseGenerator
|
public class WhiteNoise implements NoiseGenerator {
|
||||||
{
|
private final FastNoise n;
|
||||||
private final FastNoise n;
|
|
||||||
|
|
||||||
public WhiteNoise(long seed)
|
public WhiteNoise(long seed) {
|
||||||
{
|
n = new FastNoise(new RNG(seed).imax());
|
||||||
n = new FastNoise(new RNG(seed).imax());
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isStatic()
|
public boolean isStatic() {
|
||||||
{
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private double f(double m)
|
private double f(double m) {
|
||||||
{
|
return (m % 8192) * 1024;
|
||||||
return (m % 8192) * 1024;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x)
|
public double noise(double x) {
|
||||||
{
|
return (n.GetWhiteNoise(f(x), 0d) / 2D) + 0.5D;
|
||||||
return (n.GetWhiteNoise(f(x), 0d) / 2D) + 0.5D;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double z)
|
public double noise(double x, double z) {
|
||||||
{
|
return (n.GetWhiteNoise(f(x), f(z)) / 2D) + 0.5D;
|
||||||
return (n.GetWhiteNoise(f(x), f(z)) / 2D) + 0.5D;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double y, double z)
|
public double noise(double x, double y, double z) {
|
||||||
{
|
return (n.GetWhiteNoise(f(x), f(y), f(z)) / 2D) + 0.5D;
|
||||||
return (n.GetWhiteNoise(f(x), f(y), f(z)) / 2D) + 0.5D;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,12 +4,12 @@ import com.google.gson.Gson;
|
|||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.object.*;
|
import com.volmit.iris.object.*;
|
||||||
import com.volmit.iris.pregen.DirectWorldWriter;
|
import com.volmit.iris.pregen.DirectWorldWriter;
|
||||||
import com.volmit.iris.util.*;
|
|
||||||
import com.volmit.iris.scaffold.data.nbt.io.NBTUtil;
|
import com.volmit.iris.scaffold.data.nbt.io.NBTUtil;
|
||||||
import com.volmit.iris.scaffold.data.nbt.io.NamedTag;
|
import com.volmit.iris.scaffold.data.nbt.io.NamedTag;
|
||||||
import com.volmit.iris.scaffold.data.nbt.tag.CompoundTag;
|
import com.volmit.iris.scaffold.data.nbt.tag.CompoundTag;
|
||||||
import com.volmit.iris.scaffold.data.nbt.tag.IntTag;
|
import com.volmit.iris.scaffold.data.nbt.tag.IntTag;
|
||||||
import com.volmit.iris.scaffold.data.nbt.tag.ListTag;
|
import com.volmit.iris.scaffold.data.nbt.tag.ListTag;
|
||||||
|
import com.volmit.iris.util.*;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
@@ -19,263 +19,225 @@ import java.io.File;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
public class ConversionManager
|
public class ConversionManager {
|
||||||
{
|
private final KList<Converter> converters;
|
||||||
private KList<Converter> converters;
|
private final File folder;
|
||||||
private File folder;
|
|
||||||
|
|
||||||
public ConversionManager()
|
public ConversionManager() {
|
||||||
{
|
folder = Iris.instance.getDataFolder("convert");
|
||||||
folder = Iris.instance.getDataFolder("convert");
|
converters = new KList<>();
|
||||||
converters = new KList<>();
|
|
||||||
|
|
||||||
J.s(() ->
|
J.s(() ->
|
||||||
{
|
{
|
||||||
J.attemptAsync(() ->
|
J.attemptAsync(() ->
|
||||||
{
|
{
|
||||||
if(Bukkit.getPluginManager().isPluginEnabled("WorldEdit"))
|
if (Bukkit.getPluginManager().isPluginEnabled("WorldEdit")) {
|
||||||
{
|
converters.add(new Converter() {
|
||||||
converters.add(new Converter()
|
@Override
|
||||||
{
|
public String getOutExtension() {
|
||||||
@Override
|
return "iob";
|
||||||
public String getOutExtension()
|
}
|
||||||
{
|
|
||||||
return "iob";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getInExtension()
|
public String getInExtension() {
|
||||||
{
|
return "schem";
|
||||||
return "schem";
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void convert(File in, File out)
|
public void convert(File in, File out) {
|
||||||
{
|
SKConversion.convertSchematic(in, out);
|
||||||
SKConversion.convertSchematic(in, out);
|
}
|
||||||
}
|
});
|
||||||
});
|
|
||||||
|
|
||||||
converters.add(new Converter()
|
converters.add(new Converter() {
|
||||||
{
|
@Override
|
||||||
@Override
|
public String getOutExtension() {
|
||||||
public String getOutExtension()
|
return "iob";
|
||||||
{
|
}
|
||||||
return "iob";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getInExtension()
|
public String getInExtension() {
|
||||||
{
|
return "schematic";
|
||||||
return "schematic";
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void convert(File in, File out)
|
public void convert(File in, File out) {
|
||||||
{
|
SKConversion.convertSchematic(in, out);
|
||||||
SKConversion.convertSchematic(in, out);
|
}
|
||||||
}
|
});
|
||||||
});
|
}
|
||||||
}
|
});
|
||||||
});
|
}, 5);
|
||||||
}, 5);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private String toPoolName(String poolReference)
|
private String toPoolName(String poolReference) {
|
||||||
{
|
return poolReference.split("\\Q:\\E")[1];
|
||||||
return poolReference.split("\\Q:\\E")[1];
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void convertStructures(File in, File out, MortarSender s)
|
public void convertStructures(File in, File out, MortarSender s) {
|
||||||
{
|
KMap<String, IrisJigsawPool> pools = new KMap<>();
|
||||||
KMap<String, IrisJigsawPool> pools = new KMap<>();
|
KList<File> roots = new KList<>();
|
||||||
KList<File> roots = new KList<>();
|
AtomicInteger total = new AtomicInteger(0);
|
||||||
AtomicInteger total = new AtomicInteger(0);
|
AtomicInteger at = new AtomicInteger(0);
|
||||||
AtomicInteger at = new AtomicInteger(0);
|
File destPools = new File(out.getAbsolutePath() + "/jigsaw-pools");
|
||||||
File destPools = new File(out.getAbsolutePath() + "/jigsaw-pools");
|
destPools.mkdirs();
|
||||||
destPools.mkdirs();
|
findAllNBT(in, (folder, file) -> {
|
||||||
findAllNBT(in, (folder, file) -> {
|
total.getAndIncrement();
|
||||||
total.getAndIncrement();
|
if (roots.addIfMissing(folder)) {
|
||||||
if(roots.addIfMissing(folder))
|
String b = in.toURI().relativize(folder.toURI()).getPath();
|
||||||
{
|
if (b.startsWith("/")) {
|
||||||
String b = in.toURI().relativize(folder.toURI()).getPath();
|
b = b.substring(1);
|
||||||
if(b.startsWith("/"))
|
}
|
||||||
{
|
|
||||||
b = b.substring(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(b.endsWith("/"))
|
if (b.endsWith("/")) {
|
||||||
{
|
b = b.substring(0, b.length() - 1);
|
||||||
b = b.substring(0, b.length() - 1);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
pools.put(b, new IrisJigsawPool());
|
pools.put(b, new IrisJigsawPool());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
findAllNBT(in, (folder, file) -> {
|
findAllNBT(in, (folder, file) -> {
|
||||||
at.getAndIncrement();
|
at.getAndIncrement();
|
||||||
String b = in.toURI().relativize(folder.toURI()).getPath();
|
String b = in.toURI().relativize(folder.toURI()).getPath();
|
||||||
if(b.startsWith("/"))
|
if (b.startsWith("/")) {
|
||||||
{
|
b = b.substring(1);
|
||||||
b = b.substring(1);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(b.endsWith("/"))
|
if (b.endsWith("/")) {
|
||||||
{
|
b = b.substring(0, b.length() - 1);
|
||||||
b = b.substring(0, b.length() - 1);
|
}
|
||||||
}
|
IrisJigsawPool jpool = pools.get(b);
|
||||||
IrisJigsawPool jpool = pools.get(b);
|
File destObjects = new File(out.getAbsolutePath() + "/objects/" + in.toURI().relativize(folder.toURI()).getPath());
|
||||||
File destObjects = new File(out.getAbsolutePath() + "/objects/" + in.toURI().relativize(folder.toURI()).getPath());
|
File destPieces = new File(out.getAbsolutePath() + "/jigsaw-pieces/" + in.toURI().relativize(folder.toURI()).getPath());
|
||||||
File destPieces = new File(out.getAbsolutePath() + "/jigsaw-pieces/" + in.toURI().relativize(folder.toURI()).getPath());
|
destObjects.mkdirs();
|
||||||
destObjects.mkdirs();
|
destPieces.mkdirs();
|
||||||
destPieces.mkdirs();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
NamedTag tag = NBTUtil.read(file);
|
NamedTag tag = NBTUtil.read(file);
|
||||||
CompoundTag compound = (CompoundTag) tag.getTag();
|
CompoundTag compound = (CompoundTag) tag.getTag();
|
||||||
|
|
||||||
if (compound.containsKey("blocks") && compound.containsKey("palette") && compound.containsKey("size"))
|
if (compound.containsKey("blocks") && compound.containsKey("palette") && compound.containsKey("size")) {
|
||||||
{
|
String id = in.toURI().relativize(folder.toURI()).getPath() + file.getName().split("\\Q.\\E")[0];
|
||||||
String id = in.toURI().relativize(folder.toURI()).getPath() + file.getName().split("\\Q.\\E")[0];
|
ListTag<IntTag> size = (ListTag<IntTag>) compound.getListTag("size");
|
||||||
ListTag<IntTag> size = (ListTag<IntTag>) compound.getListTag("size");
|
int w = size.get(0).asInt();
|
||||||
int w = size.get(0).asInt();
|
int h = size.get(1).asInt();
|
||||||
int h = size.get(1).asInt();
|
int d = size.get(2).asInt();
|
||||||
int d = size.get(2).asInt();
|
KList<BlockData> palette = new KList<>();
|
||||||
KList<BlockData> palette = new KList<>();
|
ListTag<CompoundTag> paletteList = (ListTag<CompoundTag>) compound.getListTag("palette");
|
||||||
ListTag<CompoundTag> paletteList = (ListTag<CompoundTag>) compound.getListTag("palette");
|
for (int i = 0; i < paletteList.size(); i++) {
|
||||||
for(int i = 0; i < paletteList.size(); i++)
|
CompoundTag cp = paletteList.get(i);
|
||||||
{
|
palette.add(DirectWorldWriter.getBlockData(cp));
|
||||||
CompoundTag cp = paletteList.get(i);
|
}
|
||||||
palette.add(DirectWorldWriter.getBlockData(cp));
|
IrisJigsawPiece piece = new IrisJigsawPiece();
|
||||||
}
|
IrisObject object = new IrisObject(w, h, d);
|
||||||
IrisJigsawPiece piece = new IrisJigsawPiece();
|
ListTag<CompoundTag> blockList = (ListTag<CompoundTag>) compound.getListTag("blocks");
|
||||||
IrisObject object = new IrisObject(w,h,d);
|
for (int i = 0; i < blockList.size(); i++) {
|
||||||
ListTag<CompoundTag> blockList = (ListTag<CompoundTag>) compound.getListTag("blocks");
|
CompoundTag cp = blockList.get(i);
|
||||||
for(int i = 0; i < blockList.size(); i++)
|
ListTag<IntTag> pos = (ListTag<IntTag>) cp.getListTag("pos");
|
||||||
{
|
int x = pos.get(0).asInt();
|
||||||
CompoundTag cp = blockList.get(i);
|
int y = pos.get(1).asInt();
|
||||||
ListTag<IntTag> pos = (ListTag<IntTag>) cp.getListTag("pos");
|
int z = pos.get(2).asInt();
|
||||||
int x = pos.get(0).asInt();
|
BlockData bd = palette.get(cp.getInt("state")).clone();
|
||||||
int y = pos.get(1).asInt();
|
|
||||||
int z = pos.get(2).asInt();
|
|
||||||
BlockData bd = palette.get(cp.getInt("state")).clone();
|
|
||||||
|
|
||||||
if(bd.getMaterial().equals(Material.JIGSAW) && cp.containsKey("nbt"))
|
if (bd.getMaterial().equals(Material.JIGSAW) && cp.containsKey("nbt")) {
|
||||||
{
|
piece.setObject(in.toURI().relativize(folder.toURI()).getPath() + file.getName().split("\\Q.\\E")[0]);
|
||||||
piece.setObject(in.toURI().relativize(folder.toURI()).getPath() + file.getName().split("\\Q.\\E")[0]);
|
IrisPosition spos = new IrisPosition(object.getSigned(x, y, z));
|
||||||
IrisPosition spos = new IrisPosition(object.getSigned(x,y,z));
|
CompoundTag nbt = cp.getCompoundTag("nbt");
|
||||||
CompoundTag nbt = cp.getCompoundTag("nbt");
|
CompoundTag finalState = new CompoundTag();
|
||||||
CompoundTag finalState = new CompoundTag();
|
finalState.putString("Name", nbt.getString("final_state"));
|
||||||
finalState.putString("Name", nbt.getString("final_state"));
|
BlockData jd = bd.clone();
|
||||||
BlockData jd = bd.clone();
|
bd = DirectWorldWriter.getBlockData(finalState);
|
||||||
bd = DirectWorldWriter.getBlockData(finalState);
|
String joint = nbt.getString("joint");
|
||||||
String joint = nbt.getString("joint");
|
String pool = nbt.getString("pool");
|
||||||
String pool = nbt.getString("pool");
|
String poolId = toPoolName(pool);
|
||||||
String poolId = toPoolName(pool);
|
String name = nbt.getString("name");
|
||||||
String name = nbt.getString("name");
|
String target = nbt.getString("target");
|
||||||
String target = nbt.getString("target");
|
pools.computeIfAbsent(poolId, (k) -> new IrisJigsawPool());
|
||||||
pools.computeIfAbsent(poolId, (k) -> new IrisJigsawPool());
|
IrisJigsawPieceConnector connector = new IrisJigsawPieceConnector();
|
||||||
IrisJigsawPieceConnector connector = new IrisJigsawPieceConnector();
|
connector.setName(name);
|
||||||
connector.setName(name);
|
connector.setTargetName(target);
|
||||||
connector.setTargetName(target);
|
connector.setRotateConnector(false);
|
||||||
connector.setRotateConnector(false);
|
connector.setPosition(spos);
|
||||||
connector.setPosition(spos);
|
connector.getPools().add(poolId);
|
||||||
connector.getPools().add(poolId);
|
connector.setDirection(IrisDirection.getDirection(((Jigsaw) jd).getOrientation()));
|
||||||
connector.setDirection(IrisDirection.getDirection(((Jigsaw)jd).getOrientation()));
|
|
||||||
|
|
||||||
if(target.equals("minecraft:building_entrance"))
|
if (target.equals("minecraft:building_entrance")) {
|
||||||
{
|
connector.setInnerConnector(true);
|
||||||
connector.setInnerConnector(true);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
piece.getConnectors().add(connector);
|
piece.getConnectors().add(connector);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!bd.getMaterial().equals(Material.STRUCTURE_VOID) && !bd.getMaterial().equals(Material.AIR))
|
if (!bd.getMaterial().equals(Material.STRUCTURE_VOID) && !bd.getMaterial().equals(Material.AIR)) {
|
||||||
{
|
object.setUnsigned(x, y, z, bd);
|
||||||
object.setUnsigned(x,y,z, bd);
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
jpool.getPieces().addIfMissing(id);
|
jpool.getPieces().addIfMissing(id);
|
||||||
object.write(new File(destObjects, file.getName().split("\\Q.\\E")[0] + ".iob"));
|
object.write(new File(destObjects, file.getName().split("\\Q.\\E")[0] + ".iob"));
|
||||||
IO.writeAll(new File(destPieces,file.getName().split("\\Q.\\E")[0] + ".json"), new JSONObject(new Gson().toJson(piece)).toString(4));
|
IO.writeAll(new File(destPieces, file.getName().split("\\Q.\\E")[0] + ".json"), new JSONObject(new Gson().toJson(piece)).toString(4));
|
||||||
Iris.info("[Jigsaw]: (" + Form.pc((double)at.get() / (double)total.get(), 0) + ") Exported Piece: " + id);
|
Iris.info("[Jigsaw]: (" + Form.pc((double) at.get() / (double) total.get(), 0) + ") Exported Piece: " + id);
|
||||||
}
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
for(String i : pools.k())
|
for (String i : pools.k()) {
|
||||||
{
|
try {
|
||||||
try {
|
IO.writeAll(new File(destPools, i + ".json"), new JSONObject(new Gson().toJson(pools.get(i))).toString(4));
|
||||||
IO.writeAll(new File(destPools, i + ".json"), new JSONObject(new Gson().toJson(pools.get(i))).toString(4));
|
} catch (IOException e) {
|
||||||
} catch (IOException e) {
|
e.printStackTrace();
|
||||||
e.printStackTrace();
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Iris.info("Done! Exported " + Form.f((total.get() * 2) + pools.size()) + " Files!");
|
Iris.info("Done! Exported " + Form.f((total.get() * 2) + pools.size()) + " Files!");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void findAllNBT(File path, Consumer2<File, File> inFile)
|
public void findAllNBT(File path, Consumer2<File, File> inFile) {
|
||||||
{
|
if (path == null) {
|
||||||
if(path == null)
|
return;
|
||||||
{
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(path.isFile() && path.getName().endsWith(".nbt"))
|
if (path.isFile() && path.getName().endsWith(".nbt")) {
|
||||||
{
|
inFile.accept(path.getParentFile(), path);
|
||||||
inFile.accept(path.getParentFile(), path);
|
return;
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for(File i : path.listFiles())
|
for (File i : path.listFiles()) {
|
||||||
{
|
if (i.isDirectory()) {
|
||||||
if(i.isDirectory())
|
findAllNBT(i, inFile);
|
||||||
{
|
} else if (i.isFile() && i.getName().endsWith(".nbt")) {
|
||||||
findAllNBT(i, inFile);
|
inFile.accept(path, i);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
else if(i.isFile() && i.getName().endsWith(".nbt"))
|
public void check(MortarSender s) {
|
||||||
{
|
int m = 0;
|
||||||
inFile.accept(path, i);
|
Iris.instance.getDataFolder("convert");
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void check(MortarSender s)
|
for (File i : folder.listFiles()) {
|
||||||
{
|
for (Converter j : converters) {
|
||||||
int m = 0;
|
if (i.getName().endsWith("." + j.getInExtension())) {
|
||||||
Iris.instance.getDataFolder("convert");
|
File out = new File(folder, i.getName().replaceAll("\\Q." + j.getInExtension() + "\\E", "." + j.getOutExtension()));
|
||||||
|
m++;
|
||||||
|
j.convert(i, out);
|
||||||
|
s.sendMessage("Converted " + i.getName() + " -> " + out.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for(File i : folder.listFiles())
|
if (i.isDirectory() && i.getName().equals("structures")) {
|
||||||
{
|
File f = new File(folder, "jigsaw");
|
||||||
for(Converter j : converters)
|
|
||||||
{
|
|
||||||
if(i.getName().endsWith("." + j.getInExtension()))
|
|
||||||
{
|
|
||||||
File out = new File(folder, i.getName().replaceAll("\\Q." + j.getInExtension() + "\\E", "." + j.getOutExtension()));
|
|
||||||
m++;
|
|
||||||
j.convert(i, out);
|
|
||||||
s.sendMessage("Converted " + i.getName() + " -> " + out.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(i.isDirectory() && i.getName().equals("structures")) {
|
if (!f.exists()) {
|
||||||
File f = new File(folder, "jigsaw");
|
s.sendMessage("Converting NBT Structures into Iris Jigsaw Structures...");
|
||||||
|
f.mkdirs();
|
||||||
|
J.a(() -> convertStructures(i, f, s));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!f.exists())
|
s.sendMessage("Converted " + m + " File" + (m == 1 ? "" : "s"));
|
||||||
{
|
}
|
||||||
s.sendMessage("Converting NBT Structures into Iris Jigsaw Structures...");
|
|
||||||
f.mkdirs();
|
|
||||||
J.a(() -> convertStructures(i, f, s));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
s.sendMessage("Converted " + m + " File" + (m == 1 ? "" : "s"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
package com.volmit.iris.manager;
|
package com.volmit.iris.manager;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.World;
|
|
||||||
import org.bukkit.block.Biome;
|
|
||||||
import org.bukkit.block.data.BlockData;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.world.WorldUnloadEvent;
|
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.IrisSettings;
|
import com.volmit.iris.IrisSettings;
|
||||||
import com.volmit.iris.manager.edit.BlockEditor;
|
import com.volmit.iris.manager.edit.BlockEditor;
|
||||||
@@ -15,107 +7,88 @@ import com.volmit.iris.manager.edit.BukkitBlockEditor;
|
|||||||
import com.volmit.iris.manager.edit.WEBlockEditor;
|
import com.volmit.iris.manager.edit.WEBlockEditor;
|
||||||
import com.volmit.iris.util.KMap;
|
import com.volmit.iris.util.KMap;
|
||||||
import com.volmit.iris.util.M;
|
import com.volmit.iris.util.M;
|
||||||
|
|
||||||
import io.papermc.lib.PaperLib;
|
import io.papermc.lib.PaperLib;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
|
import org.bukkit.block.data.BlockData;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.world.WorldUnloadEvent;
|
||||||
|
|
||||||
public class EditManager implements Listener
|
public class EditManager implements Listener {
|
||||||
{
|
private final KMap<World, BlockEditor> editors;
|
||||||
private KMap<World, BlockEditor> editors;
|
|
||||||
|
|
||||||
public EditManager()
|
public EditManager() {
|
||||||
{
|
this.editors = new KMap<>();
|
||||||
this.editors = new KMap<>();
|
Iris.instance.registerListener(this);
|
||||||
Iris.instance.registerListener(this);
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, this::update, 0, 0);
|
||||||
Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, this::update, 0, 0);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public BlockData get(World world, int x, int y, int z)
|
public BlockData get(World world, int x, int y, int z) {
|
||||||
{
|
return open(world).get(x, y, z);
|
||||||
return open(world).get(x, y, z);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void set(World world, int x, int y, int z, BlockData d)
|
public void set(World world, int x, int y, int z, BlockData d) {
|
||||||
{
|
open(world).set(x, y, z, d);
|
||||||
open(world).set(x, y, z, d);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void setBiome(World world, int x, int y, int z, Biome d)
|
public void setBiome(World world, int x, int y, int z, Biome d) {
|
||||||
{
|
open(world).setBiome(x, y, z, d);
|
||||||
open(world).setBiome(x, y, z, d);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void setBiome(World world, int x, int z, Biome d)
|
public void setBiome(World world, int x, int z, Biome d) {
|
||||||
{
|
open(world).setBiome(x, z, d);
|
||||||
open(world).setBiome(x, z, d);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public Biome getBiome(World world, int x, int y, int z)
|
public Biome getBiome(World world, int x, int y, int z) {
|
||||||
{
|
return open(world).getBiome(x, y, z);
|
||||||
return open(world).getBiome(x, y, z);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public Biome getBiome(World world, int x, int z)
|
public Biome getBiome(World world, int x, int z) {
|
||||||
{
|
return open(world).getBiome(x, z);
|
||||||
return open(world).getBiome(x, z);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void on(WorldUnloadEvent e)
|
public void on(WorldUnloadEvent e) {
|
||||||
{
|
if (editors.containsKey(e.getWorld())) {
|
||||||
if(editors.containsKey(e.getWorld()))
|
editors.remove(e.getWorld()).close();
|
||||||
{
|
}
|
||||||
editors.remove(e.getWorld()).close();
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void update()
|
public void update() {
|
||||||
{
|
for (World i : editors.k()) {
|
||||||
for(World i : editors.k())
|
if (M.ms() - editors.get(i).last() > 1000) {
|
||||||
{
|
editors.remove(i).close();
|
||||||
if(M.ms() - editors.get(i).last() > 1000)
|
}
|
||||||
{
|
}
|
||||||
editors.remove(i).close();
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void flushNow()
|
public void flushNow() {
|
||||||
{
|
for (World i : editors.k()) {
|
||||||
for(World i : editors.k())
|
editors.remove(i).close();
|
||||||
{
|
}
|
||||||
editors.remove(i).close();
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlockEditor open(World world)
|
public BlockEditor open(World world) {
|
||||||
{
|
if (editors.containsKey(world)) {
|
||||||
if(editors.containsKey(world))
|
return editors.get(world);
|
||||||
{
|
}
|
||||||
return editors.get(world);
|
|
||||||
}
|
|
||||||
|
|
||||||
BlockEditor e = null;
|
BlockEditor e = null;
|
||||||
|
|
||||||
if(Bukkit.getPluginManager().isPluginEnabled("WorldEdit") && !PaperLib.isPaper() && !IrisSettings.get().getGeneral().isIgnoreWorldEdit())
|
if (Bukkit.getPluginManager().isPluginEnabled("WorldEdit") && !PaperLib.isPaper() && !IrisSettings.get().getGeneral().isIgnoreWorldEdit()) {
|
||||||
{
|
try {
|
||||||
try
|
e = new WEBlockEditor(world);
|
||||||
{
|
} catch (Throwable ex) {
|
||||||
e = new WEBlockEditor(world);
|
e = new BukkitBlockEditor(world);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
e = new BukkitBlockEditor(world);
|
||||||
|
}
|
||||||
|
|
||||||
catch(Throwable ex)
|
editors.put(world, e);
|
||||||
{
|
|
||||||
e = new BukkitBlockEditor(world);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
return e;
|
||||||
{
|
}
|
||||||
e = new BukkitBlockEditor(world);
|
|
||||||
}
|
|
||||||
|
|
||||||
editors.put(world, e);
|
|
||||||
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,131 +13,113 @@ import org.bukkit.event.player.PlayerChangedWorldEvent;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class IrisBoardManager implements BoardProvider, Listener
|
public class IrisBoardManager implements BoardProvider, Listener {
|
||||||
{
|
@DontObfuscate
|
||||||
@DontObfuscate
|
private final BoardManager manager;
|
||||||
private BoardManager manager;
|
private String mem = "...";
|
||||||
private String mem = "...";
|
public RollingSequence hits = new RollingSequence(20);
|
||||||
public RollingSequence hits = new RollingSequence(20);
|
public RollingSequence tp = new RollingSequence(100);
|
||||||
public RollingSequence tp = new RollingSequence(100);
|
private final ChronoLatch cl = new ChronoLatch(1000);
|
||||||
private ChronoLatch cl = new ChronoLatch(1000);
|
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public IrisBoardManager()
|
public IrisBoardManager() {
|
||||||
{
|
Iris.instance.registerListener(this);
|
||||||
Iris.instance.registerListener(this);
|
//@builder
|
||||||
//@builder
|
manager = new BoardManager(Iris.instance, BoardSettings.builder()
|
||||||
manager = new BoardManager(Iris.instance, BoardSettings.builder()
|
.boardProvider(this)
|
||||||
.boardProvider(this)
|
.scoreDirection(ScoreDirection.DOWN)
|
||||||
.scoreDirection(ScoreDirection.DOWN)
|
.build());
|
||||||
.build());
|
//@done
|
||||||
//@done
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void on(PlayerChangedWorldEvent e)
|
public void on(PlayerChangedWorldEvent e) {
|
||||||
{
|
J.s(() -> updatePlayer(e.getPlayer()));
|
||||||
J.s(() -> updatePlayer(e.getPlayer()));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
private boolean isIrisWorld(World w)
|
private boolean isIrisWorld(World w) {
|
||||||
{
|
return IrisWorlds.isIrisWorld(w) && IrisWorlds.access(w).isStudio();
|
||||||
return IrisWorlds.isIrisWorld(w) && IrisWorlds.access(w).isStudio();
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void updatePlayer(Player p)
|
public void updatePlayer(Player p) {
|
||||||
{
|
if (isIrisWorld(p.getWorld())) {
|
||||||
if(isIrisWorld(p.getWorld()))
|
manager.remove(p);
|
||||||
{
|
manager.setup(p);
|
||||||
manager.remove(p);
|
} else {
|
||||||
manager.setup(p);
|
manager.remove(p);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
else
|
@Override
|
||||||
{
|
public String getTitle(Player player) {
|
||||||
manager.remove(p);
|
return C.GREEN + "Iris";
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@DontObfuscate
|
||||||
public String getTitle(Player player)
|
@Override
|
||||||
{
|
public List<String> getLines(Player player) {
|
||||||
return C.GREEN + "Iris";
|
KList<String> v = new KList<>();
|
||||||
}
|
|
||||||
|
|
||||||
@DontObfuscate
|
if (!isIrisWorld(player.getWorld())) {
|
||||||
@Override
|
return v;
|
||||||
public List<String> getLines(Player player)
|
}
|
||||||
{
|
|
||||||
KList<String> v = new KList<>();
|
|
||||||
|
|
||||||
if(!isIrisWorld(player.getWorld()))
|
IrisAccess g = IrisWorlds.access(player.getWorld());
|
||||||
{
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
IrisAccess g = IrisWorlds.access(player.getWorld());
|
if (cl.flip()) {
|
||||||
|
// TODO MEMORY
|
||||||
|
mem = Form.memSize(0, 2);
|
||||||
|
}
|
||||||
|
|
||||||
if(cl.flip())
|
int x = player.getLocation().getBlockX();
|
||||||
{
|
int y = player.getLocation().getBlockY();
|
||||||
// TODO MEMORY
|
int z = player.getLocation().getBlockZ();
|
||||||
mem = Form.memSize(0, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
int x = player.getLocation().getBlockX();
|
Engine engine = g.getCompound().getEngineForHeight(y);
|
||||||
int y = player.getLocation().getBlockY();
|
|
||||||
int z = player.getLocation().getBlockZ();
|
|
||||||
|
|
||||||
Engine engine = g.getCompound().getEngineForHeight(y);
|
int parallaxChunks = 0;
|
||||||
|
int parallaxRegions = 0;
|
||||||
|
long memoryGuess = 0;
|
||||||
|
int loadedObjects = 0;
|
||||||
|
|
||||||
int parallaxChunks=0;
|
for (int i = 0; i < g.getCompound().getSize(); i++) {
|
||||||
int parallaxRegions=0;
|
parallaxRegions += g.getCompound().getEngine(i).getParallax().getRegionCount();
|
||||||
long memoryGuess=0;
|
parallaxChunks += g.getCompound().getEngine(i).getParallax().getChunkCount();
|
||||||
int loadedObjects=0;
|
loadedObjects += g.getCompound().getData().getObjectLoader().getSize();
|
||||||
|
memoryGuess += g.getCompound().getData().getObjectLoader().getTotalStorage() * 225;
|
||||||
|
memoryGuess += parallaxChunks * 3500;
|
||||||
|
memoryGuess += parallaxRegions * 1700000;
|
||||||
|
}
|
||||||
|
|
||||||
for(int i = 0; i < g.getCompound().getSize(); i++)
|
tp.put(0); // TODO: CHUNK SPEED
|
||||||
{
|
|
||||||
parallaxRegions += g.getCompound().getEngine(i).getParallax().getRegionCount();
|
|
||||||
parallaxChunks += g.getCompound().getEngine(i).getParallax().getChunkCount();
|
|
||||||
loadedObjects+= g.getCompound().getData().getObjectLoader().getSize();
|
|
||||||
memoryGuess += g.getCompound().getData().getObjectLoader().getTotalStorage() * 225;
|
|
||||||
memoryGuess+= parallaxChunks * 3500;
|
|
||||||
memoryGuess += parallaxRegions * 1700000;
|
|
||||||
}
|
|
||||||
|
|
||||||
tp.put(0); // TODO: CHUNK SPEED
|
|
||||||
|
|
||||||
|
|
||||||
|
v.add("&7&m------------------");
|
||||||
|
v.add(C.GREEN + "Speed" + C.GRAY + ": " + Form.f(g.getGeneratedPerSecond(), 0) + "/s " + Form.duration(1000D / g.getGeneratedPerSecond(), 0));
|
||||||
|
v.add(C.GREEN + "Memory Use" + C.GRAY + ": ~" + Form.memSize(memoryGuess, 0));
|
||||||
|
|
||||||
v.add("&7&m------------------");
|
if (engine != null) {
|
||||||
v.add(C.GREEN + "Speed" + C.GRAY + ": " + Form.f(g.getGeneratedPerSecond(), 0) + "/s " + Form.duration(1000D / g.getGeneratedPerSecond(), 0));
|
v.add("&7&m------------------");
|
||||||
v.add(C.GREEN + "Memory Use" + C.GRAY + ": ~" + Form.memSize(memoryGuess, 0));
|
v.add(C.AQUA + "Engine" + C.GRAY + ": " + engine.getName() + " " + engine.getMinHeight() + "-" + engine.getMaxHeight());
|
||||||
|
v.add(C.AQUA + "Region" + C.GRAY + ": " + engine.getRegion(x, z).getName());
|
||||||
|
v.add(C.AQUA + "Biome" + C.GRAY + ": " + engine.getBiome(x, y, z).getName());
|
||||||
|
v.add(C.AQUA + "Height" + C.GRAY + ": " + Math.round(engine.getHeight(x, z)));
|
||||||
|
v.add(C.AQUA + "Slope" + C.GRAY + ": " + Form.f(engine.getFramework().getComplex().getSlopeStream().get(x, z), 2));
|
||||||
|
}
|
||||||
|
|
||||||
if(engine != null)
|
if (Iris.jobCount() > 0) {
|
||||||
{
|
v.add("&7&m------------------");
|
||||||
v.add("&7&m------------------");
|
v.add(C.LIGHT_PURPLE + "Tasks" + C.GRAY + ": " + Iris.jobCount());
|
||||||
v.add(C.AQUA + "Engine" + C.GRAY + ": " + engine.getName() + " " + engine.getMinHeight() + "-" + engine.getMaxHeight());
|
}
|
||||||
v.add(C.AQUA + "Region" + C.GRAY + ": " + engine.getRegion(x, z).getName());
|
|
||||||
v.add(C.AQUA + "Biome" + C.GRAY + ": " + engine.getBiome(x, y, z).getName());
|
|
||||||
v.add(C.AQUA + "Height" + C.GRAY + ": " + Math.round(engine.getHeight(x, z)));
|
|
||||||
v.add(C.AQUA + "Slope" + C.GRAY + ": " + Form.f(engine.getFramework().getComplex().getSlopeStream().get(x, z), 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(Iris.jobCount() > 0)
|
v.add("&7&m------------------");
|
||||||
{
|
|
||||||
v.add("&7&m------------------");
|
|
||||||
v.add(C.LIGHT_PURPLE + "Tasks" + C.GRAY + ": " + Iris.jobCount());
|
|
||||||
}
|
|
||||||
|
|
||||||
v.add("&7&m------------------");
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
return v;
|
@DontObfuscate
|
||||||
}
|
public void disable() {
|
||||||
|
manager.onDisable();
|
||||||
@DontObfuscate
|
}
|
||||||
public void disable()
|
|
||||||
{
|
|
||||||
manager.onDisable();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,201 +12,172 @@ import java.util.Objects;
|
|||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class IrisDataManager
|
public class IrisDataManager {
|
||||||
{
|
private ResourceLoader<IrisBiome> biomeLoader;
|
||||||
private ResourceLoader<IrisBiome> biomeLoader;
|
private ResourceLoader<IrisLootTable> lootLoader;
|
||||||
private ResourceLoader<IrisLootTable> lootLoader;
|
private ResourceLoader<IrisRegion> regionLoader;
|
||||||
private ResourceLoader<IrisRegion> regionLoader;
|
private ResourceLoader<IrisDimension> dimensionLoader;
|
||||||
private ResourceLoader<IrisDimension> dimensionLoader;
|
private ResourceLoader<IrisGenerator> generatorLoader;
|
||||||
private ResourceLoader<IrisGenerator> generatorLoader;
|
private ResourceLoader<IrisJigsawPiece> jigsawPieceLoader;
|
||||||
private ResourceLoader<IrisJigsawPiece> jigsawPieceLoader;
|
private ResourceLoader<IrisJigsawPool> jigsawPoolLoader;
|
||||||
private ResourceLoader<IrisJigsawPool> jigsawPoolLoader;
|
private ResourceLoader<IrisJigsawStructure> jigsawStructureLoader;
|
||||||
private ResourceLoader<IrisJigsawStructure> jigsawStructureLoader;
|
private ResourceLoader<IrisEntity> entityLoader;
|
||||||
private ResourceLoader<IrisEntity> entityLoader;
|
private ResourceLoader<IrisBlockData> blockLoader;
|
||||||
private ResourceLoader<IrisBlockData> blockLoader;
|
private ObjectResourceLoader objectLoader;
|
||||||
private ObjectResourceLoader objectLoader;
|
private boolean closed;
|
||||||
private boolean closed;
|
private final File dataFolder;
|
||||||
private final File dataFolder;
|
private final int id;
|
||||||
private final int id;
|
|
||||||
|
|
||||||
public IrisDataManager(File dataFolder)
|
public IrisDataManager(File dataFolder) {
|
||||||
{
|
this(dataFolder, false);
|
||||||
this(dataFolder, false);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public IrisDataManager(File dataFolder, boolean oneshot)
|
public IrisDataManager(File dataFolder, boolean oneshot) {
|
||||||
{
|
this.dataFolder = dataFolder;
|
||||||
this.dataFolder = dataFolder;
|
this.id = RNG.r.imax();
|
||||||
this.id = RNG.r.imax();
|
closed = false;
|
||||||
closed = false;
|
hotloaded();
|
||||||
hotloaded();
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void close()
|
public void close() {
|
||||||
{
|
closed = true;
|
||||||
closed = true;
|
dump();
|
||||||
dump();
|
this.lootLoader = null;
|
||||||
this.lootLoader = null;
|
this.entityLoader = null;
|
||||||
this.entityLoader = null;
|
this.regionLoader = null;
|
||||||
this.regionLoader = null;
|
this.biomeLoader = null;
|
||||||
this.biomeLoader = null;
|
this.dimensionLoader = null;
|
||||||
this.dimensionLoader = null;
|
this.jigsawPoolLoader = null;
|
||||||
this.jigsawPoolLoader = null;
|
this.jigsawPieceLoader = null;
|
||||||
this.jigsawPieceLoader = null;
|
this.generatorLoader = null;
|
||||||
this.generatorLoader = null;
|
this.jigsawStructureLoader = null;
|
||||||
this.jigsawStructureLoader = null;
|
this.blockLoader = null;
|
||||||
this.blockLoader = null;
|
this.objectLoader = null;
|
||||||
this.objectLoader = null;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private static void printData(ResourceLoader<?> rl)
|
private static void printData(ResourceLoader<?> rl) {
|
||||||
{
|
Iris.warn(" " + rl.getResourceTypeName() + " @ /" + rl.getFolderName() + ": Cache=" + rl.getLoadCache().size() + " Folders=" + rl.getFolders().size());
|
||||||
Iris.warn(" " + rl.getResourceTypeName() + " @ /" + rl.getFolderName() + ": Cache=" + rl.getLoadCache().size() + " Folders=" + rl.getFolders().size());
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public IrisDataManager copy() {
|
public IrisDataManager copy() {
|
||||||
return new IrisDataManager(dataFolder);
|
return new IrisDataManager(dataFolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void hotloaded()
|
public void hotloaded() {
|
||||||
{
|
if (closed) {
|
||||||
if(closed)
|
return;
|
||||||
{
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
File packs = dataFolder;
|
File packs = dataFolder;
|
||||||
packs.mkdirs();
|
packs.mkdirs();
|
||||||
this.lootLoader = new ResourceLoader<>(packs, this, "loot", "Loot", IrisLootTable.class);
|
this.lootLoader = new ResourceLoader<>(packs, this, "loot", "Loot", IrisLootTable.class);
|
||||||
this.entityLoader = new ResourceLoader<>(packs,this, "entities", "Entity", IrisEntity.class);
|
this.entityLoader = new ResourceLoader<>(packs, this, "entities", "Entity", IrisEntity.class);
|
||||||
this.regionLoader = new ResourceLoader<>(packs, this, "regions", "Region", IrisRegion.class);
|
this.regionLoader = new ResourceLoader<>(packs, this, "regions", "Region", IrisRegion.class);
|
||||||
this.biomeLoader = new ResourceLoader<>(packs, this, "biomes", "Biome", IrisBiome.class);
|
this.biomeLoader = new ResourceLoader<>(packs, this, "biomes", "Biome", IrisBiome.class);
|
||||||
this.dimensionLoader = new ResourceLoader<>(packs, this, "dimensions", "Dimension", IrisDimension.class);
|
this.dimensionLoader = new ResourceLoader<>(packs, this, "dimensions", "Dimension", IrisDimension.class);
|
||||||
this.jigsawPoolLoader = new ResourceLoader<>(packs, this, "jigsaw-pools", "Jigsaw Pool", IrisJigsawPool.class);
|
this.jigsawPoolLoader = new ResourceLoader<>(packs, this, "jigsaw-pools", "Jigsaw Pool", IrisJigsawPool.class);
|
||||||
this.jigsawStructureLoader = new ResourceLoader<>(packs, this, "jigsaw-structures", "Jigsaw Structure", IrisJigsawStructure.class);
|
this.jigsawStructureLoader = new ResourceLoader<>(packs, this, "jigsaw-structures", "Jigsaw Structure", IrisJigsawStructure.class);
|
||||||
this.jigsawPieceLoader = new ResourceLoader<>(packs, this, "jigsaw-pieces", "Jigsaw Piece", IrisJigsawPiece.class);
|
this.jigsawPieceLoader = new ResourceLoader<>(packs, this, "jigsaw-pieces", "Jigsaw Piece", IrisJigsawPiece.class);
|
||||||
this.generatorLoader = new ResourceLoader<>(packs, this, "generators", "Generator", IrisGenerator.class);
|
this.generatorLoader = new ResourceLoader<>(packs, this, "generators", "Generator", IrisGenerator.class);
|
||||||
this.blockLoader = new ResourceLoader<>(packs,this, "blocks", "Block", IrisBlockData.class);
|
this.blockLoader = new ResourceLoader<>(packs, this, "blocks", "Block", IrisBlockData.class);
|
||||||
this.objectLoader = new ObjectResourceLoader(packs, this, "objects", "Object");
|
this.objectLoader = new ObjectResourceLoader(packs, this, "objects", "Object");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dump()
|
public void dump() {
|
||||||
{
|
if (closed) {
|
||||||
if(closed)
|
return;
|
||||||
{
|
}
|
||||||
return;
|
biomeLoader.clearCache();
|
||||||
}
|
blockLoader.clearCache();
|
||||||
biomeLoader.clearCache();
|
lootLoader.clearCache();
|
||||||
blockLoader.clearCache();
|
objectLoader.clearCache();
|
||||||
lootLoader.clearCache();
|
jigsawPieceLoader.clearCache();
|
||||||
objectLoader.clearCache();
|
jigsawPoolLoader.clearCache();
|
||||||
jigsawPieceLoader.clearCache();
|
jigsawStructureLoader.clearCache();
|
||||||
jigsawPoolLoader.clearCache();
|
regionLoader.clearCache();
|
||||||
jigsawStructureLoader.clearCache();
|
dimensionLoader.clearCache();
|
||||||
regionLoader.clearCache();
|
entityLoader.clearCache();
|
||||||
dimensionLoader.clearCache();
|
generatorLoader.clearCache();
|
||||||
entityLoader.clearCache();
|
}
|
||||||
generatorLoader.clearCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clearLists()
|
public void clearLists() {
|
||||||
{
|
if (closed) {
|
||||||
if(closed)
|
return;
|
||||||
{
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
lootLoader.clearList();
|
lootLoader.clearList();
|
||||||
blockLoader.clearList();
|
blockLoader.clearList();
|
||||||
entityLoader.clearList();
|
entityLoader.clearList();
|
||||||
biomeLoader.clearList();
|
biomeLoader.clearList();
|
||||||
regionLoader.clearList();
|
regionLoader.clearList();
|
||||||
dimensionLoader.clearList();
|
dimensionLoader.clearList();
|
||||||
generatorLoader.clearList();
|
generatorLoader.clearList();
|
||||||
jigsawStructureLoader.clearList();
|
jigsawStructureLoader.clearList();
|
||||||
jigsawPoolLoader.clearList();
|
jigsawPoolLoader.clearList();
|
||||||
jigsawPieceLoader.clearList();
|
jigsawPieceLoader.clearList();
|
||||||
objectLoader.clearList();
|
objectLoader.clearList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IrisObject loadAnyObject(String key)
|
public static IrisObject loadAnyObject(String key) {
|
||||||
{
|
return loadAny(key, (dm) -> dm.getObjectLoader().load(key, false));
|
||||||
return loadAny(key, (dm) -> dm.getObjectLoader().load(key, false));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static IrisBiome loadAnyBiome(String key)
|
public static IrisBiome loadAnyBiome(String key) {
|
||||||
{
|
return loadAny(key, (dm) -> dm.getBiomeLoader().load(key, false));
|
||||||
return loadAny(key, (dm) -> dm.getBiomeLoader().load(key, false));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static IrisJigsawPiece loadAnyJigsawPiece(String key)
|
public static IrisJigsawPiece loadAnyJigsawPiece(String key) {
|
||||||
{
|
return loadAny(key, (dm) -> dm.getJigsawPieceLoader().load(key, false));
|
||||||
return loadAny(key, (dm) -> dm.getJigsawPieceLoader().load(key, false));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static IrisJigsawPool loadAnyJigsawPool(String key)
|
public static IrisJigsawPool loadAnyJigsawPool(String key) {
|
||||||
{
|
return loadAny(key, (dm) -> dm.getJigsawPoolLoader().load(key, false));
|
||||||
return loadAny(key, (dm) -> dm.getJigsawPoolLoader().load(key, false));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static IrisEntity loadAnyEntity(String key)
|
public static IrisEntity loadAnyEntity(String key) {
|
||||||
{
|
return loadAny(key, (dm) -> dm.getEntityLoader().load(key, false));
|
||||||
return loadAny(key, (dm) -> dm.getEntityLoader().load(key, false));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static IrisLootTable loadAnyLootTable(String key)
|
public static IrisLootTable loadAnyLootTable(String key) {
|
||||||
{
|
return loadAny(key, (dm) -> dm.getLootLoader().load(key, false));
|
||||||
return loadAny(key, (dm) -> dm.getLootLoader().load(key, false));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static IrisBlockData loadAnyBlock(String key)
|
public static IrisBlockData loadAnyBlock(String key) {
|
||||||
{
|
return loadAny(key, (dm) -> dm.getBlockLoader().load(key, false));
|
||||||
return loadAny(key, (dm) -> dm.getBlockLoader().load(key, false));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static IrisRegion loadAnyRegion(String key)
|
public static IrisRegion loadAnyRegion(String key) {
|
||||||
{
|
return loadAny(key, (dm) -> dm.getRegionLoader().load(key, false));
|
||||||
return loadAny(key, (dm) -> dm.getRegionLoader().load(key, false));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static IrisDimension loadAnyDimension(String key)
|
public static IrisDimension loadAnyDimension(String key) {
|
||||||
{
|
return loadAny(key, (dm) -> dm.getDimensionLoader().load(key, false));
|
||||||
return loadAny(key, (dm) -> dm.getDimensionLoader().load(key, false));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static IrisJigsawStructure loadAnyJigsawStructure(String key)
|
public static IrisJigsawStructure loadAnyJigsawStructure(String key) {
|
||||||
{
|
return loadAny(key, (dm) -> dm.getJigsawStructureLoader().load(key, false));
|
||||||
return loadAny(key, (dm) -> dm.getJigsawStructureLoader().load(key, false));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static IrisGenerator loadAnyGenerator(String key)
|
public static IrisGenerator loadAnyGenerator(String key) {
|
||||||
{
|
return loadAny(key, (dm) -> dm.getGeneratorLoader().load(key, false));
|
||||||
return loadAny(key, (dm) -> dm.getGeneratorLoader().load(key, false));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static <T extends IrisRegistrant> T loadAny(String key, Function<IrisDataManager, T> v) {
|
public static <T extends IrisRegistrant> T loadAny(String key, Function<IrisDataManager, T> v) {
|
||||||
try
|
try {
|
||||||
{
|
for (File i : Objects.requireNonNull(Iris.instance.getDataFolder("packs").listFiles())) {
|
||||||
for(File i : Objects.requireNonNull(Iris.instance.getDataFolder("packs").listFiles()))
|
if (i.isDirectory()) {
|
||||||
{
|
IrisDataManager dm = new IrisDataManager(i, true);
|
||||||
if(i.isDirectory())
|
T t = v.apply(dm);
|
||||||
{
|
|
||||||
IrisDataManager dm = new IrisDataManager(i, true);
|
|
||||||
T t = v.apply(dm);
|
|
||||||
|
|
||||||
if(t != null)
|
if (t != null) {
|
||||||
{
|
return t;
|
||||||
return t;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} catch (Throwable e) {
|
||||||
}
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
catch(Throwable e)
|
return null;
|
||||||
{
|
}
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -8,526 +8,413 @@ import com.volmit.iris.object.IrisDimension;
|
|||||||
import com.volmit.iris.scaffold.cache.AtomicCache;
|
import com.volmit.iris.scaffold.cache.AtomicCache;
|
||||||
import com.volmit.iris.util.*;
|
import com.volmit.iris.util.*;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
|
||||||
import org.zeroturnaround.zip.ZipUtil;
|
import org.zeroturnaround.zip.ZipUtil;
|
||||||
import org.zeroturnaround.zip.commons.FileUtils;
|
import org.zeroturnaround.zip.commons.FileUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileFilter;
|
import java.io.FileFilter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class ProjectManager
|
public class ProjectManager {
|
||||||
{
|
public static final String LISTING = "https://raw.githubusercontent.com/IrisDimensions/_listing/main/listing-v2.json";
|
||||||
public static final String LISTING = "https://raw.githubusercontent.com/IrisDimensions/_listing/main/listing-v2.json";
|
public static final String WORKSPACE_NAME = "packs";
|
||||||
public static final String WORKSPACE_NAME = "packs";
|
private KMap<String, String> cacheListing = null;
|
||||||
private KMap<String, String> cacheListing = null;
|
private IrisProject activeProject;
|
||||||
private IrisProject activeProject;
|
private static final AtomicCache<Integer> counter = new AtomicCache<>();
|
||||||
private static final AtomicCache<Integer> counter = new AtomicCache<>();
|
|
||||||
|
public ProjectManager() {
|
||||||
public ProjectManager()
|
if (IrisSettings.get().isStudio()) {
|
||||||
{
|
J.a(() ->
|
||||||
if(IrisSettings.get().isStudio())
|
{
|
||||||
{
|
File ignore = getWorkspaceFile(".gitignore");
|
||||||
J.a(() ->
|
|
||||||
{
|
if (!ignore.exists()) {
|
||||||
File ignore = getWorkspaceFile(".gitignore");
|
File m = Iris.getCached("Pack Ignore (.gitignore)", "https://raw.githubusercontent.com/VolmitSoftware/Iris/master/packignore.ignore");
|
||||||
|
if (m != null) {
|
||||||
if(!ignore.exists())
|
try {
|
||||||
{
|
IO.copyFile(m, ignore);
|
||||||
File m = Iris.getCached("Pack Ignore (.gitignore)", "https://raw.githubusercontent.com/VolmitSoftware/Iris/master/packignore.ignore");
|
} catch (IOException e) {
|
||||||
if(m != null)
|
|
||||||
{
|
}
|
||||||
try
|
}
|
||||||
{
|
}
|
||||||
IO.copyFile(m, ignore);
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch(IOException e)
|
|
||||||
{
|
public static int countUniqueDimensions() {
|
||||||
|
int vv = counter.aquire(() -> {
|
||||||
}
|
int v = 0;
|
||||||
}
|
|
||||||
}
|
try {
|
||||||
});
|
for (File i : Iris.instance.getDataFolder(WORKSPACE_NAME).listFiles()) {
|
||||||
}
|
try {
|
||||||
}
|
if (i.isDirectory() && i.list().length > 0 && !Iris.proj.getListing(true).containsKey(i.getName())) {
|
||||||
|
v++;
|
||||||
public static int countUniqueDimensions() {
|
}
|
||||||
int vv = counter.aquire(() -> {
|
} catch (Throwable ignored) {
|
||||||
int v = 0;
|
|
||||||
|
}
|
||||||
try
|
}
|
||||||
{
|
} catch (Throwable ignored) {
|
||||||
for(File i : Iris.instance.getDataFolder(WORKSPACE_NAME).listFiles())
|
|
||||||
{
|
}
|
||||||
try
|
|
||||||
{
|
return v;
|
||||||
if(i.isDirectory() && i.list().length > 0 && !Iris.proj.getListing(true).keySet().contains(i.getName()))
|
});
|
||||||
{
|
|
||||||
v++;
|
return vv;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public IrisDimension installIntoWorld(MortarSender sender, String type, File folder) {
|
||||||
catch(Throwable ignored)
|
sender.sendMessage("Looking for Package: " + type);
|
||||||
{
|
File iris = new File(folder, "iris");
|
||||||
|
File irispack = new File(folder, "iris/pack");
|
||||||
}
|
IrisDimension dim = IrisDataManager.loadAnyDimension(type);
|
||||||
}
|
|
||||||
}
|
if (dim == null) {
|
||||||
|
for (File i : Iris.proj.getWorkspaceFolder().listFiles()) {
|
||||||
catch(Throwable ignored)
|
if (i.isFile() && i.getName().equals(type + ".iris")) {
|
||||||
{
|
sender.sendMessage("Found " + type + ".iris in " + ProjectManager.WORKSPACE_NAME + " folder");
|
||||||
|
ZipUtil.unpack(i, irispack);
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
return v;
|
}
|
||||||
});
|
} else {
|
||||||
|
sender.sendMessage("Found " + type + " dimension in " + ProjectManager.WORKSPACE_NAME + " folder. Repackaging");
|
||||||
return vv;
|
File f = new IrisProject(new File(getWorkspaceFolder(), type)).getPath();
|
||||||
}
|
|
||||||
|
try {
|
||||||
public IrisDimension installIntoWorld(MortarSender sender, String type, File folder)
|
FileUtils.copyDirectory(f, irispack);
|
||||||
{
|
} catch (IOException e) {
|
||||||
sender.sendMessage("Looking for Package: " + type);
|
|
||||||
File iris = new File(folder, "iris");
|
}
|
||||||
File irispack = new File(folder, "iris/pack");
|
}
|
||||||
IrisDimension dim = IrisDataManager.loadAnyDimension(type);
|
|
||||||
|
File dimf = new File(irispack, "dimensions/" + type + ".json");
|
||||||
if(dim == null)
|
|
||||||
{
|
if (!dimf.exists() || !dimf.isFile()) {
|
||||||
for(File i : Iris.proj.getWorkspaceFolder().listFiles())
|
Iris.proj.downloadSearch(sender, type, false);
|
||||||
{
|
File downloaded = Iris.proj.getWorkspaceFolder(type);
|
||||||
if(i.isFile() && i.getName().equals(type + ".iris"))
|
|
||||||
{
|
for (File i : downloaded.listFiles()) {
|
||||||
sender.sendMessage("Found " + type + ".iris in " + ProjectManager.WORKSPACE_NAME + " folder");
|
if (i.isFile()) {
|
||||||
ZipUtil.unpack(i, irispack);
|
try {
|
||||||
break;
|
FileUtils.copyFile(i, new File(irispack, i.getName()));
|
||||||
}
|
} catch (IOException e) {
|
||||||
}
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
else
|
try {
|
||||||
{
|
FileUtils.copyDirectory(i, new File(irispack, i.getName()));
|
||||||
sender.sendMessage("Found " + type + " dimension in " + ProjectManager.WORKSPACE_NAME + " folder. Repackaging");
|
} catch (IOException e) {
|
||||||
File f = new IrisProject(new File(getWorkspaceFolder(), type)).getPath();
|
e.printStackTrace();
|
||||||
|
}
|
||||||
try
|
}
|
||||||
{
|
}
|
||||||
FileUtils.copyDirectory(f, irispack);
|
|
||||||
}
|
IO.delete(downloaded);
|
||||||
|
}
|
||||||
catch(IOException e)
|
|
||||||
{
|
if (!dimf.exists() || !dimf.isFile()) {
|
||||||
|
sender.sendMessage("Can't find the " + dimf.getName() + " in the dimensions folder of this pack! Failed!");
|
||||||
}
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
File dimf = new File(irispack, "dimensions/" + type + ".json");
|
IrisDataManager dm = new IrisDataManager(irispack);
|
||||||
|
dim = dm.getDimensionLoader().load(type);
|
||||||
if(!dimf.exists() || !dimf.isFile())
|
|
||||||
{
|
if (dim == null) {
|
||||||
Iris.proj.downloadSearch(sender, type, false);
|
sender.sendMessage("Can't load the dimension! Failed!");
|
||||||
File downloaded = Iris.proj.getWorkspaceFolder(type);
|
return null;
|
||||||
|
}
|
||||||
for(File i : downloaded.listFiles())
|
|
||||||
{
|
sender.sendMessage(folder.getName() + " type installed. ");
|
||||||
if(i.isFile())
|
return dim;
|
||||||
{
|
}
|
||||||
try
|
|
||||||
{
|
public void downloadSearch(MortarSender sender, String key, boolean trim) {
|
||||||
FileUtils.copyFile(i, new File(irispack, i.getName()));
|
downloadSearch(sender, key, trim, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
catch(IOException e)
|
public void downloadSearch(MortarSender sender, String key, boolean trim, boolean forceOverwrite) {
|
||||||
{
|
String url = "?";
|
||||||
e.printStackTrace();
|
|
||||||
}
|
try {
|
||||||
}
|
url = getListing(false).get(key);
|
||||||
|
url = url == null ? key : url;
|
||||||
else
|
Iris.info("Assuming URL " + url);
|
||||||
{
|
String branch = "master";
|
||||||
try
|
String[] nodes = url.split("\\Q/\\E");
|
||||||
{
|
String repo = nodes[0] + "/" + nodes[1];
|
||||||
FileUtils.copyDirectory(i, new File(irispack, i.getName()));
|
branch = nodes.length > 2 ? nodes[2] : branch;
|
||||||
}
|
download(sender, repo, branch, trim, forceOverwrite);
|
||||||
|
} catch (Throwable e) {
|
||||||
catch(IOException e)
|
e.printStackTrace();
|
||||||
{
|
sender.sendMessage("Failed to download '" + key + "' from " + url + ".");
|
||||||
e.printStackTrace();
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
public void download(MortarSender sender, String repo, String branch, boolean trim) throws JsonSyntaxException, IOException {
|
||||||
|
download(sender, repo, branch, trim, false);
|
||||||
IO.delete(downloaded);
|
}
|
||||||
}
|
|
||||||
|
public void download(MortarSender sender, String repo, String branch, boolean trim, boolean forceOverwrite) throws JsonSyntaxException, IOException {
|
||||||
if(!dimf.exists() || !dimf.isFile())
|
String url = "https://codeload.github.com/" + repo + "/zip/refs/heads/" + branch;
|
||||||
{
|
sender.sendMessage("Downloading " + url);
|
||||||
sender.sendMessage("Can't find the " + dimf.getName() + " in the dimensions folder of this pack! Failed!");
|
File zip = Iris.getNonCachedFile("pack-" + trim + "-" + repo, url);
|
||||||
return null;
|
File temp = Iris.getTemp();
|
||||||
}
|
File work = new File(temp, "dl-" + UUID.randomUUID());
|
||||||
|
File packs = getWorkspaceFolder();
|
||||||
IrisDataManager dm = new IrisDataManager(irispack);
|
sender.sendMessage("Unpacking " + repo);
|
||||||
dim = dm.getDimensionLoader().load(type);
|
try {
|
||||||
|
ZipUtil.unpack(zip, work);
|
||||||
if(dim == null)
|
} catch (Throwable e) {
|
||||||
{
|
e.printStackTrace();
|
||||||
sender.sendMessage("Can't load the dimension! Failed!");
|
sender.sendMessage(
|
||||||
return null;
|
"Issue when unpacking. Please check/do the following:" +
|
||||||
}
|
"\n1. Do you have a functioning internet connection?" +
|
||||||
|
"\n2. Did the download corrupt?" +
|
||||||
sender.sendMessage(folder.getName() + " type installed. ");
|
"\n3. Try deleting the */plugins/iris/packs folder and re-download." +
|
||||||
return dim;
|
"\n4. Download the pack from the GitHub repo: https://github.com/IrisDimensions/overworld" +
|
||||||
}
|
"\n5. Contact support (if all other options do not help)"
|
||||||
|
);
|
||||||
public void downloadSearch(MortarSender sender, String key, boolean trim)
|
}
|
||||||
{
|
File dir = null;
|
||||||
downloadSearch(sender, key, trim, false);
|
File[] zipFiles = work.listFiles();
|
||||||
}
|
|
||||||
|
if (zipFiles == null) {
|
||||||
public void downloadSearch(MortarSender sender, String key, boolean trim, boolean forceOverwrite)
|
sender.sendMessage("No files were extracted from the zip file.");
|
||||||
{
|
return;
|
||||||
String url = "?";
|
}
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
dir = zipFiles.length == 1 && zipFiles[0].isDirectory() ? zipFiles[0] : null;
|
||||||
url = getListing(false).get(key);
|
} catch (NullPointerException e) {
|
||||||
url = url == null ? key : url;
|
sender.sendMessage("Error when finding home directory. Are there any non-text characters in the file name?");
|
||||||
Iris.info("Assuming URL " + url);
|
return;
|
||||||
String branch = "master";
|
}
|
||||||
String[] nodes = url.split("\\Q/\\E");
|
|
||||||
String repo = nodes[0] + "/" + nodes[1];
|
if (dir == null) {
|
||||||
branch = nodes.length > 2 ? nodes[2] : branch;
|
sender.sendMessage("Invalid Format. Missing root folder or too many folders!");
|
||||||
download(sender, repo, branch, trim, forceOverwrite);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
catch(Throwable e)
|
File dimensions = new File(dir, "dimensions");
|
||||||
{
|
|
||||||
e.printStackTrace();
|
if (!(dimensions.exists() && dimensions.isDirectory())) {
|
||||||
sender.sendMessage("Failed to download '" + key + "' from " + url + ".");
|
sender.sendMessage("Invalid Format. Missing dimensions folder");
|
||||||
}
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void download(MortarSender sender, String repo, String branch, boolean trim) throws JsonSyntaxException, IOException
|
if (dimensions.listFiles() == null) {
|
||||||
{
|
sender.sendMessage("No dimension file found in the extracted zip file.");
|
||||||
download(sender, repo, branch, trim, false);
|
sender.sendMessage("Check it is there on GitHub and report this to staff!");
|
||||||
}
|
} else if (dimensions.listFiles().length != 1) {
|
||||||
|
sender.sendMessage("Dimensions folder must have 1 file in it");
|
||||||
public void download(MortarSender sender, String repo, String branch, boolean trim, boolean forceOverwrite) throws JsonSyntaxException, IOException
|
return;
|
||||||
{
|
}
|
||||||
String url = "https://codeload.github.com/" + repo + "/zip/refs/heads/" + branch;
|
|
||||||
sender.sendMessage("Downloading " + url);
|
File dim = dimensions.listFiles()[0];
|
||||||
File zip = Iris.getNonCachedFile("pack-" + trim + "-" + repo, url);
|
|
||||||
File temp = Iris.getTemp();
|
if (!dim.isFile()) {
|
||||||
File work = new File(temp, "dl-" + UUID.randomUUID());
|
sender.sendMessage("Invalid dimension (folder) in dimensions folder");
|
||||||
File packs = getWorkspaceFolder();
|
return;
|
||||||
sender.sendMessage("Unpacking " + repo);
|
}
|
||||||
try {
|
|
||||||
ZipUtil.unpack(zip, work);
|
String key = dim.getName().split("\\Q.\\E")[0];
|
||||||
} catch (Throwable e){
|
IrisDimension d = new Gson().fromJson(IO.readAll(dim), IrisDimension.class);
|
||||||
e.printStackTrace();
|
sender.sendMessage("Importing " + d.getName() + " (" + key + ")");
|
||||||
sender.sendMessage(
|
File packEntry = new File(packs, key);
|
||||||
"Issue when unpacking. Please check/do the following:" +
|
|
||||||
"\n1. Do you have a functioning internet connection?" +
|
if (forceOverwrite) {
|
||||||
"\n2. Did the download corrupt?" +
|
IO.delete(packEntry);
|
||||||
"\n3. Try deleting the */plugins/iris/packs folder and re-download." +
|
}
|
||||||
"\n4. Download the pack from the GitHub repo: https://github.com/IrisDimensions/overworld" +
|
|
||||||
"\n5. Contact support (if all other options do not help)"
|
if (IrisDataManager.loadAnyDimension(key) != null) {
|
||||||
);
|
sender.sendMessage("Another dimension in the packs folder is already using the key " + key + " IMPORT FAILED!");
|
||||||
}
|
return;
|
||||||
File dir = null;
|
}
|
||||||
File[] zipFiles = work.listFiles();
|
|
||||||
|
if (packEntry.exists() && packEntry.listFiles().length > 0) {
|
||||||
if (zipFiles == null) {
|
sender.sendMessage("Another pack is using the key " + key + ". IMPORT FAILED!");
|
||||||
sender.sendMessage("No files were extracted from the zip file.");
|
return;
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
|
FileUtils.copyDirectory(dir, packEntry);
|
||||||
try {
|
|
||||||
dir = zipFiles.length == 1 && zipFiles[0].isDirectory() ? zipFiles[0] : null;
|
if (trim) {
|
||||||
} catch (NullPointerException e) {
|
sender.sendMessage("Trimming " + key);
|
||||||
sender.sendMessage("Error when finding home directory. Are there any non-text characters in the file name?");
|
File cp = compilePackage(sender, key, false, false);
|
||||||
return;
|
IO.delete(packEntry);
|
||||||
}
|
packEntry.mkdirs();
|
||||||
|
ZipUtil.unpack(cp, packEntry);
|
||||||
if(dir == null)
|
}
|
||||||
{
|
|
||||||
sender.sendMessage("Invalid Format. Missing root folder or too many folders!");
|
sender.sendMessage("Successfully Aquired " + d.getName());
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
|
public KMap<String, String> getListing(boolean cached) {
|
||||||
File dimensions = new File(dir, "dimensions");
|
if (cached && cacheListing != null) {
|
||||||
|
return cacheListing;
|
||||||
if(!(dimensions.exists() && dimensions.isDirectory()))
|
}
|
||||||
{
|
|
||||||
sender.sendMessage("Invalid Format. Missing dimensions folder");
|
JSONObject a;
|
||||||
return;
|
|
||||||
}
|
if (cached) {
|
||||||
|
a = new JSONObject(Iris.getCached("cachedlisting", LISTING));
|
||||||
if(dimensions.listFiles() == null){
|
} else {
|
||||||
sender.sendMessage("No dimension file found in the extracted zip file.");
|
a = new JSONObject(Iris.getNonCached(true + "listing", LISTING));
|
||||||
sender.sendMessage("Check it is there on GitHub and report this to staff!");
|
}
|
||||||
}
|
|
||||||
else if (dimensions.listFiles().length != 1)
|
KMap<String, String> l = new KMap<>();
|
||||||
{
|
|
||||||
sender.sendMessage("Dimensions folder must have 1 file in it");
|
for (String i : a.keySet()) {
|
||||||
return;
|
l.put(i, a.getString(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
File dim = dimensions.listFiles()[0];
|
return l;
|
||||||
|
}
|
||||||
if(!dim.isFile())
|
|
||||||
{
|
public boolean isProjectOpen() {
|
||||||
sender.sendMessage("Invalid dimension (folder) in dimensions folder");
|
return activeProject != null && activeProject.isOpen();
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
|
public void open(MortarSender sender, String dimm) {
|
||||||
String key = dim.getName().split("\\Q.\\E")[0];
|
try {
|
||||||
IrisDimension d = new Gson().fromJson(IO.readAll(dim), IrisDimension.class);
|
open(sender, dimm, () ->
|
||||||
sender.sendMessage("Importing " + d.getName() + " (" + key + ")");
|
{
|
||||||
File packEntry = new File(packs, key);
|
if (sender.isPlayer()) {
|
||||||
|
}
|
||||||
if(forceOverwrite)
|
});
|
||||||
{
|
} catch (Exception e) {
|
||||||
IO.delete(packEntry);
|
sender.sendMessage("Error when creating studio world:");
|
||||||
}
|
e.printStackTrace();
|
||||||
|
}
|
||||||
if(IrisDataManager.loadAnyDimension(key) != null)
|
}
|
||||||
{
|
|
||||||
sender.sendMessage("Another dimension in the packs folder is already using the key " + key + " IMPORT FAILED!");
|
public void open(MortarSender sender, String dimm, Runnable onDone) {
|
||||||
return;
|
if (isProjectOpen()) {
|
||||||
}
|
close();
|
||||||
|
}
|
||||||
if(packEntry.exists() && packEntry.listFiles().length > 0)
|
|
||||||
{
|
IrisProject project = new IrisProject(new File(getWorkspaceFolder(), dimm));
|
||||||
sender.sendMessage("Another pack is using the key " + key + ". IMPORT FAILED!");
|
activeProject = project;
|
||||||
return;
|
project.open(sender, onDone);
|
||||||
}
|
}
|
||||||
|
|
||||||
FileUtils.copyDirectory(dir, packEntry);
|
public File getWorkspaceFolder(String... sub) {
|
||||||
|
return Iris.instance.getDataFolderList(WORKSPACE_NAME, sub);
|
||||||
if(trim)
|
}
|
||||||
{
|
|
||||||
sender.sendMessage("Trimming " + key);
|
public File getWorkspaceFile(String... sub) {
|
||||||
File cp = compilePackage(sender, key, false, false);
|
return Iris.instance.getDataFileList(WORKSPACE_NAME, sub);
|
||||||
IO.delete(packEntry);
|
}
|
||||||
packEntry.mkdirs();
|
|
||||||
ZipUtil.unpack(cp, packEntry);
|
public void close() {
|
||||||
}
|
if (isProjectOpen()) {
|
||||||
|
activeProject.close();
|
||||||
sender.sendMessage("Successfully Aquired " + d.getName());
|
activeProject = null;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public KMap<String, String> getListing(boolean cached)
|
|
||||||
{
|
public File compilePackage(MortarSender sender, String d, boolean obfuscate, boolean minify) {
|
||||||
if(cached && cacheListing != null)
|
return new IrisProject(new File(getWorkspaceFolder(), d)).compilePackage(sender, obfuscate, minify);
|
||||||
{
|
}
|
||||||
return cacheListing;
|
|
||||||
}
|
public void createFrom(String existingPack, String newName) {
|
||||||
|
File importPack = getWorkspaceFolder(existingPack);
|
||||||
JSONObject a;
|
File newPack = getWorkspaceFolder(newName);
|
||||||
|
|
||||||
if(cached)
|
if (importPack.listFiles().length == 0) {
|
||||||
{
|
Iris.warn("Couldn't find the pack to create a new dimension from.");
|
||||||
a = new JSONObject(Iris.getCached("cachedlisting", LISTING));
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
try {
|
||||||
{
|
FileUtils.copyDirectory(importPack, newPack, new FileFilter() {
|
||||||
a = new JSONObject(Iris.getNonCached(true + "listing", LISTING));
|
@Override
|
||||||
}
|
public boolean accept(File pathname) {
|
||||||
|
return !pathname.getAbsolutePath().contains(".git");
|
||||||
KMap<String, String> l = new KMap<>();
|
}
|
||||||
|
}, false);
|
||||||
for(String i : a.keySet())
|
} catch (IOException e) {
|
||||||
{
|
e.printStackTrace();
|
||||||
l.put(i, a.getString(i));
|
}
|
||||||
}
|
|
||||||
|
new File(importPack, existingPack + ".code-workspace").delete();
|
||||||
return l;
|
File dimFile = new File(importPack, "dimensions/" + existingPack + ".json");
|
||||||
}
|
File newDimFile = new File(newPack, "dimensions/" + newName + ".json");
|
||||||
|
|
||||||
public boolean isProjectOpen()
|
try {
|
||||||
{
|
FileUtils.copyFile(dimFile, newDimFile);
|
||||||
return activeProject != null && activeProject.isOpen();
|
} catch (IOException e) {
|
||||||
}
|
e.printStackTrace();
|
||||||
|
}
|
||||||
public void open(MortarSender sender, String dimm)
|
|
||||||
{
|
new File(newPack, "dimensions/" + existingPack + ".json").delete();
|
||||||
try {
|
|
||||||
open(sender, dimm, () ->
|
try {
|
||||||
{
|
JSONObject json = new JSONObject(IO.readAll(newDimFile));
|
||||||
if (sender.isPlayer()) {
|
|
||||||
}
|
if (json.has("name")) {
|
||||||
});
|
json.put("name", Form.capitalizeWords(newName.replaceAll("\\Q-\\E", " ")));
|
||||||
} catch (Exception e){
|
IO.writeAll(newDimFile, json.toString(4));
|
||||||
sender.sendMessage("Error when creating studio world:");
|
}
|
||||||
e.printStackTrace();
|
} catch (JSONException | IOException e) {
|
||||||
}
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void open(MortarSender sender, String dimm, Runnable onDone)
|
try {
|
||||||
{
|
IrisProject p = new IrisProject(getWorkspaceFolder(newName));
|
||||||
if(isProjectOpen())
|
JSONObject ws = p.createCodeWorkspaceConfig();
|
||||||
{
|
IO.writeAll(getWorkspaceFile(newName, newName + ".code-workspace"), ws.toString(0));
|
||||||
close();
|
} catch (JSONException | IOException e) {
|
||||||
}
|
e.printStackTrace();
|
||||||
|
}
|
||||||
IrisProject project = new IrisProject(new File(getWorkspaceFolder(), dimm));
|
}
|
||||||
activeProject = project;
|
|
||||||
project.open(sender, onDone);
|
public void create(MortarSender sender, String s, String downloadable) {
|
||||||
}
|
boolean shouldDelete = false;
|
||||||
|
File importPack = getWorkspaceFolder(downloadable);
|
||||||
public File getWorkspaceFolder(String... sub)
|
|
||||||
{
|
if (importPack.listFiles().length == 0) {
|
||||||
return Iris.instance.getDataFolderList(WORKSPACE_NAME, sub);
|
downloadSearch(sender, downloadable, false);
|
||||||
}
|
|
||||||
|
if (importPack.listFiles().length > 0) {
|
||||||
public File getWorkspaceFile(String... sub)
|
shouldDelete = true;
|
||||||
{
|
}
|
||||||
return Iris.instance.getDataFileList(WORKSPACE_NAME, sub);
|
}
|
||||||
}
|
|
||||||
|
if (importPack.listFiles().length == 0) {
|
||||||
public void close()
|
sender.sendMessage("Couldn't find the pack to create a new dimension from.");
|
||||||
{
|
return;
|
||||||
if(isProjectOpen())
|
}
|
||||||
{
|
|
||||||
activeProject.close();
|
File importDimensionFile = new File(importPack, "dimensions/" + downloadable + ".json");
|
||||||
activeProject = null;
|
|
||||||
}
|
if (!importDimensionFile.exists()) {
|
||||||
}
|
sender.sendMessage("Missing Imported Dimension File");
|
||||||
|
return;
|
||||||
public File compilePackage(MortarSender sender, String d, boolean obfuscate, boolean minify)
|
}
|
||||||
{
|
|
||||||
return new IrisProject(new File(getWorkspaceFolder(), d)).compilePackage(sender, obfuscate, minify);
|
sender.sendMessage("Importing " + downloadable + " into new Project " + s);
|
||||||
}
|
createFrom(downloadable, s);
|
||||||
|
if (shouldDelete) {
|
||||||
public void createFrom(String existingPack, String newName)
|
importPack.delete();
|
||||||
{
|
}
|
||||||
File importPack = getWorkspaceFolder(existingPack);
|
open(sender, s);
|
||||||
File newPack = getWorkspaceFolder(newName);
|
}
|
||||||
|
|
||||||
if(importPack.listFiles().length == 0)
|
public void create(MortarSender sender, String s) {
|
||||||
{
|
create(sender, s, "example");
|
||||||
Iris.warn("Couldn't find the pack to create a new dimension from.");
|
}
|
||||||
return;
|
|
||||||
}
|
public void updateWorkspace() {
|
||||||
|
if (isProjectOpen()) {
|
||||||
try
|
activeProject.updateWorkspace();
|
||||||
{
|
}
|
||||||
FileUtils.copyDirectory(importPack, newPack, new FileFilter()
|
}
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public boolean accept(File pathname)
|
|
||||||
{
|
|
||||||
return !pathname.getAbsolutePath().contains(".git");
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(IOException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
new File(importPack, existingPack + ".code-workspace").delete();
|
|
||||||
File dimFile = new File(importPack, "dimensions/" + existingPack + ".json");
|
|
||||||
File newDimFile = new File(newPack, "dimensions/" + newName + ".json");
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
FileUtils.copyFile(dimFile, newDimFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(IOException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
new File(newPack, "dimensions/" + existingPack + ".json").delete();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
JSONObject json = new JSONObject(IO.readAll(newDimFile));
|
|
||||||
|
|
||||||
if(json.has("name"))
|
|
||||||
{
|
|
||||||
json.put("name", Form.capitalizeWords(newName.replaceAll("\\Q-\\E", " ")));
|
|
||||||
IO.writeAll(newDimFile, json.toString(4));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(JSONException | IOException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
IrisProject p = new IrisProject(getWorkspaceFolder(newName));
|
|
||||||
JSONObject ws = p.createCodeWorkspaceConfig();
|
|
||||||
IO.writeAll(getWorkspaceFile(newName, newName + ".code-workspace"), ws.toString(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(JSONException | IOException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void create(MortarSender sender, String s, String downloadable)
|
|
||||||
{
|
|
||||||
boolean shouldDelete = false;
|
|
||||||
File importPack = getWorkspaceFolder(downloadable);
|
|
||||||
|
|
||||||
if(importPack.listFiles().length == 0)
|
|
||||||
{
|
|
||||||
downloadSearch(sender, downloadable, false);
|
|
||||||
|
|
||||||
if(importPack.listFiles().length > 0)
|
|
||||||
{
|
|
||||||
shouldDelete = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(importPack.listFiles().length == 0)
|
|
||||||
{
|
|
||||||
sender.sendMessage("Couldn't find the pack to create a new dimension from.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
File importDimensionFile = new File(importPack, "dimensions/" + downloadable + ".json");
|
|
||||||
|
|
||||||
if(!importDimensionFile.exists())
|
|
||||||
{
|
|
||||||
sender.sendMessage("Missing Imported Dimension File");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage("Importing " + downloadable + " into new Project " + s);
|
|
||||||
createFrom(downloadable, s);
|
|
||||||
if(shouldDelete)
|
|
||||||
{
|
|
||||||
importPack.delete();
|
|
||||||
}
|
|
||||||
open(sender, s);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void create(MortarSender sender, String s)
|
|
||||||
{
|
|
||||||
create(sender, s, "example");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateWorkspace()
|
|
||||||
{
|
|
||||||
if(isProjectOpen())
|
|
||||||
{
|
|
||||||
activeProject.updateWorkspace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -23,312 +23,252 @@ import java.util.Objects;
|
|||||||
|
|
||||||
public class WandManager implements Listener {
|
public class WandManager implements Listener {
|
||||||
|
|
||||||
private static ItemStack wand;
|
private static ItemStack wand;
|
||||||
private static ItemStack dust;
|
private static ItemStack dust;
|
||||||
|
|
||||||
public WandManager()
|
public WandManager() {
|
||||||
{
|
wand = createWand();
|
||||||
wand = createWand();
|
dust = createDust();
|
||||||
dust = createDust();
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, () ->
|
||||||
Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, () ->
|
{
|
||||||
{
|
for (Player i : Bukkit.getOnlinePlayers()) {
|
||||||
for(Player i : Bukkit.getOnlinePlayers())
|
tick(i);
|
||||||
{
|
}
|
||||||
tick(i);
|
}, 0, 5);
|
||||||
}
|
}
|
||||||
}, 0, 5);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void tick(Player p)
|
public void tick(Player p) {
|
||||||
{
|
try {
|
||||||
try
|
if (isWand(p.getInventory().getItemInMainHand())) {
|
||||||
{
|
Location[] d = getCuboid(p.getInventory().getItemInMainHand());
|
||||||
if(isWand(p.getInventory().getItemInMainHand()))
|
draw(d, p);
|
||||||
{
|
}
|
||||||
Location[] d = getCuboid(p.getInventory().getItemInMainHand());
|
} catch (Throwable ignored) {
|
||||||
draw(d, p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(Throwable ignored)
|
}
|
||||||
{
|
}
|
||||||
|
|
||||||
}
|
public void draw(Cuboid d, Player p) {
|
||||||
}
|
draw(new Location[]{d.getLowerNE(), d.getUpperSW()}, p);
|
||||||
|
}
|
||||||
|
|
||||||
public void draw(Cuboid d, Player p)
|
public void draw(Location[] d, Player p) {
|
||||||
{
|
Vector gx = Vector.getRandom().subtract(Vector.getRandom()).normalize().clone().multiply(0.65);
|
||||||
draw(new Location[] {d.getLowerNE(), d.getUpperSW()}, p);
|
d[0].getWorld().spawnParticle(Particle.CRIT_MAGIC, d[0], 1, 0.5 + gx.getX(), 0.5 + gx.getY(), 0.5 + gx.getZ(), 0, null, false);
|
||||||
}
|
Vector gxx = Vector.getRandom().subtract(Vector.getRandom()).normalize().clone().multiply(0.65);
|
||||||
|
d[1].getWorld().spawnParticle(Particle.CRIT, d[1], 1, 0.5 + gxx.getX(), 0.5 + gxx.getY(), 0.5 + gxx.getZ(), 0, null, false);
|
||||||
|
|
||||||
public void draw(Location[] d, Player p)
|
if (!d[0].getWorld().equals(d[1].getWorld())) {
|
||||||
{
|
return;
|
||||||
Vector gx = Vector.getRandom().subtract(Vector.getRandom()).normalize().clone().multiply(0.65);
|
}
|
||||||
d[0].getWorld().spawnParticle(Particle.CRIT_MAGIC, d[0], 1, 0.5 + gx.getX(), 0.5 + gx.getY(), 0.5 + gx.getZ(), 0, null, false);
|
|
||||||
Vector gxx = Vector.getRandom().subtract(Vector.getRandom()).normalize().clone().multiply(0.65);
|
|
||||||
d[1].getWorld().spawnParticle(Particle.CRIT, d[1], 1, 0.5 + gxx.getX(), 0.5 + gxx.getY(), 0.5 + gxx.getZ(), 0, null, false);
|
|
||||||
|
|
||||||
if(!d[0].getWorld().equals(d[1].getWorld()))
|
if (d[0].distanceSquared(d[1]) > 64 * 64) {
|
||||||
{
|
return;
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(d[0].distanceSquared(d[1]) > 64 * 64)
|
int minx = Math.min(d[0].getBlockX(), d[1].getBlockX());
|
||||||
{
|
int miny = Math.min(d[0].getBlockY(), d[1].getBlockY());
|
||||||
return;
|
int minz = Math.min(d[0].getBlockZ(), d[1].getBlockZ());
|
||||||
}
|
int maxx = Math.max(d[0].getBlockX(), d[1].getBlockX());
|
||||||
|
int maxy = Math.max(d[0].getBlockY(), d[1].getBlockY());
|
||||||
|
int maxz = Math.max(d[0].getBlockZ(), d[1].getBlockZ());
|
||||||
|
|
||||||
int minx = Math.min(d[0].getBlockX(), d[1].getBlockX());
|
for (double j = minx - 1; j < maxx + 1; j += 0.25) {
|
||||||
int miny = Math.min(d[0].getBlockY(), d[1].getBlockY());
|
for (double k = miny - 1; k < maxy + 1; k += 0.25) {
|
||||||
int minz = Math.min(d[0].getBlockZ(), d[1].getBlockZ());
|
for (double l = minz - 1; l < maxz + 1; l += 0.25) {
|
||||||
int maxx = Math.max(d[0].getBlockX(), d[1].getBlockX());
|
if (M.r(0.2)) {
|
||||||
int maxy = Math.max(d[0].getBlockY(), d[1].getBlockY());
|
boolean jj = j == minx || j == maxx;
|
||||||
int maxz = Math.max(d[0].getBlockZ(), d[1].getBlockZ());
|
boolean kk = k == miny || k == maxy;
|
||||||
|
boolean ll = l == minz || l == maxz;
|
||||||
|
|
||||||
for(double j = minx - 1; j < maxx + 1; j += 0.25)
|
if ((jj && kk) || (jj && ll) || (ll && kk)) {
|
||||||
{
|
Vector push = new Vector(0, 0, 0);
|
||||||
for(double k = miny - 1; k < maxy + 1; k += 0.25)
|
|
||||||
{
|
|
||||||
for(double l = minz - 1; l < maxz + 1; l += 0.25)
|
|
||||||
{
|
|
||||||
if(M.r(0.2))
|
|
||||||
{
|
|
||||||
boolean jj = j == minx || j == maxx;
|
|
||||||
boolean kk = k == miny || k == maxy;
|
|
||||||
boolean ll = l == minz || l == maxz;
|
|
||||||
|
|
||||||
if((jj && kk) || (jj && ll) || (ll && kk))
|
if (j == minx) {
|
||||||
{
|
push.add(new Vector(-0.55, 0, 0));
|
||||||
Vector push = new Vector(0, 0, 0);
|
}
|
||||||
|
|
||||||
if(j == minx)
|
if (k == miny) {
|
||||||
{
|
push.add(new Vector(0, -0.55, 0));
|
||||||
push.add(new Vector(-0.55, 0, 0));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(k == miny)
|
if (l == minz) {
|
||||||
{
|
push.add(new Vector(0, 0, -0.55));
|
||||||
push.add(new Vector(0, -0.55, 0));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(l == minz)
|
if (j == maxx) {
|
||||||
{
|
push.add(new Vector(0.55, 0, 0));
|
||||||
push.add(new Vector(0, 0, -0.55));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(j == maxx)
|
if (k == maxy) {
|
||||||
{
|
push.add(new Vector(0, 0.55, 0));
|
||||||
push.add(new Vector(0.55, 0, 0));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(k == maxy)
|
if (l == maxz) {
|
||||||
{
|
push.add(new Vector(0, 0, 0.55));
|
||||||
push.add(new Vector(0, 0.55, 0));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(l == maxz)
|
Location lv = new Location(d[0].getWorld(), j, k, l).clone().add(0.5, 0.5, 0.5).clone().add(push);
|
||||||
{
|
Color color = Color.getHSBColor((float) (0.5f + (Math.sin((j + k + l + (p.getTicksLived() / 2)) / 20f) / 2)), 1, 1);
|
||||||
push.add(new Vector(0, 0, 0.55));
|
int r = color.getRed();
|
||||||
}
|
int g = color.getGreen();
|
||||||
|
int b = color.getBlue();
|
||||||
|
p.spawnParticle(Particle.REDSTONE, lv.getX(), lv.getY(), lv.getZ(), 1, 0, 0, 0, 0, new Particle.DustOptions(org.bukkit.Color.fromRGB(r, g, b), 0.75f));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Location lv = new Location(d[0].getWorld(), j, k, l).clone().add(0.5, 0.5, 0.5).clone().add(push);
|
@EventHandler
|
||||||
Color color = Color.getHSBColor((float) (0.5f + (Math.sin((j + k + l + (p.getTicksLived() / 2)) / 20f) / 2)), 1, 1);
|
public void on(PlayerInteractEvent e) {
|
||||||
int r = color.getRed();
|
try {
|
||||||
int g = color.getGreen();
|
if (isWand(e.getPlayer())) {
|
||||||
int b = color.getBlue();
|
if (e.getAction().equals(Action.LEFT_CLICK_BLOCK)) {
|
||||||
p.spawnParticle(Particle.REDSTONE, lv.getX(), lv.getY(), lv.getZ(), 1, 0, 0, 0, 0, new Particle.DustOptions(org.bukkit.Color.fromRGB(r, g, b), 0.75f));
|
e.setCancelled(true);
|
||||||
}
|
e.getPlayer().getInventory().setItemInMainHand(update(true, Objects.requireNonNull(e.getClickedBlock()).getLocation(), e.getPlayer().getInventory().getItemInMainHand()));
|
||||||
}
|
e.getPlayer().playSound(e.getClickedBlock().getLocation(), Sound.BLOCK_END_PORTAL_FRAME_FILL, 1f, 0.67f);
|
||||||
}
|
e.getPlayer().updateInventory();
|
||||||
}
|
} else if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
|
||||||
}
|
e.setCancelled(true);
|
||||||
}
|
e.getPlayer().getInventory().setItemInMainHand(update(false, Objects.requireNonNull(e.getClickedBlock()).getLocation(), e.getPlayer().getInventory().getItemInMainHand()));
|
||||||
|
e.getPlayer().playSound(e.getClickedBlock().getLocation(), Sound.BLOCK_END_PORTAL_FRAME_FILL, 1f, 1.17f);
|
||||||
|
e.getPlayer().updateInventory();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
if (isDust(e.getPlayer())) {
|
||||||
public void on(PlayerInteractEvent e)
|
if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
|
||||||
{
|
e.setCancelled(true);
|
||||||
try
|
e.getPlayer().playSound(Objects.requireNonNull(e.getClickedBlock()).getLocation(), Sound.ENTITY_ENDER_EYE_DEATH, 2f, 1.97f);
|
||||||
{
|
DustRevealer.spawn(e.getClickedBlock(), new MortarSender(e.getPlayer(), Iris.instance.getTag()));
|
||||||
if(isWand(e.getPlayer()))
|
|
||||||
{
|
|
||||||
if(e.getAction().equals(Action.LEFT_CLICK_BLOCK))
|
|
||||||
{
|
|
||||||
e.setCancelled(true);
|
|
||||||
e.getPlayer().getInventory().setItemInMainHand(update(true, Objects.requireNonNull(e.getClickedBlock()).getLocation(), e.getPlayer().getInventory().getItemInMainHand()));
|
|
||||||
e.getPlayer().playSound(e.getClickedBlock().getLocation(), Sound.BLOCK_END_PORTAL_FRAME_FILL, 1f, 0.67f);
|
|
||||||
e.getPlayer().updateInventory();
|
|
||||||
}
|
|
||||||
|
|
||||||
else if(e.getAction().equals(Action.RIGHT_CLICK_BLOCK))
|
}
|
||||||
{
|
}
|
||||||
e.setCancelled(true);
|
} catch (Throwable ignored) {
|
||||||
e.getPlayer().getInventory().setItemInMainHand(update(false, Objects.requireNonNull(e.getClickedBlock()).getLocation(), e.getPlayer().getInventory().getItemInMainHand()));
|
|
||||||
e.getPlayer().playSound(e.getClickedBlock().getLocation(), Sound.BLOCK_END_PORTAL_FRAME_FILL, 1f, 1.17f);
|
|
||||||
e.getPlayer().updateInventory();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isDust(e.getPlayer()))
|
}
|
||||||
{
|
}
|
||||||
if(e.getAction().equals(Action.RIGHT_CLICK_BLOCK))
|
|
||||||
{
|
|
||||||
e.setCancelled(true);
|
|
||||||
e.getPlayer().playSound(Objects.requireNonNull(e.getClickedBlock()).getLocation(), Sound.ENTITY_ENDER_EYE_DEATH, 2f, 1.97f);
|
|
||||||
DustRevealer.spawn(e.getClickedBlock(), new MortarSender(e.getPlayer(), Iris.instance.getTag()));
|
|
||||||
|
|
||||||
}
|
public static void pasteSchematic(IrisObject s, Location at) {
|
||||||
}
|
s.place(at);
|
||||||
}
|
}
|
||||||
|
|
||||||
catch(Throwable ignored)
|
public static IrisObject createSchematic(ItemStack wand) {
|
||||||
{
|
if (!isWand(wand)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
try {
|
||||||
}
|
Location[] f = getCuboid(wand);
|
||||||
|
Cuboid c = new Cuboid(f[0], f[1]);
|
||||||
|
IrisObject s = new IrisObject(c.getSizeX(), c.getSizeY(), c.getSizeZ());
|
||||||
|
for (Block b : c) {
|
||||||
|
if (b.getType().equals(Material.AIR)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
public static void pasteSchematic(IrisObject s, Location at)
|
BlockVector bv = b.getLocation().subtract(c.getLowerNE().toVector()).toVector().toBlockVector();
|
||||||
{
|
s.setUnsigned(bv.getBlockX(), bv.getBlockY(), bv.getBlockZ(), b);
|
||||||
s.place(at);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static IrisObject createSchematic(ItemStack wand)
|
return s;
|
||||||
{
|
} catch (Throwable e) {
|
||||||
if(!isWand(wand))
|
e.printStackTrace();
|
||||||
{
|
}
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
return null;
|
||||||
{
|
}
|
||||||
Location[] f = getCuboid(wand);
|
|
||||||
Cuboid c = new Cuboid(f[0], f[1]);
|
|
||||||
IrisObject s = new IrisObject(c.getSizeX(), c.getSizeY(), c.getSizeZ());
|
|
||||||
for (Block b : c) {
|
|
||||||
if (b.getType().equals(Material.AIR)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
BlockVector bv = b.getLocation().subtract(c.getLowerNE().toVector()).toVector().toBlockVector();
|
public static Location stringToLocation(String s) {
|
||||||
s.setUnsigned(bv.getBlockX(), bv.getBlockY(), bv.getBlockZ(), b);
|
try {
|
||||||
}
|
String[] f = s.split("\\Q in \\E");
|
||||||
|
String[] g = f[0].split("\\Q,\\E");
|
||||||
|
return new Location(Bukkit.getWorld(f[1]), Integer.parseInt(g[0]), Integer.parseInt(g[1]), Integer.parseInt(g[2]));
|
||||||
|
} catch (Throwable e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return s;
|
public static String locationToString(Location s) {
|
||||||
}
|
if (s == null) {
|
||||||
|
return "<#>";
|
||||||
|
}
|
||||||
|
|
||||||
catch(Throwable e)
|
return s.getBlockX() + "," + s.getBlockY() + "," + s.getBlockZ() + " in " + s.getWorld().getName();
|
||||||
{
|
}
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
public static ItemStack createWand() {
|
||||||
}
|
return createWand(null, null);
|
||||||
|
}
|
||||||
|
|
||||||
public static Location stringToLocation(String s)
|
public static ItemStack createDust() {
|
||||||
{
|
ItemStack is = new ItemStack(Material.GLOWSTONE_DUST);
|
||||||
try
|
is.addUnsafeEnchantment(Enchantment.ARROW_INFINITE, 1);
|
||||||
{
|
ItemMeta im = is.getItemMeta();
|
||||||
String[] f = s.split("\\Q in \\E");
|
im.setDisplayName(C.BOLD + "" + C.YELLOW + "Dust of Revealing");
|
||||||
String[] g = f[0].split("\\Q,\\E");
|
im.setUnbreakable(true);
|
||||||
return new Location(Bukkit.getWorld(f[1]), Integer.parseInt(g[0]), Integer.parseInt(g[1]), Integer.parseInt(g[2]));
|
im.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_PLACED_ON, ItemFlag.HIDE_POTION_EFFECTS, ItemFlag.HIDE_DESTROYS, ItemFlag.HIDE_ENCHANTS);
|
||||||
}
|
im.setLore(new KList<String>().qadd("Right click on a block to reveal it's placement structure!"));
|
||||||
|
is.setItemMeta(im);
|
||||||
|
|
||||||
catch(Throwable e)
|
return is;
|
||||||
{
|
}
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String locationToString(Location s)
|
public boolean isDust(Player p) {
|
||||||
{
|
ItemStack is = p.getInventory().getItemInMainHand();
|
||||||
if(s == null)
|
return is != null && isDust(is);
|
||||||
{
|
}
|
||||||
return "<#>";
|
|
||||||
}
|
|
||||||
|
|
||||||
return s.getBlockX() + "," + s.getBlockY() + "," + s.getBlockZ() + " in " + s.getWorld().getName();
|
public boolean isDust(ItemStack is) {
|
||||||
}
|
return is.equals(dust);
|
||||||
|
}
|
||||||
|
|
||||||
public static ItemStack createWand()
|
public ItemStack update(boolean left, Location a, ItemStack item) {
|
||||||
{
|
if (!isWand(item)) {
|
||||||
return createWand(null, null);
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ItemStack createDust()
|
Location[] f = getCuboid(item);
|
||||||
{
|
Location other = left ? f[1] : f[0];
|
||||||
ItemStack is = new ItemStack(Material.GLOWSTONE_DUST);
|
|
||||||
is.addUnsafeEnchantment(Enchantment.ARROW_INFINITE, 1);
|
|
||||||
ItemMeta im = is.getItemMeta();
|
|
||||||
im.setDisplayName(C.BOLD + "" + C.YELLOW + "Dust of Revealing");
|
|
||||||
im.setUnbreakable(true);
|
|
||||||
im.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_PLACED_ON, ItemFlag.HIDE_POTION_EFFECTS, ItemFlag.HIDE_DESTROYS, ItemFlag.HIDE_ENCHANTS);
|
|
||||||
im.setLore(new KList<String>().qadd("Right click on a block to reveal it's placement structure!"));
|
|
||||||
is.setItemMeta(im);
|
|
||||||
|
|
||||||
return is;
|
if (other != null && !other.getWorld().getName().equals(a.getWorld().getName())) {
|
||||||
}
|
other = null;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDust(Player p)
|
return createWand(left ? a : other, left ? other : a);
|
||||||
{
|
}
|
||||||
ItemStack is = p.getInventory().getItemInMainHand();
|
|
||||||
return is != null && isDust(is);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isDust(ItemStack is)
|
public static ItemStack createWand(Location a, Location b) {
|
||||||
{
|
ItemStack is = new ItemStack(Material.BLAZE_ROD);
|
||||||
return is.equals(dust);
|
is.addUnsafeEnchantment(Enchantment.ARROW_INFINITE, 1);
|
||||||
}
|
ItemMeta im = is.getItemMeta();
|
||||||
|
im.setDisplayName(C.BOLD + "" + C.GOLD + "Wand of Iris");
|
||||||
|
im.setUnbreakable(true);
|
||||||
|
im.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_PLACED_ON, ItemFlag.HIDE_POTION_EFFECTS, ItemFlag.HIDE_DESTROYS, ItemFlag.HIDE_ENCHANTS);
|
||||||
|
im.setLore(new KList<String>().add(locationToString(a), locationToString(b)));
|
||||||
|
is.setItemMeta(im);
|
||||||
|
|
||||||
public ItemStack update(boolean left, Location a, ItemStack item)
|
return is;
|
||||||
{
|
}
|
||||||
if(!isWand(item))
|
|
||||||
{
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
Location[] f = getCuboid(item);
|
public static Location[] getCuboid(ItemStack is) {
|
||||||
Location other = left ? f[1] : f[0];
|
ItemMeta im = is.getItemMeta();
|
||||||
|
return new Location[]{stringToLocation(im.getLore().get(0)), stringToLocation(im.getLore().get(1))};
|
||||||
|
}
|
||||||
|
|
||||||
if(other != null && !other.getWorld().getName().equals(a.getWorld().getName()))
|
public static boolean isWand(Player p) {
|
||||||
{
|
ItemStack is = p.getInventory().getItemInMainHand();
|
||||||
other = null;
|
return is != null && isWand(is);
|
||||||
}
|
}
|
||||||
|
|
||||||
return createWand(left ? a : other, left ? other : a);
|
public static boolean isWand(ItemStack is) {
|
||||||
}
|
ItemStack wand = createWand();
|
||||||
|
if (is.getItemMeta() == null) return false;
|
||||||
public static ItemStack createWand(Location a, Location b)
|
return is.getType().equals(wand.getType()) &&
|
||||||
{
|
is.getItemMeta().getDisplayName().equals(wand.getItemMeta().getDisplayName()) &&
|
||||||
ItemStack is = new ItemStack(Material.BLAZE_ROD);
|
is.getItemMeta().getEnchants().equals(wand.getItemMeta().getEnchants()) &&
|
||||||
is.addUnsafeEnchantment(Enchantment.ARROW_INFINITE, 1);
|
is.getItemMeta().getItemFlags().equals(wand.getItemMeta().getItemFlags());
|
||||||
ItemMeta im = is.getItemMeta();
|
}
|
||||||
im.setDisplayName(C.BOLD + "" + C.GOLD + "Wand of Iris");
|
|
||||||
im.setUnbreakable(true);
|
|
||||||
im.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_PLACED_ON, ItemFlag.HIDE_POTION_EFFECTS, ItemFlag.HIDE_DESTROYS, ItemFlag.HIDE_ENCHANTS);
|
|
||||||
im.setLore(new KList<String>().add(locationToString(a), locationToString(b)));
|
|
||||||
is.setItemMeta(im);
|
|
||||||
|
|
||||||
return is;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Location[] getCuboid(ItemStack is)
|
|
||||||
{
|
|
||||||
ItemMeta im = is.getItemMeta();
|
|
||||||
return new Location[] {stringToLocation(im.getLore().get(0)), stringToLocation(im.getLore().get(1))};
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isWand(Player p)
|
|
||||||
{
|
|
||||||
ItemStack is = p.getInventory().getItemInMainHand();
|
|
||||||
return is != null && isWand(is);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isWand(ItemStack is)
|
|
||||||
{
|
|
||||||
ItemStack wand = createWand();
|
|
||||||
if (is.getItemMeta() == null) return false;
|
|
||||||
return is.getType().equals(wand.getType()) &&
|
|
||||||
is.getItemMeta().getDisplayName().equals(wand.getItemMeta().getDisplayName()) &&
|
|
||||||
is.getItemMeta().getEnchants().equals(wand.getItemMeta().getEnchants()) &&
|
|
||||||
is.getItemMeta().getItemFlags().equals(wand.getItemMeta().getItemFlags());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,69 +11,65 @@ import com.volmit.iris.util.KList;
|
|||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
public class CommandIris extends MortarCommand
|
public class CommandIris extends MortarCommand {
|
||||||
{
|
@Command
|
||||||
@Command
|
private CommandIrisCreate create;
|
||||||
private CommandIrisCreate create;
|
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisFix fix;
|
private CommandIrisFix fix;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudio studio;
|
private CommandIrisStudio studio;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisJigsaw jigsaw;
|
private CommandIrisJigsaw jigsaw;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisObject object;
|
private CommandIrisObject object;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisRegen regen;
|
private CommandIrisRegen regen;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisDownload download;
|
private CommandIrisDownload download;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisUpdateProject updateProject;
|
private CommandIrisUpdateProject updateProject;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisUpdateWorld updateWorld;
|
private CommandIrisUpdateWorld updateWorld;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisWhat what;
|
private CommandIrisWhat what;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisMetrics metrics;
|
private CommandIrisMetrics metrics;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisPregen pregen;
|
private CommandIrisPregen pregen;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisReload reload;
|
private CommandIrisReload reload;
|
||||||
|
|
||||||
public CommandIris()
|
public CommandIris() {
|
||||||
{
|
super("iris", "ir", "irs");
|
||||||
super("iris", "ir", "irs");
|
requiresPermission(Iris.perm);
|
||||||
requiresPermission(Iris.perm);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
sender.sendMessage("Iris v" + Iris.instance.getDescription().getVersion() + " by Volmit Software");
|
||||||
sender.sendMessage("Iris v" + Iris.instance.getDescription().getVersion() + " by Volmit Software");
|
printHelp(sender);
|
||||||
printHelp(sender);
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getArgsUsage()
|
protected String getArgsUsage() {
|
||||||
{
|
return "";
|
||||||
return "";
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,50 +3,44 @@ package com.volmit.iris.manager.command;
|
|||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.util.*;
|
import com.volmit.iris.util.*;
|
||||||
|
|
||||||
public class CommandIrisDownload extends MortarCommand
|
public class CommandIrisDownload extends MortarCommand {
|
||||||
{
|
public CommandIrisDownload() {
|
||||||
public CommandIrisDownload()
|
super("download", "down", "dl");
|
||||||
{
|
requiresPermission(Iris.perm.studio);
|
||||||
super("download", "down", "dl");
|
setDescription("Download a project.");
|
||||||
requiresPermission(Iris.perm.studio);
|
setCategory("Studio");
|
||||||
setDescription("Download a project.");
|
}
|
||||||
setCategory("Studio");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
|
||||||
{
|
|
||||||
if(args.length < 1)
|
|
||||||
{
|
|
||||||
sender.sendMessage("/iris dl " + C.BOLD + "<NAME>");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean trim = false;
|
@Override
|
||||||
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
|
if (args.length < 1) {
|
||||||
|
sender.sendMessage("/iris dl " + C.BOLD + "<NAME>");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
for(String i : args)
|
boolean trim = false;
|
||||||
{
|
|
||||||
if(i.equals("-t") || i.equals("--trim"))
|
|
||||||
{
|
|
||||||
trim = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean btrim = trim;
|
for (String i : args) {
|
||||||
|
if (i.equals("-t") || i.equals("--trim")) {
|
||||||
|
trim = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
J.a(() -> Iris.proj.downloadSearch(sender, args[0], btrim));
|
boolean btrim = trim;
|
||||||
|
|
||||||
return true;
|
J.a(() -> Iris.proj.downloadSearch(sender, args[0], btrim));
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
return true;
|
||||||
protected String getArgsUsage()
|
}
|
||||||
{
|
|
||||||
return "<name> [-t/--trim]";
|
@Override
|
||||||
}
|
protected String getArgsUsage() {
|
||||||
|
return "<name> [-t/--trim]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,64 +3,54 @@ package com.volmit.iris.manager.command;
|
|||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.scaffold.IrisWorlds;
|
import com.volmit.iris.scaffold.IrisWorlds;
|
||||||
import com.volmit.iris.scaffold.engine.IrisAccess;
|
import com.volmit.iris.scaffold.engine.IrisAccess;
|
||||||
import com.volmit.iris.util.*;
|
import com.volmit.iris.util.KList;
|
||||||
|
import com.volmit.iris.util.MortarCommand;
|
||||||
|
import com.volmit.iris.util.MortarSender;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class CommandIrisMetrics extends MortarCommand
|
public class CommandIrisMetrics extends MortarCommand {
|
||||||
{
|
public CommandIrisMetrics() {
|
||||||
public CommandIrisMetrics()
|
super("metrics", "stats", "mt");
|
||||||
{
|
setDescription("Get timings for this world");
|
||||||
super("metrics", "stats", "mt");
|
requiresPermission(Iris.perm.studio);
|
||||||
setDescription("Get timings for this world");
|
setCategory("Metrics");
|
||||||
requiresPermission(Iris.perm.studio);
|
}
|
||||||
setCategory("Metrics");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
|
||||||
{
|
|
||||||
if(sender.isPlayer())
|
|
||||||
{
|
|
||||||
Player p = sender.player();
|
|
||||||
World world = p.getWorld();
|
|
||||||
if(!IrisWorlds.isIrisWorld(world))
|
|
||||||
{
|
|
||||||
sender.sendMessage("You must be in an iris world.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
IrisAccess g = IrisWorlds.access(world);
|
@Override
|
||||||
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
|
if (sender.isPlayer()) {
|
||||||
|
Player p = sender.player();
|
||||||
|
World world = p.getWorld();
|
||||||
|
if (!IrisWorlds.isIrisWorld(world)) {
|
||||||
|
sender.sendMessage("You must be in an iris world.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
try
|
IrisAccess g = IrisWorlds.access(world);
|
||||||
{
|
|
||||||
g.printMetrics(sender);
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(Throwable e)
|
try {
|
||||||
{
|
g.printMetrics(sender);
|
||||||
sender.sendMessage("You must be in an iris world.");
|
} catch (Throwable e) {
|
||||||
}
|
sender.sendMessage("You must be in an iris world.");
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
} else {
|
||||||
|
sender.sendMessage("Players only.");
|
||||||
|
}
|
||||||
|
|
||||||
else
|
return true;
|
||||||
{
|
}
|
||||||
sender.sendMessage("Players only.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
@Override
|
||||||
}
|
protected String getArgsUsage() {
|
||||||
|
return "";
|
||||||
@Override
|
}
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,33 +6,29 @@ import com.volmit.iris.util.KList;
|
|||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
public class CommandIrisReload extends MortarCommand
|
public class CommandIrisReload extends MortarCommand {
|
||||||
{
|
public CommandIrisReload() {
|
||||||
public CommandIrisReload()
|
super("reload", "rld");
|
||||||
{
|
requiresPermission(Iris.perm.studio);
|
||||||
super("reload", "rld");
|
setDescription("Reload configs");
|
||||||
requiresPermission(Iris.perm.studio);
|
setCategory("Studio");
|
||||||
setDescription("Reload configs");
|
}
|
||||||
setCategory("Studio");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
IrisSettings.invalidate();
|
||||||
IrisSettings.invalidate();
|
IrisSettings.get();
|
||||||
IrisSettings.get();
|
sender.sendMessage("settings.json Reloaded");
|
||||||
sender.sendMessage("settings.json Reloaded");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getArgsUsage()
|
protected String getArgsUsage() {
|
||||||
{
|
return "<name> [-t/--trim]";
|
||||||
return "<name> [-t/--trim]";
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,38 +3,33 @@ package com.volmit.iris.manager.command;
|
|||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.util.*;
|
import com.volmit.iris.util.*;
|
||||||
|
|
||||||
public class CommandIrisUpdateProject extends MortarCommand
|
public class CommandIrisUpdateProject extends MortarCommand {
|
||||||
{
|
public CommandIrisUpdateProject() {
|
||||||
public CommandIrisUpdateProject()
|
super("update-project", "^project");
|
||||||
{
|
requiresPermission(Iris.perm.studio);
|
||||||
super("update-project", "^project");
|
setDescription("Update a project from git.");
|
||||||
requiresPermission(Iris.perm.studio);
|
setCategory("Studio");
|
||||||
setDescription("Update a project from git.");
|
}
|
||||||
setCategory("Studio");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (args.length < 1) {
|
||||||
if(args.length < 1)
|
sender.sendMessage("/iris update-project " + C.BOLD + "<PROJECT>");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("/iris update-project " + C.BOLD + "<PROJECT>");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
J.a(() -> Iris.proj.downloadSearch(sender, args[0], false, true));
|
J.a(() -> Iris.proj.downloadSearch(sender, args[0], false, true));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getArgsUsage()
|
protected String getArgsUsage() {
|
||||||
{
|
return "<project>";
|
||||||
return "<project>";
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,31 +3,26 @@ package com.volmit.iris.manager.command;
|
|||||||
import com.volmit.iris.util.MortarPermission;
|
import com.volmit.iris.util.MortarPermission;
|
||||||
import com.volmit.iris.util.Permission;
|
import com.volmit.iris.util.Permission;
|
||||||
|
|
||||||
public class PermissionIris extends MortarPermission
|
public class PermissionIris extends MortarPermission {
|
||||||
{
|
@Permission
|
||||||
@Permission
|
public PermissionIrisStudio studio;
|
||||||
public PermissionIrisStudio studio;
|
|
||||||
|
|
||||||
public PermissionIris()
|
|
||||||
{
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
public PermissionIris() {
|
||||||
protected String getNode()
|
super();
|
||||||
{
|
}
|
||||||
return "iris";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDescription()
|
protected String getNode() {
|
||||||
{
|
return "iris";
|
||||||
return "Iris Permissions";
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isDefault()
|
public String getDescription() {
|
||||||
{
|
return "Iris Permissions";
|
||||||
return false;
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
|
public boolean isDefault() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,28 +2,23 @@ package com.volmit.iris.manager.command;
|
|||||||
|
|
||||||
import com.volmit.iris.util.MortarPermission;
|
import com.volmit.iris.util.MortarPermission;
|
||||||
|
|
||||||
public class PermissionIrisStudio extends MortarPermission
|
public class PermissionIrisStudio extends MortarPermission {
|
||||||
{
|
public PermissionIrisStudio() {
|
||||||
public PermissionIrisStudio()
|
super();
|
||||||
{
|
}
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getNode()
|
protected String getNode() {
|
||||||
{
|
return "studio";
|
||||||
return "studio";
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDescription()
|
public String getDescription() {
|
||||||
{
|
return "Iris Studio Permissions";
|
||||||
return "Iris Studio Permissions";
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isDefault()
|
public boolean isDefault() {
|
||||||
{
|
return false;
|
||||||
return false;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,56 +7,50 @@ import com.volmit.iris.util.KList;
|
|||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
public class CommandIrisJigsaw extends MortarCommand
|
public class CommandIrisJigsaw extends MortarCommand {
|
||||||
{
|
@Command
|
||||||
@Command
|
private CommandIrisJigsawNew create;
|
||||||
private CommandIrisJigsawNew create;
|
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisJigsawEdit edit;
|
private CommandIrisJigsawEdit edit;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisJigsawSave save;
|
private CommandIrisJigsawSave save;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisJigsawPlace place;
|
private CommandIrisJigsawPlace place;
|
||||||
|
|
||||||
public CommandIrisJigsaw()
|
public CommandIrisJigsaw() {
|
||||||
{
|
super("jigsaw", "jig", "jsw", "j");
|
||||||
super("jigsaw", "jig", "jsw", "j");
|
requiresPermission(Iris.perm);
|
||||||
requiresPermission(Iris.perm);
|
setCategory("Jigsaw");
|
||||||
setCategory("Jigsaw");
|
setDescription("Iris jigsaw commands");
|
||||||
setDescription("Iris jigsaw commands");
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("Ingame only");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage("Iris Jigsaw Commands:");
|
if (!sender.isPlayer()) {
|
||||||
printHelp(sender);
|
sender.sendMessage("Ingame only");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
sender.sendMessage("Iris Jigsaw Commands:");
|
||||||
protected String getArgsUsage()
|
printHelp(sender);
|
||||||
{
|
return true;
|
||||||
return "";
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
|
protected String getArgsUsage() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,59 +11,51 @@ import com.volmit.iris.util.MortarSender;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
public class CommandIrisJigsawEdit extends MortarCommand
|
public class CommandIrisJigsawEdit extends MortarCommand {
|
||||||
{
|
public CommandIrisJigsawEdit() {
|
||||||
public CommandIrisJigsawEdit()
|
super("edit", "e", "*");
|
||||||
{
|
requiresPermission(Iris.perm);
|
||||||
super("edit", "e", "*");
|
setCategory("Jigsaw");
|
||||||
requiresPermission(Iris.perm);
|
setDescription("Edit an existing Jigsaw piece");
|
||||||
setCategory("Jigsaw");
|
}
|
||||||
setDescription("Edit an existing Jigsaw piece");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("Ingame only");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(args.length < 1)
|
if (!sender.isPlayer()) {
|
||||||
{
|
sender.sendMessage("Ingame only");
|
||||||
sender.sendMessage(getArgsUsage());
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
IrisJigsawPiece piece = IrisDataManager.loadAnyJigsawPiece(args[0]);
|
if (args.length < 1) {
|
||||||
|
sender.sendMessage(getArgsUsage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if(piece != null)
|
IrisJigsawPiece piece = IrisDataManager.loadAnyJigsawPiece(args[0]);
|
||||||
{
|
|
||||||
File dest = piece.getLoadFile();
|
|
||||||
new JigsawEditor(sender.player(), piece, IrisDataManager.loadAnyObject(piece.getObject()), dest);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage("Failed to find existing jigsaw piece: " + args[0]);
|
if (piece != null) {
|
||||||
|
File dest = piece.getLoadFile();
|
||||||
|
new JigsawEditor(sender.player(), piece, IrisDataManager.loadAnyObject(piece.getObject()), dest);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
sender.sendMessage("Failed to find existing jigsaw piece: " + args[0]);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
return true;
|
||||||
protected String getArgsUsage()
|
}
|
||||||
{
|
|
||||||
return "<name>";
|
@Override
|
||||||
}
|
protected String getArgsUsage() {
|
||||||
|
return "<name>";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,12 +7,8 @@ import com.volmit.iris.util.KList;
|
|||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
import java.io.File;
|
public class CommandIrisJigsawExit extends MortarCommand {
|
||||||
|
public CommandIrisJigsawExit() {
|
||||||
public class CommandIrisJigsawExit extends MortarCommand
|
|
||||||
{
|
|
||||||
public CommandIrisJigsawExit()
|
|
||||||
{
|
|
||||||
super("exit", "x", "close", "stop");
|
super("exit", "x", "close", "stop");
|
||||||
requiresPermission(Iris.perm);
|
requiresPermission(Iris.perm);
|
||||||
setCategory("Jigsaw");
|
setCategory("Jigsaw");
|
||||||
@@ -25,24 +21,20 @@ public class CommandIrisJigsawExit extends MortarCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
|
||||||
{
|
|
||||||
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
|
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
if (!sender.isPlayer()) {
|
||||||
{
|
|
||||||
sender.sendMessage("Ingame only");
|
sender.sendMessage("Ingame only");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
JigsawEditor editor = JigsawEditor.editors.get(sender.player());
|
JigsawEditor editor = JigsawEditor.editors.get(sender.player());
|
||||||
|
|
||||||
if(editor == null)
|
if (editor == null) {
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have any pieces open to close!");
|
sender.sendMessage("You don't have any pieces open to close!");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -52,8 +44,7 @@ public class CommandIrisJigsawExit extends MortarCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getArgsUsage()
|
protected String getArgsUsage() {
|
||||||
{
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,61 +11,54 @@ import com.volmit.iris.util.MortarSender;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
public class CommandIrisJigsawNew extends MortarCommand
|
public class CommandIrisJigsawNew extends MortarCommand {
|
||||||
{
|
public CommandIrisJigsawNew() {
|
||||||
public CommandIrisJigsawNew()
|
super("create", "new", "+", "n");
|
||||||
{
|
requiresPermission(Iris.perm);
|
||||||
super("create", "new", "+", "n");
|
setCategory("Jigsaw");
|
||||||
requiresPermission(Iris.perm);
|
setDescription("Create a new jigsaw piece");
|
||||||
setCategory("Jigsaw");
|
}
|
||||||
setDescription("Create a new jigsaw piece");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("Ingame only");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(args.length != 3)
|
if (!sender.isPlayer()) {
|
||||||
{
|
sender.sendMessage("Ingame only");
|
||||||
sender.sendMessage(getArgsUsage());
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
IrisObject object = IrisDataManager.loadAnyObject(args[2]);
|
if (args.length != 3) {
|
||||||
|
sender.sendMessage(getArgsUsage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (object == null) {
|
IrisObject object = IrisDataManager.loadAnyObject(args[2]);
|
||||||
sender.sendMessage("Failed to find existing object: " + args[2]);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
File dest = Iris.instance.getDataFile("packs", args[1], "jigsaw-pieces", args[0] + ".json");
|
if (object == null) {
|
||||||
new JigsawEditor(sender.player(), null, object, dest);
|
sender.sendMessage("Failed to find existing object: " + args[2]);
|
||||||
sender.sendMessage("* Right Click blocks to make them connectors");
|
return true;
|
||||||
sender.sendMessage("* Right Click connectors to orient them");
|
}
|
||||||
sender.sendMessage("* Shift + Right Click connectors to remove them");
|
|
||||||
sender.sendMessage("Remember to use /iris jigsaw save");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
File dest = Iris.instance.getDataFile("packs", args[1], "jigsaw-pieces", args[0] + ".json");
|
||||||
protected String getArgsUsage()
|
new JigsawEditor(sender.player(), null, object, dest);
|
||||||
{
|
sender.sendMessage("* Right Click blocks to make them connectors");
|
||||||
return "<name> <project> <object>";
|
sender.sendMessage("* Right Click connectors to orient them");
|
||||||
}
|
sender.sendMessage("* Shift + Right Click connectors to remove them");
|
||||||
|
sender.sendMessage("Remember to use /iris jigsaw save");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getArgsUsage() {
|
||||||
|
return "<name> <project> <object>";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,57 +8,50 @@ import com.volmit.iris.object.IrisPosition;
|
|||||||
import com.volmit.iris.scaffold.jigsaw.PlannedStructure;
|
import com.volmit.iris.scaffold.jigsaw.PlannedStructure;
|
||||||
import com.volmit.iris.util.*;
|
import com.volmit.iris.util.*;
|
||||||
|
|
||||||
public class CommandIrisJigsawPlace extends MortarCommand
|
public class CommandIrisJigsawPlace extends MortarCommand {
|
||||||
{
|
public CommandIrisJigsawPlace() {
|
||||||
public CommandIrisJigsawPlace()
|
super("place", "paste", "p");
|
||||||
{
|
requiresPermission(Iris.perm);
|
||||||
super("place", "paste", "p");
|
setCategory("Jigsaw");
|
||||||
requiresPermission(Iris.perm);
|
setDescription("Place a jigsaw structure");
|
||||||
setCategory("Jigsaw");
|
}
|
||||||
setDescription("Place a jigsaw structure");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("Ingame only");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(args.length == 0){
|
if (!sender.isPlayer()) {
|
||||||
sender.sendMessage("You have to specify a jigsaw structure!");
|
sender.sendMessage("Ingame only");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
IrisJigsawStructure str = IrisDataManager.loadAnyJigsawStructure(args[0]);
|
if (args.length == 0) {
|
||||||
|
sender.sendMessage("You have to specify a jigsaw structure!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if(str != null)
|
IrisJigsawStructure str = IrisDataManager.loadAnyJigsawStructure(args[0]);
|
||||||
{
|
|
||||||
PrecisionStopwatch p = PrecisionStopwatch.start();
|
|
||||||
PlannedStructure ps = new PlannedStructure(str, new IrisPosition(sender.player().getLocation()), new RNG());
|
|
||||||
sender.sendMessage("Generated " + ps.getPieces().size() + " pieces in " + Form.duration(p.getMilliseconds(), 2));
|
|
||||||
ps.place(sender.player().getWorld());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
if (str != null) {
|
||||||
}
|
PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||||
|
PlannedStructure ps = new PlannedStructure(str, new IrisPosition(sender.player().getLocation()), new RNG());
|
||||||
|
sender.sendMessage("Generated " + ps.getPieces().size() + " pieces in " + Form.duration(p.getMilliseconds(), 2));
|
||||||
|
ps.place(sender.player().getWorld());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
return true;
|
||||||
protected String getArgsUsage()
|
}
|
||||||
{
|
|
||||||
return "<name>";
|
@Override
|
||||||
}
|
protected String getArgsUsage() {
|
||||||
|
return "<name>";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,51 +7,44 @@ import com.volmit.iris.util.KList;
|
|||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
public class CommandIrisJigsawSave extends MortarCommand
|
public class CommandIrisJigsawSave extends MortarCommand {
|
||||||
{
|
public CommandIrisJigsawSave() {
|
||||||
public CommandIrisJigsawSave()
|
super("save", "s");
|
||||||
{
|
requiresPermission(Iris.perm);
|
||||||
super("save", "s");
|
setCategory("Jigsaw");
|
||||||
requiresPermission(Iris.perm);
|
setDescription("Save a currently open piece");
|
||||||
setCategory("Jigsaw");
|
}
|
||||||
setDescription("Save a currently open piece");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("Ingame only");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
JigsawEditor editor = JigsawEditor.editors.get(sender.player());
|
if (!sender.isPlayer()) {
|
||||||
|
sender.sendMessage("Ingame only");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if(editor == null)
|
JigsawEditor editor = JigsawEditor.editors.get(sender.player());
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have any pieces open to save!");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
editor.close();
|
if (editor == null) {
|
||||||
return true;
|
sender.sendMessage("You don't have any pieces open to save!");
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
editor.close();
|
||||||
protected String getArgsUsage()
|
return true;
|
||||||
{
|
}
|
||||||
return "";
|
|
||||||
}
|
@Override
|
||||||
|
protected String getArgsUsage() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,71 +7,66 @@ import com.volmit.iris.util.KList;
|
|||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
public class CommandIrisObject extends MortarCommand
|
public class CommandIrisObject extends MortarCommand {
|
||||||
{
|
@Command
|
||||||
@Command
|
private CommandIrisObjectWand wand;
|
||||||
private CommandIrisObjectWand wand;
|
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisObjectDust dust;
|
private CommandIrisObjectDust dust;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisObjectXPY xpy;
|
private CommandIrisObjectXPY xpy;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisObjectXAY xay;
|
private CommandIrisObjectXAY xay;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisObjectShift shift;
|
private CommandIrisObjectShift shift;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisObjectExpand expand;
|
private CommandIrisObjectExpand expand;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisObjectContract contract;
|
private CommandIrisObjectContract contract;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisObjectP1 p1;
|
private CommandIrisObjectP1 p1;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisObjectP2 p2;
|
private CommandIrisObjectP2 p2;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisObjectSave save;
|
private CommandIrisObjectSave save;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisObjectPaste paste;
|
private CommandIrisObjectPaste paste;
|
||||||
|
|
||||||
public CommandIrisObject()
|
public CommandIrisObject() {
|
||||||
{
|
super("object", "iob", "o", "obj");
|
||||||
super("object", "iob", "o", "obj");
|
requiresPermission(Iris.perm);
|
||||||
requiresPermission(Iris.perm);
|
setCategory("Object");
|
||||||
setCategory("Object");
|
setDescription("Object Commands");
|
||||||
setDescription("Object Commands");
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage("Iris Object Commands:");
|
|
||||||
printHelp(sender);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
sender.sendMessage("Iris Object Commands:");
|
||||||
protected String getArgsUsage()
|
printHelp(sender);
|
||||||
{
|
return true;
|
||||||
return "[subcommand]";
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
|
protected String getArgsUsage() {
|
||||||
|
return "[subcommand]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+48
-55
@@ -1,71 +1,64 @@
|
|||||||
package com.volmit.iris.manager.command.object;
|
package com.volmit.iris.manager.command.object;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.IrisSettings;
|
||||||
|
import com.volmit.iris.manager.WandManager;
|
||||||
import com.volmit.iris.util.*;
|
import com.volmit.iris.util.*;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
public class CommandIrisObjectContract extends MortarCommand {
|
||||||
import com.volmit.iris.IrisSettings;
|
public CommandIrisObjectContract() {
|
||||||
import com.volmit.iris.manager.WandManager;
|
super("-");
|
||||||
|
requiresPermission(Iris.perm);
|
||||||
public class CommandIrisObjectContract extends MortarCommand
|
setCategory("Object");
|
||||||
{
|
setDescription("Contract a selection based on your looking direction");
|
||||||
public CommandIrisObjectContract()
|
}
|
||||||
{
|
|
||||||
super("-");
|
|
||||||
requiresPermission(Iris.perm);
|
|
||||||
setCategory("Object");
|
|
||||||
setDescription("Contract a selection based on your looking direction");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
|
||||||
{
|
|
||||||
if(!IrisSettings.get().isStudio())
|
|
||||||
{
|
|
||||||
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have a wand");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player p = sender.player();
|
@Override
|
||||||
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
|
if (!IrisSettings.get().isStudio()) {
|
||||||
|
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if(!WandManager.isWand(p))
|
if (!sender.isPlayer()) {
|
||||||
{
|
sender.sendMessage("You don't have a wand");
|
||||||
sender.sendMessage("Ready your Wand.");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
int amt = args.length == 1 ? Integer.valueOf(args[0]) : 1;
|
Player p = sender.player();
|
||||||
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
|
|
||||||
Location a1 = b[0].clone();
|
|
||||||
Location a2 = b[1].clone();
|
|
||||||
Cuboid cursor = new Cuboid(a1, a2);
|
|
||||||
Direction d = Direction.closest(p.getLocation().getDirection()).reverse();
|
|
||||||
cursor = cursor.expand(d, -amt);
|
|
||||||
b[0] = cursor.getLowerNE();
|
|
||||||
b[1] = cursor.getUpperSW();
|
|
||||||
p.getInventory().setItemInMainHand(WandManager.createWand(b[0], b[1]));
|
|
||||||
p.updateInventory();
|
|
||||||
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f);
|
|
||||||
|
|
||||||
return true;
|
if (!WandManager.isWand(p)) {
|
||||||
}
|
sender.sendMessage("Ready your Wand.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
int amt = args.length == 1 ? Integer.valueOf(args[0]) : 1;
|
||||||
protected String getArgsUsage()
|
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
|
||||||
{
|
Location a1 = b[0].clone();
|
||||||
return "[amt]";
|
Location a2 = b[1].clone();
|
||||||
}
|
Cuboid cursor = new Cuboid(a1, a2);
|
||||||
|
Direction d = Direction.closest(p.getLocation().getDirection()).reverse();
|
||||||
|
cursor = cursor.expand(d, -amt);
|
||||||
|
b[0] = cursor.getLowerNE();
|
||||||
|
b[1] = cursor.getUpperSW();
|
||||||
|
p.getInventory().setItemInMainHand(WandManager.createWand(b[0], b[1]));
|
||||||
|
p.updateInventory();
|
||||||
|
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getArgsUsage() {
|
||||||
|
return "[amt]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,45 +8,39 @@ import com.volmit.iris.util.MortarCommand;
|
|||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
|
|
||||||
public class CommandIrisObjectDust extends MortarCommand
|
public class CommandIrisObjectDust extends MortarCommand {
|
||||||
{
|
public CommandIrisObjectDust() {
|
||||||
public CommandIrisObjectDust()
|
super("dust", "dst", "d");
|
||||||
{
|
requiresPermission(Iris.perm);
|
||||||
super("dust", "dst", "d");
|
setCategory("Object");
|
||||||
requiresPermission(Iris.perm);
|
setDescription("Get a powder that reveals placed objects");
|
||||||
setCategory("Object");
|
}
|
||||||
setDescription("Get a powder that reveals placed objects");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have an inventory");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.player().getInventory().addItem(WandManager.createDust());
|
if (!sender.isPlayer()) {
|
||||||
sender.player().playSound(sender.player().getLocation(), Sound.AMBIENT_SOUL_SAND_VALLEY_ADDITIONS, 1f, 1.5f);
|
sender.sendMessage("You don't have an inventory");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
sender.player().getInventory().addItem(WandManager.createDust());
|
||||||
}
|
sender.player().playSound(sender.player().getLocation(), Sound.AMBIENT_SOUL_SAND_VALLEY_ADDITIONS, 1f, 1.5f);
|
||||||
|
|
||||||
@Override
|
return true;
|
||||||
protected String getArgsUsage()
|
}
|
||||||
{
|
|
||||||
return "[subcommand]";
|
@Override
|
||||||
}
|
protected String getArgsUsage() {
|
||||||
|
return "[subcommand]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,71 +1,64 @@
|
|||||||
package com.volmit.iris.manager.command.object;
|
package com.volmit.iris.manager.command.object;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.IrisSettings;
|
||||||
|
import com.volmit.iris.manager.WandManager;
|
||||||
import com.volmit.iris.util.*;
|
import com.volmit.iris.util.*;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
public class CommandIrisObjectExpand extends MortarCommand {
|
||||||
import com.volmit.iris.IrisSettings;
|
public CommandIrisObjectExpand() {
|
||||||
import com.volmit.iris.manager.WandManager;
|
super("+");
|
||||||
|
requiresPermission(Iris.perm);
|
||||||
public class CommandIrisObjectExpand extends MortarCommand
|
setCategory("Object");
|
||||||
{
|
setDescription("Expand based on looking direction");
|
||||||
public CommandIrisObjectExpand()
|
}
|
||||||
{
|
|
||||||
super("+");
|
|
||||||
requiresPermission(Iris.perm);
|
|
||||||
setCategory("Object");
|
|
||||||
setDescription("Expand based on looking direction");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
|
||||||
{
|
|
||||||
if(!IrisSettings.get().isStudio())
|
|
||||||
{
|
|
||||||
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have a wand");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player p = sender.player();
|
@Override
|
||||||
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
|
if (!IrisSettings.get().isStudio()) {
|
||||||
|
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if(!WandManager.isWand(p))
|
if (!sender.isPlayer()) {
|
||||||
{
|
sender.sendMessage("You don't have a wand");
|
||||||
sender.sendMessage("Ready your Wand.");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
int amt = args.length == 1 ? Integer.valueOf(args[0]) : 1;
|
Player p = sender.player();
|
||||||
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
|
|
||||||
Location a1 = b[0].clone();
|
|
||||||
Location a2 = b[1].clone();
|
|
||||||
Cuboid cursor = new Cuboid(a1, a2);
|
|
||||||
Direction d = Direction.closest(p.getLocation().getDirection()).reverse();
|
|
||||||
cursor = cursor.expand(d, amt);
|
|
||||||
b[0] = cursor.getLowerNE();
|
|
||||||
b[1] = cursor.getUpperSW();
|
|
||||||
p.getInventory().setItemInMainHand(WandManager.createWand(b[0], b[1]));
|
|
||||||
p.updateInventory();
|
|
||||||
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f);
|
|
||||||
|
|
||||||
return true;
|
if (!WandManager.isWand(p)) {
|
||||||
}
|
sender.sendMessage("Ready your Wand.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
int amt = args.length == 1 ? Integer.valueOf(args[0]) : 1;
|
||||||
protected String getArgsUsage()
|
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
|
||||||
{
|
Location a1 = b[0].clone();
|
||||||
return "[amt]";
|
Location a2 = b[1].clone();
|
||||||
}
|
Cuboid cursor = new Cuboid(a1, a2);
|
||||||
|
Direction d = Direction.closest(p.getLocation().getDirection()).reverse();
|
||||||
|
cursor = cursor.expand(d, amt);
|
||||||
|
b[0] = cursor.getLowerNE();
|
||||||
|
b[1] = cursor.getUpperSW();
|
||||||
|
p.getInventory().setItemInMainHand(WandManager.createWand(b[0], b[1]));
|
||||||
|
p.updateInventory();
|
||||||
|
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getArgsUsage() {
|
||||||
|
return "[amt]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,80 +1,71 @@
|
|||||||
package com.volmit.iris.manager.command.object;
|
package com.volmit.iris.manager.command.object;
|
||||||
|
|
||||||
import java.util.Set;
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.IrisSettings;
|
||||||
|
import com.volmit.iris.manager.WandManager;
|
||||||
import com.volmit.iris.util.KList;
|
import com.volmit.iris.util.KList;
|
||||||
|
import com.volmit.iris.util.MortarCommand;
|
||||||
|
import com.volmit.iris.util.MortarSender;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import java.util.Set;
|
||||||
import com.volmit.iris.IrisSettings;
|
|
||||||
import com.volmit.iris.manager.WandManager;
|
|
||||||
import com.volmit.iris.util.MortarCommand;
|
|
||||||
import com.volmit.iris.util.MortarSender;
|
|
||||||
|
|
||||||
public class CommandIrisObjectP1 extends MortarCommand
|
public class CommandIrisObjectP1 extends MortarCommand {
|
||||||
{
|
public CommandIrisObjectP1() {
|
||||||
public CommandIrisObjectP1()
|
super("p1");
|
||||||
{
|
requiresPermission(Iris.perm);
|
||||||
super("p1");
|
setCategory("Object");
|
||||||
requiresPermission(Iris.perm);
|
setDescription("Set point 1 to pos (or look)");
|
||||||
setCategory("Object");
|
}
|
||||||
setDescription("Set point 1 to pos (or look)");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
@Override
|
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
|
||||||
{
|
|
||||||
if(!IrisSettings.get().isStudio())
|
|
||||||
{
|
|
||||||
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have a wand");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player p = sender.player();
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
|
if (!IrisSettings.get().isStudio()) {
|
||||||
|
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if(!WandManager.isWand(p))
|
if (!sender.isPlayer()) {
|
||||||
{
|
sender.sendMessage("You don't have a wand");
|
||||||
sender.sendMessage("Ready your Wand.");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ItemStack wand = p.getInventory().getItemInMainHand();
|
Player p = sender.player();
|
||||||
|
|
||||||
if(WandManager.isWand(wand))
|
if (!WandManager.isWand(p)) {
|
||||||
{
|
sender.sendMessage("Ready your Wand.");
|
||||||
Location[] g = WandManager.getCuboid(wand);
|
return true;
|
||||||
g[0] = p.getLocation().getBlock().getLocation().clone().add(0, -1, 0);
|
}
|
||||||
|
|
||||||
if(args.length == 1 && args[0].equals("-l"))
|
|
||||||
{
|
|
||||||
// TODO: WARNING HEIGHT
|
|
||||||
g[0] = p.getTargetBlock((Set<Material>) null, 256).getLocation().clone();
|
|
||||||
}
|
|
||||||
|
|
||||||
p.setItemInHand(WandManager.createWand(g[0], g[1]));
|
ItemStack wand = p.getInventory().getItemInMainHand();
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
if (WandManager.isWand(wand)) {
|
||||||
}
|
Location[] g = WandManager.getCuboid(wand);
|
||||||
|
g[0] = p.getLocation().getBlock().getLocation().clone().add(0, -1, 0);
|
||||||
|
|
||||||
@Override
|
if (args.length == 1 && args[0].equals("-l")) {
|
||||||
protected String getArgsUsage()
|
// TODO: WARNING HEIGHT
|
||||||
{
|
g[0] = p.getTargetBlock(null, 256).getLocation().clone();
|
||||||
return "[-l]";
|
}
|
||||||
}
|
|
||||||
|
p.setItemInHand(WandManager.createWand(g[0], g[1]));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getArgsUsage() {
|
||||||
|
return "[-l]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,80 +1,71 @@
|
|||||||
package com.volmit.iris.manager.command.object;
|
package com.volmit.iris.manager.command.object;
|
||||||
|
|
||||||
import java.util.Set;
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.IrisSettings;
|
||||||
|
import com.volmit.iris.manager.WandManager;
|
||||||
import com.volmit.iris.util.KList;
|
import com.volmit.iris.util.KList;
|
||||||
|
import com.volmit.iris.util.MortarCommand;
|
||||||
|
import com.volmit.iris.util.MortarSender;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import java.util.Set;
|
||||||
import com.volmit.iris.IrisSettings;
|
|
||||||
import com.volmit.iris.manager.WandManager;
|
|
||||||
import com.volmit.iris.util.MortarCommand;
|
|
||||||
import com.volmit.iris.util.MortarSender;
|
|
||||||
|
|
||||||
public class CommandIrisObjectP2 extends MortarCommand
|
public class CommandIrisObjectP2 extends MortarCommand {
|
||||||
{
|
public CommandIrisObjectP2() {
|
||||||
public CommandIrisObjectP2()
|
super("p2");
|
||||||
{
|
requiresPermission(Iris.perm);
|
||||||
super("p2");
|
setCategory("Object");
|
||||||
requiresPermission(Iris.perm);
|
setDescription("Set point 1 to pos (or look)");
|
||||||
setCategory("Object");
|
}
|
||||||
setDescription("Set point 1 to pos (or look)");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
@Override
|
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
|
||||||
{
|
|
||||||
if(!IrisSettings.get().isStudio())
|
|
||||||
{
|
|
||||||
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have a wand");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player p = sender.player();
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
|
if (!IrisSettings.get().isStudio()) {
|
||||||
|
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if(!WandManager.isWand(p))
|
if (!sender.isPlayer()) {
|
||||||
{
|
sender.sendMessage("You don't have a wand");
|
||||||
sender.sendMessage("Ready your Wand.");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ItemStack wand = p.getInventory().getItemInMainHand();
|
Player p = sender.player();
|
||||||
|
|
||||||
if(WandManager.isWand(wand))
|
if (!WandManager.isWand(p)) {
|
||||||
{
|
sender.sendMessage("Ready your Wand.");
|
||||||
Location[] g = WandManager.getCuboid(wand);
|
return true;
|
||||||
g[1] = p.getLocation().getBlock().getLocation().clone().add(0, -1, 0);
|
}
|
||||||
|
|
||||||
if(args.length == 1 && args[0].equals("-l"))
|
ItemStack wand = p.getInventory().getItemInMainHand();
|
||||||
{
|
|
||||||
// TODO: WARNING HEIGHT
|
|
||||||
g[1] = p.getTargetBlock((Set<Material>) null, 256).getLocation().clone();
|
|
||||||
}
|
|
||||||
|
|
||||||
p.setItemInHand(WandManager.createWand(g[0], g[1]));
|
if (WandManager.isWand(wand)) {
|
||||||
}
|
Location[] g = WandManager.getCuboid(wand);
|
||||||
|
g[1] = p.getLocation().getBlock().getLocation().clone().add(0, -1, 0);
|
||||||
|
|
||||||
return true;
|
if (args.length == 1 && args[0].equals("-l")) {
|
||||||
}
|
// TODO: WARNING HEIGHT
|
||||||
|
g[1] = p.getTargetBlock(null, 256).getLocation().clone();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
p.setItemInHand(WandManager.createWand(g[0], g[1]));
|
||||||
protected String getArgsUsage()
|
}
|
||||||
{
|
|
||||||
return "[-l]";
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getArgsUsage() {
|
||||||
|
return "[-l]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,96 +18,85 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class CommandIrisObjectPaste extends MortarCommand
|
public class CommandIrisObjectPaste extends MortarCommand {
|
||||||
{
|
public CommandIrisObjectPaste() {
|
||||||
public CommandIrisObjectPaste()
|
super("paste", "pasta", "place", "p");
|
||||||
{
|
requiresPermission(Iris.perm);
|
||||||
super("paste", "pasta", "place", "p");
|
setCategory("Object");
|
||||||
requiresPermission(Iris.perm);
|
setDescription("Paste an object");
|
||||||
setCategory("Object");
|
}
|
||||||
setDescription("Paste an object");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
|
||||||
{
|
|
||||||
if(!IrisSettings.get().isStudio())
|
|
||||||
{
|
|
||||||
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
@Override
|
||||||
{
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
sender.sendMessage("You don't have a wand");
|
if (!IrisSettings.get().isStudio()) {
|
||||||
return true;
|
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if(args.length == 0){
|
if (!sender.isPlayer()) {
|
||||||
sender.sendMessage("Please specify the name of of the object want to paste");
|
sender.sendMessage("You don't have a wand");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Player p = sender.player();
|
if (args.length == 0) {
|
||||||
IrisObject obj = IrisDataManager.loadAnyObject(args[0]);
|
sender.sendMessage("Please specify the name of of the object want to paste");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if(obj == null)
|
Player p = sender.player();
|
||||||
{
|
IrisObject obj = IrisDataManager.loadAnyObject(args[0]);
|
||||||
|
|
||||||
sender.sendMessage("Can't find " + args[0] + " in the " + ProjectManager.WORKSPACE_NAME + " folder");
|
if (obj == null) {
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
File file = obj.getLoadFile();
|
sender.sendMessage("Can't find " + args[0] + " in the " + ProjectManager.WORKSPACE_NAME + " folder");
|
||||||
boolean intoWand = false;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
for(String i : args)
|
File file = obj.getLoadFile();
|
||||||
{
|
boolean intoWand = false;
|
||||||
if(i.equalsIgnoreCase("-edit"))
|
|
||||||
{
|
|
||||||
intoWand = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(file == null || !file.exists())
|
for (String i : args) {
|
||||||
{
|
if (i.equalsIgnoreCase("-edit")) {
|
||||||
sender.sendMessage("Can't find " + args[0] + " in the " + ProjectManager.WORKSPACE_NAME + " folder");
|
intoWand = true;
|
||||||
return true;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemStack wand = sender.player().getInventory().getItemInMainHand();
|
if (file == null || !file.exists()) {
|
||||||
|
sender.sendMessage("Can't find " + args[0] + " in the " + ProjectManager.WORKSPACE_NAME + " folder");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
IrisObject o = IrisDataManager.loadAnyObject(args[0]);
|
ItemStack wand = sender.player().getInventory().getItemInMainHand();
|
||||||
if(o == null)
|
|
||||||
{
|
|
||||||
sender.sendMessage("Error, cant find");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
sender.sendMessage("Loaded " + "objects/" + args[0] + ".iob");
|
|
||||||
|
|
||||||
sender.player().getWorld().playSound(sender.player().getLocation(), Sound.BLOCK_ENCHANTMENT_TABLE_USE, 1f, 1.5f);
|
IrisObject o = IrisDataManager.loadAnyObject(args[0]);
|
||||||
Location block = sender.player().getTargetBlock((Set<Material>) null, 256).getLocation().clone().add(0, 1, 0);
|
if (o == null) {
|
||||||
|
sender.sendMessage("Error, cant find");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
sender.sendMessage("Loaded " + "objects/" + args[0] + ".iob");
|
||||||
|
|
||||||
if(intoWand && WandManager.isWand(wand))
|
sender.player().getWorld().playSound(sender.player().getLocation(), Sound.BLOCK_ENCHANTMENT_TABLE_USE, 1f, 1.5f);
|
||||||
{
|
Location block = sender.player().getTargetBlock(null, 256).getLocation().clone().add(0, 1, 0);
|
||||||
wand = WandManager.createWand(block.clone().subtract(o.getCenter()).add(o.getW() - 1, o.getH(), o.getD() - 1), block.clone().subtract(o.getCenter()));
|
|
||||||
p.getInventory().setItemInMainHand(wand);
|
|
||||||
sender.sendMessage("Updated wand for " + "objects/" + args[0] + ".iob");
|
|
||||||
}
|
|
||||||
|
|
||||||
WandManager.pasteSchematic(o, block);
|
if (intoWand && WandManager.isWand(wand)) {
|
||||||
sender.sendMessage("Placed " + "objects/" + args[0] + ".iob");
|
wand = WandManager.createWand(block.clone().subtract(o.getCenter()).add(o.getW() - 1, o.getH(), o.getD() - 1), block.clone().subtract(o.getCenter()));
|
||||||
|
p.getInventory().setItemInMainHand(wand);
|
||||||
|
sender.sendMessage("Updated wand for " + "objects/" + args[0] + ".iob");
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
WandManager.pasteSchematic(o, block);
|
||||||
}
|
sender.sendMessage("Placed " + "objects/" + args[0] + ".iob");
|
||||||
|
|
||||||
@Override
|
return true;
|
||||||
protected String getArgsUsage()
|
}
|
||||||
{
|
|
||||||
return "[name] [-edit]";
|
@Override
|
||||||
}
|
protected String getArgsUsage() {
|
||||||
|
return "[name] [-edit]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,100 +1,85 @@
|
|||||||
package com.volmit.iris.manager.command.object;
|
package com.volmit.iris.manager.command.object;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
|
|
||||||
import com.volmit.iris.util.KList;
|
|
||||||
import org.bukkit.Sound;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.IrisSettings;
|
import com.volmit.iris.IrisSettings;
|
||||||
import com.volmit.iris.manager.WandManager;
|
import com.volmit.iris.manager.WandManager;
|
||||||
import com.volmit.iris.object.IrisObject;
|
import com.volmit.iris.object.IrisObject;
|
||||||
|
import com.volmit.iris.util.KList;
|
||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class CommandIrisObjectSave extends MortarCommand
|
import java.io.File;
|
||||||
{
|
|
||||||
public CommandIrisObjectSave()
|
public class CommandIrisObjectSave extends MortarCommand {
|
||||||
{
|
public CommandIrisObjectSave() {
|
||||||
super("save", "s");
|
super("save", "s");
|
||||||
requiresPermission(Iris.perm);
|
requiresPermission(Iris.perm);
|
||||||
setCategory("Object");
|
setCategory("Object");
|
||||||
setDescription("Save an object");
|
setDescription("Save an object");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
|
||||||
{
|
|
||||||
if(!IrisSettings.get().isStudio())
|
|
||||||
{
|
|
||||||
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have a wand");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(args.length < 2)
|
@Override
|
||||||
{
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
sender.sendMessage("/iris o save <project> <object>");
|
if (!IrisSettings.get().isStudio()) {
|
||||||
sender.sendMessage("I.e. /iris o save overworld some-tree/tree1");
|
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
if (!sender.isPlayer()) {
|
||||||
{
|
sender.sendMessage("You don't have a wand");
|
||||||
boolean overwrite = false;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
for(String i : args)
|
if (args.length < 2) {
|
||||||
{
|
sender.sendMessage("/iris o save <project> <object>");
|
||||||
if(i.equals("-o"))
|
sender.sendMessage("I.e. /iris o save overworld some-tree/tree1");
|
||||||
{
|
return true;
|
||||||
overwrite = true;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Player p = sender.player();
|
try {
|
||||||
ItemStack wand = p.getInventory().getItemInMainHand();
|
boolean overwrite = false;
|
||||||
IrisObject o = WandManager.createSchematic(wand);
|
|
||||||
File file = Iris.proj.getWorkspaceFile(args[0], "objects", args[1] + ".iob");
|
|
||||||
|
|
||||||
if(file.exists())
|
for (String i : args) {
|
||||||
{
|
if (i.equals("-o")) {
|
||||||
if(!overwrite)
|
overwrite = true;
|
||||||
{
|
}
|
||||||
sender.sendMessage("File Exists. Overwrite by adding -o");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
o.write(file);
|
Player p = sender.player();
|
||||||
sender.sendMessage("Saved " + args[1]);
|
ItemStack wand = p.getInventory().getItemInMainHand();
|
||||||
p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ENCHANTMENT_TABLE_USE, 1f, 1.5f);
|
IrisObject o = WandManager.createSchematic(wand);
|
||||||
}
|
File file = Iris.proj.getWorkspaceFile(args[0], "objects", args[1] + ".iob");
|
||||||
|
|
||||||
catch(Throwable e)
|
if (file.exists()) {
|
||||||
{
|
if (!overwrite) {
|
||||||
sender.sendMessage("Failed to save " + args[1] + ". Are you holding your wand?");
|
sender.sendMessage("File Exists. Overwrite by adding -o");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
e.printStackTrace();
|
o.write(file);
|
||||||
}
|
sender.sendMessage("Saved " + args[1]);
|
||||||
|
p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ENCHANTMENT_TABLE_USE, 1f, 1.5f);
|
||||||
|
} catch (Throwable e) {
|
||||||
|
sender.sendMessage("Failed to save " + args[1] + ". Are you holding your wand?");
|
||||||
|
|
||||||
return true;
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
return true;
|
||||||
protected String getArgsUsage()
|
}
|
||||||
{
|
|
||||||
return "[project] [name]";
|
@Override
|
||||||
}
|
protected String getArgsUsage() {
|
||||||
|
return "[project] [name]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,72 +1,65 @@
|
|||||||
package com.volmit.iris.manager.command.object;
|
package com.volmit.iris.manager.command.object;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.IrisSettings;
|
||||||
|
import com.volmit.iris.manager.WandManager;
|
||||||
import com.volmit.iris.util.*;
|
import com.volmit.iris.util.*;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
public class CommandIrisObjectShift extends MortarCommand {
|
||||||
import com.volmit.iris.IrisSettings;
|
public CommandIrisObjectShift() {
|
||||||
import com.volmit.iris.manager.WandManager;
|
super(">");
|
||||||
|
requiresPermission(Iris.perm);
|
||||||
public class CommandIrisObjectShift extends MortarCommand
|
setCategory("Object");
|
||||||
{
|
setDescription("Shift selection based on direction");
|
||||||
public CommandIrisObjectShift()
|
}
|
||||||
{
|
|
||||||
super(">");
|
|
||||||
requiresPermission(Iris.perm);
|
|
||||||
setCategory("Object");
|
|
||||||
setDescription("Shift selection based on direction");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
|
||||||
{
|
|
||||||
if(!IrisSettings.get().isStudio())
|
|
||||||
{
|
|
||||||
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have a wand");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player p = sender.player();
|
@Override
|
||||||
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
|
if (!IrisSettings.get().isStudio()) {
|
||||||
|
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if(!WandManager.isWand(p))
|
if (!sender.isPlayer()) {
|
||||||
{
|
sender.sendMessage("You don't have a wand");
|
||||||
sender.sendMessage("Ready your Wand.");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
int amt = args.length == 1 ? Integer.valueOf(args[0]) : 1;
|
Player p = sender.player();
|
||||||
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
|
|
||||||
Location a1 = b[0].clone();
|
|
||||||
Location a2 = b[1].clone();
|
|
||||||
Direction d = Direction.closest(p.getLocation().getDirection()).reverse();
|
|
||||||
a1.add(d.toVector().multiply(amt));
|
|
||||||
a2.add(d.toVector().multiply(amt));
|
|
||||||
Cuboid cursor = new Cuboid(a1, a2);
|
|
||||||
b[0] = cursor.getLowerNE();
|
|
||||||
b[1] = cursor.getUpperSW();
|
|
||||||
p.getInventory().setItemInMainHand(WandManager.createWand(b[0], b[1]));
|
|
||||||
p.updateInventory();
|
|
||||||
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f);
|
|
||||||
|
|
||||||
return true;
|
if (!WandManager.isWand(p)) {
|
||||||
}
|
sender.sendMessage("Ready your Wand.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
int amt = args.length == 1 ? Integer.valueOf(args[0]) : 1;
|
||||||
protected String getArgsUsage()
|
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
|
||||||
{
|
Location a1 = b[0].clone();
|
||||||
return "[amt]";
|
Location a2 = b[1].clone();
|
||||||
}
|
Direction d = Direction.closest(p.getLocation().getDirection()).reverse();
|
||||||
|
a1.add(d.toVector().multiply(amt));
|
||||||
|
a2.add(d.toVector().multiply(amt));
|
||||||
|
Cuboid cursor = new Cuboid(a1, a2);
|
||||||
|
b[0] = cursor.getLowerNE();
|
||||||
|
b[1] = cursor.getUpperSW();
|
||||||
|
p.getInventory().setItemInMainHand(WandManager.createWand(b[0], b[1]));
|
||||||
|
p.updateInventory();
|
||||||
|
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getArgsUsage() {
|
||||||
|
return "[amt]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,53 +1,47 @@
|
|||||||
package com.volmit.iris.manager.command.object;
|
package com.volmit.iris.manager.command.object;
|
||||||
|
|
||||||
import com.volmit.iris.util.KList;
|
|
||||||
import org.bukkit.Sound;
|
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.IrisSettings;
|
import com.volmit.iris.IrisSettings;
|
||||||
import com.volmit.iris.manager.WandManager;
|
import com.volmit.iris.manager.WandManager;
|
||||||
|
import com.volmit.iris.util.KList;
|
||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
|
||||||
public class CommandIrisObjectWand extends MortarCommand
|
public class CommandIrisObjectWand extends MortarCommand {
|
||||||
{
|
public CommandIrisObjectWand() {
|
||||||
public CommandIrisObjectWand()
|
super("wand", "w");
|
||||||
{
|
requiresPermission(Iris.perm);
|
||||||
super("wand", "w");
|
setCategory("Object");
|
||||||
requiresPermission(Iris.perm);
|
setDescription("Get an Iris Wand for selecting objects");
|
||||||
setCategory("Object");
|
}
|
||||||
setDescription("Get an Iris Wand for selecting objects");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
|
||||||
{
|
|
||||||
if(!IrisSettings.get().isStudio())
|
|
||||||
{
|
|
||||||
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have an inventory");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.player().getInventory().addItem(WandManager.createWand());
|
@Override
|
||||||
sender.player().playSound(sender.player().getLocation(), Sound.ITEM_ARMOR_EQUIP_NETHERITE, 1f, 1.5f);
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
|
if (!IrisSettings.get().isStudio()) {
|
||||||
|
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
if (!sender.isPlayer()) {
|
||||||
}
|
sender.sendMessage("You don't have an inventory");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
sender.player().getInventory().addItem(WandManager.createWand());
|
||||||
protected String getArgsUsage()
|
sender.player().playSound(sender.player().getLocation(), Sound.ITEM_ARMOR_EQUIP_NETHERITE, 1f, 1.5f);
|
||||||
{
|
|
||||||
return "[subcommand]";
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getArgsUsage() {
|
||||||
|
return "[subcommand]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,104 +1,95 @@
|
|||||||
package com.volmit.iris.manager.command.object;
|
package com.volmit.iris.manager.command.object;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.IrisSettings;
|
||||||
|
import com.volmit.iris.manager.WandManager;
|
||||||
|
import com.volmit.iris.util.Cuboid;
|
||||||
|
import com.volmit.iris.util.Cuboid.CuboidDirection;
|
||||||
import com.volmit.iris.util.KList;
|
import com.volmit.iris.util.KList;
|
||||||
|
import com.volmit.iris.util.MortarCommand;
|
||||||
|
import com.volmit.iris.util.MortarSender;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
public class CommandIrisObjectXAY extends MortarCommand {
|
||||||
import com.volmit.iris.IrisSettings;
|
public CommandIrisObjectXAY() {
|
||||||
import com.volmit.iris.manager.WandManager;
|
super("x&y");
|
||||||
import com.volmit.iris.util.Cuboid;
|
requiresPermission(Iris.perm);
|
||||||
import com.volmit.iris.util.MortarCommand;
|
setCategory("Object");
|
||||||
import com.volmit.iris.util.MortarSender;
|
setDescription("Auto select up, down and out");
|
||||||
import com.volmit.iris.util.Cuboid.CuboidDirection;
|
}
|
||||||
|
|
||||||
public class CommandIrisObjectXAY extends MortarCommand
|
|
||||||
{
|
|
||||||
public CommandIrisObjectXAY()
|
|
||||||
{
|
|
||||||
super("x&y");
|
|
||||||
requiresPermission(Iris.perm);
|
|
||||||
setCategory("Object");
|
|
||||||
setDescription("Auto select up, down and out");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
|
||||||
{
|
|
||||||
if(!IrisSettings.get().isStudio())
|
|
||||||
{
|
|
||||||
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have a wand");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player p = sender.player();
|
@Override
|
||||||
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
|
if (!IrisSettings.get().isStudio()) {
|
||||||
|
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if(!WandManager.isWand(p))
|
if (!sender.isPlayer()) {
|
||||||
{
|
sender.sendMessage("You don't have a wand");
|
||||||
sender.sendMessage("Ready your Wand.");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
|
Player p = sender.player();
|
||||||
Location a1 = b[0].clone();
|
|
||||||
Location a2 = b[1].clone();
|
|
||||||
Location a1x = b[0].clone();
|
|
||||||
Location a2x = b[1].clone();
|
|
||||||
Cuboid cursor = new Cuboid(a1, a2);
|
|
||||||
Cuboid cursorx = new Cuboid(a1, a2);
|
|
||||||
|
|
||||||
while(!cursor.containsOnly(Material.AIR))
|
if (!WandManager.isWand(p)) {
|
||||||
{
|
sender.sendMessage("Ready your Wand.");
|
||||||
a1.add(new Vector(0, 1, 0));
|
return true;
|
||||||
a2.add(new Vector(0, 1, 0));
|
}
|
||||||
cursor = new Cuboid(a1, a2);
|
|
||||||
}
|
|
||||||
|
|
||||||
a1.add(new Vector(0, -1, 0));
|
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
|
||||||
a2.add(new Vector(0, -1, 0));
|
Location a1 = b[0].clone();
|
||||||
|
Location a2 = b[1].clone();
|
||||||
|
Location a1x = b[0].clone();
|
||||||
|
Location a2x = b[1].clone();
|
||||||
|
Cuboid cursor = new Cuboid(a1, a2);
|
||||||
|
Cuboid cursorx = new Cuboid(a1, a2);
|
||||||
|
|
||||||
while(!cursorx.containsOnly(Material.AIR))
|
while (!cursor.containsOnly(Material.AIR)) {
|
||||||
{
|
a1.add(new Vector(0, 1, 0));
|
||||||
a1x.add(new Vector(0, -1, 0));
|
a2.add(new Vector(0, 1, 0));
|
||||||
a2x.add(new Vector(0, -1, 0));
|
cursor = new Cuboid(a1, a2);
|
||||||
cursorx = new Cuboid(a1x, a2x);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
a1x.add(new Vector(0, 1, 0));
|
a1.add(new Vector(0, -1, 0));
|
||||||
a2x.add(new Vector(0, 1, 0));
|
a2.add(new Vector(0, -1, 0));
|
||||||
b[0] = a1;
|
|
||||||
b[1] = a2x;
|
|
||||||
cursor = new Cuboid(b[0], b[1]);
|
|
||||||
cursor = cursor.contract(CuboidDirection.North);
|
|
||||||
cursor = cursor.contract(CuboidDirection.South);
|
|
||||||
cursor = cursor.contract(CuboidDirection.East);
|
|
||||||
cursor = cursor.contract(CuboidDirection.West);
|
|
||||||
b[0] = cursor.getLowerNE();
|
|
||||||
b[1] = cursor.getUpperSW();
|
|
||||||
p.getInventory().setItemInMainHand(WandManager.createWand(b[0], b[1]));
|
|
||||||
p.updateInventory();
|
|
||||||
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f);
|
|
||||||
|
|
||||||
return true;
|
while (!cursorx.containsOnly(Material.AIR)) {
|
||||||
}
|
a1x.add(new Vector(0, -1, 0));
|
||||||
|
a2x.add(new Vector(0, -1, 0));
|
||||||
|
cursorx = new Cuboid(a1x, a2x);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
a1x.add(new Vector(0, 1, 0));
|
||||||
protected String getArgsUsage()
|
a2x.add(new Vector(0, 1, 0));
|
||||||
{
|
b[0] = a1;
|
||||||
return "[subcommand]";
|
b[1] = a2x;
|
||||||
}
|
cursor = new Cuboid(b[0], b[1]);
|
||||||
|
cursor = cursor.contract(CuboidDirection.North);
|
||||||
|
cursor = cursor.contract(CuboidDirection.South);
|
||||||
|
cursor = cursor.contract(CuboidDirection.East);
|
||||||
|
cursor = cursor.contract(CuboidDirection.West);
|
||||||
|
b[0] = cursor.getLowerNE();
|
||||||
|
b[1] = cursor.getUpperSW();
|
||||||
|
p.getInventory().setItemInMainHand(WandManager.createWand(b[0], b[1]));
|
||||||
|
p.updateInventory();
|
||||||
|
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getArgsUsage() {
|
||||||
|
return "[subcommand]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,92 +1,83 @@
|
|||||||
package com.volmit.iris.manager.command.object;
|
package com.volmit.iris.manager.command.object;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.IrisSettings;
|
||||||
|
import com.volmit.iris.manager.WandManager;
|
||||||
|
import com.volmit.iris.util.Cuboid;
|
||||||
|
import com.volmit.iris.util.Cuboid.CuboidDirection;
|
||||||
import com.volmit.iris.util.KList;
|
import com.volmit.iris.util.KList;
|
||||||
|
import com.volmit.iris.util.MortarCommand;
|
||||||
|
import com.volmit.iris.util.MortarSender;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
public class CommandIrisObjectXPY extends MortarCommand {
|
||||||
import com.volmit.iris.IrisSettings;
|
public CommandIrisObjectXPY() {
|
||||||
import com.volmit.iris.manager.WandManager;
|
super("x+y");
|
||||||
import com.volmit.iris.util.Cuboid;
|
requiresPermission(Iris.perm);
|
||||||
import com.volmit.iris.util.MortarCommand;
|
setCategory("Object");
|
||||||
import com.volmit.iris.util.MortarSender;
|
setDescription("Auto select up and out");
|
||||||
import com.volmit.iris.util.Cuboid.CuboidDirection;
|
}
|
||||||
|
|
||||||
public class CommandIrisObjectXPY extends MortarCommand
|
@Override
|
||||||
{
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
public CommandIrisObjectXPY()
|
|
||||||
{
|
|
||||||
super("x+y");
|
|
||||||
requiresPermission(Iris.perm);
|
|
||||||
setCategory("Object");
|
|
||||||
setDescription("Auto select up and out");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
}
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
|
||||||
|
|
||||||
}
|
@Override
|
||||||
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
|
if (!IrisSettings.get().isStudio()) {
|
||||||
|
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
if (!sender.isPlayer()) {
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
sender.sendMessage("You don't have a wand");
|
||||||
{
|
return true;
|
||||||
if(!IrisSettings.get().isStudio())
|
}
|
||||||
{
|
|
||||||
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have a wand");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player p = sender.player();
|
Player p = sender.player();
|
||||||
|
|
||||||
if(!WandManager.isWand(p))
|
if (!WandManager.isWand(p)) {
|
||||||
{
|
sender.sendMessage("Ready your Wand.");
|
||||||
sender.sendMessage("Ready your Wand.");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
|
||||||
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
|
b[0].add(new Vector(0, 1, 0));
|
||||||
b[0].add(new Vector(0, 1, 0));
|
b[1].add(new Vector(0, 1, 0));
|
||||||
b[1].add(new Vector(0, 1, 0));
|
Location a1 = b[0].clone();
|
||||||
Location a1 = b[0].clone();
|
Location a2 = b[1].clone();
|
||||||
Location a2 = b[1].clone();
|
Cuboid cursor = new Cuboid(a1, a2);
|
||||||
Cuboid cursor = new Cuboid(a1, a2);
|
|
||||||
|
|
||||||
while(!cursor.containsOnly(Material.AIR))
|
while (!cursor.containsOnly(Material.AIR)) {
|
||||||
{
|
a1.add(new Vector(0, 1, 0));
|
||||||
a1.add(new Vector(0, 1, 0));
|
a2.add(new Vector(0, 1, 0));
|
||||||
a2.add(new Vector(0, 1, 0));
|
cursor = new Cuboid(a1, a2);
|
||||||
cursor = new Cuboid(a1, a2);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
a1.add(new Vector(0, -1, 0));
|
a1.add(new Vector(0, -1, 0));
|
||||||
a2.add(new Vector(0, -1, 0));
|
a2.add(new Vector(0, -1, 0));
|
||||||
b[0] = a1;
|
b[0] = a1;
|
||||||
a2 = b[1];
|
a2 = b[1];
|
||||||
cursor = new Cuboid(a1, a2);
|
cursor = new Cuboid(a1, a2);
|
||||||
cursor = cursor.contract(CuboidDirection.North);
|
cursor = cursor.contract(CuboidDirection.North);
|
||||||
cursor = cursor.contract(CuboidDirection.South);
|
cursor = cursor.contract(CuboidDirection.South);
|
||||||
cursor = cursor.contract(CuboidDirection.East);
|
cursor = cursor.contract(CuboidDirection.East);
|
||||||
cursor = cursor.contract(CuboidDirection.West);
|
cursor = cursor.contract(CuboidDirection.West);
|
||||||
b[0] = cursor.getLowerNE();
|
b[0] = cursor.getLowerNE();
|
||||||
b[1] = cursor.getUpperSW();
|
b[1] = cursor.getUpperSW();
|
||||||
p.getInventory().setItemInMainHand(WandManager.createWand(b[0], b[1]));
|
p.getInventory().setItemInMainHand(WandManager.createWand(b[0], b[1]));
|
||||||
p.updateInventory();
|
p.updateInventory();
|
||||||
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f);
|
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getArgsUsage()
|
protected String getArgsUsage() {
|
||||||
{
|
return "[subcommand]";
|
||||||
return "[subcommand]";
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,88 +7,83 @@ import com.volmit.iris.util.KList;
|
|||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
public class CommandIrisStudio extends MortarCommand
|
public class CommandIrisStudio extends MortarCommand {
|
||||||
{
|
@Command
|
||||||
@Command
|
private CommandIrisStudioCreate create;
|
||||||
private CommandIrisStudioCreate create;
|
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioOpen open;
|
private CommandIrisStudioOpen open;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioSummon summon;
|
private CommandIrisStudioSummon summon;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioClose close;
|
private CommandIrisStudioClose close;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioPackage pkg;
|
private CommandIrisStudioPackage pkg;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioUpdate update;
|
private CommandIrisStudioUpdate update;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioGoto got0;
|
private CommandIrisStudioGoto got0;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioEditBiome ebiome;
|
private CommandIrisStudioEditBiome ebiome;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioHotload hotload;
|
private CommandIrisStudioHotload hotload;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioExplorer exp;
|
private CommandIrisStudioExplorer exp;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioBeautify beautify;
|
private CommandIrisStudioBeautify beautify;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioProfile profile;
|
private CommandIrisStudioProfile profile;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioExplorerGenerator generator;
|
private CommandIrisStudioExplorerGenerator generator;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioLoot loot;
|
private CommandIrisStudioLoot loot;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioTPStudio tps;
|
private CommandIrisStudioTPStudio tps;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioConvert convert;
|
private CommandIrisStudioConvert convert;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioMap map;
|
private CommandIrisStudioMap map;
|
||||||
|
|
||||||
public CommandIrisStudio()
|
public CommandIrisStudio() {
|
||||||
{
|
super("studio", "std", "s");
|
||||||
super("studio", "std", "s");
|
requiresPermission(Iris.perm.studio);
|
||||||
requiresPermission(Iris.perm.studio);
|
setCategory("Studio");
|
||||||
setCategory("Studio");
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage("Iris Studio Commands:");
|
sender.sendMessage("Iris Studio Commands:");
|
||||||
printHelp(sender);
|
printHelp(sender);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getArgsUsage()
|
protected String getArgsUsage() {
|
||||||
{
|
return "[subcommand]";
|
||||||
return "[subcommand]";
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+53
-74
@@ -3,94 +3,73 @@ package com.volmit.iris.manager.command.studio;
|
|||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.IrisSettings;
|
import com.volmit.iris.IrisSettings;
|
||||||
import com.volmit.iris.util.*;
|
import com.volmit.iris.util.*;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.World;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class CommandIrisStudioBeautify extends MortarCommand
|
public class CommandIrisStudioBeautify extends MortarCommand {
|
||||||
{
|
public CommandIrisStudioBeautify() {
|
||||||
public CommandIrisStudioBeautify()
|
super("beautify", "prettify");
|
||||||
{
|
requiresPermission(Iris.perm.studio);
|
||||||
super("beautify", "prettify");
|
setDescription("Prettify the project by cleaning up json.");
|
||||||
requiresPermission(Iris.perm.studio);
|
setCategory("Studio");
|
||||||
setDescription("Prettify the project by cleaning up json.");
|
}
|
||||||
setCategory("Studio");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
File clean = null;
|
File clean = null;
|
||||||
|
|
||||||
if(args.length == 0)
|
if (args.length == 0) {
|
||||||
{
|
if (!Iris.proj.isProjectOpen()) {
|
||||||
if(!Iris.proj.isProjectOpen())
|
sender.sendMessage("No open project. Either use /iris std beautify <project> or have a project open.");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("No open project. Either use /iris std beautify <project> or have a project open.");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
clean = Iris.proj.getActiveProject().getPath();
|
clean = Iris.proj.getActiveProject().getPath();
|
||||||
}
|
} else {
|
||||||
|
clean = Iris.instance.getDataFolder("packs", args[0]);
|
||||||
|
|
||||||
else
|
if (!clean.exists()) {
|
||||||
{
|
sender.sendMessage("Not a valid project.");
|
||||||
clean = Iris.instance.getDataFolder("packs", args[0]);
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(!clean.exists())
|
sender.sendMessage("Cleaned " + Form.f(clean(sender, clean)) + " JSON Files");
|
||||||
{
|
|
||||||
sender.sendMessage("Not a valid project.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage("Cleaned " + Form.f(clean(sender, clean)) + " JSON Files");
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
private int clean(MortarSender s, File clean) {
|
||||||
}
|
int c = 0;
|
||||||
|
if (clean.isDirectory()) {
|
||||||
|
for (File i : clean.listFiles()) {
|
||||||
|
c += clean(s, i);
|
||||||
|
}
|
||||||
|
} else if (clean.getName().endsWith(".json")) {
|
||||||
|
try {
|
||||||
|
IO.writeAll(clean, new JSONObject(IO.readAll(clean)).toString(4));
|
||||||
|
} catch (Throwable e) {
|
||||||
|
Iris.error("Failed to beautify " + clean.getAbsolutePath() + " You may have errors in your json!");
|
||||||
|
}
|
||||||
|
|
||||||
private int clean(MortarSender s, File clean) {
|
c++;
|
||||||
int c = 0;
|
}
|
||||||
if(clean.isDirectory())
|
|
||||||
{
|
|
||||||
for(File i : clean.listFiles())
|
|
||||||
{
|
|
||||||
c+=clean(s, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if(clean.getName().endsWith(".json"))
|
return c;
|
||||||
{
|
}
|
||||||
try {
|
|
||||||
IO.writeAll(clean, new JSONObject(IO.readAll(clean)).toString(4));
|
|
||||||
} catch (Throwable e) {
|
|
||||||
Iris.error("Failed to beautify " + clean.getAbsolutePath() + " You may have errors in your json!");
|
|
||||||
}
|
|
||||||
|
|
||||||
c++;
|
@Override
|
||||||
}
|
protected String getArgsUsage() {
|
||||||
|
return "[project]";
|
||||||
return c;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "[project]";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,85 +1,69 @@
|
|||||||
package com.volmit.iris.manager.command.studio;
|
package com.volmit.iris.manager.command.studio;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.IrisSettings;
|
||||||
import com.volmit.iris.util.KList;
|
import com.volmit.iris.util.KList;
|
||||||
|
import com.volmit.iris.util.MortarCommand;
|
||||||
|
import com.volmit.iris.util.MortarSender;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
public class CommandIrisStudioClose extends MortarCommand {
|
||||||
import com.volmit.iris.IrisSettings;
|
public CommandIrisStudioClose() {
|
||||||
import com.volmit.iris.util.MortarCommand;
|
super("close", "x");
|
||||||
import com.volmit.iris.util.MortarSender;
|
requiresPermission(Iris.perm.studio);
|
||||||
|
setDescription("Close the existing dimension");
|
||||||
|
setCategory("Studio");
|
||||||
|
}
|
||||||
|
|
||||||
public class CommandIrisStudioClose extends MortarCommand
|
@Override
|
||||||
{
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
public CommandIrisStudioClose()
|
|
||||||
{
|
|
||||||
super("close", "x");
|
|
||||||
requiresPermission(Iris.perm.studio);
|
|
||||||
setDescription("Close the existing dimension");
|
|
||||||
setCategory("Studio");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
}
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
|
||||||
|
|
||||||
}
|
@Override
|
||||||
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
|
if (!IrisSettings.get().isStudio()) {
|
||||||
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
if (!Iris.proj.isProjectOpen()) {
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
sender.sendMessage("No open projects.");
|
||||||
{
|
return true;
|
||||||
if(!IrisSettings.get().isStudio())
|
}
|
||||||
{
|
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!Iris.proj.isProjectOpen())
|
if (sender.isPlayer()) {
|
||||||
{
|
World f = null;
|
||||||
sender.sendMessage("No open projects.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(sender.isPlayer())
|
for (World i : Bukkit.getWorlds()) {
|
||||||
{
|
if (i.getWorldFolder().getAbsolutePath().equals(Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getWorldFolder().getAbsolutePath())) {
|
||||||
World f = null;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
for(World i : Bukkit.getWorlds())
|
f = i;
|
||||||
{
|
break;
|
||||||
if(i.getWorldFolder().getAbsolutePath().equals(Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getWorldFolder().getAbsolutePath()))
|
}
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
f = i;
|
if (f == null) {
|
||||||
break;
|
for (Player i : Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getPlayers()) {
|
||||||
}
|
i.kickPlayer("Project Closing, No other world to put you in. Rejoin Please!");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (Player i : Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getPlayers()) {
|
||||||
|
i.teleport(f.getSpawnLocation());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(f == null)
|
Iris.proj.close();
|
||||||
{
|
sender.sendMessage("Projects Closed & Caches Cleared!");
|
||||||
for(Player i : Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getPlayers())
|
return true;
|
||||||
{
|
}
|
||||||
i.kickPlayer("Project Closing, No other world to put you in. Rejoin Please!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
@Override
|
||||||
{
|
protected String getArgsUsage() {
|
||||||
for(Player i : Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getPlayers())
|
return "";
|
||||||
{
|
}
|
||||||
i.teleport(f.getSpawnLocation());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Iris.proj.close();
|
|
||||||
sender.sendMessage("Projects Closed & Caches Cleared!");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+23
-28
@@ -6,37 +6,32 @@ import com.volmit.iris.util.KList;
|
|||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
public class CommandIrisStudioConvert extends MortarCommand
|
public class CommandIrisStudioConvert extends MortarCommand {
|
||||||
{
|
public CommandIrisStudioConvert() {
|
||||||
public CommandIrisStudioConvert()
|
super("convert", "cvt");
|
||||||
{
|
requiresPermission(Iris.perm.studio);
|
||||||
super("convert", "cvt");
|
setDescription("Convert .ewg schematics into Iris (.iob) files");
|
||||||
requiresPermission(Iris.perm.studio);
|
setCategory("Studio");
|
||||||
setDescription("Convert .ewg schematics into Iris (.iob) files");
|
}
|
||||||
setCategory("Studio");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Iris.convert.check(sender);
|
Iris.convert.check(sender);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getArgsUsage()
|
protected String getArgsUsage() {
|
||||||
{
|
return "";
|
||||||
return "";
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,63 +7,51 @@ import com.volmit.iris.util.KList;
|
|||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
public class CommandIrisStudioCreate extends MortarCommand
|
public class CommandIrisStudioCreate extends MortarCommand {
|
||||||
{
|
public CommandIrisStudioCreate() {
|
||||||
public CommandIrisStudioCreate()
|
super("create", "new", "+");
|
||||||
{
|
requiresPermission(Iris.perm.studio);
|
||||||
super("create", "new", "+");
|
setDescription("Create a new project & open it.");
|
||||||
requiresPermission(Iris.perm.studio);
|
setCategory("Studio");
|
||||||
setDescription("Create a new project & open it.");
|
}
|
||||||
setCategory("Studio");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(args.length < 1)
|
if (args.length < 1) {
|
||||||
{
|
sender.sendMessage("Please use a lowercase name with hyphens (-) for spaces.");
|
||||||
sender.sendMessage("Please use a lowercase name with hyphens (-) for spaces.");
|
sender.sendMessage("I.e. /iris std new " + C.BOLD + "aether");
|
||||||
sender.sendMessage("I.e. /iris std new " + C.BOLD + "aether");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
String template = null;
|
String template = null;
|
||||||
|
|
||||||
for(String i : args)
|
for (String i : args) {
|
||||||
{
|
if (i.startsWith("template=")) {
|
||||||
if(i.startsWith("template="))
|
template = i.split("\\Q=\\E")[1];
|
||||||
{
|
}
|
||||||
template = i.split("\\Q=\\E")[1];
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(template != null)
|
if (template != null) {
|
||||||
{
|
Iris.proj.create(sender, args[0], template);
|
||||||
Iris.proj.create(sender, args[0], template);
|
} else {
|
||||||
}
|
Iris.proj.create(sender, args[0]);
|
||||||
|
}
|
||||||
|
|
||||||
else
|
return true;
|
||||||
{
|
}
|
||||||
Iris.proj.create(sender, args[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
@Override
|
||||||
}
|
protected String getArgsUsage() {
|
||||||
|
return "[dimension] [template=<project>]";
|
||||||
@Override
|
}
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "[dimension] [template=<project>]";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+38
-52
@@ -10,65 +10,51 @@ import org.bukkit.entity.Player;
|
|||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
public class CommandIrisStudioEditBiome extends MortarCommand
|
public class CommandIrisStudioEditBiome extends MortarCommand {
|
||||||
{
|
public CommandIrisStudioEditBiome() {
|
||||||
public CommandIrisStudioEditBiome()
|
super("editbiome", "ebiome", "eb");
|
||||||
{
|
setDescription("Open this biome file in vscode");
|
||||||
super("editbiome", "ebiome", "eb");
|
requiresPermission(Iris.perm.studio);
|
||||||
setDescription("Open this biome file in vscode");
|
setCategory("Studio");
|
||||||
requiresPermission(Iris.perm.studio);
|
}
|
||||||
setCategory("Studio");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!Iris.proj.isProjectOpen())
|
if (!Iris.proj.isProjectOpen()) {
|
||||||
{
|
sender.sendMessage("There is not a studio currently loaded.");
|
||||||
sender.sendMessage("There is not a studio currently loaded.");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(sender.isPlayer())
|
if (sender.isPlayer()) {
|
||||||
{
|
Player p = sender.player();
|
||||||
Player p = sender.player();
|
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
File f = Iris.proj.getActiveProject().getActiveProvider().getBiome(p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ()).getLoadFile();
|
||||||
File f = Iris.proj.getActiveProject().getActiveProvider().getBiome(p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ()).getLoadFile();
|
Desktop.getDesktop().open(f);
|
||||||
Desktop.getDesktop().open(f);
|
} catch (Throwable e) {
|
||||||
}
|
sender.sendMessage("Cant find the file. Are you in an Iris Studio world?");
|
||||||
|
}
|
||||||
|
|
||||||
catch(Throwable e)
|
return true;
|
||||||
{
|
} else {
|
||||||
sender.sendMessage("Cant find the file. Are you in an Iris Studio world?");
|
sender.sendMessage("Players only.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
@Override
|
||||||
{
|
protected String getArgsUsage() {
|
||||||
sender.sendMessage("Players only.");
|
return "[width]";
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "[width]";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+34
-44
@@ -8,55 +8,45 @@ import com.volmit.iris.util.KList;
|
|||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
public class CommandIrisStudioExplorer extends MortarCommand
|
public class CommandIrisStudioExplorer extends MortarCommand {
|
||||||
{
|
@Command
|
||||||
@Command
|
private CommandIrisStudioExplorerGenerator generator;
|
||||||
private CommandIrisStudioExplorerGenerator generator;
|
|
||||||
|
|
||||||
public CommandIrisStudioExplorer()
|
public CommandIrisStudioExplorer() {
|
||||||
{
|
super("noise", "nmap");
|
||||||
super("noise", "nmap");
|
setDescription("Explore different noise generators visually");
|
||||||
setDescription("Explore different noise generators visually");
|
requiresPermission(Iris.perm.studio);
|
||||||
requiresPermission(Iris.perm.studio);
|
setCategory("World");
|
||||||
setCategory("World");
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (args.length != 0) {
|
||||||
if(args.length != 0)
|
printHelp(sender);
|
||||||
{
|
} else {
|
||||||
printHelp(sender);
|
if (!IrisSettings.get().isStudio()) {
|
||||||
}
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
else
|
if (!IrisSettings.get().isUseServerLaunchedGuis()) {
|
||||||
{
|
sender.sendMessage("To use Iris Guis, please enable serverLaunchedGuis in Iris/settings.json");
|
||||||
if(!IrisSettings.get().isStudio())
|
return true;
|
||||||
{
|
}
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!IrisSettings.get().isUseServerLaunchedGuis())
|
NoiseExplorer.launch();
|
||||||
{
|
sender.sendMessage("Opening Noise Explorer!");
|
||||||
sender.sendMessage("To use Iris Guis, please enable serverLaunchedGuis in Iris/settings.json");
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
NoiseExplorer.launch();
|
@Override
|
||||||
sender.sendMessage("Opening Noise Explorer!");
|
protected String getArgsUsage() {
|
||||||
}
|
return "";
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+47
-60
@@ -10,75 +10,62 @@ import com.volmit.iris.util.MortarCommand;
|
|||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
import com.volmit.iris.util.RNG;
|
import com.volmit.iris.util.RNG;
|
||||||
|
|
||||||
public class CommandIrisStudioExplorerGenerator extends MortarCommand
|
public class CommandIrisStudioExplorerGenerator extends MortarCommand {
|
||||||
{
|
public CommandIrisStudioExplorerGenerator() {
|
||||||
public CommandIrisStudioExplorerGenerator()
|
super("generator", "gen", "g");
|
||||||
{
|
setDescription("Preview created noise noises generators");
|
||||||
super("generator", "gen", "g");
|
requiresPermission(Iris.perm.studio);
|
||||||
setDescription("Preview created noise noises generators");
|
setCategory("World");
|
||||||
requiresPermission(Iris.perm.studio);
|
}
|
||||||
setCategory("World");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!IrisSettings.get().isUseServerLaunchedGuis())
|
if (!IrisSettings.get().isUseServerLaunchedGuis()) {
|
||||||
{
|
sender.sendMessage("To use Iris Guis, please enable serverLaunchedGuis in Iris/settings.json");
|
||||||
sender.sendMessage("To use Iris Guis, please enable serverLaunchedGuis in Iris/settings.json");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (args.length == 0)
|
if (args.length == 0) {
|
||||||
{
|
sender.sendMessage("Specify a generator to preview");
|
||||||
sender.sendMessage("Specify a generator to preview");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
IrisGenerator generator;
|
IrisGenerator generator;
|
||||||
long seed = 12345;
|
long seed = 12345;
|
||||||
|
|
||||||
if (Iris.proj.isProjectOpen())
|
if (Iris.proj.isProjectOpen()) {
|
||||||
{
|
generator = Iris.proj.getActiveProject().getActiveProvider().getData().getGeneratorLoader().load(args[0]);
|
||||||
generator = Iris.proj.getActiveProject().getActiveProvider().getData().getGeneratorLoader().load(args[0]);
|
seed = Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getSeed();
|
||||||
seed = Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getSeed();
|
} else {
|
||||||
}
|
generator = IrisDataManager.loadAnyGenerator(args[0]);
|
||||||
else
|
}
|
||||||
{
|
|
||||||
generator = IrisDataManager.loadAnyGenerator(args[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (generator != null)
|
if (generator != null) {
|
||||||
{
|
long finalSeed = seed;
|
||||||
long finalSeed = seed;
|
NoiseExplorer.launch((x, z) ->
|
||||||
NoiseExplorer.launch((x, z) ->
|
generator.getHeight(x, z, new RNG(finalSeed).nextParallelRNG(3245).lmax()), "Gen: " + generator.getLoadKey());
|
||||||
generator.getHeight(x, z, new RNG(finalSeed).nextParallelRNG(3245).lmax()), "Gen: " + generator.getLoadKey());
|
|
||||||
|
|
||||||
sender.sendMessage("Opening Noise Explorer for gen " + generator.getLoadKey() + " (" + generator.getLoader().getDataFolder().getName() + ")");
|
sender.sendMessage("Opening Noise Explorer for gen " + generator.getLoadKey() + " (" + generator.getLoader().getDataFolder().getName() + ")");
|
||||||
return true;
|
return true;
|
||||||
}
|
} else {
|
||||||
else
|
sender.sendMessage("Invalid Generator");
|
||||||
{
|
}
|
||||||
sender.sendMessage("Invalid Generator");
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getArgsUsage()
|
protected String getArgsUsage() {
|
||||||
{
|
return "[generator]";
|
||||||
return "[generator]";
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,93 +16,73 @@ import java.io.File;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class CommandIrisStudioGoto extends MortarCommand
|
public class CommandIrisStudioGoto extends MortarCommand {
|
||||||
{
|
public CommandIrisStudioGoto() {
|
||||||
public CommandIrisStudioGoto()
|
super("goto", "find", "g", "tp");
|
||||||
{
|
setDescription("Find any region or biome");
|
||||||
super("goto", "find", "g", "tp");
|
requiresPermission(Iris.perm.studio);
|
||||||
setDescription("Find any region or biome");
|
setCategory("World");
|
||||||
requiresPermission(Iris.perm.studio);
|
}
|
||||||
setCategory("World");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
if(args.length == 0 && sender.isPlayer() && IrisWorlds.isIrisWorld(sender.player().getWorld()))
|
if (args.length == 0 && sender.isPlayer() && IrisWorlds.isIrisWorld(sender.player().getWorld())) {
|
||||||
{
|
IrisDataManager data = IrisWorlds.access(sender.player().getWorld()).getData();
|
||||||
IrisDataManager data = IrisWorlds.access(sender.player().getWorld()).getData();
|
if (data == null) {
|
||||||
if (data == null){
|
sender.sendMessage("Issue when loading tab completions. No data found (?)");
|
||||||
sender.sendMessage("Issue when loading tab completions. No data found (?)");
|
} else {
|
||||||
} else {
|
list.add(data.getBiomeLoader().getPossibleKeys());
|
||||||
list.add(data.getBiomeLoader().getPossibleKeys());
|
list.add(data.getRegionLoader().getPossibleKeys());
|
||||||
list.add(data.getRegionLoader().getPossibleKeys());
|
//TODO: Remove comment here -> list.add(data.getObjectLoader().getPossibleKeys());
|
||||||
//TODO: Remove comment here -> list.add(data.getObjectLoader().getPossibleKeys());
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
try {
|
||||||
try
|
if (args.length < 1) {
|
||||||
{
|
sender.sendMessage("/iris std goto " + getArgsUsage());
|
||||||
if(args.length < 1)
|
return true;
|
||||||
{
|
}
|
||||||
sender.sendMessage("/iris std goto " + getArgsUsage());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(sender.isPlayer())
|
if (sender.isPlayer()) {
|
||||||
{
|
Player p = sender.player();
|
||||||
Player p = sender.player();
|
World world = p.getWorld();
|
||||||
World world = p.getWorld();
|
|
||||||
|
|
||||||
if(!IrisWorlds.isIrisWorld(world))
|
if (!IrisWorlds.isIrisWorld(world)) {
|
||||||
{
|
sender.sendMessage("You must be in an iris world.");
|
||||||
sender.sendMessage("You must be in an iris world.");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
IrisAccess g = IrisWorlds.access(world);
|
IrisAccess g = IrisWorlds.access(world);
|
||||||
IrisBiome b = IrisDataManager.loadAnyBiome(args[0]);
|
IrisBiome b = IrisDataManager.loadAnyBiome(args[0]);
|
||||||
IrisRegion r = IrisDataManager.loadAnyRegion(args[0]);
|
IrisRegion r = IrisDataManager.loadAnyRegion(args[0]);
|
||||||
IrisObject o = IrisDataManager.loadAnyObject(args[0]);
|
IrisObject o = IrisDataManager.loadAnyObject(args[0]);
|
||||||
|
|
||||||
if(b != null)
|
if (b != null) {
|
||||||
{
|
J.a(() -> {
|
||||||
J.a(() -> {
|
Location l = g.lookForBiome(b, 10000, (v) -> sender.sendMessage("Looking for " + C.BOLD + C.WHITE + b.getName() + C.RESET + C.GRAY + ": Checked " + Form.f(v) + " Places"));
|
||||||
Location l = g.lookForBiome(b, 10000, (v) -> sender.sendMessage("Looking for " + C.BOLD + C.WHITE + b.getName() + C.RESET + C.GRAY + ": Checked " + Form.f(v) + " Places"));
|
|
||||||
|
|
||||||
if(l == null)
|
if (l == null) {
|
||||||
{
|
sender.sendMessage("Couldn't find " + b.getName() + ".");
|
||||||
sender.sendMessage("Couldn't find " + b.getName() + ".");
|
} else {
|
||||||
}
|
sender.sendMessage("Found " + b.getName() + "!");
|
||||||
|
J.s(() -> sender.player().teleport(l));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (r != null) {
|
||||||
|
J.a(() -> {
|
||||||
|
Location l = g.lookForRegion(r, 60000, (v) -> sender.sendMessage(C.BOLD + "" + C.WHITE + r.getName() + C.RESET + C.GRAY + ": Checked " + Form.f(v) + " Places"));
|
||||||
|
|
||||||
else
|
if (l == null) {
|
||||||
{
|
sender.sendMessage("Couldn't find " + r.getName() + ".");
|
||||||
sender.sendMessage("Found " + b.getName() + "!");
|
} else {
|
||||||
J.s(() -> sender.player().teleport(l));
|
sender.sendMessage("Found " + r.getName() + "!");
|
||||||
}
|
J.s(() -> sender.player().teleport(l));
|
||||||
});
|
}
|
||||||
}
|
});
|
||||||
|
}
|
||||||
else if(r != null)
|
|
||||||
{
|
|
||||||
J.a(() -> {
|
|
||||||
Location l = g.lookForRegion(r, 60000, (v) -> sender.sendMessage(C.BOLD +""+ C.WHITE + r.getName() + C.RESET + C.GRAY + ": Checked " + Form.f(v) + " Places"));
|
|
||||||
|
|
||||||
if(l == null)
|
|
||||||
{
|
|
||||||
sender.sendMessage("Couldn't find " + r.getName() + ".");
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sender.sendMessage("Found " + r.getName() + "!");
|
|
||||||
J.s(() -> sender.player().teleport(l));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
/* TODO: Fix this shit
|
/* TODO: Fix this shit
|
||||||
else if (o != null)
|
else if (o != null)
|
||||||
{
|
{
|
||||||
@@ -126,50 +106,42 @@ public class CommandIrisStudioGoto extends MortarCommand
|
|||||||
});
|
});
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
else
|
else {
|
||||||
{
|
sender.sendMessage(args[0] + " is not a biome or region in this dimension. (Biome teleportation works best!");
|
||||||
sender.sendMessage(args[0] + " is not a biome or region in this dimension. (Biome teleportation works best!");
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
} else {
|
||||||
|
sender.sendMessage("Players only.");
|
||||||
|
}
|
||||||
|
} catch (Throwable e) {
|
||||||
|
Iris.error("Failed goto!");
|
||||||
|
e.printStackTrace();
|
||||||
|
sender.sendMessage("We cant seem to aquire a lock on the biome cache. Please report the error in the console to our github. Thanks!");
|
||||||
|
}
|
||||||
|
|
||||||
else
|
return true;
|
||||||
{
|
}
|
||||||
sender.sendMessage("Players only.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(Throwable e)
|
@Override
|
||||||
{
|
protected String getArgsUsage() {
|
||||||
Iris.error("Failed goto!");
|
return "[biome/region]";
|
||||||
e.printStackTrace();
|
}
|
||||||
sender.sendMessage("We cant seem to aquire a lock on the biome cache. Please report the error in the console to our github. Thanks!");
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
private List<File> listf(String directoryName) {
|
||||||
}
|
File directory = new File(directoryName);
|
||||||
|
List<File> files = new ArrayList<>();
|
||||||
|
|
||||||
@Override
|
// Get all files from a directory.
|
||||||
protected String getArgsUsage()
|
File[] fList = directory.listFiles();
|
||||||
{
|
if (fList != null)
|
||||||
return "[biome/region]";
|
for (File file : fList) {
|
||||||
}
|
if (file.isFile()) {
|
||||||
|
files.add(file);
|
||||||
private List<File> listf(String directoryName) {
|
} else if (file.isDirectory()) {
|
||||||
File directory = new File(directoryName);
|
files.addAll(listf(file.getAbsolutePath()));
|
||||||
List<File> files = new ArrayList<>();
|
}
|
||||||
|
}
|
||||||
// Get all files from a directory.
|
return files;
|
||||||
File[] fList = directory.listFiles();
|
}
|
||||||
if(fList != null)
|
|
||||||
for (File file : fList) {
|
|
||||||
if (file.isFile()) {
|
|
||||||
files.add(file);
|
|
||||||
} else if (file.isDirectory()) {
|
|
||||||
files.addAll(listf(file.getAbsolutePath()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return files;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+35
-44
@@ -9,56 +9,47 @@ import com.volmit.iris.util.MortarSender;
|
|||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class CommandIrisStudioHotload extends MortarCommand
|
public class CommandIrisStudioHotload extends MortarCommand {
|
||||||
{
|
public CommandIrisStudioHotload() {
|
||||||
public CommandIrisStudioHotload()
|
super("hotload", "hot", "h", "reload");
|
||||||
{
|
setDescription("Force a hotload");
|
||||||
super("hotload", "hot", "h", "reload");
|
requiresPermission(Iris.perm.studio);
|
||||||
setDescription("Force a hotload");
|
setCategory("World");
|
||||||
requiresPermission(Iris.perm.studio);
|
}
|
||||||
setCategory("World");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
|
||||||
{
|
|
||||||
if(!IrisSettings.get().isStudio())
|
|
||||||
{
|
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(sender.isPlayer())
|
@Override
|
||||||
{
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
Player p = sender.player();
|
if (!IrisSettings.get().isStudio()) {
|
||||||
World world = p.getWorld();
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
if(!IrisWorlds.isIrisWorld(world))
|
return true;
|
||||||
{
|
}
|
||||||
sender.sendMessage("You must be in an iris world.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
IrisWorlds.access(world).hotload();
|
if (sender.isPlayer()) {
|
||||||
sender.sendMessage("Hotloaded!");
|
Player p = sender.player();
|
||||||
return true;
|
World world = p.getWorld();
|
||||||
}
|
if (!IrisWorlds.isIrisWorld(world)) {
|
||||||
|
sender.sendMessage("You must be in an iris world.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
else
|
IrisWorlds.access(world).hotload();
|
||||||
{
|
sender.sendMessage("Hotloaded!");
|
||||||
sender.sendMessage("Players only.");
|
return true;
|
||||||
}
|
} else {
|
||||||
|
sender.sendMessage("Players only.");
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getArgsUsage()
|
protected String getArgsUsage() {
|
||||||
{
|
return "";
|
||||||
return "";
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.volmit.iris.manager.command.studio;
|
|||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.IrisSettings;
|
import com.volmit.iris.IrisSettings;
|
||||||
import com.volmit.iris.manager.IrisDataManager;
|
|
||||||
import com.volmit.iris.object.InventorySlotType;
|
import com.volmit.iris.object.InventorySlotType;
|
||||||
import com.volmit.iris.object.IrisLootTable;
|
import com.volmit.iris.object.IrisLootTable;
|
||||||
import com.volmit.iris.scaffold.IrisWorlds;
|
import com.volmit.iris.scaffold.IrisWorlds;
|
||||||
@@ -13,113 +12,93 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.inventory.InventoryType;
|
import org.bukkit.event.inventory.InventoryType;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
|
|
||||||
public class CommandIrisStudioLoot extends MortarCommand
|
public class CommandIrisStudioLoot extends MortarCommand {
|
||||||
{
|
public CommandIrisStudioLoot() {
|
||||||
public CommandIrisStudioLoot()
|
super("loot");
|
||||||
{
|
setDescription("Show loot if a chest were right here");
|
||||||
super("loot");
|
requiresPermission(Iris.perm.studio);
|
||||||
setDescription("Show loot if a chest were right here");
|
setCategory("Loot");
|
||||||
requiresPermission(Iris.perm.studio);
|
}
|
||||||
setCategory("Loot");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(sender.isPlayer())
|
if (sender.isPlayer()) {
|
||||||
{
|
Player p = sender.player();
|
||||||
Player p = sender.player();
|
IrisAccess prov = IrisWorlds.access(sender.player().getWorld());
|
||||||
IrisAccess prov = IrisWorlds.access(sender.player().getWorld());
|
|
||||||
|
|
||||||
if (!Iris.proj.isProjectOpen())
|
if (!Iris.proj.isProjectOpen()) {
|
||||||
{
|
sender.sendMessage("You can only use /iris studio loot in a studio world of iris.");
|
||||||
sender.sendMessage("You can only use /iris studio loot in a studio world of iris.");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
KList<IrisLootTable> tables = prov.getCompound().getEngine(p.getLocation().getBlockY()).getLootTables(RNG.r, p.getLocation().getBlock());
|
KList<IrisLootTable> tables = prov.getCompound().getEngine(p.getLocation().getBlockY()).getLootTables(RNG.r, p.getLocation().getBlock());
|
||||||
Inventory inv = Bukkit.createInventory(null, 27 * 2);
|
Inventory inv = Bukkit.createInventory(null, 27 * 2);
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
Iris.proj.getActiveProject().getActiveProvider().getCompound().getEngine(p.getLocation().getBlockY()).addItems(true, inv, RNG.r, tables, InventorySlotType.STORAGE, p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ(), 1);
|
||||||
Iris.proj.getActiveProject().getActiveProvider().getCompound().getEngine(p.getLocation().getBlockY()).addItems(true, inv, RNG.r, tables, InventorySlotType.STORAGE, p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ(), 1);
|
} catch (Throwable e) {
|
||||||
}
|
sender.sendMessage("You can only use /iris loot in a studio world of iris.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
catch(Throwable e)
|
p.openInventory(inv);
|
||||||
{
|
|
||||||
sender.sendMessage("You can only use /iris loot in a studio world of iris.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.openInventory(inv);
|
for (IrisLootTable i : tables) {
|
||||||
|
sender.sendMessage("- " + i.getName());
|
||||||
|
}
|
||||||
|
|
||||||
for(IrisLootTable i : tables)
|
boolean ffast = false;
|
||||||
{
|
boolean fadd = false;
|
||||||
sender.sendMessage("- " + i.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean ffast = false;
|
for (String i : args) {
|
||||||
boolean fadd = false;
|
if (i.equals("--fast")) {
|
||||||
|
ffast = true;
|
||||||
|
}
|
||||||
|
|
||||||
for(String i : args)
|
if (i.equals("--add")) {
|
||||||
{
|
fadd = true;
|
||||||
if(i.equals("--fast"))
|
}
|
||||||
{
|
}
|
||||||
ffast = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(i.equals("--add"))
|
boolean fast = ffast;
|
||||||
{
|
boolean add = fadd;
|
||||||
fadd = true;
|
O<Integer> ta = new O<Integer>();
|
||||||
}
|
ta.set(-1);
|
||||||
}
|
|
||||||
|
|
||||||
boolean fast = ffast;
|
ta.set(Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, () ->
|
||||||
boolean add = fadd;
|
{
|
||||||
O<Integer> ta = new O<Integer>();
|
if (!p.getOpenInventory().getType().equals(InventoryType.CHEST)) {
|
||||||
ta.set(-1);
|
Bukkit.getScheduler().cancelTask(ta.get());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ta.set(Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, () ->
|
if (!add) {
|
||||||
{
|
inv.clear();
|
||||||
if(!p.getOpenInventory().getType().equals(InventoryType.CHEST))
|
}
|
||||||
{
|
|
||||||
Bukkit.getScheduler().cancelTask(ta.get());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!add)
|
Iris.proj.getActiveProject().getActiveProvider().getCompound().getEngine(p.getLocation().getBlockY()).addItems(true, inv, new RNG(RNG.r.imax()), tables, InventorySlotType.STORAGE, p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ(), 1);
|
||||||
{
|
}, 0, fast ? 5 : 35));
|
||||||
inv.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
Iris.proj.getActiveProject().getActiveProvider().getCompound().getEngine(p.getLocation().getBlockY()).addItems(true, inv, new RNG(RNG.r.imax()), tables, InventorySlotType.STORAGE, p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ(), 1);
|
return true;
|
||||||
}, 0, fast ? 5 : 35));
|
} else {
|
||||||
|
sender.sendMessage("Players only.");
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
@Override
|
||||||
{
|
protected String getArgsUsage() {
|
||||||
sender.sendMessage("Players only.");
|
return "[width]";
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "[width]";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,57 +9,47 @@ import com.volmit.iris.util.KList;
|
|||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
public class CommandIrisStudioMap extends MortarCommand
|
public class CommandIrisStudioMap extends MortarCommand {
|
||||||
{
|
public CommandIrisStudioMap() {
|
||||||
public CommandIrisStudioMap()
|
super("map", "render");
|
||||||
{
|
setDescription("Render a map (gui outside of mc)");
|
||||||
super("map", "render");
|
requiresPermission(Iris.perm.studio);
|
||||||
setDescription("Render a map (gui outside of mc)");
|
setCategory("World");
|
||||||
requiresPermission(Iris.perm.studio);
|
}
|
||||||
setCategory("World");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!IrisSettings.get().isUseServerLaunchedGuis())
|
if (!IrisSettings.get().isUseServerLaunchedGuis()) {
|
||||||
{
|
sender.sendMessage("To use Iris Guis, please enable serverLaunchedGuis in Iris/settings.json");
|
||||||
sender.sendMessage("To use Iris Guis, please enable serverLaunchedGuis in Iris/settings.json");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
IrisAccess g = Iris.proj.getActiveProject().getActiveProvider();
|
||||||
IrisAccess g = Iris.proj.getActiveProject().getActiveProvider();
|
IrisVision.launch(g, 0);
|
||||||
IrisVision.launch(g, 0);
|
sender.sendMessage("Opening Map!");
|
||||||
sender.sendMessage("Opening Map!");
|
} catch (Throwable e) {
|
||||||
}
|
IrisAccess g = IrisWorlds.access(sender.player().getWorld());
|
||||||
|
IrisVision.launch(g, 0);
|
||||||
|
sender.sendMessage("Opening Map!");
|
||||||
|
}
|
||||||
|
|
||||||
catch(Throwable e)
|
return true;
|
||||||
{
|
}
|
||||||
IrisAccess g = IrisWorlds.access(sender.player().getWorld());
|
|
||||||
IrisVision.launch(g, 0);
|
|
||||||
sender.sendMessage("Opening Map!");
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
@Override
|
||||||
}
|
protected String getArgsUsage() {
|
||||||
|
return "";
|
||||||
@Override
|
}
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,43 +6,37 @@ import com.volmit.iris.util.KList;
|
|||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
public class CommandIrisStudioOpen extends MortarCommand
|
public class CommandIrisStudioOpen extends MortarCommand {
|
||||||
{
|
public CommandIrisStudioOpen() {
|
||||||
public CommandIrisStudioOpen()
|
super("open", "o");
|
||||||
{
|
requiresPermission(Iris.perm.studio);
|
||||||
super("open", "o");
|
setDescription("Create a new temporary world to design a dimension.");
|
||||||
requiresPermission(Iris.perm.studio);
|
setCategory("Studio");
|
||||||
setDescription("Create a new temporary world to design a dimension.");
|
}
|
||||||
setCategory("Studio");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(args.length < 1)
|
|
||||||
{
|
|
||||||
sender.sendMessage("/iris std open <DIMENSION> (file name without .json)");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Iris.proj.open(sender, args[0]);
|
if (args.length < 1) {
|
||||||
return true;
|
sender.sendMessage("/iris std open <DIMENSION> (file name without .json)");
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
Iris.proj.open(sender, args[0]);
|
||||||
protected String getArgsUsage()
|
return true;
|
||||||
{
|
}
|
||||||
return "[dimension]";
|
|
||||||
}
|
@Override
|
||||||
|
protected String getArgsUsage() {
|
||||||
|
return "[dimension]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+39
-47
@@ -7,59 +7,51 @@ import com.volmit.iris.util.KList;
|
|||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
public class CommandIrisStudioPackage extends MortarCommand
|
public class CommandIrisStudioPackage extends MortarCommand {
|
||||||
{
|
public CommandIrisStudioPackage() {
|
||||||
public CommandIrisStudioPackage()
|
super("package", "pkg");
|
||||||
{
|
requiresPermission(Iris.perm.studio);
|
||||||
super("package", "pkg");
|
setDescription("Package your dimension into a compressed format.");
|
||||||
requiresPermission(Iris.perm.studio);
|
setCategory("Studio");
|
||||||
setDescription("Package your dimension into a compressed format.");
|
}
|
||||||
setCategory("Studio");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(args.length == 0)
|
|
||||||
{
|
|
||||||
sender.sendMessage("/iris std package <DIMENSION> [-o] [-m]");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
J.a(() ->
|
if (args.length == 0) {
|
||||||
{
|
sender.sendMessage("/iris std package <DIMENSION> [-o] [-m]");
|
||||||
boolean o = false;
|
return true;
|
||||||
boolean m = true;
|
}
|
||||||
|
|
||||||
for(String i : args)
|
J.a(() ->
|
||||||
{
|
{
|
||||||
if(i.equalsIgnoreCase("-o"))
|
boolean o = false;
|
||||||
{
|
boolean m = true;
|
||||||
o = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String dim = args[0];
|
for (String i : args) {
|
||||||
Iris.proj.compilePackage(sender, dim, o, m);
|
if (i.equalsIgnoreCase("-o")) {
|
||||||
});
|
o = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
String dim = args[0];
|
||||||
}
|
Iris.proj.compilePackage(sender, dim, o, m);
|
||||||
|
});
|
||||||
|
|
||||||
@Override
|
return true;
|
||||||
protected String getArgsUsage()
|
}
|
||||||
{
|
|
||||||
return "[dimension] [-o] [-m]";
|
@Override
|
||||||
}
|
protected String getArgsUsage() {
|
||||||
|
return "[dimension] [-o] [-m]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+176
-207
@@ -11,266 +11,235 @@ import com.volmit.iris.util.*;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class CommandIrisStudioProfile extends MortarCommand
|
public class CommandIrisStudioProfile extends MortarCommand {
|
||||||
{
|
public CommandIrisStudioProfile() {
|
||||||
public CommandIrisStudioProfile()
|
super("profile", "blame");
|
||||||
{
|
requiresPermission(Iris.perm.studio);
|
||||||
super("profile", "blame");
|
setDescription("Profile the specified project");
|
||||||
requiresPermission(Iris.perm.studio);
|
setCategory("Studio");
|
||||||
setDescription("Profile the specified project");
|
}
|
||||||
setCategory("Studio");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
J.a(() -> {
|
J.a(() -> {
|
||||||
File f = null;
|
File f = null;
|
||||||
File report = Iris.instance.getDataFile("profile.txt");
|
File report = Iris.instance.getDataFile("profile.txt");
|
||||||
KList<String> v = new KList<>();
|
KList<String> v = new KList<>();
|
||||||
if(args.length == 0)
|
if (args.length == 0) {
|
||||||
{
|
if (!Iris.proj.isProjectOpen()) {
|
||||||
if(!Iris.proj.isProjectOpen())
|
sender.sendMessage("No open project. Either use /iris std beautify <project> or have a project open.");
|
||||||
{
|
return;
|
||||||
sender.sendMessage("No open project. Either use /iris std beautify <project> or have a project open.");
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
f = Iris.proj.getActiveProject().getPath();
|
f = Iris.proj.getActiveProject().getPath();
|
||||||
}
|
} else {
|
||||||
|
f = Iris.instance.getDataFolder("packs", args[0]);
|
||||||
|
|
||||||
else
|
if (!f.exists()) {
|
||||||
{
|
sender.sendMessage("Not a valid project.");
|
||||||
f = Iris.instance.getDataFolder("packs", args[0]);
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(!f.exists())
|
IrisProject p = new IrisProject(f);
|
||||||
{
|
IrisDataManager data = new IrisDataManager(f);
|
||||||
sender.sendMessage("Not a valid project.");
|
KMap<NoiseStyle, Double> styleTimings = new KMap<>();
|
||||||
return;
|
KMap<InterpolationMethod, Double> interpolatorTimings = new KMap<>();
|
||||||
}
|
KMap<String, Double> generatorTimings = new KMap<>();
|
||||||
}
|
KMap<String, Double> biomeTimings = new KMap<>();
|
||||||
|
KMap<String, Double> regionTimings = new KMap<>();
|
||||||
|
|
||||||
IrisProject p = new IrisProject(f);
|
sender.sendMessage("Calculating Performance Metrics for Noise Generators...");
|
||||||
IrisDataManager data = new IrisDataManager(f);
|
|
||||||
KMap<NoiseStyle, Double> styleTimings = new KMap<>();
|
|
||||||
KMap<InterpolationMethod, Double> interpolatorTimings = new KMap<>();
|
|
||||||
KMap<String, Double> generatorTimings = new KMap<>();
|
|
||||||
KMap<String, Double> biomeTimings = new KMap<>();
|
|
||||||
KMap<String, Double> regionTimings = new KMap<>();
|
|
||||||
|
|
||||||
sender.sendMessage("Calculating Performance Metrics for Noise Generators...");
|
|
||||||
|
|
||||||
|
|
||||||
for(NoiseStyle i : NoiseStyle.values())
|
for (NoiseStyle i : NoiseStyle.values()) {
|
||||||
{
|
CNG c = i.create(new RNG(i.hashCode()));
|
||||||
CNG c = i.create(new RNG(i.hashCode()));
|
|
||||||
|
|
||||||
for(int j = 0; j < 30000; j++)
|
for (int j = 0; j < 30000; j++) {
|
||||||
{
|
c.noise(j, j + 1000, j * j);
|
||||||
c.noise(j, j + 1000, j * j);
|
c.noise(j, -j);
|
||||||
c.noise(j, -j);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
PrecisionStopwatch px = PrecisionStopwatch.start();
|
PrecisionStopwatch px = PrecisionStopwatch.start();
|
||||||
|
|
||||||
for(int j = 0; j < 1000000; j++)
|
for (int j = 0; j < 1000000; j++) {
|
||||||
{
|
c.noise(j, j + 1000, j * j);
|
||||||
c.noise(j, j + 1000, j * j);
|
c.noise(j, -j);
|
||||||
c.noise(j, -j);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
styleTimings.put(i, px.getMilliseconds());
|
styleTimings.put(i, px.getMilliseconds());
|
||||||
}
|
}
|
||||||
|
|
||||||
v.add("Noise Style Performance Impacts: ");
|
v.add("Noise Style Performance Impacts: ");
|
||||||
|
|
||||||
for(NoiseStyle i : styleTimings.sortKNumber())
|
for (NoiseStyle i : styleTimings.sortKNumber()) {
|
||||||
{
|
v.add(i.name() + ": " + styleTimings.get(i));
|
||||||
v.add(i.name() +": "+ styleTimings.get(i));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
v.add("");
|
v.add("");
|
||||||
|
|
||||||
sender.sendMessage("Calculating Interpolator Timings...");
|
sender.sendMessage("Calculating Interpolator Timings...");
|
||||||
|
|
||||||
for(InterpolationMethod i : InterpolationMethod.values())
|
for (InterpolationMethod i : InterpolationMethod.values()) {
|
||||||
{
|
IrisInterpolator in = new IrisInterpolator();
|
||||||
IrisInterpolator in = new IrisInterpolator();
|
in.setFunction(i);
|
||||||
in.setFunction(i);
|
in.setHorizontalScale(8);
|
||||||
in.setHorizontalScale(8);
|
|
||||||
|
|
||||||
NoiseProvider np = new NoiseProvider() {
|
NoiseProvider np = new NoiseProvider() {
|
||||||
@Override
|
@Override
|
||||||
public double noise(double x, double z) {
|
public double noise(double x, double z) {
|
||||||
return Math.random();
|
return Math.random();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
for(int j = 0; j < 3000; j++)
|
for (int j = 0; j < 3000; j++) {
|
||||||
{
|
in.interpolate(j, -j, np);
|
||||||
in.interpolate(j, -j, np);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
PrecisionStopwatch px = PrecisionStopwatch.start();
|
PrecisionStopwatch px = PrecisionStopwatch.start();
|
||||||
|
|
||||||
for(int j = 0; j < 100000; j++)
|
for (int j = 0; j < 100000; j++) {
|
||||||
{
|
in.interpolate(j + 10000, -j - 100000, np);
|
||||||
in.interpolate(j + 10000, -j - 100000, np);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
interpolatorTimings.put(i, px.getMilliseconds());
|
interpolatorTimings.put(i, px.getMilliseconds());
|
||||||
}
|
}
|
||||||
|
|
||||||
v.add("Noise Interpolator Performance Impacts: ");
|
v.add("Noise Interpolator Performance Impacts: ");
|
||||||
|
|
||||||
for(InterpolationMethod i : interpolatorTimings.sortKNumber())
|
for (InterpolationMethod i : interpolatorTimings.sortKNumber()) {
|
||||||
{
|
v.add(i.name() + ": " + interpolatorTimings.get(i));
|
||||||
v.add(i.name() +": "+ interpolatorTimings.get(i));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
v.add("");
|
v.add("");
|
||||||
|
|
||||||
sender.sendMessage("Processing Generator Scores: ");
|
sender.sendMessage("Processing Generator Scores: ");
|
||||||
|
|
||||||
KMap<String, KList<String>> btx = new KMap<>();
|
KMap<String, KList<String>> btx = new KMap<>();
|
||||||
|
|
||||||
for(String i : data.getGeneratorLoader().getPossibleKeys())
|
for (String i : data.getGeneratorLoader().getPossibleKeys()) {
|
||||||
{
|
KList<String> vv = new KList<>();
|
||||||
KList<String> vv = new KList<>();
|
IrisGenerator g = data.getGeneratorLoader().load(i);
|
||||||
IrisGenerator g = data.getGeneratorLoader().load(i);
|
KList<IrisNoiseGenerator> composites = g.getAllComposites();
|
||||||
KList<IrisNoiseGenerator> composites = g.getAllComposites();
|
double score = 0;
|
||||||
double score = 0;
|
int m = 0;
|
||||||
int m = 0;
|
for (IrisNoiseGenerator j : composites) {
|
||||||
for(IrisNoiseGenerator j : composites)
|
m++;
|
||||||
{
|
score += styleTimings.get(j.getStyle().getStyle());
|
||||||
m++;
|
vv.add("Composite Noise Style " + m + " " + j.getStyle().getStyle().name() + ": " + styleTimings.get(j.getStyle().getStyle()));
|
||||||
score += styleTimings.get(j.getStyle().getStyle());
|
}
|
||||||
vv.add("Composite Noise Style " + m + " " + j.getStyle().getStyle().name() + ": " + styleTimings.get(j.getStyle().getStyle()));
|
|
||||||
}
|
|
||||||
|
|
||||||
score += interpolatorTimings.get(g.getInterpolator().getFunction());
|
score += interpolatorTimings.get(g.getInterpolator().getFunction());
|
||||||
vv.add("Interpolator " + g.getInterpolator().getFunction().name() + ": " + interpolatorTimings.get(g.getInterpolator().getFunction()));
|
vv.add("Interpolator " + g.getInterpolator().getFunction().name() + ": " + interpolatorTimings.get(g.getInterpolator().getFunction()));
|
||||||
generatorTimings.put(i, score);
|
generatorTimings.put(i, score);
|
||||||
btx.put(i, vv);
|
btx.put(i, vv);
|
||||||
}
|
}
|
||||||
|
|
||||||
v.add("Project Generator Performance Impacts: ");
|
v.add("Project Generator Performance Impacts: ");
|
||||||
|
|
||||||
for(String i : generatorTimings.sortKNumber())
|
for (String i : generatorTimings.sortKNumber()) {
|
||||||
{
|
v.add(i + ": " + generatorTimings.get(i));
|
||||||
v.add(i + ": " + generatorTimings.get(i));
|
|
||||||
|
|
||||||
btx.get(i).forEach((ii) -> v.add(" " + ii));
|
btx.get(i).forEach((ii) -> v.add(" " + ii));
|
||||||
}
|
}
|
||||||
|
|
||||||
v.add("");
|
v.add("");
|
||||||
|
|
||||||
KMap<String, KList<String>> bt = new KMap<>();
|
KMap<String, KList<String>> bt = new KMap<>();
|
||||||
|
|
||||||
for(String i : data.getBiomeLoader().getPossibleKeys())
|
for (String i : data.getBiomeLoader().getPossibleKeys()) {
|
||||||
{
|
KList<String> vv = new KList<>();
|
||||||
KList<String> vv = new KList<>();
|
IrisBiome b = data.getBiomeLoader().load(i);
|
||||||
IrisBiome b = data.getBiomeLoader().load(i);
|
double score = 0;
|
||||||
double score = 0;
|
|
||||||
|
|
||||||
int m = 0;
|
int m = 0;
|
||||||
for(IrisBiomePaletteLayer j : b.getLayers())
|
for (IrisBiomePaletteLayer j : b.getLayers()) {
|
||||||
{
|
m++;
|
||||||
m++;
|
score += styleTimings.get(j.getStyle().getStyle());
|
||||||
score += styleTimings.get(j.getStyle().getStyle());
|
vv.add("Palette Layer " + m + ": " + styleTimings.get(j.getStyle().getStyle()));
|
||||||
vv.add("Palette Layer " + m + ": " + styleTimings.get(j.getStyle().getStyle()));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
score += styleTimings.get(b.getBiomeStyle().getStyle());
|
score += styleTimings.get(b.getBiomeStyle().getStyle());
|
||||||
vv.add("Biome Style: " + styleTimings.get(b.getBiomeStyle().getStyle()));
|
vv.add("Biome Style: " + styleTimings.get(b.getBiomeStyle().getStyle()));
|
||||||
score += styleTimings.get(b.getChildStyle().getStyle());
|
score += styleTimings.get(b.getChildStyle().getStyle());
|
||||||
vv.add("Child Style: " + styleTimings.get(b.getChildStyle().getStyle()));
|
vv.add("Child Style: " + styleTimings.get(b.getChildStyle().getStyle()));
|
||||||
biomeTimings.put(i, score);
|
biomeTimings.put(i, score);
|
||||||
bt.put(i, vv);
|
bt.put(i, vv);
|
||||||
}
|
}
|
||||||
|
|
||||||
v.add("Project Biome Performance Impacts: ");
|
v.add("Project Biome Performance Impacts: ");
|
||||||
|
|
||||||
for(String i : biomeTimings.sortKNumber())
|
for (String i : biomeTimings.sortKNumber()) {
|
||||||
{
|
v.add(i + ": " + biomeTimings.get(i));
|
||||||
v.add(i + ": " + biomeTimings.get(i));
|
|
||||||
|
|
||||||
bt.get(i).forEach((ff) -> v.add(" " + ff));
|
bt.get(i).forEach((ff) -> v.add(" " + ff));
|
||||||
}
|
}
|
||||||
|
|
||||||
v.add("");
|
v.add("");
|
||||||
|
|
||||||
for(String i : data.getRegionLoader().getPossibleKeys())
|
for (String i : data.getRegionLoader().getPossibleKeys()) {
|
||||||
{
|
IrisRegion b = data.getRegionLoader().load(i);
|
||||||
IrisRegion b = data.getRegionLoader().load(i);
|
double score = 0;
|
||||||
double score = 0;
|
|
||||||
|
|
||||||
score += styleTimings.get(b.getLakeStyle().getStyle());
|
score += styleTimings.get(b.getLakeStyle().getStyle());
|
||||||
score += styleTimings.get(b.getRiverStyle().getStyle());
|
score += styleTimings.get(b.getRiverStyle().getStyle());
|
||||||
regionTimings.put(i, score);
|
regionTimings.put(i, score);
|
||||||
}
|
}
|
||||||
|
|
||||||
v.add("Project Region Performance Impacts: ");
|
v.add("Project Region Performance Impacts: ");
|
||||||
|
|
||||||
for(String i : regionTimings.sortKNumber())
|
for (String i : regionTimings.sortKNumber()) {
|
||||||
{
|
v.add(i + ": " + regionTimings.get(i));
|
||||||
v.add(i + ": " + regionTimings.get(i));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
v.add("");
|
v.add("");
|
||||||
|
|
||||||
double m = 0;
|
double m = 0;
|
||||||
for(double i : biomeTimings.v())
|
for (double i : biomeTimings.v()) {
|
||||||
{
|
m += i;
|
||||||
m+=i;
|
}
|
||||||
}
|
m /= biomeTimings.size();
|
||||||
m/=biomeTimings.size();
|
double mm = 0;
|
||||||
double mm = 0;
|
for (double i : generatorTimings.v()) {
|
||||||
for(double i : generatorTimings.v())
|
mm += i;
|
||||||
{
|
}
|
||||||
mm+=i;
|
mm /= generatorTimings.size();
|
||||||
}
|
m += mm;
|
||||||
mm/=generatorTimings.size();
|
double mmm = 0;
|
||||||
m+=mm;
|
for (double i : regionTimings.v()) {
|
||||||
double mmm = 0;
|
mmm += i;
|
||||||
for(double i : regionTimings.v())
|
}
|
||||||
{
|
mmm /= regionTimings.size();
|
||||||
mmm+=i;
|
m += mmm;
|
||||||
}
|
|
||||||
mmm/=regionTimings.size();
|
|
||||||
m+=mmm;
|
|
||||||
|
|
||||||
v.add("Average Score: " + m);
|
v.add("Average Score: " + m);
|
||||||
sender.sendMessage("Score: " + Form.duration(m, 0));
|
sender.sendMessage("Score: " + Form.duration(m, 0));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
IO.writeAll(report, v.toString("\n"));
|
IO.writeAll(report, v.toString("\n"));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
sender.sendMessage("Done! " + report.getPath());
|
sender.sendMessage("Done! " + report.getPath());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
@Override
|
||||||
}
|
protected String getArgsUsage() {
|
||||||
|
return "[project]";
|
||||||
@Override
|
}
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "[project]";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,75 +13,59 @@ import org.bukkit.Location;
|
|||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class CommandIrisStudioSummon extends MortarCommand
|
public class CommandIrisStudioSummon extends MortarCommand {
|
||||||
{
|
public CommandIrisStudioSummon() {
|
||||||
public CommandIrisStudioSummon()
|
super("summon", "spawnmob");
|
||||||
{
|
setDescription("Spawn an Iris entity");
|
||||||
super("summon", "spawnmob");
|
requiresPermission(Iris.perm.studio);
|
||||||
setDescription("Spawn an Iris entity");
|
setCategory("Summon");
|
||||||
requiresPermission(Iris.perm.studio);
|
}
|
||||||
setCategory("Summon");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(sender.isPlayer())
|
if (sender.isPlayer()) {
|
||||||
{
|
Player p = sender.player();
|
||||||
Player p = sender.player();
|
World world = p.getWorld();
|
||||||
World world = p.getWorld();
|
if (!IrisWorlds.isIrisWorld(world)) {
|
||||||
if(!IrisWorlds.isIrisWorld(world))
|
sender.sendMessage("You must be in an iris world.");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("You must be in an iris world.");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
IrisAccess g = IrisWorlds.access(world);
|
IrisAccess g = IrisWorlds.access(world);
|
||||||
if(args.length == 0)
|
if (args.length == 0) {
|
||||||
{
|
for (String i : g.getData().getEntityLoader().getPossibleKeys()) {
|
||||||
for(String i : g.getData().getEntityLoader().getPossibleKeys())
|
sender.sendMessage("- " + i);
|
||||||
{
|
}
|
||||||
sender.sendMessage("- " + i);
|
} else {
|
||||||
}
|
IrisEntity e = g.getData().getEntityLoader().load(args[0]);
|
||||||
}
|
|
||||||
|
|
||||||
else
|
if (e == null) {
|
||||||
{
|
sender.sendMessage("Couldnt find entity " + args[0] + ". Use '/iris std summon' to see a list of iris entities.");
|
||||||
IrisEntity e = g.getData().getEntityLoader().load(args[0]);
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if(e == null)
|
Location vl = sender.player().getLocation().clone().add(0, 3, 0);
|
||||||
{
|
e.spawn((Engine) g.getEngineAccess(vl.getBlockY()), vl);
|
||||||
sender.sendMessage("Couldnt find entity " + args[0] + ". Use '/iris std summon' to see a list of iris entities.");
|
}
|
||||||
return true;
|
} else {
|
||||||
}
|
sender.sendMessage("Players only.");
|
||||||
|
}
|
||||||
|
|
||||||
Location vl = sender.player().getLocation().clone().add(0, 3, 0);
|
return true;
|
||||||
e.spawn((Engine) g.getEngineAccess(vl.getBlockY()), vl);
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
@Override
|
||||||
{
|
protected String getArgsUsage() {
|
||||||
sender.sendMessage("Players only.");
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+37
-47
@@ -7,59 +7,49 @@ import com.volmit.iris.util.MortarCommand;
|
|||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
|
|
||||||
public class CommandIrisStudioTPStudio extends MortarCommand
|
public class CommandIrisStudioTPStudio extends MortarCommand {
|
||||||
{
|
public CommandIrisStudioTPStudio() {
|
||||||
public CommandIrisStudioTPStudio()
|
super("tps", "stp", "tpstudio");
|
||||||
{
|
requiresPermission(Iris.perm.studio);
|
||||||
super("tps", "stp", "tpstudio");
|
setDescription("Go to the spawn of the currently open studio world.");
|
||||||
requiresPermission(Iris.perm.studio);
|
setCategory("Studio");
|
||||||
setDescription("Go to the spawn of the currently open studio world.");
|
}
|
||||||
setCategory("Studio");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer()){
|
if (!sender.isPlayer()) {
|
||||||
sender.sendMessage("Cannot be ran by console.");
|
sender.sendMessage("Cannot be ran by console.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Iris.proj.isProjectOpen())
|
if (!Iris.proj.isProjectOpen()) {
|
||||||
{
|
sender.sendMessage("There is not a studio currently loaded.");
|
||||||
sender.sendMessage("There is not a studio currently loaded.");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
sender.sendMessage("Teleporting you to the active studio world.");
|
||||||
sender.sendMessage("Teleporting you to the active studio world.");
|
sender.player().teleport(Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getSpawnLocation());
|
||||||
sender.player().teleport(Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getSpawnLocation());
|
sender.player().setGameMode(GameMode.SPECTATOR);
|
||||||
sender.player().setGameMode(GameMode.SPECTATOR);
|
} catch (Throwable e) {
|
||||||
}
|
sender.sendMessage("Failed to teleport to the studio world. Try re-opening the project.");
|
||||||
|
}
|
||||||
|
|
||||||
catch(Throwable e)
|
return true;
|
||||||
{
|
}
|
||||||
sender.sendMessage("Failed to teleport to the studio world. Try re-opening the project.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
@Override
|
||||||
}
|
protected String getArgsUsage() {
|
||||||
|
return "";
|
||||||
@Override
|
}
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,52 +7,42 @@ import com.volmit.iris.util.KList;
|
|||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
public class CommandIrisStudioUpdate extends MortarCommand
|
public class CommandIrisStudioUpdate extends MortarCommand {
|
||||||
{
|
public CommandIrisStudioUpdate() {
|
||||||
public CommandIrisStudioUpdate()
|
super("update", "upd", "u");
|
||||||
{
|
requiresPermission(Iris.perm.studio);
|
||||||
super("update", "upd", "u");
|
setDescription("Update your dimension project.");
|
||||||
requiresPermission(Iris.perm.studio);
|
setCategory("Studio");
|
||||||
setDescription("Update your dimension project.");
|
}
|
||||||
setCategory("Studio");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
if (!IrisSettings.get().isStudio()) {
|
||||||
if(!IrisSettings.get().isStudio())
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
{
|
return true;
|
||||||
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(args.length == 0)
|
if (args.length == 0) {
|
||||||
{
|
sender.sendMessage("/iris std package <DIMENSION>");
|
||||||
sender.sendMessage("/iris std package <DIMENSION>");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(new IrisProject(Iris.proj.getWorkspaceFolder(args[0])).updateWorkspace())
|
if (new IrisProject(Iris.proj.getWorkspaceFolder(args[0])).updateWorkspace()) {
|
||||||
{
|
sender.sendMessage("Updated Code Workspace for " + args[0]);
|
||||||
sender.sendMessage("Updated Code Workspace for " + args[0]);
|
} else {
|
||||||
}
|
sender.sendMessage("Invalid project: " + args[0] + ". Try deleting the code-workspace file and try again.");
|
||||||
|
}
|
||||||
|
|
||||||
else
|
return true;
|
||||||
{
|
}
|
||||||
sender.sendMessage("Invalid project: " + args[0] + ". Try deleting the code-workspace file and try again.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
@Override
|
||||||
}
|
protected String getArgsUsage() {
|
||||||
|
return "[dimension]";
|
||||||
@Override
|
}
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "[dimension]";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,45 +6,41 @@ import com.volmit.iris.util.KList;
|
|||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
public class CommandIrisWhat extends MortarCommand
|
public class CommandIrisWhat extends MortarCommand {
|
||||||
{
|
@Command
|
||||||
@Command
|
private CommandIrisWhatBlock block;
|
||||||
private CommandIrisWhatBlock block;
|
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisWhatHand hand;
|
private CommandIrisWhatHand hand;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisWhatBiome biome;
|
private CommandIrisWhatBiome biome;
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisWhatObjects objects;
|
private CommandIrisWhatObjects objects;
|
||||||
|
|
||||||
public CommandIrisWhat()
|
public CommandIrisWhat() {
|
||||||
{
|
super("what", "w", "?");
|
||||||
super("what", "w", "?");
|
setDescription("Get timings for this world");
|
||||||
setDescription("Get timings for this world");
|
requiresPermission(Iris.perm.studio);
|
||||||
requiresPermission(Iris.perm.studio);
|
setCategory("Wut");
|
||||||
setCategory("Wut");
|
setDescription("Figure out what stuff is");
|
||||||
setDescription("Figure out what stuff is");
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
{
|
sender.sendMessage("Iris 'What' Commands:");
|
||||||
sender.sendMessage("Iris 'What' Commands:");
|
printHelp(sender);
|
||||||
printHelp(sender);
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getArgsUsage()
|
protected String getArgsUsage() {
|
||||||
{
|
return "";
|
||||||
return "";
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,91 +8,57 @@ import com.volmit.iris.scaffold.engine.IrisAccess;
|
|||||||
import com.volmit.iris.util.KList;
|
import com.volmit.iris.util.KList;
|
||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
import net.minecraft.core.BlockPosition;
|
|
||||||
import net.minecraft.core.IRegistry;
|
|
||||||
import net.minecraft.core.IRegistryCustom;
|
|
||||||
import net.minecraft.core.IRegistryWritable;
|
|
||||||
import net.minecraft.data.RegistryGeneration;
|
|
||||||
import net.minecraft.data.worldgen.biome.BiomeRegistry;
|
|
||||||
import net.minecraft.resources.MinecraftKey;
|
|
||||||
import net.minecraft.resources.ResourceKey;
|
|
||||||
import net.minecraft.server.commands.CommandLocateBiome;
|
|
||||||
import net.minecraft.server.level.WorldServer;
|
|
||||||
import net.minecraft.world.level.biome.BiomeBase;
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.craftbukkit.libs.it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
|
||||||
import org.bukkit.craftbukkit.v1_17_R1.CraftWorld;
|
|
||||||
import org.bukkit.craftbukkit.v1_17_R1.block.CraftBlock;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
public class CommandIrisWhatBiome extends MortarCommand {
|
||||||
import java.util.Map;
|
public CommandIrisWhatBiome() {
|
||||||
|
super("biome", "bi", "b");
|
||||||
|
setDescription("Get the biome data you are in.");
|
||||||
|
requiresPermission(Iris.perm.studio);
|
||||||
|
setCategory("Wut");
|
||||||
|
setDescription("What biome am I in");
|
||||||
|
}
|
||||||
|
|
||||||
public class CommandIrisWhatBiome extends MortarCommand
|
@Override
|
||||||
{
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
public CommandIrisWhatBiome()
|
|
||||||
{
|
|
||||||
super("biome", "bi", "b");
|
|
||||||
setDescription("Get the biome data you are in.");
|
|
||||||
requiresPermission(Iris.perm.studio);
|
|
||||||
setCategory("Wut");
|
|
||||||
setDescription("What biome am I in");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
}
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
|
||||||
|
|
||||||
}
|
@Override
|
||||||
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
|
if (sender.isPlayer()) {
|
||||||
|
Player p = sender.player();
|
||||||
|
World w = p.getWorld();
|
||||||
|
|
||||||
@Override
|
try {
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
|
||||||
{
|
|
||||||
if(sender.isPlayer())
|
|
||||||
{
|
|
||||||
Player p = sender.player();
|
|
||||||
World w = p.getWorld();
|
|
||||||
|
|
||||||
try
|
IrisAccess g = IrisWorlds.access(w);
|
||||||
{
|
assert g != null;
|
||||||
|
IrisBiome b = g.getBiome(p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ());
|
||||||
|
sender.sendMessage("IBiome: " + b.getLoadKey() + " (" + b.getDerivative().name() + ")");
|
||||||
|
|
||||||
IrisAccess g = IrisWorlds.access(w);
|
} catch (Throwable e) {
|
||||||
assert g != null;
|
sender.sendMessage("Non-Iris Biome: " + p.getLocation().getBlock().getBiome().name());
|
||||||
IrisBiome b = g.getBiome(p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ());
|
|
||||||
sender.sendMessage("IBiome: " + b.getLoadKey() + " (" + b.getDerivative().name() + ")");
|
|
||||||
|
|
||||||
}
|
if (p.getLocation().getBlock().getBiome().equals(Biome.CUSTOM)) {
|
||||||
|
try {
|
||||||
|
sender.sendMessage("Data Pack Biome: " + INMS.get().getTrueBiomeBaseKey(p.getLocation()) + " (ID: " + INMS.get().getTrueBiomeBaseId(INMS.get().getTrueBiomeBase(p.getLocation())) + ")");
|
||||||
|
} catch (Throwable ex) {
|
||||||
|
|
||||||
catch(Throwable e)
|
}
|
||||||
{
|
}
|
||||||
sender.sendMessage("Non-Iris Biome: " + p.getLocation().getBlock().getBiome().name());
|
}
|
||||||
|
} else {
|
||||||
|
sender.sendMessage("Players only.");
|
||||||
|
}
|
||||||
|
|
||||||
if(p.getLocation().getBlock().getBiome().equals(Biome.CUSTOM))
|
return true;
|
||||||
{
|
}
|
||||||
try
|
|
||||||
{
|
|
||||||
sender.sendMessage("Data Pack Biome: " + INMS.get().getTrueBiomeBaseKey(p.getLocation()) + " (ID: " + INMS.get().getTrueBiomeBaseId(INMS.get().getTrueBiomeBase(p.getLocation())) + ")");
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(Throwable ex)
|
@Override
|
||||||
{
|
protected String getArgsUsage() {
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sender.sendMessage("Players only.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,90 +1,78 @@
|
|||||||
package com.volmit.iris.manager.command.what;
|
package com.volmit.iris.manager.command.what;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.util.*;
|
import com.volmit.iris.util.*;
|
||||||
import org.bukkit.FluidCollisionMode;
|
import org.bukkit.FluidCollisionMode;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
public class CommandIrisWhatBlock extends MortarCommand {
|
||||||
|
public CommandIrisWhatBlock() {
|
||||||
|
super("block", "l", "bl");
|
||||||
|
setDescription("Get the block data for looking.");
|
||||||
|
requiresPermission(Iris.perm.studio);
|
||||||
|
setCategory("Wut");
|
||||||
|
setDescription("WAILA, WAWLA etc");
|
||||||
|
}
|
||||||
|
|
||||||
public class CommandIrisWhatBlock extends MortarCommand
|
@Override
|
||||||
{
|
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
||||||
public CommandIrisWhatBlock()
|
|
||||||
{
|
|
||||||
super("block", "l", "bl");
|
|
||||||
setDescription("Get the block data for looking.");
|
|
||||||
requiresPermission(Iris.perm.studio);
|
|
||||||
setCategory("Wut");
|
|
||||||
setDescription("WAILA, WAWLA etc");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
}
|
||||||
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
|
|
||||||
|
|
||||||
}
|
@Override
|
||||||
|
public boolean handle(MortarSender sender, String[] args) {
|
||||||
|
if (sender.isPlayer()) {
|
||||||
|
BlockData bd;
|
||||||
|
Player p = sender.player();
|
||||||
|
try {
|
||||||
|
bd = p.getTargetBlockExact(128, FluidCollisionMode.NEVER).getBlockData();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
sender.sendMessage("Please look at any block, not at the sky");
|
||||||
|
bd = null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
if (bd != null) {
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
sender.sendMessage("Material: " + C.GREEN + bd.getMaterial().name());
|
||||||
{
|
sender.sendMessage("Full: " + C.WHITE + bd.getAsString(true));
|
||||||
if(sender.isPlayer())
|
|
||||||
{
|
|
||||||
BlockData bd;
|
|
||||||
Player p = sender.player();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
bd = p.getTargetBlockExact(128, FluidCollisionMode.NEVER).getBlockData();
|
|
||||||
}
|
|
||||||
catch (NullPointerException e)
|
|
||||||
{
|
|
||||||
sender.sendMessage("Please look at any block, not at the sky");
|
|
||||||
bd = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(bd != null) {
|
if (B.isStorage(bd)) {
|
||||||
sender.sendMessage("Material: " + C.GREEN + bd.getMaterial().name());
|
sender.sendMessage(C.YELLOW + "* Storage Block (Loot Capable)");
|
||||||
sender.sendMessage("Full: " + C.WHITE + bd.getAsString(true));
|
}
|
||||||
|
|
||||||
if (B.isStorage(bd)) {
|
if (B.isLit(bd)) {
|
||||||
sender.sendMessage(C.YELLOW + "* Storage Block (Loot Capable)");
|
sender.sendMessage(C.YELLOW + "* Lit Block (Light Capable)");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (B.isLit(bd)) {
|
if (B.isFoliage(bd)) {
|
||||||
sender.sendMessage(C.YELLOW + "* Lit Block (Light Capable)");
|
sender.sendMessage(C.YELLOW + "* Foliage Block");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (B.isFoliage(bd)) {
|
if (B.isDecorant(bd)) {
|
||||||
sender.sendMessage(C.YELLOW + "* Foliage Block");
|
sender.sendMessage(C.YELLOW + "* Decorant Block");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (B.isDecorant(bd)) {
|
if (B.isFluid(bd)) {
|
||||||
sender.sendMessage(C.YELLOW + "* Decorant Block");
|
sender.sendMessage(C.YELLOW + "* Fluid Block");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (B.isFluid(bd)) {
|
if (B.isFoliagePlantable(bd)) {
|
||||||
sender.sendMessage(C.YELLOW + "* Fluid Block");
|
sender.sendMessage(C.YELLOW + "* Plantable Foliage Block");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (B.isFoliagePlantable(bd)) {
|
if (B.isSolid(bd)) {
|
||||||
sender.sendMessage(C.YELLOW + "* Plantable Foliage Block");
|
sender.sendMessage(C.YELLOW + "* Solid Block");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sender.sendMessage("Players only.");
|
||||||
|
}
|
||||||
|
|
||||||
if (B.isSolid(bd)) {
|
return true;
|
||||||
sender.sendMessage(C.YELLOW + "* Solid Block");
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
@Override
|
||||||
{
|
protected String getArgsUsage() {
|
||||||
sender.sendMessage("Players only.");
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user