9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2025-12-27 02:59:06 +00:00

Cleanup SRC

This commit is contained in:
Daniel Mills
2021-07-14 02:34:13 -04:00
parent f29015426f
commit 6ca6fc6989
605 changed files with 53283 additions and 64305 deletions

View File

@@ -1,18 +1,15 @@
package com.volmit.iris;
import com.google.gson.Gson;
import com.volmit.iris.manager.*;
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.world.CommandLocate;
import com.volmit.iris.manager.link.BKLink;
import com.volmit.iris.manager.link.CitizensLink;
import com.volmit.iris.manager.link.MultiverseCoreLink;
import com.volmit.iris.manager.link.MythicMobsLink;
import com.volmit.iris.nms.INMS;
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.engine.EngineCompositeGenerator;
import com.volmit.iris.util.*;
@@ -21,523 +18,424 @@ import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.generator.ChunkGenerator;
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.util.List;
import java.util.concurrent.Callable;
public class Iris extends VolmitPlugin implements Listener
{
public static KList<GroupedExecutor> executors = new KList<>();
public static Iris instance;
public static ProjectManager proj;
public static ConversionManager convert;
public static WandManager wand;
public static EditManager edit;
public static IrisBoardManager board;
public static BKLink linkBK;
public static MultiverseCoreLink linkMultiverseCore;
public static MythicMobsLink linkMythicMobs;
public static CitizensLink linkCitizens;
private static final Queue<Runnable> syncJobs = new ShurikenQueue<>();
public static boolean customModels = doesSupportCustomModels();
public static boolean awareEntities = doesSupportAwareness();
public static boolean biome3d = doesSupport3DBiomes();
public static boolean lowMemoryMode = false;
public static IrisCompat compat;
public static FileWatcher configWatcher;
public class Iris extends VolmitPlugin implements Listener {
public static KList<GroupedExecutor> executors = new KList<>();
public static Iris instance;
public static ProjectManager proj;
public static ConversionManager convert;
public static WandManager wand;
public static EditManager edit;
public static IrisBoardManager board;
public static BKLink linkBK;
public static MultiverseCoreLink linkMultiverseCore;
public static MythicMobsLink linkMythicMobs;
public static CitizensLink linkCitizens;
private static final Queue<Runnable> syncJobs = new ShurikenQueue<>();
public static boolean customModels = doesSupportCustomModels();
public static boolean awareEntities = doesSupportAwareness();
public static boolean biome3d = doesSupport3DBiomes();
public static boolean lowMemoryMode = false;
public static IrisCompat compat;
public static FileWatcher configWatcher;
@Permission
public static PermissionIris perm;
@Permission
public static PermissionIris perm;
@com.volmit.iris.util.Command
public CommandIris commandIris;
@com.volmit.iris.util.Command
public CommandIris commandIris;
public Iris()
{
instance = this;
INMS.get();
IO.delete(new File("iris"));
lowMemoryMode = Runtime.getRuntime().maxMemory() < 4000000000L; // 4 * 1000 * 1000 * 1000 // 4;
}
public Iris() {
instance = this;
INMS.get();
IO.delete(new File("iris"));
lowMemoryMode = Runtime.getRuntime().maxMemory() < 4000000000L; // 4 * 1000 * 1000 * 1000 // 4;
}
public static int getThreadCount()
{
int tc = IrisSettings.get().getConcurrency().getThreadCount();
public static int getThreadCount() {
int tc = IrisSettings.get().getConcurrency().getThreadCount();
if(tc <= 0)
{
int p = Runtime.getRuntime().availableProcessors();
if (tc <= 0) {
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()
{
try
{
int v = Integer.parseInt(Bukkit.getBukkitVersion().split("\\Q-\\E")[0].split("\\Q.\\E")[1]);
private static boolean doesSupport3DBiomes() {
try {
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()
{
try
{
int v = Integer.parseInt(Bukkit.getBukkitVersion().split("\\Q-\\E")[0].split("\\Q.\\E")[1]);
return v >= 14;
} catch (Throwable e) {
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;
}
catch(Throwable e)
{
}
return false;
}
return false;
}
@Override
public void start()
{
public void start() {
}
}
@Override
public void stop()
{
@Override
public void stop() {
}
}
@Override
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 + ": ";
}
@Override
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 + ": ";
}
public void onEnable()
{
instance = this;
try {
compat = IrisCompat.configured(getDataFile("compat.json"));
} catch (IOException e){
// Do nothing. Everything continues properly but the exception is still there.
}
proj = new ProjectManager();
convert = new ConversionManager();
wand = new WandManager();
board = new IrisBoardManager();
linkMultiverseCore = new MultiverseCoreLink();
linkBK = new BKLink();
linkMythicMobs = new MythicMobsLink();
edit = new EditManager();
configWatcher = new FileWatcher(getDataFile("settings.json"));
J.a(() -> IO.delete(getTemp()));
J.a(this::bstats);
J.s(this::splash, 20);
J.sr(this::tickQueue, 0);
J.ar(this::checkConfigHotload, 50);
PaperLib.suggestPaper(this);
getServer().getPluginManager().registerEvents(new CommandLocate(), this);
getServer().getPluginManager().registerEvents(new WandManager() ,this);
super.onEnable();
Bukkit.getPluginManager().registerEvents(this, this);
}
public void onEnable() {
instance = this;
try {
compat = IrisCompat.configured(getDataFile("compat.json"));
} catch (IOException e) {
// Do nothing. Everything continues properly but the exception is still there.
}
proj = new ProjectManager();
convert = new ConversionManager();
wand = new WandManager();
board = new IrisBoardManager();
linkMultiverseCore = new MultiverseCoreLink();
linkBK = new BKLink();
linkMythicMobs = new MythicMobsLink();
edit = new EditManager();
configWatcher = new FileWatcher(getDataFile("settings.json"));
J.a(() -> IO.delete(getTemp()));
J.a(this::bstats);
J.s(this::splash, 20);
J.sr(this::tickQueue, 0);
J.ar(this::checkConfigHotload, 50);
PaperLib.suggestPaper(this);
getServer().getPluginManager().registerEvents(new CommandLocate(), this);
getServer().getPluginManager().registerEvents(new WandManager(), this);
super.onEnable();
Bukkit.getPluginManager().registerEvents(this, this);
}
private void checkConfigHotload() {
if(configWatcher.checkModified())
{
IrisSettings.invalidate();
IrisSettings.get();
configWatcher.checkModified();
Iris.info("Hotloaded settings.json");
}
}
private void checkConfigHotload() {
if (configWatcher.checkModified()) {
IrisSettings.invalidate();
IrisSettings.get();
configWatcher.checkModified();
Iris.info("Hotloaded settings.json");
}
}
public void onDisable()
{
if(IrisSettings.get().isStudio())
{
proj.close();
public void onDisable() {
if (IrisSettings.get().isStudio()) {
proj.close();
for(World i : Bukkit.getWorlds())
{
if(IrisWorlds.isIrisWorld(i))
{
IrisWorlds.access(i).close();
}
}
for (World i : Bukkit.getWorlds()) {
if (IrisWorlds.isIrisWorld(i)) {
IrisWorlds.access(i).close();
}
}
for(GroupedExecutor i : executors)
{
i.close();
}
}
for (GroupedExecutor i : executors) {
i.close();
}
}
executors.clear();
board.disable();
Bukkit.getScheduler().cancelTasks(this);
HandlerList.unregisterAll((Plugin) this);
super.onDisable();
}
executors.clear();
board.disable();
Bukkit.getScheduler().cancelTasks(this);
HandlerList.unregisterAll((Plugin) this);
super.onDisable();
}
public static void sq(Runnable r)
{
synchronized(syncJobs)
{
syncJobs.queue(r);
}
}
public static void sq(Runnable r) {
synchronized (syncJobs) {
syncJobs.queue(r);
}
}
private void tickQueue()
{
synchronized(Iris.syncJobs)
{
if(!Iris.syncJobs.hasNext())
{
return;
}
private void tickQueue() {
synchronized (Iris.syncJobs) {
if (!Iris.syncJobs.hasNext()) {
return;
}
long ms = M.ms();
long ms = M.ms();
while(Iris.syncJobs.hasNext() && M.ms() - ms < 25)
{
try
{
Iris.syncJobs.next().run();
}
while (Iris.syncJobs.hasNext() && M.ms() - ms < 25) {
try {
Iris.syncJobs.next().run();
} catch (Throwable e) {
e.printStackTrace();
}
}
}
}
catch(Throwable e)
{
e.printStackTrace();
}
}
}
}
private void bstats() {
if (IrisSettings.get().getGeneral().isPluginMetrics()) {
J.s(() -> {
Metrics m = new Metrics(Iris.instance, 8757);
private void bstats()
{
if(IrisSettings.get().getGeneral().isPluginMetrics())
{
J.s(() -> {
Metrics m = new Metrics(Iris.instance, 8757);
m.addCustomChart(new Metrics.SingleLineChart("custom_dimensions", new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return ProjectManager.countUniqueDimensions();
}
}));
m.addCustomChart(new Metrics.SingleLineChart("custom_dimensions", new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return ProjectManager.countUniqueDimensions();
}
}));
m.addCustomChart(new Metrics.SimplePie("using_custom_dimensions", new Callable<String>() {
@Override
public String call() throws Exception {
return ProjectManager.countUniqueDimensions() > 0 ? "Active Projects" : "No Projects";
}
}));
});
}
}
m.addCustomChart(new Metrics.SimplePie("using_custom_dimensions", new Callable<String>() {
@Override
public String call() throws Exception {
return ProjectManager.countUniqueDimensions() > 0 ? "Active Projects" : "No Projects";
}
}));
});
}
}
public static File getTemp() {
return instance.getDataFolder("cache", "temp");
}
public static File getTemp()
{
return instance.getDataFolder("cache", "temp");
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
return super.onCommand(sender, command, label, args);
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)
{
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);
}
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
public ChunkGenerator getDefaultWorldGenerator(String worldName, String id)
{
String dimension = IrisSettings.get().getGenerator().getDefaultWorldType();
if (id != null && !id.isEmpty()) {
dimension = id;
Iris.info("Generator ID: " + id + " requested by bukkit/plugin. Assuming IrisDimension: " + id);
}
if(id != null && !id.isEmpty())
{
dimension = id;
Iris.info("Generator ID: " + id + " requested by bukkit/plugin. Assuming IrisDimension: " + id);
}
return new EngineCompositeGenerator(dimension, true);
}
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)
{
try
{
if(instance == null)
{
System.out.println("[Iris]: " + string);
return;
}
String msg = C.GRAY + "[" + C.GREEN + "Iris" + C.GRAY + "]: " + string;
Bukkit.getConsoleSender().sendMessage(msg);
} catch (Throwable e) {
System.out.println("[Iris]: " + string);
}
}
String msg = C.GRAY + "[" + C.GREEN + "Iris" + C.GRAY + "]: " + string;
Bukkit.getConsoleSender().sendMessage(msg);
}
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);
catch(Throwable e)
{
System.out.println("[Iris]: " + string);
}
}
if (!f.exists()) {
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 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())
{
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);
}
}
return f.exists() ? f : null;
}
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)
{
String h = IO.hash(name + "*" + url);
File f = Iris.instance.getDataFile("cache", h.substring(0, 2), h.substring(3, 5), h);
try {
return IO.readAll(f);
} catch (IOException ignored) {
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 IO.readAll(f);
}
return 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)
{
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);
}
}
public static void success(String string) {
msg(C.GREEN + string);
}
catch(IOException e)
{
e.printStackTrace();
}
public static void info(String string) {
msg(C.WHITE + string);
}
return f;
}
public void hit(long hits2) {
board.hits.put(hits2);
}
public static void warn(String string)
{
msg(C.YELLOW + string);
}
public void splash() {
if (!IrisSettings.get().getGeneral().isSplashLogoStartup()) {
return;
}
public static void error(String string)
{
msg(C.RED + string);
}
// @NoArgsConstructor
String padd = Form.repeat(" ", 8);
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)
{
try
{
if(IrisSettings.get().getGeneral().isVerbose())
{
msg(C.GRAY + string);
}
}
Iris.info("\n\n " + new KList<>(splash).toString("\n") + "\n");
catch(Throwable e)
{
msg(C.GRAY + string);
}
}
if (lowMemoryMode) {
Iris.verbose("* Low Memory mode Activated! For better performance, allocate 4gb or more to this server.");
}
public static void success(String string)
{
msg(C.GREEN + 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.");
}
public static void info(String string)
{
msg(C.WHITE + 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.");
}
public void hit(long hits2)
{
board.hits.put(hits2);
}
if (!doesSupportAwareness()) {
Iris.verbose("* This version of minecraft does not support entity awareness.");
}
}
public void splash()
{
if(!IrisSettings.get().getGeneral().isSplashLogoStartup())
{
return;
}
@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));
}
// @NoArgsConstructor
String padd = Form.repeat(" ", 8);
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 int jobCount() {
return syncJobs.size();
}
Iris.info("\n\n " + new KList<>(splash).toString("\n") + "\n");
public static void clearQueues() {
synchronized (syncJobs) {
syncJobs.clear();
}
}
if(lowMemoryMode)
{
Iris.verbose("* Low Memory mode Activated! For better performance, allocate 4gb or more to this server.");
}
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.");
}
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.");
}
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);
}
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() {
return IrisSettings.get().getGenerator().isMcaPregenerator();
return IrisSettings.get().getGenerator().isMcaPregenerator();
}
}

View File

@@ -8,258 +8,215 @@ import java.io.File;
import java.io.IOException;
@Data
public class IrisSettings
{
public static transient IrisSettings settings;
private IrisSettingsCache cache = new IrisSettingsCache();
private IrisSettingsConcurrency concurrency = new IrisSettingsConcurrency();
private IrisSettingsParallax parallax = new IrisSettingsParallax();
private IrisSettingsGeneral general = new IrisSettingsGeneral();
private IrisSettingsGUI gui = new IrisSettingsGUI();
private IrisSettingsGenerator generator = new IrisSettingsGenerator();
private IrisSettingsStudio studio = new IrisSettingsStudio();
public class IrisSettings {
public static transient IrisSettings settings;
private IrisSettingsCache cache = new IrisSettingsCache();
private IrisSettingsConcurrency concurrency = new IrisSettingsConcurrency();
private IrisSettingsParallax parallax = new IrisSettingsParallax();
private IrisSettingsGeneral general = new IrisSettingsGeneral();
private IrisSettingsGUI gui = new IrisSettingsGUI();
private IrisSettingsGenerator generator = new IrisSettingsGenerator();
private IrisSettingsStudio studio = new IrisSettingsStudio();
@DontObfuscate
public int configurationVersion = 3;
@DontObfuscate
public int configurationVersion = 3;
public boolean isStudio() {
return getStudio().isStudio();
}
public boolean isStudio() {
return getStudio().isStudio();
}
public boolean isUseServerLaunchedGuis() {
return getGui().isUseServerLaunchedGuis();
}
public boolean isUseServerLaunchedGuis() {
return getGui().isUseServerLaunchedGuis();
}
public long getParallaxRegionEvictionMS() {
return getParallax().getParallaxRegionEvictionMS();
}
public long getParallaxRegionEvictionMS() {
return getParallax().getParallaxRegionEvictionMS();
}
@Data
public static class IrisSettingsCache
{
@DontObfuscate
public int streamingCacheSize = 8192;
}
@Data
public static class IrisSettingsCache {
@DontObfuscate
public int streamingCacheSize = 8192;
}
@Data
public static class IrisSettingsConcurrency
{
@DontObfuscate
public int threadCount = -1;
}
@Data
public static class IrisSettingsConcurrency {
@DontObfuscate
public int threadCount = -1;
}
@Data
public static class IrisSettingsParallax
{
@DontObfuscate
public int parallaxRegionEvictionMS = 15000;
@Data
public static class IrisSettingsParallax {
@DontObfuscate
public int parallaxRegionEvictionMS = 15000;
@DontObfuscate
public int parallaxChunkEvictionMS = 5000;
}
@DontObfuscate
public int parallaxChunkEvictionMS = 5000;
}
@Data
public static class IrisSettingsGeneral
{
@Data
public static class IrisSettingsGeneral {
@DontObfuscate
public boolean commandSounds = true;
@DontObfuscate
public boolean commandSounds = true;
@DontObfuscate
public boolean verbose = false;
@DontObfuscate
public boolean verbose = false;
@DontObfuscate
public boolean ignoreWorldEdit = false;
@DontObfuscate
public boolean ignoreWorldEdit = false;
@DontObfuscate
public boolean disableNMS = false;
@DontObfuscate
public boolean disableNMS = false;
@DontObfuscate
public boolean pluginMetrics = true;
@DontObfuscate
public boolean pluginMetrics = true;
@DontObfuscate
public boolean splashLogoStartup = true;
}
@DontObfuscate
public boolean splashLogoStartup = true;
}
@Data
public static class IrisSettingsGUI
{
@DontObfuscate
public boolean useServerLaunchedGuis = true;
@Data
public static class IrisSettingsGUI {
@DontObfuscate
public boolean useServerLaunchedGuis = true;
@DontObfuscate
public boolean maximumPregenGuiFPS = false;
@DontObfuscate
public boolean maximumPregenGuiFPS = false;
@DontObfuscate
public boolean localPregenGui = true;
}
@DontObfuscate
public boolean localPregenGui = true;
}
@Data
public static class IrisSettingsGenerator
{
@DontObfuscate
public String defaultWorldType = "overworld";
@Data
public static class IrisSettingsGenerator {
@DontObfuscate
public String defaultWorldType = "overworld";
@DontObfuscate
public boolean mcaPregenerator = false;
@DontObfuscate
public boolean mcaPregenerator = false;
@DontObfuscate
public boolean systemEffects = true;
@DontObfuscate
public boolean systemEffects = true;
@DontObfuscate
public boolean systemEntitySpawnOverrides = true;
@DontObfuscate
public boolean systemEntitySpawnOverrides = true;
@DontObfuscate
public boolean systemEntityInitialSpawns = true;
@DontObfuscate
public boolean systemEntityInitialSpawns = true;
@DontObfuscate
public int maxBiomeChildDepth = 5;
@DontObfuscate
public int maxBiomeChildDepth = 5;
}
}
@Data
public static class IrisSettingsStudio
{
@Data
public static class IrisSettingsStudio {
@DontObfuscate
public boolean studio = true;
@DontObfuscate
public boolean studio = true;
@DontObfuscate
public boolean openVSCode = true;
@DontObfuscate
public boolean openVSCode = true;
@DontObfuscate
public boolean disableTimeAndWeather = true;
}
@DontObfuscate
public boolean disableTimeAndWeather = true;
}
public static IrisSettings get()
{
if(settings != null)
{
return settings;
}
public static IrisSettings get() {
if (settings != null) {
return settings;
}
IrisSettings defaults = new IrisSettings();
JSONObject def = new JSONObject(new Gson().toJson(defaults));
if(settings == null)
{
settings = new IrisSettings();
IrisSettings defaults = new IrisSettings();
JSONObject def = new JSONObject(new Gson().toJson(defaults));
if (settings == null) {
settings = new IrisSettings();
File s = Iris.instance.getDataFile("settings.json");
File s = Iris.instance.getDataFile("settings.json");
if(!s.exists())
{
try
{
IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4));
}
if (!s.exists()) {
try {
IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4));
} catch (JSONException | IOException e) {
e.printStackTrace();
}
} else {
try {
String ss = IO.readAll(s);
settings = new Gson().fromJson(ss, IrisSettings.class);
catch(JSONException | IOException e)
{
e.printStackTrace();
}
}
J.a(() ->
{
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
{
try
{
String ss = IO.readAll(s);
settings = new Gson().fromJson(ss, IrisSettings.class);
for (String i : new KSet<>(j.keySet())) {
if (!def.has(i)) {
u = true;
j.remove(i);
Iris.warn("Removing unused config key: " + i);
}
}
J.a(() ->
{
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);
}
}
if (u) {
try {
IO.writeAll(s, j.toString(4));
Iris.info("Updated Configuration Files");
} catch (Throwable e) {
e.printStackTrace();
}
}
} 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...");
for(String i : new KSet<>(j.keySet()))
{
if(!def.has(i))
{
u = true;
j.remove(i);
Iris.warn("Removing unused config key: " + i);
}
}
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!");
}
}
});
} 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, j.toString(4));
Iris.info("Updated Configuration Files");
}
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!");
}
}
}
catch(Throwable e)
{
e.printStackTrace();
}
}
}
if (!s.exists()) {
try {
IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4));
} catch (JSONException | IOException e) {
e.printStackTrace();
}
}
}
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...");
return 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!");
}
}
});
}
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;
}
}
public static void invalidate() {
synchronized (settings) {
settings = null;
}
}
}

View File

@@ -12,377 +12,340 @@ import com.volmit.iris.scaffold.data.DataProvider;
import com.volmit.iris.scaffold.engine.Engine;
import com.volmit.iris.scaffold.stream.ProceduralStream;
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 org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
@Data
public class IrisComplex implements DataProvider
{
private RNG rng;
private double fluidHeight;
private IrisDataManager data;
private KList<IrisGenerator> generators;
private static final BlockData AIR = Material.AIR.createBlockData();
private ProceduralStream<IrisRegion> regionStream;
private ProceduralStream<InferredType> bridgeStream;
private ProceduralStream<IrisBiome> landBiomeStream;
private ProceduralStream<IrisBiome> caveBiomeStream;
private ProceduralStream<IrisBiome> seaBiomeStream;
private ProceduralStream<IrisBiome> shoreBiomeStream;
private ProceduralStream<IrisBiome> baseBiomeStream;
private ProceduralStream<IrisBiome> trueBiomeStream;
private ProceduralStream<Biome> trueBiomeDerivativeStream;
private ProceduralStream<Double> heightStream;
private ProceduralStream<Double> objectChanceStream;
private ProceduralStream<Double> maxHeightStream;
private ProceduralStream<Double> overlayStream;
private ProceduralStream<Double> heightFluidStream;
private ProceduralStream<Integer> trueHeightStream;
private ProceduralStream<Double> slopeStream;
private ProceduralStream<RNG> rngStream;
private ProceduralStream<RNG> chunkRngStream;
private ProceduralStream<IrisDecorator> terrainSurfaceDecoration;
private ProceduralStream<IrisDecorator> terrainCeilingDecoration;
private ProceduralStream<IrisDecorator> terrainCaveSurfaceDecoration;
private ProceduralStream<IrisDecorator> terrainCaveCeilingDecoration;
private ProceduralStream<IrisDecorator> seaSurfaceDecoration;
private ProceduralStream<IrisDecorator> seaFloorDecoration;
private ProceduralStream<IrisDecorator> shoreSurfaceDecoration;
private ProceduralStream<BlockData> rockStream;
private ProceduralStream<BlockData> fluidStream;
private IrisBiome focus;
public class IrisComplex implements DataProvider {
private RNG rng;
private double fluidHeight;
private IrisDataManager data;
private KList<IrisGenerator> generators;
private static final BlockData AIR = Material.AIR.createBlockData();
private ProceduralStream<IrisRegion> regionStream;
private ProceduralStream<InferredType> bridgeStream;
private ProceduralStream<IrisBiome> landBiomeStream;
private ProceduralStream<IrisBiome> caveBiomeStream;
private ProceduralStream<IrisBiome> seaBiomeStream;
private ProceduralStream<IrisBiome> shoreBiomeStream;
private ProceduralStream<IrisBiome> baseBiomeStream;
private ProceduralStream<IrisBiome> trueBiomeStream;
private ProceduralStream<Biome> trueBiomeDerivativeStream;
private ProceduralStream<Double> heightStream;
private ProceduralStream<Double> objectChanceStream;
private ProceduralStream<Double> maxHeightStream;
private ProceduralStream<Double> overlayStream;
private ProceduralStream<Double> heightFluidStream;
private ProceduralStream<Integer> trueHeightStream;
private ProceduralStream<Double> slopeStream;
private ProceduralStream<RNG> rngStream;
private ProceduralStream<RNG> chunkRngStream;
private ProceduralStream<IrisDecorator> terrainSurfaceDecoration;
private ProceduralStream<IrisDecorator> terrainCeilingDecoration;
private ProceduralStream<IrisDecorator> terrainCaveSurfaceDecoration;
private ProceduralStream<IrisDecorator> terrainCaveCeilingDecoration;
private ProceduralStream<IrisDecorator> seaSurfaceDecoration;
private ProceduralStream<IrisDecorator> seaFloorDecoration;
private ProceduralStream<IrisDecorator> shoreSurfaceDecoration;
private ProceduralStream<BlockData> rockStream;
private ProceduralStream<BlockData> fluidStream;
private IrisBiome focus;
public ProceduralStream<IrisBiome> getBiomeStream(InferredType type)
{
switch(type)
{
case CAVE:
return caveBiomeStream;
case LAND:
return landBiomeStream;
case SEA:
return seaBiomeStream;
case SHORE:
return shoreBiomeStream;
case DEFER:
case LAKE:
case RIVER:
default:
break;
}
public ProceduralStream<IrisBiome> getBiomeStream(InferredType type) {
switch (type) {
case CAVE:
return caveBiomeStream;
case LAND:
return landBiomeStream;
case SEA:
return seaBiomeStream;
case SHORE:
return shoreBiomeStream;
case DEFER:
case LAKE:
case RIVER:
default:
break;
}
return null;
}
return null;
}
public IrisComplex(Engine engine)
{
int cacheSize = IrisSettings.get().getCache().getStreamingCacheSize();
this.rng = new RNG(engine.getWorld().getSeed());
this.data = engine.getData();
double height = engine.getHeight();
fluidHeight = engine.getDimension().getFluidHeight();
generators = new KList<>();
focus = engine.getFocus();
IrisRegion focusRegion = focus != null ? findRegion(focus, engine) : null;
RNG rng = new RNG(engine.getWorld().getSeed());
//@builder
engine.getDimension().getRegions().forEach((i) -> data.getRegionLoader().load(i)
.getAllBiomes(this).forEach((b) -> b
.getGenerators()
.forEach((c) -> registerGenerator(c.getCachedGenerator(this)))));
overlayStream = ProceduralStream.ofDouble((x, z) -> 0D);
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))
.nextParallelRNG(engine.getWorld().getSeed()), Interpolated.RNG);
chunkRngStream = rngStream.blockToChunkCoords();
rockStream = engine.getDimension().getRockPalette().getLayerGenerator(rng.nextParallelRNG(45), data).stream()
.select(engine.getDimension().getRockPalette().getBlockData(data));
fluidStream = engine.getDimension().getFluidPalette().getLayerGenerator(rng.nextParallelRNG(78), data).stream()
.select(engine.getDimension().getFluidPalette().getBlockData(data));
regionStream = focusRegion != null ?
ProceduralStream.of((x,z) -> focusRegion,
Interpolated.of(a -> 0D, a -> focusRegion))
: engine.getDimension().getRegionStyle().create(rng.nextParallelRNG(883)).stream()
.zoom(engine.getDimension().getRegionZoom())
.selectRarity(engine.getDimension().getRegions())
.convertCached((s) -> data.getRegionLoader().load(s)).cache2D(cacheSize);
caveBiomeStream = regionStream.convert((r)
-> engine.getDimension().getCaveBiomeStyle().create(rng.nextParallelRNG(1221)).stream()
.zoom(r.getCaveBiomeZoom())
.selectRarity(r.getCaveBiomes())
.onNull("")
.convertCached((s) -> {
if(s.isEmpty())
{
return new IrisBiome();
}
public IrisComplex(Engine engine) {
int cacheSize = IrisSettings.get().getCache().getStreamingCacheSize();
this.rng = new RNG(engine.getWorld().getSeed());
this.data = engine.getData();
double height = engine.getHeight();
fluidHeight = engine.getDimension().getFluidHeight();
generators = new KList<>();
focus = engine.getFocus();
IrisRegion focusRegion = focus != null ? findRegion(focus, engine) : null;
RNG rng = new RNG(engine.getWorld().getSeed());
//@builder
engine.getDimension().getRegions().forEach((i) -> data.getRegionLoader().load(i)
.getAllBiomes(this).forEach((b) -> b
.getGenerators()
.forEach((c) -> registerGenerator(c.getCachedGenerator(this)))));
overlayStream = ProceduralStream.ofDouble((x, z) -> 0D);
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))
.nextParallelRNG(engine.getWorld().getSeed()), Interpolated.RNG);
chunkRngStream = rngStream.blockToChunkCoords();
rockStream = engine.getDimension().getRockPalette().getLayerGenerator(rng.nextParallelRNG(45), data).stream()
.select(engine.getDimension().getRockPalette().getBlockData(data));
fluidStream = engine.getDimension().getFluidPalette().getLayerGenerator(rng.nextParallelRNG(78), data).stream()
.select(engine.getDimension().getFluidPalette().getBlockData(data));
regionStream = focusRegion != null ?
ProceduralStream.of((x, z) -> focusRegion,
Interpolated.of(a -> 0D, a -> focusRegion))
: engine.getDimension().getRegionStyle().create(rng.nextParallelRNG(883)).stream()
.zoom(engine.getDimension().getRegionZoom())
.selectRarity(engine.getDimension().getRegions())
.convertCached((s) -> data.getRegionLoader().load(s)).cache2D(cacheSize);
caveBiomeStream = regionStream.convert((r)
-> engine.getDimension().getCaveBiomeStyle().create(rng.nextParallelRNG(1221)).stream()
.zoom(r.getCaveBiomeZoom())
.selectRarity(r.getCaveBiomes())
.onNull("")
.convertCached((s) -> {
if (s.isEmpty()) {
return new IrisBiome();
}
return data.getBiomeLoader().load(s)
.setInferredType(InferredType.CAVE);
})
).convertAware2D(ProceduralStream::get).cache2D(cacheSize);
landBiomeStream = regionStream.convert((r)
-> engine.getDimension().getLandBiomeStyle().create(rng.nextParallelRNG(234234234)).stream()
.zoom(r.getLandBiomeZoom())
.selectRarity(r.getLandBiomes())
.convertCached((s) -> data.getBiomeLoader().load(s)
.setInferredType(InferredType.LAND))
).convertAware2D(ProceduralStream::get)
.cache2D(cacheSize);
seaBiomeStream = regionStream.convert((r)
-> engine.getDimension().getSeaBiomeStyle().create(rng.nextParallelRNG(11232323)).stream()
.zoom(r.getSeaBiomeZoom())
.selectRarity(r.getSeaBiomes())
.convertCached((s) -> data.getBiomeLoader().load(s)
.setInferredType(InferredType.SEA))
).convertAware2D(ProceduralStream::get)
.cache2D(cacheSize);
shoreBiomeStream = regionStream.convert((r)
-> engine.getDimension().getShoreBiomeStyle().create(rng.nextParallelRNG(7787845)).stream()
.zoom(r.getShoreBiomeZoom())
.selectRarity(r.getShoreBiomes())
.convertCached((s) -> data.getBiomeLoader().load(s)
.setInferredType(InferredType.SHORE))
).convertAware2D(ProceduralStream::get).cache2D(cacheSize);
bridgeStream = focus != null ? ProceduralStream.of((x,z)->focus.getInferredType(),
Interpolated.of(a -> 0D, a -> focus.getInferredType())) :
engine.getDimension().getContinentalStyle().create(rng.nextParallelRNG(234234565))
.bake().scale(1D / engine.getDimension().getContinentZoom()).bake().stream()
.convert((v) -> v >= engine.getDimension().getLandChance() ? InferredType.SEA : InferredType.LAND);
baseBiomeStream = focus != null ? ProceduralStream.of((x,z) -> focus,
Interpolated.of(a -> 0D, a -> focus)) :
bridgeStream.convertAware2D((t, x, z) -> t.equals(InferredType.SEA)
? seaBiomeStream.get(x, z) : landBiomeStream.get(x, z))
.convertAware2D(this::implode).cache2D(cacheSize);
heightStream = ProceduralStream.of((x, z) -> {
IrisBiome b = focus != null ? focus : baseBiomeStream.get(x, z);
return getHeight(engine, b, x, z, engine.getWorld().getSeed());
}, Interpolated.DOUBLE).cache2D(cacheSize);
slopeStream = heightStream.slope(3).interpolate().bilinear(3, 3).cache2D(cacheSize);
objectChanceStream = ProceduralStream.ofDouble((x, z) -> {
AtomicDouble str = new AtomicDouble(1D);
engine.getFramework().getEngineParallax().forEachFeature(x, z, (i)
-> str.set(Math.min(str.get(), i.getObjectChanceModifier(x, z))));
return str.get();
});
return data.getBiomeLoader().load(s)
.setInferredType(InferredType.CAVE);
})
).convertAware2D(ProceduralStream::get).cache2D(cacheSize);
landBiomeStream = regionStream.convert((r)
-> engine.getDimension().getLandBiomeStyle().create(rng.nextParallelRNG(234234234)).stream()
.zoom(r.getLandBiomeZoom())
.selectRarity(r.getLandBiomes())
.convertCached((s) -> data.getBiomeLoader().load(s)
.setInferredType(InferredType.LAND))
).convertAware2D(ProceduralStream::get)
.cache2D(cacheSize);
seaBiomeStream = regionStream.convert((r)
-> engine.getDimension().getSeaBiomeStyle().create(rng.nextParallelRNG(11232323)).stream()
.zoom(r.getSeaBiomeZoom())
.selectRarity(r.getSeaBiomes())
.convertCached((s) -> data.getBiomeLoader().load(s)
.setInferredType(InferredType.SEA))
).convertAware2D(ProceduralStream::get)
.cache2D(cacheSize);
shoreBiomeStream = regionStream.convert((r)
-> engine.getDimension().getShoreBiomeStyle().create(rng.nextParallelRNG(7787845)).stream()
.zoom(r.getShoreBiomeZoom())
.selectRarity(r.getShoreBiomes())
.convertCached((s) -> data.getBiomeLoader().load(s)
.setInferredType(InferredType.SHORE))
).convertAware2D(ProceduralStream::get).cache2D(cacheSize);
bridgeStream = focus != null ? ProceduralStream.of((x, z) -> focus.getInferredType(),
Interpolated.of(a -> 0D, a -> focus.getInferredType())) :
engine.getDimension().getContinentalStyle().create(rng.nextParallelRNG(234234565))
.bake().scale(1D / engine.getDimension().getContinentZoom()).bake().stream()
.convert((v) -> v >= engine.getDimension().getLandChance() ? InferredType.SEA : InferredType.LAND);
baseBiomeStream = focus != null ? ProceduralStream.of((x, z) -> focus,
Interpolated.of(a -> 0D, a -> focus)) :
bridgeStream.convertAware2D((t, x, z) -> t.equals(InferredType.SEA)
? seaBiomeStream.get(x, z) : landBiomeStream.get(x, z))
.convertAware2D(this::implode).cache2D(cacheSize);
heightStream = ProceduralStream.of((x, z) -> {
IrisBiome b = focus != null ? focus : baseBiomeStream.get(x, z);
return getHeight(engine, b, x, z, engine.getWorld().getSeed());
}, Interpolated.DOUBLE).cache2D(cacheSize);
slopeStream = heightStream.slope(3).interpolate().bilinear(3, 3).cache2D(cacheSize);
objectChanceStream = ProceduralStream.ofDouble((x, z) -> {
AtomicDouble str = new AtomicDouble(1D);
engine.getFramework().getEngineParallax().forEachFeature(x, z, (i)
-> str.set(Math.min(str.get(), i.getObjectChanceModifier(x, z))));
return str.get();
});
trueBiomeStream = focus != null ? ProceduralStream.of((x,y) -> focus, Interpolated.of(a -> 0D,
b -> focus)) : heightStream
.convertAware2D((h, x, z) ->
fixBiomeType(h, baseBiomeStream.get(x, z),
regionStream.get(x, z), x, z, fluidHeight)).cache2D(cacheSize);
trueBiomeDerivativeStream = trueBiomeStream.convert(IrisBiome::getDerivative).cache2D(cacheSize);
heightFluidStream = heightStream.max(fluidHeight).cache2D(cacheSize);
maxHeightStream = ProceduralStream.ofDouble((x, z) -> height);
terrainSurfaceDecoration = trueBiomeStream
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.NONE));
terrainCeilingDecoration = trueBiomeStream
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.CEILING));
terrainCaveSurfaceDecoration = caveBiomeStream
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.NONE));
terrainCaveCeilingDecoration = caveBiomeStream
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.CEILING));
shoreSurfaceDecoration = trueBiomeStream
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.SHORE_LINE));
seaSurfaceDecoration = trueBiomeStream
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.SEA_SURFACE));
seaFloorDecoration = trueBiomeStream
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.SEA_FLOOR));
trueHeightStream = ProceduralStream.of((x, z) -> {
int rx = (int) Math.round(engine.modifyX(x));
int rz = (int) Math.round(engine.modifyZ(z));
int heightf = (int) Math.round(getHeightStream().get(rx, rz));
int m = heightf;
trueBiomeStream = focus != null ? ProceduralStream.of((x, y) -> focus, Interpolated.of(a -> 0D,
b -> focus)) : heightStream
.convertAware2D((h, x, z) ->
fixBiomeType(h, baseBiomeStream.get(x, z),
regionStream.get(x, z), x, z, fluidHeight)).cache2D(cacheSize);
trueBiomeDerivativeStream = trueBiomeStream.convert(IrisBiome::getDerivative).cache2D(cacheSize);
heightFluidStream = heightStream.max(fluidHeight).cache2D(cacheSize);
maxHeightStream = ProceduralStream.ofDouble((x, z) -> height);
terrainSurfaceDecoration = trueBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.NONE));
terrainCeilingDecoration = trueBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.CEILING));
terrainCaveSurfaceDecoration = caveBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.NONE));
terrainCaveCeilingDecoration = caveBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.CEILING));
shoreSurfaceDecoration = trueBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.SHORE_LINE));
seaSurfaceDecoration = trueBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.SEA_SURFACE));
seaFloorDecoration = trueBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, DecorationPart.SEA_FLOOR));
trueHeightStream = ProceduralStream.of((x, z) -> {
int rx = (int) Math.round(engine.modifyX(x));
int rz = (int) Math.round(engine.modifyZ(z));
int heightf = (int) Math.round(getHeightStream().get(rx, rz));
int m = heightf;
if(engine.getDimension().isCarving())
{
if(engine.getDimension().isCarved(rx, m, rz, ((IrisTerrainActuator)engine.getFramework().getTerrainActuator()).getRng(), heightf))
{
m--;
if (engine.getDimension().isCarving()) {
if (engine.getDimension().isCarved(rx, m, rz, ((IrisTerrainActuator) engine.getFramework().getTerrainActuator()).getRng(), heightf)) {
m--;
while(engine.getDimension().isCarved(rx, m, rz, ((IrisTerrainActuator)engine.getFramework().getTerrainActuator()).getRng(), heightf))
{
m--;
}
}
}
while (engine.getDimension().isCarved(rx, m, rz, ((IrisTerrainActuator) engine.getFramework().getTerrainActuator()).getRng(), heightf)) {
m--;
}
}
}
if(engine.getDimension().isCaves())
{
KList<CaveResult> caves = ((IrisCaveModifier)engine.getFramework().getCaveModifier()).genCaves(rx, rz, 0, 0, null);
boolean again = true;
if (engine.getDimension().isCaves()) {
KList<CaveResult> caves = ((IrisCaveModifier) engine.getFramework().getCaveModifier()).genCaves(rx, rz, 0, 0, null);
boolean again = true;
while(again)
{
again = false;
for(CaveResult i : caves)
{
if(i.getCeiling() > m && i.getFloor() < m)
{
m = i.getFloor();
again = true;
}
}
}
}
while (again) {
again = false;
for (CaveResult i : caves) {
if (i.getCeiling() > m && i.getFloor() < m) {
m = i.getFloor();
again = true;
}
}
}
}
return m;
}, Interpolated.INT).cache2D(cacheSize);
//@done
}
private IrisRegion findRegion(IrisBiome focus, Engine engine) {
for(IrisRegion i : engine.getDimension().getAllRegions(engine))
{
if(i.getAllBiomeIds().contains(focus.getLoadKey()))
{
return i;
}
}
return m;
}, Interpolated.INT).cache2D(cacheSize);
//@done
}
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)
{
RNG rngc = chunkRngStream.get(x, z);
return null;
}
for(IrisDecorator i : b.getDecorators())
{
if(!i.getPartOf().equals(part))
{
continue;
}
private IrisDecorator decorateFor(IrisBiome b, double x, double z, DecorationPart part) {
RNG rngc = chunkRngStream.get(x, z);
BlockData block = i.getBlockData(b, rngc, x, z, data);
for (IrisDecorator i : b.getDecorators()) {
if (!i.getPartOf().equals(part)) {
continue;
}
if(block != null)
{
return i;
}
}
BlockData block = i.getBlockData(b, rngc, x, z, data);
return null;
}
if (block != null) {
return i;
}
}
private IrisBiome implode(IrisBiome b, Double x, Double z)
{
if(b.getChildren().isEmpty())
{
return b;
}
return null;
}
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)
{
if(max < 0)
{
return b;
}
return implode(b, x, z, 3);
}
if(b.getChildren().isEmpty())
{
return b;
}
private IrisBiome implode(IrisBiome b, Double x, Double z, int max) {
if (max < 0) {
return b;
}
CNG childCell = b.getChildrenGenerator(rng, 123, b.getChildShrinkFactor());
KList<IrisBiome> chx = b.getRealChildren(this).copy();
chx.add(b);
IrisBiome biome = childCell.fitRarity(chx, x, z);
biome.setInferredType(b.getInferredType());
return implode(biome, x, z, max - 1);
}
if (b.getChildren().isEmpty()) {
return b;
}
private IrisBiome fixBiomeType(Double height, IrisBiome biome, IrisRegion region, Double x, Double z, double fluidHeight)
{
double sh = region.getShoreHeight(x, z);
CNG childCell = b.getChildrenGenerator(rng, 123, b.getChildShrinkFactor());
KList<IrisBiome> chx = b.getRealChildren(this).copy();
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())
{
return shoreBiomeStream.get(x, z);
}
private IrisBiome fixBiomeType(Double height, IrisBiome biome, IrisRegion region, Double x, Double z, double fluidHeight) {
double sh = region.getShoreHeight(x, z);
if(height > fluidHeight + sh && !biome.isLand())
{
return landBiomeStream.get(x, z);
}
if (height >= fluidHeight - 1 && height <= fluidHeight + sh && !biome.isShore()) {
return shoreBiomeStream.get(x, z);
}
if(height < fluidHeight && !biome.isAquatic())
{
return seaBiomeStream.get(x, z);
}
if (height > fluidHeight + sh && !biome.isLand()) {
return landBiomeStream.get(x, z);
}
if(height == fluidHeight && !biome.isShore())
{
return shoreBiomeStream.get(x, z);
}
if (height < fluidHeight && !biome.isAquatic()) {
return seaBiomeStream.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)
{
double h = 0;
return biome;
}
for(IrisGenerator gen : generators)
{
double hi = gen.getInterpolator().interpolate(x, z, (xx, zz) ->
{
try
{
IrisBiome bx = baseBiomeStream.get(xx, zz);
private double getHeight(Engine engine, IrisBiome b, double x, double z, long seed) {
double h = 0;
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)
{
Iris.warn("Failed to sample hi biome at " + xx + " " + zz + " using the generator " + gen.getLoadKey());
}
return bx.getGenLinkMax(gen.getLoadKey());
} catch (Throwable e) {
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) ->
{
try
{
IrisBiome bx = baseBiomeStream.get(xx, zz);
double lo = gen.getInterpolator().interpolate(x, z, (xx, zz) ->
{
try {
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)
{
Iris.warn("Failed to sample lo biome at " + xx + " " + zz + " using the generator " + gen.getLoadKey());
}
return 0;
});
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));
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));
}
private void registerGenerator(IrisGenerator cachedGenerator) {
for (IrisGenerator i : generators) {
if (i.getLoadKey().equals(cachedGenerator.getLoadKey())) {
return;
}
}
private void registerGenerator(IrisGenerator cachedGenerator)
{
for(IrisGenerator i : generators)
{
if(i.getLoadKey().equals(cachedGenerator.getLoadKey()))
{
return;
}
}
generators.add(cachedGenerator);
}
generators.add(cachedGenerator);
}
}

View File

@@ -2,7 +2,6 @@ package com.volmit.iris.generator;
import com.volmit.iris.Iris;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.scaffold.cache.AtomicCache;
import com.volmit.iris.scaffold.engine.*;
import com.volmit.iris.scaffold.hunk.Hunk;
import com.volmit.iris.util.J;
@@ -19,8 +18,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.Random;
public class IrisEngine extends BlockPopulator implements Engine
{
public class IrisEngine extends BlockPopulator implements Engine {
@Getter
private final EngineCompound compound;
@@ -54,8 +52,7 @@ public class IrisEngine extends BlockPopulator implements Engine
private int cacheId;
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)");
metrics = new EngineMetrics(32);
this.target = target;
@@ -72,8 +69,7 @@ public class IrisEngine extends BlockPopulator implements Engine
}
@Override
public void close()
{
public void close() {
J.car(art);
closed = true;
getWorldManager().close();
@@ -102,11 +98,10 @@ public class IrisEngine extends BlockPopulator implements Engine
@Override
public void generate(int x, int z, Hunk<BlockData> vblocks, Hunk<Biome> vbiomes) {
try
{
try {
PrecisionStopwatch p = PrecisionStopwatch.start();
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);
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().getBiomeActuator().actuate(x, z, vbiomes);
getFramework().getTerrainActuator().actuate(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().getDepositModifier().modify(x, z, blocks);
getMetrics().getTotal().put(p.getMilliseconds());
}
catch(Throwable e)
{
} catch (Throwable e) {
fail("Failed to generate " + x + ", " + z, e);
}
}
@Override
public IrisBiome getFocus() {
if(getDimension().getFocus() == null || getDimension().getFocus().trim().isEmpty())
{
if (getDimension().getFocus() == null || getDimension().getFocus().trim().isEmpty()) {
return null;
}
@@ -135,8 +126,7 @@ public class IrisEngine extends BlockPopulator implements Engine
}
@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);
updateChunk(c);
placeTiles(c);

View File

@@ -14,10 +14,6 @@ import com.volmit.iris.scaffold.parallel.MultiBurst;
import com.volmit.iris.util.*;
import lombok.Getter;
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.block.Biome;
import org.bukkit.block.data.BlockData;
@@ -27,14 +23,7 @@ import org.bukkit.event.world.WorldSaveEvent;
import org.bukkit.generator.BlockPopulator;
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.Set;
import java.util.concurrent.CompletableFuture;
public class IrisEngineCompound implements EngineCompound {
@Getter
@@ -65,8 +54,7 @@ public class IrisEngineCompound implements EngineCompound {
@Setter
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);
this.rootDimension = rootDimension;
Iris.info("Initializing Engine Composite for " + world.getName());
@@ -78,58 +66,47 @@ public class IrisEngineCompound implements EngineCompound {
saveEngineMetadata();
populators = new KList<>();
if(rootDimension.getDimensionalComposite().isEmpty())
{
if (rootDimension.getDimensionalComposite().isEmpty()) {
burster = null;
// TODO: WARNING HEIGHT
engines = new Engine[]{new IrisEngine(new EngineTarget(world, rootDimension, data, 256, maximumThreads), this, 0)};
defaultEngine = engines[0];
}
else
{
} else {
double totalWeight = 0D;
engines = new Engine[rootDimension.getDimensionalComposite().size()];
burster = engines.length > 1 ? new MultiBurst(engines.length) : null;
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!");
}
for(IrisDimensionIndex i : rootDimension.getDimensionalComposite())
{
for (IrisDimensionIndex i : rootDimension.getDimensionalComposite()) {
totalWeight += i.getWeight();
}
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);
IrisDimension dimension = data.getDimensionLoader().load(index.getDimension());
// 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);
buf += engines[i].getHeight();
if(index.isPrimary())
{
if (index.isPrimary()) {
defaultEngine = engines[i];
}
}
if(defaultEngine == null)
{
if (defaultEngine == null) {
defaultEngine = engines[0];
}
}
for(Engine i : engines)
{
if(i instanceof BlockPopulator)
{
for (Engine i : engines) {
if (i instanceof BlockPopulator) {
populators.add((BlockPopulator) i);
}
}
@@ -137,40 +114,33 @@ public class IrisEngineCompound implements EngineCompound {
Iris.instance.registerListener(this);
}
public List<IrisPosition> getStrongholdPositions()
{
public List<IrisPosition> getStrongholdPositions() {
return engineMetadata.getStrongholdPositions();
}
@EventHandler
public void on(WorldSaveEvent e)
{
if(world != null &&e.getWorld().equals(world))
{
public void on(WorldSaveEvent e) {
if (world != null && e.getWorld().equals(world)) {
save();
}
}
public void printMetrics(CommandSender sender)
{
public void printMetrics(CommandSender sender) {
KMap<String, Double> totals = new KMap<>();
KMap<String, Double> weights = new KMap<>();
double masterWallClock = wallClock.getAverage();
for(int i = 0; i < getSize(); i++)
{
for (int i = 0; i < getSize(); i++) {
Engine e = getEngine(i);
KMap<String, Double> timings = e.getMetrics().pull();
double totalWeight = 0;
double wallClock = e.getMetrics().getTotal().getAverage();
for(double j : timings.values())
{
for (double j : timings.values()) {
totalWeight += j;
}
for(String j : timings.k())
{
for (String j : timings.k()) {
weights.put(e.getName() + "[" + e.getIndex() + "]." + j, (wallClock / totalWeight) * timings.get(j));
}
@@ -179,44 +149,38 @@ public class IrisEngineCompound implements EngineCompound {
double mtotals = 0;
for(double i : totals.values())
{
mtotals+=i;
for (double i : totals.values()) {
mtotals += i;
}
for(String i : totals.k())
{
for (String i : totals.k()) {
totals.put(i, (masterWallClock / mtotals) * totals.get(i));
}
double v = 0;
for(double i : weights.values())
{
v+=i;
for (double i : weights.values()) {
v += i;
}
for(String i : weights.k())
{
for (String i : weights.k()) {
weights.put(i, weights.get(i) / v);
}
sender.sendMessage("Total: " + C.BOLD + C.WHITE + Form.duration(masterWallClock, 0));
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));
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("Details: ");
for(String i : weights.sortKNumber().reverse())
{
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 afb = C.ITALIC +""+ C.AQUA + i.split("\\Q]\\E")[1].substring(1) + C.RESET + C.GRAY;
for (String i : weights.sortKNumber().reverse()) {
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 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
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();
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);
}
else
{
} else {
int i;
int offset = 0;
for(i = 0; i < engines.length; i++)
{
for (i = 0; i < engines.length; i++) {
Engine engine = engines[i];
int doffset = offset;
int height = engine.getTarget().getHeight();
Hunk<BlockData> cblock = Hunk.newArrayHunk(16, height, 16);
Hunk<Biome> cbiome = Hunk.newArrayHunk(16, height, 16);
if(engine.getTarget().isInverted())
{
if (engine.getTarget().isInverted()) {
cblock = cblock.invertY();
cbiome = cbiome.invertY();
}
@@ -301,8 +258,7 @@ public class IrisEngineCompound implements EngineCompound {
@Override
public void hotload() {
for(int i = 0; i < getSize(); i++)
{
for (int i = 0; i < getSize(); i++) {
getEngine(i).hotload();
}
}

View File

@@ -15,8 +15,8 @@ import java.util.UUID;
import java.util.concurrent.Semaphore;
public class IrisEngineEffects extends EngineAssignedComponent implements EngineEffects {
private KMap<UUID, EnginePlayer> players;
private Semaphore limit;
private final KMap<UUID, EnginePlayer> players;
private final Semaphore limit;
public IrisEngineEffects(Engine engine) {
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
for(Player i : pr)
{
for (Player i : pr) {
Location l = i.getLocation();
boolean pcc = players.containsKey(i.getUniqueId());
if(getEngine().contains(l))
{
if(!pcc)
{
if (getEngine().contains(l)) {
if (!pcc) {
players.put(i.getUniqueId(), new EnginePlayer(getEngine(), i));
}
}
else if(pcc)
{
} else if (pcc) {
players.remove(i.getUniqueId());
}
}
for(UUID i : players.k())
{
if(!pr.contains(players.get(i).getPlayer()))
{
for (UUID i : players.k()) {
if (!pr.contains(players.get(i).getPlayer())) {
players.remove(i);
}
}
@@ -59,17 +51,14 @@ public class IrisEngineEffects extends EngineAssignedComponent implements Engine
@Override
public void tickRandomPlayer() {
if(limit.tryAcquire())
{
if(M.r(0.02))
{
if (limit.tryAcquire()) {
if (M.r(0.02)) {
updatePlayerMap();
limit.release();
return;
}
if(players.isEmpty())
{
if (players.isEmpty()) {
limit.release();
return;
}
@@ -78,8 +67,7 @@ public class IrisEngineEffects extends EngineAssignedComponent implements Engine
int max = players.size();
PrecisionStopwatch p = new PrecisionStopwatch();
while(max-- > 0 && M.ms() - p.getMilliseconds() < limitms)
{
while (max-- > 0 && M.ms() - p.getMilliseconds() < limitms) {
players.v().getRandom().tick();
}

View File

@@ -52,8 +52,7 @@ public class IrisEngineFramework implements EngineFramework {
private final AtomicBoolean cleaning;
private final ChronoLatch cleanLatch;
public IrisEngineFramework(Engine engine)
{
public IrisEngineFramework(Engine engine) {
this.engine = engine;
this.complex = new IrisComplex(getEngine());
this.engineParallax = new IrisEngineParallax(getEngine());
@@ -70,27 +69,21 @@ public class IrisEngineFramework implements EngineFramework {
@Override
public synchronized void recycle() {
if(!cleanLatch.flip())
{
if (!cleanLatch.flip()) {
return;
}
if (cleaning.get())
{
if (cleaning.get()) {
cleanLatch.flipDown();
return;
}
cleaning.set(true);
try
{
try {
getEngine().getParallax().cleanup();
getData().getObjectLoader().clean();
}
catch(Throwable e)
{
} catch (Throwable e) {
Iris.error("Cleanup failed!");
e.printStackTrace();
}
@@ -99,8 +92,7 @@ public class IrisEngineFramework implements EngineFramework {
}
@Override
public void close()
{
public void close() {
getEngineParallax().close();
getTerrainActuator().close();
getDecorantActuator().close();

View File

@@ -11,8 +11,7 @@ public class IrisEngineParallax implements EngineParallaxManager {
@Getter
private final int parallaxSize;
public IrisEngineParallax(Engine engine)
{
public IrisEngineParallax(Engine engine) {
this.engine = engine;
parallaxSize = computeParallaxSize();
}

View File

@@ -14,7 +14,7 @@ import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntitySpawnEvent;
public class IrisWorldManager extends EngineAssignedWorldManager {
public class IrisWorldManager extends EngineAssignedWorldManager {
private boolean spawnable;
public IrisWorldManager(Engine engine) {
@@ -36,13 +36,12 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
public void spawnInitialEntities(Chunk c) {
RNG rng = new RNG(Cache.key(c));
getEngine().getParallaxAccess().getEntitiesR(c.getX(), c.getZ()).iterateSync((x,y,z,e) -> {
if(e != null)
{
getEngine().getParallaxAccess().getEntitiesR(c.getX(), c.getZ()).iterateSync((x, y, z, e) -> {
if (e != null) {
IrisEntity en = getData().getEntityLoader().load(e);
if(en != null){
en.spawn(getEngine(), new Location(c.getWorld(), x+(c.getX()<<4),y,z+(c.getZ()<<4)));
if (en != null) {
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
public void onEntitySpawn(EntitySpawnEvent e)
{
if(getTarget().getWorld() == null || !getTarget().getWorld().equals(e.getEntity().getWorld()))
{
public void onEntitySpawn(EntitySpawnEvent e) {
if (getTarget().getWorld() == null || !getTarget().getWorld().equals(e.getEntity().getWorld())) {
return;
}
try
{
if(!IrisSettings.get().getGenerator().isSystemEntitySpawnOverrides())
{
try {
if (!IrisSettings.get().getGenerator().isSystemEntitySpawnOverrides()) {
return;
}
@@ -81,14 +76,12 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
J.a(() ->
{
if(spawnable)
{
if (spawnable) {
IrisDimension dim = getDimension();
IrisRegion region = getEngine().getRegion(x, z);
IrisBiome above = getEngine().getSurfaceBiome(x, z);
IrisBiome bbelow = getEngine().getBiome(x, y, z);
if(above.getLoadKey().equals(bbelow.getLoadKey()))
{
if (above.getLoadKey().equals(bbelow.getLoadKey())) {
bbelow = null;
}
@@ -96,54 +89,40 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
J.s(() ->
{
if(below != null)
{
if(trySpawn(below.getEntitySpawnOverrides(), e))
{
if (below != null) {
if (trySpawn(below.getEntitySpawnOverrides(), e)) {
return;
}
}
if(trySpawn(above.getEntitySpawnOverrides(), e))
{
if (trySpawn(above.getEntitySpawnOverrides(), e)) {
return;
}
if(trySpawn(region.getEntitySpawnOverrides(), e))
{
if (trySpawn(region.getEntitySpawnOverrides(), e)) {
return;
}
if(trySpawn(dim.getEntitySpawnOverrides(), e))
{
if (trySpawn(dim.getEntitySpawnOverrides(), e)) {
return;
}
});
}
});
}
catch(Throwable xe)
{
} catch (Throwable xe) {
}
}
private boolean trySpawn(KList<IrisEntitySpawnOverride> s, EntitySpawnEvent e)
{
for(IrisEntitySpawnOverride i : s)
{
private boolean trySpawn(KList<IrisEntitySpawnOverride> s, EntitySpawnEvent e) {
for (IrisEntitySpawnOverride i : s) {
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.getEntity().remove();
return true;
}
else
{
} else {
spawnable = true;
}
}
@@ -151,10 +130,8 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
return false;
}
private void trySpawn(KList<IrisEntityInitialSpawn> s, Chunk c, RNG rng)
{
for(IrisEntityInitialSpawn i : s)
{
private void trySpawn(KList<IrisEntityInitialSpawn> s, Chunk c, RNG rng) {
for (IrisEntityInitialSpawn i : s) {
i.spawn(getEngine(), c, rng);
}
}

View File

@@ -9,8 +9,7 @@ import com.volmit.iris.util.PrecisionStopwatch;
import com.volmit.iris.util.RNG;
import org.bukkit.block.Biome;
public class IrisBiomeActuator extends EngineAssignedActuator<Biome>
{
public class IrisBiomeActuator extends EngineAssignedActuator<Biome> {
public IrisBiomeActuator(Engine engine) {
super(engine, "Biome");
}
@@ -18,20 +17,17 @@ public class IrisBiomeActuator extends EngineAssignedActuator<Biome>
@Override
public void onActuate(int x, int z, Hunk<Biome> h) {
PrecisionStopwatch p = PrecisionStopwatch.start();
int zf,hh;
int zf, hh;
BurstExecutor burst = MultiBurst.burst.burst(h.getWidth() * h.getDepth());
for(int xf = 0; xf < h.getWidth(); xf++)
{
for(zf = 0; zf < h.getDepth(); zf++)
{
for (int xf = 0; xf < h.getWidth(); xf++) {
for (zf = 0; zf < h.getDepth(); zf++) {
int xxf = xf;
int zzf = zf;
burst.queue(() -> {
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++)
{
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++) {
h.set(xxf, i, zzf, v);
}
});

View File

@@ -1,25 +1,20 @@
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.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.EngineAssignedActuator;
import com.volmit.iris.scaffold.engine.EngineDecorator;
import com.volmit.iris.scaffold.hunk.Hunk;
import com.volmit.iris.util.PrecisionStopwatch;
import com.volmit.iris.util.RNG;
import lombok.Getter;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
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 final RNG rng;
@Getter
@@ -47,8 +42,7 @@ public class IrisDecorantActuator extends EngineAssignedActuator<BlockData>
@Override
public void onActuate(int x, int z, Hunk<BlockData> output) {
if(!getEngine().getDimension().isDecorate())
{
if (!getEngine().getDimension().isDecorate()) {
return;
}
@@ -57,10 +51,8 @@ public class IrisDecorantActuator extends EngineAssignedActuator<BlockData>
int j, realX, realZ, height;
IrisBiome biome, cave;
for(int i = 0; i < output.getWidth(); i++)
{
for(j = 0; j < output.getDepth(); j++)
{
for (int i = 0; i < output.getWidth(); i++) {
for (j = 0; j < output.getDepth(); j++) {
boolean solid;
int emptyFor = 0;
int lastSolid = 0;
@@ -70,49 +62,38 @@ public class IrisDecorantActuator extends EngineAssignedActuator<BlockData>
biome = getComplex().getTrueBiomeStream().get(realX, realZ);
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;
}
if(height == getDimension().getFluidHeight())
{
if (height == getDimension().getFluidHeight()) {
getShoreLineDecorator().decorate(i, j,
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)),
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)),
output, biome, height, getEngine().getHeight() - height);
}
else if (height == getDimension().getFluidHeight() + 1)
{
} else if (height == getDimension().getFluidHeight() + 1) {
getSeaSurfaceDecorator().decorate(i, j,
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)),
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)),
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());
}
getSurfaceDecorator().decorate(i, j, realX, realZ, output, biome, height, getEngine().getHeight() - height);
if(cave != null && cave.getDecorators().isNotEmpty())
{
for(int k = height; k > 0; k--)
{
if (cave != null && cave.getDecorators().isNotEmpty()) {
for (int k = height; k > 0; k--) {
solid = PREDICATE_SOLID.test(output.get(i, k, j));
if(solid)
{
if (solid) {
if (emptyFor > 0) {
getSurfaceDecorator().decorate(i, j, realX, realZ, output, cave, k, emptyFor);
getCeilingDecorator().decorate(i, j, realX, realZ, output, cave, lastSolid - 1, emptyFor);
emptyFor = 0;
}
lastSolid = k;
}
else
{
} else {
emptyFor++;
}
}
@@ -123,8 +104,7 @@ public class IrisDecorantActuator extends EngineAssignedActuator<BlockData>
getEngine().getMetrics().getDecoration().put(p.getMilliseconds());
}
private boolean shouldRayDecorate()
{
private boolean shouldRayDecorate() {
return getEngine().getDimension().isCarving() || getEngine().getDimension().isCaves() || getEngine().getDimension().isRavines();
}
}

View File

@@ -1,18 +1,17 @@
package com.volmit.iris.generator.actuator;
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.EngineAssignedActuator;
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 org.bukkit.Material;
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 BEDROCK = Material.BEDROCK.createBlockData();
private static final BlockData CAVE_AIR = Material.CAVE_AIR.createBlockData();
@@ -37,56 +36,46 @@ public class IrisTerrainActuator extends EngineAssignedActuator<BlockData>
IrisBiome biome;
KList<BlockData> blocks, fblocks;
for(int xf = 0; xf < h.getWidth(); xf++)
{
for(zf = 0; zf < h.getDepth(); zf++)
{
for (int xf = 0; xf < h.getWidth(); xf++) {
for (zf = 0; zf < h.getDepth(); zf++) {
realX = (int) modX(xf + x);
realZ = (int) modZ(zf + z);
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)));
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);
blocks = null;
fblocks = null;
if(hf < b)
{
if (hf < b) {
continue;
}
for(i = hf; i >= b; i--) {
if (i >= h.getHeight())
{
for (i = hf; i >= b; i--) {
if (i >= h.getHeight()) {
continue;
}
if(i == b)
{
if(getDimension().isBedrock())
{
if (i == b) {
if (getDimension().isBedrock()) {
h.set(xf, i, zf, BEDROCK);
lastBedrock = i;
continue;
}
}
if(carving && getDimension().isCarved(realX, i, realZ, rng, he))
{
if (carving && getDimension().isCarved(realX, i, realZ, rng, he)) {
continue;
}
if(i > he && i <= hf)
{
if (i > he && i <= hf) {
fdepth = hf - i;
if(fblocks == null)
{
if (fblocks == null) {
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));
continue;
}
@@ -95,16 +84,13 @@ public class IrisTerrainActuator extends EngineAssignedActuator<BlockData>
continue;
}
if(i <= he)
{
if (i <= he) {
depth = he - i;
if(blocks == null)
{
blocks = biome.generateLayers(realX, realZ, rng, (int)he, (int)he, getData(), getComplex());
if (blocks == null) {
blocks = biome.generateLayers(realX, realZ, rng, he, he, getData(), getComplex());
}
if(blocks.hasIndex(depth))
{
if (blocks.hasIndex(depth)) {
h.set(xf, i, zf, blocks.get(depth));
continue;
}

View File

@@ -8,8 +8,7 @@ import com.volmit.iris.scaffold.engine.Engine;
import com.volmit.iris.scaffold.hunk.Hunk;
import org.bukkit.block.data.BlockData;
public class IrisCeilingDecorator extends IrisEngineDecorator
{
public class IrisCeilingDecorator extends IrisEngineDecorator {
public IrisCeilingDecorator(Engine engine) {
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) {
IrisDecorator decorator = getDecorator(biome, realX, realZ);
if(decorator != null)
{
if(!decorator.isStacking())
{
if(height >= 0 || height < getEngine().getHeight())
{
if (decorator != null) {
if (!decorator.isStacking()) {
if (height >= 0 || height < getEngine().getHeight()) {
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());
stack = Math.min(max + 1, stack);
BlockData top = decorator.getBlockDataForTop(biome, getRng(), realX, realZ, getData());
BlockData fill = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
for(int i = 0; i < stack; i++)
{
if(height - i < 0 || height - i > getEngine().getHeight())
{
for (int i = 0; i < stack; i++) {
if (height - i < 0 || height - i > getEngine().getHeight()) {
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);
}
}

View File

@@ -5,11 +5,11 @@ import com.volmit.iris.object.DecorationPart;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisDecorator;
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.EngineAssignedComponent;
import com.volmit.iris.scaffold.engine.EngineDecorator;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.RNG;
import lombok.Getter;
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));
}
protected IrisDecorator getDecorator(IrisBiome biome, double realX, double realZ)
{
protected IrisDecorator getDecorator(IrisBiome biome, double realX, double realZ) {
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())
{
try
{
if(i.getPartOf().equals(part) && i.getBlockData(biome, this.rng, realX, realZ, getData()) != null)
{
for (IrisDecorator i : biome.getDecorators()) {
try {
if (i.getPartOf().equals(part) && i.getBlockData(biome, this.rng, realX, realZ, getData()) != null) {
v.add(i);
}
}
catch(Throwable e)
{
} catch (Throwable e) {
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()));
}

View File

@@ -8,49 +8,40 @@ import com.volmit.iris.scaffold.engine.Engine;
import com.volmit.iris.scaffold.hunk.Hunk;
import org.bukkit.block.data.BlockData;
public class IrisSeaFloorDecorator extends IrisEngineDecorator
{
public class IrisSeaFloorDecorator extends IrisEngineDecorator {
public IrisSeaFloorDecorator(Engine engine) {
super(engine, "Sea Floor", DecorationPart.SEA_FLOOR);
}
@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) {
if(height <= getDimension().getFluidHeight()) {
if (height <= getDimension().getFluidHeight()) {
IrisDecorator decorator = getDecorator(biome, realX, realZ);
if(decorator != null)
{
if(!decorator.isStacking())
{
if(height >= 0 || height < getEngine().getHeight())
{
if (decorator != null) {
if (!decorator.isStacking()) {
if (height >= 0 || height < getEngine().getHeight()) {
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());
stack = Math.min(stack, getDimension().getFluidHeight() - height + 2);
BlockData top = decorator.getBlockDataForTop(biome, getRng(), realX, realZ, getData());
BlockData fill = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
for(int i = 0; i < stack; i++)
{
if(height - i < 0 || height - i > getEngine().getHeight())
{
for (int i = 0; i < stack; i++) {
if (height - i < 0 || height - i > getEngine().getHeight()) {
continue;
}
if(height+i > getDimension().getFluidHeight())
{
if (height + i > getDimension().getFluidHeight()) {
continue;
}
double threshold = ((double)i) / (stack - 1);
data.set(x, height+i, z, threshold >= decorator.getTopThreshold() ? top : fill);
double threshold = ((double) i) / (stack - 1);
data.set(x, height + i, z, threshold >= decorator.getTopThreshold() ? top : fill);
}
}
}

View File

@@ -8,8 +8,7 @@ import com.volmit.iris.scaffold.engine.Engine;
import com.volmit.iris.scaffold.hunk.Hunk;
import org.bukkit.block.data.BlockData;
public class IrisSeaSurfaceDecorator extends IrisEngineDecorator
{
public class IrisSeaSurfaceDecorator extends IrisEngineDecorator {
public IrisSeaSurfaceDecorator(Engine engine) {
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) {
IrisDecorator decorator = getDecorator(biome, realX, realZ);
if(decorator != null)
{
if(!decorator.isStacking())
{
if(height >= 0 || height < getEngine().getHeight())
{
data.set(x, getDimension().getFluidHeight()+1, z, decorator.getBlockData100(biome, getRng(), realX, realZ, getData()));
if (decorator != null) {
if (!decorator.isStacking()) {
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());
BlockData top = decorator.getBlockDataForTop(biome, getRng(), realX, realZ, getData());
BlockData fill = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
for(int i = 0; i < stack; i++)
{
if(height - i < 0 || height - i > getEngine().getHeight())
{
for (int i = 0; i < stack; i++) {
if (height - i < 0 || height - i > getEngine().getHeight()) {
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);
}
}

View File

@@ -8,8 +8,7 @@ import com.volmit.iris.scaffold.engine.Engine;
import com.volmit.iris.scaffold.hunk.Hunk;
import org.bukkit.block.data.BlockData;
public class IrisShoreLineDecorator extends IrisEngineDecorator
{
public class IrisShoreLineDecorator extends IrisEngineDecorator {
public IrisShoreLineDecorator(Engine engine) {
super(engine, "Shore Line", DecorationPart.SHORE_LINE);
}
@@ -17,32 +16,26 @@ public class IrisShoreLineDecorator extends IrisEngineDecorator
@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) {
if(height == getDimension().getFluidHeight()) {
if (height == getDimension().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, realZ1)) < getComplex().getFluidHeight() ||
Math.round(getComplex().getHeightStream().get(realX, realZ_1)) < getComplex().getFluidHeight()
)
{
) {
IrisDecorator decorator = getDecorator(biome, realX, realZ);
if(decorator != null)
{
if(!decorator.isStacking())
{
data.set(x, height+1, z, decorator.getBlockData100(biome, getRng(), realX, realZ, getData()));
}
else
{
if (decorator != null) {
if (!decorator.isStacking()) {
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());
BlockData top = decorator.getBlockDataForTop(biome, getRng(), realX, realZ, getData());
BlockData fill = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
for(int i = 0; i < stack; i++)
{
double threshold = ((double)i) / (stack - 1);
data.set(x, height+1+i, z, threshold >= decorator.getTopThreshold() ? top : fill);
for (int i = 0; i < stack; i++) {
double threshold = ((double) i) / (stack - 1);
data.set(x, height + 1 + i, z, threshold >= decorator.getTopThreshold() ? top : fill);
}
}
}

View File

@@ -10,16 +10,14 @@ import com.volmit.iris.scaffold.hunk.Hunk;
import org.bukkit.block.data.Bisected;
import org.bukkit.block.data.BlockData;
public class IrisSurfaceDecorator extends IrisEngineDecorator
{
public class IrisSurfaceDecorator extends IrisEngineDecorator {
public IrisSurfaceDecorator(Engine engine) {
super(engine, "Surface", DecorationPart.NONE);
}
@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) {
if(biome.getInferredType().equals(InferredType.SHORE) && height < getDimension().getFluidHeight())
{
if (biome.getInferredType().equals(InferredType.SHORE) && height < getDimension().getFluidHeight()) {
return;
}
@@ -28,44 +26,32 @@ public class IrisSurfaceDecorator extends IrisEngineDecorator
bdx = data.get(x, height, z);
boolean underwater = height < getDimension().getFluidHeight();
if(decorator != null)
{
if(!decorator.isStacking())
{
if (decorator != null) {
if (!decorator.isStacking()) {
bd = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
if(!underwater)
{
if(!canGoOn(bd, bdx))
{
if (!underwater) {
if (!canGoOn(bd, bdx)) {
return;
}
}
if(bd instanceof Bisected)
{
if (bd instanceof Bisected) {
bd = bd.clone();
((Bisected)bd).setHalf(Bisected.Half.TOP);
try
{
data.set(x, height+2, z, bd);
}
catch(Throwable e)
{
((Bisected) bd).setHalf(Bisected.Half.TOP);
try {
data.set(x, height + 2, z, bd);
} catch (Throwable e) {
}
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
{
if (height < getDimension().getFluidHeight())
{
} else {
if (height < getDimension().getFluidHeight()) {
max = getDimension().getFluidHeight() - height;
}
@@ -73,27 +59,23 @@ public class IrisSurfaceDecorator extends IrisEngineDecorator
BlockData top = decorator.getBlockDataForTop(biome, getRng(), realX, realZ, getData());
BlockData fill = decorator.getBlockData100(biome, getRng(), realX, realZ, getData());
for(int i = 0; i < stack; i++)
{
double threshold = ((double)i) / (stack - 1);
for (int i = 0; i < stack; i++) {
double threshold = ((double) i) / (stack - 1);
bd = threshold >= decorator.getTopThreshold() ? top : fill;
if(bd == null)
{
if (bd == null) {
break;
}
if(i == 0 && !underwater && !canGoOn(bd, bdx))
{
if (i == 0 && !underwater && !canGoOn(bd, bdx)) {
break;
}
if(underwater && height + 1 + i > getDimension().getFluidHeight())
{
if (underwater && height + 1 + i > getDimension().getFluidHeight()) {
break;
}
data.set(x, height+1+i, z, bd);
data.set(x, height + 1 + i, z, bd);
}
}
}

View File

@@ -12,8 +12,7 @@ import org.bukkit.block.data.BlockData;
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 AIR = B.get("AIR");
private static final KList<CaveResult> EMPTY = new KList<>();
@@ -28,31 +27,24 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
@Override
public void onModify(int x, int z, Hunk<BlockData> a) {
if(!getDimension().isCaves())
{
if (!getDimension().isCaves()) {
return;
}
PrecisionStopwatch p = PrecisionStopwatch.start();
for(int i = 0; i < a.getWidth(); i++)
{
for(int j = 0; j < a.getDepth(); j++)
{
for (int i = 0; i < a.getWidth(); i++) {
for (int j = 0; j < a.getDepth(); j++) {
KList<CaveResult> caves = genCaves(x + i, z + j, i, j, a);
int he = (int) Math.round(getComplex().getHeightStream().get(x+i, z+j));
if(caves != null && caves.isNotEmpty())
{
int he = (int) Math.round(getComplex().getHeightStream().get(x + i, z + j));
if (caves != null && caves.isNotEmpty()) {
IrisBiome cave = getComplex().getCaveBiomeStream().get(x + i, z + j);
if(cave == null)
{
if (cave == null) {
continue;
}
for(CaveResult cl : caves)
{
if(cl.getFloor() < 0 || cl.getFloor() > getEngine().getHeight() || cl.getCeiling() > getEngine().getHeight() || cl.getCeiling() < 0)
{
for (CaveResult cl : caves) {
if (cl.getFloor() < 0 || cl.getFloor() > getEngine().getHeight() || cl.getCeiling() > getEngine().getHeight() || cl.getCeiling() < 0) {
continue;
}
@@ -61,13 +53,11 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
he - cl.getCeiling(),
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));
}
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));
}
}
@@ -78,10 +68,8 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
getEngine().getMetrics().getCave().put(p.getMilliseconds());
}
public KList<CaveResult> genCaves(double wxx, double wzz, int x, int z, Hunk<BlockData> data)
{
if(!getDimension().isCaves())
{
public KList<CaveResult> genCaves(double wxx, double wzz, int x, int z, Hunk<BlockData> data) {
if (!getDimension().isCaves()) {
return EMPTY;
}
@@ -90,8 +78,7 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
gg.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Sub);
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);
generateCave(result, wxx, wzz, x, z, data, layer, i);
}
@@ -99,23 +86,17 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
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();
Function<Integer, BlockData> fluid = (height) ->
{
if(!layer.getFluid().hasFluid(getData()))
{
if (!layer.getFluid().hasFluid(getData())) {
return CAVE_AIR;
}
if(layer.getFluid().isInverseHeight() && height >= layer.getFluid().getFluidHeight())
{
if (layer.getFluid().isInverseHeight() && height >= layer.getFluid().getFluidHeight()) {
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());
}
@@ -130,8 +111,7 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
double distanceTake = 0.0022 * baseWidth;
double caveHeightNoise = layer.getVerticalSlope().get(rng, wxx, wzz);
if(caveHeightNoise > 259 || caveHeightNoise < -1)
{
if (caveHeightNoise > 259 || caveHeightNoise < -1) {
return;
}
@@ -139,62 +119,48 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
int ceiling = -256;
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;
if(distance < distanceCheck - (tunnelHeight * distanceTake))
{
if (distance < distanceCheck - (tunnelHeight * distanceTake)) {
int caveHeight = (int) Math.round(caveHeightNoise);
int pu = (int) (caveHeight + tunnelHeight);
int pd = (int) (caveHeight - tunnelHeight);
if(pd > surface + 1)
{
if (pd > surface + 1) {
continue;
}
if(!layer.isCanBreakSurface() && pu > surface - 3)
{
if (!layer.isCanBreakSurface() && pu > surface - 3) {
continue;
}
if((pu > 255 && pd > 255) || (pu < 0 && pd < 0))
{
if ((pu > 255 && pd > 255) || (pu < 0 && pd < 0)) {
continue;
}
if(data == null)
{
if (data == null) {
ceiling = Math.max(pu, ceiling);
floor = Math.min(pu, floor);
ceiling = Math.max(pd, ceiling);
floor = Math.min(pd, floor);
if(tunnelHeight == 1)
{
if (tunnelHeight == 1) {
ceiling = Math.max(caveHeight, ceiling);
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);
floor = Math.min(pu, floor);
}
if(dig(x, pd, z, data, fluid))
{
if (dig(x, pd, z, data, fluid)) {
ceiling = Math.max(pd, ceiling);
floor = Math.min(pd, floor);
}
if(tunnelHeight == 1)
{
if(dig(x, caveHeight, z, data, fluid))
{
if (tunnelHeight == 1) {
if (dig(x, caveHeight, z, data, fluid)) {
ceiling = Math.max(caveHeight, ceiling);
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));
}
}
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));
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));
if(d != null)
{
if (d != null) {
return d.getMaterial();
}
return Material.CAVE_AIR;
}
public boolean dig(int x, int y, int z, Hunk<BlockData> data, Function<Integer, BlockData> caveFluid)
{
Material a = mat(x,y,z, data);
public boolean dig(int x, int y, int z, Hunk<BlockData> data, Function<Integer, BlockData> caveFluid) {
Material a = mat(x, y, z, data);
Material c = mat(x, y + 1, z, data);
Material d = mat(x, y + 2, 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 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 + 1, z, b2);
return true;
@@ -241,8 +202,7 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
return false;
}
public boolean canAir(Material m, BlockData caveFluid)
{
public boolean canAir(Material m, BlockData caveFluid) {
return (B.isSolid(m) ||
(B.isDecorant(m.createBlockData())) || m.equals(Material.AIR)
|| m.equals(caveFluid.getMaterial()) ||
@@ -250,13 +210,11 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
&& !m.equals(Material.BEDROCK);
}
public boolean canWater(Material m)
{
public boolean canWater(Material m) {
return !m.equals(Material.WATER);
}
public boolean can(Material m)
{
public boolean can(Material m) {
return B.isSolid(m) && !m.equals(Material.BEDROCK);
}
}

View File

@@ -15,9 +15,10 @@ import org.bukkit.util.BlockVector;
public class IrisDepositModifier extends EngineAssignedModifier<BlockData> {
private final RNG rng;
public IrisDepositModifier(Engine engine) {
super(engine, "Deposit");
rng = new RNG(getEngine().getWorld().getSeed()+12938).nextParallelRNG(28348777);
rng = new RNG(getEngine().getWorld().getSeed() + 12938).nextParallelRNG(28348777);
}
@Override
@@ -27,50 +28,40 @@ public class IrisDepositModifier extends EngineAssignedModifier<BlockData> {
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);
IrisRegion region = getComplex().getRegionStream().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);
}
for(IrisDepositGenerator k : region.getDeposits())
{
for(int l = 0; l < ro.i(k.getMinPerChunk(), k.getMaxPerChunk()); l++)
{
for (IrisDepositGenerator k : region.getDeposits()) {
for (int l = 0; l < ro.i(k.getMinPerChunk(), k.getMaxPerChunk()); l++) {
generate(k, terrain, ro, x, z, false);
}
}
for(IrisDepositGenerator k : biome.getDeposits())
{
for(int l = 0; l < ro.i(k.getMinPerChunk(), k.getMaxPerChunk()); l++)
{
for (IrisDepositGenerator k : biome.getDeposits()) {
for (int l = 0; l < ro.i(k.getMinPerChunk(), k.getMaxPerChunk()); l++) {
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);
}
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++)
{
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++) {
IrisObject clump = k.getClump(rng, getData());
int af = (int) Math.ceil(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;
bf = 9;
}
@@ -81,8 +72,7 @@ public class IrisDepositModifier extends EngineAssignedModifier<BlockData> {
getComplex().getHeightStream().get((cx << 4) + x, (cz << 4) + z)
))) - 7;
if(height <= 0)
{
if (height <= 0) {
return;
}
@@ -90,33 +80,29 @@ public class IrisDepositModifier extends EngineAssignedModifier<BlockData> {
// TODO: WARNING HEIGHT
int a = Math.min(height, Math.min(256, k.getMaxHeight()));
if(i >= a)
{
if (i >= a) {
return;
}
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;
}
for(BlockVector j : clump.getBlocks().keySet())
{
for (BlockVector j : clump.getBlocks().keySet()) {
int nx = j.getBlockX() + x;
int ny = j.getBlockY() + h;
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;
}
boolean allow = false;
BlockData b = data.get(nx, ny, nz);
if(b != null) {
if (b != null) {
for (BlockData f : getDimension().getRockPalette().getBlockData(getData())) {
if (f.getMaterial().equals(b.getMaterial())) {
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));
}
}

View File

@@ -23,7 +23,7 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
public IrisPostModifier(Engine engine) {
super(engine, "Post");
rng = new RNG(getEngine().getWorld().getSeed()+12938).nextParallelRNG(28348777);
rng = new RNG(getEngine().getWorld().getSeed() + 12938).nextParallelRNG(28348777);
}
@Override
@@ -31,13 +31,11 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
PrecisionStopwatch p = PrecisionStopwatch.start();
BurstExecutor b = MultiBurst.burst.burst(output.getWidth() * output.getDepth());
int i, j;
for(i = 0; i < output.getWidth(); i++)
{
for (i = 0; i < output.getWidth(); i++) {
int ii = i;
for(j = 0; j < output.getDepth(); j++)
{
for (j = 0; j < output.getDepth(); 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();
@@ -55,8 +53,7 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
// Floating Nibs
int g = 0;
if(h < 1)
{
if (h < 1) {
return;
}
@@ -65,14 +62,11 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
g += hc < 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);
for(int i = h - 1; i > 0; i--)
{
if(!isAir(x, i, z, currentPostX, currentPostZ, currentData))
{
for (int i = h - 1; i > 0; i--) {
if (!isAir(x, i, z, currentPostX, currentPostZ, currentData)) {
h = i;
break;
}
@@ -86,24 +80,18 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
g += hc == 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 b = getPostBlock(x, h + 1, z, currentPostX, currentPostZ, currentData);
Material m = bc.getMaterial();
if((b.getMaterial().isOccluding() && b.getMaterial().isSolid()))
{
if(m.isSolid())
{
if ((b.getMaterial().isOccluding() && b.getMaterial().isSolid())) {
if (m.isSolid()) {
setPostBlock(x, h, z, b, currentPostX, currentPostZ, currentData);
h--;
}
}
}
else
{
} else {
// Potholes
g = 0;
g += ha == h + 1 ? 1 : 0;
@@ -111,8 +99,7 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
g += hc == 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 bb = getPostBlock(x, hb, 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(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);
h++;
}
@@ -132,27 +118,20 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
}
// Wall Patcher
IrisBiome biome = getComplex().getTrueBiomeStream().get(x,z);
IrisBiome biome = getComplex().getTrueBiomeStream().get(x, z);
if(getDimension().isPostProcessingWalls())
{
if(!biome.getWall().getPalette().isEmpty())
{
if(ha < h - 2 || hb < h - 2 || hc < h - 2 || hd < h - 2)
{
if (getDimension().isPostProcessingWalls()) {
if (!biome.getWall().getPalette().isEmpty()) {
if (ha < h - 2 || hb < h - 2 || hc < h - 2 || hd < h - 2) {
boolean brokeGround = false;
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());
if(d != null)
{
if(isAirOrWater(x, i, z, currentPostX, currentPostZ, currentData))
{
if(brokeGround)
{
if (d != null) {
if (isAirOrWater(x, i, z, currentPostX, currentPostZ, currentData)) {
if (brokeGround) {
break;
}
@@ -168,10 +147,9 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
}
// Slab
if(getDimension().isPostProcessingSlabs())
{
if (getDimension().isPostProcessingSlabs()) {
//@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))
|| (hc == h + 1 && isSolidNonSlab(x - 1, hc, z, 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());
if(d != null)
{
boolean cancel = false;
if (d != null) {
boolean cancel = B.isAir(d);
if(B.isAir(d))
{
if (d.getMaterial().equals(Material.SNOW) && h + 1 <= getDimension().getFluidHeight()) {
cancel = true;
}
if(d.getMaterial().equals(Material.SNOW) && h + 1 <= getDimension().getFluidHeight())
{
if (isSnowLayer(x, h, z, currentPostX, currentPostZ, currentData)) {
cancel = true;
}
if(isSnowLayer(x, h, z, currentPostX, currentPostZ, currentData))
{
cancel = true;
}
if(!cancel && isAirOrWater(x, h + 1, z, currentPostX, currentPostZ, currentData))
{
if (!cancel && isAirOrWater(x, h + 1, z, currentPostX, currentPostZ, currentData)) {
setPostBlock(x, h + 1, z, d, currentPostX, currentPostZ, currentData);
h++;
}
@@ -210,34 +179,24 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
// Waterlogging
BlockData b = getPostBlock(x, h, z, currentPostX, currentPostZ, currentData);
if(b instanceof Waterlogged)
{
if (b instanceof Waterlogged) {
Waterlogged ww = (Waterlogged) b.clone();
boolean w = false;
if (h <= getDimension().getFluidHeight()+1) {
if(isWaterOrWaterlogged(x, h + 1, z, currentPostX, currentPostZ, currentData))
{
if (h <= getDimension().getFluidHeight() + 1) {
if (isWaterOrWaterlogged(x, h + 1, z, currentPostX, currentPostZ, currentData)) {
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;
}
}
if(w != ww.isWaterlogged())
{
if (w != ww.isWaterlogged()) {
ww.setWaterlogged(w);
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);
}
}
@@ -245,26 +204,20 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
// Foliage
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();
if(!B.canPlaceOnto(b.getMaterial(), onto))
{
if (!B.canPlaceOnto(b.getMaterial(), onto)) {
setPostBlock(x, h + 1, z, AIR, currentPostX, currentPostZ, currentData);
}
}
if(getDimension().isPostProcessCaves())
{
if (getDimension().isPostProcessCaves()) {
IrisBiome cave = getComplex().getCaveBiomeStream().get(x, z);
if(cave != null)
{
for(CaveResult i : ((IrisCaveModifier)getFramework().getCaveModifier()).genCaves(x, z, 0, 0, null))
{
if(i.getCeiling() >= currentData.getMax2DParallelism() || i.getFloor() < 0)
{
if (cave != null) {
for (CaveResult i : ((IrisCaveModifier) getFramework().getCaveModifier()).genCaves(x, z, 0, 0, null)) {
if (i.getCeiling() >= currentData.getMax2DParallelism() || i.getFloor() < 0) {
continue;
}
@@ -286,21 +239,16 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
g += fc == 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);
b = getPostBlock(x, f + 1, z, currentPostX, currentPostZ, currentData);
Material m = bc.getMaterial();
if(m.isSolid())
{
if (m.isSolid()) {
setPostBlock(x, f, z, b, currentPostX, currentPostZ, currentData);
h--;
}
}
else
{
} else {
// Cave Potholes
g = 0;
g += fa == f + 1 ? 1 : 0;
@@ -308,8 +256,7 @@ public class IrisPostModifier extends EngineAssignedModifier<BlockData> {
g += fc == 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 bb = getPostBlock(x, fb, 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(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);
h++;
}
}
}
if(getDimension().isPostProcessingSlabs())
{
if (getDimension().isPostProcessingSlabs()) {
//@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))
|| (fc == f + 1 && isSolidNonSlab(x - 1, fc, z, 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());
if(d != null)
{
boolean cancel = false;
if (d != null) {
boolean cancel = B.isAir(d);
if(B.isAir(d))
{
if (d.getMaterial().equals(Material.SNOW) && f + 1 <= getDimension().getFluidHeight()) {
cancel = true;
}
if(d.getMaterial().equals(Material.SNOW) && f + 1 <= getDimension().getFluidHeight())
{
if (isSnowLayer(x, f, z, currentPostX, currentPostZ, currentData)) {
cancel = true;
}
if(isSnowLayer(x, f, z, currentPostX, currentPostZ, currentData))
{
cancel = true;
}
if(!cancel && isAirOrWater(x, f + 1, z, currentPostX, currentPostZ, currentData))
{
if (!cancel && isAirOrWater(x, f + 1, z, currentPostX, currentPostZ, currentData)) {
setPostBlock(x, f + 1, z, d, currentPostX, currentPostZ, currentData);
}
}
}
//@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))
|| (cc == c - 1 && isSolidNonSlab(x - 1, cc, z, 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());
if(d != null)
{
boolean cancel = false;
if (d != null) {
boolean cancel = B.isAir(d);
if(B.isAir(d))
{
if (!(d instanceof Slab)) {
cancel = true;
}
if(!(d instanceof Slab))
{
if (isSnowLayer(x, c, z, currentPostX, currentPostZ, currentData)) {
cancel = true;
}
if(isSnowLayer(x, c, z, currentPostX, currentPostZ, currentData))
{
cancel = true;
}
if(!cancel && isAirOrWater(x, c, z, currentPostX, currentPostZ, currentData))
{
if (!cancel && isAirOrWater(x, c, z, currentPostX, currentPostZ, currentData)) {
Slab slab = (Slab) d.clone();
slab.setType(Slab.Type.TOP);
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)
{
if(floor >= currentData.getHeight())
{
return currentData.getHeight()-1;
private int nearestCaveFloor(int floor, int x, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
if (floor >= currentData.getHeight()) {
return currentData.getHeight() - 1;
}
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, z, currentPostX, currentPostZ, currentData))) {
if (B.isAir(getPostBlock(x, floor - 1, z, currentPostX, currentPostZ, currentData))) {
return floor - 2;
}
return floor - 1;
}
else
{
if(!B.isAir(getPostBlock(x, floor + 1, z, currentPostX, currentPostZ, currentData)))
{
if(!B.isAir(getPostBlock(x, floor + 2, z, currentPostX, currentPostZ, currentData)))
{
} else {
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;
}
@@ -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)
{
if(ceiling >= currentData.getHeight())
{
return currentData.getHeight()-1;
private int nearestCaveCeiling(int ceiling, int x, int z, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
if (ceiling >= currentData.getHeight()) {
return currentData.getHeight() - 1;
}
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, z, currentPostX, currentPostZ, currentData))) {
if (B.isAir(getPostBlock(x, ceiling + 1, z, currentPostX, currentPostZ, currentData))) {
return ceiling + 2;
}
return ceiling + 1;
}
else
{
if(!B.isAir(getPostBlock(x, ceiling - 1, z, currentPostX, currentPostZ, currentData)))
{
if(!B.isAir(getPostBlock(x, ceiling - 2, z, currentPostX, currentPostZ, currentData)))
{
} else {
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;
}
@@ -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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
return d instanceof Levelled;
}
public void setPostBlock(int x, int y, int z, BlockData d, int currentPostX, int currentPostZ, Hunk<BlockData> currentData)
{
if(y < currentData.getHeight())
{
public void setPostBlock(int x, int y, int z, BlockData d, int currentPostX, int currentPostZ, Hunk<BlockData> currentData) {
if (y < currentData.getHeight()) {
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);
return b == null ? AIR : b;

View File

@@ -2,18 +2,18 @@ package com.volmit.iris.generator.modifier;
import com.volmit.iris.generator.noise.CNG;
import com.volmit.iris.object.NoiseStyle;
import com.volmit.iris.util.*;
import com.volmit.iris.scaffold.engine.Engine;
import com.volmit.iris.scaffold.engine.EngineAssignedModifier;
import com.volmit.iris.scaffold.hunk.Hunk;
import com.volmit.iris.util.*;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
private static final BlockData CAVE_AIR = B.get("CAVE_AIR");
private static final BlockData LAVA = B.get("LAVA");
private CNG cng;
private RNG rng;
private final CNG cng;
private final RNG rng;
public IrisRavineModifier(Engine engine) {
super(engine, "Ravine");
@@ -23,8 +23,7 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
@Override
public void onModify(int x, int z, Hunk<BlockData> output) {
if(!getDimension().isRavines())
{
if (!getDimension().isRavines()) {
return;
}
@@ -33,61 +32,51 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
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);
}
private BlockData get(Hunk<BlockData> pos, int x, int y, int z)
{
BlockData bb = pos.get(x, y, z);
private BlockData get(Hunk<BlockData> pos, int x, int y, int z) {
BlockData bb = pos.get(x, y, z);
if(bb == null)
{
bb = CAVE_AIR;
if (bb == null) {
bb = CAVE_AIR;
}
return bb;
}
private BlockData getSurfaceBlock(int n6, int i, RNG rmg)
{
return getComplex().getTrueBiomeStream().get(n6,i).getSurfaceBlock(n6, i, rmg, getData());
private BlockData getSurfaceBlock(int n6, int i, RNG rmg) {
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;
RNG random = new RNG(seed);
double x = tx * 16 + 8;
double z = tz * 16 + 8;
float f4 = 0.0f;
float f5 = 0.0f;
if(n4 <= 0)
{
if (n4 <= 0) {
n5 = 8 * 16 - 16;
n4 = n5 - random.nextInt(n5 / 4);
}
n5 = 0;
if(n3 == -1)
{
if (n3 == -1) {
n3 = n4 / 2;
n5 = 1;
}
float f6 = 1.0f;
// TODO: WARNING HEIGHT
for(int i = 0; i < 256; ++i)
{
if(i == 0 || random.nextInt(getDimension().getRavineRibRarity()) == 0)
{
for (int i = 0; i < 256; ++i) {
if (i == 0 || random.nextInt(getDimension().getRavineRibRarity()) == 0) {
f6 = 1.0f + random.nextFloat() * random.nextFloat() * 1.0f;
}
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 d8 = d7 * d4;
d7 *= (double) random.nextFloat() * 0.25 + 0.75;
@@ -104,18 +93,15 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
f4 *= 0.5f;
f5 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.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 d10 = sz - z;
double d11 = n4 - n3;
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;
}
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 n7 = 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 n11 = MathHelper.floor(sz - d7) - tz * 16 - 1;
int n12 = MathHelper.floor(sz + d7) - tz * 16 + 1;
if(n7 < 0)
{
if (n7 < 0) {
n7 = 0;
}
if(n8 > 16)
{
if (n8 > 16) {
n8 = 16;
}
if(n9 < 1)
{
if (n9 < 1) {
n9 = 1;
}
if(n10 > 248)
{
if (n10 > 248) {
n10 = 248;
}
if(n11 < 0)
{
if (n11 < 0) {
n11 = 0;
}
if(n12 > 16)
{
if (n12 > 16) {
n12 = 16;
}
boolean bl = false;
for(int i = n7; !bl && i < n8; ++i)
{
for(n6 = n11; !bl && n6 < n12; ++n6)
{
for(int j = n10 + 1; !bl && j >= n9 - 1; --j)
{
for (int i = n7; !bl && i < n8; ++i) {
for (n6 = n11; !bl && n6 < n12; ++n6) {
for (int j = n10 + 1; !bl && j >= n9 - 1; --j) {
// TODO: WARNING HEIGHT
if(j < 0 || j >= 256)
{
if (j < 0 || j >= 256) {
continue;
}
BlockData bb = get(terrain, i, j, n6);
if(B.isWater(bb))
{
if (B.isWater(bb)) {
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;
}
j = n9;
}
}
}
if(!bl) {
if (!bl) {
BlockPosition bps = new BlockPosition(0, 0, 0);
for (n6 = n7; n6 < n8; ++n6) {
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;
}
}
@@ -223,17 +196,15 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
}
}
private BlockPosition cSet(BlockPosition bb, double var0, double var2, double var4)
{
bb.setX(MathHelper.floor((double) var0));
bb.setY(MathHelper.floor((double) var2));
bb.setZ(MathHelper.floor((double) var4));
private BlockPosition cSet(BlockPosition bb, double var0, double var2, double var4) {
bb.setX(MathHelper.floor(var0));
bb.setY(MathHelper.floor(var2));
bb.setZ(MathHelper.floor(var4));
return bb;
}
private boolean isDirt(BlockData d)
{
private boolean isDirt(BlockData d) {
//@builder
Material m = d.getMaterial();
return m.equals(Material.DIRT) ||
@@ -242,8 +213,7 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
//@done
}
private boolean isSurface(BlockData d)
{
private boolean isSurface(BlockData d) {
//@builder
Material m = d.getMaterial();
return m.equals(Material.GRASS_BLOCK) ||
@@ -254,16 +224,13 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
//@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 bx = this.rng.nextParallelRNG(6676121);
long l = b.nextLong();
long l2 = b.nextLong();
for(int i = n - 8; i <= n + 8; ++i)
{
for(int j = n2 - 8; j <= n2 + 8; ++j)
{
for (int i = n - 8; i <= n + 8; ++i) {
for (int j = n2 - 8; j <= n2 + 8; ++j) {
long l3 = (long) i * l;
long l4 = (long) j * l2;
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)
{
if(b.nextInt(getDimension().getRavineRarity()) != 0)
{
private void doRavines(int tx, int tz, int sx, int sz, ChunkPosition chunkSnapshot, RNG b, Hunk<BlockData> terrain) {
if (b.nextInt(getDimension().getRavineRarity()) != 0) {
return;
}
@@ -283,8 +248,7 @@ public class IrisRavineModifier extends EngineAssignedModifier<BlockData> {
double d2 = b.nextInt(b.nextInt(40) + 8) + 20;
double z = tz * 16 + b.nextInt(16);
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 f2 = (b.nextFloat() - 0.5f) * 2.0f / 8.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);
}
}

View File

@@ -9,457 +9,383 @@ import lombok.Data;
import java.util.List;
@Data
public class CNG
{
public static long hits = 0;
public static long creates = 0;
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 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 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 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 DST_MOD = (s, v) -> new double[] {v % s, 0};
public static final NoiseInjector DST_POW = (s, v) -> new double[] {Math.pow(v, s), 0};
private double scale;
private double bakedScale;
private double fscale;
private boolean trueFracturing = false;
private KList<CNG> children;
private CNG fracture;
private NoiseGenerator generator;
private final double opacity;
private NoiseInjector injector;
private RNG rng;
private boolean noscale;
private int oct;
private double patch;
private double up;
private double down;
private double power;
public NoiseGenerator getGen()
{
return generator;
}
public ProceduralStream<Double> stream()
{
return new CNGStream(this);
}
public ProceduralStream<Double> stream(double min, double max)
{
return new FittedStream<Double>(stream(), min, max);
}
public static CNG signature(RNG rng)
{
return signature(rng, NoiseType.SIMPLEX);
}
public static CNG signatureHalf(RNG rng)
{
return signatureHalf(rng, NoiseType.SIMPLEX);
}
public static CNG signatureThick(RNG rng)
{
return signatureThick(rng, NoiseType.SIMPLEX);
}
public static CNG signatureDouble(RNG rng)
{
return signatureDouble(rng, NoiseType.SIMPLEX);
}
public static CNG signatureDouble(RNG rng, NoiseType t)
{
return signatureThick(rng, t).fractureWith(signature(rng.nextParallelRNG(4956)), 93);
}
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 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 signaturePerlin(RNG rng)
{
return signaturePerlin(rng, NoiseType.PERLIN);
}
public static CNG signaturePerlin(RNG rng, NoiseType t)
{
// @NoArgsConstructor
return new CNG(rng.nextParallelRNG(124996), t, 1D, 1)
.fractureWith(new CNG(rng.nextParallelRNG(18), NoiseType.PERLIN, 1, 1).scale(1.25), 250)
.bake();
// @done
}
public static CNG signatureFast(RNG rng, NoiseType t, NoiseType f)
{
// @NoArgsConstructor
return new CNG(rng.nextParallelRNG(17), t, 1D, 1)
.fractureWith(new CNG(rng.nextParallelRNG(18), f, 1, 1)
.scale(0.9)
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1)
.scale(0.21)
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1).scale(0.9), 620), 145), 44)
.bake();
// @done
}
public static CNG signatureThick(RNG rng, NoiseType t)
{
// @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();
// @done
}
public static CNG signatureThickFast(RNG rng, NoiseType t, NoiseType f)
{
// @NoArgsConstructor
return new CNG(rng.nextParallelRNG(133), t, 1D, 1)
.fractureWith(new CNG(rng.nextParallelRNG(18), f, 1, 1)
.scale(0.5).fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1)
.scale(0.11).fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1)
.scale(0.4), 620), 145), 44).bake();
// @done
}
public static CNG signatureHalf(RNG rng, NoiseType t)
{
// @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();
// @done
}
public static CNG signatureHalfFast(RNG rng, NoiseType t, NoiseType f)
{
// @NoArgsConstructor
return new CNG(rng.nextParallelRNG(127), t, 1D, 1)
.fractureWith(new CNG(rng.nextParallelRNG(18),f, 1, 1).scale(0.9)
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1).scale(0.21)
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1).scale(0.9), 420), 99), 22).bake();
// @done
}
public CNG(RNG random)
{
this(random, 1);
}
public CNG(RNG random, int octaves)
{
this(random, 1D, octaves);
}
public CNG(RNG random, double opacity, int octaves)
{
this(random, NoiseType.SIMPLEX, opacity, octaves);
}
public CNG(RNG random, NoiseType t, double opacity, int octaves)
{
creates++;
noscale = t.equals(NoiseType.WHITE);
this.oct = octaves;
this.rng = random;
power = 1;
scale = 1;
patch = 1;
bakedScale = 1;
fscale = 1;
down = 0;
up = 0;
fracture = null;
generator = t.create(random.nextParallelRNG(33).lmax());
this.opacity = opacity;
this.injector = ADD;
if(generator instanceof OctaveNoise)
{
((OctaveNoise) generator).setOctaves(octaves);
}
}
public CNG bake()
{
bakedScale *= scale;
scale = 1;
return this;
}
public CNG child(CNG c)
{
if(children == null)
{
children = new KList<>();
}
children.add(c);
return this;
}
public RNG getRNG()
{
return rng;
}
public CNG fractureWith(CNG c, double scale)
{
fracture = c;
fscale = scale;
return this;
}
public CNG scale(double c)
{
scale = c;
return this;
}
public CNG patch(double c)
{
patch = c;
return this;
}
public CNG up(double c)
{
up = c;
return this;
}
public CNG down(double c)
{
down = c;
return this;
}
public CNG injectWith(NoiseInjector i)
{
injector = i;
return this;
}
public <T extends IRare> T fitRarity(KList<T> b, double... dim)
{
if(b.size() == 0)
{
return null;
}
if(b.size() == 1)
{
return b.get(0);
}
KList<T> rarityMapped = new KList<>();
boolean o = false;
int max = 1;
for(T i : b)
{
if(i.getRarity() > max)
{
max = i.getRarity();
}
}
max++;
for(T i : b)
{
for(int j = 0; j < max - i.getRarity(); j++)
{
if(o = !o)
{
rarityMapped.add(i);
}
else
{
rarityMapped.add(0, i);
}
}
}
if(rarityMapped.size() == 1)
{
return rarityMapped.get(0);
}
if(rarityMapped.isEmpty())
{
throw new RuntimeException("BAD RARITY MAP! RELATED TO: " + b.toString(", or possibly "));
}
return fit(rarityMapped, dim);
}
public <T> T fit(T[] v, double... dim)
{
if(v.length == 0)
{
return null;
}
if(v.length == 1)
{
return v[0];
}
return v[fit(0, v.length - 1, dim)];
}
public <T> T fit(List<T> v, double... dim)
{
if(v.size() == 0)
{
return null;
}
if(v.size() == 1)
{
return v.get(0);
}
try
{
return v.get(fit(0, v.size() - 1, dim));
}
catch(Throwable e)
{
}
return v.get(0);
}
public int fit(int min, int max, double... dim)
{
if(min == max)
{
return min;
}
double noise = noise(dim);
return (int) Math.round(IrisInterpolation.lerp(min, max, noise));
}
public int fit(double min, double max, double... dim)
{
if(min == max)
{
return (int) Math.round(min);
}
double noise = noise(dim);
return (int) Math.round(IrisInterpolation.lerp(min, max, noise));
}
public double fitDouble(double min, double max, double... dim)
{
if(min == max)
{
return min;
}
double noise = noise(dim);
return IrisInterpolation.lerp(min, max, noise);
}
private double getNoise(double... dim)
{
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();
}
public class CNG {
public static long hits = 0;
public static long creates = 0;
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 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 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 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 DST_MOD = (s, v) -> new double[]{v % s, 0};
public static final NoiseInjector DST_POW = (s, v) -> new double[]{Math.pow(v, s), 0};
private double scale;
private double bakedScale;
private double fscale;
private boolean trueFracturing = false;
private KList<CNG> children;
private CNG fracture;
private NoiseGenerator generator;
private final double opacity;
private NoiseInjector injector;
private RNG rng;
private boolean noscale;
private int oct;
private double patch;
private double up;
private double down;
private double power;
public NoiseGenerator getGen() {
return generator;
}
public ProceduralStream<Double> stream() {
return new CNGStream(this);
}
public ProceduralStream<Double> stream(double min, double max) {
return new FittedStream<Double>(stream(), min, max);
}
public static CNG signature(RNG rng) {
return signature(rng, NoiseType.SIMPLEX);
}
public static CNG signatureHalf(RNG rng) {
return signatureHalf(rng, NoiseType.SIMPLEX);
}
public static CNG signatureThick(RNG rng) {
return signatureThick(rng, NoiseType.SIMPLEX);
}
public static CNG signatureDouble(RNG rng) {
return signatureDouble(rng, NoiseType.SIMPLEX);
}
public static CNG signatureDouble(RNG rng, NoiseType t) {
return signatureThick(rng, t).fractureWith(signature(rng.nextParallelRNG(4956)), 93);
}
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 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 signaturePerlin(RNG rng) {
return signaturePerlin(rng, NoiseType.PERLIN);
}
public static CNG signaturePerlin(RNG rng, NoiseType t) {
// @NoArgsConstructor
return new CNG(rng.nextParallelRNG(124996), t, 1D, 1)
.fractureWith(new CNG(rng.nextParallelRNG(18), NoiseType.PERLIN, 1, 1).scale(1.25), 250)
.bake();
// @done
}
public static CNG signatureFast(RNG rng, NoiseType t, NoiseType f) {
// @NoArgsConstructor
return new CNG(rng.nextParallelRNG(17), t, 1D, 1)
.fractureWith(new CNG(rng.nextParallelRNG(18), f, 1, 1)
.scale(0.9)
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1)
.scale(0.21)
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1).scale(0.9), 620), 145), 44)
.bake();
// @done
}
public static CNG signatureThick(RNG rng, NoiseType t) {
// @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();
// @done
}
public static CNG signatureThickFast(RNG rng, NoiseType t, NoiseType f) {
// @NoArgsConstructor
return new CNG(rng.nextParallelRNG(133), t, 1D, 1)
.fractureWith(new CNG(rng.nextParallelRNG(18), f, 1, 1)
.scale(0.5).fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1)
.scale(0.11).fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1)
.scale(0.4), 620), 145), 44).bake();
// @done
}
public static CNG signatureHalf(RNG rng, NoiseType t) {
// @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();
// @done
}
public static CNG signatureHalfFast(RNG rng, NoiseType t, NoiseType f) {
// @NoArgsConstructor
return new CNG(rng.nextParallelRNG(127), t, 1D, 1)
.fractureWith(new CNG(rng.nextParallelRNG(18), f, 1, 1).scale(0.9)
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1).scale(0.21)
.fractureWith(new CNG(rng.nextParallelRNG(20), f, 1, 1).scale(0.9), 420), 99), 22).bake();
// @done
}
public CNG(RNG random) {
this(random, 1);
}
public CNG(RNG random, int octaves) {
this(random, 1D, octaves);
}
public CNG(RNG random, double opacity, int octaves) {
this(random, NoiseType.SIMPLEX, opacity, octaves);
}
public CNG(RNG random, NoiseType t, double opacity, int octaves) {
creates++;
noscale = t.equals(NoiseType.WHITE);
this.oct = octaves;
this.rng = random;
power = 1;
scale = 1;
patch = 1;
bakedScale = 1;
fscale = 1;
down = 0;
up = 0;
fracture = null;
generator = t.create(random.nextParallelRNG(33).lmax());
this.opacity = opacity;
this.injector = ADD;
if (generator instanceof OctaveNoise) {
((OctaveNoise) generator).setOctaves(octaves);
}
}
public CNG bake() {
bakedScale *= scale;
scale = 1;
return this;
}
public CNG child(CNG c) {
if (children == null) {
children = new KList<>();
}
children.add(c);
return this;
}
public RNG getRNG() {
return rng;
}
public CNG fractureWith(CNG c, double scale) {
fracture = c;
fscale = scale;
return this;
}
public CNG scale(double c) {
scale = c;
return this;
}
public CNG patch(double c) {
patch = c;
return this;
}
public CNG up(double c) {
up = c;
return this;
}
public CNG down(double c) {
down = c;
return this;
}
public CNG injectWith(NoiseInjector i) {
injector = i;
return this;
}
public <T extends IRare> T fitRarity(KList<T> b, double... dim) {
if (b.size() == 0) {
return null;
}
if (b.size() == 1) {
return b.get(0);
}
KList<T> rarityMapped = new KList<>();
boolean o = false;
int max = 1;
for (T i : b) {
if (i.getRarity() > max) {
max = i.getRarity();
}
}
max++;
for (T i : b) {
for (int j = 0; j < max - i.getRarity(); j++) {
if (o = !o) {
rarityMapped.add(i);
} else {
rarityMapped.add(0, i);
}
}
}
if (rarityMapped.size() == 1) {
return rarityMapped.get(0);
}
if (rarityMapped.isEmpty()) {
throw new RuntimeException("BAD RARITY MAP! RELATED TO: " + b.toString(", or possibly "));
}
return fit(rarityMapped, dim);
}
public <T> T fit(T[] v, double... dim) {
if (v.length == 0) {
return null;
}
if (v.length == 1) {
return v[0];
}
return v[fit(0, v.length - 1, dim)];
}
public <T> T fit(List<T> v, double... dim) {
if (v.size() == 0) {
return null;
}
if (v.size() == 1) {
return v.get(0);
}
try {
return v.get(fit(0, v.size() - 1, dim));
} catch (Throwable e) {
}
return v.get(0);
}
public int fit(int min, int max, double... dim) {
if (min == max) {
return min;
}
double noise = noise(dim);
return (int) Math.round(IrisInterpolation.lerp(min, max, noise));
}
public int fit(double min, double max, double... dim) {
if (min == max) {
return (int) Math.round(min);
}
double noise = noise(dim);
return (int) Math.round(IrisInterpolation.lerp(min, max, noise));
}
public double fitDouble(double min, double max, double... dim) {
if (min == max) {
return min;
}
double noise = noise(dim);
return IrisInterpolation.lerp(min, max, noise);
}
private double getNoise(double... dim) {
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();
}
}

View File

@@ -3,7 +3,6 @@ package com.volmit.iris.generator.noise;
import com.volmit.iris.util.RNG;
@FunctionalInterface
public interface CNGFactory
{
CNG create(RNG seed);
public interface CNGFactory {
CNG create(RNG seed);
}

View File

@@ -1,88 +1,75 @@
package com.volmit.iris.generator.noise;
import com.volmit.iris.util.RNG;
import lombok.Getter;
import lombok.Setter;
public class CellGenerator
{
private FastNoiseDouble fn;
private FastNoiseDouble fd;
private CNG cng;
public class CellGenerator {
private final FastNoiseDouble fn;
private final FastNoiseDouble fd;
private final CNG cng;
@Getter
@Setter
private double cellScale;
@Getter
@Setter
private double cellScale;
@Getter
@Setter
private double shuffle;
@Getter
@Setter
private double shuffle;
public CellGenerator(RNG rng)
{
shuffle = 128;
cellScale = 0.73;
cng = CNG.signature(rng.nextParallelRNG(3204));
RNG rx = rng.nextParallelRNG(8735652);
long s = rx.lmax();
fn = new FastNoiseDouble(s);
fn.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
fn.setCellularReturnType(FastNoiseDouble.CellularReturnType.CellValue);
fn.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
fd = new FastNoiseDouble(s);
fd.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
fd.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Sub);
fd.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
}
public CellGenerator(RNG rng) {
shuffle = 128;
cellScale = 0.73;
cng = CNG.signature(rng.nextParallelRNG(3204));
RNG rx = rng.nextParallelRNG(8735652);
long s = rx.lmax();
fn = new FastNoiseDouble(s);
fn.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
fn.setCellularReturnType(FastNoiseDouble.CellularReturnType.CellValue);
fn.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
fd = new FastNoiseDouble(s);
fd.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
fd.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Sub);
fd.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
}
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;
}
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;
}
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;
}
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;
}
public double getValue(double x, double z, int possibilities)
{
if(possibilities == 1)
{
return 0;
}
public double getValue(double x, double z, int possibilities) {
if (possibilities == 1) {
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)
{
if(possibilities == 1)
{
return 0;
}
public double getValue(double x, double y, double z, int possibilities) {
if (possibilities == 1) {
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)
{
if(possibilities == 1)
{
return 0;
}
public int getIndex(double x, double z, int possibilities) {
if (possibilities == 1) {
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)
{
if(possibilities == 1)
{
return 0;
}
public int getIndex(double x, double y, double z, int possibilities) {
if (possibilities == 1) {
return 0;
}
return (int) Math.round(getValue(x, y, z, possibilities));
}
return (int) Math.round(getValue(x, y, z, possibilities));
}
}

View File

@@ -3,38 +3,32 @@ package com.volmit.iris.generator.noise;
import com.volmit.iris.util.M;
import com.volmit.iris.util.RNG;
public class CellHeightNoise implements NoiseGenerator
{
private final FastNoiseDouble n;
public class CellHeightNoise implements NoiseGenerator {
private final FastNoiseDouble n;
public CellHeightNoise(long seed)
{
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
n.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Sub);
n.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
}
public CellHeightNoise(long seed) {
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
n.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Sub);
n.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
}
private double filter(double noise)
{
return M.clip(1D - ((noise / 2D) + 0.5D), 0D, 1D);
}
private double filter(double noise) {
return M.clip(1D - ((noise / 2D) + 0.5D), 0D, 1D);
}
@Override
public double noise(double x)
{
return filter(n.GetCellular(x, 0));
}
@Override
public double noise(double x) {
return filter(n.GetCellular(x, 0));
}
@Override
public double noise(double x, double z)
{
return filter(n.GetCellular(x, z));
}
@Override
public double noise(double x, double z) {
return filter(n.GetCellular(x, z));
}
@Override
public double noise(double x, double y, double z)
{
return filter(n.GetCellular(x, y, z));
}
@Override
public double noise(double x, double y, double z) {
return filter(n.GetCellular(x, y, z));
}
}

View File

@@ -2,33 +2,28 @@ package com.volmit.iris.generator.noise;
import com.volmit.iris.util.RNG;
public class CellularNoise implements NoiseGenerator
{
private final FastNoise n;
public class CellularNoise implements NoiseGenerator {
private final FastNoise n;
public CellularNoise(long seed)
{
this.n = new FastNoise(new RNG(seed).imax());
n.SetNoiseType(FastNoise.NoiseType.Cellular);
n.SetCellularReturnType(FastNoise.CellularReturnType.CellValue);
n.SetCellularDistanceFunction(FastNoise.CellularDistanceFunction.Natural);
}
public CellularNoise(long seed) {
this.n = new FastNoise(new RNG(seed).imax());
n.SetNoiseType(FastNoise.NoiseType.Cellular);
n.SetCellularReturnType(FastNoise.CellularReturnType.CellValue);
n.SetCellularDistanceFunction(FastNoise.CellularDistanceFunction.Natural);
}
@Override
public double noise(double x)
{
return (n.GetCellular((float) x, 0) / 2D) + 0.5D;
}
@Override
public double noise(double x) {
return (n.GetCellular((float) x, 0) / 2D) + 0.5D;
}
@Override
public double noise(double x, double z)
{
return (n.GetCellular((float)x, (float)z) / 2D) + 0.5D;
}
@Override
public double noise(double x, double z) {
return (n.GetCellular((float) x, (float) z) / 2D) + 0.5D;
}
@Override
public double noise(double x, double y, double z)
{
return (n.GetCellular((float)x, (float)y, (float)z) / 2D) + 0.5D;
}
@Override
public double noise(double x, double y, double z) {
return (n.GetCellular((float) x, (float) y, (float) z) / 2D) + 0.5D;
}
}

View File

@@ -2,35 +2,29 @@ package com.volmit.iris.generator.noise;
import com.volmit.iris.util.RNG;
public class CubicNoise implements NoiseGenerator
{
private final FastNoiseDouble n;
public class CubicNoise implements NoiseGenerator {
private final FastNoiseDouble n;
public CubicNoise(long seed)
{
this.n = new FastNoiseDouble(new RNG(seed).lmax());
}
public CubicNoise(long seed) {
this.n = new FastNoiseDouble(new RNG(seed).lmax());
}
private double f(double n)
{
return (n / 2D) + 0.5D;
}
private double f(double n) {
return (n / 2D) + 0.5D;
}
@Override
public double noise(double x)
{
return f(n.GetCubic(x, 0));
}
@Override
public double noise(double x) {
return f(n.GetCubic(x, 0));
}
@Override
public double noise(double x, double z)
{
return f(n.GetCubic(x, z));
}
@Override
public double noise(double x, double z) {
return f(n.GetCubic(x, z));
}
@Override
public double noise(double x, double y, double z)
{
return f(n.GetCubic(x, y, z));
}
@Override
public double noise(double x, double y, double 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

View File

@@ -1,27 +1,22 @@
package com.volmit.iris.generator.noise;
public class FlatNoise implements NoiseGenerator
{
public FlatNoise(long seed)
{
public class FlatNoise implements NoiseGenerator {
public FlatNoise(long seed) {
}
}
@Override
public double noise(double x)
{
return 1D;
}
@Override
public double noise(double x) {
return 1D;
}
@Override
public double noise(double x, double z)
{
return 1D;
}
@Override
public double noise(double x, double z) {
return 1D;
}
@Override
public double noise(double x, double y, double z)
{
return 1D;
}
@Override
public double noise(double x, double y, double z) {
return 1D;
}
}

View File

@@ -3,43 +3,36 @@ package com.volmit.iris.generator.noise;
import com.volmit.iris.generator.noise.FastNoiseDouble.FractalType;
import com.volmit.iris.util.RNG;
public class FractalBillowPerlinNoise implements NoiseGenerator, OctaveNoise
{
private final FastNoiseDouble n;
public class FractalBillowPerlinNoise implements NoiseGenerator, OctaveNoise {
private final FastNoiseDouble n;
public FractalBillowPerlinNoise(long seed)
{
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setFractalOctaves(1);
n.setFractalType(FractalType.Billow);
}
public FractalBillowPerlinNoise(long seed) {
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setFractalOctaves(1);
n.setFractalType(FractalType.Billow);
}
public double f(double v)
{
return (v / 2D) + 0.5D;
}
public double f(double v) {
return (v / 2D) + 0.5D;
}
@Override
public double noise(double x)
{
return f(n.GetPerlinFractal(x, 0f));
}
@Override
public double noise(double x) {
return f(n.GetPerlinFractal(x, 0f));
}
@Override
public double noise(double x, double z)
{
return f(n.GetPerlinFractal(x, z));
}
@Override
public double noise(double x, double z) {
return f(n.GetPerlinFractal(x, z));
}
@Override
public double noise(double x, double y, double z)
{
return f(n.GetPerlinFractal(x, y, z));
}
@Override
public double noise(double x, double y, double z) {
return f(n.GetPerlinFractal(x, y, z));
}
@Override
public void setOctaves(int o)
{
n.setFractalOctaves(o);
}
@Override
public void setOctaves(int o) {
n.setFractalOctaves(o);
}
}

View File

@@ -3,43 +3,36 @@ package com.volmit.iris.generator.noise;
import com.volmit.iris.generator.noise.FastNoiseDouble.FractalType;
import com.volmit.iris.util.RNG;
public class FractalBillowSimplexNoise implements NoiseGenerator, OctaveNoise
{
private final FastNoiseDouble n;
public class FractalBillowSimplexNoise implements NoiseGenerator, OctaveNoise {
private final FastNoiseDouble n;
public FractalBillowSimplexNoise(long seed)
{
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setFractalOctaves(1);
n.setFractalType(FractalType.Billow);
}
public FractalBillowSimplexNoise(long seed) {
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setFractalOctaves(1);
n.setFractalType(FractalType.Billow);
}
public double f(double v)
{
return (v / 2D) + 0.5D;
}
public double f(double v) {
return (v / 2D) + 0.5D;
}
@Override
public double noise(double x)
{
return f(n.GetSimplexFractal(x, 0d));
}
@Override
public double noise(double x) {
return f(n.GetSimplexFractal(x, 0d));
}
@Override
public double noise(double x, double z)
{
return f(n.GetSimplexFractal(x, z));
}
@Override
public double noise(double x, double z) {
return f(n.GetSimplexFractal(x, z));
}
@Override
public double noise(double x, double y, double z)
{
return f(n.GetSimplexFractal(x, y, z));
}
@Override
public double noise(double x, double y, double z) {
return f(n.GetSimplexFractal(x, y, z));
}
@Override
public void setOctaves(int o)
{
n.setFractalOctaves(o);
}
@Override
public void setOctaves(int o) {
n.setFractalOctaves(o);
}
}

View File

@@ -3,36 +3,30 @@ package com.volmit.iris.generator.noise;
import com.volmit.iris.generator.noise.FastNoiseDouble.FractalType;
import com.volmit.iris.util.RNG;
public class FractalCubicNoise implements NoiseGenerator
{
private final FastNoiseDouble n;
public class FractalCubicNoise implements NoiseGenerator {
private final FastNoiseDouble n;
public FractalCubicNoise(long seed)
{
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setFractalType(FractalType.Billow);
}
public FractalCubicNoise(long seed) {
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setFractalType(FractalType.Billow);
}
private double f(double n)
{
return (n / 2D) + 0.5D;
}
private double f(double n) {
return (n / 2D) + 0.5D;
}
@Override
public double noise(double x)
{
return f(n.GetCubicFractal(x, 0));
}
@Override
public double noise(double x) {
return f(n.GetCubicFractal(x, 0));
}
@Override
public double noise(double x, double z)
{
return f(n.GetCubicFractal(x, z));
}
@Override
public double noise(double x, double z) {
return f(n.GetCubicFractal(x, z));
}
@Override
public double noise(double x, double y, double z)
{
return f(n.GetCubicFractal(x, y, z));
}
@Override
public double noise(double x, double y, double z) {
return f(n.GetCubicFractal(x, y, z));
}
}

View File

@@ -3,43 +3,36 @@ package com.volmit.iris.generator.noise;
import com.volmit.iris.generator.noise.FastNoiseDouble.FractalType;
import com.volmit.iris.util.RNG;
public class FractalFBMSimplexNoise implements NoiseGenerator, OctaveNoise
{
private final FastNoiseDouble n;
public class FractalFBMSimplexNoise implements NoiseGenerator, OctaveNoise {
private final FastNoiseDouble n;
public FractalFBMSimplexNoise(long seed)
{
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setFractalOctaves(1);
n.setFractalType(FractalType.FBM);
}
public FractalFBMSimplexNoise(long seed) {
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setFractalOctaves(1);
n.setFractalType(FractalType.FBM);
}
public double f(double v)
{
return (v / 2D) + 0.5D;
}
public double f(double v) {
return (v / 2D) + 0.5D;
}
@Override
public double noise(double x)
{
return f(n.GetSimplexFractal(x, 0d));
}
@Override
public double noise(double x) {
return f(n.GetSimplexFractal(x, 0d));
}
@Override
public double noise(double x, double z)
{
return f(n.GetSimplexFractal(x, z));
}
@Override
public double noise(double x, double z) {
return f(n.GetSimplexFractal(x, z));
}
@Override
public double noise(double x, double y, double z)
{
return f(n.GetSimplexFractal(x, y, z));
}
@Override
public double noise(double x, double y, double z) {
return f(n.GetSimplexFractal(x, y, z));
}
@Override
public void setOctaves(int o)
{
n.setFractalOctaves(o);
}
@Override
public void setOctaves(int o) {
n.setFractalOctaves(o);
}
}

View File

@@ -3,43 +3,36 @@ package com.volmit.iris.generator.noise;
import com.volmit.iris.generator.noise.FastNoiseDouble.FractalType;
import com.volmit.iris.util.RNG;
public class FractalRigidMultiSimplexNoise implements NoiseGenerator, OctaveNoise
{
private final FastNoiseDouble n;
public class FractalRigidMultiSimplexNoise implements NoiseGenerator, OctaveNoise {
private final FastNoiseDouble n;
public FractalRigidMultiSimplexNoise(long seed)
{
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setFractalOctaves(1);
n.setFractalType(FractalType.RigidMulti);
}
public FractalRigidMultiSimplexNoise(long seed) {
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setFractalOctaves(1);
n.setFractalType(FractalType.RigidMulti);
}
public double f(double v)
{
return (v / 2D) + 0.5D;
}
public double f(double v) {
return (v / 2D) + 0.5D;
}
@Override
public double noise(double x)
{
return f(n.GetSimplexFractal(x, 0d));
}
@Override
public double noise(double x) {
return f(n.GetSimplexFractal(x, 0d));
}
@Override
public double noise(double x, double z)
{
return f(n.GetSimplexFractal(x, z));
}
@Override
public double noise(double x, double z) {
return f(n.GetSimplexFractal(x, z));
}
@Override
public double noise(double x, double y, double z)
{
return f(n.GetSimplexFractal(x, y, z));
}
@Override
public double noise(double x, double y, double z) {
return f(n.GetSimplexFractal(x, y, z));
}
@Override
public void setOctaves(int o)
{
n.setFractalOctaves(o);
}
@Override
public void setOctaves(int o) {
n.setFractalOctaves(o);
}
}

View File

@@ -2,38 +2,32 @@ package com.volmit.iris.generator.noise;
import com.volmit.iris.util.RNG;
public class GlobNoise implements NoiseGenerator
{
private final FastNoiseDouble n;
public class GlobNoise implements NoiseGenerator {
private final FastNoiseDouble n;
public GlobNoise(long seed)
{
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
n.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Div);
n.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
}
public GlobNoise(long seed) {
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
n.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Div);
n.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
}
private double f(double n)
{
return n + 1D;
}
private double f(double n) {
return n + 1D;
}
@Override
public double noise(double x)
{
return f(n.GetCellular(x, 0));
}
@Override
public double noise(double x) {
return f(n.GetCellular(x, 0));
}
@Override
public double noise(double x, double z)
{
return f(n.GetCellular(x, z));
}
@Override
public double noise(double x, double z) {
return f(n.GetCellular(x, z));
}
@Override
public double noise(double x, double y, double z)
{
return f(n.GetCellular(x, y, z));
}
@Override
public double noise(double x, double y, double z) {
return f(n.GetCellular(x, y, z));
}
}

View File

@@ -1,7 +1,6 @@
package com.volmit.iris.generator.noise;
@FunctionalInterface
public interface NoiseFactory
{
NoiseGenerator create(long seed);
public interface NoiseFactory {
NoiseGenerator create(long seed);
}

View File

@@ -1,15 +1,13 @@
package com.volmit.iris.generator.noise;
public interface NoiseGenerator
{
public double noise(double x);
public double noise(double x, double z);
public double noise(double x, double y, double z);
public interface NoiseGenerator {
double noise(double x);
public default boolean isStatic()
{
return false;
}
double noise(double x, double z);
double noise(double x, double y, double z);
default boolean isStatic() {
return false;
}
}

View File

@@ -1,28 +1,28 @@
package com.volmit.iris.generator.noise;
public enum NoiseType {
WHITE(WhiteNoise::new),
SIMPLEX(SimplexNoise::new),
PERLIN(seed -> new PerlinNoise(seed).hermite()),
FRACTAL_BILLOW_SIMPLEX(FractalBillowSimplexNoise::new),
FRACTAL_BILLOW_PERLIN(FractalBillowPerlinNoise::new),
FRACTAL_FBM_SIMPLEX(FractalFBMSimplexNoise::new),
FRACTAL_RIGID_MULTI_SIMPLEX(FractalRigidMultiSimplexNoise::new),
FLAT(FlatNoise::new),
CELLULAR(CellularNoise::new),
GLOB(GlobNoise::new),
CUBIC(CubicNoise::new),
FRACTAL_CUBIC(FractalCubicNoise::new),
CELLULAR_HEIGHT(CellHeightNoise::new),
VASCULAR(VascularNoise::new);
WHITE(WhiteNoise::new),
SIMPLEX(SimplexNoise::new),
PERLIN(seed -> new PerlinNoise(seed).hermite()),
FRACTAL_BILLOW_SIMPLEX(FractalBillowSimplexNoise::new),
FRACTAL_BILLOW_PERLIN(FractalBillowPerlinNoise::new),
FRACTAL_FBM_SIMPLEX(FractalFBMSimplexNoise::new),
FRACTAL_RIGID_MULTI_SIMPLEX(FractalRigidMultiSimplexNoise::new),
FLAT(FlatNoise::new),
CELLULAR(CellularNoise::new),
GLOB(GlobNoise::new),
CUBIC(CubicNoise::new),
FRACTAL_CUBIC(FractalCubicNoise::new),
CELLULAR_HEIGHT(CellHeightNoise::new),
VASCULAR(VascularNoise::new);
private final NoiseFactory f;
private final NoiseFactory f;
private NoiseType(NoiseFactory f) {
this.f = f;
}
NoiseType(NoiseFactory f) {
this.f = f;
}
public NoiseGenerator create(long seed) {
return f.create(seed);
}
public NoiseGenerator create(long seed) {
return f.create(seed);
}
}

View File

@@ -1,6 +1,5 @@
package com.volmit.iris.generator.noise;
public interface OctaveNoise
{
public void setOctaves(int o);
public interface OctaveNoise {
void setOctaves(int o);
}

View File

@@ -2,97 +2,85 @@ package com.volmit.iris.generator.noise;
import com.volmit.iris.util.RNG;
public class PerlinNoise implements NoiseGenerator, OctaveNoise
{
private final FastNoiseDouble n;
private int octaves;
public class PerlinNoise implements NoiseGenerator, OctaveNoise {
private final FastNoiseDouble n;
private int octaves;
public PerlinNoise(long seed)
{
this.n = new FastNoiseDouble(new RNG(seed).lmax());
octaves = 1;
}
public PerlinNoise(long seed) {
this.n = new FastNoiseDouble(new RNG(seed).lmax());
octaves = 1;
}
public double f(double v)
{
return (v / 2D) + 0.5D;
}
public double f(double v) {
return (v / 2D) + 0.5D;
}
@Override
public double noise(double x)
{
if(octaves <= 1)
{
return f(n.GetPerlin(x, 0));
}
@Override
public double noise(double x) {
if (octaves <= 1) {
return f(n.GetPerlin(x, 0));
}
double f = 1;
double m = 0;
double v = 0;
double f = 1;
double m = 0;
double v = 0;
for(int i = 0; i < octaves; i++)
{
v += n.GetPerlin((x * (f == 1 ? f++ : (f *= 2))), 0) * f;
m += f;
}
for (int i = 0; i < octaves; i++) {
v += n.GetPerlin((x * (f == 1 ? f++ : (f *= 2))), 0) * f;
m += f;
}
return f(v / m);
}
return f(v / m);
}
@Override
public double noise(double x, double z)
{
if(octaves <= 1)
{
return f(n.GetPerlin(x, z));
}
double f = 1;
double m = 0;
double v = 0;
@Override
public double noise(double x, double z) {
if (octaves <= 1) {
return f(n.GetPerlin(x, z));
}
double f = 1;
double m = 0;
double v = 0;
for(int i = 0; i < octaves; i++)
{
f = f == 1 ? f + 1 : f * 2;
v += n.GetPerlin((x * f), (z * f)) * f;
m += f;
}
for (int i = 0; i < octaves; i++) {
f = f == 1 ? f + 1 : f * 2;
v += n.GetPerlin((x * f), (z * f)) * f;
m += f;
}
return f(v / m);
}
return f(v / m);
}
@Override
public double noise(double x, double y, double z)
{
if(octaves <= 1)
{
return f(n.GetPerlin(x, y, z));
}
double f = 1;
double m = 0;
double v = 0;
@Override
public double noise(double x, double y, double z) {
if (octaves <= 1) {
return f(n.GetPerlin(x, y, z));
}
double f = 1;
double m = 0;
double v = 0;
for(int i = 0; i < octaves; i++)
{
f = f == 1 ? f + 1 : f * 2;
v += n.GetPerlin((x * f), (y * f), (z * f)) * f;
m += f;
}
for (int i = 0; i < octaves; i++) {
f = f == 1 ? f + 1 : f * 2;
v += n.GetPerlin((x * f), (y * f), (z * f)) * f;
m += f;
}
return f(v / m);
}
return f(v / m);
}
@Override
public void setOctaves(int o)
{
octaves = o;
}
@Override
public void setOctaves(int o) {
octaves = o;
}
public NoiseGenerator hermite() {
n.m_longerp = FastNoiseDouble.Longerp.Hermite;
return this;
}
public NoiseGenerator quad() {
n.m_longerp = FastNoiseDouble.Longerp.Qulongic;
return this;
}
public NoiseGenerator hermite() {
n.m_longerp = FastNoiseDouble.Longerp.Hermite;
return this;
}
public NoiseGenerator quad() {
n.m_longerp = FastNoiseDouble.Longerp.Qulongic;
return this;
}
}

View File

@@ -4,64 +4,49 @@ import com.volmit.iris.util.IRare;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.RNG;
public class RarityCellGenerator<T extends IRare> extends CellGenerator
{
public RarityCellGenerator(RNG rng)
{
super(rng);
}
public class RarityCellGenerator<T extends IRare> extends CellGenerator {
public RarityCellGenerator(RNG rng) {
super(rng);
}
public T get(double x, double z, KList<T> b)
{
if(b.size() == 0)
{
return null;
}
public T get(double x, double z, KList<T> b) {
if (b.size() == 0) {
return null;
}
if(b.size() == 1)
{
return b.get(0);
}
if (b.size() == 1) {
return b.get(0);
}
KList<T> rarityMapped = new KList<>();
boolean o = false;
int max = 1;
for(T i : b)
{
if(i.getRarity() > max)
{
max = i.getRarity();
}
}
KList<T> rarityMapped = new KList<>();
boolean o = false;
int max = 1;
for (T i : b) {
if (i.getRarity() > max) {
max = i.getRarity();
}
}
max++;
max++;
for(T i : b)
{
for(int j = 0; j < max - i.getRarity(); j++)
{
if(o = !o)
{
rarityMapped.add(i);
}
for (T i : b) {
for (int j = 0; j < max - i.getRarity(); j++) {
if (o = !o) {
rarityMapped.add(i);
} else {
rarityMapped.add(0, i);
}
}
}
else
{
rarityMapped.add(0, i);
}
}
}
if (rarityMapped.size() == 1) {
return rarityMapped.get(0);
}
if(rarityMapped.size() == 1)
{
return rarityMapped.get(0);
}
if (rarityMapped.isEmpty()) {
throw new RuntimeException("BAD RARITY MAP! RELATED TO: " + b.toString(", or possibly "));
}
if(rarityMapped.isEmpty())
{
throw new RuntimeException("BAD RARITY MAP! RELATED TO: " + b.toString(", or possibly "));
}
return rarityMapped.get(getIndex(x, z, rarityMapped.size()));
}
return rarityMapped.get(getIndex(x, z, rarityMapped.size()));
}
}

View File

@@ -2,88 +2,75 @@ package com.volmit.iris.generator.noise;
import com.volmit.iris.util.RNG;
public class SimplexNoise implements NoiseGenerator, OctaveNoise
{
private final FastNoiseDouble n;
private int octaves;
public class SimplexNoise implements NoiseGenerator, OctaveNoise {
private final FastNoiseDouble n;
private int octaves;
public SimplexNoise(long seed)
{
this.n = new FastNoiseDouble(new RNG(seed).lmax());
octaves = 1;
}
public SimplexNoise(long seed) {
this.n = new FastNoiseDouble(new RNG(seed).lmax());
octaves = 1;
}
public double f(double v)
{
return (v / 2D) + 0.5D;
}
public double f(double v) {
return (v / 2D) + 0.5D;
}
@Override
public double noise(double x)
{
if(octaves <= 1)
{
return f(n.GetSimplex(x, 0d));
}
@Override
public double noise(double x) {
if (octaves <= 1) {
return f(n.GetSimplex(x, 0d));
}
double f = 1;
double m = 0;
double v = 0;
double f = 1;
double m = 0;
double v = 0;
for(int i = 0; i < octaves; i++)
{
v += n.GetSimplex((x * (f == 1 ? f++ : (f *= 2))), 0d) * f;
m += f;
}
for (int i = 0; i < octaves; i++) {
v += n.GetSimplex((x * (f == 1 ? f++ : (f *= 2))), 0d) * f;
m += f;
}
return f(v / m);
}
return f(v / m);
}
@Override
public double noise(double x, double z)
{
if(octaves <= 1)
{
return f(n.GetSimplex(x, z));
}
double f = 1;
double m = 0;
double v = 0;
@Override
public double noise(double x, double z) {
if (octaves <= 1) {
return f(n.GetSimplex(x, z));
}
double f = 1;
double m = 0;
double v = 0;
for(int i = 0; i < octaves; i++)
{
f = f == 1 ? f + 1 : f * 2;
v += n.GetSimplex((x * f), (z * f)) * f;
m += f;
}
for (int i = 0; i < octaves; i++) {
f = f == 1 ? f + 1 : f * 2;
v += n.GetSimplex((x * f), (z * f)) * f;
m += f;
}
return f(v / m);
}
return f(v / m);
}
@Override
public double noise(double x, double y, double z)
{
if(octaves <= 1)
{
return f(n.GetSimplex(x, y, z));
}
double f = 1;
double m = 0;
double v = 0;
@Override
public double noise(double x, double y, double z) {
if (octaves <= 1) {
return f(n.GetSimplex(x, y, z));
}
double f = 1;
double m = 0;
double v = 0;
for(int i = 0; i < octaves; i++)
{
f = f == 1 ? f + 1 : f * 2;
v += n.GetSimplex((x * f), (y * f), (z * f)) * f;
m += f;
}
for (int i = 0; i < octaves; i++) {
f = f == 1 ? f + 1 : f * 2;
v += n.GetSimplex((x * f), (y * f), (z * f)) * f;
m += f;
}
return f(v / m);
}
return f(v / m);
}
@Override
public void setOctaves(int o)
{
octaves = o;
}
@Override
public void setOctaves(int o) {
octaves = o;
}
}

View File

@@ -3,38 +3,32 @@ package com.volmit.iris.generator.noise;
import com.volmit.iris.util.M;
import com.volmit.iris.util.RNG;
public class VascularNoise implements NoiseGenerator
{
private final FastNoiseDouble n;
public class VascularNoise implements NoiseGenerator {
private final FastNoiseDouble n;
public VascularNoise(long seed)
{
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
n.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Sub);
n.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
}
public VascularNoise(long seed) {
this.n = new FastNoiseDouble(new RNG(seed).lmax());
n.setNoiseType(FastNoiseDouble.NoiseType.Cellular);
n.setCellularReturnType(FastNoiseDouble.CellularReturnType.Distance2Sub);
n.setCellularDistanceFunction(FastNoiseDouble.CellularDistanceFunction.Natural);
}
private double filter(double noise)
{
return M.clip((noise / 2D) + 0.5D, 0D, 1D);
}
private double filter(double noise) {
return M.clip((noise / 2D) + 0.5D, 0D, 1D);
}
@Override
public double noise(double x)
{
return filter(n.GetCellular(x, 0));
}
@Override
public double noise(double x) {
return filter(n.GetCellular(x, 0));
}
@Override
public double noise(double x, double z)
{
return filter(n.GetCellular(x, z));
}
@Override
public double noise(double x, double z) {
return filter(n.GetCellular(x, z));
}
@Override
public double noise(double x, double y, double z)
{
return filter(n.GetCellular(x, y, z));
}
@Override
public double noise(double x, double y, double z) {
return filter(n.GetCellular(x, y, z));
}
}

View File

@@ -2,40 +2,33 @@ package com.volmit.iris.generator.noise;
import com.volmit.iris.util.RNG;
public class WhiteNoise implements NoiseGenerator
{
private final FastNoise n;
public class WhiteNoise implements NoiseGenerator {
private final FastNoise n;
public WhiteNoise(long seed)
{
n = new FastNoise(new RNG(seed).imax());
}
public WhiteNoise(long seed) {
n = new FastNoise(new RNG(seed).imax());
}
public boolean isStatic()
{
return true;
}
public boolean isStatic() {
return true;
}
private double f(double m)
{
return (m % 8192) * 1024;
}
private double f(double m) {
return (m % 8192) * 1024;
}
@Override
public double noise(double x)
{
return (n.GetWhiteNoise(f(x), 0d) / 2D) + 0.5D;
}
@Override
public double noise(double x) {
return (n.GetWhiteNoise(f(x), 0d) / 2D) + 0.5D;
}
@Override
public double noise(double x, double z)
{
return (n.GetWhiteNoise(f(x), f(z)) / 2D) + 0.5D;
}
@Override
public double noise(double x, double z) {
return (n.GetWhiteNoise(f(x), f(z)) / 2D) + 0.5D;
}
@Override
public double noise(double x, double y, double z)
{
return (n.GetWhiteNoise(f(x), f(y), f(z)) / 2D) + 0.5D;
}
@Override
public double noise(double x, double y, double z) {
return (n.GetWhiteNoise(f(x), f(y), f(z)) / 2D) + 0.5D;
}
}

View File

@@ -4,12 +4,12 @@ import com.google.gson.Gson;
import com.volmit.iris.Iris;
import com.volmit.iris.object.*;
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.NamedTag;
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.ListTag;
import com.volmit.iris.util.*;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
@@ -19,263 +19,225 @@ import java.io.File;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
public class ConversionManager
{
private KList<Converter> converters;
private File folder;
public class ConversionManager {
private final KList<Converter> converters;
private final File folder;
public ConversionManager()
{
folder = Iris.instance.getDataFolder("convert");
converters = new KList<>();
public ConversionManager() {
folder = Iris.instance.getDataFolder("convert");
converters = new KList<>();
J.s(() ->
{
J.attemptAsync(() ->
{
if(Bukkit.getPluginManager().isPluginEnabled("WorldEdit"))
{
converters.add(new Converter()
{
@Override
public String getOutExtension()
{
return "iob";
}
J.s(() ->
{
J.attemptAsync(() ->
{
if (Bukkit.getPluginManager().isPluginEnabled("WorldEdit")) {
converters.add(new Converter() {
@Override
public String getOutExtension() {
return "iob";
}
@Override
public String getInExtension()
{
return "schem";
}
@Override
public String getInExtension() {
return "schem";
}
@Override
public void convert(File in, File out)
{
SKConversion.convertSchematic(in, out);
}
});
@Override
public void convert(File in, File out) {
SKConversion.convertSchematic(in, out);
}
});
converters.add(new Converter()
{
@Override
public String getOutExtension()
{
return "iob";
}
converters.add(new Converter() {
@Override
public String getOutExtension() {
return "iob";
}
@Override
public String getInExtension()
{
return "schematic";
}
@Override
public String getInExtension() {
return "schematic";
}
@Override
public void convert(File in, File out)
{
SKConversion.convertSchematic(in, out);
}
});
}
});
}, 5);
}
@Override
public void convert(File in, File out) {
SKConversion.convertSchematic(in, out);
}
});
}
});
}, 5);
}
private String toPoolName(String poolReference)
{
return poolReference.split("\\Q:\\E")[1];
}
private String toPoolName(String poolReference) {
return poolReference.split("\\Q:\\E")[1];
}
public void convertStructures(File in, File out, MortarSender s)
{
KMap<String, IrisJigsawPool> pools = new KMap<>();
KList<File> roots = new KList<>();
AtomicInteger total = new AtomicInteger(0);
AtomicInteger at = new AtomicInteger(0);
File destPools = new File(out.getAbsolutePath() + "/jigsaw-pools");
destPools.mkdirs();
findAllNBT(in, (folder, file) -> {
total.getAndIncrement();
if(roots.addIfMissing(folder))
{
String b = in.toURI().relativize(folder.toURI()).getPath();
if(b.startsWith("/"))
{
b = b.substring(1);
}
public void convertStructures(File in, File out, MortarSender s) {
KMap<String, IrisJigsawPool> pools = new KMap<>();
KList<File> roots = new KList<>();
AtomicInteger total = new AtomicInteger(0);
AtomicInteger at = new AtomicInteger(0);
File destPools = new File(out.getAbsolutePath() + "/jigsaw-pools");
destPools.mkdirs();
findAllNBT(in, (folder, file) -> {
total.getAndIncrement();
if (roots.addIfMissing(folder)) {
String b = in.toURI().relativize(folder.toURI()).getPath();
if (b.startsWith("/")) {
b = b.substring(1);
}
if(b.endsWith("/"))
{
b = b.substring(0, b.length() - 1);
}
if (b.endsWith("/")) {
b = b.substring(0, b.length() - 1);
}
pools.put(b, new IrisJigsawPool());
}
});
findAllNBT(in, (folder, file) -> {
at.getAndIncrement();
String b = in.toURI().relativize(folder.toURI()).getPath();
if(b.startsWith("/"))
{
b = b.substring(1);
}
pools.put(b, new IrisJigsawPool());
}
});
findAllNBT(in, (folder, file) -> {
at.getAndIncrement();
String b = in.toURI().relativize(folder.toURI()).getPath();
if (b.startsWith("/")) {
b = b.substring(1);
}
if(b.endsWith("/"))
{
b = b.substring(0, b.length() - 1);
}
IrisJigsawPool jpool = pools.get(b);
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());
destObjects.mkdirs();
destPieces.mkdirs();
if (b.endsWith("/")) {
b = b.substring(0, b.length() - 1);
}
IrisJigsawPool jpool = pools.get(b);
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());
destObjects.mkdirs();
destPieces.mkdirs();
try {
NamedTag tag = NBTUtil.read(file);
CompoundTag compound = (CompoundTag) tag.getTag();
try {
NamedTag tag = NBTUtil.read(file);
CompoundTag compound = (CompoundTag) tag.getTag();
if (compound.containsKey("blocks") && compound.containsKey("palette") && compound.containsKey("size"))
{
String id = in.toURI().relativize(folder.toURI()).getPath() + file.getName().split("\\Q.\\E")[0];
ListTag<IntTag> size = (ListTag<IntTag>) compound.getListTag("size");
int w = size.get(0).asInt();
int h = size.get(1).asInt();
int d = size.get(2).asInt();
KList<BlockData> palette = new KList<>();
ListTag<CompoundTag> paletteList = (ListTag<CompoundTag>) compound.getListTag("palette");
for(int i = 0; i < paletteList.size(); i++)
{
CompoundTag cp = paletteList.get(i);
palette.add(DirectWorldWriter.getBlockData(cp));
}
IrisJigsawPiece piece = new IrisJigsawPiece();
IrisObject object = new IrisObject(w,h,d);
ListTag<CompoundTag> blockList = (ListTag<CompoundTag>) compound.getListTag("blocks");
for(int i = 0; i < blockList.size(); i++)
{
CompoundTag cp = blockList.get(i);
ListTag<IntTag> pos = (ListTag<IntTag>) cp.getListTag("pos");
int x = pos.get(0).asInt();
int y = pos.get(1).asInt();
int z = pos.get(2).asInt();
BlockData bd = palette.get(cp.getInt("state")).clone();
if (compound.containsKey("blocks") && compound.containsKey("palette") && compound.containsKey("size")) {
String id = in.toURI().relativize(folder.toURI()).getPath() + file.getName().split("\\Q.\\E")[0];
ListTag<IntTag> size = (ListTag<IntTag>) compound.getListTag("size");
int w = size.get(0).asInt();
int h = size.get(1).asInt();
int d = size.get(2).asInt();
KList<BlockData> palette = new KList<>();
ListTag<CompoundTag> paletteList = (ListTag<CompoundTag>) compound.getListTag("palette");
for (int i = 0; i < paletteList.size(); i++) {
CompoundTag cp = paletteList.get(i);
palette.add(DirectWorldWriter.getBlockData(cp));
}
IrisJigsawPiece piece = new IrisJigsawPiece();
IrisObject object = new IrisObject(w, h, d);
ListTag<CompoundTag> blockList = (ListTag<CompoundTag>) compound.getListTag("blocks");
for (int i = 0; i < blockList.size(); i++) {
CompoundTag cp = blockList.get(i);
ListTag<IntTag> pos = (ListTag<IntTag>) cp.getListTag("pos");
int x = pos.get(0).asInt();
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"))
{
piece.setObject(in.toURI().relativize(folder.toURI()).getPath() + file.getName().split("\\Q.\\E")[0]);
IrisPosition spos = new IrisPosition(object.getSigned(x,y,z));
CompoundTag nbt = cp.getCompoundTag("nbt");
CompoundTag finalState = new CompoundTag();
finalState.putString("Name", nbt.getString("final_state"));
BlockData jd = bd.clone();
bd = DirectWorldWriter.getBlockData(finalState);
String joint = nbt.getString("joint");
String pool = nbt.getString("pool");
String poolId = toPoolName(pool);
String name = nbt.getString("name");
String target = nbt.getString("target");
pools.computeIfAbsent(poolId, (k) -> new IrisJigsawPool());
IrisJigsawPieceConnector connector = new IrisJigsawPieceConnector();
connector.setName(name);
connector.setTargetName(target);
connector.setRotateConnector(false);
connector.setPosition(spos);
connector.getPools().add(poolId);
connector.setDirection(IrisDirection.getDirection(((Jigsaw)jd).getOrientation()));
if (bd.getMaterial().equals(Material.JIGSAW) && cp.containsKey("nbt")) {
piece.setObject(in.toURI().relativize(folder.toURI()).getPath() + file.getName().split("\\Q.\\E")[0]);
IrisPosition spos = new IrisPosition(object.getSigned(x, y, z));
CompoundTag nbt = cp.getCompoundTag("nbt");
CompoundTag finalState = new CompoundTag();
finalState.putString("Name", nbt.getString("final_state"));
BlockData jd = bd.clone();
bd = DirectWorldWriter.getBlockData(finalState);
String joint = nbt.getString("joint");
String pool = nbt.getString("pool");
String poolId = toPoolName(pool);
String name = nbt.getString("name");
String target = nbt.getString("target");
pools.computeIfAbsent(poolId, (k) -> new IrisJigsawPool());
IrisJigsawPieceConnector connector = new IrisJigsawPieceConnector();
connector.setName(name);
connector.setTargetName(target);
connector.setRotateConnector(false);
connector.setPosition(spos);
connector.getPools().add(poolId);
connector.setDirection(IrisDirection.getDirection(((Jigsaw) jd).getOrientation()));
if(target.equals("minecraft:building_entrance"))
{
connector.setInnerConnector(true);
}
if (target.equals("minecraft:building_entrance")) {
connector.setInnerConnector(true);
}
piece.getConnectors().add(connector);
}
piece.getConnectors().add(connector);
}
if(!bd.getMaterial().equals(Material.STRUCTURE_VOID) && !bd.getMaterial().equals(Material.AIR))
{
object.setUnsigned(x,y,z, bd);
}
}
if (!bd.getMaterial().equals(Material.STRUCTURE_VOID) && !bd.getMaterial().equals(Material.AIR)) {
object.setUnsigned(x, y, z, bd);
}
}
jpool.getPieces().addIfMissing(id);
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));
Iris.info("[Jigsaw]: (" + Form.pc((double)at.get() / (double)total.get(), 0) + ") Exported Piece: " + id);
}
} catch (Throwable e) {
e.printStackTrace();
}
});
jpool.getPieces().addIfMissing(id);
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));
Iris.info("[Jigsaw]: (" + Form.pc((double) at.get() / (double) total.get(), 0) + ") Exported Piece: " + id);
}
} catch (Throwable e) {
e.printStackTrace();
}
});
for(String i : pools.k())
{
try {
IO.writeAll(new File(destPools, i + ".json"), new JSONObject(new Gson().toJson(pools.get(i))).toString(4));
} catch (IOException e) {
e.printStackTrace();
}
}
for (String i : pools.k()) {
try {
IO.writeAll(new File(destPools, i + ".json"), new JSONObject(new Gson().toJson(pools.get(i))).toString(4));
} catch (IOException e) {
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)
{
if(path == null)
{
return;
}
public void findAllNBT(File path, Consumer2<File, File> inFile) {
if (path == null) {
return;
}
if(path.isFile() && path.getName().endsWith(".nbt"))
{
inFile.accept(path.getParentFile(), path);
return;
}
if (path.isFile() && path.getName().endsWith(".nbt")) {
inFile.accept(path.getParentFile(), path);
return;
}
for(File i : path.listFiles())
{
if(i.isDirectory())
{
findAllNBT(i, inFile);
}
for (File i : path.listFiles()) {
if (i.isDirectory()) {
findAllNBT(i, inFile);
} else if (i.isFile() && i.getName().endsWith(".nbt")) {
inFile.accept(path, i);
}
}
}
else if(i.isFile() && i.getName().endsWith(".nbt"))
{
inFile.accept(path, i);
}
}
}
public void check(MortarSender s) {
int m = 0;
Iris.instance.getDataFolder("convert");
public void check(MortarSender s)
{
int m = 0;
Iris.instance.getDataFolder("convert");
for (File i : folder.listFiles()) {
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());
}
}
for(File i : folder.listFiles())
{
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")) {
File f = new File(folder, "jigsaw");
if(i.isDirectory() && i.getName().equals("structures")) {
File f = new File(folder, "jigsaw");
if (!f.exists()) {
s.sendMessage("Converting NBT Structures into Iris Jigsaw Structures...");
f.mkdirs();
J.a(() -> convertStructures(i, f, s));
}
}
}
if (!f.exists())
{
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"));
}
s.sendMessage("Converted " + m + " File" + (m == 1 ? "" : "s"));
}
}

View File

@@ -1,13 +1,5 @@
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.IrisSettings;
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.util.KMap;
import com.volmit.iris.util.M;
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
{
private KMap<World, BlockEditor> editors;
public class EditManager implements Listener {
private final KMap<World, BlockEditor> editors;
public EditManager()
{
this.editors = new KMap<>();
Iris.instance.registerListener(this);
Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, this::update, 0, 0);
}
public EditManager() {
this.editors = new KMap<>();
Iris.instance.registerListener(this);
Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, this::update, 0, 0);
}
public BlockData get(World world, int x, int y, int z)
{
return open(world).get(x, y, z);
}
public BlockData get(World world, int x, int y, int z) {
return open(world).get(x, y, z);
}
public void set(World world, int x, int y, int z, BlockData d)
{
open(world).set(x, y, z, d);
}
public void set(World world, int x, int y, int z, BlockData d) {
open(world).set(x, y, z, d);
}
public void setBiome(World world, int x, int y, int z, Biome d)
{
open(world).setBiome(x, y, z, d);
}
public void setBiome(World world, int x, int y, int z, Biome d) {
open(world).setBiome(x, y, z, d);
}
public void setBiome(World world, int x, int z, Biome d)
{
open(world).setBiome(x, z, d);
}
public void setBiome(World world, int x, int z, Biome d) {
open(world).setBiome(x, z, d);
}
public Biome getBiome(World world, int x, int y, int z)
{
return open(world).getBiome(x, y, z);
}
public Biome getBiome(World world, int x, int y, int z) {
return open(world).getBiome(x, y, z);
}
public Biome getBiome(World world, int x, int z)
{
return open(world).getBiome(x, z);
}
public Biome getBiome(World world, int x, int z) {
return open(world).getBiome(x, z);
}
@EventHandler
public void on(WorldUnloadEvent e)
{
if(editors.containsKey(e.getWorld()))
{
editors.remove(e.getWorld()).close();
}
}
@EventHandler
public void on(WorldUnloadEvent e) {
if (editors.containsKey(e.getWorld())) {
editors.remove(e.getWorld()).close();
}
}
public void update()
{
for(World i : editors.k())
{
if(M.ms() - editors.get(i).last() > 1000)
{
editors.remove(i).close();
}
}
}
public void update() {
for (World i : editors.k()) {
if (M.ms() - editors.get(i).last() > 1000) {
editors.remove(i).close();
}
}
}
public void flushNow()
{
for(World i : editors.k())
{
editors.remove(i).close();
}
}
public void flushNow() {
for (World i : editors.k()) {
editors.remove(i).close();
}
}
public BlockEditor open(World world)
{
if(editors.containsKey(world))
{
return editors.get(world);
}
public BlockEditor open(World world) {
if (editors.containsKey(world)) {
return editors.get(world);
}
BlockEditor e = null;
BlockEditor e = null;
if(Bukkit.getPluginManager().isPluginEnabled("WorldEdit") && !PaperLib.isPaper() && !IrisSettings.get().getGeneral().isIgnoreWorldEdit())
{
try
{
e = new WEBlockEditor(world);
}
if (Bukkit.getPluginManager().isPluginEnabled("WorldEdit") && !PaperLib.isPaper() && !IrisSettings.get().getGeneral().isIgnoreWorldEdit()) {
try {
e = new WEBlockEditor(world);
} catch (Throwable ex) {
e = new BukkitBlockEditor(world);
}
} else {
e = new BukkitBlockEditor(world);
}
catch(Throwable ex)
{
e = new BukkitBlockEditor(world);
}
}
editors.put(world, e);
else
{
e = new BukkitBlockEditor(world);
}
editors.put(world, e);
return e;
}
return e;
}
}

View File

@@ -13,131 +13,113 @@ import org.bukkit.event.player.PlayerChangedWorldEvent;
import java.util.List;
public class IrisBoardManager implements BoardProvider, Listener
{
@DontObfuscate
private BoardManager manager;
private String mem = "...";
public RollingSequence hits = new RollingSequence(20);
public RollingSequence tp = new RollingSequence(100);
private ChronoLatch cl = new ChronoLatch(1000);
public class IrisBoardManager implements BoardProvider, Listener {
@DontObfuscate
private final BoardManager manager;
private String mem = "...";
public RollingSequence hits = new RollingSequence(20);
public RollingSequence tp = new RollingSequence(100);
private final ChronoLatch cl = new ChronoLatch(1000);
@DontObfuscate
public IrisBoardManager()
{
Iris.instance.registerListener(this);
//@builder
manager = new BoardManager(Iris.instance, BoardSettings.builder()
.boardProvider(this)
.scoreDirection(ScoreDirection.DOWN)
.build());
//@done
}
@DontObfuscate
public IrisBoardManager() {
Iris.instance.registerListener(this);
//@builder
manager = new BoardManager(Iris.instance, BoardSettings.builder()
.boardProvider(this)
.scoreDirection(ScoreDirection.DOWN)
.build());
//@done
}
@EventHandler
public void on(PlayerChangedWorldEvent e)
{
J.s(() -> updatePlayer(e.getPlayer()));
}
@EventHandler
public void on(PlayerChangedWorldEvent e) {
J.s(() -> updatePlayer(e.getPlayer()));
}
@DontObfuscate
private boolean isIrisWorld(World w)
{
return IrisWorlds.isIrisWorld(w) && IrisWorlds.access(w).isStudio();
}
@DontObfuscate
private boolean isIrisWorld(World w) {
return IrisWorlds.isIrisWorld(w) && IrisWorlds.access(w).isStudio();
}
public void updatePlayer(Player p)
{
if(isIrisWorld(p.getWorld()))
{
manager.remove(p);
manager.setup(p);
}
public void updatePlayer(Player p) {
if (isIrisWorld(p.getWorld())) {
manager.remove(p);
manager.setup(p);
} else {
manager.remove(p);
}
}
else
{
manager.remove(p);
}
}
@Override
public String getTitle(Player player) {
return C.GREEN + "Iris";
}
@Override
public String getTitle(Player player)
{
return C.GREEN + "Iris";
}
@DontObfuscate
@Override
public List<String> getLines(Player player) {
KList<String> v = new KList<>();
@DontObfuscate
@Override
public List<String> getLines(Player player)
{
KList<String> v = new KList<>();
if (!isIrisWorld(player.getWorld())) {
return v;
}
if(!isIrisWorld(player.getWorld()))
{
return v;
}
IrisAccess g = IrisWorlds.access(player.getWorld());
IrisAccess g = IrisWorlds.access(player.getWorld());
if (cl.flip()) {
// TODO MEMORY
mem = Form.memSize(0, 2);
}
if(cl.flip())
{
// TODO MEMORY
mem = Form.memSize(0, 2);
}
int x = player.getLocation().getBlockX();
int y = player.getLocation().getBlockY();
int z = player.getLocation().getBlockZ();
int x = player.getLocation().getBlockX();
int y = player.getLocation().getBlockY();
int z = player.getLocation().getBlockZ();
Engine engine = g.getCompound().getEngineForHeight(y);
Engine engine = g.getCompound().getEngineForHeight(y);
int parallaxChunks = 0;
int parallaxRegions = 0;
long memoryGuess = 0;
int loadedObjects = 0;
int parallaxChunks=0;
int parallaxRegions=0;
long memoryGuess=0;
int loadedObjects=0;
for (int i = 0; i < g.getCompound().getSize(); i++) {
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;
}
for(int i = 0; i < g.getCompound().getSize(); i++)
{
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
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------------------");
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));
if (engine != null) {
v.add("&7&m------------------");
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)
{
v.add("&7&m------------------");
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(C.LIGHT_PURPLE + "Tasks" + C.GRAY + ": " + Iris.jobCount());
}
if(Iris.jobCount() > 0)
{
v.add("&7&m------------------");
v.add(C.LIGHT_PURPLE + "Tasks" + C.GRAY + ": " + Iris.jobCount());
}
v.add("&7&m------------------");
v.add("&7&m------------------");
return v;
}
return v;
}
@DontObfuscate
public void disable()
{
manager.onDisable();
}
@DontObfuscate
public void disable() {
manager.onDisable();
}
}

View File

@@ -12,201 +12,172 @@ import java.util.Objects;
import java.util.function.Function;
@Data
public class IrisDataManager
{
private ResourceLoader<IrisBiome> biomeLoader;
private ResourceLoader<IrisLootTable> lootLoader;
private ResourceLoader<IrisRegion> regionLoader;
private ResourceLoader<IrisDimension> dimensionLoader;
private ResourceLoader<IrisGenerator> generatorLoader;
private ResourceLoader<IrisJigsawPiece> jigsawPieceLoader;
private ResourceLoader<IrisJigsawPool> jigsawPoolLoader;
private ResourceLoader<IrisJigsawStructure> jigsawStructureLoader;
private ResourceLoader<IrisEntity> entityLoader;
private ResourceLoader<IrisBlockData> blockLoader;
private ObjectResourceLoader objectLoader;
private boolean closed;
private final File dataFolder;
private final int id;
public class IrisDataManager {
private ResourceLoader<IrisBiome> biomeLoader;
private ResourceLoader<IrisLootTable> lootLoader;
private ResourceLoader<IrisRegion> regionLoader;
private ResourceLoader<IrisDimension> dimensionLoader;
private ResourceLoader<IrisGenerator> generatorLoader;
private ResourceLoader<IrisJigsawPiece> jigsawPieceLoader;
private ResourceLoader<IrisJigsawPool> jigsawPoolLoader;
private ResourceLoader<IrisJigsawStructure> jigsawStructureLoader;
private ResourceLoader<IrisEntity> entityLoader;
private ResourceLoader<IrisBlockData> blockLoader;
private ObjectResourceLoader objectLoader;
private boolean closed;
private final File dataFolder;
private final int id;
public IrisDataManager(File dataFolder)
{
this(dataFolder, false);
}
public IrisDataManager(File dataFolder) {
this(dataFolder, false);
}
public IrisDataManager(File dataFolder, boolean oneshot)
{
this.dataFolder = dataFolder;
this.id = RNG.r.imax();
closed = false;
hotloaded();
}
public IrisDataManager(File dataFolder, boolean oneshot) {
this.dataFolder = dataFolder;
this.id = RNG.r.imax();
closed = false;
hotloaded();
}
public void close()
{
closed = true;
dump();
this.lootLoader = null;
this.entityLoader = null;
this.regionLoader = null;
this.biomeLoader = null;
this.dimensionLoader = null;
this.jigsawPoolLoader = null;
this.jigsawPieceLoader = null;
this.generatorLoader = null;
this.jigsawStructureLoader = null;
this.blockLoader = null;
this.objectLoader = null;
}
public void close() {
closed = true;
dump();
this.lootLoader = null;
this.entityLoader = null;
this.regionLoader = null;
this.biomeLoader = null;
this.dimensionLoader = null;
this.jigsawPoolLoader = null;
this.jigsawPieceLoader = null;
this.generatorLoader = null;
this.jigsawStructureLoader = null;
this.blockLoader = null;
this.objectLoader = null;
}
private static void printData(ResourceLoader<?> rl)
{
Iris.warn(" " + rl.getResourceTypeName() + " @ /" + rl.getFolderName() + ": Cache=" + rl.getLoadCache().size() + " Folders=" + rl.getFolders().size());
}
private static void printData(ResourceLoader<?> rl) {
Iris.warn(" " + rl.getResourceTypeName() + " @ /" + rl.getFolderName() + ": Cache=" + rl.getLoadCache().size() + " Folders=" + rl.getFolders().size());
}
public IrisDataManager copy() {
return new IrisDataManager(dataFolder);
}
public IrisDataManager copy() {
return new IrisDataManager(dataFolder);
}
public void hotloaded()
{
if(closed)
{
return;
}
public void hotloaded() {
if (closed) {
return;
}
File packs = dataFolder;
packs.mkdirs();
this.lootLoader = new ResourceLoader<>(packs, this, "loot", "Loot", IrisLootTable.class);
this.entityLoader = new ResourceLoader<>(packs,this, "entities", "Entity", IrisEntity.class);
this.regionLoader = new ResourceLoader<>(packs, this, "regions", "Region", IrisRegion.class);
this.biomeLoader = new ResourceLoader<>(packs, this, "biomes", "Biome", IrisBiome.class);
this.dimensionLoader = new ResourceLoader<>(packs, this, "dimensions", "Dimension", IrisDimension.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.jigsawPieceLoader = new ResourceLoader<>(packs, this, "jigsaw-pieces", "Jigsaw Piece", IrisJigsawPiece.class);
this.generatorLoader = new ResourceLoader<>(packs, this, "generators", "Generator", IrisGenerator.class);
this.blockLoader = new ResourceLoader<>(packs,this, "blocks", "Block", IrisBlockData.class);
this.objectLoader = new ObjectResourceLoader(packs, this, "objects", "Object");
}
File packs = dataFolder;
packs.mkdirs();
this.lootLoader = new ResourceLoader<>(packs, this, "loot", "Loot", IrisLootTable.class);
this.entityLoader = new ResourceLoader<>(packs, this, "entities", "Entity", IrisEntity.class);
this.regionLoader = new ResourceLoader<>(packs, this, "regions", "Region", IrisRegion.class);
this.biomeLoader = new ResourceLoader<>(packs, this, "biomes", "Biome", IrisBiome.class);
this.dimensionLoader = new ResourceLoader<>(packs, this, "dimensions", "Dimension", IrisDimension.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.jigsawPieceLoader = new ResourceLoader<>(packs, this, "jigsaw-pieces", "Jigsaw Piece", IrisJigsawPiece.class);
this.generatorLoader = new ResourceLoader<>(packs, this, "generators", "Generator", IrisGenerator.class);
this.blockLoader = new ResourceLoader<>(packs, this, "blocks", "Block", IrisBlockData.class);
this.objectLoader = new ObjectResourceLoader(packs, this, "objects", "Object");
}
public void dump()
{
if(closed)
{
return;
}
biomeLoader.clearCache();
blockLoader.clearCache();
lootLoader.clearCache();
objectLoader.clearCache();
jigsawPieceLoader.clearCache();
jigsawPoolLoader.clearCache();
jigsawStructureLoader.clearCache();
regionLoader.clearCache();
dimensionLoader.clearCache();
entityLoader.clearCache();
generatorLoader.clearCache();
}
public void dump() {
if (closed) {
return;
}
biomeLoader.clearCache();
blockLoader.clearCache();
lootLoader.clearCache();
objectLoader.clearCache();
jigsawPieceLoader.clearCache();
jigsawPoolLoader.clearCache();
jigsawStructureLoader.clearCache();
regionLoader.clearCache();
dimensionLoader.clearCache();
entityLoader.clearCache();
generatorLoader.clearCache();
}
public void clearLists()
{
if(closed)
{
return;
}
public void clearLists() {
if (closed) {
return;
}
lootLoader.clearList();
blockLoader.clearList();
entityLoader.clearList();
biomeLoader.clearList();
regionLoader.clearList();
dimensionLoader.clearList();
generatorLoader.clearList();
jigsawStructureLoader.clearList();
jigsawPoolLoader.clearList();
jigsawPieceLoader.clearList();
objectLoader.clearList();
}
lootLoader.clearList();
blockLoader.clearList();
entityLoader.clearList();
biomeLoader.clearList();
regionLoader.clearList();
dimensionLoader.clearList();
generatorLoader.clearList();
jigsawStructureLoader.clearList();
jigsawPoolLoader.clearList();
jigsawPieceLoader.clearList();
objectLoader.clearList();
}
public static IrisObject loadAnyObject(String key)
{
return loadAny(key, (dm) -> dm.getObjectLoader().load(key, false));
}
public static IrisObject loadAnyObject(String key) {
return loadAny(key, (dm) -> dm.getObjectLoader().load(key, false));
}
public static IrisBiome loadAnyBiome(String key)
{
return loadAny(key, (dm) -> dm.getBiomeLoader().load(key, false));
}
public static IrisBiome loadAnyBiome(String key) {
return loadAny(key, (dm) -> dm.getBiomeLoader().load(key, false));
}
public static IrisJigsawPiece loadAnyJigsawPiece(String key)
{
return loadAny(key, (dm) -> dm.getJigsawPieceLoader().load(key, false));
}
public static IrisJigsawPiece loadAnyJigsawPiece(String key) {
return loadAny(key, (dm) -> dm.getJigsawPieceLoader().load(key, false));
}
public static IrisJigsawPool loadAnyJigsawPool(String key)
{
return loadAny(key, (dm) -> dm.getJigsawPoolLoader().load(key, false));
}
public static IrisJigsawPool loadAnyJigsawPool(String key) {
return loadAny(key, (dm) -> dm.getJigsawPoolLoader().load(key, false));
}
public static IrisEntity loadAnyEntity(String key)
{
return loadAny(key, (dm) -> dm.getEntityLoader().load(key, false));
}
public static IrisEntity loadAnyEntity(String key) {
return loadAny(key, (dm) -> dm.getEntityLoader().load(key, false));
}
public static IrisLootTable loadAnyLootTable(String key)
{
return loadAny(key, (dm) -> dm.getLootLoader().load(key, false));
}
public static IrisLootTable loadAnyLootTable(String key) {
return loadAny(key, (dm) -> dm.getLootLoader().load(key, false));
}
public static IrisBlockData loadAnyBlock(String key)
{
return loadAny(key, (dm) -> dm.getBlockLoader().load(key, false));
}
public static IrisBlockData loadAnyBlock(String key) {
return loadAny(key, (dm) -> dm.getBlockLoader().load(key, false));
}
public static IrisRegion loadAnyRegion(String key)
{
return loadAny(key, (dm) -> dm.getRegionLoader().load(key, false));
}
public static IrisRegion loadAnyRegion(String key) {
return loadAny(key, (dm) -> dm.getRegionLoader().load(key, false));
}
public static IrisDimension loadAnyDimension(String key)
{
return loadAny(key, (dm) -> dm.getDimensionLoader().load(key, false));
}
public static IrisDimension loadAnyDimension(String key) {
return loadAny(key, (dm) -> dm.getDimensionLoader().load(key, false));
}
public static IrisJigsawStructure loadAnyJigsawStructure(String key)
{
return loadAny(key, (dm) -> dm.getJigsawStructureLoader().load(key, false));
}
public static IrisJigsawStructure loadAnyJigsawStructure(String key) {
return loadAny(key, (dm) -> dm.getJigsawStructureLoader().load(key, false));
}
public static IrisGenerator loadAnyGenerator(String key)
{
return loadAny(key, (dm) -> dm.getGeneratorLoader().load(key, false));
}
public static IrisGenerator loadAnyGenerator(String key) {
return loadAny(key, (dm) -> dm.getGeneratorLoader().load(key, false));
}
public static <T extends IrisRegistrant> T loadAny(String key, Function<IrisDataManager, T> v) {
try
{
for(File i : Objects.requireNonNull(Iris.instance.getDataFolder("packs").listFiles()))
{
if(i.isDirectory())
{
IrisDataManager dm = new IrisDataManager(i, true);
T t = v.apply(dm);
public static <T extends IrisRegistrant> T loadAny(String key, Function<IrisDataManager, T> v) {
try {
for (File i : Objects.requireNonNull(Iris.instance.getDataFolder("packs").listFiles())) {
if (i.isDirectory()) {
IrisDataManager dm = new IrisDataManager(i, true);
T t = v.apply(dm);
if(t != null)
{
return t;
}
}
}
}
if (t != null) {
return t;
}
}
}
} catch (Throwable e) {
e.printStackTrace();
}
catch(Throwable e)
{
e.printStackTrace();
}
return null;
}
return null;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -8,526 +8,413 @@ import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.scaffold.cache.AtomicCache;
import com.volmit.iris.util.*;
import lombok.Data;
import org.bukkit.potion.PotionEffectType;
import org.zeroturnaround.zip.ZipUtil;
import org.zeroturnaround.zip.commons.FileUtils;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.Objects;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Data
public class ProjectManager
{
public static final String LISTING = "https://raw.githubusercontent.com/IrisDimensions/_listing/main/listing-v2.json";
public static final String WORKSPACE_NAME = "packs";
private KMap<String, String> cacheListing = null;
private IrisProject activeProject;
private static final AtomicCache<Integer> counter = new AtomicCache<>();
public ProjectManager()
{
if(IrisSettings.get().isStudio())
{
J.a(() ->
{
File ignore = getWorkspaceFile(".gitignore");
if(!ignore.exists())
{
File m = Iris.getCached("Pack Ignore (.gitignore)", "https://raw.githubusercontent.com/VolmitSoftware/Iris/master/packignore.ignore");
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).keySet().contains(i.getName()))
{
v++;
}
}
catch(Throwable ignored)
{
}
}
}
catch(Throwable ignored)
{
}
return v;
});
return vv;
}
public IrisDimension installIntoWorld(MortarSender sender, String type, File folder)
{
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())
{
if(i.isFile() && i.getName().equals(type + ".iris"))
{
sender.sendMessage("Found " + type + ".iris in " + ProjectManager.WORKSPACE_NAME + " folder");
ZipUtil.unpack(i, irispack);
break;
}
}
}
else
{
sender.sendMessage("Found " + type + " dimension in " + ProjectManager.WORKSPACE_NAME + " folder. Repackaging");
File f = new IrisProject(new File(getWorkspaceFolder(), type)).getPath();
try
{
FileUtils.copyDirectory(f, irispack);
}
catch(IOException e)
{
}
}
File dimf = new File(irispack, "dimensions/" + type + ".json");
if(!dimf.exists() || !dimf.isFile())
{
Iris.proj.downloadSearch(sender, type, false);
File downloaded = Iris.proj.getWorkspaceFolder(type);
for(File i : downloaded.listFiles())
{
if(i.isFile())
{
try
{
FileUtils.copyFile(i, new File(irispack, i.getName()));
}
catch(IOException e)
{
e.printStackTrace();
}
}
else
{
try
{
FileUtils.copyDirectory(i, new File(irispack, i.getName()));
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
IO.delete(downloaded);
}
if(!dimf.exists() || !dimf.isFile())
{
sender.sendMessage("Can't find the " + dimf.getName() + " in the dimensions folder of this pack! Failed!");
return null;
}
IrisDataManager dm = new IrisDataManager(irispack);
dim = dm.getDimensionLoader().load(type);
if(dim == null)
{
sender.sendMessage("Can't load the dimension! Failed!");
return null;
}
sender.sendMessage(folder.getName() + " type installed. ");
return dim;
}
public void downloadSearch(MortarSender sender, String key, boolean trim)
{
downloadSearch(sender, key, trim, false);
}
public void downloadSearch(MortarSender sender, String key, boolean trim, boolean forceOverwrite)
{
String url = "?";
try
{
url = getListing(false).get(key);
url = url == null ? key : url;
Iris.info("Assuming URL " + url);
String branch = "master";
String[] nodes = url.split("\\Q/\\E");
String repo = nodes[0] + "/" + nodes[1];
branch = nodes.length > 2 ? nodes[2] : branch;
download(sender, repo, branch, trim, forceOverwrite);
}
catch(Throwable e)
{
e.printStackTrace();
sender.sendMessage("Failed to download '" + key + "' from " + url + ".");
}
}
public void download(MortarSender sender, String repo, String branch, boolean trim) throws JsonSyntaxException, IOException
{
download(sender, repo, branch, trim, false);
}
public void download(MortarSender sender, String repo, String branch, boolean trim, boolean forceOverwrite) throws JsonSyntaxException, IOException
{
String url = "https://codeload.github.com/" + repo + "/zip/refs/heads/" + branch;
sender.sendMessage("Downloading " + url);
File zip = Iris.getNonCachedFile("pack-" + trim + "-" + repo, url);
File temp = Iris.getTemp();
File work = new File(temp, "dl-" + UUID.randomUUID());
File packs = getWorkspaceFolder();
sender.sendMessage("Unpacking " + repo);
try {
ZipUtil.unpack(zip, work);
} catch (Throwable e){
e.printStackTrace();
sender.sendMessage(
"Issue when unpacking. Please check/do the following:" +
"\n1. Do you have a functioning internet connection?" +
"\n2. Did the download corrupt?" +
"\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)"
);
}
File dir = null;
File[] zipFiles = work.listFiles();
if (zipFiles == null) {
sender.sendMessage("No files were extracted from the zip file.");
return;
}
try {
dir = zipFiles.length == 1 && zipFiles[0].isDirectory() ? zipFiles[0] : null;
} catch (NullPointerException e) {
sender.sendMessage("Error when finding home directory. Are there any non-text characters in the file name?");
return;
}
if(dir == null)
{
sender.sendMessage("Invalid Format. Missing root folder or too many folders!");
return;
}
File dimensions = new File(dir, "dimensions");
if(!(dimensions.exists() && dimensions.isDirectory()))
{
sender.sendMessage("Invalid Format. Missing dimensions folder");
return;
}
if(dimensions.listFiles() == null){
sender.sendMessage("No dimension file found in the extracted zip file.");
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");
return;
}
File dim = dimensions.listFiles()[0];
if(!dim.isFile())
{
sender.sendMessage("Invalid dimension (folder) in dimensions folder");
return;
}
String key = dim.getName().split("\\Q.\\E")[0];
IrisDimension d = new Gson().fromJson(IO.readAll(dim), IrisDimension.class);
sender.sendMessage("Importing " + d.getName() + " (" + key + ")");
File packEntry = new File(packs, key);
if(forceOverwrite)
{
IO.delete(packEntry);
}
if(IrisDataManager.loadAnyDimension(key) != null)
{
sender.sendMessage("Another dimension in the packs folder is already using the key " + key + " IMPORT FAILED!");
return;
}
if(packEntry.exists() && packEntry.listFiles().length > 0)
{
sender.sendMessage("Another pack is using the key " + key + ". IMPORT FAILED!");
return;
}
FileUtils.copyDirectory(dir, packEntry);
if(trim)
{
sender.sendMessage("Trimming " + key);
File cp = compilePackage(sender, key, false, false);
IO.delete(packEntry);
packEntry.mkdirs();
ZipUtil.unpack(cp, packEntry);
}
sender.sendMessage("Successfully Aquired " + d.getName());
}
public KMap<String, String> getListing(boolean cached)
{
if(cached && cacheListing != null)
{
return cacheListing;
}
JSONObject a;
if(cached)
{
a = new JSONObject(Iris.getCached("cachedlisting", LISTING));
}
else
{
a = new JSONObject(Iris.getNonCached(true + "listing", LISTING));
}
KMap<String, String> l = new KMap<>();
for(String i : a.keySet())
{
l.put(i, a.getString(i));
}
return l;
}
public boolean isProjectOpen()
{
return activeProject != null && activeProject.isOpen();
}
public void open(MortarSender sender, String dimm)
{
try {
open(sender, dimm, () ->
{
if (sender.isPlayer()) {
}
});
} catch (Exception e){
sender.sendMessage("Error when creating studio world:");
e.printStackTrace();
}
}
public void open(MortarSender sender, String dimm, Runnable onDone)
{
if(isProjectOpen())
{
close();
}
IrisProject project = new IrisProject(new File(getWorkspaceFolder(), dimm));
activeProject = project;
project.open(sender, onDone);
}
public File getWorkspaceFolder(String... sub)
{
return Iris.instance.getDataFolderList(WORKSPACE_NAME, sub);
}
public File getWorkspaceFile(String... sub)
{
return Iris.instance.getDataFileList(WORKSPACE_NAME, sub);
}
public void close()
{
if(isProjectOpen())
{
activeProject.close();
activeProject = null;
}
}
public File compilePackage(MortarSender sender, String d, boolean obfuscate, boolean minify)
{
return new IrisProject(new File(getWorkspaceFolder(), d)).compilePackage(sender, obfuscate, minify);
}
public void createFrom(String existingPack, String newName)
{
File importPack = getWorkspaceFolder(existingPack);
File newPack = getWorkspaceFolder(newName);
if(importPack.listFiles().length == 0)
{
Iris.warn("Couldn't find the pack to create a new dimension from.");
return;
}
try
{
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();
}
}
public class ProjectManager {
public static final String LISTING = "https://raw.githubusercontent.com/IrisDimensions/_listing/main/listing-v2.json";
public static final String WORKSPACE_NAME = "packs";
private KMap<String, String> cacheListing = null;
private IrisProject activeProject;
private static final AtomicCache<Integer> counter = new AtomicCache<>();
public ProjectManager() {
if (IrisSettings.get().isStudio()) {
J.a(() ->
{
File ignore = getWorkspaceFile(".gitignore");
if (!ignore.exists()) {
File m = Iris.getCached("Pack Ignore (.gitignore)", "https://raw.githubusercontent.com/VolmitSoftware/Iris/master/packignore.ignore");
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++;
}
} catch (Throwable ignored) {
}
}
} catch (Throwable ignored) {
}
return v;
});
return vv;
}
public IrisDimension installIntoWorld(MortarSender sender, String type, File folder) {
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()) {
if (i.isFile() && i.getName().equals(type + ".iris")) {
sender.sendMessage("Found " + type + ".iris in " + ProjectManager.WORKSPACE_NAME + " folder");
ZipUtil.unpack(i, irispack);
break;
}
}
} else {
sender.sendMessage("Found " + type + " dimension in " + ProjectManager.WORKSPACE_NAME + " folder. Repackaging");
File f = new IrisProject(new File(getWorkspaceFolder(), type)).getPath();
try {
FileUtils.copyDirectory(f, irispack);
} catch (IOException e) {
}
}
File dimf = new File(irispack, "dimensions/" + type + ".json");
if (!dimf.exists() || !dimf.isFile()) {
Iris.proj.downloadSearch(sender, type, false);
File downloaded = Iris.proj.getWorkspaceFolder(type);
for (File i : downloaded.listFiles()) {
if (i.isFile()) {
try {
FileUtils.copyFile(i, new File(irispack, i.getName()));
} catch (IOException e) {
e.printStackTrace();
}
} else {
try {
FileUtils.copyDirectory(i, new File(irispack, i.getName()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
IO.delete(downloaded);
}
if (!dimf.exists() || !dimf.isFile()) {
sender.sendMessage("Can't find the " + dimf.getName() + " in the dimensions folder of this pack! Failed!");
return null;
}
IrisDataManager dm = new IrisDataManager(irispack);
dim = dm.getDimensionLoader().load(type);
if (dim == null) {
sender.sendMessage("Can't load the dimension! Failed!");
return null;
}
sender.sendMessage(folder.getName() + " type installed. ");
return dim;
}
public void downloadSearch(MortarSender sender, String key, boolean trim) {
downloadSearch(sender, key, trim, false);
}
public void downloadSearch(MortarSender sender, String key, boolean trim, boolean forceOverwrite) {
String url = "?";
try {
url = getListing(false).get(key);
url = url == null ? key : url;
Iris.info("Assuming URL " + url);
String branch = "master";
String[] nodes = url.split("\\Q/\\E");
String repo = nodes[0] + "/" + nodes[1];
branch = nodes.length > 2 ? nodes[2] : branch;
download(sender, repo, branch, trim, forceOverwrite);
} catch (Throwable e) {
e.printStackTrace();
sender.sendMessage("Failed to download '" + key + "' from " + url + ".");
}
}
public void download(MortarSender sender, String repo, String branch, boolean trim) throws JsonSyntaxException, IOException {
download(sender, repo, branch, trim, false);
}
public void download(MortarSender sender, String repo, String branch, boolean trim, boolean forceOverwrite) throws JsonSyntaxException, IOException {
String url = "https://codeload.github.com/" + repo + "/zip/refs/heads/" + branch;
sender.sendMessage("Downloading " + url);
File zip = Iris.getNonCachedFile("pack-" + trim + "-" + repo, url);
File temp = Iris.getTemp();
File work = new File(temp, "dl-" + UUID.randomUUID());
File packs = getWorkspaceFolder();
sender.sendMessage("Unpacking " + repo);
try {
ZipUtil.unpack(zip, work);
} catch (Throwable e) {
e.printStackTrace();
sender.sendMessage(
"Issue when unpacking. Please check/do the following:" +
"\n1. Do you have a functioning internet connection?" +
"\n2. Did the download corrupt?" +
"\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)"
);
}
File dir = null;
File[] zipFiles = work.listFiles();
if (zipFiles == null) {
sender.sendMessage("No files were extracted from the zip file.");
return;
}
try {
dir = zipFiles.length == 1 && zipFiles[0].isDirectory() ? zipFiles[0] : null;
} catch (NullPointerException e) {
sender.sendMessage("Error when finding home directory. Are there any non-text characters in the file name?");
return;
}
if (dir == null) {
sender.sendMessage("Invalid Format. Missing root folder or too many folders!");
return;
}
File dimensions = new File(dir, "dimensions");
if (!(dimensions.exists() && dimensions.isDirectory())) {
sender.sendMessage("Invalid Format. Missing dimensions folder");
return;
}
if (dimensions.listFiles() == null) {
sender.sendMessage("No dimension file found in the extracted zip file.");
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");
return;
}
File dim = dimensions.listFiles()[0];
if (!dim.isFile()) {
sender.sendMessage("Invalid dimension (folder) in dimensions folder");
return;
}
String key = dim.getName().split("\\Q.\\E")[0];
IrisDimension d = new Gson().fromJson(IO.readAll(dim), IrisDimension.class);
sender.sendMessage("Importing " + d.getName() + " (" + key + ")");
File packEntry = new File(packs, key);
if (forceOverwrite) {
IO.delete(packEntry);
}
if (IrisDataManager.loadAnyDimension(key) != null) {
sender.sendMessage("Another dimension in the packs folder is already using the key " + key + " IMPORT FAILED!");
return;
}
if (packEntry.exists() && packEntry.listFiles().length > 0) {
sender.sendMessage("Another pack is using the key " + key + ". IMPORT FAILED!");
return;
}
FileUtils.copyDirectory(dir, packEntry);
if (trim) {
sender.sendMessage("Trimming " + key);
File cp = compilePackage(sender, key, false, false);
IO.delete(packEntry);
packEntry.mkdirs();
ZipUtil.unpack(cp, packEntry);
}
sender.sendMessage("Successfully Aquired " + d.getName());
}
public KMap<String, String> getListing(boolean cached) {
if (cached && cacheListing != null) {
return cacheListing;
}
JSONObject a;
if (cached) {
a = new JSONObject(Iris.getCached("cachedlisting", LISTING));
} else {
a = new JSONObject(Iris.getNonCached(true + "listing", LISTING));
}
KMap<String, String> l = new KMap<>();
for (String i : a.keySet()) {
l.put(i, a.getString(i));
}
return l;
}
public boolean isProjectOpen() {
return activeProject != null && activeProject.isOpen();
}
public void open(MortarSender sender, String dimm) {
try {
open(sender, dimm, () ->
{
if (sender.isPlayer()) {
}
});
} catch (Exception e) {
sender.sendMessage("Error when creating studio world:");
e.printStackTrace();
}
}
public void open(MortarSender sender, String dimm, Runnable onDone) {
if (isProjectOpen()) {
close();
}
IrisProject project = new IrisProject(new File(getWorkspaceFolder(), dimm));
activeProject = project;
project.open(sender, onDone);
}
public File getWorkspaceFolder(String... sub) {
return Iris.instance.getDataFolderList(WORKSPACE_NAME, sub);
}
public File getWorkspaceFile(String... sub) {
return Iris.instance.getDataFileList(WORKSPACE_NAME, sub);
}
public void close() {
if (isProjectOpen()) {
activeProject.close();
activeProject = null;
}
}
public File compilePackage(MortarSender sender, String d, boolean obfuscate, boolean minify) {
return new IrisProject(new File(getWorkspaceFolder(), d)).compilePackage(sender, obfuscate, minify);
}
public void createFrom(String existingPack, String newName) {
File importPack = getWorkspaceFolder(existingPack);
File newPack = getWorkspaceFolder(newName);
if (importPack.listFiles().length == 0) {
Iris.warn("Couldn't find the pack to create a new dimension from.");
return;
}
try {
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

View File

@@ -23,312 +23,252 @@ import java.util.Objects;
public class WandManager implements Listener {
private static ItemStack wand;
private static ItemStack dust;
private static ItemStack wand;
private static ItemStack dust;
public WandManager()
{
wand = createWand();
dust = createDust();
Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, () ->
{
for(Player i : Bukkit.getOnlinePlayers())
{
tick(i);
}
}, 0, 5);
}
public WandManager() {
wand = createWand();
dust = createDust();
Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, () ->
{
for (Player i : Bukkit.getOnlinePlayers()) {
tick(i);
}
}, 0, 5);
}
public void tick(Player p)
{
try
{
if(isWand(p.getInventory().getItemInMainHand()))
{
Location[] d = getCuboid(p.getInventory().getItemInMainHand());
draw(d, p);
}
}
public void tick(Player p) {
try {
if (isWand(p.getInventory().getItemInMainHand())) {
Location[] d = getCuboid(p.getInventory().getItemInMainHand());
draw(d, p);
}
} catch (Throwable ignored) {
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)
{
draw(new Location[] {d.getLowerNE(), d.getUpperSW()}, p);
}
public void draw(Location[] d, Player p) {
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);
public void draw(Location[] d, Player p)
{
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())) {
return;
}
if(!d[0].getWorld().equals(d[1].getWorld()))
{
return;
}
if (d[0].distanceSquared(d[1]) > 64 * 64) {
return;
}
if(d[0].distanceSquared(d[1]) > 64 * 64)
{
return;
}
int minx = Math.min(d[0].getBlockX(), d[1].getBlockX());
int miny = Math.min(d[0].getBlockY(), d[1].getBlockY());
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());
int miny = Math.min(d[0].getBlockY(), d[1].getBlockY());
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());
for (double j = minx - 1; j < maxx + 1; j += 0.25) {
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;
for(double j = minx - 1; j < maxx + 1; j += 0.25)
{
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)) {
Vector push = new Vector(0, 0, 0);
if((jj && kk) || (jj && ll) || (ll && kk))
{
Vector push = new Vector(0, 0, 0);
if (j == minx) {
push.add(new Vector(-0.55, 0, 0));
}
if(j == minx)
{
push.add(new Vector(-0.55, 0, 0));
}
if (k == miny) {
push.add(new Vector(0, -0.55, 0));
}
if(k == miny)
{
push.add(new Vector(0, -0.55, 0));
}
if (l == minz) {
push.add(new Vector(0, 0, -0.55));
}
if(l == minz)
{
push.add(new Vector(0, 0, -0.55));
}
if (j == maxx) {
push.add(new Vector(0.55, 0, 0));
}
if(j == maxx)
{
push.add(new Vector(0.55, 0, 0));
}
if (k == maxy) {
push.add(new Vector(0, 0.55, 0));
}
if(k == maxy)
{
push.add(new Vector(0, 0.55, 0));
}
if (l == maxz) {
push.add(new Vector(0, 0, 0.55));
}
if(l == maxz)
{
push.add(new Vector(0, 0, 0.55));
}
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);
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);
Color color = Color.getHSBColor((float) (0.5f + (Math.sin((j + k + l + (p.getTicksLived() / 2)) / 20f) / 2)), 1, 1);
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));
}
}
}
}
}
}
@EventHandler
public void on(PlayerInteractEvent e) {
try {
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);
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
public void on(PlayerInteractEvent e)
{
try
{
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();
}
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()));
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();
}
}
}
}
} catch (Throwable ignored) {
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)
{
s.place(at);
}
BlockVector bv = b.getLocation().subtract(c.getLowerNE().toVector()).toVector().toBlockVector();
s.setUnsigned(bv.getBlockX(), bv.getBlockY(), bv.getBlockZ(), b);
}
public static IrisObject createSchematic(ItemStack wand)
{
if(!isWand(wand))
{
return null;
}
return s;
} catch (Throwable e) {
e.printStackTrace();
}
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;
}
return null;
}
BlockVector bv = b.getLocation().subtract(c.getLowerNE().toVector()).toVector().toBlockVector();
s.setUnsigned(bv.getBlockX(), bv.getBlockY(), bv.getBlockZ(), b);
}
public static Location stringToLocation(String s) {
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)
{
e.printStackTrace();
}
return s.getBlockX() + "," + s.getBlockY() + "," + s.getBlockZ() + " in " + s.getWorld().getName();
}
return null;
}
public static ItemStack createWand() {
return createWand(null, null);
}
public static Location stringToLocation(String s)
{
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]));
}
public static ItemStack createDust() {
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);
catch(Throwable e)
{
return null;
}
}
return is;
}
public static String locationToString(Location s)
{
if(s == null)
{
return "<#>";
}
public boolean isDust(Player p) {
ItemStack is = p.getInventory().getItemInMainHand();
return is != null && isDust(is);
}
return s.getBlockX() + "," + s.getBlockY() + "," + s.getBlockZ() + " in " + s.getWorld().getName();
}
public boolean isDust(ItemStack is) {
return is.equals(dust);
}
public static ItemStack createWand()
{
return createWand(null, null);
}
public ItemStack update(boolean left, Location a, ItemStack item) {
if (!isWand(item)) {
return item;
}
public static ItemStack createDust()
{
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);
Location[] f = getCuboid(item);
Location other = left ? f[1] : f[0];
return is;
}
if (other != null && !other.getWorld().getName().equals(a.getWorld().getName())) {
other = null;
}
public boolean isDust(Player p)
{
ItemStack is = p.getInventory().getItemInMainHand();
return is != null && isDust(is);
}
return createWand(left ? a : other, left ? other : a);
}
public boolean isDust(ItemStack is)
{
return is.equals(dust);
}
public static ItemStack createWand(Location a, Location b) {
ItemStack is = new ItemStack(Material.BLAZE_ROD);
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)
{
if(!isWand(item))
{
return item;
}
return is;
}
Location[] f = getCuboid(item);
Location other = left ? f[1] : f[0];
public static Location[] getCuboid(ItemStack is) {
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()))
{
other = null;
}
public static boolean isWand(Player p) {
ItemStack is = p.getInventory().getItemInMainHand();
return is != null && isWand(is);
}
return createWand(left ? a : other, left ? other : a);
}
public static ItemStack createWand(Location a, Location b)
{
ItemStack is = new ItemStack(Material.BLAZE_ROD);
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);
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());
}
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());
}
}

View File

@@ -11,69 +11,65 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIris extends MortarCommand
{
@Command
private CommandIrisCreate create;
public class CommandIris extends MortarCommand {
@Command
private CommandIrisCreate create;
@Command
private CommandIrisFix fix;
@Command
private CommandIrisFix fix;
@Command
private CommandIrisStudio studio;
@Command
private CommandIrisStudio studio;
@Command
private CommandIrisJigsaw jigsaw;
@Command
private CommandIrisJigsaw jigsaw;
@Command
private CommandIrisObject object;
@Command
private CommandIrisObject object;
@Command
private CommandIrisRegen regen;
@Command
private CommandIrisRegen regen;
@Command
private CommandIrisDownload download;
@Command
private CommandIrisDownload download;
@Command
private CommandIrisUpdateProject updateProject;
@Command
private CommandIrisUpdateProject updateProject;
@Command
private CommandIrisUpdateWorld updateWorld;
@Command
private CommandIrisUpdateWorld updateWorld;
@Command
private CommandIrisWhat what;
@Command
private CommandIrisWhat what;
@Command
private CommandIrisMetrics metrics;
@Command
private CommandIrisMetrics metrics;
@Command
private CommandIrisPregen pregen;
@Command
private CommandIrisPregen pregen;
@Command
private CommandIrisReload reload;
@Command
private CommandIrisReload reload;
public CommandIris()
{
super("iris", "ir", "irs");
requiresPermission(Iris.perm);
}
public CommandIris() {
super("iris", "ir", "irs");
requiresPermission(Iris.perm);
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
sender.sendMessage("Iris v" + Iris.instance.getDescription().getVersion() + " by Volmit Software");
printHelp(sender);
return true;
}
@Override
public boolean handle(MortarSender sender, String[] args) {
sender.sendMessage("Iris v" + Iris.instance.getDescription().getVersion() + " by Volmit Software");
printHelp(sender);
return true;
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
}
@Override
protected String getArgsUsage()
{
return "";
}
@Override
protected String getArgsUsage() {
return "";
}
}

View File

@@ -3,50 +3,44 @@ package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.util.*;
public class CommandIrisDownload extends MortarCommand
{
public CommandIrisDownload()
{
super("download", "down", "dl");
requiresPermission(Iris.perm.studio);
setDescription("Download a project.");
setCategory("Studio");
}
public class CommandIrisDownload extends MortarCommand {
public CommandIrisDownload() {
super("download", "down", "dl");
requiresPermission(Iris.perm.studio);
setDescription("Download a project.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@Override
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)
{
if(i.equals("-t") || i.equals("--trim"))
{
trim = true;
}
}
boolean trim = false;
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
protected String getArgsUsage()
{
return "<name> [-t/--trim]";
}
return true;
}
@Override
protected String getArgsUsage() {
return "<name> [-t/--trim]";
}
}

View File

@@ -3,64 +3,54 @@ package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.scaffold.IrisWorlds;
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.entity.Player;
public class CommandIrisMetrics extends MortarCommand
{
public CommandIrisMetrics()
{
super("metrics", "stats", "mt");
setDescription("Get timings for this world");
requiresPermission(Iris.perm.studio);
setCategory("Metrics");
}
public class CommandIrisMetrics extends MortarCommand {
public CommandIrisMetrics() {
super("metrics", "stats", "mt");
setDescription("Get timings for this world");
requiresPermission(Iris.perm.studio);
setCategory("Metrics");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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 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
{
g.printMetrics(sender);
}
IrisAccess g = IrisWorlds.access(world);
catch(Throwable e)
{
sender.sendMessage("You must be in an iris world.");
}
try {
g.printMetrics(sender);
} catch (Throwable e) {
sender.sendMessage("You must be in an iris world.");
}
return true;
}
return true;
} else {
sender.sendMessage("Players only.");
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
@Override
protected String getArgsUsage() {
return "";
}
}

View File

@@ -6,33 +6,29 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisReload extends MortarCommand
{
public CommandIrisReload()
{
super("reload", "rld");
requiresPermission(Iris.perm.studio);
setDescription("Reload configs");
setCategory("Studio");
}
public class CommandIrisReload extends MortarCommand {
public CommandIrisReload() {
super("reload", "rld");
requiresPermission(Iris.perm.studio);
setDescription("Reload configs");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
IrisSettings.invalidate();
IrisSettings.get();
sender.sendMessage("settings.json Reloaded");
return true;
}
@Override
public boolean handle(MortarSender sender, String[] args) {
IrisSettings.invalidate();
IrisSettings.get();
sender.sendMessage("settings.json Reloaded");
return true;
}
@Override
protected String getArgsUsage()
{
return "<name> [-t/--trim]";
}
@Override
protected String getArgsUsage() {
return "<name> [-t/--trim]";
}
}

View File

@@ -3,38 +3,33 @@ package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.util.*;
public class CommandIrisUpdateProject extends MortarCommand
{
public CommandIrisUpdateProject()
{
super("update-project", "^project");
requiresPermission(Iris.perm.studio);
setDescription("Update a project from git.");
setCategory("Studio");
}
public class CommandIrisUpdateProject extends MortarCommand {
public CommandIrisUpdateProject() {
super("update-project", "^project");
requiresPermission(Iris.perm.studio);
setDescription("Update a project from git.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@Override
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 update-project " + C.BOLD + "<PROJECT>");
return true;
}
@Override
public boolean handle(MortarSender sender, String[] args) {
if (args.length < 1) {
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
protected String getArgsUsage()
{
return "<project>";
}
@Override
protected String getArgsUsage() {
return "<project>";
}
}

View File

@@ -3,31 +3,26 @@ package com.volmit.iris.manager.command;
import com.volmit.iris.util.MortarPermission;
import com.volmit.iris.util.Permission;
public class PermissionIris extends MortarPermission
{
@Permission
public PermissionIrisStudio studio;
public PermissionIris()
{
super();
}
public class PermissionIris extends MortarPermission {
@Permission
public PermissionIrisStudio studio;
@Override
protected String getNode()
{
return "iris";
}
public PermissionIris() {
super();
}
@Override
public String getDescription()
{
return "Iris Permissions";
}
@Override
protected String getNode() {
return "iris";
}
@Override
public boolean isDefault()
{
return false;
}
@Override
public String getDescription() {
return "Iris Permissions";
}
@Override
public boolean isDefault() {
return false;
}
}

View File

@@ -2,28 +2,23 @@ package com.volmit.iris.manager.command;
import com.volmit.iris.util.MortarPermission;
public class PermissionIrisStudio extends MortarPermission
{
public PermissionIrisStudio()
{
super();
}
public class PermissionIrisStudio extends MortarPermission {
public PermissionIrisStudio() {
super();
}
@Override
protected String getNode()
{
return "studio";
}
@Override
protected String getNode() {
return "studio";
}
@Override
public String getDescription()
{
return "Iris Studio Permissions";
}
@Override
public String getDescription() {
return "Iris Studio Permissions";
}
@Override
public boolean isDefault()
{
return false;
}
@Override
public boolean isDefault() {
return false;
}
}

View File

@@ -7,56 +7,50 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisJigsaw extends MortarCommand
{
@Command
private CommandIrisJigsawNew create;
public class CommandIrisJigsaw extends MortarCommand {
@Command
private CommandIrisJigsawNew create;
@Command
private CommandIrisJigsawEdit edit;
@Command
private CommandIrisJigsawEdit edit;
@Command
private CommandIrisJigsawSave save;
@Command
private CommandIrisJigsawSave save;
@Command
private CommandIrisJigsawPlace place;
@Command
private CommandIrisJigsawPlace place;
public CommandIrisJigsaw()
{
super("jigsaw", "jig", "jsw", "j");
requiresPermission(Iris.perm);
setCategory("Jigsaw");
setDescription("Iris jigsaw commands");
}
public CommandIrisJigsaw() {
super("jigsaw", "jig", "jsw", "j");
requiresPermission(Iris.perm);
setCategory("Jigsaw");
setDescription("Iris jigsaw commands");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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 Jigsaw, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("Ingame only");
return true;
}
@Override
public boolean handle(MortarSender sender, String[] args) {
if (!IrisSettings.get().isStudio()) {
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
return true;
}
sender.sendMessage("Iris Jigsaw Commands:");
printHelp(sender);
return true;
}
if (!sender.isPlayer()) {
sender.sendMessage("Ingame only");
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
sender.sendMessage("Iris Jigsaw Commands:");
printHelp(sender);
return true;
}
@Override
protected String getArgsUsage() {
return "";
}
}

View File

@@ -11,59 +11,51 @@ import com.volmit.iris.util.MortarSender;
import java.io.File;
public class CommandIrisJigsawEdit extends MortarCommand
{
public CommandIrisJigsawEdit()
{
super("edit", "e", "*");
requiresPermission(Iris.perm);
setCategory("Jigsaw");
setDescription("Edit an existing Jigsaw piece");
}
public class CommandIrisJigsawEdit extends MortarCommand {
public CommandIrisJigsawEdit() {
super("edit", "e", "*");
requiresPermission(Iris.perm);
setCategory("Jigsaw");
setDescription("Edit an existing Jigsaw piece");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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 Jigsaw, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("Ingame only");
return true;
}
@Override
public boolean handle(MortarSender sender, String[] args) {
if (!IrisSettings.get().isStudio()) {
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
return true;
}
if(args.length < 1)
{
sender.sendMessage(getArgsUsage());
return true;
}
if (!sender.isPlayer()) {
sender.sendMessage("Ingame only");
return true;
}
IrisJigsawPiece piece = IrisDataManager.loadAnyJigsawPiece(args[0]);
if (args.length < 1) {
sender.sendMessage(getArgsUsage());
return true;
}
if(piece != null)
{
File dest = piece.getLoadFile();
new JigsawEditor(sender.player(), piece, IrisDataManager.loadAnyObject(piece.getObject()), dest);
return true;
}
IrisJigsawPiece piece = IrisDataManager.loadAnyJigsawPiece(args[0]);
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
protected String getArgsUsage()
{
return "<name>";
}
return true;
}
@Override
protected String getArgsUsage() {
return "<name>";
}
}

View File

@@ -7,12 +7,8 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
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");
requiresPermission(Iris.perm);
setCategory("Jigsaw");
@@ -25,24 +21,20 @@ public class CommandIrisJigsawExit extends MortarCommand
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
public boolean handle(MortarSender sender, String[] args) {
if (!IrisSettings.get().isStudio()) {
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
if (!sender.isPlayer()) {
sender.sendMessage("Ingame only");
return true;
}
JigsawEditor editor = JigsawEditor.editors.get(sender.player());
if(editor == null)
{
if (editor == null) {
sender.sendMessage("You don't have any pieces open to close!");
return true;
}
@@ -52,8 +44,7 @@ public class CommandIrisJigsawExit extends MortarCommand
}
@Override
protected String getArgsUsage()
{
protected String getArgsUsage() {
return "";
}
}

View File

@@ -11,61 +11,54 @@ import com.volmit.iris.util.MortarSender;
import java.io.File;
public class CommandIrisJigsawNew extends MortarCommand
{
public CommandIrisJigsawNew()
{
super("create", "new", "+", "n");
requiresPermission(Iris.perm);
setCategory("Jigsaw");
setDescription("Create a new jigsaw piece");
}
public class CommandIrisJigsawNew extends MortarCommand {
public CommandIrisJigsawNew() {
super("create", "new", "+", "n");
requiresPermission(Iris.perm);
setCategory("Jigsaw");
setDescription("Create a new jigsaw piece");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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 Jigsaw, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("Ingame only");
return true;
}
@Override
public boolean handle(MortarSender sender, String[] args) {
if (!IrisSettings.get().isStudio()) {
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
return true;
}
if(args.length != 3)
{
sender.sendMessage(getArgsUsage());
return true;
}
if (!sender.isPlayer()) {
sender.sendMessage("Ingame only");
return true;
}
IrisObject object = IrisDataManager.loadAnyObject(args[2]);
if (args.length != 3) {
sender.sendMessage(getArgsUsage());
return true;
}
if (object == null) {
sender.sendMessage("Failed to find existing object: " + args[2]);
return true;
}
IrisObject object = IrisDataManager.loadAnyObject(args[2]);
File dest = Iris.instance.getDataFile("packs", args[1], "jigsaw-pieces", args[0] + ".json");
new JigsawEditor(sender.player(), null, object, dest);
sender.sendMessage("* Right Click blocks to make them connectors");
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;
}
if (object == null) {
sender.sendMessage("Failed to find existing object: " + args[2]);
return true;
}
@Override
protected String getArgsUsage()
{
return "<name> <project> <object>";
}
File dest = Iris.instance.getDataFile("packs", args[1], "jigsaw-pieces", args[0] + ".json");
new JigsawEditor(sender.player(), null, object, dest);
sender.sendMessage("* Right Click blocks to make them connectors");
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>";
}
}

View File

@@ -8,57 +8,50 @@ import com.volmit.iris.object.IrisPosition;
import com.volmit.iris.scaffold.jigsaw.PlannedStructure;
import com.volmit.iris.util.*;
public class CommandIrisJigsawPlace extends MortarCommand
{
public CommandIrisJigsawPlace()
{
super("place", "paste", "p");
requiresPermission(Iris.perm);
setCategory("Jigsaw");
setDescription("Place a jigsaw structure");
}
public class CommandIrisJigsawPlace extends MortarCommand {
public CommandIrisJigsawPlace() {
super("place", "paste", "p");
requiresPermission(Iris.perm);
setCategory("Jigsaw");
setDescription("Place a jigsaw structure");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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 Jigsaw, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("Ingame only");
return true;
}
@Override
public boolean handle(MortarSender sender, String[] args) {
if (!IrisSettings.get().isStudio()) {
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
return true;
}
if(args.length == 0){
sender.sendMessage("You have to specify a jigsaw structure!");
return true;
}
if (!sender.isPlayer()) {
sender.sendMessage("Ingame only");
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)
{
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());
}
IrisJigsawStructure str = IrisDataManager.loadAnyJigsawStructure(args[0]);
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
protected String getArgsUsage()
{
return "<name>";
}
return true;
}
@Override
protected String getArgsUsage() {
return "<name>";
}
}

View File

@@ -7,51 +7,44 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisJigsawSave extends MortarCommand
{
public CommandIrisJigsawSave()
{
super("save", "s");
requiresPermission(Iris.perm);
setCategory("Jigsaw");
setDescription("Save a currently open piece");
}
public class CommandIrisJigsawSave extends MortarCommand {
public CommandIrisJigsawSave() {
super("save", "s");
requiresPermission(Iris.perm);
setCategory("Jigsaw");
setDescription("Save a currently open piece");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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 Jigsaw, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("Ingame only");
return true;
}
@Override
public boolean handle(MortarSender sender, String[] args) {
if (!IrisSettings.get().isStudio()) {
sender.sendMessage("To use Iris Studio Jigsaw, please enable studio in Iris/settings.json");
return true;
}
JigsawEditor editor = JigsawEditor.editors.get(sender.player());
if (!sender.isPlayer()) {
sender.sendMessage("Ingame only");
return true;
}
if(editor == null)
{
sender.sendMessage("You don't have any pieces open to save!");
return true;
}
JigsawEditor editor = JigsawEditor.editors.get(sender.player());
editor.close();
return true;
}
if (editor == null) {
sender.sendMessage("You don't have any pieces open to save!");
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
editor.close();
return true;
}
@Override
protected String getArgsUsage() {
return "";
}
}

View File

@@ -7,71 +7,66 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisObject extends MortarCommand
{
@Command
private CommandIrisObjectWand wand;
public class CommandIrisObject extends MortarCommand {
@Command
private CommandIrisObjectWand wand;
@Command
private CommandIrisObjectDust dust;
@Command
private CommandIrisObjectDust dust;
@Command
private CommandIrisObjectXPY xpy;
@Command
private CommandIrisObjectXPY xpy;
@Command
private CommandIrisObjectXAY xay;
@Command
private CommandIrisObjectXAY xay;
@Command
private CommandIrisObjectShift shift;
@Command
private CommandIrisObjectShift shift;
@Command
private CommandIrisObjectExpand expand;
@Command
private CommandIrisObjectExpand expand;
@Command
private CommandIrisObjectContract contract;
@Command
private CommandIrisObjectContract contract;
@Command
private CommandIrisObjectP1 p1;
@Command
private CommandIrisObjectP1 p1;
@Command
private CommandIrisObjectP2 p2;
@Command
private CommandIrisObjectP2 p2;
@Command
private CommandIrisObjectSave save;
@Command
private CommandIrisObjectSave save;
@Command
private CommandIrisObjectPaste paste;
@Command
private CommandIrisObjectPaste paste;
public CommandIrisObject()
{
super("object", "iob", "o", "obj");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Object Commands");
}
public CommandIrisObject() {
super("object", "iob", "o", "obj");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Object Commands");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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;
}
sender.sendMessage("Iris Object Commands:");
printHelp(sender);
return true;
}
@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
protected String getArgsUsage()
{
return "[subcommand]";
}
sender.sendMessage("Iris Object Commands:");
printHelp(sender);
return true;
}
@Override
protected String getArgsUsage() {
return "[subcommand]";
}
}

View File

@@ -1,71 +1,64 @@
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 org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.WandManager;
public class CommandIrisObjectContract extends MortarCommand
{
public CommandIrisObjectContract()
{
super("-");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Contract a selection based on your looking direction");
}
public class CommandIrisObjectContract extends MortarCommand {
public CommandIrisObjectContract() {
super("-");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Contract a selection based on your looking direction");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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;
}
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))
{
sender.sendMessage("Ready your Wand.");
return true;
}
if (!sender.isPlayer()) {
sender.sendMessage("You don't have a wand");
return true;
}
int amt = args.length == 1 ? Integer.valueOf(args[0]) : 1;
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);
Player p = sender.player();
return true;
}
if (!WandManager.isWand(p)) {
sender.sendMessage("Ready your Wand.");
return true;
}
@Override
protected String getArgsUsage()
{
return "[amt]";
}
int amt = args.length == 1 ? Integer.valueOf(args[0]) : 1;
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;
}
@Override
protected String getArgsUsage() {
return "[amt]";
}
}

View File

@@ -8,45 +8,39 @@ import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import org.bukkit.Sound;
public class CommandIrisObjectDust extends MortarCommand
{
public CommandIrisObjectDust()
{
super("dust", "dst", "d");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Get a powder that reveals placed objects");
}
public class CommandIrisObjectDust extends MortarCommand {
public CommandIrisObjectDust() {
super("dust", "dst", "d");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Get a powder that reveals placed objects");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have an inventory");
return true;
}
@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;
}
sender.player().getInventory().addItem(WandManager.createDust());
sender.player().playSound(sender.player().getLocation(), Sound.AMBIENT_SOUL_SAND_VALLEY_ADDITIONS, 1f, 1.5f);
if (!sender.isPlayer()) {
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
protected String getArgsUsage()
{
return "[subcommand]";
}
return true;
}
@Override
protected String getArgsUsage() {
return "[subcommand]";
}
}

View File

@@ -1,71 +1,64 @@
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 org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.WandManager;
public class CommandIrisObjectExpand extends MortarCommand
{
public CommandIrisObjectExpand()
{
super("+");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Expand based on looking direction");
}
public class CommandIrisObjectExpand extends MortarCommand {
public CommandIrisObjectExpand() {
super("+");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Expand based on looking direction");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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;
}
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))
{
sender.sendMessage("Ready your Wand.");
return true;
}
if (!sender.isPlayer()) {
sender.sendMessage("You don't have a wand");
return true;
}
int amt = args.length == 1 ? Integer.valueOf(args[0]) : 1;
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);
Player p = sender.player();
return true;
}
if (!WandManager.isWand(p)) {
sender.sendMessage("Ready your Wand.");
return true;
}
@Override
protected String getArgsUsage()
{
return "[amt]";
}
int amt = args.length == 1 ? Integer.valueOf(args[0]) : 1;
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;
}
@Override
protected String getArgsUsage() {
return "[amt]";
}
}

View File

@@ -1,80 +1,71 @@
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.MortarCommand;
import com.volmit.iris.util.MortarSender;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import java.util.Set;
public class CommandIrisObjectP1 extends MortarCommand
{
public CommandIrisObjectP1()
{
super("p1");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Set point 1 to pos (or look)");
}
public class CommandIrisObjectP1 extends MortarCommand {
public CommandIrisObjectP1() {
super("p1");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Set point 1 to pos (or look)");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@Override
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))
{
sender.sendMessage("Ready your Wand.");
return true;
}
if (!sender.isPlayer()) {
sender.sendMessage("You don't have a wand");
return true;
}
ItemStack wand = p.getInventory().getItemInMainHand();
Player p = sender.player();
if(WandManager.isWand(wand))
{
Location[] g = WandManager.getCuboid(wand);
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();
}
if (!WandManager.isWand(p)) {
sender.sendMessage("Ready your Wand.");
return true;
}
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
protected String getArgsUsage()
{
return "[-l]";
}
if (args.length == 1 && args[0].equals("-l")) {
// TODO: WARNING HEIGHT
g[0] = p.getTargetBlock(null, 256).getLocation().clone();
}
p.setItemInHand(WandManager.createWand(g[0], g[1]));
}
return true;
}
@Override
protected String getArgsUsage() {
return "[-l]";
}
}

View File

@@ -1,80 +1,71 @@
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.MortarCommand;
import com.volmit.iris.util.MortarSender;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import java.util.Set;
public class CommandIrisObjectP2 extends MortarCommand
{
public CommandIrisObjectP2()
{
super("p2");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Set point 1 to pos (or look)");
}
public class CommandIrisObjectP2 extends MortarCommand {
public CommandIrisObjectP2() {
super("p2");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Set point 1 to pos (or look)");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@Override
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))
{
sender.sendMessage("Ready your Wand.");
return true;
}
if (!sender.isPlayer()) {
sender.sendMessage("You don't have a wand");
return true;
}
ItemStack wand = p.getInventory().getItemInMainHand();
Player p = sender.player();
if(WandManager.isWand(wand))
{
Location[] g = WandManager.getCuboid(wand);
g[1] = p.getLocation().getBlock().getLocation().clone().add(0, -1, 0);
if (!WandManager.isWand(p)) {
sender.sendMessage("Ready your Wand.");
return true;
}
if(args.length == 1 && args[0].equals("-l"))
{
// TODO: WARNING HEIGHT
g[1] = p.getTargetBlock((Set<Material>) null, 256).getLocation().clone();
}
ItemStack wand = p.getInventory().getItemInMainHand();
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
protected String getArgsUsage()
{
return "[-l]";
}
p.setItemInHand(WandManager.createWand(g[0], g[1]));
}
return true;
}
@Override
protected String getArgsUsage() {
return "[-l]";
}
}

View File

@@ -18,96 +18,85 @@ import org.bukkit.inventory.ItemStack;
import java.io.File;
import java.util.Set;
public class CommandIrisObjectPaste extends MortarCommand
{
public CommandIrisObjectPaste()
{
super("paste", "pasta", "place", "p");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Paste an object");
}
public class CommandIrisObjectPaste extends MortarCommand {
public CommandIrisObjectPaste() {
super("paste", "pasta", "place", "p");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Paste an object");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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;
}
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
@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(args.length == 0){
sender.sendMessage("Please specify the name of of the object want to paste");
return true;
}
if (!sender.isPlayer()) {
sender.sendMessage("You don't have a wand");
return true;
}
Player p = sender.player();
IrisObject obj = IrisDataManager.loadAnyObject(args[0]);
if (args.length == 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");
return true;
}
if (obj == null) {
File file = obj.getLoadFile();
boolean intoWand = false;
sender.sendMessage("Can't find " + args[0] + " in the " + ProjectManager.WORKSPACE_NAME + " folder");
return true;
}
for(String i : args)
{
if(i.equalsIgnoreCase("-edit"))
{
intoWand = true;
}
}
File file = obj.getLoadFile();
boolean intoWand = false;
if(file == null || !file.exists())
{
sender.sendMessage("Can't find " + args[0] + " in the " + ProjectManager.WORKSPACE_NAME + " folder");
return true;
}
for (String i : args) {
if (i.equalsIgnoreCase("-edit")) {
intoWand = 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]);
if(o == null)
{
sender.sendMessage("Error, cant find");
return true;
}
sender.sendMessage("Loaded " + "objects/" + args[0] + ".iob");
ItemStack wand = sender.player().getInventory().getItemInMainHand();
sender.player().getWorld().playSound(sender.player().getLocation(), Sound.BLOCK_ENCHANTMENT_TABLE_USE, 1f, 1.5f);
Location block = sender.player().getTargetBlock((Set<Material>) null, 256).getLocation().clone().add(0, 1, 0);
IrisObject o = IrisDataManager.loadAnyObject(args[0]);
if (o == null) {
sender.sendMessage("Error, cant find");
return true;
}
sender.sendMessage("Loaded " + "objects/" + args[0] + ".iob");
if(intoWand && WandManager.isWand(wand))
{
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");
}
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);
WandManager.pasteSchematic(o, block);
sender.sendMessage("Placed " + "objects/" + args[0] + ".iob");
if (intoWand && WandManager.isWand(wand)) {
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
protected String getArgsUsage()
{
return "[name] [-edit]";
}
return true;
}
@Override
protected String getArgsUsage() {
return "[name] [-edit]";
}
}

View File

@@ -1,100 +1,85 @@
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.IrisSettings;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.object.IrisObject;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
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
{
public CommandIrisObjectSave()
{
super("save", "s");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Save an object");
}
import java.io.File;
public class CommandIrisObjectSave extends MortarCommand {
public CommandIrisObjectSave() {
super("save", "s");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Save an object");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
}
if(args.length < 2)
{
sender.sendMessage("/iris o save <project> <object>");
sender.sendMessage("I.e. /iris o save overworld some-tree/tree1");
return true;
}
@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;
}
try
{
boolean overwrite = false;
if (!sender.isPlayer()) {
sender.sendMessage("You don't have a wand");
return true;
}
for(String i : args)
{
if(i.equals("-o"))
{
overwrite = true;
}
}
if (args.length < 2) {
sender.sendMessage("/iris o save <project> <object>");
sender.sendMessage("I.e. /iris o save overworld some-tree/tree1");
return true;
}
Player p = sender.player();
ItemStack wand = p.getInventory().getItemInMainHand();
IrisObject o = WandManager.createSchematic(wand);
File file = Iris.proj.getWorkspaceFile(args[0], "objects", args[1] + ".iob");
try {
boolean overwrite = false;
if(file.exists())
{
if(!overwrite)
{
sender.sendMessage("File Exists. Overwrite by adding -o");
return true;
}
}
for (String i : args) {
if (i.equals("-o")) {
overwrite = true;
}
}
o.write(file);
sender.sendMessage("Saved " + args[1]);
p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ENCHANTMENT_TABLE_USE, 1f, 1.5f);
}
Player p = sender.player();
ItemStack wand = p.getInventory().getItemInMainHand();
IrisObject o = WandManager.createSchematic(wand);
File file = Iris.proj.getWorkspaceFile(args[0], "objects", args[1] + ".iob");
catch(Throwable e)
{
sender.sendMessage("Failed to save " + args[1] + ". Are you holding your wand?");
if (file.exists()) {
if (!overwrite) {
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
protected String getArgsUsage()
{
return "[project] [name]";
}
return true;
}
@Override
protected String getArgsUsage() {
return "[project] [name]";
}
}

View File

@@ -1,72 +1,65 @@
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 org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.WandManager;
public class CommandIrisObjectShift extends MortarCommand
{
public CommandIrisObjectShift()
{
super(">");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Shift selection based on direction");
}
public class CommandIrisObjectShift extends MortarCommand {
public CommandIrisObjectShift() {
super(">");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Shift selection based on direction");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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;
}
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))
{
sender.sendMessage("Ready your Wand.");
return true;
}
if (!sender.isPlayer()) {
sender.sendMessage("You don't have a wand");
return true;
}
int amt = args.length == 1 ? Integer.valueOf(args[0]) : 1;
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);
Player p = sender.player();
return true;
}
if (!WandManager.isWand(p)) {
sender.sendMessage("Ready your Wand.");
return true;
}
@Override
protected String getArgsUsage()
{
return "[amt]";
}
int amt = args.length == 1 ? Integer.valueOf(args[0]) : 1;
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;
}
@Override
protected String getArgsUsage() {
return "[amt]";
}
}

View File

@@ -1,53 +1,47 @@
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.IrisSettings;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import org.bukkit.Sound;
public class CommandIrisObjectWand extends MortarCommand
{
public CommandIrisObjectWand()
{
super("wand", "w");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Get an Iris Wand for selecting objects");
}
public class CommandIrisObjectWand extends MortarCommand {
public CommandIrisObjectWand() {
super("wand", "w");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Get an Iris Wand for selecting objects");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have an inventory");
return true;
}
}
sender.player().getInventory().addItem(WandManager.createWand());
sender.player().playSound(sender.player().getLocation(), Sound.ITEM_ARMOR_EQUIP_NETHERITE, 1f, 1.5f);
@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;
}
return true;
}
if (!sender.isPlayer()) {
sender.sendMessage("You don't have an inventory");
return true;
}
@Override
protected String getArgsUsage()
{
return "[subcommand]";
}
sender.player().getInventory().addItem(WandManager.createWand());
sender.player().playSound(sender.player().getLocation(), Sound.ITEM_ARMOR_EQUIP_NETHERITE, 1f, 1.5f);
return true;
}
@Override
protected String getArgsUsage() {
return "[subcommand]";
}
}

View File

@@ -1,104 +1,95 @@
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.MortarCommand;
import com.volmit.iris.util.MortarSender;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
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.MortarCommand;
import com.volmit.iris.util.MortarSender;
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");
}
public class CommandIrisObjectXAY extends MortarCommand {
public CommandIrisObjectXAY() {
super("x&y");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Auto select up, down and out");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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;
}
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))
{
sender.sendMessage("Ready your Wand.");
return true;
}
if (!sender.isPlayer()) {
sender.sendMessage("You don't have a wand");
return true;
}
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
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);
Player p = sender.player();
while(!cursor.containsOnly(Material.AIR))
{
a1.add(new Vector(0, 1, 0));
a2.add(new Vector(0, 1, 0));
cursor = new Cuboid(a1, a2);
}
if (!WandManager.isWand(p)) {
sender.sendMessage("Ready your Wand.");
return true;
}
a1.add(new Vector(0, -1, 0));
a2.add(new Vector(0, -1, 0));
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
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))
{
a1x.add(new Vector(0, -1, 0));
a2x.add(new Vector(0, -1, 0));
cursorx = new Cuboid(a1x, a2x);
}
while (!cursor.containsOnly(Material.AIR)) {
a1.add(new Vector(0, 1, 0));
a2.add(new Vector(0, 1, 0));
cursor = new Cuboid(a1, a2);
}
a1x.add(new Vector(0, 1, 0));
a2x.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);
a1.add(new Vector(0, -1, 0));
a2.add(new Vector(0, -1, 0));
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
protected String getArgsUsage()
{
return "[subcommand]";
}
a1x.add(new Vector(0, 1, 0));
a2x.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;
}
@Override
protected String getArgsUsage() {
return "[subcommand]";
}
}

View File

@@ -1,92 +1,83 @@
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.MortarCommand;
import com.volmit.iris.util.MortarSender;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
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.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.Cuboid.CuboidDirection;
public class CommandIrisObjectXPY extends MortarCommand {
public CommandIrisObjectXPY() {
super("x+y");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Auto select up and out");
}
public class CommandIrisObjectXPY extends MortarCommand
{
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 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
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 (!sender.isPlayer()) {
sender.sendMessage("You don't have a wand");
return true;
}
Player p = sender.player();
Player p = sender.player();
if(!WandManager.isWand(p))
{
sender.sendMessage("Ready your Wand.");
return true;
}
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
b[0].add(new Vector(0, 1, 0));
b[1].add(new Vector(0, 1, 0));
Location a1 = b[0].clone();
Location a2 = b[1].clone();
Cuboid cursor = new Cuboid(a1, a2);
if (!WandManager.isWand(p)) {
sender.sendMessage("Ready your Wand.");
return true;
}
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
b[0].add(new Vector(0, 1, 0));
b[1].add(new Vector(0, 1, 0));
Location a1 = b[0].clone();
Location a2 = b[1].clone();
Cuboid cursor = new Cuboid(a1, a2);
while(!cursor.containsOnly(Material.AIR))
{
a1.add(new Vector(0, 1, 0));
a2.add(new Vector(0, 1, 0));
cursor = new Cuboid(a1, a2);
}
while (!cursor.containsOnly(Material.AIR)) {
a1.add(new Vector(0, 1, 0));
a2.add(new Vector(0, 1, 0));
cursor = new Cuboid(a1, a2);
}
a1.add(new Vector(0, -1, 0));
a2.add(new Vector(0, -1, 0));
b[0] = a1;
a2 = b[1];
cursor = new Cuboid(a1, a2);
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);
a1.add(new Vector(0, -1, 0));
a2.add(new Vector(0, -1, 0));
b[0] = a1;
a2 = b[1];
cursor = new Cuboid(a1, a2);
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;
}
return true;
}
@Override
protected String getArgsUsage()
{
return "[subcommand]";
}
@Override
protected String getArgsUsage() {
return "[subcommand]";
}
}

View File

@@ -7,88 +7,83 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudio extends MortarCommand
{
@Command
private CommandIrisStudioCreate create;
public class CommandIrisStudio extends MortarCommand {
@Command
private CommandIrisStudioCreate create;
@Command
private CommandIrisStudioOpen open;
@Command
private CommandIrisStudioOpen open;
@Command
private CommandIrisStudioSummon summon;
@Command
private CommandIrisStudioSummon summon;
@Command
private CommandIrisStudioClose close;
@Command
private CommandIrisStudioClose close;
@Command
private CommandIrisStudioPackage pkg;
@Command
private CommandIrisStudioPackage pkg;
@Command
private CommandIrisStudioUpdate update;
@Command
private CommandIrisStudioUpdate update;
@Command
private CommandIrisStudioGoto got0;
@Command
private CommandIrisStudioGoto got0;
@Command
private CommandIrisStudioEditBiome ebiome;
@Command
private CommandIrisStudioEditBiome ebiome;
@Command
private CommandIrisStudioHotload hotload;
@Command
private CommandIrisStudioHotload hotload;
@Command
private CommandIrisStudioExplorer exp;
@Command
private CommandIrisStudioExplorer exp;
@Command
private CommandIrisStudioBeautify beautify;
@Command
private CommandIrisStudioBeautify beautify;
@Command
private CommandIrisStudioProfile profile;
@Command
private CommandIrisStudioProfile profile;
@Command
private CommandIrisStudioExplorerGenerator generator;
@Command
private CommandIrisStudioExplorerGenerator generator;
@Command
private CommandIrisStudioLoot loot;
@Command
private CommandIrisStudioLoot loot;
@Command
private CommandIrisStudioTPStudio tps;
@Command
private CommandIrisStudioTPStudio tps;
@Command
private CommandIrisStudioConvert convert;
@Command
private CommandIrisStudioConvert convert;
@Command
private CommandIrisStudioMap map;
@Command
private CommandIrisStudioMap map;
public CommandIrisStudio()
{
super("studio", "std", "s");
requiresPermission(Iris.perm.studio);
setCategory("Studio");
}
public CommandIrisStudio() {
super("studio", "std", "s");
requiresPermission(Iris.perm.studio);
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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
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;
}
sender.sendMessage("Iris Studio Commands:");
printHelp(sender);
return true;
}
sender.sendMessage("Iris Studio Commands:");
printHelp(sender);
return true;
}
@Override
protected String getArgsUsage()
{
return "[subcommand]";
}
@Override
protected String getArgsUsage() {
return "[subcommand]";
}
}

View File

@@ -3,94 +3,73 @@ package com.volmit.iris.manager.command.studio;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
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.IOException;
public class CommandIrisStudioBeautify extends MortarCommand
{
public CommandIrisStudioBeautify()
{
super("beautify", "prettify");
requiresPermission(Iris.perm.studio);
setDescription("Prettify the project by cleaning up json.");
setCategory("Studio");
}
public class CommandIrisStudioBeautify extends MortarCommand {
public CommandIrisStudioBeautify() {
super("beautify", "prettify");
requiresPermission(Iris.perm.studio);
setDescription("Prettify the project by cleaning up json.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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
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;
}
File clean = null;
File clean = null;
if(args.length == 0)
{
if(!Iris.proj.isProjectOpen())
{
sender.sendMessage("No open project. Either use /iris std beautify <project> or have a project open.");
return true;
}
if (args.length == 0) {
if (!Iris.proj.isProjectOpen()) {
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
{
clean = Iris.instance.getDataFolder("packs", args[0]);
if (!clean.exists()) {
sender.sendMessage("Not a valid project.");
return true;
}
}
if(!clean.exists())
{
sender.sendMessage("Not a valid project.");
return true;
}
}
sender.sendMessage("Cleaned " + Form.f(clean(sender, clean)) + " JSON Files");
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) {
int c = 0;
if(clean.isDirectory())
{
for(File i : clean.listFiles())
{
c+=clean(s, i);
}
}
c++;
}
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!");
}
return c;
}
c++;
}
return c;
}
@Override
protected String getArgsUsage()
{
return "[project]";
}
@Override
protected String getArgsUsage() {
return "[project]";
}
}

View File

@@ -1,85 +1,69 @@
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.MortarCommand;
import com.volmit.iris.util.MortarSender;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioClose extends MortarCommand {
public CommandIrisStudioClose() {
super("close", "x");
requiresPermission(Iris.perm.studio);
setDescription("Close the existing dimension");
setCategory("Studio");
}
public class CommandIrisStudioClose extends MortarCommand
{
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 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
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 (!Iris.proj.isProjectOpen()) {
sender.sendMessage("No open projects.");
return true;
}
if(!Iris.proj.isProjectOpen())
{
sender.sendMessage("No open projects.");
return true;
}
if (sender.isPlayer()) {
World f = null;
if(sender.isPlayer())
{
World f = null;
for (World i : Bukkit.getWorlds()) {
if (i.getWorldFolder().getAbsolutePath().equals(Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getWorldFolder().getAbsolutePath())) {
continue;
}
for(World i : Bukkit.getWorlds())
{
if(i.getWorldFolder().getAbsolutePath().equals(Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getWorldFolder().getAbsolutePath()))
{
continue;
}
f = i;
break;
}
f = i;
break;
}
if (f == null) {
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)
{
for(Player i : Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getPlayers())
{
i.kickPlayer("Project Closing, No other world to put you in. Rejoin Please!");
}
}
Iris.proj.close();
sender.sendMessage("Projects Closed & Caches Cleared!");
return true;
}
else
{
for(Player i : Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getPlayers())
{
i.teleport(f.getSpawnLocation());
}
}
}
Iris.proj.close();
sender.sendMessage("Projects Closed & Caches Cleared!");
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
@Override
protected String getArgsUsage() {
return "";
}
}

View File

@@ -6,37 +6,32 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioConvert extends MortarCommand
{
public CommandIrisStudioConvert()
{
super("convert", "cvt");
requiresPermission(Iris.perm.studio);
setDescription("Convert .ewg schematics into Iris (.iob) files");
setCategory("Studio");
}
public class CommandIrisStudioConvert extends MortarCommand {
public CommandIrisStudioConvert() {
super("convert", "cvt");
requiresPermission(Iris.perm.studio);
setDescription("Convert .ewg schematics into Iris (.iob) files");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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
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;
}
Iris.convert.check(sender);
return true;
}
Iris.convert.check(sender);
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
@Override
protected String getArgsUsage() {
return "";
}
}

View File

@@ -7,63 +7,51 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioCreate extends MortarCommand
{
public CommandIrisStudioCreate()
{
super("create", "new", "+");
requiresPermission(Iris.perm.studio);
setDescription("Create a new project & open it.");
setCategory("Studio");
}
public class CommandIrisStudioCreate extends MortarCommand {
public CommandIrisStudioCreate() {
super("create", "new", "+");
requiresPermission(Iris.perm.studio);
setDescription("Create a new project & open it.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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
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(args.length < 1)
{
sender.sendMessage("Please use a lowercase name with hyphens (-) for spaces.");
sender.sendMessage("I.e. /iris std new " + C.BOLD + "aether");
return true;
}
if (args.length < 1) {
sender.sendMessage("Please use a lowercase name with hyphens (-) for spaces.");
sender.sendMessage("I.e. /iris std new " + C.BOLD + "aether");
return true;
}
String template = null;
String template = null;
for(String i : args)
{
if(i.startsWith("template="))
{
template = i.split("\\Q=\\E")[1];
}
}
for (String i : args) {
if (i.startsWith("template=")) {
template = i.split("\\Q=\\E")[1];
}
}
if(template != null)
{
Iris.proj.create(sender, args[0], template);
}
if (template != null) {
Iris.proj.create(sender, args[0], template);
} else {
Iris.proj.create(sender, args[0]);
}
else
{
Iris.proj.create(sender, args[0]);
}
return true;
}
return true;
}
@Override
protected String getArgsUsage()
{
return "[dimension] [template=<project>]";
}
@Override
protected String getArgsUsage() {
return "[dimension] [template=<project>]";
}
}

View File

@@ -10,65 +10,51 @@ import org.bukkit.entity.Player;
import java.awt.*;
import java.io.File;
public class CommandIrisStudioEditBiome extends MortarCommand
{
public CommandIrisStudioEditBiome()
{
super("editbiome", "ebiome", "eb");
setDescription("Open this biome file in vscode");
requiresPermission(Iris.perm.studio);
setCategory("Studio");
}
public class CommandIrisStudioEditBiome extends MortarCommand {
public CommandIrisStudioEditBiome() {
super("editbiome", "ebiome", "eb");
setDescription("Open this biome file in vscode");
requiresPermission(Iris.perm.studio);
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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
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(!Iris.proj.isProjectOpen())
{
sender.sendMessage("There is not a studio currently loaded.");
return true;
}
if (!Iris.proj.isProjectOpen()) {
sender.sendMessage("There is not a studio currently loaded.");
return true;
}
if(sender.isPlayer())
{
Player p = sender.player();
if (sender.isPlayer()) {
Player p = sender.player();
try
{
File f = Iris.proj.getActiveProject().getActiveProvider().getBiome(p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ()).getLoadFile();
Desktop.getDesktop().open(f);
}
try {
File f = Iris.proj.getActiveProject().getActiveProvider().getBiome(p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ()).getLoadFile();
Desktop.getDesktop().open(f);
} catch (Throwable e) {
sender.sendMessage("Cant find the file. Are you in an Iris Studio world?");
}
catch(Throwable e)
{
sender.sendMessage("Cant find the file. Are you in an Iris Studio world?");
}
return true;
} else {
sender.sendMessage("Players only.");
}
return true;
}
return true;
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "[width]";
}
@Override
protected String getArgsUsage() {
return "[width]";
}
}

View File

@@ -8,55 +8,45 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioExplorer extends MortarCommand
{
@Command
private CommandIrisStudioExplorerGenerator generator;
public class CommandIrisStudioExplorer extends MortarCommand {
@Command
private CommandIrisStudioExplorerGenerator generator;
public CommandIrisStudioExplorer()
{
super("noise", "nmap");
setDescription("Explore different noise generators visually");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
public CommandIrisStudioExplorer() {
super("noise", "nmap");
setDescription("Explore different noise generators visually");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(args.length != 0)
{
printHelp(sender);
}
@Override
public boolean handle(MortarSender sender, String[] args) {
if (args.length != 0) {
printHelp(sender);
} else {
if (!IrisSettings.get().isStudio()) {
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
else
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
if (!IrisSettings.get().isUseServerLaunchedGuis()) {
sender.sendMessage("To use Iris Guis, please enable serverLaunchedGuis in Iris/settings.json");
return true;
}
if(!IrisSettings.get().isUseServerLaunchedGuis())
{
sender.sendMessage("To use Iris Guis, please enable serverLaunchedGuis in Iris/settings.json");
return true;
}
NoiseExplorer.launch();
sender.sendMessage("Opening Noise Explorer!");
}
return true;
}
NoiseExplorer.launch();
sender.sendMessage("Opening Noise Explorer!");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
@Override
protected String getArgsUsage() {
return "";
}
}

View File

@@ -10,75 +10,62 @@ import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.RNG;
public class CommandIrisStudioExplorerGenerator extends MortarCommand
{
public CommandIrisStudioExplorerGenerator()
{
super("generator", "gen", "g");
setDescription("Preview created noise noises generators");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
public class CommandIrisStudioExplorerGenerator extends MortarCommand {
public CommandIrisStudioExplorerGenerator() {
super("generator", "gen", "g");
setDescription("Preview created noise noises generators");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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
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(!IrisSettings.get().isUseServerLaunchedGuis())
{
sender.sendMessage("To use Iris Guis, please enable serverLaunchedGuis in Iris/settings.json");
return true;
}
if (!IrisSettings.get().isUseServerLaunchedGuis()) {
sender.sendMessage("To use Iris Guis, please enable serverLaunchedGuis in Iris/settings.json");
return true;
}
if (args.length == 0)
{
sender.sendMessage("Specify a generator to preview");
return true;
}
if (args.length == 0) {
sender.sendMessage("Specify a generator to preview");
return true;
}
IrisGenerator generator;
long seed = 12345;
IrisGenerator generator;
long seed = 12345;
if (Iris.proj.isProjectOpen())
{
generator = Iris.proj.getActiveProject().getActiveProvider().getData().getGeneratorLoader().load(args[0]);
seed = Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getSeed();
}
else
{
generator = IrisDataManager.loadAnyGenerator(args[0]);
}
if (Iris.proj.isProjectOpen()) {
generator = Iris.proj.getActiveProject().getActiveProvider().getData().getGeneratorLoader().load(args[0]);
seed = Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getSeed();
} else {
generator = IrisDataManager.loadAnyGenerator(args[0]);
}
if (generator != null)
{
long finalSeed = seed;
NoiseExplorer.launch((x, z) ->
generator.getHeight(x, z, new RNG(finalSeed).nextParallelRNG(3245).lmax()), "Gen: " + generator.getLoadKey());
if (generator != null) {
long finalSeed = seed;
NoiseExplorer.launch((x, z) ->
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() + ")");
return true;
}
else
{
sender.sendMessage("Invalid Generator");
}
sender.sendMessage("Opening Noise Explorer for gen " + generator.getLoadKey() + " (" + generator.getLoader().getDataFolder().getName() + ")");
return true;
} else {
sender.sendMessage("Invalid Generator");
}
return true;
}
return true;
}
@Override
protected String getArgsUsage()
{
return "[generator]";
}
@Override
protected String getArgsUsage() {
return "[generator]";
}
}

View File

@@ -16,93 +16,73 @@ import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class CommandIrisStudioGoto extends MortarCommand
{
public CommandIrisStudioGoto()
{
super("goto", "find", "g", "tp");
setDescription("Find any region or biome");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
public class CommandIrisStudioGoto extends MortarCommand {
public CommandIrisStudioGoto() {
super("goto", "find", "g", "tp");
setDescription("Find any region or biome");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
if(args.length == 0 && sender.isPlayer() && IrisWorlds.isIrisWorld(sender.player().getWorld()))
{
IrisDataManager data = IrisWorlds.access(sender.player().getWorld()).getData();
if (data == null){
sender.sendMessage("Issue when loading tab completions. No data found (?)");
} else {
list.add(data.getBiomeLoader().getPossibleKeys());
list.add(data.getRegionLoader().getPossibleKeys());
//TODO: Remove comment here -> list.add(data.getObjectLoader().getPossibleKeys());
}
}
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
if (args.length == 0 && sender.isPlayer() && IrisWorlds.isIrisWorld(sender.player().getWorld())) {
IrisDataManager data = IrisWorlds.access(sender.player().getWorld()).getData();
if (data == null) {
sender.sendMessage("Issue when loading tab completions. No data found (?)");
} else {
list.add(data.getBiomeLoader().getPossibleKeys());
list.add(data.getRegionLoader().getPossibleKeys());
//TODO: Remove comment here -> list.add(data.getObjectLoader().getPossibleKeys());
}
}
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
try
{
if(args.length < 1)
{
sender.sendMessage("/iris std goto " + getArgsUsage());
return true;
}
@Override
public boolean handle(MortarSender sender, String[] args) {
try {
if (args.length < 1) {
sender.sendMessage("/iris std goto " + getArgsUsage());
return true;
}
if(sender.isPlayer())
{
Player p = sender.player();
World world = p.getWorld();
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;
}
if (!IrisWorlds.isIrisWorld(world)) {
sender.sendMessage("You must be in an iris world.");
return true;
}
IrisAccess g = IrisWorlds.access(world);
IrisBiome b = IrisDataManager.loadAnyBiome(args[0]);
IrisRegion r = IrisDataManager.loadAnyRegion(args[0]);
IrisObject o = IrisDataManager.loadAnyObject(args[0]);
IrisAccess g = IrisWorlds.access(world);
IrisBiome b = IrisDataManager.loadAnyBiome(args[0]);
IrisRegion r = IrisDataManager.loadAnyRegion(args[0]);
IrisObject o = IrisDataManager.loadAnyObject(args[0]);
if(b != null)
{
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"));
if (b != null) {
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"));
if(l == null)
{
sender.sendMessage("Couldn't find " + b.getName() + ".");
}
if (l == null) {
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
{
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"));
if(l == null)
{
sender.sendMessage("Couldn't find " + r.getName() + ".");
}
else
{
sender.sendMessage("Found " + r.getName() + "!");
J.s(() -> sender.player().teleport(l));
}
});
}
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
else if (o != null)
{
@@ -126,50 +106,42 @@ public class CommandIrisStudioGoto extends MortarCommand
});
}*/
else
{
sender.sendMessage(args[0] + " is not a biome or region in this dimension. (Biome teleportation works best!");
}
else {
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
{
sender.sendMessage("Players only.");
}
}
return true;
}
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!");
}
@Override
protected String getArgsUsage() {
return "[biome/region]";
}
return true;
}
private List<File> listf(String directoryName) {
File directory = new File(directoryName);
List<File> files = new ArrayList<>();
@Override
protected String getArgsUsage()
{
return "[biome/region]";
}
private List<File> listf(String directoryName) {
File directory = new File(directoryName);
List<File> files = new ArrayList<>();
// Get all files from a directory.
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;
}
// Get all files from a directory.
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;
}
}

View File

@@ -9,56 +9,47 @@ import com.volmit.iris.util.MortarSender;
import org.bukkit.World;
import org.bukkit.entity.Player;
public class CommandIrisStudioHotload extends MortarCommand
{
public CommandIrisStudioHotload()
{
super("hotload", "hot", "h", "reload");
setDescription("Force a hotload");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
public class CommandIrisStudioHotload extends MortarCommand {
public CommandIrisStudioHotload() {
super("hotload", "hot", "h", "reload");
setDescription("Force a hotload");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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;
}
}
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;
}
@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;
}
IrisWorlds.access(world).hotload();
sender.sendMessage("Hotloaded!");
return true;
}
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;
}
else
{
sender.sendMessage("Players only.");
}
IrisWorlds.access(world).hotload();
sender.sendMessage("Hotloaded!");
return true;
} else {
sender.sendMessage("Players only.");
}
return true;
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
@Override
protected String getArgsUsage() {
return "";
}
}

View File

@@ -2,7 +2,6 @@ package com.volmit.iris.manager.command.studio;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.InventorySlotType;
import com.volmit.iris.object.IrisLootTable;
import com.volmit.iris.scaffold.IrisWorlds;
@@ -13,113 +12,93 @@ import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
public class CommandIrisStudioLoot extends MortarCommand
{
public CommandIrisStudioLoot()
{
super("loot");
setDescription("Show loot if a chest were right here");
requiresPermission(Iris.perm.studio);
setCategory("Loot");
}
public class CommandIrisStudioLoot extends MortarCommand {
public CommandIrisStudioLoot() {
super("loot");
setDescription("Show loot if a chest were right here");
requiresPermission(Iris.perm.studio);
setCategory("Loot");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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
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())
{
Player p = sender.player();
IrisAccess prov = IrisWorlds.access(sender.player().getWorld());
if (sender.isPlayer()) {
Player p = sender.player();
IrisAccess prov = IrisWorlds.access(sender.player().getWorld());
if (!Iris.proj.isProjectOpen())
{
sender.sendMessage("You can only use /iris studio loot in a studio world of iris.");
return true;
}
if (!Iris.proj.isProjectOpen()) {
sender.sendMessage("You can only use /iris studio loot in a studio world of iris.");
return true;
}
KList<IrisLootTable> tables = prov.getCompound().getEngine(p.getLocation().getBlockY()).getLootTables(RNG.r, p.getLocation().getBlock());
Inventory inv = Bukkit.createInventory(null, 27 * 2);
KList<IrisLootTable> tables = prov.getCompound().getEngine(p.getLocation().getBlockY()).getLootTables(RNG.r, p.getLocation().getBlock());
Inventory inv = Bukkit.createInventory(null, 27 * 2);
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);
}
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);
} catch (Throwable e) {
sender.sendMessage("You can only use /iris loot in a studio world of iris.");
return true;
}
catch(Throwable e)
{
sender.sendMessage("You can only use /iris loot in a studio world of iris.");
return true;
}
p.openInventory(inv);
p.openInventory(inv);
for (IrisLootTable i : tables) {
sender.sendMessage("- " + i.getName());
}
for(IrisLootTable i : tables)
{
sender.sendMessage("- " + i.getName());
}
boolean ffast = false;
boolean fadd = false;
boolean ffast = false;
boolean fadd = false;
for (String i : args) {
if (i.equals("--fast")) {
ffast = true;
}
for(String i : args)
{
if(i.equals("--fast"))
{
ffast = true;
}
if (i.equals("--add")) {
fadd = true;
}
}
if(i.equals("--add"))
{
fadd = true;
}
}
boolean fast = ffast;
boolean add = fadd;
O<Integer> ta = new O<Integer>();
ta.set(-1);
boolean fast = ffast;
boolean add = fadd;
O<Integer> ta = new O<Integer>();
ta.set(-1);
ta.set(Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, () ->
{
if (!p.getOpenInventory().getType().equals(InventoryType.CHEST)) {
Bukkit.getScheduler().cancelTask(ta.get());
return;
}
ta.set(Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, () ->
{
if(!p.getOpenInventory().getType().equals(InventoryType.CHEST))
{
Bukkit.getScheduler().cancelTask(ta.get());
return;
}
if (!add) {
inv.clear();
}
if(!add)
{
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);
}, 0, fast ? 5 : 35));
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));
return true;
} else {
sender.sendMessage("Players only.");
}
return true;
}
return true;
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "[width]";
}
@Override
protected String getArgsUsage() {
return "[width]";
}
}

View File

@@ -9,57 +9,47 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioMap extends MortarCommand
{
public CommandIrisStudioMap()
{
super("map", "render");
setDescription("Render a map (gui outside of mc)");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
public class CommandIrisStudioMap extends MortarCommand {
public CommandIrisStudioMap() {
super("map", "render");
setDescription("Render a map (gui outside of mc)");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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
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(!IrisSettings.get().isUseServerLaunchedGuis())
{
sender.sendMessage("To use Iris Guis, please enable serverLaunchedGuis in Iris/settings.json");
return true;
}
if (!IrisSettings.get().isUseServerLaunchedGuis()) {
sender.sendMessage("To use Iris Guis, please enable serverLaunchedGuis in Iris/settings.json");
return true;
}
try
{
IrisAccess g = Iris.proj.getActiveProject().getActiveProvider();
IrisVision.launch(g, 0);
sender.sendMessage("Opening Map!");
}
try {
IrisAccess g = Iris.proj.getActiveProject().getActiveProvider();
IrisVision.launch(g, 0);
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)
{
IrisAccess g = IrisWorlds.access(sender.player().getWorld());
IrisVision.launch(g, 0);
sender.sendMessage("Opening Map!");
}
return true;
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
@Override
protected String getArgsUsage() {
return "";
}
}

View File

@@ -6,43 +6,37 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioOpen extends MortarCommand
{
public CommandIrisStudioOpen()
{
super("open", "o");
requiresPermission(Iris.perm.studio);
setDescription("Create a new temporary world to design a dimension.");
setCategory("Studio");
}
public class CommandIrisStudioOpen extends MortarCommand {
public CommandIrisStudioOpen() {
super("open", "o");
requiresPermission(Iris.perm.studio);
setDescription("Create a new temporary world to design a dimension.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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;
}
if(args.length < 1)
{
sender.sendMessage("/iris std open <DIMENSION> (file name without .json)");
return true;
}
@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;
}
Iris.proj.open(sender, args[0]);
return true;
}
if (args.length < 1) {
sender.sendMessage("/iris std open <DIMENSION> (file name without .json)");
return true;
}
@Override
protected String getArgsUsage()
{
return "[dimension]";
}
Iris.proj.open(sender, args[0]);
return true;
}
@Override
protected String getArgsUsage() {
return "[dimension]";
}
}

View File

@@ -7,59 +7,51 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioPackage extends MortarCommand
{
public CommandIrisStudioPackage()
{
super("package", "pkg");
requiresPermission(Iris.perm.studio);
setDescription("Package your dimension into a compressed format.");
setCategory("Studio");
}
public class CommandIrisStudioPackage extends MortarCommand {
public CommandIrisStudioPackage() {
super("package", "pkg");
requiresPermission(Iris.perm.studio);
setDescription("Package your dimension into a compressed format.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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;
}
if(args.length == 0)
{
sender.sendMessage("/iris std package <DIMENSION> [-o] [-m]");
return true;
}
@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;
}
J.a(() ->
{
boolean o = false;
boolean m = true;
if (args.length == 0) {
sender.sendMessage("/iris std package <DIMENSION> [-o] [-m]");
return true;
}
for(String i : args)
{
if(i.equalsIgnoreCase("-o"))
{
o = true;
}
}
J.a(() ->
{
boolean o = false;
boolean m = true;
String dim = args[0];
Iris.proj.compilePackage(sender, dim, o, m);
});
for (String i : args) {
if (i.equalsIgnoreCase("-o")) {
o = true;
}
}
return true;
}
String dim = args[0];
Iris.proj.compilePackage(sender, dim, o, m);
});
@Override
protected String getArgsUsage()
{
return "[dimension] [-o] [-m]";
}
return true;
}
@Override
protected String getArgsUsage() {
return "[dimension] [-o] [-m]";
}
}

View File

@@ -11,266 +11,235 @@ import com.volmit.iris.util.*;
import java.io.File;
import java.io.IOException;
public class CommandIrisStudioProfile extends MortarCommand
{
public CommandIrisStudioProfile()
{
super("profile", "blame");
requiresPermission(Iris.perm.studio);
setDescription("Profile the specified project");
setCategory("Studio");
}
public class CommandIrisStudioProfile extends MortarCommand {
public CommandIrisStudioProfile() {
super("profile", "blame");
requiresPermission(Iris.perm.studio);
setDescription("Profile the specified project");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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
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;
}
J.a(() -> {
File f = null;
File report = Iris.instance.getDataFile("profile.txt");
KList<String> v = new KList<>();
if(args.length == 0)
{
if(!Iris.proj.isProjectOpen())
{
sender.sendMessage("No open project. Either use /iris std beautify <project> or have a project open.");
return;
}
J.a(() -> {
File f = null;
File report = Iris.instance.getDataFile("profile.txt");
KList<String> v = new KList<>();
if (args.length == 0) {
if (!Iris.proj.isProjectOpen()) {
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
{
f = Iris.instance.getDataFolder("packs", args[0]);
if (!f.exists()) {
sender.sendMessage("Not a valid project.");
return;
}
}
if(!f.exists())
{
sender.sendMessage("Not a valid project.");
return;
}
}
IrisProject p = new IrisProject(f);
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<>();
IrisProject p = new IrisProject(f);
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...");
sender.sendMessage("Calculating Performance Metrics for Noise Generators...");
for(NoiseStyle i : NoiseStyle.values())
{
CNG c = i.create(new RNG(i.hashCode()));
for (NoiseStyle i : NoiseStyle.values()) {
CNG c = i.create(new RNG(i.hashCode()));
for(int j = 0; j < 30000; j++)
{
c.noise(j, j + 1000, j * j);
c.noise(j, -j);
}
for (int j = 0; j < 30000; j++) {
c.noise(j, j + 1000, j * j);
c.noise(j, -j);
}
PrecisionStopwatch px = PrecisionStopwatch.start();
PrecisionStopwatch px = PrecisionStopwatch.start();
for(int j = 0; j < 1000000; j++)
{
c.noise(j, j + 1000, j * j);
c.noise(j, -j);
}
for (int j = 0; j < 1000000; j++) {
c.noise(j, j + 1000, 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())
{
v.add(i.name() +": "+ styleTimings.get(i));
}
for (NoiseStyle i : styleTimings.sortKNumber()) {
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())
{
IrisInterpolator in = new IrisInterpolator();
in.setFunction(i);
in.setHorizontalScale(8);
for (InterpolationMethod i : InterpolationMethod.values()) {
IrisInterpolator in = new IrisInterpolator();
in.setFunction(i);
in.setHorizontalScale(8);
NoiseProvider np = new NoiseProvider() {
@Override
public double noise(double x, double z) {
return Math.random();
}
};
NoiseProvider np = new NoiseProvider() {
@Override
public double noise(double x, double z) {
return Math.random();
}
};
for(int j = 0; j < 3000; j++)
{
in.interpolate(j, -j, np);
}
for (int j = 0; j < 3000; j++) {
in.interpolate(j, -j, np);
}
PrecisionStopwatch px = PrecisionStopwatch.start();
PrecisionStopwatch px = PrecisionStopwatch.start();
for(int j = 0; j < 100000; j++)
{
in.interpolate(j + 10000, -j - 100000, np);
}
for (int j = 0; j < 100000; j++) {
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())
{
v.add(i.name() +": "+ interpolatorTimings.get(i));
}
for (InterpolationMethod i : interpolatorTimings.sortKNumber()) {
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())
{
KList<String> vv = new KList<>();
IrisGenerator g = data.getGeneratorLoader().load(i);
KList<IrisNoiseGenerator> composites = g.getAllComposites();
double score = 0;
int m = 0;
for(IrisNoiseGenerator j : composites)
{
m++;
score += styleTimings.get(j.getStyle().getStyle());
vv.add("Composite Noise Style " + m + " " + j.getStyle().getStyle().name() + ": " + styleTimings.get(j.getStyle().getStyle()));
}
for (String i : data.getGeneratorLoader().getPossibleKeys()) {
KList<String> vv = new KList<>();
IrisGenerator g = data.getGeneratorLoader().load(i);
KList<IrisNoiseGenerator> composites = g.getAllComposites();
double score = 0;
int m = 0;
for (IrisNoiseGenerator j : composites) {
m++;
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());
vv.add("Interpolator " + g.getInterpolator().getFunction().name() + ": " + interpolatorTimings.get(g.getInterpolator().getFunction()));
generatorTimings.put(i, score);
btx.put(i, vv);
}
score += interpolatorTimings.get(g.getInterpolator().getFunction());
vv.add("Interpolator " + g.getInterpolator().getFunction().name() + ": " + interpolatorTimings.get(g.getInterpolator().getFunction()));
generatorTimings.put(i, score);
btx.put(i, vv);
}
v.add("Project Generator Performance Impacts: ");
v.add("Project Generator Performance Impacts: ");
for(String i : generatorTimings.sortKNumber())
{
v.add(i + ": " + generatorTimings.get(i));
for (String i : generatorTimings.sortKNumber()) {
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())
{
KList<String> vv = new KList<>();
IrisBiome b = data.getBiomeLoader().load(i);
double score = 0;
for (String i : data.getBiomeLoader().getPossibleKeys()) {
KList<String> vv = new KList<>();
IrisBiome b = data.getBiomeLoader().load(i);
double score = 0;
int m = 0;
for(IrisBiomePaletteLayer j : b.getLayers())
{
m++;
score += styleTimings.get(j.getStyle().getStyle());
vv.add("Palette Layer " + m + ": " + styleTimings.get(j.getStyle().getStyle()));
}
int m = 0;
for (IrisBiomePaletteLayer j : b.getLayers()) {
m++;
score += styleTimings.get(j.getStyle().getStyle());
vv.add("Palette Layer " + m + ": " + styleTimings.get(j.getStyle().getStyle()));
}
score += styleTimings.get(b.getBiomeStyle().getStyle());
vv.add("Biome Style: " + styleTimings.get(b.getBiomeStyle().getStyle()));
score += styleTimings.get(b.getChildStyle().getStyle());
vv.add("Child Style: " + styleTimings.get(b.getChildStyle().getStyle()));
biomeTimings.put(i, score);
bt.put(i, vv);
}
score += styleTimings.get(b.getBiomeStyle().getStyle());
vv.add("Biome Style: " + styleTimings.get(b.getBiomeStyle().getStyle()));
score += styleTimings.get(b.getChildStyle().getStyle());
vv.add("Child Style: " + styleTimings.get(b.getChildStyle().getStyle()));
biomeTimings.put(i, score);
bt.put(i, vv);
}
v.add("Project Biome Performance Impacts: ");
v.add("Project Biome Performance Impacts: ");
for(String i : biomeTimings.sortKNumber())
{
v.add(i + ": " + biomeTimings.get(i));
for (String i : biomeTimings.sortKNumber()) {
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())
{
IrisRegion b = data.getRegionLoader().load(i);
double score = 0;
for (String i : data.getRegionLoader().getPossibleKeys()) {
IrisRegion b = data.getRegionLoader().load(i);
double score = 0;
score += styleTimings.get(b.getLakeStyle().getStyle());
score += styleTimings.get(b.getRiverStyle().getStyle());
regionTimings.put(i, score);
}
score += styleTimings.get(b.getLakeStyle().getStyle());
score += styleTimings.get(b.getRiverStyle().getStyle());
regionTimings.put(i, score);
}
v.add("Project Region Performance Impacts: ");
v.add("Project Region Performance Impacts: ");
for(String i : regionTimings.sortKNumber())
{
v.add(i + ": " + regionTimings.get(i));
}
for (String i : regionTimings.sortKNumber()) {
v.add(i + ": " + regionTimings.get(i));
}
v.add("");
v.add("");
double m = 0;
for(double i : biomeTimings.v())
{
m+=i;
}
m/=biomeTimings.size();
double mm = 0;
for(double i : generatorTimings.v())
{
mm+=i;
}
mm/=generatorTimings.size();
m+=mm;
double mmm = 0;
for(double i : regionTimings.v())
{
mmm+=i;
}
mmm/=regionTimings.size();
m+=mmm;
double m = 0;
for (double i : biomeTimings.v()) {
m += i;
}
m /= biomeTimings.size();
double mm = 0;
for (double i : generatorTimings.v()) {
mm += i;
}
mm /= generatorTimings.size();
m += mm;
double mmm = 0;
for (double i : regionTimings.v()) {
mmm += i;
}
mmm /= regionTimings.size();
m += mmm;
v.add("Average Score: " + m);
sender.sendMessage("Score: " + Form.duration(m, 0));
v.add("Average Score: " + m);
sender.sendMessage("Score: " + Form.duration(m, 0));
try {
IO.writeAll(report, v.toString("\n"));
} catch (IOException e) {
e.printStackTrace();
}
try {
IO.writeAll(report, v.toString("\n"));
} catch (IOException e) {
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]";
}
}

View File

@@ -13,75 +13,59 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
public class CommandIrisStudioSummon extends MortarCommand
{
public CommandIrisStudioSummon()
{
super("summon", "spawnmob");
setDescription("Spawn an Iris entity");
requiresPermission(Iris.perm.studio);
setCategory("Summon");
}
public class CommandIrisStudioSummon extends MortarCommand {
public CommandIrisStudioSummon() {
super("summon", "spawnmob");
setDescription("Spawn an Iris entity");
requiresPermission(Iris.perm.studio);
setCategory("Summon");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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
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())
{
Player p = sender.player();
World world = p.getWorld();
if(!IrisWorlds.isIrisWorld(world))
{
sender.sendMessage("You must be in an iris world.");
return true;
}
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);
if(args.length == 0)
{
for(String i : g.getData().getEntityLoader().getPossibleKeys())
{
sender.sendMessage("- " + i);
}
}
IrisAccess g = IrisWorlds.access(world);
if (args.length == 0) {
for (String i : g.getData().getEntityLoader().getPossibleKeys()) {
sender.sendMessage("- " + i);
}
} else {
IrisEntity e = g.getData().getEntityLoader().load(args[0]);
else
{
IrisEntity e = g.getData().getEntityLoader().load(args[0]);
if (e == null) {
sender.sendMessage("Couldnt find entity " + args[0] + ". Use '/iris std summon' to see a list of iris entities.");
return true;
}
if(e == null)
{
sender.sendMessage("Couldnt find entity " + args[0] + ". Use '/iris std summon' to see a list of iris entities.");
return true;
}
Location vl = sender.player().getLocation().clone().add(0, 3, 0);
e.spawn((Engine) g.getEngineAccess(vl.getBlockY()), vl);
}
} else {
sender.sendMessage("Players only.");
}
Location vl = sender.player().getLocation().clone().add(0, 3, 0);
e.spawn((Engine) g.getEngineAccess(vl.getBlockY()), vl);
}
}
return true;
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
@Override
protected String getArgsUsage() {
return "";
}
}

View File

@@ -7,59 +7,49 @@ import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import org.bukkit.GameMode;
public class CommandIrisStudioTPStudio extends MortarCommand
{
public CommandIrisStudioTPStudio()
{
super("tps", "stp", "tpstudio");
requiresPermission(Iris.perm.studio);
setDescription("Go to the spawn of the currently open studio world.");
setCategory("Studio");
}
public class CommandIrisStudioTPStudio extends MortarCommand {
public CommandIrisStudioTPStudio() {
super("tps", "stp", "tpstudio");
requiresPermission(Iris.perm.studio);
setDescription("Go to the spawn of the currently open studio world.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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
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()){
sender.sendMessage("Cannot be ran by console.");
return true;
}
if (!sender.isPlayer()) {
sender.sendMessage("Cannot be ran by console.");
return true;
}
if(!Iris.proj.isProjectOpen())
{
sender.sendMessage("There is not a studio currently loaded.");
return true;
}
if (!Iris.proj.isProjectOpen()) {
sender.sendMessage("There is not a studio currently loaded.");
return true;
}
try
{
sender.sendMessage("Teleporting you to the active studio world.");
sender.player().teleport(Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getSpawnLocation());
sender.player().setGameMode(GameMode.SPECTATOR);
}
try {
sender.sendMessage("Teleporting you to the active studio world.");
sender.player().teleport(Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getSpawnLocation());
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)
{
sender.sendMessage("Failed to teleport to the studio world. Try re-opening the project.");
}
return true;
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
@Override
protected String getArgsUsage() {
return "";
}
}

View File

@@ -7,52 +7,42 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioUpdate extends MortarCommand
{
public CommandIrisStudioUpdate()
{
super("update", "upd", "u");
requiresPermission(Iris.perm.studio);
setDescription("Update your dimension project.");
setCategory("Studio");
}
public class CommandIrisStudioUpdate extends MortarCommand {
public CommandIrisStudioUpdate() {
super("update", "upd", "u");
requiresPermission(Iris.perm.studio);
setDescription("Update your dimension project.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@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
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(args.length == 0)
{
sender.sendMessage("/iris std package <DIMENSION>");
return true;
}
if (args.length == 0) {
sender.sendMessage("/iris std package <DIMENSION>");
return true;
}
if(new IrisProject(Iris.proj.getWorkspaceFolder(args[0])).updateWorkspace())
{
sender.sendMessage("Updated Code Workspace for " + args[0]);
}
if (new IrisProject(Iris.proj.getWorkspaceFolder(args[0])).updateWorkspace()) {
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
{
sender.sendMessage("Invalid project: " + args[0] + ". Try deleting the code-workspace file and try again.");
}
return true;
}
return true;
}
@Override
protected String getArgsUsage()
{
return "[dimension]";
}
@Override
protected String getArgsUsage() {
return "[dimension]";
}
}

View File

@@ -6,45 +6,41 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisWhat extends MortarCommand
{
@Command
private CommandIrisWhatBlock block;
public class CommandIrisWhat extends MortarCommand {
@Command
private CommandIrisWhatBlock block;
@Command
private CommandIrisWhatHand hand;
@Command
private CommandIrisWhatHand hand;
@Command
private CommandIrisWhatBiome biome;
@Command
private CommandIrisWhatBiome biome;
@Command
private CommandIrisWhatObjects objects;
@Command
private CommandIrisWhatObjects objects;
public CommandIrisWhat()
{
super("what", "w", "?");
setDescription("Get timings for this world");
requiresPermission(Iris.perm.studio);
setCategory("Wut");
setDescription("Figure out what stuff is");
}
public CommandIrisWhat() {
super("what", "w", "?");
setDescription("Get timings for this world");
requiresPermission(Iris.perm.studio);
setCategory("Wut");
setDescription("Figure out what stuff is");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
sender.sendMessage("Iris 'What' Commands:");
printHelp(sender);
return true;
}
@Override
public boolean handle(MortarSender sender, String[] args) {
sender.sendMessage("Iris 'What' Commands:");
printHelp(sender);
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
@Override
protected String getArgsUsage() {
return "";
}
}

View File

@@ -8,91 +8,57 @@ import com.volmit.iris.scaffold.engine.IrisAccess;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
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.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 java.lang.reflect.Field;
import java.util.Map;
public class CommandIrisWhatBiome extends MortarCommand {
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
{
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 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
public boolean handle(MortarSender sender, String[] args)
{
if(sender.isPlayer())
{
Player p = sender.player();
World w = p.getWorld();
try {
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);
assert g != null;
IrisBiome b = g.getBiome(p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ());
sender.sendMessage("IBiome: " + b.getLoadKey() + " (" + b.getDerivative().name() + ")");
} catch (Throwable e) {
sender.sendMessage("Non-Iris Biome: " + p.getLocation().getBlock().getBiome().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))
{
try
{
sender.sendMessage("Data Pack Biome: " + INMS.get().getTrueBiomeBaseKey(p.getLocation()) + " (ID: " + INMS.get().getTrueBiomeBaseId(INMS.get().getTrueBiomeBase(p.getLocation())) + ")");
}
return true;
}
catch(Throwable ex)
{
}
}
}
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
@Override
protected String getArgsUsage() {
return "";
}
}

View File

@@ -1,90 +1,78 @@
package com.volmit.iris.manager.command.what;
import com.volmit.iris.Iris;
import com.volmit.iris.util.*;
import org.bukkit.FluidCollisionMode;
import org.bukkit.block.data.BlockData;
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
{
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 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
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;
}
if (bd != null) {
sender.sendMessage("Material: " + C.GREEN + bd.getMaterial().name());
sender.sendMessage("Full: " + C.WHITE + bd.getAsString(true));
if(bd != null) {
sender.sendMessage("Material: " + C.GREEN + bd.getMaterial().name());
sender.sendMessage("Full: " + C.WHITE + bd.getAsString(true));
if (B.isStorage(bd)) {
sender.sendMessage(C.YELLOW + "* Storage Block (Loot Capable)");
}
if (B.isStorage(bd)) {
sender.sendMessage(C.YELLOW + "* Storage Block (Loot Capable)");
}
if (B.isLit(bd)) {
sender.sendMessage(C.YELLOW + "* Lit Block (Light Capable)");
}
if (B.isLit(bd)) {
sender.sendMessage(C.YELLOW + "* Lit Block (Light Capable)");
}
if (B.isFoliage(bd)) {
sender.sendMessage(C.YELLOW + "* Foliage Block");
}
if (B.isFoliage(bd)) {
sender.sendMessage(C.YELLOW + "* Foliage Block");
}
if (B.isDecorant(bd)) {
sender.sendMessage(C.YELLOW + "* Decorant Block");
}
if (B.isDecorant(bd)) {
sender.sendMessage(C.YELLOW + "* Decorant Block");
}
if (B.isFluid(bd)) {
sender.sendMessage(C.YELLOW + "* Fluid Block");
}
if (B.isFluid(bd)) {
sender.sendMessage(C.YELLOW + "* Fluid Block");
}
if (B.isFoliagePlantable(bd)) {
sender.sendMessage(C.YELLOW + "* Plantable Foliage Block");
}
if (B.isFoliagePlantable(bd)) {
sender.sendMessage(C.YELLOW + "* Plantable Foliage Block");
}
if (B.isSolid(bd)) {
sender.sendMessage(C.YELLOW + "* Solid Block");
}
}
} else {
sender.sendMessage("Players only.");
}
if (B.isSolid(bd)) {
sender.sendMessage(C.YELLOW + "* Solid Block");
}
}
}
return true;
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
@Override
protected String getArgsUsage() {
return "";
}
}

Some files were not shown because too many files have changed in this diff Show More