Merge pull request #704 from VolmitSoftware/1.18.1

1.18.1
This commit is contained in:
Dan 2022-01-12 08:40:23 -05:00 committed by GitHub
commit 6921ad49db
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
467 changed files with 12587 additions and 10813 deletions

View File

@ -4,7 +4,39 @@ For 1.16 and below, see the 1.14-1.16 branch. The master branch is for the lates
# [Support](https://discord.gg/3xxPTpT) **|** [Documentation](https://docs.volmit.com/iris/) **|** [Git](https://github.com/IrisDimensions)
## Iris Toolbelt
# Building
Building Iris is fairly simple, though you will need to setup a few things if your system has never been used for java development.
Consider supporting our development by buying Iris on spigot! We work hard to make Iris the best it can be for everyone.
### Command Line Builds
1. Install [Java JDK 17](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)
2. Set the JDK installation path to `JAVA_HOME` as an environment variable.
* Windows
1. Start > Type `env` and press Enter
2. Advanced > Environment Variables
3. Under System Variables, click `New...`
4. Variable Name: `JAVA_HOME`
5. Variable Value: `C:\Program Files\Java\jdk-17.0.1` (verify this eixsts after installing java dont just copy the example text)
* MacOS
1. Run `/usr/libexec/java_home -V` and look for Java 17
2. Run `sudo nano ~/.zshenv`
3. Add `export JAVA_HOME=$(/usr/libexec/java_home)` as a new line
4. Use `CTRL + X`, then Press `Y`, Then `ENTER`
5. Quit & Reopen Terminal and verify with `echo $JAVA_HOME`. It should print a directory
3. If this is your first time building Iris for MC 1.18+ run `gradlew setup` inside the root Iris project folder. Otherwise skip this step. Grab a coffee, this may take up to 5 minutes depending on your cpu & internet connection.
4. Once the project is setup, run `gradlew iris`
5. The Iris jar will be placed in `Iris/build/Iris-XXX-XXX.jar` Enjoy! Consider supporting us by buying it on spigot!
### IDE Builds (for development)
* Run `gradlew setup` any time you get dependency issues with craftbukkit
* Configure ITJ Gradle to use JDK 17 (in settings, search for gradle)
* Add a build line in the build.gradle for your own build task to directly compile Iris into your plugins folder if you prefer.
* Resync the project & run your newly created task (under the development folder in gradle tasks!)
# Iris Toolbelt
Everyone needs a toolbelt.

View File

@ -18,64 +18,30 @@
plugins {
id 'java'
id 'io.freefair.lombok' version '5.2.1'
id "com.github.johnrengelman.shadow" version "7.0.0"
id "com.github.johnrengelman.shadow" version "7.1.2"
id "de.undercouch.download" version "4.1.2"
}
group 'com.volmit.iris'
version '1.9.6-1.17.X'
def apiVersion = '1.17'
version '1.9.6-1.18.X'
def nmsVersion = "1.18.1"
def apiVersion = '1.18'
def spigotJarVersion = '1.18.1-R0.1-SNAPSHOT'
def name = getRootProject().getName() // Defined in settings.gradle
def main = 'com.volmit.iris.Iris'
// ADD YOURSELF AS A NEW LINE IF YOU WANT YOUR OWN BUILD TASK GENERATED
// ======================== WINDOWS =============================
registerCustomOutputTask('Cyberpwn', 'C://Users/cyberpwn/Documents/development/server/plugins', name)
registerCustomOutputTask('Psycho', 'D://Dan/MinecraftDevelopment/server/plugins', name)
registerCustomOutputTask('ArcaneArts', 'C://Users/arcane/Documents/development/server/plugins', name)
registerCustomOutputTask('Coco', 'C://Users/sjoer/Desktop/MCSM/plugins', name)
registerCustomOutputTask('Strange', 'D://Servers/1.17 Test Server/plugins', name)
registerCustomOutputTask('Cyberpwn', 'C://Users/cyberpwn/Documents/development/server/plugins')
registerCustomOutputTask('Psycho', 'D://Dan/MinecraftDevelopment/server/plugins')
registerCustomOutputTask('ArcaneArts', 'C://Users/arcane/Documents/development/server/plugins')
registerCustomOutputTask('Coco', 'C://Users/sjoer/Desktop/MCSM/plugins')
registerCustomOutputTask('Strange', 'D://Servers/1.17 Test Server/plugins')
// ========================== UNIX ==============================
registerCustomOutputTaskUnix('CyberpwnLT', '/Users/danielmills/Documents/development/server/plugins', name)
registerCustomOutputTaskUnix('PsychoLT', '/Users/brianfopiano/Desktop/REMOTES/RemoteMinecraft/plugins', name)
registerCustomOutputTaskUnix('CyberpwnLT', '/Users/danielmills/Documents/development/server/plugins')
registerCustomOutputTaskUnix('PsychoLT', '/Users/brianfopiano/Desktop/REMOTES/RemoteMinecraft/plugins')
// ==============================================================
def registerCustomOutputTask(name, path, plugin) {
if (!System.properties['os.name'].toLowerCase().contains('windows'))
{
return;
}
tasks.register('build' + name, Copy) {
group('development')
outputs.upToDateWhen { false }
dependsOn ':shadowJar'
from(file('build/libs/' + plugin + '-' + version + '-all.jar'))
into(file(path))
rename { String fileName ->
fileName.replace(plugin + '-' + version + '-all.jar', plugin + ".jar")
}
}
}
def registerCustomOutputTaskUnix(name, path, plugin) {
if(System.properties['os.name'].toLowerCase().contains('windows'))
{
return;
}
tasks.register('build' + name, Copy) {
group('development')
outputs.upToDateWhen { false }
dependsOn ':shadowJar'
from(file('build/libs/' + plugin + '-' + version + '-all.jar'))
into(file(path))
rename { String fileName ->
fileName.replace(plugin + '-' + version + '-all.jar', plugin + ".jar")
}
}
}
/**
* Gradle is weird sometimes, we need to delete the plugin yml from the build folder to actually filter properly.
*/
@ -99,8 +65,15 @@ processResources {
* Unified repo
*/
repositories {
mavenLocal{
content{
includeGroup("org.bukkit")
includeGroup("org.spigotmc")
}
}
maven { url "https://dl.cloudsmith.io/public/arcane/archive/maven/" }
mavenCentral()
mavenLocal()
}
/**
@ -114,7 +87,7 @@ compileJava {
* Configure Iris for shading
*/
shadowJar {
minimize()
//minimize()
append("plugin.yml")
relocate 'com.dfsek.paralithic', 'com.volmit.iris.util.paralithic'
relocate 'io.papermc.lib', 'com.volmit.iris.util.paper'
@ -147,10 +120,10 @@ dependencies {
// Provided or Classpath
compileOnly 'org.projectlombok:lombok:1.18.22'
annotationProcessor 'org.projectlombok:lombok:1.18.22'
implementation 'org.spigotmc:spigot-api:1.17.1-R0.1-SNAPSHOT'
implementation 'org.bukkit.craftbukkit:1.17.1:1.17.1'
implementation 'org.spigotmc:spigot-api:1.18.1-R0.1-SNAPSHOT'
implementation 'me.clip:placeholderapi:2.10.10'
implementation 'io.th0rgal:oraxen:1.94.0'
implementation 'org.bukkit:craftbukkit:1.18.1-R0.1-SNAPSHOT:remapped-mojang'
// Shaded
implementation 'com.dfsek:Paralithic:0.4.0'
@ -172,3 +145,175 @@ dependencies {
implementation 'com.github.ben-manes.caffeine:caffeine:3.0.5'
implementation 'org.apache.commons:commons-lang3:3.12.0'
}
if(JavaVersion.current().toString() != "17")
{
System.err.println()
System.err.println("=========================================================================================================")
System.err.println("You must run gradle on Java 17. You are using " + JavaVersion.current())
System.err.println()
System.err.println("=== For IDEs ===")
System.err.println("1. Configure the project for Java 17")
System.err.println("2. Configure the bundled gradle to use Java 17 in settings")
System.err.println()
System.err.println("=== For Command Line (gradlew) ===")
System.err.println("1. Install JDK 17 from https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html")
System.err.println("2. Set JAVA_HOME environment variable to the new jdk installation folder such as C:\\Program Files\\Java\\jdk-17.0.1")
System.err.println("3. Open a new command prompt window to get the new environment variables if need be.")
System.err.println("=========================================================================================================")
System.err.println()
System.exit(69);
}
def buildToolsJar = new File(buildDir, "buildtools/BuildTools.jar");
def specialSourceJar = new File(buildDir, "specialsource/SpecialSource.jar");
def buildToolsFolder = new File(buildDir, "buildtools");
def specialSourceFolder = new File(buildDir, "specialsource");
def buildToolsHint = new File(buildDir, "buildtools/craftbukkit-" + nmsVersion + ".jar");
def outputShadeJar = new File(buildDir, "libs/Iris-" + version + "-all.jar");
def ssiJar = new File(buildDir, "specialsource/Iris-" + version + "-all.jar");
def ssobfJar = new File(buildDir, "specialsource/Iris-" + version + "-rmo.jar");
def ssJar = new File(buildDir, "specialsource/Iris-" + version + "-rma.jar");
def homePath = System.properties['user.home']
def m2 = new File(homePath + "/.m2/repository")
def m2s = m2.getAbsolutePath();
// ======================== Building Mapped Jars =============================
task downloadBuildtools(type: Download) {
group "remapping"
src 'https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar'
dest buildToolsJar
onlyIf{
!buildToolsJar.exists()
}
}
task downloadSpecialSource(type: Download){
group "remapping"
src 'https://repo.maven.apache.org/maven2/net/md-5/SpecialSource/1.10.0/SpecialSource-1.10.0-shaded.jar'
dest specialSourceJar
onlyIf{
!specialSourceJar.exists()
}
}
task executeBuildTools(dependsOn: downloadBuildtools, type: JavaExec)
{
group "remapping"
classpath = files(buildToolsJar)
workingDir = buildToolsFolder
args = [
"--rev",
nmsVersion,
"--compile",
"craftbukkit",
"--remap"
]
onlyIf{
!buildToolsHint.exists()
}
}
task copyBuildToSpecialSource(type: Copy)
{
group "remapping"
from outputShadeJar
into specialSourceFolder
dependsOn(downloadSpecialSource, shadowJar)
}
task specialSourceRemapObfuscate(type: JavaExec)
{
group "remapping"
dependsOn(copyBuildToSpecialSource, downloadSpecialSource, shadowJar)
workingDir = specialSourceFolder
classpath = files(specialSourceJar,
new File(m2s + "/org/spigotmc/spigot/"+spigotJarVersion+"/spigot-" + spigotJarVersion + "-remapped-mojang.jar"))
mainClass = "net.md_5.specialsource.SpecialSource"
args = [
"--live",
"-i",
ssiJar.getName(),
"-o",
ssobfJar.getName(),
"-m",
m2s + "/org/spigotmc/minecraft-server/"+spigotJarVersion+"/minecraft-server-" + spigotJarVersion + "-maps-mojang.txt",
"--reverse",
]
}
task specialSourceRemap(type: JavaExec)
{
group "remapping"
dependsOn(specialSourceRemapObfuscate)
workingDir = specialSourceFolder
classpath = files(specialSourceJar,
new File(m2s + "/org/spigotmc/spigot/"+spigotJarVersion+"/spigot-" + spigotJarVersion + "-remapped-obf.jar"))
mainClass = "net.md_5.specialsource.SpecialSource"
args = [
"--live",
"-i",
ssobfJar.getName(),
"-o",
ssJar.getName(),
"-m",
m2s + "/org/spigotmc/minecraft-server/"+spigotJarVersion+"/minecraft-server-" + spigotJarVersion + "-maps-spigot.csrg"
]
}
tasks.compileJava.dependsOn(executeBuildTools)
task setup()
{
group("iris")
dependsOn(clean, executeBuildTools)
}
task iris(type: Copy)
{
group "iris"
from ssJar
into buildDir
rename { String fileName ->
fileName.replace('Iris-' + version + '-rma.jar', "Iris-" + version + ".jar")
}
dependsOn(specialSourceRemap)
}
def registerCustomOutputTask(name, path) {
if (!System.properties['os.name'].toLowerCase().contains('windows'))
{
return;
}
tasks.register('build' + name, Copy) {
group('development')
outputs.upToDateWhen { false }
dependsOn(iris)
from(new File(buildDir, "Iris-" + version + ".jar"))
into(file(path))
rename { String fileName ->
fileName.replace("Iris-" + version + ".jar", "Iris.jar")
}
}
}
def registerCustomOutputTaskUnix(name, path) {
if(System.properties['os.name'].toLowerCase().contains('windows'))
{
return;
}
tasks.register('build' + name, Copy) {
group('development')
outputs.upToDateWhen { false }
dependsOn(iris)
from(new File(buildDir, "Iris-" + version + ".jar"))
into(file(path))
rename { String fileName ->
fileName.replace("Iris-" + version + ".jar", "Iris.jar")
}
}
}

View File

@ -17,6 +17,6 @@
#
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@ -97,7 +97,7 @@ public class Iris extends VolmitPlugin implements Listener {
try {
fixShading();
InstanceState.updateInstanceId();
} catch (Throwable ignored) {
} catch(Throwable ignored) {
}
}
@ -115,7 +115,7 @@ public class Iris extends VolmitPlugin implements Listener {
}
public static void callEvent(Event e) {
if (!e.isAsynchronous()) {
if(!e.isAsynchronous()) {
J.s(() -> Bukkit.getPluginManager().callEvent(e));
} else {
Bukkit.getPluginManager().callEvent(e);
@ -126,11 +126,11 @@ public class Iris extends VolmitPlugin implements Listener {
JarScanner js = new JarScanner(instance.getJarFile(), s);
KList<Object> v = new KList<>();
J.attempt(js::scan);
for (Class<?> i : js.getClasses()) {
if (slicedClass == null || i.isAnnotationPresent(slicedClass)) {
for(Class<?> i : js.getClasses()) {
if(slicedClass == null || i.isAnnotationPresent(slicedClass)) {
try {
v.add(i.getDeclaredConstructor().newInstance());
} catch (Throwable ignored) {
} catch(Throwable ignored) {
}
}
@ -143,11 +143,11 @@ public class Iris extends VolmitPlugin implements Listener {
JarScanner js = new JarScanner(instance.getJarFile(), s);
KList<Class<?>> v = new KList<>();
J.attempt(js::scan);
for (Class<?> i : js.getClasses()) {
if (slicedClass == null || i.isAnnotationPresent(slicedClass)) {
for(Class<?> i : js.getClasses()) {
if(slicedClass == null || i.isAnnotationPresent(slicedClass)) {
try {
v.add(i);
} catch (Throwable ignored) {
} catch(Throwable ignored) {
}
}
@ -161,7 +161,7 @@ public class Iris extends VolmitPlugin implements Listener {
}
public static void sq(Runnable r) {
synchronized (syncJobs) {
synchronized(syncJobs) {
syncJobs.queue(r);
}
}
@ -173,10 +173,10 @@ public class Iris extends VolmitPlugin implements Listener {
public static void msg(String string) {
try {
sender.sendMessage(string);
} catch (Throwable e) {
} catch(Throwable e) {
try {
System.out.println(instance.getTag() + string.replaceAll("(<([^>]+)>)", ""));
} catch (Throwable ignored1) {
} catch(Throwable ignored1) {
}
}
@ -186,15 +186,15 @@ public class Iris extends VolmitPlugin implements Listener {
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)) {
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) {
while((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) {
fileOutputStream.write(dataBuffer, 0, bytesRead);
Iris.verbose("Aquiring " + name);
}
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
}
}
@ -206,19 +206,19 @@ public class Iris extends VolmitPlugin implements Listener {
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)) {
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) {
while((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) {
fileOutputStream.write(dataBuffer, 0, bytesRead);
}
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
}
try {
return IO.readAll(f);
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
}
@ -229,15 +229,15 @@ public class Iris extends VolmitPlugin implements Listener {
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)) {
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) {
while((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) {
fileOutputStream.write(dataBuffer, 0, bytesRead);
}
fileOutputStream.flush();
} catch (IOException e) {
} catch(IOException e) {
e.printStackTrace();
Iris.reportError(e);
}
@ -254,35 +254,35 @@ public class Iris extends VolmitPlugin implements Listener {
}
public static void debug(String string) {
if (!IrisSettings.get().getGeneral().isDebug()) {
if(!IrisSettings.get().getGeneral().isDebug()) {
return;
}
try {
throw new RuntimeException();
} catch (Throwable e) {
} catch(Throwable e) {
try {
String[] cc = e.getStackTrace()[1].getClassName().split("\\Q.\\E");
if (cc.length > 5) {
if(cc.length > 5) {
debug(cc[3] + "/" + cc[4] + "/" + cc[cc.length - 1], e.getStackTrace()[1].getLineNumber(), string);
} else {
debug(cc[3] + "/" + cc[4], e.getStackTrace()[1].getLineNumber(), string);
}
} catch (Throwable ex) {
} catch(Throwable ex) {
debug("Origin", -1, string);
}
}
}
public static void debug(String category, int line, String string) {
if (!IrisSettings.get().getGeneral().isDebug()) {
if(!IrisSettings.get().getGeneral().isDebug()) {
return;
}
if(IrisSettings.get().getGeneral().isUseConsoleCustomColors()){
if(IrisSettings.get().getGeneral().isUseConsoleCustomColors()) {
msg("<gradient:#095fe0:#a848db>" + category + " <#bf3b76>" + line + "<reset> " + C.LIGHT_PURPLE + string.replaceAll("\\Q<\\E", "[").replaceAll("\\Q>\\E", "]"));
} else {
msg(C.BLUE + category + ":" + C.AQUA +line + C.RESET + C.LIGHT_PURPLE + " " + string.replaceAll("\\Q<\\E", "[").replaceAll("\\Q>\\E", "]"));
msg(C.BLUE + category + ":" + C.AQUA + line + C.RESET + C.LIGHT_PURPLE + " " + string.replaceAll("\\Q<\\E", "[").replaceAll("\\Q>\\E", "]"));
}
}
@ -301,21 +301,17 @@ public class Iris extends VolmitPlugin implements Listener {
@SuppressWarnings("deprecation")
public static void later(NastyRunnable object) {
try
{
try {
Bukkit.getScheduler().scheduleAsyncDelayedTask(instance, () ->
{
try {
object.run();
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
Iris.reportError(e);
}
}, RNG.r.i(100, 1200));
}
catch(IllegalPluginAccessException ignored)
{
} catch(IllegalPluginAccessException ignored) {
}
}
@ -325,18 +321,18 @@ public class Iris extends VolmitPlugin implements Listener {
}
public static void clearQueues() {
synchronized (syncJobs) {
synchronized(syncJobs) {
syncJobs.clear();
}
}
private static int getJavaVersion() {
String version = System.getProperty("java.version");
if (version.startsWith("1.")) {
if(version.startsWith("1.")) {
version = version.substring(2, 3);
} else {
int dot = version.indexOf(".");
if (dot != -1) {
if(dot != -1) {
version = version.substring(0, dot);
}
}
@ -344,10 +340,10 @@ public class Iris extends VolmitPlugin implements Listener {
}
public static void reportErrorChunk(int x, int z, Throwable e, String extra) {
if (IrisSettings.get().getGeneral().isDebug()) {
if(IrisSettings.get().getGeneral().isDebug()) {
File f = instance.getDataFile("debug", "chunk-errors", "chunk." + x + "." + z + ".txt");
if (!f.exists()) {
if(!f.exists()) {
J.attempt(() -> {
PrintWriter pw = new PrintWriter(f);
pw.println("Thread: " + Thread.currentThread().getName());
@ -362,16 +358,16 @@ public class Iris extends VolmitPlugin implements Listener {
}
public static void reportError(Throwable e) {
if (IrisSettings.get().getGeneral().isDebug()) {
if(IrisSettings.get().getGeneral().isDebug()) {
String n = e.getClass().getCanonicalName() + "-" + e.getStackTrace()[0].getClassName() + "-" + e.getStackTrace()[0].getLineNumber();
if (e.getCause() != null) {
if(e.getCause() != null) {
n += "-" + e.getCause().getStackTrace()[0].getClassName() + "-" + e.getCause().getStackTrace()[0].getLineNumber();
}
File f = instance.getDataFile("debug", "caught-exceptions", n + ".txt");
if (!f.exists()) {
if(!f.exists()) {
J.attempt(() -> {
PrintWriter pw = new PrintWriter(f);
pw.println("Thread: " + Thread.currentThread().getName());
@ -417,19 +413,19 @@ public class Iris extends VolmitPlugin implements Listener {
}
private void autoStartStudio() {
if (IrisSettings.get().getStudio().isAutoStartDefaultStudio()) {
if(IrisSettings.get().getStudio().isAutoStartDefaultStudio()) {
Iris.info("Starting up auto Studio!");
try {
Player r = new KList<>(getServer().getOnlinePlayers()).getRandom();
Iris.service(StudioSVC.class).open(r != null ? new VolmitSender(r) : sender, 1337, IrisSettings.get().getGenerator().getDefaultWorldType(), (w) -> {
J.s(() -> {
for (Player i : getServer().getOnlinePlayers()) {
for(Player i : getServer().getOnlinePlayers()) {
i.setGameMode(GameMode.SPECTATOR);
i.teleport(new Location(w, 0, 200, 0));
}
});
});
} catch (IrisException e) {
} catch(IrisException e) {
e.printStackTrace();
}
}
@ -438,7 +434,7 @@ public class Iris extends VolmitPlugin implements Listener {
private void setupAudience() {
try {
audiences = BukkitAudiences.create(this);
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
IrisSettings.get().getGeneral().setUseConsoleCustomColors(false);
IrisSettings.get().getGeneral().setUseCustomColorsIngame(false);
@ -452,11 +448,11 @@ public class Iris extends VolmitPlugin implements Listener {
FileOutputStream fos = new FileOutputStream(fi);
Map<Thread, StackTraceElement[]> f = Thread.getAllStackTraces();
PrintWriter pw = new PrintWriter(fos);
for (Thread i : f.keySet()) {
for(Thread i : f.keySet()) {
pw.println("========================================");
pw.println("Thread: '" + i.getName() + "' ID: " + i.getId() + " STATUS: " + i.getState().name());
for (StackTraceElement j : f.get(i)) {
for(StackTraceElement j : f.get(i)) {
pw.println(" @ " + j.toString());
}
@ -467,7 +463,7 @@ public class Iris extends VolmitPlugin implements Listener {
pw.close();
System.out.println("DUMPED! See " + fi.getAbsolutePath());
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
}
}
@ -476,13 +472,11 @@ public class Iris extends VolmitPlugin implements Listener {
postShutdown.add(r);
}
public static void panic()
{
public static void panic() {
EnginePanic.panic();
}
public static void addPanic(String s, String v)
{
public static void addPanic(String s, String v) {
EnginePanic.add(s, v);
}
@ -508,7 +502,7 @@ public class Iris extends VolmitPlugin implements Listener {
}
private void setupPapi() {
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
if(Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
new IrisPapiExpansion().register();
}
}
@ -529,7 +523,7 @@ public class Iris extends VolmitPlugin implements Listener {
}
private void checkConfigHotload() {
if (configWatcher.checkModified()) {
if(configWatcher.checkModified()) {
IrisSettings.invalidate();
IrisSettings.get();
configWatcher.checkModified();
@ -538,17 +532,17 @@ public class Iris extends VolmitPlugin implements Listener {
}
private void tickQueue() {
synchronized (Iris.syncJobs) {
if (!Iris.syncJobs.hasNext()) {
synchronized(Iris.syncJobs) {
if(!Iris.syncJobs.hasNext()) {
return;
}
long ms = M.ms();
while (Iris.syncJobs.hasNext() && M.ms() - ms < 25) {
while(Iris.syncJobs.hasNext() && M.ms() - ms < 25) {
try {
Iris.syncJobs.next().run();
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
Iris.reportError(e);
}
@ -557,7 +551,7 @@ public class Iris extends VolmitPlugin implements Listener {
}
private void bstats() {
if (IrisSettings.get().getGeneral().isPluginMetrics()) {
if(IrisSettings.get().getGeneral().isPluginMetrics()) {
J.s(() -> new Metrics(Iris.instance, 8757));
}
}
@ -573,12 +567,12 @@ public class Iris extends VolmitPlugin implements Listener {
@Override
public ChunkGenerator getDefaultWorldGenerator(String worldName, String id) {
if (worldName.equals("test")) {
if(worldName.equals("test")) {
try {
throw new RuntimeException();
} catch (Throwable e) {
} catch(Throwable e) {
Iris.info(e.getStackTrace()[1].getClassName());
if (e.getStackTrace()[1].getClassName().contains("com.onarandombox.MultiverseCore")) {
if(e.getStackTrace()[1].getClassName().contains("com.onarandombox.MultiverseCore")) {
Iris.debug("MVC Test detected, Quick! Send them the dummy!");
return new DummyChunkGenerator();
}
@ -586,20 +580,20 @@ public class Iris extends VolmitPlugin implements Listener {
}
IrisDimension dim;
if (id == null || id.isEmpty()) {
if(id == null || id.isEmpty()) {
dim = IrisData.loadAnyDimension(IrisSettings.get().getGenerator().getDefaultWorldType());
} else {
dim = IrisData.loadAnyDimension(id);
}
Iris.debug("Generator ID: " + id + " requested by bukkit/plugin");
if (dim == null) {
if(dim == null) {
Iris.warn("Unable to find dimension type " + id + " Looking for online packs...");
service(StudioSVC.class).downloadSearch(new VolmitSender(Bukkit.getConsoleSender()), id, true);
dim = IrisData.loadAnyDimension(id);
if (dim == null) {
if(dim == null) {
throw new RuntimeException("Can't find dimension " + id + "!");
} else {
Iris.info("Resolved missing dimension, proceeding with generation.");
@ -609,18 +603,18 @@ public class Iris extends VolmitPlugin implements Listener {
Iris.debug("Assuming IrisDimension: " + dim.getName());
IrisWorld w = IrisWorld.builder()
.name(worldName)
.seed(1337)
.environment(dim.getEnvironment())
.worldFolder(new File(worldName))
.minHeight(0)
.maxHeight(256)
.build();
.name(worldName)
.seed(1337)
.environment(dim.getEnvironment())
.worldFolder(new File(worldName))
.minHeight(dim.getMinHeight())
.maxHeight(dim.getMaxHeight())
.build();
Iris.debug("Generator Config: " + w.toString());
File ff = new File(w.worldFolder(), "iris/pack");
if (!ff.exists() || ff.listFiles().length == 0) {
if(!ff.exists() || ff.listFiles().length == 0) {
ff.mkdirs();
service(StudioSVC.class).installIntoWorld(sender, dim.getLoadKey(), ff.getParentFile());
}
@ -629,7 +623,7 @@ public class Iris extends VolmitPlugin implements Listener {
}
public void splash() {
if (!IrisSettings.get().getGeneral().isSplashLogoStartup()) {
if(!IrisSettings.get().getGeneral().isSplashLogoStartup()) {
return;
}
@ -645,7 +639,7 @@ public class Iris extends VolmitPlugin implements Listener {
Iris.info("Bukkit version: " + Bukkit.getBukkitVersion());
Iris.info("Java version: " + getJavaVersion());
Iris.info("Custom Biomes: " + INMS.get().countCustomBiomes());
for (int i = 0; i < info.length; i++) {
for(int i = 0; i < info.length; i++) {
splash[i] += info[i];
}

View File

@ -43,7 +43,7 @@ public class IrisSettings {
private IrisSettingsPerformance performance = new IrisSettingsPerformance();
public static int getThreadCount(int c) {
return switch (c) {
return switch(c) {
case -1, -2, -4 -> Runtime.getRuntime().availableProcessors() / -c;
case 0, 1, 2 -> 1;
default -> Math.max(c, 2);
@ -134,7 +134,7 @@ public class IrisSettings {
}
public static IrisSettings get() {
if (settings != null) {
if(settings != null) {
return settings;
}
@ -142,10 +142,10 @@ public class IrisSettings {
File s = Iris.instance.getDataFile("settings.json");
if (!s.exists()) {
if(!s.exists()) {
try {
IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4));
} catch (JSONException | IOException e) {
} catch(JSONException | IOException e) {
e.printStackTrace();
Iris.reportError(e);
}
@ -155,10 +155,10 @@ public class IrisSettings {
settings = new Gson().fromJson(ss, IrisSettings.class);
try {
IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4));
} catch (IOException e) {
} catch(IOException e) {
e.printStackTrace();
}
} catch (Throwable ee) {
} catch(Throwable ee) {
// Iris.reportError(ee); causes a self-reference & stackoverflow
Iris.error("Configuration Error in settings.json! " + ee.getClass().getSimpleName() + ": " + ee.getMessage());
}
@ -168,7 +168,7 @@ public class IrisSettings {
}
public static void invalidate() {
synchronized (settings) {
synchronized(settings) {
settings = null;
}
}
@ -178,7 +178,7 @@ public class IrisSettings {
try {
IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4));
} catch (JSONException | IOException e) {
} catch(JSONException | IOException e) {
e.printStackTrace();
Iris.reportError(e);
}

View File

@ -43,11 +43,11 @@ import java.util.concurrent.TimeUnit;
public class ServerConfigurator {
public static void configure() {
IrisSettings.IrisSettingsAutoconfiguration s = IrisSettings.get().getAutoConfiguration();
if (s.isConfigureSpigotTimeoutTime()) {
if(s.isConfigureSpigotTimeoutTime()) {
J.attempt(ServerConfigurator::increaseKeepAliveSpigot);
}
if (s.isConfigurePaperWatchdogDelay()) {
if(s.isConfigurePaperWatchdogDelay()) {
J.attempt(ServerConfigurator::increasePaperWatchdog);
}
@ -60,7 +60,7 @@ public class ServerConfigurator {
f.load(spigotConfig);
long tt = f.getLong("settings.timeout-time");
if (tt < TimeUnit.MINUTES.toSeconds(5)) {
if(tt < TimeUnit.MINUTES.toSeconds(5)) {
Iris.warn("Updating spigot.yml timeout-time: " + tt + " -> " + TimeUnit.MINUTES.toSeconds(5) + " (5 minutes)");
Iris.warn("You can disable this change (autoconfigureServer) in Iris settings, then change back the value.");
f.set("settings.timeout-time", TimeUnit.MINUTES.toSeconds(5));
@ -74,7 +74,7 @@ public class ServerConfigurator {
f.load(spigotConfig);
long tt = f.getLong("settings.watchdog.early-warning-delay");
if (tt < TimeUnit.MINUTES.toMillis(3)) {
if(tt < TimeUnit.MINUTES.toMillis(3)) {
Iris.warn("Updating paper.yml watchdog early-warning-delay: " + tt + " -> " + TimeUnit.MINUTES.toMillis(3) + " (3 minutes)");
Iris.warn("You can disable this change (autoconfigureServer) in Iris settings, then change back the value.");
f.set("settings.watchdog.early-warning-delay", TimeUnit.MINUTES.toMillis(3));
@ -83,22 +83,22 @@ public class ServerConfigurator {
}
private static File getDatapacksFolder() {
if (!IrisSettings.get().getGeneral().forceMainWorld.isEmpty()) {
if(!IrisSettings.get().getGeneral().forceMainWorld.isEmpty()) {
return new File(IrisSettings.get().getGeneral().forceMainWorld + "/datapacks");
}
File props = new File("server.properties");
if (props.exists()) {
if(props.exists()) {
try {
KList<String> m = new KList<>(IO.readAll(props).split("\\Q\n\\E"));
for (String i : m) {
if (i.trim().startsWith("level-name=")) {
for(String i : m) {
if(i.trim().startsWith("level-name=")) {
return new File(i.trim().split("\\Q=\\E")[1] + "/datapacks");
}
}
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -113,29 +113,29 @@ public class ServerConfigurator {
File packs = new File("plugins/Iris/packs");
File dpacks = getDatapacksFolder();
if (dpacks == null) {
if(dpacks == null) {
Iris.error("Cannot find the datapacks folder! Please try generating a default world first maybe? Is this a new server?");
return;
}
if (packs.exists()) {
for (File i : packs.listFiles()) {
if (i.isDirectory()) {
if(packs.exists()) {
for(File i : packs.listFiles()) {
if(i.isDirectory()) {
Iris.verbose("Checking Pack: " + i.getPath());
IrisData data = IrisData.get(i);
File dims = new File(i, "dimensions");
if (dims.exists()) {
for (File j : dims.listFiles()) {
if (j.getName().endsWith(".json")) {
if(dims.exists()) {
for(File j : dims.listFiles()) {
if(j.getName().endsWith(".json")) {
IrisDimension dim = data.getDimensionLoader().load(j.getName().split("\\Q.\\E")[0]);
if (dim == null) {
if(dim == null) {
continue;
}
Iris.verbose(" Checking Dimension " + dim.getLoadFile().getPath());
if (dim.installDataPack(() -> data, dpacks)) {
if(dim.installDataPack(() -> data, dpacks)) {
reboot = true;
}
}
@ -147,7 +147,7 @@ public class ServerConfigurator {
Iris.info("Data Packs Setup!");
if (fullInstall) {
if(fullInstall) {
verifyDataPacksPost(IrisSettings.get().getAutoConfiguration().isAutoRestartOnCustomBiomeInstall());
}
}
@ -156,30 +156,30 @@ public class ServerConfigurator {
File packs = new File("plugins/Iris/packs");
File dpacks = getDatapacksFolder();
if (dpacks == null) {
if(dpacks == null) {
Iris.error("Cannot find the datapacks folder! Please try generating a default world first maybe? Is this a new server?");
return;
}
boolean bad = false;
if (packs.exists()) {
for (File i : packs.listFiles()) {
if (i.isDirectory()) {
if(packs.exists()) {
for(File i : packs.listFiles()) {
if(i.isDirectory()) {
Iris.verbose("Checking Pack: " + i.getPath());
IrisData data = IrisData.get(i);
File dims = new File(i, "dimensions");
if (dims.exists()) {
for (File j : dims.listFiles()) {
if (j.getName().endsWith(".json")) {
if(dims.exists()) {
for(File j : dims.listFiles()) {
if(j.getName().endsWith(".json")) {
IrisDimension dim = data.getDimensionLoader().load(j.getName().split("\\Q.\\E")[0]);
if (dim == null) {
if(dim == null) {
Iris.error("Failed to load " + j.getPath() + " ");
continue;
}
if (!verifyDataPackInstalled(dim)) {
if(!verifyDataPackInstalled(dim)) {
bad = true;
}
}
@ -189,10 +189,10 @@ public class ServerConfigurator {
}
}
if (bad) {
if (allowRestarting) {
if(bad) {
if(allowRestarting) {
restart();
} else if (INMS.get().supportsDataPacks()) {
} else if(INMS.get().supportsDataPacks()) {
Iris.error("============================================================================");
Iris.error(C.ITALIC + "You need to restart your server to properly generate custom biomes.");
Iris.error(C.ITALIC + "By continuing, Iris will use backup biomes in place of the custom biomes.");
@ -200,8 +200,8 @@ public class ServerConfigurator {
Iris.error(C.UNDERLINE + "IT IS HIGHLY RECOMMENDED YOU RESTART THE SERVER BEFORE GENERATING!");
Iris.error("============================================================================");
for (Player i : Bukkit.getOnlinePlayers()) {
if (i.isOp() || i.hasPermission("iris.all")) {
for(Player i : Bukkit.getOnlinePlayers()) {
if(i.isOp() || i.hasPermission("iris.all")) {
VolmitSender sender = new VolmitSender(i, Iris.instance.getTag("WARNING"));
sender.sendMessage("There are some Iris Packs that have custom biomes in them");
sender.sendMessage("You need to restart your server to use these packs.");
@ -231,16 +231,16 @@ public class ServerConfigurator {
KSet<String> keys = new KSet<>();
boolean warn = false;
for (IrisBiome i : dimension.getAllBiomes(() -> idm)) {
if (i.isCustom()) {
for (IrisBiomeCustom j : i.getCustomDerivitives()) {
for(IrisBiome i : dimension.getAllBiomes(() -> idm)) {
if(i.isCustom()) {
for(IrisBiomeCustom j : i.getCustomDerivitives()) {
keys.add(dimension.getLoadKey() + ":" + j.getId());
}
}
}
if (!INMS.get().supportsDataPacks()) {
if (!keys.isEmpty()) {
if(!INMS.get().supportsDataPacks()) {
if(!keys.isEmpty()) {
Iris.warn("===================================================================================");
Iris.warn("Pack " + dimension.getLoadKey() + " has " + keys.size() + " custom biome(s). ");
Iris.warn("Your server version does not yet support datapacks for iris.");
@ -251,16 +251,16 @@ public class ServerConfigurator {
return true;
}
for (String i : keys) {
for(String i : keys) {
Object o = INMS.get().getCustomBiomeBaseFor(i);
if (o == null) {
if(o == null) {
Iris.warn("The Biome " + i + " is not registered on the server.");
warn = true;
}
}
if (warn) {
if(warn) {
Iris.error("The Pack " + dimension.getLoadKey() + " is INCAPABLE of generating custom biomes");
Iris.error("If not done automatically, restart your server before generating with this pack!");
}

View File

@ -19,44 +19,36 @@
package com.volmit.iris.core.commands;
import com.volmit.iris.Iris;
import com.volmit.iris.core.edit.BlockSignal;
import com.volmit.iris.core.loader.IrisRegistrant;
import com.volmit.iris.core.nms.INMS;
import com.volmit.iris.core.service.StudioSVC;
import com.volmit.iris.core.tools.IrisToolbelt;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.util.data.B;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisCave;
import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.object.IrisJigsawPiece;
import com.volmit.iris.engine.object.IrisJigsawPool;
import com.volmit.iris.engine.object.IrisJigsawStructure;
import com.volmit.iris.engine.object.IrisRegion;
import com.volmit.iris.util.decree.DecreeExecutor;
import com.volmit.iris.util.decree.DecreeOrigin;
import com.volmit.iris.util.decree.annotations.Decree;
import com.volmit.iris.util.decree.annotations.Param;
import com.volmit.iris.util.format.C;
import com.volmit.iris.util.matter.MatterMarker;
import com.volmit.iris.util.scheduling.J;
import org.bukkit.Chunk;
import org.bukkit.FluidCollisionMode;
import org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
import java.awt.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.awt.Desktop;
@Decree(name = "edit", origin = DecreeOrigin.PLAYER, studio = true, description = "Edit something")
public class CommandEdit implements DecreeExecutor {
private boolean noStudio() {
if (!sender().isPlayer()) {
if(!sender().isPlayer()) {
sender().sendMessage(C.RED + "Players only!");
return true;
}
if (!Iris.service(StudioSVC.class).isProjectOpen()) {
if(!Iris.service(StudioSVC.class).isProjectOpen()) {
sender().sendMessage(C.RED + "No studio world is open!");
return true;
}
if (!engine().isStudio()) {
if(!engine().isStudio()) {
sender().sendMessage(C.RED + "You must be in a studio world!");
return true;
}
@ -64,18 +56,19 @@ public class CommandEdit implements DecreeExecutor {
}
@Decree(description = "Edit the biome you specified", aliases = {"b"}, origin = DecreeOrigin.PLAYER)
public void biome(@Param(contextual = false, description = "The biome to edit") IrisBiome biome) {
if (noStudio()) {return;}
if(noStudio()) {
return;
}
try {
if ( biome==null || biome.getLoadFile() == null) {
if(biome == null || biome.getLoadFile() == null) {
sender().sendMessage(C.GOLD + "Cannot find the file; Perhaps it was not loaded directly from a file?");
return;
}
Desktop.getDesktop().open(biome.getLoadFile());
sender().sendMessage(C.GREEN + "Opening " + biome.getTypeName() + " " + biome.getLoadFile().getName().split("\\Q.\\E")[0] + " in VSCode! ");
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
sender().sendMessage(C.RED + "Cant find the file. Or registrant does not exist");
}
@ -83,15 +76,17 @@ public class CommandEdit implements DecreeExecutor {
@Decree(description = "Edit the region you specified", aliases = {"r"}, origin = DecreeOrigin.PLAYER)
public void region(@Param(contextual = false, description = "The region to edit") IrisRegion region) {
if (noStudio()) {return;}
if(noStudio()) {
return;
}
try {
if ( region==null || region.getLoadFile() == null) {
if(region == null || region.getLoadFile() == null) {
sender().sendMessage(C.GOLD + "Cannot find the file; Perhaps it was not loaded directly from a file?");
return;
}
Desktop.getDesktop().open(region.getLoadFile());
sender().sendMessage(C.GREEN + "Opening " + region.getTypeName() + " " + region.getLoadFile().getName().split("\\Q.\\E")[0] + " in VSCode! ");
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
sender().sendMessage(C.RED + "Cant find the file. Or registrant does not exist");
}
@ -99,15 +94,17 @@ public class CommandEdit implements DecreeExecutor {
@Decree(description = "Edit the dimension you specified", aliases = {"d"}, origin = DecreeOrigin.PLAYER)
public void dimension(@Param(contextual = false, description = "The dimension to edit") IrisDimension dimension) {
if (noStudio()) {return;}
if(noStudio()) {
return;
}
try {
if ( dimension==null || dimension.getLoadFile() == null) {
if(dimension == null || dimension.getLoadFile() == null) {
sender().sendMessage(C.GOLD + "Cannot find the file; Perhaps it was not loaded directly from a file?");
return;
}
Desktop.getDesktop().open(dimension.getLoadFile());
sender().sendMessage(C.GREEN + "Opening " + dimension.getTypeName() + " " + dimension.getLoadFile().getName().split("\\Q.\\E")[0] + " in VSCode! ");
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
sender().sendMessage(C.RED + "Cant find the file. Or registrant does not exist");
}
@ -115,15 +112,17 @@ public class CommandEdit implements DecreeExecutor {
@Decree(description = "Edit the cave file you specified", aliases = {"c"}, origin = DecreeOrigin.PLAYER)
public void cave(@Param(contextual = false, description = "The cave to edit") IrisCave cave) {
if (noStudio()) {return;}
if(noStudio()) {
return;
}
try {
if ( cave==null || cave.getLoadFile() == null) {
if(cave == null || cave.getLoadFile() == null) {
sender().sendMessage(C.GOLD + "Cannot find the file; Perhaps it was not loaded directly from a file?");
return;
}
Desktop.getDesktop().open(cave.getLoadFile());
sender().sendMessage(C.GREEN + "Opening " + cave.getTypeName() + " " + cave.getLoadFile().getName().split("\\Q.\\E")[0] + " in VSCode! ");
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
sender().sendMessage(C.RED + "Cant find the file. Or registrant does not exist");
}
@ -131,15 +130,17 @@ public class CommandEdit implements DecreeExecutor {
@Decree(description = "Edit the structure file you specified", aliases = {"jigsawstructure", "structure"}, origin = DecreeOrigin.PLAYER)
public void jigsaw(@Param(contextual = false, description = "The jigsaw structure to edit") IrisJigsawStructure jigsaw) {
if (noStudio()) {return;}
if(noStudio()) {
return;
}
try {
if ( jigsaw==null || jigsaw.getLoadFile() == null) {
if(jigsaw == null || jigsaw.getLoadFile() == null) {
sender().sendMessage(C.GOLD + "Cannot find the file; Perhaps it was not loaded directly from a file?");
return;
}
Desktop.getDesktop().open(jigsaw.getLoadFile());
sender().sendMessage(C.GREEN + "Opening " + jigsaw.getTypeName() + " " + jigsaw.getLoadFile().getName().split("\\Q.\\E")[0] + " in VSCode! ");
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
sender().sendMessage(C.RED + "Cant find the file. Or registrant does not exist");
}
@ -147,15 +148,17 @@ public class CommandEdit implements DecreeExecutor {
@Decree(description = "Edit the pool file you specified", aliases = {"jigsawpool", "pool"}, origin = DecreeOrigin.PLAYER)
public void jigsawPool(@Param(contextual = false, description = "The jigsaw pool to edit") IrisJigsawPool pool) {
if (noStudio()) {return;}
if(noStudio()) {
return;
}
try {
if ( pool==null || pool.getLoadFile() == null) {
if(pool == null || pool.getLoadFile() == null) {
sender().sendMessage(C.GOLD + "Cannot find the file; Perhaps it was not loaded directly from a file?");
return;
}
Desktop.getDesktop().open(pool.getLoadFile());
sender().sendMessage(C.GREEN + "Opening " + pool.getTypeName() + " " + pool.getLoadFile().getName().split("\\Q.\\E")[0] + " in VSCode! ");
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
sender().sendMessage(C.RED + "Cant find the file. Or registrant does not exist");
}
@ -163,15 +166,17 @@ public class CommandEdit implements DecreeExecutor {
@Decree(description = "Edit the jigsaw piece file you specified", aliases = {"jigsawpiece", "piece"}, origin = DecreeOrigin.PLAYER)
public void jigsawPiece(@Param(contextual = false, description = "The jigsaw piece to edit") IrisJigsawPiece piece) {
if (noStudio()) {return;}
if(noStudio()) {
return;
}
try {
if ( piece==null || piece.getLoadFile() == null) {
if(piece == null || piece.getLoadFile() == null) {
sender().sendMessage(C.GOLD + "Cannot find the file; Perhaps it was not loaded directly from a file?");
return;
}
Desktop.getDesktop().open(piece.getLoadFile());
sender().sendMessage(C.GREEN + "Opening " + piece.getTypeName() + " " + piece.getLoadFile().getName().split("\\Q.\\E")[0] + " in VSCode! ");
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
sender().sendMessage(C.RED + "Cant find the file. Or registrant does not exist");
}

View File

@ -33,12 +33,12 @@ import com.volmit.iris.util.format.C;
public class CommandFind implements DecreeExecutor {
@Decree(description = "Find a biome")
public void biome(
@Param(description = "The biome to look for")
IrisBiome biome
@Param(description = "The biome to look for")
IrisBiome biome
) {
Engine e = engine();
if (e == null) {
if(e == null) {
sender().sendMessage(C.GOLD + "Not in an Iris World!");
return;
}
@ -48,12 +48,12 @@ public class CommandFind implements DecreeExecutor {
@Decree(description = "Find a region")
public void region(
@Param(description = "The region to look for")
IrisRegion region
@Param(description = "The region to look for")
IrisRegion region
) {
Engine e = engine();
if (e == null) {
if(e == null) {
sender().sendMessage(C.GOLD + "Not in an Iris World!");
return;
}
@ -63,12 +63,12 @@ public class CommandFind implements DecreeExecutor {
@Decree(description = "Find a structure")
public void structure(
@Param(description = "The structure to look for")
IrisJigsawStructure structure
@Param(description = "The structure to look for")
IrisJigsawStructure structure
) {
Engine e = engine();
if (e == null) {
if(e == null) {
sender().sendMessage(C.GOLD + "Not in an Iris World!");
return;
}
@ -78,12 +78,12 @@ public class CommandFind implements DecreeExecutor {
@Decree(description = "Find an object")
public void object(
@Param(description = "The object to look for", customHandler = ObjectHandler.class)
String object
@Param(description = "The object to look for", customHandler = ObjectHandler.class)
String object
) {
Engine e = engine();
if (e == null) {
if(e == null) {
sender().sendMessage(C.GOLD + "Not in an Iris World!");
return;
}

View File

@ -58,20 +58,20 @@ public class CommandIris implements DecreeExecutor {
@Decree(description = "Create a new world", aliases = {"+", "c"})
public void create(
@Param(aliases = "world-name", description = "The name of the world to create")
String name,
@Param(aliases = "dimension", description = "The dimension type to create the world with", defaultValue = "overworld")
IrisDimension type,
@Param(description = "The seed to generate the world with", defaultValue = "1337")
long seed
@Param(aliases = "world-name", description = "The name of the world to create")
String name,
@Param(aliases = "dimension", description = "The dimension type to create the world with", defaultValue = "overworld")
IrisDimension type,
@Param(description = "The seed to generate the world with", defaultValue = "1337")
long seed
) {
if (name.equals("iris")) {
if(name.equals("iris")) {
sender().sendMessage(C.RED + "You cannot use the world name \"iris\" for creating worlds as Iris uses this directory for studio worlds.");
sender().sendMessage(C.RED + "May we suggest the name \"IrisWorld\" instead?");
return;
}
if (new File(name).exists()) {
if(new File(name).exists()) {
sender().sendMessage(C.RED + "That folder already exists!");
return;
}
@ -80,13 +80,13 @@ public class CommandIris implements DecreeExecutor {
try {
IrisToolbelt.createWorld()
.dimension(type.getLoadKey())
.name(name)
.seed(seed)
.sender(sender())
.studio(false)
.create();
} catch (Throwable e) {
.dimension(type.getLoadKey())
.name(name)
.seed(seed)
.sender(sender())
.studio(false)
.create();
} catch(Throwable e) {
sender().sendMessage(C.RED + "Exception raised during creation. See the console for more details.");
Iris.error("Exception raised during world creation: " + e.getMessage());
Iris.reportError(e);
@ -101,14 +101,20 @@ public class CommandIris implements DecreeExecutor {
sender().sendMessage(C.GREEN + "Iris v" + Iris.instance.getDescription().getVersion() + " by Volmit Software");
}
@Decree(description = "Print version information", origin = DecreeOrigin.PLAYER)
public void height() {
sender().sendMessage(C.GREEN + "" + sender().player().getWorld().getMinHeight() + " to " + sender().player().getWorld().getMaxHeight());
sender().sendMessage(C.GREEN + "Total Height: " + (sender().player().getWorld().getMaxHeight() - sender().player().getWorld().getMinHeight()));
}
@Decree(description = "Set aura spins")
public void aura(
@Param(description = "The h color value", defaultValue = "-20")
int h,
@Param(description = "The s color value", defaultValue = "7")
int s,
@Param(description = "The b color value", defaultValue = "8")
int b
@Param(description = "The h color value", defaultValue = "-20")
int h,
@Param(description = "The s color value", defaultValue = "7")
int s,
@Param(description = "The b color value", defaultValue = "8")
int b
) {
IrisSettings.get().getGeneral().setSpinh(h);
IrisSettings.get().getGeneral().setSpins(s);
@ -119,15 +125,15 @@ public class CommandIris implements DecreeExecutor {
@Decree(description = "Bitwise calculations")
public void bitwise(
@Param(description = "The first value to run calculations on")
int value1,
@Param(description = "The operator: | & ^ ≺≺ ≻≻ ")
String operator,
@Param(description = "The second value to run calculations on")
int value2
@Param(description = "The first value to run calculations on")
int value1,
@Param(description = "The operator: | & ^ ≺≺ ≻≻ ")
String operator,
@Param(description = "The second value to run calculations on")
int value2
) {
Integer v = null;
switch (operator) {
switch(operator) {
case "|" -> v = value1 | value2;
case "&" -> v = value1 & value2;
case "^" -> v = value1 ^ value2;
@ -135,7 +141,7 @@ public class CommandIris implements DecreeExecutor {
case ">>" -> v = value1 >> value2;
case "<<" -> v = value1 << value2;
}
if (v == null) {
if(v == null) {
sender().sendMessage(C.RED + "The operator you entered: (" + operator + ") is invalid!");
return;
}
@ -144,8 +150,8 @@ public class CommandIris implements DecreeExecutor {
@Decree(description = "Toggle debug")
public void debug(
@Param(name = "on", description = "Whether or not debug should be on", defaultValue = "other")
Boolean on
@Param(name = "on", description = "Whether or not debug should be on", defaultValue = "other")
Boolean on
) {
boolean to = on == null ? !IrisSettings.get().getGeneral().isDebug() : on;
IrisSettings.get().getGeneral().setDebug(to);
@ -155,14 +161,14 @@ public class CommandIris implements DecreeExecutor {
@Decree(description = "Download a project.", aliases = "dl")
public void download(
@Param(name = "pack", description = "The pack to download", defaultValue = "overworld", aliases = "project")
String pack,
@Param(name = "branch", description = "The branch to download from", defaultValue = "master")
String branch,
@Param(name = "trim", description = "Whether or not to download a trimmed version (do not enable when editing)", defaultValue = "false")
boolean trim,
@Param(name = "overwrite", description = "Whether or not to overwrite the pack with the downloaded one", aliases = "force", defaultValue = "false")
boolean overwrite
@Param(name = "pack", description = "The pack to download", defaultValue = "overworld", aliases = "project")
String pack,
@Param(name = "branch", description = "The branch to download from", defaultValue = "master")
String branch,
@Param(name = "trim", description = "Whether or not to download a trimmed version (do not enable when editing)", defaultValue = "false")
boolean trim,
@Param(name = "overwrite", description = "Whether or not to overwrite the pack with the downloaded one", aliases = "force", defaultValue = "false")
boolean overwrite
) {
branch = pack.equals("overworld") ? "stable" : branch;
sender().sendMessage(C.GREEN + "Downloading pack: " + pack + "/" + branch + (trim ? " trimmed" : "") + (overwrite ? " overwriting" : ""));
@ -171,7 +177,7 @@ public class CommandIris implements DecreeExecutor {
@Decree(description = "Get metrics for your world", aliases = "measure", origin = DecreeOrigin.PLAYER)
public void metrics() {
if (!IrisToolbelt.isIrisWorld(world())) {
if(!IrisToolbelt.isIrisWorld(world())) {
sender().sendMessage(C.RED + "You must be in an Iris world");
return;
}
@ -188,10 +194,10 @@ public class CommandIris implements DecreeExecutor {
@Decree(name = "regen", description = "Regenerate nearby chunks.", aliases = "rg", sync = true, origin = DecreeOrigin.PLAYER)
public void regen(
@Param(name = "radius", description = "The radius of nearby cunks", defaultValue = "5")
int radius
@Param(name = "radius", description = "The radius of nearby cunks", defaultValue = "5")
int radius
) {
if (IrisToolbelt.isIrisWorld(player().getWorld())) {
if(IrisToolbelt.isIrisWorld(player().getWorld())) {
VolmitSender sender = sender();
J.a(() -> {
DecreeContext.touch(sender);
@ -203,18 +209,18 @@ public class CommandIris implements DecreeExecutor {
BurstExecutor b = MultiBurst.burst.burst();
b.setMulticore(false);
int rad = engine.getMantle().getRealRadius();
for (int i = -(radius + rad); i <= radius + rad; i++) {
for (int j = -(radius + rad); j <= radius + rad; j++) {
for(int i = -(radius + rad); i <= radius + rad; i++) {
for(int j = -(radius + rad); j <= radius + rad; j++) {
engine.getMantle().getMantle().deleteChunk(i + cx.getX(), j + cx.getZ());
}
}
for (int i = -radius; i <= radius; i++) {
for (int j = -radius; j <= radius; j++) {
for(int i = -radius; i <= radius; i++) {
for(int j = -radius; j <= radius; j++) {
int finalJ = j;
int finalI = i;
b.queue(() -> plat.injectChunkReplacement(player().getWorld(), finalI + cx.getX(), finalJ + cx.getZ(), (f) -> {
synchronized (js) {
synchronized(js) {
js.add(f);
}
}));
@ -230,11 +236,11 @@ public class CommandIris implements DecreeExecutor {
public void execute(Runnable runnable) {
futures.add(J.sfut(runnable));
if (futures.size() > 64) {
while (futures.isNotEmpty()) {
if(futures.size() > 64) {
while(futures.isNotEmpty()) {
try {
futures.remove(0).get();
} catch (InterruptedException | ExecutionException e) {
} catch(InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
@ -248,7 +254,7 @@ public class CommandIris implements DecreeExecutor {
};
r.queue(js);
r.execute(sender());
} catch (Throwable e) {
} catch(Throwable e) {
sender().sendMessage("Unable to parse view-distance");
}
});
@ -259,26 +265,26 @@ public class CommandIris implements DecreeExecutor {
@Decree(description = "Update the pack of a world (UNSAFE!)", name = "^world", aliases = "update-world")
public void updateWorld(
@Param(description = "The world to update", contextual = true)
World world,
@Param(description = "The pack to install into the world", contextual = true, aliases = "dimension")
IrisDimension pack,
@Param(description = "Make sure to make a backup & read the warnings first!", defaultValue = "false", aliases = "c")
boolean confirm,
@Param(description = "Should Iris download the pack again for you", defaultValue = "false", name = "fresh-download", aliases = {"fresh", "new"})
boolean freshDownload
@Param(description = "The world to update", contextual = true)
World world,
@Param(description = "The pack to install into the world", contextual = true, aliases = "dimension")
IrisDimension pack,
@Param(description = "Make sure to make a backup & read the warnings first!", defaultValue = "false", aliases = "c")
boolean confirm,
@Param(description = "Should Iris download the pack again for you", defaultValue = "false", name = "fresh-download", aliases = {"fresh", "new"})
boolean freshDownload
) {
if (!confirm) {
sender().sendMessage(new String[]{
C.RED + "You should always make a backup before using this",
C.YELLOW + "Issues caused by this can be, but are not limited to:",
C.YELLOW + " - Broken chunks (cut-offs) between old and new chunks (before & after the update)",
C.YELLOW + " - Regenerated chunks that do not fit in with the old chunks",
C.YELLOW + " - Structures not spawning again when regenerating",
C.YELLOW + " - Caves not lining up",
C.YELLOW + " - Terrain layers not lining up",
C.RED + "Now that you are aware of the risks, and have made a back-up:",
C.RED + "/iris ^world <world> <pack> confirm=true"
if(!confirm) {
sender().sendMessage(new String[] {
C.RED + "You should always make a backup before using this",
C.YELLOW + "Issues caused by this can be, but are not limited to:",
C.YELLOW + " - Broken chunks (cut-offs) between old and new chunks (before & after the update)",
C.YELLOW + " - Regenerated chunks that do not fit in with the old chunks",
C.YELLOW + " - Structures not spawning again when regenerating",
C.YELLOW + " - Caves not lining up",
C.YELLOW + " - Terrain layers not lining up",
C.RED + "Now that you are aware of the risks, and have made a back-up:",
C.RED + "/iris ^world <world> <pack> confirm=true"
});
return;
}
@ -286,7 +292,7 @@ public class CommandIris implements DecreeExecutor {
File folder = world.getWorldFolder();
folder.mkdirs();
if (freshDownload) {
if(freshDownload) {
Iris.service(StudioSVC.class).downloadSearch(sender(), pack.getLoadKey(), false, true);
}

View File

@ -42,8 +42,8 @@ import java.io.File;
public class CommandJigsaw implements DecreeExecutor {
@Decree(description = "Edit a jigsaw piece")
public void edit(
@Param(description = "The jigsaw piece to edit")
IrisJigsawPiece piece
@Param(description = "The jigsaw piece to edit")
IrisJigsawPiece piece
) {
File dest = piece.getLoadFile();
new JigsawEditor(player(), piece, IrisData.loadAnyObject(piece.getObject()), dest);
@ -51,8 +51,8 @@ public class CommandJigsaw implements DecreeExecutor {
@Decree(description = "Place a jigsaw structure")
public void place(
@Param(description = "The jigsaw structure to place")
IrisJigsawStructure structure
@Param(description = "The jigsaw structure to place")
IrisJigsawStructure structure
) {
PrecisionStopwatch p = PrecisionStopwatch.start();
PlannedStructure ps = new PlannedStructure(structure, new IrisPosition(player().getLocation()), new RNG());
@ -62,16 +62,16 @@ public class CommandJigsaw implements DecreeExecutor {
@Decree(description = "Create a jigsaw piece")
public void create(
@Param(description = "The name of the jigsaw piece")
String piece,
@Param(description = "The project to add the jigsaw piece to")
String project,
@Param(description = "The object to use for this piece", customHandler = ObjectHandler.class)
String object
@Param(description = "The name of the jigsaw piece")
String piece,
@Param(description = "The project to add the jigsaw piece to")
String project,
@Param(description = "The object to use for this piece", customHandler = ObjectHandler.class)
String object
) {
IrisObject o = IrisData.loadAnyObject(object);
if (object == null) {
if(object == null) {
sender().sendMessage(C.RED + "Failed to find existing object");
return;
}
@ -88,7 +88,7 @@ public class CommandJigsaw implements DecreeExecutor {
public void exit() {
JigsawEditor editor = JigsawEditor.editors.get(player());
if (editor == null) {
if(editor == null) {
sender().sendMessage(C.GOLD + "You don't have any pieces open to exit!");
return;
}
@ -101,7 +101,7 @@ public class CommandJigsaw implements DecreeExecutor {
public void save() {
JigsawEditor editor = JigsawEditor.editors.get(player());
if (editor == null) {
if(editor == null) {
sender().sendMessage(C.GOLD + "You don't have any pieces open to save!");
return;
}

View File

@ -71,7 +71,7 @@ import java.util.stream.Collectors;
public class CommandObject implements DecreeExecutor {
private static final Set<Material> skipBlocks = Set.of(Material.GRASS, Material.SNOW, Material.VINE, Material.TORCH, Material.DEAD_BUSH,
Material.POPPY, Material.DANDELION);
Material.POPPY, Material.DANDELION);
public static IObjectPlacer createPlacer(World world, Map<Block, BlockData> futureBlockChanges) {
@ -91,7 +91,7 @@ public class CommandObject implements DecreeExecutor {
Block block = world.getBlockAt(x, y, z);
//Prevent blocks being set in or bellow bedrock
if (y <= world.getMinHeight() || block.getType() == Material.BEDROCK) return;
if(y <= world.getMinHeight() || block.getType() == Material.BEDROCK) return;
futureBlockChanges.put(block, block.getBlockData());
@ -149,8 +149,8 @@ public class CommandObject implements DecreeExecutor {
@Decree(description = "Check the composition of an object")
public void analyze(
@Param(description = "The object to analyze", customHandler = ObjectHandler.class)
String object
@Param(description = "The object to analyze", customHandler = ObjectHandler.class)
String object
) {
IrisObject o = IrisData.loadAnyObject(object);
sender().sendMessage("Object Size: " + o.getW() + " * " + o.getH() + " * " + o.getD() + "");
@ -160,19 +160,19 @@ public class CommandObject implements DecreeExecutor {
Map<Material, Set<BlockData>> unsorted = new HashMap<>();
Map<BlockData, Integer> amounts = new HashMap<>();
Map<Material, Integer> materials = new HashMap<>();
while (queue.hasNext()) {
while(queue.hasNext()) {
BlockData block = queue.next();
//unsorted.put(block.getMaterial(), block);
if (!amounts.containsKey(block)) {
if(!amounts.containsKey(block)) {
amounts.put(block, 1);
} else
amounts.put(block, amounts.get(block) + 1);
if (!materials.containsKey(block.getMaterial())) {
if(!materials.containsKey(block.getMaterial())) {
materials.put(block.getMaterial(), 1);
unsorted.put(block.getMaterial(), new HashSet<>());
unsorted.get(block.getMaterial()).add(block);
@ -184,13 +184,13 @@ public class CommandObject implements DecreeExecutor {
}
List<Material> sortedMatsList = amounts.keySet().stream().map(BlockData::getMaterial)
.sorted().collect(Collectors.toList());
.sorted().collect(Collectors.toList());
Set<Material> sortedMats = new TreeSet<>(Comparator.comparingInt(materials::get).reversed());
sortedMats.addAll(sortedMatsList);
sender().sendMessage("== Blocks in object ==");
int n = 0;
for (Material mat : sortedMats) {
for(Material mat : sortedMats) {
int amount = materials.get(mat);
List<BlockData> set = new ArrayList<>(unsorted.get(mat));
set.sort(Comparator.comparingInt(amounts::get).reversed());
@ -198,17 +198,17 @@ public class CommandObject implements DecreeExecutor {
int dataAmount = amounts.get(data);
String string = " - " + mat.toString() + "*" + amount;
if (data.getAsString(true).contains("[")) {
if(data.getAsString(true).contains("[")) {
string = string + " --> [" + data.getAsString(true).split("\\[")[1]
.replaceAll("true", ChatColor.GREEN + "true" + ChatColor.GRAY)
.replaceAll("false", ChatColor.RED + "false" + ChatColor.GRAY) + "*" + dataAmount;
.replaceAll("true", ChatColor.GREEN + "true" + ChatColor.GRAY)
.replaceAll("false", ChatColor.RED + "false" + ChatColor.GRAY) + "*" + dataAmount;
}
sender().sendMessage(string);
n++;
if (n >= 10) {
if(n >= 10) {
sender().sendMessage(" + " + (sortedMats.size() - n) + " other block types");
return;
}
@ -223,10 +223,10 @@ public class CommandObject implements DecreeExecutor {
@Decree(description = "Contract a selection based on your looking direction", aliases = "-")
public void contract(
@Param(description = "The amount to inset by", defaultValue = "1")
int amount
@Param(description = "The amount to inset by", defaultValue = "1")
int amount
) {
if (!WandSVC.isHoldingWand(player())) {
if(!WandSVC.isHoldingWand(player())) {
sender().sendMessage("Hold your wand.");
return;
}
@ -248,20 +248,20 @@ public class CommandObject implements DecreeExecutor {
@Decree(description = "Set point 1 to look", aliases = "p1")
public void position1(
@Param(description = "Whether to use your current position, or where you look", defaultValue = "true")
boolean here
@Param(description = "Whether to use your current position, or where you look", defaultValue = "true")
boolean here
) {
if (!WandSVC.isHoldingWand(player())) {
if(!WandSVC.isHoldingWand(player())) {
sender().sendMessage("Ready your Wand.");
return;
}
ItemStack wand = player().getInventory().getItemInMainHand();
if (WandSVC.isWand(wand)) {
if(WandSVC.isWand(wand)) {
Location[] g = WandSVC.getCuboid(wand);
if (!here) {
if(!here) {
// TODO: WARNING HEIGHT
g[1] = player().getTargetBlock(null, 256).getLocation().clone();
} else {
@ -273,20 +273,20 @@ public class CommandObject implements DecreeExecutor {
@Decree(description = "Set point 2 to look", aliases = "p2")
public void position2(
@Param(description = "Whether to use your current position, or where you look", defaultValue = "true")
boolean here
@Param(description = "Whether to use your current position, or where you look", defaultValue = "true")
boolean here
) {
if (!WandSVC.isHoldingWand(player())) {
if(!WandSVC.isHoldingWand(player())) {
sender().sendMessage("Ready your Wand.");
return;
}
ItemStack wand = player().getInventory().getItemInMainHand();
if (WandSVC.isWand(wand)) {
if(WandSVC.isWand(wand)) {
Location[] g = WandSVC.getCuboid(wand);
if (!here) {
if(!here) {
// TODO: WARNING HEIGHT
g[0] = player().getTargetBlock(null, 256).getLocation().clone();
} else {
@ -298,21 +298,21 @@ public class CommandObject implements DecreeExecutor {
@Decree(description = "Paste an object", sync = true)
public void paste(
@Param(description = "The object to paste", customHandler = ObjectHandler.class)
String object,
@Param(description = "Whether or not to edit the object (need to hold wand)", defaultValue = "false")
boolean edit,
@Param(description = "The amount of degrees to rotate by", defaultValue = "0")
int rotate,
@Param(description = "The factor by which to scale the object placement", defaultValue = "1")
double scale
@Param(description = "The object to paste", customHandler = ObjectHandler.class)
String object,
@Param(description = "Whether or not to edit the object (need to hold wand)", defaultValue = "false")
boolean edit,
@Param(description = "The amount of degrees to rotate by", defaultValue = "0")
int rotate,
@Param(description = "The factor by which to scale the object placement", defaultValue = "1")
double scale
// ,
// @Param(description = "The scale interpolator to use", defaultValue = "none")
// IrisObjectPlacementScaleInterpolator interpolator
) {
IrisObject o = IrisData.loadAnyObject(object);
double maxScale = Double.max(10 - o.getBlocks().size() / 10000d, 1);
if (scale > maxScale) {
if(scale > maxScale) {
sender().sendMessage(C.YELLOW + "Indicated scale exceeds maximum. Downscaled to maximum: " + maxScale);
scale = maxScale;
}
@ -332,16 +332,16 @@ public class CommandObject implements DecreeExecutor {
Iris.service(ObjectSVC.class).addChanges(futureChanges);
if (edit) {
if(edit) {
ItemStack newWand = WandSVC.createWand(block.clone().subtract(o.getCenter()).add(o.getW() - 1,
o.getH() + o.getCenter().clone().getY() - 1, o.getD() - 1), block.clone().subtract(o.getCenter().clone().setY(0)));
if (WandSVC.isWand(wand)) {
o.getH() + o.getCenter().clone().getY() - 1, o.getD() - 1), block.clone().subtract(o.getCenter().clone().setY(0)));
if(WandSVC.isWand(wand)) {
wand = newWand;
player().getInventory().setItemInMainHand(wand);
sender().sendMessage("Updated wand for " + "objects/" + o.getLoadKey() + ".iob ");
} else {
int slot = WandSVC.findWand(player().getInventory());
if (slot == -1) {
if(slot == -1) {
player().getInventory().addItem(newWand);
sender().sendMessage("Given new wand for " + "objects/" + o.getLoadKey() + ".iob ");
} else {
@ -356,29 +356,29 @@ public class CommandObject implements DecreeExecutor {
@Decree(description = "Save an object")
public void save(
@Param(description = "The dimension to store the object in", contextual = true)
IrisDimension dimension,
@Param(description = "The file to store it in, can use / for subfolders")
String name,
@Param(description = "Overwrite existing object files", defaultValue = "false", aliases = "force")
boolean overwrite
@Param(description = "The dimension to store the object in", contextual = true)
IrisDimension dimension,
@Param(description = "The file to store it in, can use / for subfolders")
String name,
@Param(description = "Overwrite existing object files", defaultValue = "false", aliases = "force")
boolean overwrite
) {
IrisObject o = WandSVC.createSchematic(player().getInventory().getItemInMainHand());
if (o == null) {
if(o == null) {
sender().sendMessage(C.YELLOW + "You need to hold your wand!");
return;
}
File file = Iris.service(StudioSVC.class).getWorkspaceFile(dimension.getLoadKey(), "objects", name + ".iob");
if (file.exists() && !overwrite) {
if(file.exists() && !overwrite) {
sender().sendMessage(C.RED + "File already exists. Set overwrite=true to overwrite it.");
return;
}
try {
o.write(file);
} catch (IOException e) {
} catch(IOException e) {
sender().sendMessage(C.RED + "Failed to save object because of an IOException: " + e.getMessage());
Iris.reportError(e);
}
@ -389,10 +389,10 @@ public class CommandObject implements DecreeExecutor {
@Decree(description = "Shift a selection in your looking direction", aliases = "-")
public void shift(
@Param(description = "The amount to shift by", defaultValue = "1")
int amount
@Param(description = "The amount to shift by", defaultValue = "1")
int amount
) {
if (!WandSVC.isHoldingWand(player())) {
if(!WandSVC.isHoldingWand(player())) {
sender().sendMessage("Hold your wand.");
return;
}
@ -413,8 +413,8 @@ public class CommandObject implements DecreeExecutor {
@Decree(description = "Undo a number of pastes", aliases = "-")
public void undo(
@Param(description = "The amount of pastes to undo", defaultValue = "1")
int amount
@Param(description = "The amount of pastes to undo", defaultValue = "1")
int amount
) {
ObjectSVC service = Iris.service(ObjectSVC.class);
int actualReverts = Math.min(service.getUndos().size(), amount);
@ -431,7 +431,7 @@ public class CommandObject implements DecreeExecutor {
@Decree(name = "x&y", description = "Autoselect up, down & out", sync = true)
public void xay() {
if (!WandSVC.isHoldingWand(player())) {
if(!WandSVC.isHoldingWand(player())) {
sender().sendMessage(C.YELLOW + "Hold your wand!");
return;
}
@ -444,7 +444,7 @@ public class CommandObject implements DecreeExecutor {
Cuboid cursor = new Cuboid(a1, a2);
Cuboid cursorx = new Cuboid(a1, a2);
while (!cursor.containsOnly(Material.AIR)) {
while(!cursor.containsOnly(Material.AIR)) {
a1.add(new org.bukkit.util.Vector(0, 1, 0));
a2.add(new org.bukkit.util.Vector(0, 1, 0));
cursor = new Cuboid(a1, a2);
@ -453,7 +453,7 @@ public class CommandObject implements DecreeExecutor {
a1.add(new org.bukkit.util.Vector(0, -1, 0));
a2.add(new org.bukkit.util.Vector(0, -1, 0));
while (!cursorx.containsOnly(Material.AIR)) {
while(!cursorx.containsOnly(Material.AIR)) {
a1x.add(new org.bukkit.util.Vector(0, -1, 0));
a2x.add(new org.bukkit.util.Vector(0, -1, 0));
cursorx = new Cuboid(a1x, a2x);
@ -478,7 +478,7 @@ public class CommandObject implements DecreeExecutor {
@Decree(name = "x+y", description = "Autoselect up & out", sync = true)
public void xpy() {
if (!WandSVC.isHoldingWand(player())) {
if(!WandSVC.isHoldingWand(player())) {
sender().sendMessage(C.YELLOW + "Hold your wand!");
return;
}
@ -490,7 +490,7 @@ public class CommandObject implements DecreeExecutor {
Location a2 = b[1].clone();
Cuboid cursor = new Cuboid(a1, a2);
while (!cursor.containsOnly(Material.AIR)) {
while(!cursor.containsOnly(Material.AIR)) {
a1.add(new Vector(0, 1, 0));
a2.add(new Vector(0, 1, 0));
cursor = new Cuboid(a1, a2);

View File

@ -34,30 +34,30 @@ import org.bukkit.util.Vector;
public class CommandPregen implements DecreeExecutor {
@Decree(description = "Pregenerate a world")
public void start(
@Param(description = "The radius of the pregen in blocks", aliases = "size")
int radius,
@Param(description = "The world to pregen", contextual = true)
World world,
@Param(aliases = "middle", description = "The center location of the pregen. Use \"me\" for your current location", defaultValue = "0,0")
Vector center
@Param(description = "The radius of the pregen in blocks", aliases = "size")
int radius,
@Param(description = "The world to pregen", contextual = true)
World world,
@Param(aliases = "middle", description = "The center location of the pregen. Use \"me\" for your current location", defaultValue = "0,0")
Vector center
) {
try {
if (sender().isPlayer() && access() == null) {
if(sender().isPlayer() && access() == null) {
sender().sendMessage(C.RED + "The engine access for this world is null!");
sender().sendMessage(C.RED + "Please make sure the world is loaded & the engine is initialized. Generate a new chunk, for example.");
}
radius = Math.max(radius, 1024);
int w = (radius >> 9 + 1) * 2;
IrisToolbelt.pregenerate(PregenTask
.builder()
.center(new Position2(center))
.width(w)
.height(w)
.build(), world);
.builder()
.center(new Position2(center))
.width(w)
.height(w)
.build(), world);
String msg = C.GREEN + "Pregen started in " + C.GOLD + world.getName() + C.GREEN + " of " + C.GOLD + (radius * 2) + C.GREEN + " by " + C.GOLD + (radius * 2) + C.GREEN + " blocks from " + C.GOLD + center.getX() + "," + center.getZ();
sender().sendMessage(msg);
Iris.info(msg);
} catch (Throwable e) {
} catch(Throwable e) {
sender().sendMessage(C.RED + "Epic fail. See console.");
Iris.reportError(e);
e.printStackTrace();
@ -66,7 +66,7 @@ public class CommandPregen implements DecreeExecutor {
@Decree(description = "Stop the active pregeneration task", aliases = "x")
public void stop() {
if (PregeneratorJob.shutdownInstance()) {
if(PregeneratorJob.shutdownInstance()) {
sender().sendMessage(C.GREEN + "Stopped pregeneration task");
} else {
sender().sendMessage(C.YELLOW + "No active pregeneration tasks to stop");
@ -75,7 +75,7 @@ public class CommandPregen implements DecreeExecutor {
@Decree(description = "Pause / continue the active pregeneration task", aliases = {"t", "resume", "unpause"})
public void pause() {
if (PregeneratorJob.pauseResume()) {
if(PregeneratorJob.pauseResume()) {
sender().sendMessage(C.GREEN + "Paused/unpaused pregeneration task, now: " + (PregeneratorJob.isPaused() ? "Paused" : "Running") + ".");
} else {
sender().sendMessage(C.YELLOW + "No active pregeneration tasks to pause/unpause.");

View File

@ -23,7 +23,6 @@ import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.core.gui.NoiseExplorerGUI;
import com.volmit.iris.core.gui.VisionGUI;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.core.loader.IrisRegistrant;
import com.volmit.iris.core.project.IrisProject;
import com.volmit.iris.core.service.ConversionSVC;
import com.volmit.iris.core.service.StudioSVC;
@ -82,7 +81,6 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.util.BlockVector;
import org.bukkit.util.Vector;
import java.awt.Desktop;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
@ -102,38 +100,39 @@ public class CommandStudio implements DecreeExecutor {
public static String hrf(Duration duration) {
return duration.toString().substring(2).replaceAll("(\\d[HMS])(?!$)", "$1 ").toLowerCase();
}
private CommandFind find;
private CommandEdit edit;
@Decree(description = "Download a project.", aliases = "dl")
public void download(
@Param(name = "pack", description = "The pack to download", defaultValue = "overworld", aliases = "project")
String pack,
@Param(name = "branch", description = "The branch to download from", defaultValue = "master")
String branch,
@Param(name = "trim", description = "Whether or not to download a trimmed version (do not enable when editing)", defaultValue = "false")
boolean trim,
@Param(name = "overwrite", description = "Whether or not to overwrite the pack with the downloaded one", aliases = "force", defaultValue = "false")
boolean overwrite
@Param(name = "pack", description = "The pack to download", defaultValue = "overworld", aliases = "project")
String pack,
@Param(name = "branch", description = "The branch to download from", defaultValue = "master")
String branch,
@Param(name = "trim", description = "Whether or not to download a trimmed version (do not enable when editing)", defaultValue = "false")
boolean trim,
@Param(name = "overwrite", description = "Whether or not to overwrite the pack with the downloaded one", aliases = "force", defaultValue = "false")
boolean overwrite
) {
new CommandIris().download(pack, branch, trim, overwrite);
}
@Decree(description = "Open a new studio world", aliases = "o", sync = true)
public void open(
@Param(defaultValue = "overworld", description = "The dimension to open a studio for", aliases = "dim")
IrisDimension dimension,
@Param(defaultValue = "1337", description = "The seed to generate the studio with", aliases = "s")
long seed) {
@Param(defaultValue = "overworld", description = "The dimension to open a studio for", aliases = "dim")
IrisDimension dimension,
@Param(defaultValue = "1337", description = "The seed to generate the studio with", aliases = "s")
long seed) {
sender().sendMessage(C.GREEN + "Opening studio for the \"" + dimension.getName() + "\" pack (seed: " + seed + ")");
Iris.service(StudioSVC.class).open(sender(), seed, dimension.getLoadKey());
}
@Decree(description = "Open VSCode for a dimension", aliases = {"vsc", "edit"})
public void vscode(
@Param(defaultValue = "overworld", description = "The dimension to open VSCode for", aliases = "dim")
IrisDimension dimension
@Param(defaultValue = "overworld", description = "The dimension to open VSCode for", aliases = "dim")
IrisDimension dimension
) {
sender().sendMessage(C.GREEN + "Opening VSCode for the \"" + dimension.getName() + "\" pack");
Iris.service(StudioSVC.class).openVSCode(sender(), dimension.getLoadKey());
@ -141,7 +140,7 @@ public class CommandStudio implements DecreeExecutor {
@Decree(description = "Close an open studio project", aliases = {"x", "c"}, sync = true)
public void close() {
if (!Iris.service(StudioSVC.class).isProjectOpen()) {
if(!Iris.service(StudioSVC.class).isProjectOpen()) {
sender().sendMessage(C.RED + "No open studio projects.");
return;
}
@ -152,11 +151,11 @@ public class CommandStudio implements DecreeExecutor {
@Decree(description = "Create a new studio project", aliases = "+", sync = true)
public void create(
@Param(description = "The name of this new Iris Project.")
String name,
@Param(description = "Copy the contents of an existing project in your packs folder and use it as a template in this new project.", contextual = true)
IrisDimension template) {
if (template != null) {
@Param(description = "The name of this new Iris Project.")
String name,
@Param(description = "Copy the contents of an existing project in your packs folder and use it as a template in this new project.", contextual = true)
IrisDimension template) {
if(template != null) {
Iris.service(StudioSVC.class).create(sender(), name, template.getLoadKey());
} else {
Iris.service(StudioSVC.class).create(sender(), name);
@ -165,17 +164,17 @@ public class CommandStudio implements DecreeExecutor {
@Decree(description = "Clean an Iris Project, optionally beautifying JSON & fixing block ids with missing keys. Also rebuilds the vscode schemas. ")
public void clean(
@Param(description = "The project to update", contextual = true)
IrisDimension project,
@Param(description = "The project to update", contextual = true)
IrisDimension project,
@Param(defaultValue = "true", description = "Filters all valid JSON files with a beautifier (indentation: 4)")
boolean beautify,
@Param(defaultValue = "true", description = "Filters all valid JSON files with a beautifier (indentation: 4)")
boolean beautify,
@Param(name = "fix-ids", defaultValue = "true", description = "Fixes any block ids used such as \"dirt\" will be converted to \"minecraft:dirt\"")
boolean fixIds,
@Param(name = "fix-ids", defaultValue = "true", description = "Fixes any block ids used such as \"dirt\" will be converted to \"minecraft:dirt\"")
boolean fixIds,
@Param(name = "rewrite-objects", defaultValue = "false", description = "Imports all objects and re-writes them cleaning up positions & block data in the process.")
boolean rewriteObjects
@Param(name = "rewrite-objects", defaultValue = "false", description = "Imports all objects and re-writes them cleaning up positions & block data in the process.")
boolean rewriteObjects
) {
KList<Job> jobs = new KList<>();
KList<File> files = new KList<File>();
@ -183,7 +182,7 @@ public class CommandStudio implements DecreeExecutor {
MultiBurst burst = MultiBurst.burst;
jobs.add(new SingleJob("Updating Workspace", () -> {
if (!new IrisProject(Iris.service(StudioSVC.class).getWorkspaceFolder(project.getLoadKey())).updateWorkspace()) {
if(!new IrisProject(Iris.service(StudioSVC.class).getWorkspaceFolder(project.getLoadKey())).updateWorkspace()) {
sender().sendMessage(C.GOLD + "Invalid project: " + project.getLoadKey() + ". Try deleting the code-workspace file and try again.");
}
J.sleep(250);
@ -191,7 +190,7 @@ public class CommandStudio implements DecreeExecutor {
sender().sendMessage("Files: " + files.size());
if (fixIds) {
if(fixIds) {
QueueJob<File> r = new QueueJob<>() {
@Override
public void execute(File f) {
@ -201,7 +200,7 @@ public class CommandStudio implements DecreeExecutor {
J.sleep(1);
IO.writeAll(f, p.toString(4));
} catch (IOException e) {
} catch(IOException e) {
e.printStackTrace();
}
}
@ -216,7 +215,7 @@ public class CommandStudio implements DecreeExecutor {
jobs.add(r);
}
if (beautify) {
if(beautify) {
QueueJob<File> r = new QueueJob<>() {
@Override
public void execute(File f) {
@ -224,7 +223,7 @@ public class CommandStudio implements DecreeExecutor {
JSONObject p = new JSONObject(IO.readAll(f));
IO.writeAll(f, p.toString(4));
J.sleep(1);
} catch (IOException e) {
} catch(IOException e) {
e.printStackTrace();
}
}
@ -239,7 +238,7 @@ public class CommandStudio implements DecreeExecutor {
jobs.add(r);
}
if (rewriteObjects) {
if(rewriteObjects) {
QueueJob<Runnable> q = new QueueJob<>() {
@Override
public void execute(Runnable runnable) {
@ -254,20 +253,20 @@ public class CommandStudio implements DecreeExecutor {
};
IrisData data = IrisData.get(Iris.service(StudioSVC.class).getWorkspaceFolder(project.getLoadKey()));
for (String f : data.getObjectLoader().getPossibleKeys()) {
for(String f : data.getObjectLoader().getPossibleKeys()) {
Future<?> gg = burst.complete(() -> {
File ff = data.getObjectLoader().findFile(f);
IrisObject oo = new IrisObject(0, 0, 0);
try {
oo.read(ff);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.error("FAILER TO READ: " + f);
return;
}
try {
oo.write(ff);
} catch (IOException e) {
} catch(IOException e) {
Iris.error("FAILURE TO WRITE: " + oo.getLoadFile());
}
});
@ -275,7 +274,7 @@ public class CommandStudio implements DecreeExecutor {
q.queue(() -> {
try {
gg.get();
} catch (InterruptedException | ExecutionException e) {
} catch(InterruptedException | ExecutionException e) {
e.printStackTrace();
}
});
@ -289,8 +288,8 @@ public class CommandStudio implements DecreeExecutor {
@Decree(description = "Get the version of a pack")
public void version(
@Param(defaultValue = "overworld", description = "The dimension get the version of", aliases = "dim", contextual = true)
IrisDimension dimension
@Param(defaultValue = "overworld", description = "The dimension get the version of", aliases = "dim", contextual = true)
IrisDimension dimension
) {
sender().sendMessage(C.GREEN + "The \"" + dimension.getName() + "\" pack has version: " + dimension.getVersion());
}
@ -301,25 +300,24 @@ public class CommandStudio implements DecreeExecutor {
}
@Decree(description = "Execute a script", aliases = "run", origin = DecreeOrigin.PLAYER)
public void execute(
@Param(description = "The script to run")
IrisScript script
@Param(description = "The script to run")
IrisScript script
) {
engine().getExecution().execute(script.getLoadKey());
}
@Decree(description = "Open the noise explorer (External GUI)", aliases = {"nmap", "n"})
public void noise() {
if (noGUI()) return;
if(noGUI()) return;
sender().sendMessage(C.GREEN + "Opening Noise Explorer!");
NoiseExplorerGUI.launch();
}
@Decree(description = "Charges all spawners in the area", aliases = "zzt", origin = DecreeOrigin.PLAYER)
public void charge() {
if (!IrisToolbelt.isIrisWorld(world())) {
if(!IrisToolbelt.isIrisWorld(world())) {
sender().sendMessage(C.RED + "You must be in an Iris world to charge spawners!");
return;
}
@ -329,17 +327,17 @@ public class CommandStudio implements DecreeExecutor {
@Decree(description = "Preview noise gens (External GUI)", aliases = {"generator", "gen"})
public void explore(
@Param(description = "The generator to explore", contextual = true)
IrisGenerator generator,
@Param(description = "The seed to generate with", defaultValue = "12345")
long seed
@Param(description = "The generator to explore", contextual = true)
IrisGenerator generator,
@Param(description = "The seed to generate with", defaultValue = "12345")
long seed
) {
if (noGUI()) return;
if(noGUI()) return;
sender().sendMessage(C.GREEN + "Opening Noise Explorer!");
Supplier<Function2<Double, Double, Double>> l = () -> {
if (generator == null) {
if(generator == null) {
return (x, z) -> 0D;
}
@ -350,7 +348,7 @@ public class CommandStudio implements DecreeExecutor {
@Decree(description = "Hotload a studio", aliases = {"reload", "h"})
public void hotload() {
if (!Iris.service(StudioSVC.class).isProjectOpen()) {
if(!Iris.service(StudioSVC.class).isProjectOpen()) {
sender().sendMessage(C.RED + "No studio world open!");
return;
}
@ -360,19 +358,19 @@ public class CommandStudio implements DecreeExecutor {
@Decree(description = "Show loot if a chest were right here", origin = DecreeOrigin.PLAYER, sync = true)
public void loot(
@Param(description = "Fast insertion of items in virtual inventory (may cause performance drop)", defaultValue = "false")
boolean fast,
@Param(description = "Whether or not to append to the inventory currently open (if false, clears opened inventory)", defaultValue = "true")
boolean add
@Param(description = "Fast insertion of items in virtual inventory (may cause performance drop)", defaultValue = "false")
boolean fast,
@Param(description = "Whether or not to append to the inventory currently open (if false, clears opened inventory)", defaultValue = "true")
boolean add
) {
if (noStudio()) return;
if(noStudio()) return;
KList<IrisLootTable> tables = engine().getLootTables(RNG.r, player().getLocation().getBlock());
Inventory inv = Bukkit.createInventory(null, 27 * 2);
try {
engine().addItems(true, inv, RNG.r, tables, InventorySlotType.STORAGE, player().getLocation().getBlockX(), player().getLocation().getBlockY(), player().getLocation().getBlockZ(), 1);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
sender().sendMessage(C.RED + "Cannot add items to virtual inventory because of: " + e.getMessage());
return;
@ -384,13 +382,13 @@ public class CommandStudio implements DecreeExecutor {
ta.set(Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, () ->
{
if (!player().getOpenInventory().getType().equals(InventoryType.CHEST)) {
if(!player().getOpenInventory().getType().equals(InventoryType.CHEST)) {
Bukkit.getScheduler().cancelTask(ta.get());
sender().sendMessage(C.GREEN + "Opened inventory!");
return;
}
if (!add) {
if(!add) {
inv.clear();
}
@ -403,12 +401,12 @@ public class CommandStudio implements DecreeExecutor {
@Decree(description = "Render a world map (External GUI)", aliases = "render")
public void map(
@Param(name = "world", description = "The world to open the generator for", contextual = true)
@Param(name = "world", description = "The world to open the generator for", contextual = true)
World world
) {
if (noGUI()) return;
if(noGUI()) return;
if (!IrisToolbelt.isIrisWorld(world)) {
if(!IrisToolbelt.isIrisWorld(world)) {
sender().sendMessage(C.RED + "You need to be in or specify an Iris-generated world!");
return;
}
@ -419,20 +417,20 @@ public class CommandStudio implements DecreeExecutor {
@Decree(description = "Package a dimension into a compressed format", aliases = "package")
public void pkg(
@Param(name = "dimension", description = "The dimension pack to compress", contextual = true, defaultValue = "overworld")
IrisDimension dimension,
@Param(name = "obfuscate", description = "Whether or not to obfuscate the pack", defaultValue = "false")
boolean obfuscate,
@Param(name = "minify", description = "Whether or not to minify the pack", defaultValue = "true")
boolean minify
@Param(name = "dimension", description = "The dimension pack to compress", contextual = true, defaultValue = "overworld")
IrisDimension dimension,
@Param(name = "obfuscate", description = "Whether or not to obfuscate the pack", defaultValue = "false")
boolean obfuscate,
@Param(name = "minify", description = "Whether or not to minify the pack", defaultValue = "true")
boolean minify
) {
Iris.service(StudioSVC.class).compilePackage(sender(), dimension.getLoadKey(), obfuscate, minify);
}
@Decree(description = "Profiles the performance of a dimension", origin = DecreeOrigin.PLAYER)
public void profile(
@Param(description = "The dimension to profile", contextual = true, defaultValue = "overworld")
IrisDimension dimension
@Param(description = "The dimension to profile", contextual = true, defaultValue = "overworld")
IrisDimension dimension
) {
File pack = dimension.getLoadFile().getParentFile().getParentFile();
File report = Iris.instance.getDataFile("profile.txt");
@ -449,17 +447,17 @@ public class CommandStudio implements DecreeExecutor {
sender().sendMessage("Calculating Performance Metrics for Noise generators");
for (NoiseStyle i : NoiseStyle.values()) {
for(NoiseStyle i : NoiseStyle.values()) {
CNG c = i.create(new RNG(i.hashCode()));
for (int j = 0; j < 3000; j++) {
for(int j = 0; j < 3000; j++) {
c.noise(j, j + 1000, j * j);
c.noise(j, -j);
}
PrecisionStopwatch px = PrecisionStopwatch.start();
for (int j = 0; j < 100000; j++) {
for(int j = 0; j < 100000; j++) {
c.noise(j, j + 1000, j * j);
c.noise(j, -j);
}
@ -469,7 +467,7 @@ public class CommandStudio implements DecreeExecutor {
fileText.add("Noise Style Performance Impacts: ");
for (NoiseStyle i : styleTimings.sortKNumber()) {
for(NoiseStyle i : styleTimings.sortKNumber()) {
fileText.add(i.name() + ": " + styleTimings.get(i));
}
@ -477,20 +475,20 @@ public class CommandStudio implements DecreeExecutor {
sender().sendMessage("Calculating Interpolator Timings...");
for (InterpolationMethod i : InterpolationMethod.values()) {
for(InterpolationMethod i : InterpolationMethod.values()) {
IrisInterpolator in = new IrisInterpolator();
in.setFunction(i);
in.setHorizontalScale(8);
NoiseProvider np = (x, z) -> Math.random();
for (int j = 0; j < 3000; j++) {
for(int j = 0; j < 3000; j++) {
in.interpolate(j, -j, np);
}
PrecisionStopwatch px = PrecisionStopwatch.start();
for (int j = 0; j < 100000; j++) {
for(int j = 0; j < 100000; j++) {
in.interpolate(j + 10000, -j - 100000, np);
}
@ -499,7 +497,7 @@ public class CommandStudio implements DecreeExecutor {
fileText.add("Noise Interpolator Performance Impacts: ");
for (InterpolationMethod i : interpolatorTimings.sortKNumber()) {
for(InterpolationMethod i : interpolatorTimings.sortKNumber()) {
fileText.add(i.name() + ": " + interpolatorTimings.get(i));
}
@ -509,13 +507,13 @@ public class CommandStudio implements DecreeExecutor {
KMap<String, KList<String>> btx = new KMap<>();
for (String i : data.getGeneratorLoader().getPossibleKeys()) {
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) {
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()));
@ -529,7 +527,7 @@ public class CommandStudio implements DecreeExecutor {
fileText.add("Project Generator Performance Impacts: ");
for (String i : generatorTimings.sortKNumber()) {
for(String i : generatorTimings.sortKNumber()) {
fileText.add(i + ": " + generatorTimings.get(i));
btx.get(i).forEach((ii) -> fileText.add(" " + ii));
@ -539,13 +537,13 @@ public class CommandStudio implements DecreeExecutor {
KMap<String, KList<String>> bt = new KMap<>();
for (String i : data.getBiomeLoader().getPossibleKeys()) {
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()) {
for(IrisBiomePaletteLayer j : b.getLayers()) {
m++;
score += styleTimings.get(j.getStyle().getStyle());
vv.add("Palette Layer " + m + ": " + styleTimings.get(j.getStyle().getStyle()));
@ -561,7 +559,7 @@ public class CommandStudio implements DecreeExecutor {
fileText.add("Project Biome Performance Impacts: ");
for (String i : biomeTimings.sortKNumber()) {
for(String i : biomeTimings.sortKNumber()) {
fileText.add(i + ": " + biomeTimings.get(i));
bt.get(i).forEach((ff) -> fileText.add(" " + ff));
@ -569,7 +567,7 @@ public class CommandStudio implements DecreeExecutor {
fileText.add("");
for (String i : data.getRegionLoader().getPossibleKeys()) {
for(String i : data.getRegionLoader().getPossibleKeys()) {
IrisRegion b = data.getRegionLoader().load(i);
double score = 0;
@ -580,25 +578,25 @@ public class CommandStudio implements DecreeExecutor {
fileText.add("Project Region Performance Impacts: ");
for (String i : regionTimings.sortKNumber()) {
for(String i : regionTimings.sortKNumber()) {
fileText.add(i + ": " + regionTimings.get(i));
}
fileText.add("");
double m = 0;
for (double i : biomeTimings.v()) {
for(double i : biomeTimings.v()) {
m += i;
}
m /= biomeTimings.size();
double mm = 0;
for (double i : generatorTimings.v()) {
for(double i : generatorTimings.v()) {
mm += i;
}
mm /= generatorTimings.size();
m += mm;
double mmm = 0;
for (double i : regionTimings.v()) {
for(double i : regionTimings.v()) {
mmm += i;
}
mmm /= regionTimings.size();
@ -609,7 +607,7 @@ public class CommandStudio implements DecreeExecutor {
try {
IO.writeAll(report, fileText.toString("\n"));
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -619,12 +617,12 @@ public class CommandStudio implements DecreeExecutor {
@Decree(description = "Summon an Iris Entity", origin = DecreeOrigin.PLAYER)
public void summon(
@Param(description = "The Iris Entity to spawn")
IrisEntity entity,
@Param(description = "The location at which to spawn the entity", defaultValue = "self")
Vector location
@Param(description = "The Iris Entity to spawn")
IrisEntity entity,
@Param(description = "The location at which to spawn the entity", defaultValue = "self")
Vector location
) {
if (!sender().isPlayer()) {
if(!sender().isPlayer()) {
sender().sendMessage(C.RED + "Players only (this is a config error. Ask support to add DecreeOrigin.PLAYER to the command you tried to run)");
return;
}
@ -635,12 +633,12 @@ public class CommandStudio implements DecreeExecutor {
@Decree(description = "Teleport to the active studio world", aliases = "stp", origin = DecreeOrigin.PLAYER, sync = true)
public void tpstudio() {
if (!Iris.service(StudioSVC.class).isProjectOpen()) {
if(!Iris.service(StudioSVC.class).isProjectOpen()) {
sender().sendMessage(C.RED + "No studio world is open!");
return;
}
if (IrisToolbelt.isIrisWorld(world()) && engine().isStudio()) {
if(IrisToolbelt.isIrisWorld(world()) && engine().isStudio()) {
sender().sendMessage(C.RED + "You are already in a studio world!");
return;
}
@ -652,11 +650,11 @@ public class CommandStudio implements DecreeExecutor {
@Decree(description = "Update your dimension projects VSCode workspace")
public void update(
@Param(description = "The dimension to update the workspace of", contextual = true, defaultValue = "overworld")
IrisDimension dimension
@Param(description = "The dimension to update the workspace of", contextual = true, defaultValue = "overworld")
IrisDimension dimension
) {
sender().sendMessage(C.GOLD + "Updating Code Workspace for " + dimension.getName() + "...");
if (new IrisProject(dimension.getLoader().getDataFolder()).updateWorkspace()) {
if(new IrisProject(dimension.getLoader().getDataFolder()).updateWorkspace()) {
sender().sendMessage(C.GREEN + "Updated Code Workspace for " + dimension.getName());
} else {
sender().sendMessage(C.RED + "Invalid project: " + dimension.getName() + ". Try deleting the code-workspace file and try again.");
@ -665,14 +663,14 @@ public class CommandStudio implements DecreeExecutor {
@Decree(aliases = "find-objects", description = "Get information about nearby structures")
public void objects() {
if (!IrisToolbelt.isIrisWorld(player().getWorld())) {
if(!IrisToolbelt.isIrisWorld(player().getWorld())) {
sender().sendMessage(C.RED + "You must be in an Iris world");
return;
}
World world = player().getWorld();
if (!IrisToolbelt.isIrisWorld(world)) {
if(!IrisToolbelt.isIrisWorld(world)) {
sender().sendMessage("You must be in an iris world.");
return;
}
@ -686,7 +684,7 @@ public class CommandStudio implements DecreeExecutor {
int cx = l.getChunk().getX();
int cz = l.getChunk().getZ();
new Spiraler(3, 3, (x, z) -> chunks.addIfMissing(world.getChunkAt(x + cx, z + cz))).drain();
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
@ -704,7 +702,7 @@ public class CommandStudio implements DecreeExecutor {
pw.println("Report Captured At: " + new Date());
pw.println("Chunks: (" + chunks.size() + "): ");
for (Chunk i : chunks) {
for(Chunk i : chunks) {
pw.println("- [" + i.getX() + ", " + i.getZ() + "]");
}
@ -713,19 +711,19 @@ public class CommandStudio implements DecreeExecutor {
String age = "No idea...";
try {
for (File i : Objects.requireNonNull(new File(world.getWorldFolder(), "region").listFiles())) {
if (i.isFile()) {
for(File i : Objects.requireNonNull(new File(world.getWorldFolder(), "region").listFiles())) {
if(i.isFile()) {
size += i.length();
}
}
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
try {
FileTime creationTime = (FileTime) Files.getAttribute(world.getWorldFolder().toPath(), "creationTime");
age = hrf(Duration.of(M.ms() - creationTime.toMillis(), ChronoUnit.MILLIS));
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
}
@ -733,10 +731,10 @@ public class CommandStudio implements DecreeExecutor {
KList<String> caveBiomes = new KList<>();
KMap<String, KMap<String, KList<String>>> objects = new KMap<>();
for (Chunk i : chunks) {
for (int j = 0; j < 16; j += 3) {
for(Chunk i : chunks) {
for(int j = 0; j < 16; j += 3) {
for (int k = 0; k < 16; k += 3) {
for(int k = 0; k < 16; k += 3) {
assert engine() != null;
IrisBiome bb = engine().getSurfaceBiome((i.getX() * 16) + j, (i.getZ() * 16) + k);
@ -763,20 +761,20 @@ public class CommandStudio implements DecreeExecutor {
pw.println("== Biome Info ==");
pw.println("Found " + biomes.size() + " Biome(s): ");
for (String i : biomes) {
for(String i : biomes) {
pw.println("- " + i);
}
pw.println();
pw.println("== Object Info ==");
for (String i : objects.k()) {
for(String i : objects.k()) {
pw.println("- " + i);
for (String j : objects.get(i).k()) {
for(String j : objects.get(i).k()) {
pw.println(" @ " + j);
for (String k : objects.get(i).get(j)) {
for(String k : objects.get(i).get(j)) {
pw.println(" * " + k);
}
}
@ -786,7 +784,7 @@ public class CommandStudio implements DecreeExecutor {
pw.close();
sender().sendMessage("Reported to: " + ff.getPath());
} catch (FileNotFoundException e) {
} catch(FileNotFoundException e) {
e.printStackTrace();
Iris.reportError(e);
}
@ -796,15 +794,15 @@ public class CommandStudio implements DecreeExecutor {
String n1 = bb.getName() + " [" + Form.capitalize(bb.getInferredType().name().toLowerCase()) + "] " + " (" + bb.getLoadFile().getName() + ")";
int m = 0;
KSet<String> stop = new KSet<>();
for (IrisObjectPlacement f : bb.getObjects()) {
for(IrisObjectPlacement f : bb.getObjects()) {
m++;
String n2 = "Placement #" + m + " (" + f.getPlace().size() + " possible objects)";
for (String i : f.getPlace()) {
for(String i : f.getPlace()) {
String nn3 = i + ": [ERROR] Failed to find object!";
try {
if (stop.contains(i)) {
if(stop.contains(i)) {
continue;
}
@ -812,13 +810,13 @@ public class CommandStudio implements DecreeExecutor {
BlockVector sz = IrisObject.sampleSize(ff);
nn3 = i + ": size=[" + sz.getBlockX() + "," + sz.getBlockY() + "," + sz.getBlockZ() + "] location=[" + ff.getPath() + "]";
stop.add(i);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
String n3 = nn3;
objects.computeIfAbsent(n1, (k1) -> new KMap<>())
.computeIfAbsent(n2, (k) -> new KList<>()).addIfMissing(n3);
.computeIfAbsent(n2, (k) -> new KList<>()).addIfMissing(n3);
}
}
}
@ -827,7 +825,7 @@ public class CommandStudio implements DecreeExecutor {
* @return true if server GUIs are not enabled
*/
private boolean noGUI() {
if (!IrisSettings.get().getGui().isUseServerLaunchedGuis()) {
if(!IrisSettings.get().getGui().isUseServerLaunchedGuis()) {
sender().sendMessage(C.RED + "You must have server launched GUIs enabled in the settings!");
return true;
}
@ -838,15 +836,15 @@ public class CommandStudio implements DecreeExecutor {
* @return true if no studio is open or the player is not in one
*/
private boolean noStudio() {
if (!sender().isPlayer()) {
if(!sender().isPlayer()) {
sender().sendMessage(C.RED + "Players only!");
return true;
}
if (!Iris.service(StudioSVC.class).isProjectOpen()) {
if(!Iris.service(StudioSVC.class).isProjectOpen()) {
sender().sendMessage(C.RED + "No studio world is open!");
return true;
}
if (!engine().isStudio()) {
if(!engine().isStudio()) {
sender().sendMessage(C.RED + "You must be in a studio world!");
return true;
}
@ -855,14 +853,14 @@ public class CommandStudio implements DecreeExecutor {
public void files(File clean, KList<File> files) {
if (clean.isDirectory()) {
for (File i : clean.listFiles()) {
if(clean.isDirectory()) {
for(File i : clean.listFiles()) {
files(i, files);
}
} else if (clean.getName().endsWith(".json")) {
} else if(clean.getName().endsWith(".json")) {
try {
files.add(clean);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
Iris.error("Failed to beautify " + clean.getAbsolutePath() + " You may have errors in your json!");
}
@ -870,28 +868,28 @@ public class CommandStudio implements DecreeExecutor {
}
private void fixBlocks(JSONObject obj) {
for (String i : obj.keySet()) {
for(String i : obj.keySet()) {
Object o = obj.get(i);
if (i.equals("block") && o instanceof String && !o.toString().trim().isEmpty() && !o.toString().contains(":")) {
if(i.equals("block") && o instanceof String && !o.toString().trim().isEmpty() && !o.toString().contains(":")) {
obj.put(i, "minecraft:" + o);
}
if (o instanceof JSONObject) {
if(o instanceof JSONObject) {
fixBlocks((JSONObject) o);
} else if (o instanceof JSONArray) {
} else if(o instanceof JSONArray) {
fixBlocks((JSONArray) o);
}
}
}
private void fixBlocks(JSONArray obj) {
for (int i = 0; i < obj.length(); i++) {
for(int i = 0; i < obj.length(); i++) {
Object o = obj.get(i);
if (o instanceof JSONObject) {
if(o instanceof JSONObject) {
fixBlocks((JSONObject) o);
} else if (o instanceof JSONArray) {
} else if(o instanceof JSONArray) {
fixBlocks((JSONArray) o);
}
}

View File

@ -45,16 +45,16 @@ public class CommandWhat implements DecreeExecutor {
public void hand() {
try {
BlockData bd = player().getInventory().getItemInMainHand().getType().createBlockData();
if (!bd.getMaterial().equals(Material.AIR)) {
if(!bd.getMaterial().equals(Material.AIR)) {
sender().sendMessage("Material: " + C.GREEN + bd.getMaterial().name());
sender().sendMessage("Full: " + C.WHITE + bd.getAsString(true));
} else {
sender().sendMessage("Please hold a block/item");
}
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
Material bd = player().getInventory().getItemInMainHand().getType();
if (!bd.equals(Material.AIR)) {
if(!bd.equals(Material.AIR)) {
sender().sendMessage("Material: " + C.GREEN + bd.name());
} else {
sender().sendMessage("Please hold a block/item");
@ -68,14 +68,14 @@ public class CommandWhat implements DecreeExecutor {
IrisBiome b = engine().getBiome(player().getLocation().getBlockX(), player().getLocation().getBlockY(), player().getLocation().getBlockZ());
sender().sendMessage("IBiome: " + b.getLoadKey() + " (" + b.getDerivative().name() + ")");
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
sender().sendMessage("Non-Iris Biome: " + player().getLocation().getBlock().getBiome().name());
if (player().getLocation().getBlock().getBiome().equals(Biome.CUSTOM)) {
if(player().getLocation().getBlock().getBiome().equals(Biome.CUSTOM)) {
try {
sender().sendMessage("Data Pack Biome: " + INMS.get().getTrueBiomeBaseKey(player().getLocation()) + " (ID: " + INMS.get().getTrueBiomeBaseId(INMS.get().getTrueBiomeBase(player().getLocation())) + ")");
} catch (Throwable ee) {
} catch(Throwable ee) {
Iris.reportError(ee);
}
}
@ -87,41 +87,41 @@ public class CommandWhat implements DecreeExecutor {
BlockData bd;
try {
bd = player().getTargetBlockExact(128, FluidCollisionMode.NEVER).getBlockData();
} catch (NullPointerException e) {
} catch(NullPointerException e) {
Iris.reportError(e);
sender().sendMessage("Please look at any block, not at the sky");
bd = null;
}
if (bd != null) {
if(bd != null) {
sender().sendMessage("Material: " + C.GREEN + bd.getMaterial().name());
sender().sendMessage("Full: " + C.WHITE + bd.getAsString(true));
if (B.isStorage(bd)) {
if(B.isStorage(bd)) {
sender().sendMessage(C.YELLOW + "* Storage Block (Loot Capable)");
}
if (B.isLit(bd)) {
if(B.isLit(bd)) {
sender().sendMessage(C.YELLOW + "* Lit Block (Light Capable)");
}
if (B.isFoliage(bd)) {
if(B.isFoliage(bd)) {
sender().sendMessage(C.YELLOW + "* Foliage Block");
}
if (B.isDecorant(bd)) {
if(B.isDecorant(bd)) {
sender().sendMessage(C.YELLOW + "* Decorant Block");
}
if (B.isFluid(bd)) {
if(B.isFluid(bd)) {
sender().sendMessage(C.YELLOW + "* Fluid Block");
}
if (B.isFoliagePlantable(bd)) {
if(B.isFoliagePlantable(bd)) {
sender().sendMessage(C.YELLOW + "* Plantable Foliage Block");
}
if (B.isSolid(bd)) {
if(B.isSolid(bd)) {
sender().sendMessage(C.YELLOW + "* Solid Block");
}
}
@ -131,17 +131,17 @@ public class CommandWhat implements DecreeExecutor {
public void markers(@Param(description = "Marker name such as cave_floor or cave_ceiling") String marker) {
Chunk c = player().getLocation().getChunk();
if (IrisToolbelt.isIrisWorld(c.getWorld())) {
if(IrisToolbelt.isIrisWorld(c.getWorld())) {
int m = 1;
AtomicInteger v = new AtomicInteger(0);
for (int xxx = c.getX() - 4; xxx <= c.getX() + 4; xxx++) {
for (int zzz = c.getZ() - 4; zzz <= c.getZ() + 4; zzz++) {
for(int xxx = c.getX() - 4; xxx <= c.getX() + 4; xxx++) {
for(int zzz = c.getZ() - 4; zzz <= c.getZ() + 4; zzz++) {
IrisToolbelt.access(c.getWorld()).getEngine().getMantle().findMarkers(xxx, zzz, new MatterMarker(marker))
.convert((i) -> i.toLocation(c.getWorld())).forEach((i) -> {
J.s(() -> BlockSignal.of(i.getBlock(), 100));
v.incrementAndGet();
});
.convert((i) -> i.toLocation(c.getWorld())).forEach((i) -> {
J.s(() -> BlockSignal.of(i.getBlock(), 100));
v.incrementAndGet();
});
}
}

View File

@ -52,7 +52,7 @@ public class BlockSignal {
active.decrementAndGet();
BlockData type = block.getBlockData();
MultiBurst.burst.lazy(() -> {
for (Player i : block.getWorld().getPlayers()) {
for(Player i : block.getWorld().getPlayers()) {
i.sendBlockChange(block.getLocation(), block.getBlockData());
}
});
@ -83,7 +83,7 @@ public class BlockSignal {
new SR(20) {
@Override
public void run() {
if (e.isDead()) {
if(e.isDead()) {
cancel();
return;
}
@ -99,7 +99,7 @@ public class BlockSignal {
BlockData type = block.getBlockData();
MultiBurst.burst.lazy(() -> {
for (Player i : block.getWorld().getPlayers()) {
for(Player i : block.getWorld().getPlayers()) {
i.sendBlockChange(block.getLocation(), block.getBlockData());
}
});

View File

@ -50,11 +50,11 @@ public class DustRevealer {
J.s(() -> {
new BlockSignal(world.getBlockAt(block.getX(), block.getY(), block.getZ()), 7);
if (M.r(0.25)) {
if(M.r(0.25)) {
world.playSound(block.toBlock(world).getLocation(), Sound.BLOCK_AMETHYST_BLOCK_CHIME, 1f, RNG.r.f(0.2f, 2f));
}
J.a(() -> {
while (BlockSignal.active.get() > 128) {
while(BlockSignal.active.get() > 128) {
J.sleep(5);
}
@ -85,7 +85,7 @@ public class DustRevealer {
is(new BlockPosition(block.getX() + 1, block.getY() + 1, block.getZ() + 1));
is(new BlockPosition(block.getX() + 1, block.getY() - 1, block.getZ() - 1));
is(new BlockPosition(block.getX() + 1, block.getY() - 1, block.getZ() + 1));
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -97,10 +97,10 @@ public class DustRevealer {
World world = block.getWorld();
Engine access = IrisToolbelt.access(world).getEngine();
if (access != null) {
if(access != null) {
String a = access.getObjectPlacementKey(block.getX(), block.getY(), block.getZ());
if (a != null) {
if(a != null) {
world.playSound(block.getLocation(), Sound.ITEM_LODESTONE_COMPASS_LOCK, 1f, 0.1f);
sender.sendMessage("Found object " + a);
@ -112,7 +112,7 @@ public class DustRevealer {
}
private boolean is(BlockPosition a) {
if (isValidTry(a) && engine.getObjectPlacementKey(a.getX(), a.getY(), a.getZ()) != null && engine.getObjectPlacementKey(a.getX(), a.getY(), a.getZ()).equals(key)) {
if(isValidTry(a) && engine.getObjectPlacementKey(a.getX(), a.getY(), a.getZ()) != null && engine.getObjectPlacementKey(a.getX(), a.getY(), a.getZ()).equals(key)) {
hits.add(a);
new DustRevealer(engine, world, a, key, hits);
return true;

View File

@ -63,7 +63,7 @@ public class JigsawEditor implements Listener {
private Location target;
public JigsawEditor(Player player, IrisJigsawPiece piece, IrisObject object, File saveLocation) {
if (editors.containsKey(player)) {
if(editors.containsKey(player)) {
editors.get(player).close();
}
@ -83,20 +83,20 @@ public class JigsawEditor implements Listener {
@EventHandler
public void on(PlayerMoveEvent e) {
if (e.getPlayer().equals(player)) {
if(e.getPlayer().equals(player)) {
try {
target = player.getTargetBlockExact(7).getLocation();
} catch (Throwable ex) {
} catch(Throwable ex) {
Iris.reportError(ex);
target = player.getLocation();
return;
}
if (cuboid.contains(target)) {
for (IrisPosition i : falling.k()) {
if(cuboid.contains(target)) {
for(IrisPosition i : falling.k()) {
Location at = toLocation(i);
if (at.equals(target)) {
if(at.equals(target)) {
falling.remove(i).run();
}
}
@ -106,43 +106,43 @@ public class JigsawEditor implements Listener {
public Location toLocation(IrisPosition i) {
return origin.clone()
.add(new Vector(i.getX(), i.getY(), i.getZ()))
.add(object.getCenter())
.getBlock()
.getLocation();
.add(new Vector(i.getX(), i.getY(), i.getZ()))
.add(object.getCenter())
.getBlock()
.getLocation();
}
public IrisPosition toPosition(Location l) {
return new IrisPosition(l.clone().getBlock().getLocation()
.subtract(origin.clone())
.subtract(object.getCenter())
.add(1, 1, 1)
.toVector());
.subtract(origin.clone())
.subtract(object.getCenter())
.add(1, 1, 1)
.toVector());
}
@EventHandler
public void on(PlayerInteractEvent e) {
if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
if (e.getClickedBlock() != null && cuboid.contains(e.getClickedBlock().getLocation()) && e.getPlayer().equals(player)) {
if(e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
if(e.getClickedBlock() != null && cuboid.contains(e.getClickedBlock().getLocation()) && e.getPlayer().equals(player)) {
IrisPosition pos = toPosition(e.getClickedBlock().getLocation());
IrisJigsawPieceConnector connector = null;
for (IrisJigsawPieceConnector i : piece.getConnectors()) {
if (i.getPosition().equals(pos)) {
for(IrisJigsawPieceConnector i : piece.getConnectors()) {
if(i.getPosition().equals(pos)) {
connector = i;
break;
}
}
if (!player.isSneaking() && connector == null) {
if(!player.isSneaking() && connector == null) {
connector = new IrisJigsawPieceConnector();
connector.setDirection(IrisDirection.getDirection(e.getBlockFace()));
connector.setPosition(pos);
piece.getConnectors().add(connector);
player.playSound(e.getClickedBlock().getLocation(), Sound.ENTITY_ITEM_FRAME_ADD_ITEM, 1f, 1f);
} else if (player.isSneaking() && connector != null) {
} else if(player.isSneaking() && connector != null) {
piece.getConnectors().remove(connector);
player.playSound(e.getClickedBlock().getLocation(), Sound.ENTITY_ITEM_FRAME_REMOVE_ITEM, 1f, 1f);
} else if (connector != null && !player.isSneaking()) {
} else if(connector != null && !player.isSneaking()) {
connector.setDirection(IrisDirection.getDirection(e.getBlockFace()));
player.playSound(e.getClickedBlock().getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 1f);
}
@ -154,7 +154,7 @@ public class JigsawEditor implements Listener {
exit();
try {
IO.writeAll(targetSaveLocation, new JSONObject(new Gson().toJson(piece)).toString(4));
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -168,20 +168,20 @@ public class JigsawEditor implements Listener {
object.unplaceCenterY(origin);
falling.v().forEach(Runnable::run);
}).get();
} catch (InterruptedException | ExecutionException e) {
} catch(InterruptedException | ExecutionException e) {
e.printStackTrace();
}
editors.remove(player);
}
public void onTick() {
if (cl.flip()) {
if(cl.flip()) {
Iris.service(WandSVC.class).draw(cuboid, player);
f:
for (IrisPosition i : falling.k()) {
for (IrisJigsawPieceConnector j : piece.getConnectors()) {
if (j.getPosition().equals(i)) {
for(IrisPosition i : falling.k()) {
for(IrisJigsawPieceConnector j : piece.getConnectors()) {
if(j.getPosition().equals(i)) {
continue f;
}
}
@ -189,23 +189,23 @@ public class JigsawEditor implements Listener {
falling.remove(i).run();
}
for (IrisJigsawPieceConnector i : piece.getConnectors()) {
for(IrisJigsawPieceConnector i : piece.getConnectors()) {
IrisPosition pos = i.getPosition();
Location at = toLocation(pos);
Vector dir = i.getDirection().toVector().clone();
for (int ix = 0; ix < RNG.r.i(1, 3); ix++) {
for(int ix = 0; ix < RNG.r.i(1, 3); ix++) {
at.getWorld().spawnParticle(Particle.SOUL_FIRE_FLAME, at.clone().getBlock().getLocation().add(0.25, 0.25, 0.25).add(RNG.r.d(0.5), RNG.r.d(0.5), RNG.r.d(0.5)), 0, dir.getX(), dir.getY(), dir.getZ(), 0.092 + RNG.r.d(-0.03, 0.08));
}
if (at.getBlock().getLocation().equals(target)) {
if(at.getBlock().getLocation().equals(target)) {
continue;
}
if (!falling.containsKey(pos)) {
if (at.getBlock().getType().isAir()) {
if(!falling.containsKey(pos)) {
if(at.getBlock().getType().isAir()) {
at.getBlock().setType(Material.STONE);
}

View File

@ -133,10 +133,10 @@ public class NoiseExplorerGUI extends JPanel implements MouseWheelListener, List
frame.add(pane);
File file = Iris.getCached("Iris Icon", "https://raw.githubusercontent.com/VolmitSoftware/Iris/master/icon.png");
if (file != null) {
if(file != null) {
try {
frame.setIconImage(ImageIO.read(file));
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
}
}
@ -167,10 +167,10 @@ public class NoiseExplorerGUI extends JPanel implements MouseWheelListener, List
frame.add(pane);
File file = Iris.getCached("Iris Icon", "https://raw.githubusercontent.com/VolmitSoftware/Iris/master/icon.png");
if (file != null) {
if(file != null) {
try {
frame.setIconImage(ImageIO.read(file));
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
}
}
@ -194,14 +194,14 @@ public class NoiseExplorerGUI extends JPanel implements MouseWheelListener, List
@EventHandler
public void on(IrisEngineHotloadEvent e) {
if (generator != null)
if(generator != null)
generator = loader.get();
}
public void mouseWheelMoved(MouseWheelEvent e) {
int notches = e.getWheelRotation();
if (e.isControlDown()) {
if(e.isControlDown()) {
t = t + ((0.0025 * t) * notches);
return;
}
@ -212,51 +212,51 @@ public class NoiseExplorerGUI extends JPanel implements MouseWheelListener, List
@Override
public void paint(Graphics g) {
if (scale < ascale) {
if(scale < ascale) {
ascale -= Math.abs(scale - ascale) * 0.16;
}
if (scale > ascale) {
if(scale > ascale) {
ascale += Math.abs(ascale - scale) * 0.16;
}
if (t < tz) {
if(t < tz) {
tz -= Math.abs(t - tz) * 0.29;
}
if (t > tz) {
if(t > tz) {
tz += Math.abs(tz - t) * 0.29;
}
if (ox < oxp) {
if(ox < oxp) {
oxp -= Math.abs(ox - oxp) * 0.16;
}
if (ox > oxp) {
if(ox > oxp) {
oxp += Math.abs(oxp - ox) * 0.16;
}
if (oz < ozp) {
if(oz < ozp) {
ozp -= Math.abs(oz - ozp) * 0.16;
}
if (oz > ozp) {
if(oz > ozp) {
ozp += Math.abs(ozp - oz) * 0.16;
}
if (mx < mxx) {
if(mx < mxx) {
mxx -= Math.abs(mx - mxx) * 0.16;
}
if (mx > mxx) {
if(mx > mxx) {
mxx += Math.abs(mxx - mx) * 0.16;
}
if (mz < mzz) {
if(mz < mzz) {
mzz -= Math.abs(mz - mzz) * 0.16;
}
if (mz > mzz) {
if(mz > mzz) {
mzz += Math.abs(mzz - mz) * 0.16;
}
@ -265,26 +265,26 @@ public class NoiseExplorerGUI extends JPanel implements MouseWheelListener, List
accuracy = down ? accuracy * 4 : accuracy;
int v = 1000;
if (g instanceof Graphics2D gg) {
if(g instanceof Graphics2D gg) {
if (getParent().getWidth() != w || getParent().getHeight() != h) {
if(getParent().getWidth() != w || getParent().getHeight() != h) {
w = getParent().getWidth();
h = getParent().getHeight();
img = null;
}
if (img == null) {
if(img == null) {
img = new BufferedImage(w / accuracy, h / accuracy, BufferedImage.TYPE_INT_RGB);
}
BurstExecutor e = gx.burst(w);
for (int x = 0; x < w / accuracy; x++) {
for(int x = 0; x < w / accuracy; x++) {
int xx = x;
int finalAccuracy = accuracy;
e.queue(() -> {
for (int z = 0; z < h / finalAccuracy; z++) {
for(int z = 0; z < h / finalAccuracy; z++) {
double n = generator != null ? generator.apply(((xx * finalAccuracy) * ascale) + oxp, ((z * finalAccuracy) * ascale) + ozp) : cng.noise(((xx * finalAccuracy) * ascale) + oxp, ((z * finalAccuracy) * ascale) + ozp);
n = n > 1 ? 1 : n < 0 ? 0 : n;
@ -292,7 +292,7 @@ public class NoiseExplorerGUI extends JPanel implements MouseWheelListener, List
Color color = colorMode ? Color.getHSBColor((float) (n), 1f - (float) (n * n * n * n * n * n), 1f - (float) n) : Color.getHSBColor(0f, 0f, (float) n);
int rgb = color.getRGB();
img.setRGB(xx, z, rgb);
} catch (Throwable xxx) {
} catch(Throwable xxx) {
}
}
@ -308,15 +308,15 @@ public class NoiseExplorerGUI extends JPanel implements MouseWheelListener, List
t += 1D;
r.put(p.getMilliseconds());
if (!isVisible()) {
if(!isVisible()) {
return;
}
if (!getParent().isVisible()) {
if(!getParent().isVisible()) {
return;
}
if (!getParent().getParent().isVisible()) {
if(!getParent().getParent().isVisible()) {
return;
}

View File

@ -78,7 +78,7 @@ public class PregeneratorJob implements PregenListener {
instance = this;
monitor = new MemoryMonitor(50);
saving = false;
info = new String[]{"Initializing..."};
info = new String[] {"Initializing..."};
this.task = task;
this.pregenerator = new IrisPregenerator(task, method, this);
max = new Position2(0, 0);
@ -91,7 +91,7 @@ public class PregeneratorJob implements PregenListener {
max.setZ(Math.max((zz << 5) + 31, max.getZ()));
});
if (IrisSettings.get().getGui().isUseServerLaunchedGuis()) {
if(IrisSettings.get().getGui().isUseServerLaunchedGuis()) {
open();
}
@ -103,7 +103,7 @@ public class PregeneratorJob implements PregenListener {
}
public static boolean shutdownInstance() {
if (instance == null) {
if(instance == null) {
return false;
}
@ -116,11 +116,11 @@ public class PregeneratorJob implements PregenListener {
}
public static boolean pauseResume() {
if (instance == null) {
if(instance == null) {
return false;
}
if (isPaused()) {
if(isPaused()) {
instance.pregenerator.resume();
} else {
instance.pregenerator.pause();
@ -129,7 +129,7 @@ public class PregeneratorJob implements PregenListener {
}
public static boolean isPaused() {
if (instance == null) {
if(instance == null) {
return true;
}
@ -140,7 +140,7 @@ public class PregeneratorJob implements PregenListener {
String v = (c.startsWith("#") ? c : "#" + c).trim();
try {
return Color.decode(v);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
Iris.error("Error Parsing 'color', (" + c + ")");
}
@ -169,10 +169,10 @@ public class PregeneratorJob implements PregenListener {
public void draw(int x, int z, Color color) {
try {
if (renderer != null && frame != null && frame.isVisible()) {
if(renderer != null && frame != null && frame.isVisible()) {
renderer.func.accept(new Position2(x, z), color);
}
} catch (Throwable ignored) {
} catch(Throwable ignored) {
}
}
@ -191,7 +191,7 @@ public class PregeneratorJob implements PregenListener {
monitor.close();
J.sleep(3000);
frame.setVisible(false);
} catch (Throwable e) {
} catch(Throwable e) {
}
});
@ -215,7 +215,7 @@ public class PregeneratorJob implements PregenListener {
frame.add(renderer);
frame.setSize(1000, 1000);
frame.setVisible(true);
} catch (Throwable e) {
} catch(Throwable e) {
}
});
@ -223,23 +223,23 @@ public class PregeneratorJob implements PregenListener {
@Override
public void onTick(double chunksPerSecond, double chunksPerMinute, double regionsPerMinute, double percent, int generated, int totalChunks, int chunksRemaining, long eta, long elapsed, String method) {
info = new String[]{
(paused() ? "PAUSED" : (saving ? "Saving... " : "Generating")) + " " + Form.f(generated) + " of " + Form.f(totalChunks) + " (" + Form.pc(percent, 0) + " Complete)",
"Speed: " + Form.f(chunksPerSecond, 0) + " Chunks/s, " + Form.f(regionsPerMinute, 1) + " Regions/m, " + Form.f(chunksPerMinute, 0) + " Chunks/m",
Form.duration(eta, 2) + " Remaining " + " (" + Form.duration(elapsed, 2) + " Elapsed)",
"Generation Method: " + method,
"Memory: " + Form.memSize(monitor.getUsedBytes(), 2) + " (" + Form.pc(monitor.getUsagePercent(), 0) + ") Pressure: " + Form.memSize(monitor.getPressure(), 0) + "/s",
info = new String[] {
(paused() ? "PAUSED" : (saving ? "Saving... " : "Generating")) + " " + Form.f(generated) + " of " + Form.f(totalChunks) + " (" + Form.pc(percent, 0) + " Complete)",
"Speed: " + Form.f(chunksPerSecond, 0) + " Chunks/s, " + Form.f(regionsPerMinute, 1) + " Regions/m, " + Form.f(chunksPerMinute, 0) + " Chunks/m",
Form.duration(eta, 2) + " Remaining " + " (" + Form.duration(elapsed, 2) + " Elapsed)",
"Generation Method: " + method,
"Memory: " + Form.memSize(monitor.getUsedBytes(), 2) + " (" + Form.pc(monitor.getUsagePercent(), 0) + ") Pressure: " + Form.memSize(monitor.getPressure(), 0) + "/s",
};
for (Consumer<Double> i : onProgress) {
for(Consumer<Double> i : onProgress) {
i.accept(percent);
}
}
@Override
public void onChunkGenerating(int x, int z) {
if (engine != null) {
if(engine != null) {
return;
}
@ -248,7 +248,7 @@ public class PregeneratorJob implements PregenListener {
@Override
public void onChunkGenerated(int x, int z) {
if (engine != null) {
if(engine != null) {
draw(x, z, engine.draw((x << 4) + 8, (z << 4) + 8));
return;
}
@ -263,7 +263,7 @@ public class PregeneratorJob implements PregenListener {
}
private void shouldGc() {
if (cl.flip() && rgc > 16) {
if(cl.flip() && rgc > 16) {
System.gc();
}
}
@ -322,7 +322,7 @@ public class PregeneratorJob implements PregenListener {
@Override
public void onChunkExistsInRegionGen(int x, int z) {
if (engine != null) {
if(engine != null) {
draw(x, z, engine.draw((x << 4) + 8, (z << 4) + 8));
return;
}
@ -371,10 +371,10 @@ public class PregeneratorJob implements PregenListener {
bg = (Graphics2D) image.getGraphics();
l.lock();
while (order.isNotEmpty()) {
while(order.isNotEmpty()) {
try {
order.pop().run();
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
@ -388,12 +388,12 @@ public class PregeneratorJob implements PregenListener {
int h = g.getFontMetrics().getHeight() + 5;
int hh = 20;
if (job.paused()) {
if(job.paused()) {
g.drawString("PAUSED", 20, hh += h);
g.drawString("Press P to Resume", 20, hh += h);
} else {
for (String i : prog) {
for(String i : prog) {
g.drawString(i, 20, hh += h);
}
@ -429,7 +429,7 @@ public class PregeneratorJob implements PregenListener {
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_P) {
if(e.getKeyCode() == KeyEvent.VK_P) {
PregeneratorJob.pauseResume();
}
}

View File

@ -149,7 +149,7 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
J.a(() -> {
J.sleep(10000);
if (!helpIgnored && help) {
if(!helpIgnored && help) {
help = false;
}
});
@ -173,11 +173,11 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
frame.setVisible(true);
File file = Iris.getCached("Iris Icon", "https://raw.githubusercontent.com/VolmitSoftware/Iris/master/icon.png");
if (file != null) {
if(file != null) {
try {
nv.texture = ImageIO.read(file);
frame.setIconImage(ImageIO.read(file));
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
}
@ -186,17 +186,17 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
public static void launch(Engine g, int i) {
J.a(() ->
createAndShowGUI(g, i, g.getWorld()));
createAndShowGUI(g, i, g.getWorld()));
}
public boolean updateEngine() {
if (engine.isClosed()) {
if (world.hasRealWorld()) {
if(engine.isClosed()) {
if(world.hasRealWorld()) {
try {
engine = IrisToolbelt.access(world.realWorld()).getEngine();
Iris.info("Updated Renderer");
return !engine.isClosed();
} catch (Throwable e) {
} catch(Throwable e) {
}
}
@ -224,7 +224,7 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
public int getColor(double wx, double wz) {
BiFunction<Double, Double, Integer> colorFunction = (d, dx) -> Color.black.getRGB();
switch (currentType) {
switch(currentType) {
case BIOME, DECORATOR_LOAD, OBJECT_LOAD, LAYER_LOAD -> colorFunction = (x, z) -> engine.getComplex().getTrueBiomeStream().get(x, z).getColor(engine, currentType).getRGB();
case BIOME_LAND -> colorFunction = (x, z) -> engine.getComplex().getLandBiomeStream().get(x, z).getColor(engine, currentType).getRGB();
case BIOME_SEA -> colorFunction = (x, z) -> engine.getComplex().getSeaBiomeStream().get(x, z).getColor(engine, currentType).getRGB();
@ -247,51 +247,51 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
if(e.getKeyCode() == KeyEvent.VK_SHIFT) {
shift = true;
}
if (e.getKeyCode() == KeyEvent.VK_CONTROL) {
if(e.getKeyCode() == KeyEvent.VK_CONTROL) {
control = true;
}
if (e.getKeyCode() == KeyEvent.VK_SEMICOLON) {
if(e.getKeyCode() == KeyEvent.VK_SEMICOLON) {
debug = true;
}
if (e.getKeyCode() == KeyEvent.VK_SLASH) {
if(e.getKeyCode() == KeyEvent.VK_SLASH) {
help = true;
helpIgnored = true;
}
if (e.getKeyCode() == KeyEvent.VK_ALT) {
if(e.getKeyCode() == KeyEvent.VK_ALT) {
alt = true;
}
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SEMICOLON) {
if(e.getKeyCode() == KeyEvent.VK_SEMICOLON) {
debug = false;
}
if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
if(e.getKeyCode() == KeyEvent.VK_SHIFT) {
shift = false;
}
if (e.getKeyCode() == KeyEvent.VK_CONTROL) {
if(e.getKeyCode() == KeyEvent.VK_CONTROL) {
control = false;
}
if (e.getKeyCode() == KeyEvent.VK_SLASH) {
if(e.getKeyCode() == KeyEvent.VK_SLASH) {
help = false;
helpIgnored = true;
}
if (e.getKeyCode() == KeyEvent.VK_ALT) {
if(e.getKeyCode() == KeyEvent.VK_ALT) {
alt = false;
}
// Pushes
if (e.getKeyCode() == KeyEvent.VK_F) {
if(e.getKeyCode() == KeyEvent.VK_F) {
follow = !follow;
if (player != null && follow) {
if(player != null && follow) {
notify("Following " + player.getName() + ". Press F to disable");
} else if (follow) {
} else if(follow) {
notify("Can't follow, no one is in the world");
follow = false;
} else {
@ -301,38 +301,38 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
return;
}
if (e.getKeyCode() == KeyEvent.VK_R) {
if(e.getKeyCode() == KeyEvent.VK_R) {
dump();
notify("Refreshing Chunks");
return;
}
if (e.getKeyCode() == KeyEvent.VK_P) {
if(e.getKeyCode() == KeyEvent.VK_P) {
lowtile = !lowtile;
dump();
notify("Rendering " + (lowtile ? "Low" : "High") + " Quality Tiles");
return;
}
if (e.getKeyCode() == KeyEvent.VK_E) {
if(e.getKeyCode() == KeyEvent.VK_E) {
eco = !eco;
dump();
notify("Using " + (eco ? "60" : "Uncapped") + " FPS Limit");
return;
}
if (e.getKeyCode() == KeyEvent.VK_EQUALS) {
if(e.getKeyCode() == KeyEvent.VK_EQUALS) {
mscale = mscale + ((0.044 * mscale) * -3);
mscale = Math.max(mscale, 0.00001);
dump();
return;
}
if (e.getKeyCode() == KeyEvent.VK_MINUS) {
if(e.getKeyCode() == KeyEvent.VK_MINUS) {
mscale = mscale + ((0.044 * mscale) * 3);
mscale = Math.max(mscale, 0.00001);
dump();
return;
}
if (e.getKeyCode() == KeyEvent.VK_BACK_SLASH) {
if(e.getKeyCode() == KeyEvent.VK_BACK_SLASH) {
mscale = 1D;
dump();
notify("Zoom Reset");
@ -341,9 +341,9 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
int currentMode = currentType.ordinal();
for (RenderType i : RenderType.values()) {
if (e.getKeyChar() == String.valueOf(i.ordinal() + 1).charAt(0)) {
if (i.ordinal() != currentMode) {
for(RenderType i : RenderType.values()) {
if(e.getKeyChar() == String.valueOf(i.ordinal() + 1).charAt(0)) {
if(i.ordinal() != currentMode) {
currentType = i;
dump();
notify("Rendering " + Form.capitalizeWords(currentType.name().toLowerCase().replaceAll("\\Q_\\E", " ")));
@ -352,7 +352,7 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
}
}
if (e.getKeyCode() == KeyEvent.VK_M) {
if(e.getKeyCode() == KeyEvent.VK_M) {
currentType = RenderType.values()[(currentMode + 1) % RenderType.values().length];
notify("Rendering " + Form.capitalizeWords(currentType.name().toLowerCase().replaceAll("\\Q_\\E", " ")));
dump();
@ -368,15 +368,15 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
BlockPosition key = new BlockPosition((int) mscale, Math.floorDiv(x, div), Math.floorDiv(z, div));
fg.add(key);
if (positions.containsKey(key)) {
if(positions.containsKey(key)) {
return positions.get(key);
}
if (fastpositions.containsKey(key)) {
if (!working.contains(key) && working.size() < 9) {
if(fastpositions.containsKey(key)) {
if(!working.contains(key) && working.size() < 9) {
m.set(m.get() - 1);
if (m.get() >= 0 && velocity < 50) {
if(m.get() >= 0 && velocity < 50) {
working.add(key);
double mk = mscale;
double mkd = scale;
@ -387,7 +387,7 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
rs.put(ps.getMilliseconds());
working.remove(key);
if (mk == mscale && mkd == scale) {
if(mk == mscale && mkd == scale) {
positions.put(key, b);
}
});
@ -397,7 +397,7 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
return fastpositions.get(key);
}
if (workingfast.contains(key) || workingfast.size() > Runtime.getRuntime().availableProcessors()) {
if(workingfast.contains(key) || workingfast.size() > Runtime.getRuntime().availableProcessors()) {
return null;
}
@ -411,7 +411,7 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
rs.put(ps.getMilliseconds());
workingfast.remove(key);
if (mk == mscale && mkd == scale) {
if(mk == mscale && mkd == scale) {
fastpositions.put(key, b);
}
});
@ -437,49 +437,49 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
@Override
public void paint(Graphics gx) {
if (updateEngine()) {
if(updateEngine()) {
dump();
}
if (ox < oxp) {
if(ox < oxp) {
velocity = Math.abs(ox - oxp) * 0.36;
oxp -= velocity;
}
if (ox > oxp) {
if(ox > oxp) {
velocity = Math.abs(oxp - ox) * 0.36;
oxp += velocity;
}
if (oz < ozp) {
if(oz < ozp) {
velocity = Math.abs(oz - ozp) * 0.36;
ozp -= velocity;
}
if (oz > ozp) {
if(oz > ozp) {
velocity = Math.abs(ozp - oz) * 0.36;
ozp += velocity;
}
if (lx < hx) {
if(lx < hx) {
hx -= Math.abs(lx - hx) * 0.36;
}
if (lx > hx) {
if(lx > hx) {
hx += Math.abs(hx - lx) * 0.36;
}
if (lz < hz) {
if(lz < hz) {
hz -= Math.abs(lz - hz) * 0.36;
}
if (lz > hz) {
if(lz > hz) {
hz += Math.abs(hz - lz) * 0.36;
}
if (centities.flip()) {
if(centities.flip()) {
J.s(() -> {
synchronized (lastEntities) {
synchronized(lastEntities) {
lastEntities.clear();
lastEntities.addAll(world.getEntitiesByClass(LivingEntity.class));
}
@ -493,7 +493,7 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
double vscale = scale;
scale = w / 12D;
if (scale != vscale) {
if(scale != vscale) {
positions.clear();
}
@ -505,15 +505,15 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
posZ = (int) ozp;
m.set(3);
for (int r = 0; r < Math.max(w, h); r += iscale) {
for (int i = -iscale; i < w + iscale; i += iscale) {
for (int j = -iscale; j < h + iscale; j += iscale) {
for(int r = 0; r < Math.max(w, h); r += iscale) {
for(int i = -iscale; i < w + iscale; i += iscale) {
for(int j = -iscale; j < h + iscale; j += iscale) {
int a = i - (w / 2);
int b = j - (h / 2);
if (a * a + b * b <= r * r) {
if(a * a + b * b <= r * r) {
BufferedImage t = getTile(gg, iscale, Math.floorDiv((posX / iscale) + i, iscale) * iscale, Math.floorDiv((posZ / iscale) + j, iscale) * iscale, m);
if (t != null) {
if(t != null) {
g.drawImage(t, i - ((posX / iscale) % (iscale)), j - ((posZ / iscale) % (iscale)), iscale, iscale, (img, infoflags, x, y, width, height) -> true);
}
}
@ -523,8 +523,8 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
p.end();
for (BlockPosition i : positions.k()) {
if (!gg.contains(i)) {
for(BlockPosition i : positions.k()) {
if(!gg.contains(i)) {
positions.remove(i);
}
}
@ -532,15 +532,15 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
hanleFollow();
renderOverlays(g);
if (!isVisible()) {
if(!isVisible()) {
return;
}
if (!getParent().isVisible()) {
if(!getParent().isVisible()) {
return;
}
if (!getParent().getParent().isVisible()) {
if(!getParent().getParent().isVisible()) {
return;
}
@ -552,7 +552,7 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
}
private void hanleFollow() {
if (follow && player != null) {
if(follow && player != null) {
animateTo(player.getLocation().getX(), player.getLocation().getZ());
}
}
@ -560,16 +560,16 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
private void renderOverlays(Graphics2D g) {
renderPlayer(g);
if (help) {
if(help) {
renderOverlayHelp(g);
} else if (debug) {
} else if(debug) {
renderOverlayDebug(g);
}
renderOverlayLegend(g);
renderHoverOverlay(g, shift);
if (!notifications.isEmpty()) {
if(!notifications.isEmpty()) {
renderNotification(g);
}
}
@ -587,8 +587,8 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
private void renderNotification(Graphics2D g) {
drawCardCB(g, notifications.k());
for (String i : notifications.k()) {
if (M.ms() > notifications.get(i)) {
for(String i : notifications.k()) {
if(M.ms() > notifications.get(i)) {
notifications.remove(i);
}
}
@ -597,32 +597,32 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
private void renderPlayer(Graphics2D g) {
Player b = null;
for (Player i : world.getPlayers()) {
for(Player i : world.getPlayers()) {
b = i;
renderPosition(g, i.getLocation().getX(), i.getLocation().getZ());
}
synchronized (lastEntities) {
synchronized(lastEntities) {
double dist = Double.MAX_VALUE;
LivingEntity h = null;
for (LivingEntity i : lastEntities) {
if (i instanceof Player) {
for(LivingEntity i : lastEntities) {
if(i instanceof Player) {
continue;
}
renderMobPosition(g, i, i.getLocation().getX(), i.getLocation().getZ());
if (shift) {
if(shift) {
double d = i.getLocation().distanceSquared(new Location(i.getWorld(), getWorldX(hx), i.getLocation().getY(), getWorldZ(hz)));
if (d < dist) {
if(d < dist) {
dist = d;
h = i;
}
}
}
if (h != null && shift) {
if(h != null && shift) {
g.setColor(Color.red);
g.fillRoundRect((int) getScreenX(h.getLocation().getX()) - 10, (int) getScreenZ(h.getLocation().getZ()) - 10, 20, 20, 20, 20);
KList<String> k = new KList<>();
@ -647,7 +647,7 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
}
private void renderPosition(Graphics2D g, double x, double z) {
if (texture != null) {
if(texture != null) {
g.drawImage(texture, (int) getScreenX(x), (int) getScreenZ(z), 66, 66, (img, infoflags, xx, xy, width, height) -> true);
} else {
g.setColor(Color.darkGray);
@ -669,7 +669,7 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
l.add("Biome: " + biome.getName());
l.add("Region: " + region.getName() + "(" + region.getLoadKey() + ")");
l.add("Block " + (int) getWorldX(hx) + ", " + (int) getWorldZ(hz));
if (detailed) {
if(detailed) {
l.add("Chunk " + ((int) getWorldX(hx) >> 4) + ", " + ((int) getWorldZ(hz) >> 4));
l.add("Region " + (((int) getWorldX(hx) >> 4) >> 5) + ", " + (((int) getWorldZ(hz) >> 4) >> 5));
l.add("Key: " + biome.getLoadKey());
@ -698,7 +698,7 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
l.add("E to toggle Eco FPS Mode");
int ff = 0;
for (RenderType i : RenderType.values()) {
for(RenderType i : RenderType.values()) {
ff++;
l.add(ff + " to view " + Form.capitalizeWords(i.name().toLowerCase().replaceAll("\\Q_\\E", " ")));
}
@ -728,7 +728,7 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
private void open() {
IrisComplex complex = engine.getComplex();
File r = null;
switch (currentType) {
switch(currentType) {
case BIOME, LAYER_LOAD, DECORATOR_LOAD, OBJECT_LOAD, HEIGHT -> r = complex.getTrueBiomeStream().get(getWorldX(hx), getWorldZ(hz)).openInVSCode();
case BIOME_LAND -> r = complex.getLandBiomeStream().get(getWorldX(hx), getWorldZ(hz)).openInVSCode();
case BIOME_SEA -> r = complex.getSeaBiomeStream().get(getWorldX(hx), getWorldZ(hz)).openInVSCode();
@ -741,7 +741,7 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
private void teleport() {
J.s(() -> {
if (player != null) {
if(player != null) {
int xx = (int) getWorldX(hx);
int zz = (int) getWorldZ(hz);
int h = engine.getComplex().getRoundedHeighteightStream().get(xx, zz);
@ -766,7 +766,7 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
int h = 0;
int w = 0;
for (String i : text) {
for(String i : text) {
h += g.getFontMetrics().getHeight();
w = Math.max(w, g.getFontMetrics().stringWidth(i));
}
@ -786,14 +786,14 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
g.setColor(Color.black);
int m = 0;
for (String i : text) {
for(String i : text) {
g.drawString(i, x + 14 - cw, y + 14 - ch + (++m * g.getFontMetrics().getHeight()));
}
}
public void mouseWheelMoved(MouseWheelEvent e) {
int notches = e.getWheelRotation();
if (e.isControlDown()) {
if(e.isControlDown()) {
return;
}
@ -806,9 +806,9 @@ public class VisionGUI extends JPanel implements MouseWheelListener, KeyListener
@Override
public void mouseClicked(MouseEvent e) {
if (control) {
if(control) {
teleport();
} else if (alt) {
} else if(alt) {
open();
}
}

View File

@ -37,7 +37,7 @@ public class IrisRenderer {
BufferedImage image = new BufferedImage(resolution, resolution, BufferedImage.TYPE_INT_RGB);
BiFunction<Double, Double, Integer> colorFunction = (d, dx) -> Color.black.getRGB();
switch (currentType) {
switch(currentType) {
case BIOME, DECORATOR_LOAD, OBJECT_LOAD, LAYER_LOAD -> colorFunction = (x, z) -> renderer.getComplex().getTrueBiomeStream().get(x, z).getColor(renderer, currentType).getRGB();
case BIOME_LAND -> colorFunction = (x, z) -> renderer.getComplex().getLandBiomeStream().get(x, z).getColor(renderer, currentType).getRGB();
case BIOME_SEA -> colorFunction = (x, z) -> renderer.getComplex().getSeaBiomeStream().get(x, z).getColor(renderer, currentType).getRGB();
@ -48,10 +48,10 @@ public class IrisRenderer {
double x, z;
int i, j;
for (i = 0; i < resolution; i++) {
for(i = 0; i < resolution; i++) {
x = IrisInterpolation.lerp(sx, sx + size, (double) i / (double) (resolution));
for (j = 0; j < resolution; j++) {
for(j = 0; j < resolution; j++) {
z = IrisInterpolation.lerp(sz, sz + size, (double) j / (double) (resolution));
image.setRGB(i, j, colorFunction.apply(x, z));
}

View File

@ -52,55 +52,55 @@ public class IrisPapiExpansion extends PlaceholderExpansion {
Location l = null;
PlatformChunkGenerator a = null;
if (player.isOnline()) {
if(player.isOnline()) {
l = player.getPlayer().getLocation();
a = IrisToolbelt.access(l.getWorld());
}
if (p.equalsIgnoreCase("biome_name")) {
if (a != null) {
if(p.equalsIgnoreCase("biome_name")) {
if(a != null) {
return a.getEngine().getBiome(l).getName();
}
} else if (p.equalsIgnoreCase("biome_id")) {
if (a != null) {
} else if(p.equalsIgnoreCase("biome_id")) {
if(a != null) {
return a.getEngine().getBiome(l).getLoadKey();
}
} else if (p.equalsIgnoreCase("biome_file")) {
if (a != null) {
} else if(p.equalsIgnoreCase("biome_file")) {
if(a != null) {
return a.getEngine().getBiome(l).getLoadFile().getPath();
}
} else if (p.equalsIgnoreCase("region_name")) {
if (a != null) {
} else if(p.equalsIgnoreCase("region_name")) {
if(a != null) {
return a.getEngine().getRegion(l).getName();
}
} else if (p.equalsIgnoreCase("region_id")) {
if (a != null) {
} else if(p.equalsIgnoreCase("region_id")) {
if(a != null) {
return a.getEngine().getRegion(l).getLoadKey();
}
} else if (p.equalsIgnoreCase("region_file")) {
if (a != null) {
} else if(p.equalsIgnoreCase("region_file")) {
if(a != null) {
return a.getEngine().getRegion(l).getLoadFile().getPath();
}
} else if (p.equalsIgnoreCase("terrain_slope")) {
if (a != null) {
} else if(p.equalsIgnoreCase("terrain_slope")) {
if(a != null) {
return (a.getEngine())
.getComplex().getSlopeStream()
.get(l.getX(), l.getZ()) + "";
.getComplex().getSlopeStream()
.get(l.getX(), l.getZ()) + "";
}
} else if (p.equalsIgnoreCase("terrain_height")) {
if (a != null) {
} else if(p.equalsIgnoreCase("terrain_height")) {
if(a != null) {
return Math.round(a.getEngine().getHeight(l.getBlockX(), l.getBlockZ())) + "";
}
} else if (p.equalsIgnoreCase("world_mode")) {
if (a != null) {
} else if(p.equalsIgnoreCase("world_mode")) {
if(a != null) {
return a.isStudio() ? "Studio" : "Production";
}
} else if (p.equalsIgnoreCase("world_seed")) {
if (a != null) {
} else if(p.equalsIgnoreCase("world_seed")) {
if(a != null) {
return a.getEngine().getSeedManager().getSeed() + "";
}
} else if (p.equalsIgnoreCase("world_speed")) {
if (a != null) {
} else if(p.equalsIgnoreCase("world_speed")) {
if(a != null) {
return a.getEngine().getGeneratedPerSecond() + "/s";
}
}

View File

@ -38,7 +38,7 @@ public class MultiverseCoreLink {
}
public boolean addWorld(String worldName, IrisDimension dim, String seed) {
if (!isSupported()) {
if(!isSupported()) {
return false;
}
@ -47,11 +47,11 @@ public class MultiverseCoreLink {
Object mvWorldManager = p.getClass().getDeclaredMethod("getMVWorldManager").invoke(p);
Method m = mvWorldManager.getClass().getDeclaredMethod("addWorld",
String.class, World.Environment.class, String.class, WorldType.class, Boolean.class, String.class, boolean.class);
String.class, World.Environment.class, String.class, WorldType.class, Boolean.class, String.class, boolean.class);
boolean b = (boolean) m.invoke(mvWorldManager, worldName, dim.getEnvironment(), seed, WorldType.NORMAL, false, "Iris", false);
saveConfig();
return b;
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -67,7 +67,7 @@ public class MultiverseCoreLink {
Field f = mvWorldManager.getClass().getDeclaredField("worldsFromTheConfig");
f.setAccessible(true);
return (Map<String, ?>) f.get(mvWorldManager);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -76,7 +76,7 @@ public class MultiverseCoreLink {
}
public void removeFromConfig(World world) {
if (!isSupported()) {
if(!isSupported()) {
return;
}
@ -85,7 +85,7 @@ public class MultiverseCoreLink {
}
public void removeFromConfig(String world) {
if (!isSupported()) {
if(!isSupported()) {
return;
}
@ -98,7 +98,7 @@ public class MultiverseCoreLink {
Plugin p = getMultiverse();
Object mvWorldManager = p.getClass().getDeclaredMethod("getMVWorldManager").invoke(p);
mvWorldManager.getClass().getDeclaredMethod("saveWorldsConfig").invoke(mvWorldManager);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -112,7 +112,7 @@ public class MultiverseCoreLink {
try {
String t = worldNameTypes.get(worldName);
return t == null ? defaultType : t;
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
return defaultType;
}
@ -128,11 +128,11 @@ public class MultiverseCoreLink {
}
public String envName(World.Environment environment) {
if (environment == null) {
if(environment == null) {
return "normal";
}
return switch (environment) {
return switch(environment) {
case NORMAL -> "normal";
case NETHER -> "nether";
case THE_END -> "end";

View File

@ -50,15 +50,17 @@ public class MythicMobsLink {
/**
* Spawn a mythic mob at this location
*
* @param mob The mob
* @param location The location
* @param mob
* The mob
* @param location
* The location
* @return The mob, or null if it can't be spawned
*/
public @Nullable
Entity spawnMob(String mob, Location location) {
if (!isEnabled()) return null;
if(!isEnabled()) return null;
if (spawnMobFunction != null) {
if(spawnMobFunction != null) {
return spawnMobFunction.apply(mob, location);
}
@ -73,14 +75,14 @@ public class MythicMobsLink {
spawnMobFunction = (str, loc) -> {
try {
return (Entity) spawnMobMethod.invoke(apiHelper, str, loc);
} catch (InvocationTargetException | IllegalAccessException e) {
} catch(InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
};
return spawnMobFunction.apply(mob, location);
} catch (Exception e) {
} catch(Exception e) {
e.printStackTrace();
}
@ -88,11 +90,11 @@ public class MythicMobsLink {
}
public Collection<String> getMythicMobTypes() {
if (mobs != null) {
if(mobs != null) {
return mobs;
}
if (isEnabled()) {
if(isEnabled()) {
try {
Class<?> mythicMobClass = Class.forName("io.lumine.xikage.mythicmobs.MythicMobs");
@ -103,7 +105,7 @@ public class MythicMobsLink {
Method getMobNames = mobManager.getClass().getDeclaredMethod("getMobNames");
mobs = (Collection<String>) getMobNames.invoke(mobManager);
return mobs;
} catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
} catch(ClassNotFoundException | NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
}
}

View File

@ -44,22 +44,22 @@ public class OraxenLink {
}
public BlockData getBlockDataFor(String id) {
if (!supported()) {
if(!supported()) {
return null;
}
MechanicFactory f = getFactory(id);
if (f == null) {
if(f == null) {
return null;
}
Mechanic m = f.getMechanic(id);
// TODO: Why isnt there a simple getBlockData() function?
if (m.getFactory() instanceof NoteBlockMechanicFactory) {
if(m.getFactory() instanceof NoteBlockMechanicFactory) {
return ((NoteBlockMechanicFactory) m.getFactory()).createNoteBlockData(id);
} else if (m.getFactory() instanceof BlockMechanicFactory) {
} else if(m.getFactory() instanceof BlockMechanicFactory) {
MultipleFacing newBlockData = (MultipleFacing) Bukkit.createBlockData(Material.MUSHROOM_STEM);
Utils.setBlockFacing(newBlockData, ((BlockMechanic) m).getCustomVariation());
return newBlockData;
@ -69,7 +69,7 @@ public class OraxenLink {
}
public MechanicFactory getFactory(String id) {
if (!supported()) {
if(!supported()) {
return null;
}
@ -78,12 +78,12 @@ public class OraxenLink {
f.setAccessible(true);
Map<String, MechanicFactory> map = (Map<String, MechanicFactory>) f.get(null);
for (MechanicFactory i : map.values()) {
if (i.getItems().contains(id)) {
for(MechanicFactory i : map.values()) {
if(i.getItems().contains(id)) {
return i;
}
}
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
}
@ -91,14 +91,14 @@ public class OraxenLink {
}
public String[] getItemTypes() {
if (!supported()) {
if(!supported()) {
return EMPTY;
}
KList<String> v = new KList<>();
for (String i : OraxenItems.getItemNames()) {
if (getBlockDataFor(i) != null) {
for(String i : OraxenItems.getItemNames()) {
if(getBlockDataFor(i) != null) {
v.add(i);
}
}

View File

@ -21,7 +21,6 @@ package com.volmit.iris.core.loader;
import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.engine.object.IrisImage;
import com.volmit.iris.engine.object.IrisObject;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KSet;
import com.volmit.iris.util.data.KCache;
@ -60,7 +59,7 @@ public class ImageResourceLoader extends ResourceLoader<IrisImage> {
logLoad(j, img);
tlt.addAndGet(p.getMilliseconds());
return img;
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
Iris.warn("Couldn't read " + resourceTypeName + " file: " + j.getPath() + ": " + e.getMessage());
return null;
@ -68,24 +67,24 @@ public class ImageResourceLoader extends ResourceLoader<IrisImage> {
}
public String[] getPossibleKeys() {
if (possibleKeys != null) {
if(possibleKeys != null) {
return possibleKeys;
}
Iris.debug("Building " + resourceTypeName + " Possibility Lists");
KSet<String> m = new KSet<>();
for (File i : getFolders()) {
for (File j : i.listFiles()) {
if (j.isFile() && j.getName().endsWith(".png")) {
for(File i : getFolders()) {
for(File j : i.listFiles()) {
if(j.isFile() && j.getName().endsWith(".png")) {
m.add(j.getName().replaceAll("\\Q.png\\E", ""));
} else if (j.isDirectory()) {
for (File k : j.listFiles()) {
if (k.isFile() && k.getName().endsWith(".png")) {
} else if(j.isDirectory()) {
for(File k : j.listFiles()) {
if(k.isFile() && k.getName().endsWith(".png")) {
m.add(j.getName() + "/" + k.getName().replaceAll("\\Q.png\\E", ""));
} else if (k.isDirectory()) {
for (File l : k.listFiles()) {
if (l.isFile() && l.getName().endsWith(".png")) {
} else if(k.isDirectory()) {
for(File l : k.listFiles()) {
if(l.isFile() && l.getName().endsWith(".png")) {
m.add(j.getName() + "/" + k.getName() + "/" + l.getName().replaceAll("\\Q.png\\E", ""));
}
}
@ -101,16 +100,16 @@ public class ImageResourceLoader extends ResourceLoader<IrisImage> {
}
public File findFile(String name) {
for (File i : getFolders(name)) {
for (File j : i.listFiles()) {
if (j.isFile() && j.getName().endsWith(".png") && j.getName().split("\\Q.\\E")[0].equals(name)) {
for(File i : getFolders(name)) {
for(File j : i.listFiles()) {
if(j.isFile() && j.getName().endsWith(".png") && j.getName().split("\\Q.\\E")[0].equals(name)) {
return j;
}
}
File file = new File(i, name + ".png");
if (file.exists()) {
if(file.exists()) {
return file;
}
}
@ -125,16 +124,16 @@ public class ImageResourceLoader extends ResourceLoader<IrisImage> {
}
private IrisImage loadRaw(String name) {
for (File i : getFolders(name)) {
for (File j : i.listFiles()) {
if (j.isFile() && j.getName().endsWith(".png") && j.getName().split("\\Q.\\E")[0].equals(name)) {
for(File i : getFolders(name)) {
for(File j : i.listFiles()) {
if(j.isFile() && j.getName().endsWith(".png") && j.getName().split("\\Q.\\E")[0].equals(name)) {
return loadFile(j, name);
}
}
File file = new File(i, name + ".png");
if (file.exists()) {
if(file.exists()) {
return loadFile(file, name);
}
}

View File

@ -115,8 +115,8 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
public static int cacheSize() {
int m = 0;
for (IrisData i : dataLoaders.values()) {
for (ResourceLoader<?> j : i.getLoaders().values()) {
for(IrisData i : dataLoaders.values()) {
for(ResourceLoader<?> j : i.getLoaders().values()) {
m += j.getLoadCache().getSize();
}
}
@ -206,17 +206,17 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
public static <T extends IrisRegistrant> T loadAny(String key, Function<IrisData, T> v) {
try {
for (File i : Objects.requireNonNull(Iris.instance.getDataFolder("packs").listFiles())) {
if (i.isDirectory()) {
for(File i : Objects.requireNonNull(Iris.instance.getDataFolder("packs").listFiles())) {
if(i.isDirectory()) {
IrisData dm = get(i);
T t = v.apply(dm);
if (t != null) {
if(t != null) {
return t;
}
}
}
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -227,9 +227,9 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
public ResourceLoader<?> getTypedLoaderFor(File f) {
String[] k = f.getPath().split("\\Q" + File.separator + "\\E");
for (String i : k) {
for (ResourceLoader<?> j : loaders.values()) {
if (j.getFolderName().equals(i)) {
for(String i : k) {
for(ResourceLoader<?> j : loaders.values()) {
if(j.getFolderName().equals(i)) {
return j;
}
}
@ -239,7 +239,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
}
public void cleanupEngine() {
if (engine != null && engine.isClosed()) {
if(engine != null && engine.isClosed()) {
engine = null;
Iris.debug("Dereferenced Data<Engine> " + getId() + " " + getDataFolder());
}
@ -250,30 +250,30 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
IrisContext ctx = IrisContext.get();
Engine engine = this.engine;
if (engine == null && ctx != null && ctx.getEngine() != null) {
if(engine == null && ctx != null && ctx.getEngine() != null) {
engine = ctx.getEngine();
}
if (engine == null && t.getPreprocessors().isNotEmpty()) {
if(engine == null && t.getPreprocessors().isNotEmpty()) {
Iris.error("Failed to preprocess object " + t.getLoadKey() + " because there is no engine context here. (See stack below)");
try {
throw new RuntimeException();
} catch (Throwable ex) {
} catch(Throwable ex) {
ex.printStackTrace();
}
}
if (engine != null && t.getPreprocessors().isNotEmpty()) {
synchronized (this) {
if(engine != null && t.getPreprocessors().isNotEmpty()) {
synchronized(this) {
engine.getExecution().getAPI().setPreprocessorObject(t);
for (String i : t.getPreprocessors()) {
for(String i : t.getPreprocessors()) {
engine.getExecution().execute(i);
Iris.debug("Loader<" + C.GREEN + t.getTypeName() + C.LIGHT_PURPLE + "> iprocess " + C.YELLOW + t.getLoadKey() + C.LIGHT_PURPLE + " in <rainbow>" + i);
}
}
}
} catch (Throwable e) {
} catch(Throwable e) {
Iris.error("Failed to preprocess object!");
e.printStackTrace();
}
@ -292,13 +292,13 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
try {
IrisRegistrant rr = registrant.getConstructor().newInstance();
ResourceLoader<T> r = null;
if (registrant.equals(IrisObject.class)) {
if(registrant.equals(IrisObject.class)) {
r = (ResourceLoader<T>) new ObjectResourceLoader(dataFolder, this, rr.getFolderName(),
rr.getTypeName());
} else if (registrant.equals(IrisScript.class)) {
rr.getTypeName());
} else if(registrant.equals(IrisScript.class)) {
r = (ResourceLoader<T>) new ScriptResourceLoader(dataFolder, this, rr.getFolderName(),
rr.getTypeName());
}else if (registrant.equals(IrisImage.class)) {
} else if(registrant.equals(IrisImage.class)) {
r = (ResourceLoader<T>) new ImageResourceLoader(dataFolder, this, rr.getFolderName(),
rr.getTypeName());
} else {
@ -309,7 +309,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
loaders.put(registrant, r);
return r;
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
Iris.error("Failed to create loader! " + registrant.getCanonicalName());
}
@ -320,11 +320,11 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
public synchronized void hotloaded() {
possibleSnippets = new KMap<>();
builder = new GsonBuilder()
.addDeserializationExclusionStrategy(this)
.addSerializationExclusionStrategy(this)
.setLenient()
.registerTypeAdapterFactory(this)
.setPrettyPrinting();
.addDeserializationExclusionStrategy(this)
.addSerializationExclusionStrategy(this)
.setLenient()
.registerTypeAdapterFactory(this)
.setPrettyPrinting();
loaders.clear();
File packs = dataFolder;
packs.mkdirs();
@ -351,26 +351,26 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
}
public void dump() {
for (ResourceLoader<?> i : loaders.values()) {
for(ResourceLoader<?> i : loaders.values()) {
i.clearCache();
}
}
public void clearLists() {
for (ResourceLoader<?> i : loaders.values()) {
for(ResourceLoader<?> i : loaders.values()) {
i.clearList();
}
}
public String toLoadKey(File f) {
if (f.getPath().startsWith(getDataFolder().getPath())) {
if(f.getPath().startsWith(getDataFolder().getPath())) {
String[] full = f.getPath().split("\\Q" + File.separator + "\\E");
String[] df = getDataFolder().getPath().split("\\Q" + File.separator + "\\E");
String g = "";
boolean m = true;
for (int i = 0; i < full.length; i++) {
if (i >= df.length) {
if (m) {
for(int i = 0; i < full.length; i++) {
if(i >= df.length) {
if(m) {
m = false;
continue;
}
@ -397,14 +397,14 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
@Override
public boolean shouldSkipClass(Class<?> c) {
if (c.equals(AtomicCache.class)) {
if(c.equals(AtomicCache.class)) {
return true;
} else return c.equals(ChronoLatch.class);
}
@Override
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) {
if (!typeToken.getRawType().isAnnotationPresent(Snippet.class)) {
if(!typeToken.getRawType().isAnnotationPresent(Snippet.class)) {
return null;
}
@ -420,17 +420,17 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
public T read(JsonReader reader) throws IOException {
TypeAdapter<T> adapter = gson.getDelegateAdapter(IrisData.this, typeToken);
if (reader.peek().equals(JsonToken.STRING)) {
if(reader.peek().equals(JsonToken.STRING)) {
String r = reader.nextString();
if (r.startsWith("snippet/" + snippetType + "/")) {
if(r.startsWith("snippet/" + snippetType + "/")) {
File f = new File(getDataFolder(), r + ".json");
if (f.exists()) {
if(f.exists()) {
try {
JsonReader snippetReader = new JsonReader(new FileReader(f));
return adapter.read(snippetReader);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.error("Couldn't read snippet " + r + " in " + reader.getPath() + " (" + e.getMessage() + ")");
}
} else {
@ -443,11 +443,11 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
try {
return adapter.read(reader);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.error("Failed to read " + typeToken.getRawType().getCanonicalName() + "... faking objects a little to load the file at least.");
try {
return (T) typeToken.getRawType().getConstructor().newInstance();
} catch (Throwable ignored) {
} catch(Throwable ignored) {
}
}
@ -462,8 +462,8 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
File snippetFolder = new File(getDataFolder(), "snippet/" + f);
if (snippetFolder.exists() && snippetFolder.isDirectory()) {
for (File i : snippetFolder.listFiles()) {
if(snippetFolder.exists() && snippetFolder.isDirectory()) {
for(File i : snippetFolder.listFiles()) {
l.add("snippet/" + f + "/" + i.getName().split("\\Q.\\E")[0]);
}
}

View File

@ -56,7 +56,7 @@ public abstract class IrisRegistrant {
public File openInVSCode() {
try {
Desktop.getDesktop().open(getLoadFile());
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}

View File

@ -57,7 +57,7 @@ public class ObjectResourceLoader extends ResourceLoader<IrisObject> {
logLoad(j, t);
tlt.addAndGet(p.getMilliseconds());
return t;
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
Iris.warn("Couldn't read " + resourceTypeName + " file: " + j.getPath() + ": " + e.getMessage());
return null;
@ -65,24 +65,24 @@ public class ObjectResourceLoader extends ResourceLoader<IrisObject> {
}
public String[] getPossibleKeys() {
if (possibleKeys != null) {
if(possibleKeys != null) {
return possibleKeys;
}
Iris.debug("Building " + resourceTypeName + " Possibility Lists");
KSet<String> m = new KSet<>();
for (File i : getFolders()) {
for (File j : i.listFiles()) {
if (j.isFile() && j.getName().endsWith(".iob")) {
for(File i : getFolders()) {
for(File j : i.listFiles()) {
if(j.isFile() && j.getName().endsWith(".iob")) {
m.add(j.getName().replaceAll("\\Q.iob\\E", ""));
} else if (j.isDirectory()) {
for (File k : j.listFiles()) {
if (k.isFile() && k.getName().endsWith(".iob")) {
} else if(j.isDirectory()) {
for(File k : j.listFiles()) {
if(k.isFile() && k.getName().endsWith(".iob")) {
m.add(j.getName() + "/" + k.getName().replaceAll("\\Q.iob\\E", ""));
} else if (k.isDirectory()) {
for (File l : k.listFiles()) {
if (l.isFile() && l.getName().endsWith(".iob")) {
} else if(k.isDirectory()) {
for(File l : k.listFiles()) {
if(l.isFile() && l.getName().endsWith(".iob")) {
m.add(j.getName() + "/" + k.getName() + "/" + l.getName().replaceAll("\\Q.iob\\E", ""));
}
}
@ -98,16 +98,16 @@ public class ObjectResourceLoader extends ResourceLoader<IrisObject> {
}
public File findFile(String name) {
for (File i : getFolders(name)) {
for (File j : i.listFiles()) {
if (j.isFile() && j.getName().endsWith(".iob") && j.getName().split("\\Q.\\E")[0].equals(name)) {
for(File i : getFolders(name)) {
for(File j : i.listFiles()) {
if(j.isFile() && j.getName().endsWith(".iob") && j.getName().split("\\Q.\\E")[0].equals(name)) {
return j;
}
}
File file = new File(i, name + ".iob");
if (file.exists()) {
if(file.exists()) {
return file;
}
}
@ -122,16 +122,16 @@ public class ObjectResourceLoader extends ResourceLoader<IrisObject> {
}
private IrisObject loadRaw(String name) {
for (File i : getFolders(name)) {
for (File j : i.listFiles()) {
if (j.isFile() && j.getName().endsWith(".iob") && j.getName().split("\\Q.\\E")[0].equals(name)) {
for(File i : getFolders(name)) {
for(File j : i.listFiles()) {
if(j.isFile() && j.getName().endsWith(".iob") && j.getName().split("\\Q.\\E")[0].equals(name)) {
return loadFile(j, name);
}
}
File file = new File(i, name + ".iob");
if (file.exists()) {
if(file.exists()) {
return loadFile(file, name);
}
}

View File

@ -41,7 +41,6 @@ import java.io.File;
import java.util.Locale;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.atomic.AtomicReferenceArray;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;
@ -82,7 +81,7 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
JSONObject o = new JSONObject();
KList<String> fm = new KList<>();
for (int g = 1; g < 8; g++) {
for(int g = 1; g < 8; g++) {
fm.add("/" + folderName + Form.repeat("/*", g) + ".json");
}
@ -95,16 +94,16 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
}
public File findFile(String name) {
for (File i : getFolders(name)) {
for (File j : i.listFiles()) {
if (j.isFile() && j.getName().endsWith(".json") && j.getName().split("\\Q.\\E")[0].equals(name)) {
for(File i : getFolders(name)) {
for(File j : i.listFiles()) {
if(j.isFile() && j.getName().endsWith(".json") && j.getName().split("\\Q.\\E")[0].equals(name)) {
return j;
}
}
File file = new File(i, name + ".json");
if (file.exists()) {
if(file.exists()) {
return file;
}
}
@ -117,11 +116,11 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
public void logLoad(File path, T t) {
loads.getAndIncrement();
if (loads.get() == 1) {
if(loads.get() == 1) {
sec.flip();
}
if (sec.flip()) {
if(sec.flip()) {
J.a(() -> {
Iris.verbose("Loaded " + C.WHITE + loads.get() + " " + resourceTypeName + (loads.get() == 1 ? "" : "s") + C.GRAY + " (" + Form.f(getLoadCache().getSize()) + " " + resourceTypeName + (loadCache.getSize() == 1 ? "" : "s") + " Loaded)");
loads.set(0);
@ -142,32 +141,32 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
}
private void matchFiles(File at, KList<File> files, Predicate<File> f) {
if (at.isDirectory()) {
for (File i : at.listFiles()) {
if(at.isDirectory()) {
for(File i : at.listFiles()) {
matchFiles(i, files, f);
}
} else {
if (f.test(at)) {
if(f.test(at)) {
files.add(at);
}
}
}
public String[] getPossibleKeys() {
if (possibleKeys != null) {
if(possibleKeys != null) {
return possibleKeys;
}
KSet<String> m = new KSet<>();
KList<File> files = getFolders();
if (files == null) {
if(files == null) {
possibleKeys = new String[0];
return possibleKeys;
}
for (File i : files) {
for (File j : matchAllFiles(i, (f) -> f.getName().endsWith(".json"))) {
for(File i : files) {
for(File j : matchAllFiles(i, (f) -> f.getName().endsWith(".json"))) {
m.add(i.toURI().relativize(j.toURI()).getPath().replaceAll("\\Q.json\\E", ""));
}
}
@ -185,7 +184,7 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
try {
PrecisionStopwatch p = PrecisionStopwatch.start();
T t = getManager().getGson()
.fromJson(preprocess(new JSONObject(IO.readAll(j))).toString(0), objectClass);
.fromJson(preprocess(new JSONObject(IO.readAll(j))).toString(0), objectClass);
t.setLoadKey(name);
t.setLoadFile(j);
t.setLoader(manager);
@ -193,7 +192,7 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
logLoad(j, t);
tlt.addAndGet(p.getMilliseconds());
return t;
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
failLoad(j, e);
return null;
@ -211,10 +210,10 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
public KList<T> loadAll(KList<String> s) {
KList<T> m = new KList<>();
for (String i : s) {
for(String i : s) {
T t = load(i);
if (t != null) {
if(t != null) {
m.add(t);
}
}
@ -225,10 +224,10 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
public KList<T> loadAll(KList<String> s, Consumer<T> postLoad) {
KList<T> m = new KList<>();
for (String i : s) {
for(String i : s) {
T t = load(i);
if (t != null) {
if(t != null) {
m.add(t);
postLoad.accept(t);
}
@ -240,10 +239,10 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
public KList<T> loadAll(String[] s) {
KList<T> m = new KList<>();
for (String i : s) {
for(String i : s) {
T t = load(i);
if (t != null) {
if(t != null) {
m.add(t);
}
}
@ -256,17 +255,17 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
}
private T loadRaw(String name) {
for (File i : getFolders(name)) {
for(File i : getFolders(name)) {
//noinspection ConstantConditions
for (File j : i.listFiles()) {
if (j.isFile() && j.getName().endsWith(".json") && j.getName().split("\\Q.\\E")[0].equals(name)) {
for(File j : i.listFiles()) {
if(j.isFile() && j.getName().endsWith(".json") && j.getName().split("\\Q.\\E")[0].equals(name)) {
return loadFile(j, name);
}
}
File file = new File(i, name + ".json");
if (file.exists()) {
if(file.exists()) {
return loadFile(file, name);
}
}
@ -275,11 +274,11 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
}
public T load(String name, boolean warn) {
if (name == null) {
if(name == null) {
return null;
}
if (name.trim().isEmpty()) {
if(name.trim().isEmpty()) {
return null;
}
@ -287,12 +286,12 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
}
public KList<File> getFolders() {
if (folderCache.get() == null) {
if(folderCache.get() == null) {
folderCache.set(new KList<>());
for (File i : root.listFiles()) {
if (i.isDirectory()) {
if (i.getName().equals(folderName)) {
for(File i : root.listFiles()) {
if(i.isDirectory()) {
if(i.getName().equals(folderName)) {
folderCache.get().add(i);
break;
}
@ -306,9 +305,9 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
public KList<File> getFolders(String rc) {
KList<File> folders = getFolders().copy();
if (rc.contains(":")) {
for (File i : folders.copy()) {
if (!rc.startsWith(i.getName() + ":")) {
if(rc.contains(":")) {
for(File i : folders.copy()) {
if(!rc.startsWith(i.getName() + ":")) {
folders.remove(i);
}
}
@ -324,16 +323,16 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
}
public File fileFor(T b) {
for (File i : getFolders()) {
for (File j : i.listFiles()) {
if (j.isFile() && j.getName().endsWith(".json") && j.getName().split("\\Q.\\E")[0].equals(b.getLoadKey())) {
for(File i : getFolders()) {
for(File j : i.listFiles()) {
if(j.isFile() && j.getName().endsWith(".json") && j.getName().split("\\Q.\\E")[0].equals(b.getLoadKey())) {
return j;
}
}
File file = new File(i, b.getLoadKey() + ".json");
if (file.exists()) {
if(file.exists()) {
return file;
}
}
@ -353,8 +352,8 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
public KList<String> getPossibleKeys(String arg) {
KList<String> f = new KList<>();
for (String i : getPossibleKeys()) {
if (i.equalsIgnoreCase(arg) || i.toLowerCase(Locale.ROOT).startsWith(arg.toLowerCase(Locale.ROOT)) || i.toLowerCase(Locale.ROOT).contains(arg.toLowerCase(Locale.ROOT)) || arg.toLowerCase(Locale.ROOT).contains(i.toLowerCase(Locale.ROOT))) {
for(String i : getPossibleKeys()) {
if(i.equalsIgnoreCase(arg) || i.toLowerCase(Locale.ROOT).startsWith(arg.toLowerCase(Locale.ROOT)) || i.toLowerCase(Locale.ROOT).contains(arg.toLowerCase(Locale.ROOT)) || arg.toLowerCase(Locale.ROOT).contains(i.toLowerCase(Locale.ROOT))) {
f.add(i);
}
}

View File

@ -53,7 +53,7 @@ public class ScriptResourceLoader extends ResourceLoader<IrisScript> {
logLoad(j, t);
tlt.addAndGet(p.getMilliseconds());
return t;
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
Iris.warn("Couldn't read " + resourceTypeName + " file: " + j.getPath() + ": " + e.getMessage());
return null;
@ -61,24 +61,24 @@ public class ScriptResourceLoader extends ResourceLoader<IrisScript> {
}
public String[] getPossibleKeys() {
if (possibleKeys != null) {
if(possibleKeys != null) {
return possibleKeys;
}
Iris.debug("Building " + resourceTypeName + " Possibility Lists");
KSet<String> m = new KSet<>();
for (File i : getFolders()) {
for (File j : i.listFiles()) {
if (j.isFile() && j.getName().endsWith(".js")) {
for(File i : getFolders()) {
for(File j : i.listFiles()) {
if(j.isFile() && j.getName().endsWith(".js")) {
m.add(j.getName().replaceAll("\\Q.js\\E", ""));
} else if (j.isDirectory()) {
for (File k : j.listFiles()) {
if (k.isFile() && k.getName().endsWith(".js")) {
} else if(j.isDirectory()) {
for(File k : j.listFiles()) {
if(k.isFile() && k.getName().endsWith(".js")) {
m.add(j.getName() + "/" + k.getName().replaceAll("\\Q.js\\E", ""));
} else if (k.isDirectory()) {
for (File l : k.listFiles()) {
if (l.isFile() && l.getName().endsWith(".js")) {
} else if(k.isDirectory()) {
for(File l : k.listFiles()) {
if(l.isFile() && l.getName().endsWith(".js")) {
m.add(j.getName() + "/" + k.getName() + "/" + l.getName().replaceAll("\\Q.js\\E", ""));
}
}
@ -94,16 +94,16 @@ public class ScriptResourceLoader extends ResourceLoader<IrisScript> {
}
public File findFile(String name) {
for (File i : getFolders(name)) {
for (File j : i.listFiles()) {
if (j.isFile() && j.getName().endsWith(".js") && j.getName().split("\\Q.\\E")[0].equals(name)) {
for(File i : getFolders(name)) {
for(File j : i.listFiles()) {
if(j.isFile() && j.getName().endsWith(".js") && j.getName().split("\\Q.\\E")[0].equals(name)) {
return j;
}
}
File file = new File(i, name + ".js");
if (file.exists()) {
if(file.exists()) {
return file;
}
}
@ -114,16 +114,16 @@ public class ScriptResourceLoader extends ResourceLoader<IrisScript> {
}
private IrisScript loadRaw(String name) {
for (File i : getFolders(name)) {
for (File j : i.listFiles()) {
if (j.isFile() && j.getName().endsWith(".js") && j.getName().split("\\Q.\\E")[0].equals(name)) {
for(File i : getFolders(name)) {
for(File j : i.listFiles()) {
if(j.isFile() && j.getName().endsWith(".js") && j.getName().split("\\Q.\\E")[0].equals(name)) {
return loadFile(j, name);
}
}
File file = new File(i, name + ".js");
if (file.exists()) {
if(file.exists()) {
return loadFile(file, name);
}
}

View File

@ -20,7 +20,7 @@ package com.volmit.iris.core.nms;
import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.core.nms.v17_1.NMSBinding17_1;
import com.volmit.iris.core.nms.v18_1.NMSBinding18_1;
import com.volmit.iris.core.nms.v1X.NMSBinding1X;
import com.volmit.iris.util.collection.KMap;
import org.bukkit.Bukkit;
@ -28,7 +28,7 @@ import org.bukkit.Bukkit;
public class INMS {
//@builder
private static final KMap<String, Class<? extends INMSBinding>> bindings = new KMap<String, Class<? extends INMSBinding>>()
.qput("v1_17_R1", NMSBinding17_1.class);
.qput("v1_18_R1", NMSBinding18_1.class);
//@done
private static final INMSBinding binding = bind();
@ -37,13 +37,13 @@ public class INMS {
}
public static final String getNMSTag() {
if (IrisSettings.get().getGeneral().isDisableNMS()) {
if(IrisSettings.get().getGeneral().isDisableNMS()) {
return "BUKKIT";
}
try {
return Bukkit.getServer().getClass().getCanonicalName().split("\\Q.\\E")[3];
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
Iris.error("Failed to determine server nms version!");
e.printStackTrace();
@ -56,13 +56,13 @@ public class INMS {
String code = getNMSTag();
Iris.info("Locating NMS Binding for " + code);
if (bindings.containsKey(code)) {
if(bindings.containsKey(code)) {
try {
INMSBinding b = bindings.get(code).getConstructor().newInstance();
Iris.info("Craftbukkit " + code + " <-> " + b.getClass().getSimpleName() + " Successfully Bound");
return b;
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}

View File

@ -24,6 +24,8 @@ import java.util.ArrayList;
import java.util.List;
public enum NMSVersion {
R1_18,
R1_17,
R1_16,
R1_15,
R1_14,
@ -45,49 +47,57 @@ public enum NMSVersion {
}
public static NMSVersion current() {
if (tryVersion("1_8_R3")) {
if(tryVersion("1_8_R3")) {
return R1_8;
}
if (tryVersion("1_9_R1")) {
if(tryVersion("1_9_R1")) {
return R1_9_2;
}
if (tryVersion("1_9_R2")) {
if(tryVersion("1_9_R2")) {
return R1_9_4;
}
if (tryVersion("1_10_R1")) {
if(tryVersion("1_10_R1")) {
return R1_10;
}
if (tryVersion("1_11_R1")) {
if(tryVersion("1_11_R1")) {
return R1_11;
}
if (tryVersion("1_12_R1")) {
if(tryVersion("1_12_R1")) {
return R1_12;
}
if (tryVersion("1_13_R1")) {
if(tryVersion("1_13_R1")) {
return R1_13;
}
if (tryVersion("1_13_R2")) {
if(tryVersion("1_13_R2")) {
return R1_13_1;
}
if (tryVersion("1_14_R1")) {
if(tryVersion("1_14_R1")) {
return R1_14;
}
if (tryVersion("1_15_R1")) {
if(tryVersion("1_15_R1")) {
return R1_15;
}
if (tryVersion("1_16_R1")) {
if(tryVersion("1_16_R1")) {
return R1_16;
}
if(tryVersion("1_17_R1")) {
return R1_17;
}
if(tryVersion("1_18_R1")) {
return R1_18;
}
return null;
}
@ -95,7 +105,7 @@ public enum NMSVersion {
try {
Class.forName("org.bukkit.craftbukkit.v" + v + ".CraftWorld");
return true;
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
@ -106,8 +116,8 @@ public enum NMSVersion {
public List<NMSVersion> getAboveInclusive() {
List<NMSVersion> n = new ArrayList<>();
for (NMSVersion i : values()) {
if (i.ordinal() >= ordinal()) {
for(NMSVersion i : values()) {
if(i.ordinal() >= ordinal()) {
n.add(i);
}
}
@ -118,8 +128,8 @@ public enum NMSVersion {
public List<NMSVersion> betweenInclusive(NMSVersion other) {
List<NMSVersion> n = new ArrayList<>();
for (NMSVersion i : values()) {
if (i.ordinal() <= Math.max(other.ordinal(), ordinal()) && i.ordinal() >= Math.min(ordinal(), other.ordinal())) {
for(NMSVersion i : values()) {
if(i.ordinal() <= Math.max(other.ordinal(), ordinal()) && i.ordinal() >= Math.min(ordinal(), other.ordinal())) {
n.add(i);
}
}
@ -130,8 +140,8 @@ public enum NMSVersion {
public List<NMSVersion> getBelowInclusive() {
List<NMSVersion> n = new ArrayList<>();
for (NMSVersion i : values()) {
if (i.ordinal() <= ordinal()) {
for(NMSVersion i : values()) {
if(i.ordinal() <= ordinal()) {
n.add(i);
}
}

View File

@ -1,486 +0,0 @@
/*
* Iris is a World Generator for Minecraft Bukkit Servers
* Copyright (c) 2021 Arcane Arts (Volmit Software)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.core.nms.v17_1;
import com.volmit.iris.Iris;
import com.volmit.iris.core.nms.INMSBinding;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.nbt.io.NBTUtil;
import com.volmit.iris.util.nbt.mca.NBTWorld;
import com.volmit.iris.util.nbt.mca.palette.MCABiomeContainer;
import com.volmit.iris.util.nbt.mca.palette.MCAChunkBiomeContainer;
import com.volmit.iris.util.nbt.mca.palette.MCAGlobalPalette;
import com.volmit.iris.util.nbt.mca.palette.MCAIdMap;
import com.volmit.iris.util.nbt.mca.palette.MCAIdMapper;
import com.volmit.iris.util.nbt.mca.palette.MCAPalette;
import com.volmit.iris.util.nbt.mca.palette.MCAPaletteAccess;
import com.volmit.iris.util.nbt.mca.palette.MCAPalettedContainer;
import com.volmit.iris.util.nbt.mca.palette.MCAWrappedPalettedContainer;
import com.volmit.iris.util.nbt.tag.CompoundTag;
import net.minecraft.core.BlockPosition;
import net.minecraft.core.IRegistry;
import net.minecraft.core.IRegistryWritable;
import net.minecraft.nbt.NBTCompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagDouble;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.resources.MinecraftKey;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.level.WorldServer;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.biome.BiomeBase;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.TileEntity;
import net.minecraft.world.level.block.state.IBlockData;
import net.minecraft.world.level.chunk.BiomeStorage;
import net.minecraft.world.level.chunk.Chunk;
import net.minecraft.world.level.chunk.ChunkSection;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
import org.bukkit.craftbukkit.v1_17_R1.CraftServer;
import org.bukkit.craftbukkit.v1_17_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_17_R1.block.data.CraftBlockData;
import org.bukkit.craftbukkit.v1_17_R1.entity.CraftEntity;
import org.bukkit.entity.EntityType;
import org.bukkit.generator.ChunkGenerator;
import org.jetbrains.annotations.NotNull;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
public class NMSBinding17_1 implements INMSBinding {
private final BlockData AIR = Material.AIR.createBlockData();
private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
private final AtomicCache<MCAIdMapper<IBlockData>> registryCache = new AtomicCache<>();
private final AtomicCache<MCAPalette<IBlockData>> globalCache = new AtomicCache<>();
private final AtomicCache<MCAIdMap<BiomeBase>> biomeMapCache = new AtomicCache<>();
private Field biomeStorageCache = null;
public boolean supportsDataPacks() {
return true;
}
@Override
public MCAPaletteAccess createPalette() {
MCAIdMapper<IBlockData> registry = registryCache.aquireNasty(() -> {
Field cf = net.minecraft.core.RegistryBlockID.class.getDeclaredField("c");
Field df = net.minecraft.core.RegistryBlockID.class.getDeclaredField("d");
Field bf = net.minecraft.core.RegistryBlockID.class.getDeclaredField("b");
cf.setAccessible(true);
df.setAccessible(true);
bf.setAccessible(true);
net.minecraft.core.RegistryBlockID<IBlockData> blockData = Block.p;
int b = bf.getInt(blockData);
IdentityHashMap<IBlockData, Integer> c = (IdentityHashMap<IBlockData, Integer>) cf.get(blockData);
List<IBlockData> d = (List<IBlockData>) df.get(blockData);
return new MCAIdMapper<>(c, d, b);
});
MCAPalette<IBlockData> global = globalCache.aquireNasty(() -> new MCAGlobalPalette<>(registry, ((CraftBlockData) AIR).getState()));
MCAPalettedContainer<IBlockData> container = new MCAPalettedContainer<>(global, registry,
i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState(),
i -> NBTWorld.getCompound(CraftBlockData.fromData(i)),
((CraftBlockData) AIR).getState());
return new MCAWrappedPalettedContainer<>(container,
i -> NBTWorld.getCompound(CraftBlockData.fromData(i)),
i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState());
}
private Object getBiomeStorage(ChunkGenerator.BiomeGrid g) {
try {
return getFieldForBiomeStorage(g).get(g);
} catch (IllegalAccessException e) {
Iris.reportError(e);
e.printStackTrace();
}
return null;
}
@Override
public boolean hasTile(Location l) {
return ((CraftWorld) l.getWorld()).getHandle().getTileEntity(new BlockPosition(l.getBlockX(), l.getBlockY(), l.getBlockZ()), false) != null;
}
@Override
public CompoundTag serializeTile(Location location) {
TileEntity e = ((CraftWorld) location.getWorld()).getHandle().getTileEntity(new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), true);
if (e == null) {
return null;
}
NBTTagCompound tag = new NBTTagCompound();
e.save(tag);
return convert(tag);
}
@Override
public void deserializeTile(CompoundTag s, Location newPosition) {
NBTTagCompound c = convert(s);
if (c != null) {
int x = newPosition.getBlockX();
int y = newPosition.getBlockY();
int z = newPosition.getBlockZ();
WorldServer w = ((CraftWorld) newPosition.getWorld()).getHandle();
Chunk ch = w.getChunkAt(x >> 4, z >> 4);
ChunkSection sect = ch.getSections()[y >> 4];
IBlockData block = sect.getBlocks().a(x & 15, y & 15, z & 15);
BlockPosition pos = new BlockPosition(x, y, z);
ch.b(TileEntity.create(pos, block, c));
}
}
private NBTTagCompound convert(CompoundTag tag) {
try {
ByteArrayOutputStream boas = new ByteArrayOutputStream();
NBTUtil.write(tag, boas, false);
DataInputStream din = new DataInputStream(new ByteArrayInputStream(boas.toByteArray()));
NBTTagCompound c = NBTCompressedStreamTools.a((DataInput) din);
din.close();
return c;
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
private CompoundTag convert(NBTTagCompound tag) {
try {
ByteArrayOutputStream boas = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(boas);
NBTCompressedStreamTools.a(tag, (DataOutput) dos);
dos.close();
return (CompoundTag) NBTUtil.read(new ByteArrayInputStream(boas.toByteArray()), false).getTag();
} catch (Throwable ex) {
ex.printStackTrace();
}
return null;
}
@Override
public CompoundTag serializeEntity(org.bukkit.entity.Entity be) {
Entity entity = ((CraftEntity) be).getHandle();
NBTTagCompound tag = new NBTTagCompound();
entity.save(tag);
CompoundTag t = convert(tag);
t.putInt("btype", be.getType().ordinal());
return t;
}
@Override
public org.bukkit.entity.Entity deserializeEntity(CompoundTag s, Location newPosition) {
EntityType type = EntityType.values()[s.getInt("btype")];
s.remove("btype");
NBTTagCompound tag = convert(s);
NBTTagList pos = tag.getList("Pos", 6);
pos.a(0, NBTTagDouble.a(newPosition.getX()));
pos.a(1, NBTTagDouble.a(newPosition.getY()));
pos.a(2, NBTTagDouble.a(newPosition.getZ()));
tag.set("Pos", pos);
org.bukkit.entity.Entity be = newPosition.getWorld().spawnEntity(newPosition, type);
((CraftEntity) be).getHandle().load(tag);
return be;
}
@Override
public boolean supportsCustomHeight() {
return false;
}
private Field getFieldForBiomeStorage(Object storage) {
Field f = biomeStorageCache;
if (f != null) {
return f;
}
try {
f = storage.getClass().getDeclaredField("biome");
f.setAccessible(true);
return f;
} catch (Throwable e) {
Iris.reportError(e);
e.printStackTrace();
Iris.error(storage.getClass().getCanonicalName());
}
biomeStorageCache = f;
return null;
}
private IRegistryWritable<BiomeBase> getCustomBiomeRegistry() {
return ((CraftServer) Bukkit.getServer()).getHandle().getServer().getCustomRegistry().b(IRegistry.aO);
}
@Override
public Object getBiomeBaseFromId(int id) {
return getCustomBiomeRegistry().fromId(id);
}
@Override
public int getTrueBiomeBaseId(Object biomeBase) {
return getCustomBiomeRegistry().getId((BiomeBase) biomeBase);
}
@Override
public Object getTrueBiomeBase(Location location) {
return ((CraftWorld) location.getWorld()).getHandle().getBiome(location.getBlockX(), location.getBlockY(), location.getBlockZ());
}
@Override
public String getTrueBiomeBaseKey(Location location) {
return getKeyForBiomeBase(getTrueBiomeBase(location));
}
@Override
public boolean supportsCustomBiomes() {
return true;
}
@Override
public int getMinHeight(World world) {
return world.getMinHeight();
}
@Override
public Object getCustomBiomeBaseFor(String mckey) {
try {
return getCustomBiomeRegistry().d(ResourceKey.a(IRegistry.aO, new MinecraftKey(mckey.toLowerCase())));
} catch (Throwable e) {
Iris.reportError(e);
}
return null;
}
@SuppressWarnings("OptionalGetWithoutIsPresent")
@Override
public String getKeyForBiomeBase(Object biomeBase) {
return getCustomBiomeRegistry().c((BiomeBase) biomeBase).get().a().toString();
}
@Override
public Object getBiomeBase(World world, Biome biome) {
return getBiomeBase(((CraftWorld) world).getHandle().t().d(IRegistry.aO), biome);
}
private Class<?>[] classify(Object... par) {
Class<?>[] g = new Class<?>[par.length];
for (int i = 0; i < g.length; i++) {
g[i] = par[i].getClass();
}
return g;
}
private <T> T invoke(Object from, String name, Object... par) {
try {
Method f = from.getClass().getDeclaredMethod(name, classify(par));
f.setAccessible(true);
//noinspection unchecked
return (T) f.invoke(from, par);
} catch (Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}
return null;
}
private <T> T invokeStatic(Class<?> from, String name, Object... par) {
try {
Method f = from.getDeclaredMethod(name, classify(par));
f.setAccessible(true);
//noinspection unchecked
return (T) f.invoke(null, par);
} catch (Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}
return null;
}
private <T> T getField(Object from, String name) {
try {
Field f = from.getClass().getDeclaredField(name);
f.setAccessible(true);
//noinspection unchecked
return (T) f.get(from);
} catch (Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}
return null;
}
private <T> T getStaticField(Class<?> t, String name) {
try {
Field f = t.getDeclaredField(name);
f.setAccessible(true);
//noinspection unchecked
return (T) f.get(null);
} catch (Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}
return null;
}
@Override
public Object getBiomeBase(Object registry, Biome biome) {
Object v = baseBiomeCache.get(biome);
if (v != null) {
return v;
}
//noinspection unchecked
v = org.bukkit.craftbukkit.v1_17_R1.block.CraftBlock.biomeToBiomeBase((IRegistry<BiomeBase>) registry, biome);
if (v == null) {
// Ok so there is this new biome name called "CUSTOM" in Paper's new releases.
// But, this does NOT exist within CraftBukkit which makes it return an error.
// So, we will just return the ID that the plains biome returns instead.
//noinspection unchecked
return org.bukkit.craftbukkit.v1_17_R1.block.CraftBlock.biomeToBiomeBase((IRegistry<BiomeBase>) registry, Biome.PLAINS);
}
baseBiomeCache.put(biome, v);
return v;
}
@Override
public int getBiomeId(Biome biome) {
for (World i : Bukkit.getWorlds()) {
if (i.getEnvironment().equals(World.Environment.NORMAL)) {
IRegistry<BiomeBase> registry = ((CraftWorld) i).getHandle().t().d(IRegistry.aO);
return registry.getId((BiomeBase) getBiomeBase(registry, biome));
}
}
return biome.ordinal();
}
private MCAIdMap<BiomeBase> getBiomeMapping() {
return biomeMapCache.aquire(() -> new MCAIdMap<>() {
@NotNull
@Override
public Iterator<BiomeBase> iterator() {
return getCustomBiomeRegistry().iterator();
}
@Override
public int getId(BiomeBase paramT) {
return getCustomBiomeRegistry().getId(paramT);
}
@Override
public BiomeBase byId(int paramInt) {
return getCustomBiomeRegistry().fromId(paramInt);
}
});
}
@Override
public MCABiomeContainer newBiomeContainer(int min, int max) {
MCAChunkBiomeContainer<BiomeBase> base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max);
return getBiomeContainerInterface(getBiomeMapping(), base);
}
@Override
public MCABiomeContainer newBiomeContainer(int min, int max, int[] data) {
MCAChunkBiomeContainer<BiomeBase> base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max, data);
return getBiomeContainerInterface(getBiomeMapping(), base);
}
@NotNull
private MCABiomeContainer getBiomeContainerInterface(MCAIdMap<BiomeBase> biomeMapping, MCAChunkBiomeContainer<BiomeBase> base) {
return new MCABiomeContainer() {
@Override
public int[] getData() {
return base.writeBiomes();
}
@Override
public void setBiome(int x, int y, int z, int id) {
base.setBiome(x, y, z, biomeMapping.byId(id));
}
@Override
public int getBiome(int x, int y, int z) {
return biomeMapping.getId(base.getBiome(x, y, z));
}
};
}
@Override
public int countCustomBiomes() {
AtomicInteger a = new AtomicInteger(0);
getCustomBiomeRegistry().d().forEach((i) -> {
MinecraftKey k = i.getKey().a();
if (k.getNamespace().equals("minecraft")) {
return;
}
a.incrementAndGet();
Iris.debug("Custom Biome: " + k);
});
return a.get();
}
@Override
public void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk) {
try {
BiomeStorage s = (BiomeStorage) getFieldForBiomeStorage(chunk).get(chunk);
s.setBiome(x, y, z, (BiomeBase) somethingVeryDirty);
} catch (IllegalAccessException e) {
Iris.reportError(e);
e.printStackTrace();
}
}
@Override
public boolean isBukkit() {
return false;
}
}

View File

@ -0,0 +1,431 @@
/*
* Iris is a World Generator for Minecraft Bukkit Servers
* Copyright (c) 2021 Arcane Arts (Volmit Software)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.core.nms.v18_1;
import com.volmit.iris.Iris;
import com.volmit.iris.core.nms.INMSBinding;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.nbt.io.NBTUtil;
import com.volmit.iris.util.nbt.mca.NBTWorld;
import com.volmit.iris.util.nbt.mca.palette.MCABiomeContainer;
import com.volmit.iris.util.nbt.mca.palette.MCAChunkBiomeContainer;
import com.volmit.iris.util.nbt.mca.palette.MCAGlobalPalette;
import com.volmit.iris.util.nbt.mca.palette.MCAIdMap;
import com.volmit.iris.util.nbt.mca.palette.MCAIdMapper;
import com.volmit.iris.util.nbt.mca.palette.MCAPalette;
import com.volmit.iris.util.nbt.mca.palette.MCAPaletteAccess;
import com.volmit.iris.util.nbt.mca.palette.MCAPalettedContainer;
import com.volmit.iris.util.nbt.mca.palette.MCAWrappedPalettedContainer;
import com.volmit.iris.util.nbt.tag.CompoundTag;
import it.unimi.dsi.fastutil.objects.Object2IntMap;
import net.minecraft.core.BlockPos;
import net.minecraft.core.IdMap;
import net.minecraft.core.Registry;
import net.minecraft.core.RegistryAccess;
import net.minecraft.nbt.NbtIo;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkAccess;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
import org.bukkit.craftbukkit.v1_18_R1.CraftServer;
import org.bukkit.craftbukkit.v1_18_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_18_R1.block.data.CraftBlockData;
import org.bukkit.entity.Entity;
import org.bukkit.generator.ChunkGenerator;
import org.jetbrains.annotations.NotNull;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
public class NMSBinding18_1 implements INMSBinding {
private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
private final BlockData AIR = Material.AIR.createBlockData();
private final AtomicCache<MCAIdMap<net.minecraft.world.level.biome.Biome>> biomeMapCache = new AtomicCache<>();
private final AtomicCache<MCAIdMapper<BlockState>> registryCache = new AtomicCache<>();
private final AtomicCache<MCAPalette<BlockState>> globalCache = new AtomicCache<>();
private final AtomicCache<RegistryAccess> registryAccess = new AtomicCache<>();
private final AtomicCache<Method> byIdRef = new AtomicCache<>();
private Field biomeStorageCache = null;
@Override
public boolean hasTile(Location l) {
return ((CraftWorld) l.getWorld()).getHandle().getBlockEntity(new BlockPos(l.getBlockX(), l.getBlockY(), l.getBlockZ()), false) != null;
}
@Override
public CompoundTag serializeTile(Location location) {
BlockEntity e = ((CraftWorld) location.getWorld()).getHandle().getBlockEntity(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()), true);
if(e == null) {
return null;
}
net.minecraft.nbt.CompoundTag tag = e.saveWithFullMetadata();
return convert(tag);
}
private CompoundTag convert(net.minecraft.nbt.CompoundTag tag) {
try {
ByteArrayOutputStream boas = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(boas);
tag.write(dos);
dos.close();
return (CompoundTag) NBTUtil.read(new ByteArrayInputStream(boas.toByteArray()), false).getTag();
} catch(Throwable ex) {
ex.printStackTrace();
}
return null;
}
private net.minecraft.nbt.CompoundTag convert(CompoundTag tag) {
try {
ByteArrayOutputStream boas = new ByteArrayOutputStream();
NBTUtil.write(tag, boas, false);
DataInputStream din = new DataInputStream(new ByteArrayInputStream(boas.toByteArray()));
net.minecraft.nbt.CompoundTag c = NbtIo.read(din);
din.close();
return c;
} catch(Throwable e) {
e.printStackTrace();
}
return null;
}
@Override
public void deserializeTile(CompoundTag c, Location newPosition) {
((CraftWorld) newPosition.getWorld()).getHandle().getChunkAt(new BlockPos(newPosition.getBlockX(), 0, newPosition.getBlockZ())).setBlockEntityNbt(convert(c));
}
@Override
public CompoundTag serializeEntity(Entity location) {
return null;// TODO:
}
@Override
public Entity deserializeEntity(CompoundTag s, Location newPosition) {
return null;// TODO:
}
@Override
public boolean supportsCustomHeight() {
return true;
}
private RegistryAccess registry() {
return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer()));
}
private Registry<net.minecraft.world.level.biome.Biome> getCustomBiomeRegistry() {
return registry().registry(Registry.BIOME_REGISTRY).orElse(null);
}
private Registry<Block> getBlockRegistry() {
return registry().registry(Registry.BLOCK_REGISTRY).orElse(null);
}
@Override
public Object getBiomeBaseFromId(int id) {
try {
return byIdRef.aquire(() -> {
for(Method i : IdMap.class.getDeclaredMethods()) {
if(i.getParameterCount() == 1 && i.getParameterTypes()[0].equals(int.class)) {
Iris.info("[NMS] Found byId method in " + IdMap.class.getSimpleName() + "." + i.getName() + "(int) => " + Biome.class.getSimpleName());
return i;
}
}
Iris.error("Cannot find byId method!");
return null;
}).invoke(getCustomBiomeRegistry(), id);
} catch(IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
return null;
}
@Override
public int getMinHeight(World world) {
return world.getMinHeight();
}
@Override
public boolean supportsCustomBiomes() {
return true;
}
@Override
public int getTrueBiomeBaseId(Object biomeBase) {
return getCustomBiomeRegistry().getId((net.minecraft.world.level.biome.Biome) biomeBase);
}
@Override
public Object getTrueBiomeBase(Location location) {
return ((CraftWorld) location.getWorld()).getHandle().getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()));
}
@Override
public String getTrueBiomeBaseKey(Location location) {
return getKeyForBiomeBase(getTrueBiomeBase(location));
}
@Override
public Object getCustomBiomeBaseFor(String mckey) {
return getCustomBiomeRegistry().get(new ResourceLocation(mckey));
}
@Override
public String getKeyForBiomeBase(Object biomeBase) {
return getCustomBiomeRegistry().getKey((net.minecraft.world.level.biome.Biome) biomeBase).getPath(); // something, not something:something
}
@Override
public Object getBiomeBase(World world, Biome biome) {
return getBiomeBase(((CraftWorld) world).getHandle().registryAccess().registry(Registry.BIOME_REGISTRY).orElse(null), biome);
}
@Override
public Object getBiomeBase(Object registry, Biome biome) {
Object v = baseBiomeCache.get(biome);
if(v != null) {
return v;
}
//noinspection unchecked
v = org.bukkit.craftbukkit.v1_18_R1.block.CraftBlock.biomeToBiomeBase((Registry<net.minecraft.world.level.biome.Biome>) registry, biome);
if(v == null) {
// Ok so there is this new biome name called "CUSTOM" in Paper's new releases.
// But, this does NOT exist within CraftBukkit which makes it return an error.
// So, we will just return the ID that the plains biome returns instead.
//noinspection unchecked
return org.bukkit.craftbukkit.v1_18_R1.block.CraftBlock.biomeToBiomeBase((Registry<net.minecraft.world.level.biome.Biome>) registry, Biome.PLAINS);
}
baseBiomeCache.put(biome, v);
return v;
}
@Override
public boolean isBukkit() {
return true;
}
@Override
public int getBiomeId(Biome biome) {
for(World i : Bukkit.getWorlds()) {
if(i.getEnvironment().equals(World.Environment.NORMAL)) {
Registry<net.minecraft.world.level.biome.Biome> registry = ((CraftWorld) i).getHandle().registryAccess().registry(Registry.BIOME_REGISTRY).orElse(null);
return registry.getId((net.minecraft.world.level.biome.Biome) getBiomeBase(registry, biome));
}
}
return biome.ordinal();
}
private MCAIdMap<net.minecraft.world.level.biome.Biome> getBiomeMapping() {
return biomeMapCache.aquire(() -> new MCAIdMap<>() {
@NotNull
@Override
public Iterator<net.minecraft.world.level.biome.Biome> iterator() {
return getCustomBiomeRegistry().iterator();
}
@Override
public int getId(net.minecraft.world.level.biome.Biome paramT) {
return getCustomBiomeRegistry().getId(paramT);
}
@Override
public net.minecraft.world.level.biome.Biome byId(int paramInt) {
return (net.minecraft.world.level.biome.Biome) getBiomeBaseFromId(paramInt);
}
});
}
@NotNull
private MCABiomeContainer getBiomeContainerInterface(MCAIdMap<net.minecraft.world.level.biome.Biome> biomeMapping, MCAChunkBiomeContainer<net.minecraft.world.level.biome.Biome> base) {
return new MCABiomeContainer() {
@Override
public int[] getData() {
return base.writeBiomes();
}
@Override
public void setBiome(int x, int y, int z, int id) {
base.setBiome(x, y, z, biomeMapping.byId(id));
}
@Override
public int getBiome(int x, int y, int z) {
return biomeMapping.getId(base.getBiome(x, y, z));
}
};
}
@Override
public MCABiomeContainer newBiomeContainer(int min, int max) {
MCAChunkBiomeContainer<net.minecraft.world.level.biome.Biome> base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max);
return getBiomeContainerInterface(getBiomeMapping(), base);
}
@Override
public MCABiomeContainer newBiomeContainer(int min, int max, int[] data) {
MCAChunkBiomeContainer<net.minecraft.world.level.biome.Biome> base = new MCAChunkBiomeContainer<>(getBiomeMapping(), min, max, data);
return getBiomeContainerInterface(getBiomeMapping(), base);
}
@Override
public int countCustomBiomes() {
AtomicInteger a = new AtomicInteger(0);
getCustomBiomeRegistry().keySet().forEach((i) -> {
if(i.getNamespace().equals("minecraft")) {
return;
}
a.incrementAndGet();
Iris.debug("Custom Biome: " + i);
});
return a.get();
}
public boolean supportsDataPacks() {
return true;
}
@Override
public void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk) {
try {
ChunkAccess s = (ChunkAccess) getFieldForBiomeStorage(chunk).get(chunk);
s.setBiome(x, y, z, (net.minecraft.world.level.biome.Biome) somethingVeryDirty);
} catch(IllegalAccessException e) {
Iris.reportError(e);
e.printStackTrace();
}
}
private Field getFieldForBiomeStorage(Object storage) {
Field f = biomeStorageCache;
if(f != null) {
return f;
}
try {
f = storage.getClass().getDeclaredField("biome");
f.setAccessible(true);
return f;
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
Iris.error(storage.getClass().getCanonicalName());
}
biomeStorageCache = f;
return null;
}
@Override
public MCAPaletteAccess createPalette() {
MCAIdMapper<BlockState> registry = registryCache.aquireNasty(() -> {
Field cf = net.minecraft.core.IdMapper.class.getDeclaredField("tToId");
Field df = net.minecraft.core.IdMapper.class.getDeclaredField("idToT");
Field bf = net.minecraft.core.IdMapper.class.getDeclaredField("nextId");
cf.setAccessible(true);
df.setAccessible(true);
bf.setAccessible(true);
net.minecraft.core.IdMapper<BlockState> blockData = Block.BLOCK_STATE_REGISTRY;
int b = bf.getInt(blockData);
Object2IntMap<BlockState> c = (Object2IntMap<BlockState>) cf.get(blockData);
List<BlockState> d = (List<BlockState>) df.get(blockData);
return new MCAIdMapper<BlockState>(c, d, b);
});
MCAPalette<BlockState> global = globalCache.aquireNasty(() -> new MCAGlobalPalette<>(registry, ((CraftBlockData) AIR).getState()));
MCAPalettedContainer<BlockState> container = new MCAPalettedContainer<>(global, registry,
i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState(),
i -> NBTWorld.getCompound(CraftBlockData.fromData(i)),
((CraftBlockData) AIR).getState());
return new MCAWrappedPalettedContainer<>(container,
i -> NBTWorld.getCompound(CraftBlockData.fromData(i)),
i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState());
}
private static Object getFor(Class<?> type, Object source) {
Object o = fieldFor(type, source);
if(o != null) {
return o;
}
return invokeFor(type, source);
}
private static Object invokeFor(Class<?> returns, Object in) {
for(Method i : in.getClass().getMethods()) {
if(i.getReturnType().equals(returns)) {
i.setAccessible(true);
try {
Iris.info("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()");
return i.invoke(in);
} catch(Throwable e) {
e.printStackTrace();
}
}
}
return null;
}
private static Object fieldFor(Class<?> returns, Object in) {
for(Field i : in.getClass().getFields()) {
if(i.getType().equals(returns)) {
i.setAccessible(true);
try {
Iris.info("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName());
return i.get(in);
} catch(IllegalAccessException e) {
e.printStackTrace();
}
}
}
return null;
}
}

View File

@ -35,12 +35,12 @@ public class NMSBinding1X implements INMSBinding {
@SuppressWarnings("ConstantConditions")
private static boolean testCustomHeight() {
try {
if (World.class.getDeclaredMethod("getMaxHeight") != null && World.class.getDeclaredMethod("getMinHeight") != null)
if(World.class.getDeclaredMethod("getMaxHeight") != null && World.class.getDeclaredMethod("getMinHeight") != null)
;
{
return true;
}
} catch (Throwable ignored) {
} catch(Throwable ignored) {
}

View File

@ -54,7 +54,8 @@ public class IrisPack {
* Create an iris pack backed by a data folder
* the data folder is assumed to be in the Iris/packs/NAME folder
*
* @param name the name
* @param name
* the name
*/
public IrisPack(String name) {
this(packsPack(name));
@ -63,16 +64,17 @@ public class IrisPack {
/**
* Create an iris pack backed by a data folder
*
* @param folder the folder of the pack. Must be a directory
* @param folder
* the folder of the pack. Must be a directory
*/
public IrisPack(File folder) {
this.folder = folder;
if (!folder.exists()) {
if(!folder.exists()) {
throw new RuntimeException("Cannot open Pack " + folder.getPath() + " (directory doesnt exist)");
}
if (!folder.isDirectory()) {
if(!folder.isDirectory()) {
throw new RuntimeException("Cannot open Pack " + folder.getPath() + " (not a directory)");
}
@ -82,20 +84,23 @@ public class IrisPack {
/**
* Create a new pack from the input url
*
* @param sender the sender
* @param url the url, or name, or really anything see IrisPackRepository.from(String)
* @param sender
* the sender
* @param url
* the url, or name, or really anything see IrisPackRepository.from(String)
* @return the iris pack
* @throws IrisException fails
* @throws IrisException
* fails
*/
public static Future<IrisPack> from(VolmitSender sender, String url) throws IrisException {
IrisPackRepository repo = IrisPackRepository.from(url);
if (repo == null) {
if(repo == null) {
throw new IrisException("Null Repo");
}
try {
return from(sender, repo);
} catch (MalformedURLException e) {
} catch(MalformedURLException e) {
throw new IrisException("Malformed URL " + e.getMessage());
}
}
@ -103,10 +108,13 @@ public class IrisPack {
/**
* Create a pack from a repo
*
* @param sender the sender
* @param repo the repo
* @param sender
* the sender
* @param repo
* the repo
* @return the pack
* @throws MalformedURLException shit happens
* @throws MalformedURLException
* shit happens
*/
public static Future<IrisPack> from(VolmitSender sender, IrisPackRepository repo) throws MalformedURLException {
CompletableFuture<IrisPack> pack = new CompletableFuture<>();
@ -119,14 +127,16 @@ public class IrisPack {
/**
* Create a blank pack with a given name
*
* @param name the name of the pack
* @param name
* the name of the pack
* @return the pack
* @throws IrisException if the pack already exists or another error
* @throws IrisException
* if the pack already exists or another error
*/
public static IrisPack blank(String name) throws IrisException {
File f = packsPack(name);
if (f.exists()) {
if(f.exists()) {
throw new IrisException("Already exists");
}
@ -134,10 +144,10 @@ public class IrisPack {
fd.getParentFile().mkdirs();
try {
IO.writeAll(fd, "{\n" +
" \"name\": \"" + Form.capitalize(name) + "\",\n" +
" \"version\": 1\n" +
"}\n");
} catch (IOException e) {
" \"name\": \"" + Form.capitalize(name) + "\",\n" +
" \"version\": 1\n" +
"}\n");
} catch(IOException e) {
throw new IrisException(e.getMessage(), e);
}
@ -149,7 +159,8 @@ public class IrisPack {
/**
* Get a packs pack folder for a name. Such that overworld would resolve as Iris/packs/overworld
*
* @param name the name
* @param name
* the name
* @return the file path
*/
public static File packsPack(String name) {
@ -159,11 +170,11 @@ public class IrisPack {
private static KList<File> collectFiles(File f, String fileExtension) {
KList<File> l = new KList<>();
if (f.isDirectory()) {
for (File i : f.listFiles()) {
if(f.isDirectory()) {
for(File i : f.listFiles()) {
l.addAll(collectFiles(i, fileExtension));
}
} else if (f.getName().endsWith("." + fileExtension)) {
} else if(f.getName().endsWith("." + fileExtension)) {
l.add(f);
}
@ -214,13 +225,13 @@ public class IrisPack {
p.end();
Iris.debug("Building Workspace: " + ws.getPath() + " took " + Form.duration(p.getMilliseconds(), 2));
return true;
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
Iris.warn("Pack invalid: " + ws.getAbsolutePath() + " Re-creating. You may loose some vs-code workspace settings! But not your actual project!");
ws.delete();
try {
IO.writeAll(ws, generateWorkspaceConfig());
} catch (IOException e1) {
} catch(IOException e1) {
Iris.reportError(e1);
e1.printStackTrace();
}
@ -232,7 +243,8 @@ public class IrisPack {
/**
* Install this pack into a world
*
* @param world the world to install into (world/iris/pack)
* @param world
* the world to install into (world/iris/pack)
* @return the installed pack
*/
public IrisPack install(World world) throws IrisException {
@ -242,7 +254,8 @@ public class IrisPack {
/**
* Install this pack into a world
*
* @param world the world to install into (world/iris/pack)
* @param world
* the world to install into (world/iris/pack)
* @return the installed pack
*/
public IrisPack install(IrisWorld world) throws IrisException {
@ -252,11 +265,12 @@ public class IrisPack {
/**
* Install this pack into a world
*
* @param folder the folder to install this pack into
* @param folder
* the folder to install this pack into
* @return the installed pack
*/
public IrisPack install(File folder) throws IrisException {
if (folder.exists()) {
if(folder.exists()) {
throw new IrisException("Cannot install new pack because the folder " + folder.getName() + " already exists!");
}
@ -264,7 +278,7 @@ public class IrisPack {
try {
FileUtils.copyDirectory(getFolder(), folder);
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
}
@ -275,19 +289,20 @@ public class IrisPack {
* Create a new pack using this pack as a template. The new pack will be renamed & have a renamed dimension
* to match it.
*
* @param newName the new pack name
* @param newName
* the new pack name
* @return the new IrisPack
*/
public IrisPack install(String newName) throws IrisException {
File newPack = packsPack(newName);
if (newPack.exists()) {
if(newPack.exists()) {
throw new IrisException("Cannot install new pack because the folder " + newName + " already exists!");
}
try {
FileUtils.copyDirectory(getFolder(), newPack);
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
}
@ -299,7 +314,7 @@ public class IrisPack {
try {
FileUtils.moveFile(from, to);
new File(newPack, getWorkspaceFile().getName()).delete();
} catch (Throwable e) {
} catch(Throwable e) {
throw new IrisException(e);
}
@ -330,7 +345,8 @@ public class IrisPack {
/**
* Find all files in this pack with the given extension
*
* @param fileExtension the extension
* @param fileExtension
* the extension
* @return the list of files
*/
public KList<File> collectFiles(String fileExtension) {
@ -370,8 +386,8 @@ public class IrisPack {
JSONArray schemas = new JSONArray();
IrisData dm = IrisData.get(getFolder());
for (ResourceLoader<?> r : dm.getLoaders().v()) {
if (r.supportsSchemas()) {
for(ResourceLoader<?> r : dm.getLoaders().v()) {
if(r.supportsSchemas()) {
schemas.put(r.buildSchema());
}
}

View File

@ -51,39 +51,38 @@ public class IrisPackRepository {
private String tag = "";
/**
* @param g
* @return
*
*/
public static IrisPackRepository from(String g) {
// https://github.com/IrisDimensions/overworld
if (g.startsWith("https://github.com/")) {
if(g.startsWith("https://github.com/")) {
String sub = g.split("\\Qgithub.com/\\E")[1];
IrisPackRepository r = IrisPackRepository.builder()
.user(sub.split("\\Q/\\E")[0])
.repo(sub.split("\\Q/\\E")[1]).build();
.user(sub.split("\\Q/\\E")[0])
.repo(sub.split("\\Q/\\E")[1]).build();
if (g.contains("/tree/")) {
if(g.contains("/tree/")) {
r.setBranch(g.split("/tree/")[1]);
}
return r;
} else if (g.contains("/")) {
} else if(g.contains("/")) {
String[] f = g.split("\\Q/\\E");
if (f.length == 1) {
if(f.length == 1) {
return from(g);
} else if (f.length == 2) {
} else if(f.length == 2) {
return IrisPackRepository.builder()
.user(f[0])
.repo(f[1])
.build();
} else if (f.length >= 3) {
.user(f[0])
.repo(f[1])
.build();
} else if(f.length >= 3) {
IrisPackRepository r = IrisPackRepository.builder()
.user(f[0])
.repo(f[1])
.build();
.user(f[0])
.repo(f[1])
.build();
if (f[2].startsWith("#")) {
if(f[2].startsWith("#")) {
r.setTag(f[2].substring(1));
} else {
r.setBranch(f[2]);
@ -93,17 +92,17 @@ public class IrisPackRepository {
}
} else {
return IrisPackRepository.builder()
.user("IrisDimensions")
.repo(g)
.branch(g.equals("overworld") ? "stable" : "master")
.build();
.user("IrisDimensions")
.repo(g)
.branch(g.equals("overworld") ? "stable" : "master")
.build();
}
return null;
}
public String toURL() {
if (!tag.trim().isEmpty()) {
if(!tag.trim().isEmpty()) {
return "https://codeload.github.com/" + user + "/" + repo + "/zip/refs/tags/" + tag;
}
@ -113,19 +112,19 @@ public class IrisPackRepository {
public void install(VolmitSender sender, Runnable whenComplete) throws MalformedURLException {
File pack = Iris.instance.getDataFolderNoCreate(StudioSVC.WORKSPACE_NAME, getRepo());
if (!pack.exists()) {
if(!pack.exists()) {
File dl = new File(Iris.getTemp(), "dltk-" + UUID.randomUUID() + ".zip");
File work = new File(Iris.getTemp(), "extk-" + UUID.randomUUID());
new JobCollection(Form.capitalize(getRepo()),
new DownloadJob(toURL(), pack),
new SingleJob("Extracting", () -> ZipUtil.unpack(dl, work)),
new SingleJob("Installing", () -> {
try {
FileUtils.copyDirectory(work.listFiles()[0], pack);
} catch (IOException e) {
e.printStackTrace();
}
})).execute(sender, whenComplete);
new DownloadJob(toURL(), pack),
new SingleJob("Extracting", () -> ZipUtil.unpack(dl, work)),
new SingleJob("Installing", () -> {
try {
FileUtils.copyDirectory(work.listFiles()[0], pack);
} catch(IOException e) {
e.printStackTrace();
}
})).execute(sender, whenComplete);
} else {
sender.sendMessage("Pack already exists!");
}

View File

@ -85,7 +85,7 @@ public class IrisPregenerator {
generatedLast.set(generated.get());
chunksPerSecond.put(secondGenerated);
if (minuteLatch.flip()) {
if(minuteLatch.flip()) {
int minuteGenerated = generated.get() - generatedLastMinute.get();
generatedLastMinute.set(generated.get());
chunksPerMinute.put(minuteGenerated);
@ -93,13 +93,13 @@ public class IrisPregenerator {
}
listener.onTick(chunksPerSecond.getAverage(), chunksPerMinute.getAverage(),
regionsPerMinute.getAverage(),
(double) generated.get() / (double) totalChunks.get(),
generated.get(), totalChunks.get(),
totalChunks.get() - generated.get(),
eta, M.ms() - startTime.get(), currentGeneratorMethod.get());
regionsPerMinute.getAverage(),
(double) generated.get() / (double) totalChunks.get(),
generated.get(), totalChunks.get(),
totalChunks.get() - generated.get(),
eta, M.ms() - startTime.get(), currentGeneratorMethod.get());
if (cl.flip()) {
if(cl.flip()) {
Iris.info("Pregen: " + Form.f(generated.get()) + " of " + Form.f(totalChunks.get()) + " (" + Form.pc((double) generated.get() / (double) totalChunks.get(), 0) + ") " + Form.f((int) chunksPerSecond.getAverage()) + "/s ETA: " + Form.duration((double) eta, 2));
}
@ -110,7 +110,7 @@ public class IrisPregenerator {
private long computeETA() {
return (long) ((totalChunks.get() - generated.get()) *
((double) (M.ms() - startTime.get()) / (double) generated.get()));
((double) (M.ms() - startTime.get()) / (double) generated.get()));
}
public void close() {
@ -143,34 +143,34 @@ public class IrisPregenerator {
}
private void visitRegion(int x, int z, boolean regions) {
while (paused.get() && !shutdown.get()) {
while(paused.get() && !shutdown.get()) {
J.sleep(50);
}
if (shutdown.get()) {
if(shutdown.get()) {
listener.onRegionSkipped(x, z);
return;
}
Position2 pos = new Position2(x, z);
if (generatedRegions.contains(pos)) {
if(generatedRegions.contains(pos)) {
return;
}
currentGeneratorMethod.set(generator.getMethod(x, z));
boolean hit = false;
if (generator.supportsRegions(x, z, listener) && regions) {
if(generator.supportsRegions(x, z, listener) && regions) {
hit = true;
listener.onRegionGenerating(x, z);
generator.generateRegion(x, z, listener);
} else if (!regions) {
} else if(!regions) {
hit = true;
listener.onRegionGenerating(x, z);
PregenTask.iterateRegion(x, z, (xx, zz) -> generator.generateChunk(xx, zz, listener));
}
if (hit) {
if(hit) {
listener.onRegionGenerated(x, z);
listener.onSaving();
generator.save();
@ -180,7 +180,7 @@ public class IrisPregenerator {
}
private void checkRegion(int x, int z) {
if (generatedRegions.contains(new Position2(x, z))) {
if(generatedRegions.contains(new Position2(x, z))) {
return;
}

View File

@ -43,7 +43,7 @@ public class PregenTask {
private int height = 1;
public static void iterateRegion(int xr, int zr, Spiraled s, Position2 pull) {
for (Position2 i : ORDERS.computeIfAbsent(pull, PregenTask::computeOrder)) {
for(Position2 i : ORDERS.computeIfAbsent(pull, PregenTask::computeOrder)) {
s.on(i.getX() + (xr << 5), i.getZ() + (zr << 5));
}
}
@ -57,7 +57,7 @@ public class PregenTask {
new Spiraler(33, 33, (x, z) -> {
int xx = (x + 15);
int zz = (z + 15);
if (xx < 0 || xx > 31 || zz < 0 || zz > 31) {
if(xx < 0 || xx > 31 || zz < 0 || zz > 31) {
return;
}
@ -74,7 +74,7 @@ public class PregenTask {
new Spiraler(33, 33, (x, z) -> {
int xx = x + 15;
int zz = z + 15;
if (xx < 0 || xx > 31 || zz < 0 || zz > 31) {
if(xx < 0 || xx > 31 || zz < 0 || zz > 31) {
return;
}
@ -86,11 +86,11 @@ public class PregenTask {
public void iterateRegions(Spiraled s) {
new Spiraler(getWidth() * 2, getHeight() * 2, s)
.setOffset(center.getX(), center.getZ()).drain();
.setOffset(center.getX(), center.getZ()).drain();
}
public void iterateAllChunks(Spiraled s) {
new Spiraler(getWidth() * 2, getHeight() * 2, (x, z) -> iterateRegion(x, z, s))
.setOffset(center.getX(), center.getZ()).drain();
.setOffset(center.getX(), center.getZ()).drain();
}
}

View File

@ -43,8 +43,10 @@ public interface PregeneratorMethod {
/**
* Return true if regions can be generated
*
* @param x the x region
* @param z the z region
* @param x
* the x region
* @param z
* the z region
* @return true if they can be
*/
boolean supportsRegions(int x, int z, PregenListener listener);
@ -52,8 +54,10 @@ public interface PregeneratorMethod {
/**
* Return the name of the method being used
*
* @param x the x region
* @param z the z region
* @param x
* the x region
* @param z
* the z region
* @return the name
*/
String getMethod(int x, int z);
@ -62,18 +66,22 @@ public interface PregeneratorMethod {
* Called to generate a region. Execute sync, if multicore internally, wait
* for the task to complete
*
* @param x the x
* @param z the z
* @param listener signal chunks generating & generated. Parallel capable.
* @param x
* the x
* @param z
* the z
* @param listener
* signal chunks generating & generated. Parallel capable.
*/
void generateRegion(int x, int z, PregenListener listener);
/**
* Called to generate a chunk. You can go async so long as save will wait on the threads to finish
*
* @param x the x
* @param z the z
* @param listener
* @param x
* the x
* @param z
* the z
*/
void generateChunk(int x, int z, PregenListener listener);

View File

@ -39,7 +39,7 @@ public class AsyncPregenMethod implements PregeneratorMethod {
private final KList<Future<?>> future;
public AsyncPregenMethod(World world, int threads) {
if (!PaperLib.isPaper()) {
if(!PaperLib.isPaper()) {
throw new UnsupportedOperationException("Cannot use PaperAsync on non paper!");
}
@ -51,17 +51,17 @@ public class AsyncPregenMethod implements PregeneratorMethod {
private void unloadAndSaveAllChunks() {
try {
J.sfut(() -> {
if (world == null) {
if(world == null) {
Iris.warn("World was null somehow...");
return;
}
for (Chunk i : world.getLoadedChunks()) {
for(Chunk i : world.getLoadedChunks()) {
i.unload(true);
}
world.save();
}).get();
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
}
}
@ -71,7 +71,7 @@ public class AsyncPregenMethod implements PregeneratorMethod {
PaperLib.getChunkAtAsync(world, x, z, true).get();
listener.onChunkGenerated(x, z);
listener.onChunkCleaned(x, z);
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
J.sleep(5);
future.add(burst.complete(() -> completeChunk(x, z, listener)));
@ -79,11 +79,11 @@ public class AsyncPregenMethod implements PregeneratorMethod {
}
private void waitForChunks() {
for (Future<?> i : future.copy()) {
for(Future<?> i : future.copy()) {
try {
i.get();
future.remove(i);
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
}
}
@ -123,7 +123,7 @@ public class AsyncPregenMethod implements PregeneratorMethod {
@Override
public void generateChunk(int x, int z, PregenListener listener) {
if (future.size() > IrisSettings.getThreadCount(IrisSettings.get().getConcurrency().getParallelism())) { // TODO: FIX
if(future.size() > IrisSettings.getThreadCount(IrisSettings.get().getConcurrency().getParallelism())) { // TODO: FIX
waitForChunks();
}
@ -133,7 +133,7 @@ public class AsyncPregenMethod implements PregeneratorMethod {
@Override
public Mantle getMantle() {
if (IrisToolbelt.isIrisWorld(world)) {
if(IrisToolbelt.isIrisWorld(world)) {
return IrisToolbelt.access(world).getEngine().getMantle().getMantle();
}

View File

@ -38,7 +38,7 @@ public class HybridPregenMethod implements PregeneratorMethod {
public HybridPregenMethod(World world, int threads) {
this.world = world;
headless = supportsHeadless(world)
? new HeadlessPregenMethod(HeadlessWorld.from(world)) : new DummyPregenMethod();
? new HeadlessPregenMethod(HeadlessWorld.from(world)) : new DummyPregenMethod();
inWorld = new AsyncOrMedievalPregenMethod(world, threads);
}
@ -71,18 +71,18 @@ public class HybridPregenMethod implements PregeneratorMethod {
@Override
public boolean supportsRegions(int x, int z, PregenListener listener) {
if (headless instanceof DummyPregenMethod) {
if(headless instanceof DummyPregenMethod) {
return false;
}
boolean r = !new File(world.getWorldFolder(), "region/r." + x + "." + z + ".mca").exists();
if (!r && listener != null) {
if(!r && listener != null) {
try {
for (Position2 i : ((HeadlessPregenMethod) headless).getGenerator().getChunksInRegion(x, z)) {
for(Position2 i : ((HeadlessPregenMethod) headless).getGenerator().getChunksInRegion(x, z)) {
listener.onChunkExistsInRegionGen((x << 5) + i.getX(), (z << 5) + i.getZ());
}
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
}
@ -102,7 +102,7 @@ public class HybridPregenMethod implements PregeneratorMethod {
@Override
public Mantle getMantle() {
if (headless == null) {
if(headless == null) {
return inWorld.getMantle();
}

View File

@ -40,10 +40,10 @@ public class MedievalPregenMethod implements PregeneratorMethod {
}
private void waitForChunks() {
for (CompletableFuture<?> i : futures) {
for(CompletableFuture<?> i : futures) {
try {
i.get();
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
}
}
@ -55,12 +55,12 @@ public class MedievalPregenMethod implements PregeneratorMethod {
waitForChunks();
try {
J.sfut(() -> {
for (Chunk i : world.getLoadedChunks()) {
for(Chunk i : world.getLoadedChunks()) {
i.unload(true);
}
world.save();
}).get();
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
}
}
@ -97,7 +97,7 @@ public class MedievalPregenMethod implements PregeneratorMethod {
@Override
public void generateChunk(int x, int z, PregenListener listener) {
if (futures.size() > IrisSettings.getThreadCount(IrisSettings.get().getConcurrency().getParallelism())) {
if(futures.size() > IrisSettings.getThreadCount(IrisSettings.get().getConcurrency().getParallelism())) {
waitForChunks();
}
@ -111,7 +111,7 @@ public class MedievalPregenMethod implements PregeneratorMethod {
@Override
public Mantle getMantle() {
if (IrisToolbelt.isIrisWorld(world)) {
if(IrisToolbelt.isIrisWorld(world)) {
return IrisToolbelt.access(world).getEngine().getMantle().getMantle();
}

View File

@ -70,40 +70,40 @@ public class SyndicatePregenMethod implements PregeneratorMethod {
}
public synchronized void setup() {
if (ready) {
if(ready) {
return;
}
ready = false;
try {
connect().command(SyndicateInstallPack
.builder()
.dimension(dimension)
.pack(pack)
.seed(seed)
.build())
.output((o) -> {
File to = new File(Iris.getTemp(), "send-" + pack + ".zip");
ZipUtil.pack(dimension.getLoader().getDataFolder(), to);
.builder()
.dimension(dimension)
.pack(pack)
.seed(seed)
.build())
.output((o) -> {
File to = new File(Iris.getTemp(), "send-" + pack + ".zip");
ZipUtil.pack(dimension.getLoader().getDataFolder(), to);
try {
IO.writeAll(to, o);
} catch (IOException e) {
e.printStackTrace();
}
try {
IO.writeAll(to, o);
} catch(IOException e) {
e.printStackTrace();
}
to.deleteOnExit();
})
.build().go((response, data) -> {
if (response instanceof SyndicateBusy) {
throw new RuntimeException("Service is busy, will try later");
}
to.deleteOnExit();
})
.build().go((response, data) -> {
if(response instanceof SyndicateBusy) {
throw new RuntimeException("Service is busy, will try later");
}
ready = true;
});
ready = true;
});
ready = true;
} catch (Throwable throwable) {
if (throwable instanceof RuntimeException) {
} catch(Throwable throwable) {
if(throwable instanceof RuntimeException) {
ready = false;
return;
}
@ -113,7 +113,7 @@ public class SyndicatePregenMethod implements PregeneratorMethod {
}
public boolean canGenerate() {
if (!ready) {
if(!ready) {
J.a(this::setup);
}
@ -127,17 +127,17 @@ public class SyndicatePregenMethod implements PregeneratorMethod {
@Override
public void close() {
if (ready) {
if(ready) {
try {
connect()
.command(SyndicateClose
.builder()
.pack(pack)
.build())
.build()
.go((__, __b) -> {
});
} catch (Throwable throwable) {
.command(SyndicateClose
.builder()
.pack(pack)
.build())
.build()
.go((__, __b) -> {
});
} catch(Throwable throwable) {
throwable.printStackTrace();
}
}
@ -162,24 +162,24 @@ public class SyndicatePregenMethod implements PregeneratorMethod {
AtomicDouble progress = new AtomicDouble(-1);
try {
connect()
.command(SyndicateGetProgress.builder()
.pack(pack).build()).output((i) -> {
}).build().go((response, o) -> {
if (response instanceof SyndicateSendProgress) {
if (((SyndicateSendProgress) response).isAvailable()) {
progress.set(((SyndicateSendProgress) response).getProgress());
File f = new File(worldFolder, "region/r." + x + "." + z + ".mca");
try {
f.getParentFile().mkdirs();
IO.writeAll(f, o);
progress.set(1000);
} catch (Throwable e) {
e.printStackTrace();
}
.command(SyndicateGetProgress.builder()
.pack(pack).build()).output((i) -> {
}).build().go((response, o) -> {
if(response instanceof SyndicateSendProgress) {
if(((SyndicateSendProgress) response).isAvailable()) {
progress.set(((SyndicateSendProgress) response).getProgress());
File f = new File(worldFolder, "region/r." + x + "." + z + ".mca");
try {
f.getParentFile().mkdirs();
IO.writeAll(f, o);
progress.set(1000);
} catch(Throwable e) {
e.printStackTrace();
}
}
});
} catch (Throwable throwable) {
}
});
} catch(Throwable throwable) {
throwable.printStackTrace();
}
@ -188,73 +188,73 @@ public class SyndicatePregenMethod implements PregeneratorMethod {
@Override
public void generateRegion(int x, int z, PregenListener listener) {
if (!ready) {
if(!ready) {
throw new RuntimeException();
}
try {
connect().command(SyndicateGenerate
.builder()
.x(x).z(z).pack(pack)
.build())
.build().go((response, data) -> {
if (response instanceof SyndicateOK) {
listener.onNetworkStarted(x, z);
J.a(() -> {
double lastp = 0;
int calls = 0;
boolean installed = false;
while (true) {
J.sleep(100);
double progress = checkProgress(x, z);
if (progress == 1000) {
installed = true;
AtomicInteger a = new AtomicInteger(calls);
PregenTask.iterateRegion(x, z, (xx, zz) -> {
if (a.decrementAndGet() < 0) {
listener.onNetworkGeneratedChunk(xx, zz);
}
});
calls = 1024;
} else if (progress < 0) {
break;
}
int change = (int) Math.floor((progress - lastp) * 1024D);
change = change == 0 ? 1 : change;
.builder()
.x(x).z(z).pack(pack)
.build())
.build().go((response, data) -> {
if(response instanceof SyndicateOK) {
listener.onNetworkStarted(x, z);
J.a(() -> {
double lastp = 0;
int calls = 0;
boolean installed = false;
while(true) {
J.sleep(100);
double progress = checkProgress(x, z);
if(progress == 1000) {
installed = true;
AtomicInteger a = new AtomicInteger(calls);
AtomicInteger b = new AtomicInteger(change);
PregenTask.iterateRegion(x, z, (xx, zz) -> {
if (a.decrementAndGet() < 0) {
if (b.decrementAndGet() >= 0) {
listener.onNetworkGeneratedChunk(xx, zz);
}
if(a.decrementAndGet() < 0) {
listener.onNetworkGeneratedChunk(xx, zz);
}
});
calls += change;
calls = 1024;
} else if(progress < 0) {
break;
}
if (!installed) {
// TODO RETRY REGION
return;
}
int change = (int) Math.floor((progress - lastp) * 1024D);
change = change == 0 ? 1 : change;
listener.onNetworkDownloaded(x, z);
});
} else if (response instanceof SyndicateInstallFirst) {
ready = false;
throw new RuntimeException();
} else if (response instanceof SyndicateBusy) {
throw new RuntimeException();
} else {
throw new RuntimeException();
}
});
} catch (Throwable throwable) {
AtomicInteger a = new AtomicInteger(calls);
AtomicInteger b = new AtomicInteger(change);
PregenTask.iterateRegion(x, z, (xx, zz) -> {
if(a.decrementAndGet() < 0) {
if(b.decrementAndGet() >= 0) {
listener.onNetworkGeneratedChunk(xx, zz);
}
}
});
calls += change;
}
if (throwable instanceof RuntimeException) {
if(!installed) {
// TODO RETRY REGION
return;
}
listener.onNetworkDownloaded(x, z);
});
} else if(response instanceof SyndicateInstallFirst) {
ready = false;
throw new RuntimeException();
} else if(response instanceof SyndicateBusy) {
throw new RuntimeException();
} else {
throw new RuntimeException();
}
});
} catch(Throwable throwable) {
if(throwable instanceof RuntimeException) {
throw (RuntimeException) throwable;
}

View File

@ -40,7 +40,7 @@ public class SyndicateClient {
DataOutputStream o = new DataOutputStream(socket.getOutputStream());
SyndicateCommandIO.write(command, o);
if (output != null) {
if(output != null) {
output.accept(o);
}

View File

@ -69,7 +69,7 @@ public class SyndicateServer extends Thread implements PregenListener {
}
public void run() {
while (!interrupted()) {
while(!interrupted()) {
try {
Socket client = server.accept();
DataInputStream i = new DataInputStream(client.getInputStream());
@ -77,13 +77,13 @@ public class SyndicateServer extends Thread implements PregenListener {
try {
handle(client, i, o);
o.flush();
} catch (Throwable throwable) {
} catch(Throwable throwable) {
throwable.printStackTrace();
}
client.close();
} catch (SocketTimeoutException ignored) {
} catch(SocketTimeoutException ignored) {
} catch (IOException e) {
} catch(IOException e) {
e.printStackTrace();
}
}
@ -92,7 +92,7 @@ public class SyndicateServer extends Thread implements PregenListener {
private void handle(Socket client, DataInputStream i, DataOutputStream o) throws Throwable {
SyndicateCommand cmd = handle(SyndicateCommandIO.read(i), i, o);
if (cmd != null) {
if(cmd != null) {
SyndicateCommandIO.write(cmd, o);
}
@ -104,12 +104,12 @@ public class SyndicateServer extends Thread implements PregenListener {
}
private SyndicateCommand handle(SyndicateCommand command, DataInputStream i, DataOutputStream o) throws Throwable {
if (command instanceof SyndicateInstallPack) {
if (busy) {
if(command instanceof SyndicateInstallPack) {
if(busy) {
return new SyndicateBusy();
}
if (generator != null) {
if(generator != null) {
generator.close();
IO.delete(generator.getWorld().getWorld().worldFolder());
generator = null;
@ -133,12 +133,12 @@ public class SyndicateServer extends Thread implements PregenListener {
return new SyndicateOK();
}
if (command instanceof SyndicateGenerate) {
if (busy) {
if(command instanceof SyndicateGenerate) {
if(busy) {
return new SyndicateBusy();
}
if (generator == null || !Objects.equals(currentId, ((SyndicateGenerate) command).getPack())) {
if(generator == null || !Objects.equals(currentId, ((SyndicateGenerate) command).getPack())) {
return new SyndicateInstallFirst();
}
@ -151,8 +151,8 @@ public class SyndicateServer extends Thread implements PregenListener {
return new SyndicateOK();
}
if (command instanceof SyndicateClose) {
if (generator != null && Objects.equals(currentId, ((SyndicateClose) command).getPack()) && !busy) {
if(command instanceof SyndicateClose) {
if(generator != null && Objects.equals(currentId, ((SyndicateClose) command).getPack()) && !busy) {
generator.close();
IO.delete(generator.getWorld().getWorld().worldFolder());
generator = null;
@ -160,18 +160,18 @@ public class SyndicateServer extends Thread implements PregenListener {
}
}
if (command instanceof SyndicateGetProgress) {
if (generator != null && busy && Objects.equals(currentId, ((SyndicateGetProgress) command).getPack())) {
if(command instanceof SyndicateGetProgress) {
if(generator != null && busy && Objects.equals(currentId, ((SyndicateGetProgress) command).getPack())) {
return SyndicateSendProgress.builder().progress((double) g.get() / 1024D).build();
} else if (generator != null && !busy && Objects.equals(currentId, ((SyndicateGetProgress) command).getPack()) && lastGeneratedRegion != null && lastGeneratedRegion.exists()) {
} else if(generator != null && !busy && Objects.equals(currentId, ((SyndicateGetProgress) command).getPack()) && lastGeneratedRegion != null && lastGeneratedRegion.exists()) {
SyndicateCommandIO.write(SyndicateSendProgress
.builder()
.progress(1).available(true)
.build(), o);
.builder()
.progress(1).available(true)
.build(), o);
o.writeLong(lastGeneratedRegion.length());
IO.writeAll(lastGeneratedRegion, o);
return null;
} else if (generator == null) {
} else if(generator == null) {
return new SyndicateInstallFirst();
} else {
return new SyndicateBusy();

View File

@ -82,14 +82,14 @@ public class IrisProject {
public static int clean(VolmitSender s, File clean) {
int c = 0;
if (clean.isDirectory()) {
for (File i : clean.listFiles()) {
if(clean.isDirectory()) {
for(File i : clean.listFiles()) {
c += clean(s, i);
}
} else if (clean.getName().endsWith(".json")) {
} else if(clean.getName().endsWith(".json")) {
try {
clean(clean);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
Iris.error("Failed to beautify " + clean.getAbsolutePath() + " You may have errors in your json!");
}
@ -108,29 +108,29 @@ public class IrisProject {
}
public static void fixBlocks(JSONObject obj, File f) {
for (String i : obj.keySet()) {
for(String i : obj.keySet()) {
Object o = obj.get(i);
if (i.equals("block") && o instanceof String && !o.toString().trim().isEmpty() && !o.toString().contains(":")) {
if(i.equals("block") && o instanceof String && !o.toString().trim().isEmpty() && !o.toString().contains(":")) {
obj.put(i, "minecraft:" + o);
Iris.debug("Updated Block Key: " + o + " to " + obj.getString(i) + " in " + f.getPath());
}
if (o instanceof JSONObject) {
if(o instanceof JSONObject) {
fixBlocks((JSONObject) o, f);
} else if (o instanceof JSONArray) {
} else if(o instanceof JSONArray) {
fixBlocks((JSONArray) o, f);
}
}
}
public static void fixBlocks(JSONArray obj, File f) {
for (int i = 0; i < obj.length(); i++) {
for(int i = 0; i < obj.length(); i++) {
Object o = obj.get(i);
if (o instanceof JSONObject) {
if(o instanceof JSONObject) {
fixBlocks((JSONObject) o, f);
} else if (o instanceof JSONArray) {
} else if(o instanceof JSONArray) {
fixBlocks((JSONArray) o, f);
}
}
@ -143,11 +143,11 @@ public class IrisProject {
public KList<File> collectFiles(File f, String fileExtension) {
KList<File> l = new KList<>();
if (f.isDirectory()) {
for (File i : f.listFiles()) {
if(f.isDirectory()) {
for(File i : f.listFiles()) {
l.addAll(collectFiles(i, fileExtension));
}
} else if (f.getName().endsWith("." + fileExtension)) {
} else if(f.getName().endsWith("." + fileExtension)) {
l.add(f);
}
@ -170,28 +170,28 @@ public class IrisProject {
J.attemptAsync(() ->
{
try {
if (d.getLoader() == null) {
if(d.getLoader() == null) {
sender.sendMessage("Could not get dimension loader");
return;
}
File f = d.getLoader().getDataFolder();
if (!doOpenVSCode(f)) {
if(!doOpenVSCode(f)) {
File ff = new File(d.getLoader().getDataFolder(), d.getLoadKey() + ".code-workspace");
Iris.warn("Project missing code-workspace: " + ff.getAbsolutePath() + " Re-creating code workspace.");
try {
IO.writeAll(ff, createCodeWorkspaceConfig());
} catch (IOException e1) {
} catch(IOException e1) {
Iris.reportError(e1);
e1.printStackTrace();
}
updateWorkspace();
if (!doOpenVSCode(f)) {
if(!doOpenVSCode(f)) {
Iris.warn("Tried creating code workspace but failed a second time. Your project is likely corrupt.");
}
}
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -200,16 +200,16 @@ public class IrisProject {
private boolean doOpenVSCode(File f) throws IOException {
boolean foundWork = false;
for (File i : Objects.requireNonNull(f.listFiles())) {
if (i.getName().endsWith(".code-workspace")) {
for(File i : Objects.requireNonNull(f.listFiles())) {
if(i.getName().endsWith(".code-workspace")) {
foundWork = true;
J.a(() ->
{
updateWorkspace();
});
if (IrisSettings.get().getStudio().isOpenVSCode()) {
if (!GraphicsEnvironment.isHeadless()) {
if(IrisSettings.get().getStudio().isOpenVSCode()) {
if(!GraphicsEnvironment.isHeadless()) {
Iris.msg("Opening VSCode. You may see the output from VSCode.");
Iris.msg("VSCode output always starts with: '(node:#####) electron'");
Desktop.getDesktop().open(i);
@ -223,21 +223,21 @@ public class IrisProject {
}
public void open(VolmitSender sender, long seed, Consumer<World> onDone) throws IrisException {
if (isOpen()) {
if(isOpen()) {
close();
}
boolean hasError = false;
if (hasError) {
if(hasError) {
return;
}
IrisDimension d = IrisData.loadAnyDimension(getName());
if (d == null) {
if(d == null) {
sender.sendMessage("Can't find dimension: " + getName());
return;
} else if (sender.isPlayer()) {
} else if(sender.isPlayer()) {
sender.player().setGameMode(GameMode.SPECTATOR);
}
@ -247,14 +247,14 @@ public class IrisProject {
J.a(() -> {
try {
activeProvider = (PlatformChunkGenerator) IrisToolbelt.createWorld()
.seed(seed)
.sender(sender)
.studio(true)
.name("iris/" + UUID.randomUUID())
.dimension(d.getLoadKey())
.create().getGenerator();
.seed(seed)
.sender(sender)
.studio(true)
.name("iris/" + UUID.randomUUID())
.dimension(d.getLoadKey())
.create().getGenerator();
onDone.accept(activeProvider.getTarget().getWorld().realWorld());
} catch (IrisException e) {
} catch(IrisException e) {
e.printStackTrace();
}
});
@ -286,13 +286,13 @@ public class IrisProject {
IO.writeAll(ws, j.toString(4));
p.end();
return true;
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
Iris.warn("Project invalid: " + ws.getAbsolutePath() + " Re-creating. You may loose some vs-code workspace settings! But not your actual project!");
ws.delete();
try {
IO.writeAll(ws, createCodeWorkspaceConfig());
} catch (IOException e1) {
} catch(IOException e1) {
Iris.reportError(e1);
e1.printStackTrace();
}
@ -334,19 +334,19 @@ public class IrisProject {
JSONArray schemas = new JSONArray();
IrisData dm = IrisData.get(getPath());
for (ResourceLoader<?> r : dm.getLoaders().v()) {
if (r.supportsSchemas()) {
for(ResourceLoader<?> r : dm.getLoaders().v()) {
if(r.supportsSchemas()) {
schemas.put(r.buildSchema());
}
}
for (Class<?> i : Iris.getClasses("com.volmit.iris.engine.object.", Snippet.class)) {
for(Class<?> i : Iris.getClasses("com.volmit.iris.engine.object.", Snippet.class)) {
try {
String snipType = i.getDeclaredAnnotation(Snippet.class).value();
JSONObject o = new JSONObject();
KList<String> fm = new KList<>();
for (int g = 1; g < 8; g++) {
for(int g = 1; g < 8; g++) {
fm.add("/snippet/" + snipType + Form.repeat("/*", g) + ".json");
}
@ -357,11 +357,11 @@ public class IrisProject {
J.attemptAsync(() -> {
try {
IO.writeAll(a, new SchemaBuilder(i, dm).construct().toString(4));
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
}
});
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
}
}
@ -387,7 +387,7 @@ public class IrisProject {
KSet<IrisLootTable> loot = new KSet<>();
KSet<IrisBlockData> blocks = new KSet<>();
for (String i : dm.getDimensionLoader().getPossibleKeys()) {
for(String i : dm.getDimensionLoader().getPossibleKeys()) {
blocks.add(dm.getBlockLoader().load(i));
}
@ -407,13 +407,13 @@ public class IrisProject {
StringBuilder c = new StringBuilder();
sender.sendMessage("Serializing Objects");
for (IrisBiome i : biomes) {
for (IrisObjectPlacement j : i.getObjects()) {
for(IrisBiome i : biomes) {
for(IrisObjectPlacement j : i.getObjects()) {
b.append(j.hashCode());
KList<String> newNames = new KList<>();
for (String k : j.getPlace()) {
if (renameObjects.containsKey(k)) {
for(String k : j.getPlace()) {
if(renameObjects.containsKey(k)) {
newNames.add(renameObjects.get(k));
continue;
}
@ -441,12 +441,12 @@ public class IrisProject {
gb.append(IO.hash(f));
ggg.set(ggg.get() + 1);
if (cl.flip()) {
if(cl.flip()) {
int g = ggg.get();
ggg.set(0);
sender.sendMessage("Wrote another " + g + " Objects");
}
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
})));
@ -462,7 +462,7 @@ public class IrisProject {
IO.writeAll(new File(folder, "dimensions/" + dimension.getLoadKey() + ".json"), a);
b.append(IO.hash(a));
for (IrisGenerator i : generators) {
for(IrisGenerator i : generators) {
a = new JSONObject(new Gson().toJson(i)).toString(minify ? 0 : 4);
IO.writeAll(new File(folder, "generators/" + i.getLoadKey() + ".json"), a);
b.append(IO.hash(a));
@ -471,31 +471,31 @@ public class IrisProject {
c.append(IO.hash(b.toString()));
b = new StringBuilder();
for (IrisRegion i : regions) {
for(IrisRegion i : regions) {
a = new JSONObject(new Gson().toJson(i)).toString(minify ? 0 : 4);
IO.writeAll(new File(folder, "regions/" + i.getLoadKey() + ".json"), a);
b.append(IO.hash(a));
}
for (IrisBlockData i : blocks) {
for(IrisBlockData i : blocks) {
a = new JSONObject(new Gson().toJson(i)).toString(minify ? 0 : 4);
IO.writeAll(new File(folder, "blocks/" + i.getLoadKey() + ".json"), a);
b.append(IO.hash(a));
}
for (IrisBiome i : biomes) {
for(IrisBiome i : biomes) {
a = new JSONObject(new Gson().toJson(i)).toString(minify ? 0 : 4);
IO.writeAll(new File(folder, "biomes/" + i.getLoadKey() + ".json"), a);
b.append(IO.hash(a));
}
for (IrisEntity i : entities) {
for(IrisEntity i : entities) {
a = new JSONObject(new Gson().toJson(i)).toString(minify ? 0 : 4);
IO.writeAll(new File(folder, "entities/" + i.getLoadKey() + ".json"), a);
b.append(IO.hash(a));
}
for (IrisLootTable i : loot) {
for(IrisLootTable i : loot) {
a = new JSONObject(new Gson().toJson(i)).toString(minify ? 0 : 4);
IO.writeAll(new File(folder, "loot/" + i.getLoadKey() + ".json"), a);
b.append(IO.hash(a));
@ -515,7 +515,7 @@ public class IrisProject {
sender.sendMessage("Package Compiled!");
return p;
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -538,18 +538,18 @@ public class IrisProject {
IrisObject o = new IrisObject(0, 0, 0);
o.read(f);
if (o.getBlocks().isEmpty()) {
if(o.getBlocks().isEmpty()) {
sender.sendMessageRaw("<hover:show_text:'Error:\n" +
"<yellow>" + f.getPath() +
"'><red>- IOB " + f.getName() + " has 0 blocks!");
"<yellow>" + f.getPath() +
"'><red>- IOB " + f.getName() + " has 0 blocks!");
}
if (o.getW() == 0 || o.getH() == 0 || o.getD() == 0) {
if(o.getW() == 0 || o.getH() == 0 || o.getD() == 0) {
sender.sendMessageRaw("<hover:show_text:'Error:\n" +
"<yellow>" + f.getPath() + "\n<red>The width height or depth has a zero in it (bad format)" +
"'><red>- IOB " + f.getName() + " is not 3D!");
"<yellow>" + f.getPath() + "\n<red>The width height or depth has a zero in it (bad format)" +
"'><red>- IOB " + f.getName() + " is not 3D!");
}
} catch (IOException e) {
} catch(IOException e) {
e.printStackTrace();
}
}
@ -569,11 +569,11 @@ public class IrisProject {
scanForErrors(data, f, p, sender);
IO.writeAll(f, p.toString(4));
} catch (Throwable e) {
} catch(Throwable e) {
sender.sendMessageRaw("<hover:show_text:'Error:\n" +
"<yellow>" + f.getPath() +
"\n<red>" + e.getMessage() +
"'><red>- JSON Error " + f.getName());
"<yellow>" + f.getPath() +
"\n<red>" + e.getMessage() +
"'><red>- JSON Error " + f.getName());
}
}
@ -590,7 +590,7 @@ public class IrisProject {
String key = data.toLoadKey(f);
ResourceLoader<?> loader = data.getTypedLoaderFor(f);
if (loader == null) {
if(loader == null) {
sender.sendMessageBasic("Can't find loader for " + f.getPath());
return;
}
@ -603,62 +603,62 @@ public class IrisProject {
public void compare(Class<?> c, JSONObject j, VolmitSender sender, KList<String> path) {
try {
Object o = c.getClass().getConstructor().newInstance();
} catch (Throwable e) {
} catch(Throwable e) {
}
}
public void files(File clean, KList<File> files) {
if (clean.isDirectory()) {
for (File i : clean.listFiles()) {
if(clean.isDirectory()) {
for(File i : clean.listFiles()) {
files(i, files);
}
} else if (clean.getName().endsWith(".json")) {
} else if(clean.getName().endsWith(".json")) {
try {
files.add(clean);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
}
}
public void filesObjects(File clean, KList<File> files) {
if (clean.isDirectory()) {
for (File i : clean.listFiles()) {
if(clean.isDirectory()) {
for(File i : clean.listFiles()) {
filesObjects(i, files);
}
} else if (clean.getName().endsWith(".iob")) {
} else if(clean.getName().endsWith(".iob")) {
try {
files.add(clean);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
}
}
private void fixBlocks(JSONObject obj) {
for (String i : obj.keySet()) {
for(String i : obj.keySet()) {
Object o = obj.get(i);
if (i.equals("block") && o instanceof String && !o.toString().trim().isEmpty() && !o.toString().contains(":")) {
if(i.equals("block") && o instanceof String && !o.toString().trim().isEmpty() && !o.toString().contains(":")) {
obj.put(i, "minecraft:" + o);
}
if (o instanceof JSONObject) {
if(o instanceof JSONObject) {
fixBlocks((JSONObject) o);
} else if (o instanceof JSONArray) {
} else if(o instanceof JSONArray) {
fixBlocks((JSONArray) o);
}
}
}
private void fixBlocks(JSONArray obj) {
for (int i = 0; i < obj.length(); i++) {
for(int i = 0; i < obj.length(); i++) {
Object o = obj.get(i);
if (o instanceof JSONObject) {
if(o instanceof JSONObject) {
fixBlocks((JSONObject) o);
} else if (o instanceof JSONArray) {
} else if(o instanceof JSONArray) {
fixBlocks((JSONArray) o);
}
}

View File

@ -70,7 +70,7 @@ public class SchemaBuilder {
private static JSONArray getEnchantmentTypes() {
JSONArray a = new JSONArray();
for (Field gg : Enchantment.class.getDeclaredFields()) {
for(Field gg : Enchantment.class.getDeclaredFields()) {
a.put(gg.getName());
}
@ -80,7 +80,7 @@ public class SchemaBuilder {
private static JSONArray getPotionTypes() {
JSONArray a = new JSONArray();
for (PotionEffectType gg : PotionEffectType.values()) {
for(PotionEffectType gg : PotionEffectType.values()) {
a.put(gg.getName().toUpperCase().replaceAll("\\Q \\E", "_"));
}
@ -94,21 +94,21 @@ public class SchemaBuilder {
JSONObject props = buildProperties(root);
for (String i : props.keySet()) {
if (!schema.has(i)) {
for(String i : props.keySet()) {
if(!schema.has(i)) {
schema.put(i, props.get(i));
}
}
JSONObject defs = new JSONObject();
for (Map.Entry<String, JSONObject> entry : definitions.entrySet()) {
for(Map.Entry<String, JSONObject> entry : definitions.entrySet()) {
defs.put(entry.getKey(), entry.getValue());
}
schema.put("definitions", defs);
for (String i : warnings) {
for(String i : warnings) {
Iris.warn(root.getSimpleName() + ": " + i);
}
@ -122,17 +122,17 @@ public class SchemaBuilder {
o.put("type", getType(c));
JSONArray required = new JSONArray();
if (c.isAssignableFrom(IrisRegistrant.class) || IrisRegistrant.class.isAssignableFrom(c)) {
for (Field k : IrisRegistrant.class.getDeclaredFields()) {
if(c.isAssignableFrom(IrisRegistrant.class) || IrisRegistrant.class.isAssignableFrom(c)) {
for(Field k : IrisRegistrant.class.getDeclaredFields()) {
k.setAccessible(true);
if (Modifier.isStatic(k.getModifiers()) || Modifier.isFinal(k.getModifiers()) || Modifier.isTransient(k.getModifiers())) {
if(Modifier.isStatic(k.getModifiers()) || Modifier.isFinal(k.getModifiers()) || Modifier.isTransient(k.getModifiers())) {
continue;
}
JSONObject property = buildProperty(k, c);
if (property.getBoolean("!required")) {
if(property.getBoolean("!required")) {
required.put(k.getName());
}
@ -141,10 +141,10 @@ public class SchemaBuilder {
}
}
for (Field k : c.getDeclaredFields()) {
for(Field k : c.getDeclaredFields()) {
k.setAccessible(true);
if (Modifier.isStatic(k.getModifiers()) || Modifier.isFinal(k.getModifiers()) || Modifier.isTransient(k.getModifiers())) {
if(Modifier.isStatic(k.getModifiers()) || Modifier.isFinal(k.getModifiers()) || Modifier.isTransient(k.getModifiers())) {
continue;
}
@ -154,14 +154,14 @@ public class SchemaBuilder {
properties.put(k.getName(), property);
}
if (required.length() > 0) {
if(required.length() > 0) {
o.put("required", required);
}
o.put("properties", properties);
if (c.isAnnotationPresent(Snippet.class)) {
if(c.isAnnotationPresent(Snippet.class)) {
JSONObject anyOf = new JSONObject();
JSONArray arr = new JSONArray();
JSONObject str = new JSONObject();
@ -184,16 +184,16 @@ public class SchemaBuilder {
prop.put("type", type);
String fancyType = "Unknown Type";
switch (type) {
switch(type) {
case "boolean" -> fancyType = "Boolean";
case "integer" -> {
fancyType = "Integer";
if (k.isAnnotationPresent(MinNumber.class)) {
if(k.isAnnotationPresent(MinNumber.class)) {
int min = (int) k.getDeclaredAnnotation(MinNumber.class).value();
prop.put("minimum", min);
description.add(SYMBOL_LIMIT__N + " Minimum allowed is " + min);
}
if (k.isAnnotationPresent(MaxNumber.class)) {
if(k.isAnnotationPresent(MaxNumber.class)) {
int max = (int) k.getDeclaredAnnotation(MaxNumber.class).value();
prop.put("maximum", max);
description.add(SYMBOL_LIMIT__N + " Maximum allowed is " + max);
@ -201,12 +201,12 @@ public class SchemaBuilder {
}
case "number" -> {
fancyType = "Number";
if (k.isAnnotationPresent(MinNumber.class)) {
if(k.isAnnotationPresent(MinNumber.class)) {
double min = k.getDeclaredAnnotation(MinNumber.class).value();
prop.put("minimum", min);
description.add(SYMBOL_LIMIT__N + " Minimum allowed is " + min);
}
if (k.isAnnotationPresent(MaxNumber.class)) {
if(k.isAnnotationPresent(MaxNumber.class)) {
double max = k.getDeclaredAnnotation(MaxNumber.class).value();
prop.put("maximum", max);
description.add(SYMBOL_LIMIT__N + " Maximum allowed is " + max);
@ -214,26 +214,26 @@ public class SchemaBuilder {
}
case "string" -> {
fancyType = "Text";
if (k.isAnnotationPresent(MinNumber.class)) {
if(k.isAnnotationPresent(MinNumber.class)) {
int min = (int) k.getDeclaredAnnotation(MinNumber.class).value();
prop.put("minLength", min);
description.add(SYMBOL_LIMIT__N + " Minimum Length allowed is " + min);
}
if (k.isAnnotationPresent(MaxNumber.class)) {
if(k.isAnnotationPresent(MaxNumber.class)) {
int max = (int) k.getDeclaredAnnotation(MaxNumber.class).value();
prop.put("maxLength", max);
description.add(SYMBOL_LIMIT__N + " Maximum Length allowed is " + max);
}
if (k.isAnnotationPresent(RegistryListResource.class)) {
if(k.isAnnotationPresent(RegistryListResource.class)) {
RegistryListResource rr = k.getDeclaredAnnotation(RegistryListResource.class);
ResourceLoader<?> loader = data.getLoaders().get(rr.value());
if (loader != null) {
if(loader != null) {
String key = "erz" + loader.getFolderName();
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
j.put("enum", new JSONArray(loader.getPossibleKeys()));
definitions.put(key, j);
@ -245,18 +245,18 @@ public class SchemaBuilder {
} else {
Iris.error("Cannot find Registry Loader for type " + rr.value() + " used in " + k.getDeclaringClass().getCanonicalName() + " in field " + k.getName());
}
} else if (k.isAnnotationPresent(RegistryListBlockType.class)) {
} else if(k.isAnnotationPresent(RegistryListBlockType.class)) {
String key = "enum-block-type";
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
JSONArray ja = new JSONArray();
for (String i : data.getBlockLoader().getPossibleKeys()) {
for(String i : data.getBlockLoader().getPossibleKeys()) {
ja.put(i);
}
for (String i : B.getBlockTypes()) {
for(String i : B.getBlockTypes()) {
ja.put(i);
}
@ -268,10 +268,10 @@ public class SchemaBuilder {
prop.put("$ref", "#/definitions/" + key);
description.add(SYMBOL_TYPE__N + " Must be a valid Block Type (use ctrl+space for auto complete!)");
} else if (k.isAnnotationPresent(RegistryListItemType.class)) {
} else if(k.isAnnotationPresent(RegistryListItemType.class)) {
String key = "enum-item-type";
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
j.put("enum", ITEM_TYPES);
definitions.put(key, j);
@ -281,10 +281,10 @@ public class SchemaBuilder {
prop.put("$ref", "#/definitions/" + key);
description.add(SYMBOL_TYPE__N + " Must be a valid Item Type (use ctrl+space for auto complete!)");
} else if (k.isAnnotationPresent(RegistryListSpecialEntity.class)) {
} else if(k.isAnnotationPresent(RegistryListSpecialEntity.class)) {
String key = "enum-reg-specialentity";
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
KList<String> list = new KList<>();
list.addAll(Iris.linkMythicMobs.getMythicMobTypes().stream().map(s -> "MythicMobs:" + s).collect(Collectors.toList()));
@ -296,10 +296,10 @@ public class SchemaBuilder {
fancyType = "Mythic Mob Type";
prop.put("$ref", "#/definitions/" + key);
description.add(SYMBOL_TYPE__N + " Must be a valid Mythic Mob Type (use ctrl+space for auto complete!) Define mythic mobs with the mythic mobs plugin configuration files.");
} else if (k.isAnnotationPresent(RegistryListFont.class)) {
} else if(k.isAnnotationPresent(RegistryListFont.class)) {
String key = "enum-font";
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
j.put("enum", FONT_TYPES);
definitions.put(key, j);
@ -309,10 +309,10 @@ public class SchemaBuilder {
prop.put("$ref", "#/definitions/" + key);
description.add(SYMBOL_TYPE__N + " Must be a valid Font Family (use ctrl+space for auto complete!)");
} else if (k.getType().equals(Enchantment.class)) {
} else if(k.getType().equals(Enchantment.class)) {
String key = "enum-enchantment";
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
j.put("enum", ENCHANT_TYPES);
definitions.put(key, j);
@ -321,10 +321,10 @@ public class SchemaBuilder {
fancyType = "Enchantment Type";
prop.put("$ref", "#/definitions/" + key);
description.add(SYMBOL_TYPE__N + " Must be a valid Enchantment Type (use ctrl+space for auto complete!)");
} else if (k.getType().equals(PotionEffectType.class)) {
} else if(k.getType().equals(PotionEffectType.class)) {
String key = "enum-potion-effect-type";
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
j.put("enum", POTION_TYPES);
definitions.put(key, j);
@ -334,12 +334,12 @@ public class SchemaBuilder {
prop.put("$ref", "#/definitions/" + key);
description.add(SYMBOL_TYPE__N + " Must be a valid Potion Effect Type (use ctrl+space for auto complete!)");
} else if (k.getType().isEnum()) {
} else if(k.getType().isEnum()) {
fancyType = k.getType().getSimpleName().replaceAll("\\QIris\\E", "");
JSONArray a = new JSONArray();
boolean advanced = k.getType().isAnnotationPresent(Desc.class);
for (Object gg : k.getType().getEnumConstants()) {
if (advanced) {
for(Object gg : k.getType().getEnumConstants()) {
if(advanced) {
try {
JSONObject j = new JSONObject();
String name = ((Enum<?>) gg).name();
@ -347,7 +347,7 @@ public class SchemaBuilder {
Desc dd = k.getType().getField(name).getAnnotation(Desc.class);
j.put("description", dd == null ? ("No Description for " + name) : dd.value());
a.put(j);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -358,7 +358,7 @@ public class SchemaBuilder {
String key = (advanced ? "oneof-" : "") + "enum-" + k.getType().getCanonicalName().replaceAll("\\Q.\\E", "-").toLowerCase();
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
j.put(advanced ? "oneOf" : "enum", a);
definitions.put(key, j);
@ -372,7 +372,7 @@ public class SchemaBuilder {
case "object" -> {
fancyType = k.getType().getSimpleName().replaceAll("\\QIris\\E", "") + " (Object)";
String key = "obj-" + k.getType().getCanonicalName().replaceAll("\\Q.\\E", "-").toLowerCase();
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
definitions.put(key, new JSONObject());
definitions.put(key, buildProperties(k.getType()));
}
@ -381,10 +381,10 @@ public class SchemaBuilder {
case "array" -> {
fancyType = "List of Something...?";
ArrayType t = k.getDeclaredAnnotation(ArrayType.class);
if (t != null) {
if (t.min() > 0) {
if(t != null) {
if(t.min() > 0) {
prop.put("minItems", t.min());
if (t.min() == 1) {
if(t.min() == 1) {
description.add(SYMBOL_LIMIT__N + " At least one entry must be defined, or just remove this list.");
} else {
description.add(SYMBOL_LIMIT__N + " Requires at least " + t.min() + " entries.");
@ -393,13 +393,13 @@ public class SchemaBuilder {
String arrayType = getType(t.type());
switch (arrayType) {
switch(arrayType) {
case "integer" -> fancyType = "List of Integers";
case "number" -> fancyType = "List of Numbers";
case "object" -> {
fancyType = "List of " + t.type().getSimpleName().replaceAll("\\QIris\\E", "") + "s (Objects)";
String key = "obj-" + t.type().getCanonicalName().replaceAll("\\Q.\\E", "-").toLowerCase();
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
definitions.put(key, new JSONObject());
definitions.put(key, buildProperties(t.type()));
}
@ -410,15 +410,15 @@ public class SchemaBuilder {
case "string" -> {
fancyType = "List of Text";
if (k.isAnnotationPresent(RegistryListResource.class)) {
if(k.isAnnotationPresent(RegistryListResource.class)) {
RegistryListResource rr = k.getDeclaredAnnotation(RegistryListResource.class);
ResourceLoader<?> loader = data.getLoaders().get(rr.value());
if (loader != null) {
if(loader != null) {
fancyType = "List<" + loader.getResourceTypeName() + ">";
String key = "erz" + loader.getFolderName();
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
j.put("enum", new JSONArray(loader.getPossibleKeys()));
definitions.put(key, j);
@ -431,19 +431,19 @@ public class SchemaBuilder {
} else {
Iris.error("Cannot find Registry Loader for type (list schema) " + rr.value() + " used in " + k.getDeclaringClass().getCanonicalName() + " in field " + k.getName());
}
} else if (k.isAnnotationPresent(RegistryListBlockType.class)) {
} else if(k.isAnnotationPresent(RegistryListBlockType.class)) {
fancyType = "List of Block Types";
String key = "enum-block-type";
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
JSONArray ja = new JSONArray();
for (String i : data.getBlockLoader().getPossibleKeys()) {
for(String i : data.getBlockLoader().getPossibleKeys()) {
ja.put(i);
}
for (String i : B.getBlockTypes()) {
for(String i : B.getBlockTypes()) {
ja.put(i);
}
@ -455,11 +455,11 @@ public class SchemaBuilder {
items.put("$ref", "#/definitions/" + key);
prop.put("items", items);
description.add(SYMBOL_TYPE__N + " Must be a valid Block Type (use ctrl+space for auto complete!)");
} else if (k.isAnnotationPresent(RegistryListItemType.class)) {
} else if(k.isAnnotationPresent(RegistryListItemType.class)) {
fancyType = "List of Item Types";
String key = "enum-item-type";
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
j.put("enum", ITEM_TYPES);
definitions.put(key, j);
@ -469,11 +469,11 @@ public class SchemaBuilder {
items.put("$ref", "#/definitions/" + key);
prop.put("items", items);
description.add(SYMBOL_TYPE__N + " Must be a valid Item Type (use ctrl+space for auto complete!)");
} else if (k.isAnnotationPresent(RegistryListFont.class)) {
} else if(k.isAnnotationPresent(RegistryListFont.class)) {
String key = "enum-font";
fancyType = "List of Font Families";
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
j.put("enum", FONT_TYPES);
definitions.put(key, j);
@ -483,11 +483,11 @@ public class SchemaBuilder {
items.put("$ref", "#/definitions/" + key);
prop.put("items", items);
description.add(SYMBOL_TYPE__N + " Must be a valid Font Family (use ctrl+space for auto complete!)");
} else if (t.type().equals(Enchantment.class)) {
} else if(t.type().equals(Enchantment.class)) {
fancyType = "List of Enchantment Types";
String key = "enum-enchantment";
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
j.put("enum", ENCHANT_TYPES);
definitions.put(key, j);
@ -497,11 +497,11 @@ public class SchemaBuilder {
items.put("$ref", "#/definitions/" + key);
prop.put("items", items);
description.add(SYMBOL_TYPE__N + " Must be a valid Enchantment Type (use ctrl+space for auto complete!)");
} else if (t.type().equals(PotionEffectType.class)) {
} else if(t.type().equals(PotionEffectType.class)) {
fancyType = "List of Potion Effect Types";
String key = "enum-potion-effect-type";
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
j.put("enum", POTION_TYPES);
definitions.put(key, j);
@ -511,12 +511,12 @@ public class SchemaBuilder {
items.put("$ref", "#/definitions/" + key);
prop.put("items", items);
description.add(SYMBOL_TYPE__N + " Must be a valid Potion Effect Type (use ctrl+space for auto complete!)");
} else if (t.type().isEnum()) {
} else if(t.type().isEnum()) {
fancyType = "List of " + t.type().getSimpleName().replaceAll("\\QIris\\E", "") + "s";
JSONArray a = new JSONArray();
boolean advanced = t.type().isAnnotationPresent(Desc.class);
for (Object gg : t.type().getEnumConstants()) {
if (advanced) {
for(Object gg : t.type().getEnumConstants()) {
if(advanced) {
try {
JSONObject j = new JSONObject();
String name = ((Enum<?>) gg).name();
@ -524,7 +524,7 @@ public class SchemaBuilder {
Desc dd = t.type().getField(name).getAnnotation(Desc.class);
j.put("description", dd == null ? ("No Description for " + name) : dd.value());
a.put(j);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -535,7 +535,7 @@ public class SchemaBuilder {
String key = (advanced ? "oneof-" : "") + "enum-" + t.type().getCanonicalName().replaceAll("\\Q.\\E", "-").toLowerCase();
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
j.put(advanced ? "oneOf" : "enum", a);
definitions.put(key, j);
@ -562,7 +562,7 @@ public class SchemaBuilder {
d.add(fancyType);
d.add(getDescription(k.getType()));
if (k.getType().isAnnotationPresent(Snippet.class)) {
if(k.getType().isAnnotationPresent(Snippet.class)) {
String sm = k.getType().getDeclaredAnnotation(Snippet.class).value();
d.add(" ");
d.add("You can instead specify \"snippet/" + sm + "/some-name.json\" to use a snippet file instead of specifying it here.");
@ -572,11 +572,11 @@ public class SchemaBuilder {
k.setAccessible(true);
Object value = k.get(cl.newInstance());
if (value != null) {
if (value instanceof List) {
if(value != null) {
if(value instanceof List) {
d.add(" ");
d.add("* Default Value is an empty list");
} else if (!cl.isPrimitive() && !(value instanceof Number) && !(value instanceof String) && !(cl.isEnum())) {
} else if(!cl.isPrimitive() && !(value instanceof Number) && !(value instanceof String) && !(cl.isEnum())) {
d.add(" ");
d.add("* Default Value is a default object (create this object to see default properties)");
} else {
@ -584,7 +584,7 @@ public class SchemaBuilder {
d.add("* Default Value is " + value);
}
}
} catch (Throwable ignored) {
} catch(Throwable ignored) {
}
@ -592,7 +592,7 @@ public class SchemaBuilder {
prop.put("type", type);
prop.put("description", d.toString("\n"));
if (k.getType().isAnnotationPresent(Snippet.class)) {
if(k.getType().isAnnotationPresent(Snippet.class)) {
JSONObject anyOf = new JSONObject();
JSONArray arr = new JSONArray();
JSONObject str = new JSONObject();
@ -600,7 +600,7 @@ public class SchemaBuilder {
String key = "enum-snippet-" + k.getType().getDeclaredAnnotation(Snippet.class).value();
str.put("$ref", "#/definitions/" + key);
if (!definitions.containsKey(key)) {
if(!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
JSONArray snl = new JSONArray();
data.getPossibleSnippets(k.getType().getDeclaredAnnotation(Snippet.class).value()).forEach(snl::put);
@ -623,31 +623,31 @@ public class SchemaBuilder {
}
private String getType(Class<?> c) {
if (c.equals(int.class) || c.equals(Integer.class) || c.equals(long.class) || c.equals(Long.class)) {
if(c.equals(int.class) || c.equals(Integer.class) || c.equals(long.class) || c.equals(Long.class)) {
return "integer";
}
if (c.equals(float.class) || c.equals(double.class) || c.equals(Float.class) || c.equals(Double.class)) {
if(c.equals(float.class) || c.equals(double.class) || c.equals(Float.class) || c.equals(Double.class)) {
return "number";
}
if (c.equals(boolean.class) || c.equals(Boolean.class)) {
if(c.equals(boolean.class) || c.equals(Boolean.class)) {
return "boolean";
}
if (c.equals(String.class) || c.isEnum() || c.equals(Enchantment.class) || c.equals(PotionEffectType.class)) {
if(c.equals(String.class) || c.isEnum() || c.equals(Enchantment.class) || c.equals(PotionEffectType.class)) {
return "string";
}
if (c.equals(KList.class)) {
if(c.equals(KList.class)) {
return "array";
}
if (c.equals(KMap.class)) {
if(c.equals(KMap.class)) {
return "object";
}
if (!c.isAnnotationPresent(Desc.class) && c.getCanonicalName().startsWith("com.volmit.iris.")) {
if(!c.isAnnotationPresent(Desc.class) && c.getCanonicalName().startsWith("com.volmit.iris.")) {
warnings.addIfMissing("Unsupported Type: " + c.getCanonicalName() + " Did you forget @Desc?");
}
@ -656,12 +656,12 @@ public class SchemaBuilder {
private String getFieldDescription(Field r) {
if (r.isAnnotationPresent(Desc.class)) {
if(r.isAnnotationPresent(Desc.class)) {
return r.getDeclaredAnnotation(Desc.class).value();
}
// suppress warnings on bukkit classes
if (r.getDeclaringClass().getName().startsWith("org.bukkit.")) {
if(r.getDeclaringClass().getName().startsWith("org.bukkit.")) {
return "Bukkit package classes and enums have no descriptions";
}
@ -670,11 +670,11 @@ public class SchemaBuilder {
}
private String getDescription(Class<?> r) {
if (r.isAnnotationPresent(Desc.class)) {
if(r.isAnnotationPresent(Desc.class)) {
return r.getDeclaredAnnotation(Desc.class).value();
}
if (!r.isPrimitive() && !r.equals(KList.class) && !r.equals(KMap.class) && r.getCanonicalName().startsWith("com.volmit.")) {
if(!r.isPrimitive() && !r.equals(KList.class) && !r.equals(KMap.class) && r.getCanonicalName().startsWith("com.volmit.")) {
warnings.addIfMissing("Missing @Desc on " + r.getSimpleName() + " in " + (r.getDeclaringClass() != null ? r.getDeclaringClass().getCanonicalName() : " NOSRC"));
}
return "";

View File

@ -19,9 +19,7 @@
package com.volmit.iris.core.service;
import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.core.project.IrisProject;
import com.volmit.iris.core.tools.IrisToolbelt;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.util.board.BoardManager;
@ -50,9 +48,9 @@ public class BoardSVC implements IrisService, BoardProvider {
public void onEnable() {
J.ar(this::tick, 20);
manager = new BoardManager(Iris.instance, BoardSettings.builder()
.boardProvider(this)
.scoreDirection(ScoreDirection.DOWN)
.build());
.boardProvider(this)
.scoreDirection(ScoreDirection.DOWN)
.build());
}
@Override
@ -72,7 +70,7 @@ public class BoardSVC implements IrisService, BoardProvider {
}
public void updatePlayer(Player p) {
if (IrisToolbelt.isIrisStudioWorld(p.getWorld())) {
if(IrisToolbelt.isIrisStudioWorld(p.getWorld())) {
manager.remove(p);
manager.setup(p);
} else {
@ -87,8 +85,7 @@ public class BoardSVC implements IrisService, BoardProvider {
}
public void tick() {
if(!Iris.service(StudioSVC.class).isProjectOpen())
{
if(!Iris.service(StudioSVC.class).isProjectOpen()) {
return;
}
@ -98,7 +95,7 @@ public class BoardSVC implements IrisService, BoardProvider {
@Override
public List<String> getLines(Player player) {
PlayerBoard pb = boards.computeIfAbsent(player, PlayerBoard::new);
synchronized (pb.lines) {
synchronized(pb.lines) {
return pb.lines;
}
}
@ -115,10 +112,10 @@ public class BoardSVC implements IrisService, BoardProvider {
}
public void update() {
synchronized (lines) {
synchronized(lines) {
lines.clear();
if (!IrisToolbelt.isIrisStudioWorld(player.getWorld())) {
if(!IrisToolbelt.isIrisStudioWorld(player.getWorld())) {
return;
}
@ -134,7 +131,7 @@ public class BoardSVC implements IrisService, BoardProvider {
lines.add("&7&m ");
lines.add(C.AQUA + "Region" + C.GRAY + ": " + engine.getRegion(x, z).getName());
lines.add(C.AQUA + "Biome" + C.GRAY + ": " + engine.getBiomeOrMantle(x, y, z).getName());
lines.add(C.AQUA + "Height" + C.GRAY + ": " + Math.round(engine.getHeight(x, z)));
lines.add(C.AQUA + "Height" + C.GRAY + ": " + Math.round(engine.getHeight(x, z) + player.getWorld().getMinHeight()));
lines.add(C.AQUA + "Slope" + C.GRAY + ": " + Form.f(engine.getComplex().getSlopeStream().get(x, z), 2));
lines.add(C.AQUA + "BUD/s" + C.GRAY + ": " + Form.f(engine.getBlockUpdatesPerSecond()));
lines.add("&7&m ");

View File

@ -56,18 +56,18 @@ public class CommandSVC implements IrisService, DecreeSystem {
public void on(PlayerCommandPreprocessEvent e) {
String msg = e.getMessage().startsWith("/") ? e.getMessage().substring(1) : e.getMessage();
if (msg.startsWith("irisdecree ")) {
if(msg.startsWith("irisdecree ")) {
String[] args = msg.split("\\Q \\E");
CompletableFuture<String> future = futures.get(args[1]);
if (future != null) {
if(future != null) {
future.complete(args[2]);
e.setCancelled(true);
return;
}
}
if ((msg.startsWith("locate ") || msg.startsWith("locatebiome ")) && IrisToolbelt.isIrisWorld(e.getPlayer().getWorld())) {
if((msg.startsWith("locate ") || msg.startsWith("locatebiome ")) && IrisToolbelt.isIrisWorld(e.getPlayer().getWorld())) {
new VolmitSender(e.getPlayer()).sendMessage(C.RED + "Locating biomes & objects is disabled in Iris Worlds. Use /iris studio goto <biome>");
e.setCancelled(true);
}
@ -75,8 +75,8 @@ public class CommandSVC implements IrisService, DecreeSystem {
@EventHandler
public void on(ServerCommandEvent e) {
if (consoleFuture != null && !consoleFuture.isCancelled() && !consoleFuture.isDone()) {
if (!e.getCommand().contains(" ")) {
if(consoleFuture != null && !consoleFuture.isCancelled() && !consoleFuture.isDone()) {
if(!e.getCommand().contains(" ")) {
String pick = e.getCommand().trim().toLowerCase(Locale.ROOT);
consoleFuture.complete(pick);
e.setCancelled(true);

View File

@ -60,10 +60,10 @@ public class ConversionSVC implements IrisService {
converters = new KList<>();
J.s(() ->
J.attemptAsync(() ->
{
J.attemptAsync(() ->
{
}), 5);
}), 5);
}
@Override
@ -84,13 +84,13 @@ public class ConversionSVC implements IrisService {
destPools.mkdirs();
findAllNBT(in, (folder, file) -> {
total.getAndIncrement();
if (roots.addIfMissing(folder)) {
if(roots.addIfMissing(folder)) {
String b = in.toURI().relativize(folder.toURI()).getPath();
if (b.startsWith("/")) {
if(b.startsWith("/")) {
b = b.substring(1);
}
if (b.endsWith("/")) {
if(b.endsWith("/")) {
b = b.substring(0, b.length() - 1);
}
@ -100,11 +100,11 @@ public class ConversionSVC implements IrisService {
findAllNBT(in, (folder, file) -> {
at.getAndIncrement();
String b = in.toURI().relativize(folder.toURI()).getPath();
if (b.startsWith("/")) {
if(b.startsWith("/")) {
b = b.substring(1);
}
if (b.endsWith("/")) {
if(b.endsWith("/")) {
b = b.substring(0, b.length() - 1);
}
IrisJigsawPool jpool = pools.get(b);
@ -117,7 +117,7 @@ public class ConversionSVC implements IrisService {
NamedTag tag = NBTUtil.read(file);
CompoundTag compound = (CompoundTag) tag.getTag();
if (compound.containsKey("blocks") && compound.containsKey("palette") && compound.containsKey("size")) {
if(compound.containsKey("blocks") && compound.containsKey("palette") && compound.containsKey("size")) {
String id = in.toURI().relativize(folder.toURI()).getPath() + file.getName().split("\\Q.\\E")[0];
@SuppressWarnings("unchecked") ListTag<IntTag> size = (ListTag<IntTag>) compound.getListTag("size");
int w = size.get(0).asInt();
@ -125,14 +125,14 @@ public class ConversionSVC implements IrisService {
int d = size.get(2).asInt();
KList<BlockData> palette = new KList<>();
@SuppressWarnings("unchecked") ListTag<CompoundTag> paletteList = (ListTag<CompoundTag>) compound.getListTag("palette");
for (int i = 0; i < paletteList.size(); i++) {
for(int i = 0; i < paletteList.size(); i++) {
CompoundTag cp = paletteList.get(i);
palette.add(NBTWorld.getBlockData(cp));
}
IrisJigsawPiece piece = new IrisJigsawPiece();
IrisObject object = new IrisObject(w, h, d);
@SuppressWarnings("unchecked") ListTag<CompoundTag> blockList = (ListTag<CompoundTag>) compound.getListTag("blocks");
for (int i = 0; i < blockList.size(); i++) {
for(int i = 0; i < blockList.size(); i++) {
CompoundTag cp = blockList.get(i);
@SuppressWarnings("unchecked") ListTag<IntTag> pos = (ListTag<IntTag>) cp.getListTag("pos");
int x = pos.get(0).asInt();
@ -140,7 +140,7 @@ public class ConversionSVC implements IrisService {
int z = pos.get(2).asInt();
BlockData bd = palette.get(cp.getInt("state")).clone();
if (bd.getMaterial().equals(Material.JIGSAW) && cp.containsKey("nbt")) {
if(bd.getMaterial().equals(Material.JIGSAW) && cp.containsKey("nbt")) {
piece.setObject(in.toURI().relativize(folder.toURI()).getPath() + file.getName().split("\\Q.\\E")[0]);
IrisPosition spos = new IrisPosition(object.getSigned(x, y, z));
CompoundTag nbt = cp.getCompoundTag("nbt");
@ -162,14 +162,14 @@ public class ConversionSVC implements IrisService {
connector.getPools().add(poolId);
connector.setDirection(IrisDirection.getDirection(((Jigsaw) jd).getOrientation()));
if (target.equals("minecraft:building_entrance")) {
if(target.equals("minecraft:building_entrance")) {
connector.setInnerConnector(true);
}
piece.getConnectors().add(connector);
}
if (!bd.getMaterial().equals(Material.STRUCTURE_VOID) && !bd.getMaterial().equals(Material.AIR)) {
if(!bd.getMaterial().equals(Material.STRUCTURE_VOID) && !bd.getMaterial().equals(Material.AIR)) {
object.setUnsigned(x, y, z, bd);
}
}
@ -179,16 +179,16 @@ public class ConversionSVC implements IrisService {
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) {
} catch(Throwable e) {
e.printStackTrace();
Iris.reportError(e);
}
});
for (String i : pools.k()) {
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) {
} catch(IOException e) {
e.printStackTrace();
Iris.reportError(e);
}
@ -198,19 +198,19 @@ public class ConversionSVC implements IrisService {
}
public void findAllNBT(File path, Consumer2<File, File> inFile) {
if (path == null) {
if(path == null) {
return;
}
if (path.isFile() && path.getName().endsWith(".nbt")) {
if(path.isFile() && path.getName().endsWith(".nbt")) {
inFile.accept(path.getParentFile(), path);
return;
}
for (File i : path.listFiles()) {
if (i.isDirectory()) {
for(File i : path.listFiles()) {
if(i.isDirectory()) {
findAllNBT(i, inFile);
} else if (i.isFile() && i.getName().endsWith(".nbt")) {
} else if(i.isFile() && i.getName().endsWith(".nbt")) {
inFile.accept(path, i);
}
}
@ -220,9 +220,9 @@ public class ConversionSVC implements IrisService {
int m = 0;
Iris.instance.getDataFolder("convert");
for (File i : folder.listFiles()) {
for (Converter j : converters) {
if (i.getName().endsWith("." + j.getInExtension())) {
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);
@ -230,10 +230,10 @@ public class ConversionSVC implements IrisService {
}
}
if (i.isDirectory() && i.getName().equals("structures")) {
if(i.isDirectory() && i.getName().equals("structures")) {
File f = new File(folder, "jigsaw");
if (!f.exists()) {
if(!f.exists()) {
s.sendMessage("Converting NBT Structures into Iris Jigsaw Structures...");
f.mkdirs();
J.a(() -> convertStructures(i, f, s));

View File

@ -42,12 +42,12 @@ public class DolphinSVC implements IrisService {
*/
@EventHandler
public void on(PlayerInteractEntityEvent event) {
if (!IrisToolbelt.isIrisWorld(event.getPlayer().getWorld())) {
if(!IrisToolbelt.isIrisWorld(event.getPlayer().getWorld())) {
return;
}
Material hand = event.getPlayer().getInventory().getItem(event.getHand()).getType();
if (event.getRightClicked().getType().equals(EntityType.DOLPHIN) && (hand.equals(Material.TROPICAL_FISH) || hand.equals(Material.PUFFERFISH) || hand.equals(Material.COD) || hand.equals(Material.SALMON))) {
if(event.getRightClicked().getType().equals(EntityType.DOLPHIN) && (hand.equals(Material.TROPICAL_FISH) || hand.equals(Material.PUFFERFISH) || hand.equals(Material.COD) || hand.equals(Material.SALMON))) {
event.setCancelled(true);
}
}

View File

@ -71,27 +71,27 @@ public class EditSVC implements IrisService {
@EventHandler
public void on(WorldUnloadEvent e) {
if (editors.containsKey(e.getWorld())) {
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) {
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()) {
for(World i : editors.k()) {
editors.remove(i).close();
}
}
public BlockEditor open(World world) {
if (editors.containsKey(world)) {
if(editors.containsKey(world)) {
return editors.get(world);
}

View File

@ -54,9 +54,9 @@ public class ObjectSVC implements IrisService {
}
private void loopChange(int amount) {
if (undos.size() > 0) {
if(undos.size() > 0) {
revert(undos.pollLast());
if (amount > 1) {
if(amount > 1) {
J.s(() -> loopChange(amount - 1), 2);
}
}
@ -65,12 +65,13 @@ public class ObjectSVC implements IrisService {
/**
* Reverts all the block changes provided, 200 blocks per tick
*
* @param blocks The blocks to remove
* @param blocks
* The blocks to remove
*/
private void revert(Map<Block, BlockData> blocks) {
int amount = 0;
Iterator<Map.Entry<Block, BlockData>> it = blocks.entrySet().iterator();
while (it.hasNext()) {
while(it.hasNext()) {
Map.Entry<Block, BlockData> entry = it.next();
BlockData data = entry.getValue();
entry.getKey().setBlockData(data, false);
@ -78,7 +79,7 @@ public class ObjectSVC implements IrisService {
amount++;
if (amount > 200) {
if(amount > 200) {
J.s(() -> revert(blocks), 1);
}
}

View File

@ -57,8 +57,8 @@ public class PreservationSVC implements IrisService {
double p = 0;
double mf = 0;
for (MeteredCache i : caches) {
if (i.isClosed()) {
for(MeteredCache i : caches) {
if(i.isClosed()) {
continue;
}
@ -100,22 +100,22 @@ public class PreservationSVC implements IrisService {
dereference();
postShutdown(() -> {
for (Thread i : threads) {
if (i.isAlive()) {
for(Thread i : threads) {
if(i.isAlive()) {
try {
i.interrupt();
Iris.info("Shutdown Thread " + i.getName());
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
}
}
for (ExecutorService i : services) {
for(ExecutorService i : services) {
try {
i.shutdownNow();
Iris.info("Shutdown Executor Service " + i);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
}

View File

@ -61,7 +61,7 @@ public class StudioSVC implements IrisService {
String pack = IrisSettings.get().getGenerator().getDefaultWorldType();
File f = IrisPack.packsPack(pack);
if (!f.exists()) {
if(!f.exists()) {
Iris.info("Downloading Default Pack " + pack);
downloadSearch(Iris.getSender(), pack, false);
}
@ -72,9 +72,9 @@ public class StudioSVC implements IrisService {
public void onDisable() {
Iris.debug("Studio Mode Active: Closing Projects");
for (World i : Bukkit.getWorlds()) {
if (IrisToolbelt.isIrisWorld(i)) {
if (IrisToolbelt.isStudio(i)) {
for(World i : Bukkit.getWorlds()) {
if(IrisToolbelt.isIrisWorld(i)) {
if(IrisToolbelt.isStudio(i)) {
IrisToolbelt.evacuate(i);
IrisToolbelt.access(i).close();
}
@ -88,9 +88,9 @@ public class StudioSVC implements IrisService {
File irispack = new File(folder, "iris/pack");
IrisDimension dim = IrisData.loadAnyDimension(type);
if (dim == null) {
for (File i : getWorkspaceFolder().listFiles()) {
if (i.isFile() && i.getName().equals(type + ".iris")) {
if(dim == null) {
for(File i : getWorkspaceFolder().listFiles()) {
if(i.isFile() && i.getName().equals(type + ".iris")) {
sender.sendMessage("Found " + type + ".iris in " + WORKSPACE_NAME + " folder");
ZipUtil.unpack(i, irispack);
break;
@ -102,29 +102,29 @@ public class StudioSVC implements IrisService {
try {
FileUtils.copyDirectory(f, irispack);
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
}
}
File dimf = new File(irispack, "dimensions/" + type + ".json");
if (!dimf.exists() || !dimf.isFile()) {
if(!dimf.exists() || !dimf.isFile()) {
downloadSearch(sender, type, false);
File downloaded = getWorkspaceFolder(type);
for (File i : downloaded.listFiles()) {
if (i.isFile()) {
for(File i : downloaded.listFiles()) {
if(i.isFile()) {
try {
FileUtils.copyFile(i, new File(irispack, i.getName()));
} catch (IOException e) {
} catch(IOException e) {
e.printStackTrace();
Iris.reportError(e);
}
} else {
try {
FileUtils.copyDirectory(i, new File(irispack, i.getName()));
} catch (IOException e) {
} catch(IOException e) {
e.printStackTrace();
Iris.reportError(e);
}
@ -134,7 +134,7 @@ public class StudioSVC implements IrisService {
IO.delete(downloaded);
}
if (!dimf.exists() || !dimf.isFile()) {
if(!dimf.exists() || !dimf.isFile()) {
sender.sendMessage("Can't find the " + dimf.getName() + " in the dimensions folder of this pack! Failed!");
return null;
}
@ -142,7 +142,7 @@ public class StudioSVC implements IrisService {
IrisData dm = IrisData.get(irispack);
dim = dm.getDimensionLoader().load(type);
if (dim == null) {
if(dim == null) {
sender.sendMessage("Can't load the dimension! Failed!");
return null;
}
@ -161,7 +161,7 @@ public class StudioSVC implements IrisService {
try {
url = getListing(false).get(key);
if (url == null) {
if(url == null) {
Iris.warn("ITS ULL for " + key);
}
@ -172,7 +172,7 @@ public class StudioSVC implements IrisService {
String repo = nodes.length == 1 ? "IrisDimensions/" + nodes[0] : nodes[0] + "/" + nodes[1];
branch = nodes.length > 2 ? nodes[2] : branch;
download(sender, repo, branch, trim, forceOverwrite);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
sender.sendMessage("Failed to download '" + key + "' from " + url + ".");
@ -191,7 +191,7 @@ public class StudioSVC implements IrisService {
File work = new File(temp, "dl-" + UUID.randomUUID());
File packs = getWorkspaceFolder();
if (zip == null || !zip.exists()) {
if(zip == null || !zip.exists()) {
sender.sendMessage("Failed to find pack at " + url);
sender.sendMessage("Make sure you specified the correct repo and branch!");
sender.sendMessage("For example: /iris download IrisDimensions/overworld branch=master");
@ -200,58 +200,58 @@ public class StudioSVC implements IrisService {
sender.sendMessage("Unpacking " + repo);
try {
ZipUtil.unpack(zip, work);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
sender.sendMessage(
"""
Issue when unpacking. Please check/do the following:
1. Do you have a functioning internet connection?
2. Did the download corrupt?
3. Try deleting the */plugins/iris/packs folder and re-download.
4. Download the pack from the GitHub repo: https://github.com/IrisDimensions/overworld
5. Contact support (if all other options do not help)"""
"""
Issue when unpacking. Please check/do the following:
1. Do you have a functioning internet connection?
2. Did the download corrupt?
3. Try deleting the */plugins/iris/packs folder and re-download.
4. Download the pack from the GitHub repo: https://github.com/IrisDimensions/overworld
5. Contact support (if all other options do not help)"""
);
}
File dir = null;
File[] zipFiles = work.listFiles();
if (zipFiles == null) {
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) {
} catch(NullPointerException e) {
Iris.reportError(e);
sender.sendMessage("Error when finding home directory. Are there any non-text characters in the file name?");
return;
}
if (dir == null) {
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())) {
if(!(dimensions.exists() && dimensions.isDirectory())) {
sender.sendMessage("Invalid Format. Missing dimensions folder");
return;
}
if (dimensions.listFiles() == null) {
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) {
} 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()) {
if(!dim.isFile()) {
sender.sendMessage("Invalid dimension (folder) in dimensions folder");
return;
}
@ -261,23 +261,23 @@ public class StudioSVC implements IrisService {
sender.sendMessage("Importing " + d.getName() + " (" + key + ")");
File packEntry = new File(packs, key);
if (forceOverwrite) {
if(forceOverwrite) {
IO.delete(packEntry);
}
if (IrisData.loadAnyDimension(key) != null) {
if(IrisData.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) {
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) {
if(trim) {
sender.sendMessage("Trimming " + key);
File cp = compilePackage(sender, key, false, false);
IO.delete(packEntry);
@ -292,7 +292,7 @@ public class StudioSVC implements IrisService {
public KMap<String, String> getListing(boolean cached) {
JSONObject a;
if (cached) {
if(cached) {
a = new JSONObject(Iris.getCached("cachedlisting", LISTING));
} else {
a = new JSONObject(Iris.getNonCached(true + "listing", LISTING));
@ -300,8 +300,8 @@ public class StudioSVC implements IrisService {
KMap<String, String> l = new KMap<>();
for (String i : a.keySet()) {
if (a.get(i) instanceof String)
for(String i : a.keySet()) {
if(a.get(i) instanceof String)
l.put(i, a.getString(i));
}
@ -324,7 +324,7 @@ public class StudioSVC implements IrisService {
try {
open(sender, seed, dimm, (w) -> {
});
} catch (Exception e) {
} catch(Exception e) {
Iris.reportError(e);
sender.sendMessage("Error when creating studio world:");
e.printStackTrace();
@ -332,7 +332,7 @@ public class StudioSVC implements IrisService {
}
public void open(VolmitSender sender, long seed, String dimm, Consumer<World> onDone) throws IrisException {
if (isProjectOpen()) {
if(isProjectOpen()) {
close();
}
@ -354,7 +354,7 @@ public class StudioSVC implements IrisService {
}
public void close() {
if (isProjectOpen()) {
if(isProjectOpen()) {
Iris.debug("Closing Active Project");
activeProject.close();
activeProject = null;
@ -369,14 +369,14 @@ public class StudioSVC implements IrisService {
File importPack = getWorkspaceFolder(existingPack);
File newPack = getWorkspaceFolder(newName);
if (importPack.listFiles().length == 0) {
if(importPack.listFiles().length == 0) {
Iris.warn("Couldn't find the pack to create a new dimension from.");
return;
}
try {
FileUtils.copyDirectory(importPack, newPack, pathname -> !pathname.getAbsolutePath().contains(".git"), false);
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -387,7 +387,7 @@ public class StudioSVC implements IrisService {
try {
FileUtils.copyFile(dimFile, newDimFile);
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -397,11 +397,11 @@ public class StudioSVC implements IrisService {
try {
JSONObject json = new JSONObject(IO.readAll(newDimFile));
if (json.has("name")) {
if(json.has("name")) {
json.put("name", Form.capitalizeWords(newName.replaceAll("\\Q-\\E", " ")));
IO.writeAll(newDimFile, json.toString(4));
}
} catch (JSONException | IOException e) {
} catch(JSONException | IOException e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -410,7 +410,7 @@ public class StudioSVC implements IrisService {
IrisProject p = new IrisProject(getWorkspaceFolder(newName));
JSONObject ws = p.createCodeWorkspaceConfig();
IO.writeAll(getWorkspaceFile(newName, newName + ".code-workspace"), ws.toString(0));
} catch (JSONException | IOException e) {
} catch(JSONException | IOException e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -420,29 +420,29 @@ public class StudioSVC implements IrisService {
boolean shouldDelete = false;
File importPack = getWorkspaceFolder(downloadable);
if (importPack.listFiles().length == 0) {
if(importPack.listFiles().length == 0) {
downloadSearch(sender, downloadable, false);
if (importPack.listFiles().length > 0) {
if(importPack.listFiles().length > 0) {
shouldDelete = true;
}
}
if (importPack.listFiles().length == 0) {
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()) {
if(!importDimensionFile.exists()) {
sender.sendMessage("Missing Imported Dimension File");
return;
}
sender.sendMessage("Importing " + downloadable + " into new Project " + s);
createFrom(downloadable, s);
if (shouldDelete) {
if(shouldDelete) {
importPack.delete();
}
open(sender, s);
@ -457,7 +457,7 @@ public class StudioSVC implements IrisService {
}
public void updateWorkspace() {
if (isProjectOpen()) {
if(isProjectOpen()) {
activeProject.updateWorkspace();
}
}

View File

@ -79,22 +79,23 @@ public class TreeSVC implements IrisService {
* <br>4. Check biome, region and dimension for overrides for that sapling type -> Found -> use</br>
* <br>5. Exit if none are found, cancel event if one or more are.</br>
*
* @param event Checks the given event for sapling overrides
* @param event
* Checks the given event for sapling overrides
*/
@EventHandler(priority = EventPriority.HIGHEST)
public void on(StructureGrowEvent event) {
if (block || event.isCancelled()) {
if(block || event.isCancelled()) {
return;
}
Iris.debug(this.getClass().getName() + " received a structure grow event");
if (!IrisToolbelt.isIrisWorld(event.getWorld())) {
if(!IrisToolbelt.isIrisWorld(event.getWorld())) {
Iris.debug(this.getClass().getName() + " passed grow event off to vanilla since not an Iris world");
return;
}
PlatformChunkGenerator worldAccess = IrisToolbelt.access(event.getWorld());
if (worldAccess == null) {
if(worldAccess == null) {
Iris.debug(this.getClass().getName() + " passed it off to vanilla because could not get IrisAccess for this world");
Iris.reportError(new NullPointerException(event.getWorld().getName() + " could not be accessed despite being an Iris world"));
return;
@ -102,7 +103,7 @@ public class TreeSVC implements IrisService {
Engine engine = worldAccess.getEngine();
if (engine == null) {
if(engine == null) {
Iris.debug(this.getClass().getName() + " passed it off to vanilla because could not get Engine for this world");
Iris.reportError(new NullPointerException(event.getWorld().getName() + " could not be accessed despite being an Iris world"));
return;
@ -110,13 +111,13 @@ public class TreeSVC implements IrisService {
IrisDimension dimension = engine.getDimension();
if (dimension == null) {
if(dimension == null) {
Iris.debug(this.getClass().getName() + " passed it off to vanilla because could not get Dimension for this world");
Iris.reportError(new NullPointerException(event.getWorld().getName() + " could not be accessed despite being an Iris world"));
return;
}
if (!dimension.getTreeSettings().isEnabled()) {
if(!dimension.getTreeSettings().isEnabled()) {
Iris.debug(this.getClass().getName() + " cancelled because tree overrides are disabled");
return;
}
@ -128,7 +129,7 @@ public class TreeSVC implements IrisService {
Iris.debug("Sapling plane is: " + saplingPlane.getSizeX() + " by " + saplingPlane.getSizeZ());
IrisObjectPlacement placement = getObjectPlacement(worldAccess, event.getLocation(), event.getSpecies(), new IrisTreeSize(1, 1));
if (placement == null) {
if(placement == null) {
Iris.debug(this.getClass().getName() + " had options but did not manage to find objectPlacements for them");
return;
}
@ -207,13 +208,13 @@ public class TreeSVC implements IrisService {
};
object.place(
saplingPlane.getCenter().getBlockX(),
(saplingPlane.getCenter().getBlockY() + object.getH() / 2),
saplingPlane.getCenter().getBlockZ(),
placer,
placement,
RNG.r,
Objects.requireNonNull(worldAccess).getData()
saplingPlane.getCenter().getBlockX(),
(saplingPlane.getCenter().getBlockY() + object.getH() / 2),
saplingPlane.getCenter().getBlockZ(),
placer,
placement,
RNG.r,
Objects.requireNonNull(worldAccess).getData()
);
event.setCancelled(true);
@ -225,11 +226,11 @@ public class TreeSVC implements IrisService {
Bukkit.getServer().getPluginManager().callEvent(iGrow);
block = false;
if (!iGrow.isCancelled()) {
for (BlockState block : iGrow.getBlocks()) {
if(!iGrow.isCancelled()) {
for(BlockState block : iGrow.getBlocks()) {
Location l = block.getLocation();
if (dataCache.containsKey(l)) {
if(dataCache.containsKey(l)) {
l.getBlock().setBlockData(dataCache.get(l), false);
}
}
@ -238,12 +239,17 @@ public class TreeSVC implements IrisService {
}
/**
* Finds a single object placement (which may contain more than one object) for the requirements species, location & size
* Finds a single object placement (which may contain more than one object) for the requirements species, location &
* size
*
* @param worldAccess The world to access (check for biome, region, dimension, etc)
* @param location The location of the growth event (For biome/region finding)
* @param type The bukkit TreeType to match
* @param size The size of the sapling area
* @param worldAccess
* The world to access (check for biome, region, dimension, etc)
* @param location
* The location of the growth event (For biome/region finding)
* @param type
* The bukkit TreeType to match
* @param size
* The size of the sapling area
* @return An object placement which contains the matched tree, or null if none were found / it's disabled.
*/
private IrisObjectPlacement getObjectPlacement(PlatformChunkGenerator worldAccess, Location location, TreeType type, IrisTreeSize size) {
@ -256,7 +262,7 @@ public class TreeSVC implements IrisService {
placements.addAll(matchObjectPlacements(biome.getObjects(), size, type));
// Add more or find any in the region
if (isUseAll || placements.isEmpty()) {
if(isUseAll || placements.isEmpty()) {
IrisRegion region = worldAccess.getEngine().getRegion(location.getBlockX(), location.getBlockZ());
placements.addAll(matchObjectPlacements(region.getObjects(), size, type));
}
@ -268,17 +274,20 @@ public class TreeSVC implements IrisService {
/**
* Filters out mismatches and returns matches
*
* @param objects The object placements to check
* @param size The size of the sapling area to filter with
* @param type The type of the tree to filter with
* @param objects
* The object placements to check
* @param size
* The size of the sapling area to filter with
* @param type
* The type of the tree to filter with
* @return A list of objectPlacements that matched. May be empty.
*/
private KList<IrisObjectPlacement> matchObjectPlacements(KList<IrisObjectPlacement> objects, IrisTreeSize size, TreeType type) {
KList<IrisObjectPlacement> p = new KList<>();
for (IrisObjectPlacement i : objects) {
if (i.matches(size, type)) {
for(IrisObjectPlacement i : objects) {
if(i.matches(size, type)) {
p.add(i);
}
}
@ -289,9 +298,12 @@ public class TreeSVC implements IrisService {
/**
* Get the Cuboid of sapling sizes at a location & blockData predicate
*
* @param at this location
* @param valid with this blockData predicate
* @param world the world to check in
* @param at
* this location
* @param valid
* with this blockData predicate
* @param world
* the world to check in
* @return A cuboid containing only saplings
*/
public Cuboid getSaplings(Location at, Predicate<BlockData> valid, World world) {
@ -301,7 +313,7 @@ public class TreeSVC implements IrisService {
BlockPosition b = new BlockPosition(Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE);
// Maximise the block position in x and z to get max cuboid bounds
for (BlockPosition blockPosition : blockPositions) {
for(BlockPosition blockPosition : blockPositions) {
a.max(blockPosition);
b.min(blockPosition);
}
@ -314,12 +326,12 @@ public class TreeSVC implements IrisService {
boolean cuboidIsValid = true;
// Loop while the cuboid is larger than 2
while (Math.min(cuboid.getSizeX(), cuboid.getSizeZ()) > 0) {
while(Math.min(cuboid.getSizeX(), cuboid.getSizeZ()) > 0) {
checking:
for (int i = cuboid.getLowerX(); i < cuboid.getUpperX(); i++) {
for (int j = cuboid.getLowerY(); j < cuboid.getUpperY(); j++) {
for (int k = cuboid.getLowerZ(); k < cuboid.getUpperZ(); k++) {
if (!blockPositions.contains(new BlockPosition(i, j, k))) {
for(int i = cuboid.getLowerX(); i < cuboid.getUpperX(); i++) {
for(int j = cuboid.getLowerY(); j < cuboid.getUpperY(); j++) {
for(int k = cuboid.getLowerZ(); k < cuboid.getUpperZ(); k++) {
if(!blockPositions.contains(new BlockPosition(i, j, k))) {
cuboidIsValid = false;
break checking;
}
@ -328,7 +340,7 @@ public class TreeSVC implements IrisService {
}
// Return this cuboid if it's valid
if (cuboidIsValid) {
if(cuboidIsValid) {
return cuboid;
}
@ -343,14 +355,18 @@ public class TreeSVC implements IrisService {
/**
* Grows the blockPosition list by means of checking neighbours in
*
* @param world the world to check in
* @param center the location of this position
* @param valid validation on blockData to check block with
* @param l list of block positions to add new neighbors too
* @param world
* the world to check in
* @param center
* the location of this position
* @param valid
* validation on blockData to check block with
* @param l
* list of block positions to add new neighbors too
*/
private void grow(World world, BlockPosition center, Predicate<BlockData> valid, KList<BlockPosition> l) {
// Make sure size is less than 50, the block to check isn't already in, and make sure the blockData still matches
if (l.size() <= 50 && !l.contains(center) && valid.test(center.toBlock(world).getBlockData())) {
if(l.size() <= 50 && !l.contains(center) && valid.test(center.toBlock(world).getBlockData())) {
l.add(center);
grow(world, center.add(1, 0, 0), valid, l);
grow(world, center.add(-1, 0, 0), valid, l);

View File

@ -43,25 +43,25 @@ public class VillageSVC implements IrisService {
*/
@EventHandler
public void on(VillagerAcquireTradeEvent event) {
if (!IrisToolbelt.isIrisWorld((event.getEntity().getWorld()))) {
if(!IrisToolbelt.isIrisWorld((event.getEntity().getWorld()))) {
return;
}
// Iris.info("Trade event: type " + event.getRecipe().getResult().getType() + " / meta " + event.getRecipe().getResult().getItemMeta() + " / data " + event.getRecipe().getResult().getData());
if (!event.getRecipe().getResult().getType().equals(Material.FILLED_MAP)) {
if(!event.getRecipe().getResult().getType().equals(Material.FILLED_MAP)) {
return;
}
IrisVillagerOverride override = IrisToolbelt.access(event.getEntity().getWorld()).getEngine()
.getDimension().getPatchCartographers();
.getDimension().getPatchCartographers();
if (override.isDisableTrade()) {
if(override.isDisableTrade()) {
event.setCancelled(true);
Iris.debug("Cancelled cartographer trade @ " + event.getEntity().getLocation());
return;
}
if (override.getValidItems() == null) {
if(override.getValidItems() == null) {
event.setCancelled(true);
Iris.debug("Cancelled cartographer trade because no override items are valid @ " + event.getEntity().getLocation());
return;

View File

@ -64,11 +64,12 @@ public class WandSVC implements IrisService {
/**
* Creates an Iris Object from the 2 coordinates selected with a wand
*
* @param wand The wand itemstack
* @param wand
* The wand itemstack
* @return The new object
*/
public static IrisObject createSchematic(ItemStack wand) {
if (!isWand(wand)) {
if(!isWand(wand)) {
return null;
}
@ -76,8 +77,8 @@ public class WandSVC implements IrisService {
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)) {
for(Block b : c) {
if(b.getType().equals(Material.AIR)) {
continue;
}
@ -86,7 +87,7 @@ public class WandSVC implements IrisService {
}
return s;
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
Iris.reportError(e);
}
@ -97,11 +98,12 @@ public class WandSVC implements IrisService {
/**
* Creates an Iris Object from the 2 coordinates selected with a wand
*
* @param wand The wand itemstack
* @param wand
* The wand itemstack
* @return The new object
*/
public static Matter createMatterSchem(Player p, ItemStack wand) {
if (!isWand(wand)) {
if(!isWand(wand)) {
return null;
}
@ -109,7 +111,7 @@ public class WandSVC implements IrisService {
Location[] f = getCuboid(wand);
return WorldMatter.createMatter(p.getName(), f[0], f[1]);
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
Iris.reportError(e);
}
@ -120,7 +122,8 @@ public class WandSVC implements IrisService {
/**
* Converts a user friendly location string to an actual Location
*
* @param s The string
* @param s
* The string
* @return The location
*/
public static Location stringToLocation(String s) {
@ -128,7 +131,7 @@ public class WandSVC implements IrisService {
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) {
} catch(Throwable e) {
Iris.reportError(e);
return null;
}
@ -137,11 +140,12 @@ public class WandSVC implements IrisService {
/**
* Get a user friendly string of a location
*
* @param loc The location
* @param loc
* The location
* @return The string
*/
public static String locationToString(Location loc) {
if (loc == null) {
if(loc == null) {
return "<#>";
}
@ -178,7 +182,8 @@ public class WandSVC implements IrisService {
/**
* Finds an existing wand in a users inventory
*
* @param inventory The inventory to search
* @param inventory
* The inventory to search
* @return The slot number the wand is in. Or -1 if none are found
*/
public static int findWand(Inventory inventory) {
@ -187,14 +192,14 @@ public class WandSVC implements IrisService {
meta.setLore(new ArrayList<>()); //We are resetting the lore as the lore differs between wands
wand.setItemMeta(meta);
for (int s = 0; s < inventory.getSize(); s++) {
for(int s = 0; s < inventory.getSize(); s++) {
ItemStack stack = inventory.getItem(s);
if (stack == null) continue;
if(stack == null) continue;
meta = stack.getItemMeta();
meta.setLore(new ArrayList<>()); //Reset the lore on this too so we can compare them
stack.setItemMeta(meta); //We dont need to clone the item as items from .get are cloned
if (wand.isSimilar(stack)) return s; //If the name, material and NBT is the same
if(wand.isSimilar(stack)) return s; //If the name, material and NBT is the same
}
return -1;
}
@ -202,8 +207,10 @@ public class WandSVC implements IrisService {
/**
* Creates an Iris wand. The locations should be the currently selected locations, or null
*
* @param a Location A
* @param b Location B
* @param a
* Location A
* @param b
* Location B
* @return A new wand
*/
public static ItemStack createWand(Location a, Location b) {
@ -222,18 +229,20 @@ public class WandSVC implements IrisService {
/**
* Get a pair of locations that are selected in an Iris wand
*
* @param is The wand item
* @param is
* The wand item
* @return An array with the 2 locations
*/
public static Location[] getCuboid(ItemStack is) {
ItemMeta im = is.getItemMeta();
return new Location[]{stringToLocation(im.getLore().get(0)), stringToLocation(im.getLore().get(1))};
return new Location[] {stringToLocation(im.getLore().get(0)), stringToLocation(im.getLore().get(1))};
}
/**
* Is a player holding an Iris wand
*
* @param p The player
* @param p
* The player
* @return True if they are
*/
public static boolean isHoldingWand(Player p) {
@ -244,16 +253,17 @@ public class WandSVC implements IrisService {
/**
* Is the itemstack passed an Iris wand
*
* @param is The itemstack
* @param is
* The itemstack
* @return True if it is
*/
public static boolean isWand(ItemStack is) {
ItemStack wand = createWand();
if (is.getItemMeta() == null) return false;
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());
is.getItemMeta().getDisplayName().equals(wand.getItemMeta().getDisplayName()) &&
is.getItemMeta().getEnchants().equals(wand.getItemMeta().getEnchants()) &&
is.getItemMeta().getItemFlags().equals(wand.getItemMeta().getItemFlags());
}
@Override
@ -262,7 +272,7 @@ public class WandSVC implements IrisService {
dust = createDust();
J.ar(() -> {
for (Player i : Bukkit.getOnlinePlayers()) {
for(Player i : Bukkit.getOnlinePlayers()) {
tick(i);
}
}, 0);
@ -276,14 +286,14 @@ public class WandSVC implements IrisService {
public void tick(Player p) {
try {
try {
if (isWand(p.getInventory().getItemInMainHand())) {
if(isWand(p.getInventory().getItemInMainHand())) {
Location[] d = getCuboid(p.getInventory().getItemInMainHand());
new WandSelection(new Cuboid(d[0], d[1]), p).draw();
}
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
}
}
@ -291,18 +301,22 @@ public class WandSVC implements IrisService {
/**
* Draw the outline of a selected region
*
* @param d The cuboid
* @param p The player to show it to
* @param d
* The cuboid
* @param p
* The player to show it to
*/
public void draw(Cuboid d, Player p) {
draw(new Location[]{d.getLowerNE(), d.getUpperSW()}, p);
draw(new Location[] {d.getLowerNE(), d.getUpperSW()}, p);
}
/**
* Draw the outline of a selected region
*
* @param d A pair of locations
* @param p The player to show them to
* @param d
* A pair of locations
* @param p
* The player to show them to
*/
public void draw(Location[] d, Player p) {
Vector gx = Vector.getRandom().subtract(Vector.getRandom()).normalize().clone().multiply(0.65);
@ -310,11 +324,11 @@ public class WandSVC implements IrisService {
Vector gxx = Vector.getRandom().subtract(Vector.getRandom()).normalize().clone().multiply(0.65);
d[1].getWorld().spawnParticle(Particle.CRIT, d[1], 1, 0.5 + gxx.getX(), 0.5 + gxx.getY(), 0.5 + gxx.getZ(), 0, null, false);
if (!d[0].getWorld().equals(d[1].getWorld())) {
if(!d[0].getWorld().equals(d[1].getWorld())) {
return;
}
if (d[0].distanceSquared(d[1]) > 64 * 64) {
if(d[0].distanceSquared(d[1]) > 64 * 64) {
return;
}
@ -325,38 +339,38 @@ public class WandSVC implements IrisService {
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)) {
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)) {
if((jj && kk) || (jj && ll) || (ll && kk)) {
Vector push = new Vector(0, 0, 0);
if (j == minx) {
if(j == minx) {
push.add(new Vector(-0.55, 0, 0));
}
if (k == miny) {
if(k == miny) {
push.add(new Vector(0, -0.55, 0));
}
if (l == minz) {
if(l == minz) {
push.add(new Vector(0, 0, -0.55));
}
if (j == maxx) {
if(j == maxx) {
push.add(new Vector(0.55, 0, 0));
}
if (k == maxy) {
if(k == maxy) {
push.add(new Vector(0, 0.55, 0));
}
if (l == maxz) {
if(l == maxz) {
push.add(new Vector(0, 0, 0.55));
}
@ -376,13 +390,13 @@ public class WandSVC implements IrisService {
@EventHandler
public void on(PlayerInteractEvent e) {
try {
if (isHoldingWand(e.getPlayer())) {
if (e.getAction().equals(Action.LEFT_CLICK_BLOCK)) {
if(isHoldingWand(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)) {
} 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);
@ -390,15 +404,15 @@ public class WandSVC implements IrisService {
}
}
if (isHoldingDust(e.getPlayer())) {
if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
if(isHoldingDust(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 VolmitSender(e.getPlayer(), Iris.instance.getTag()));
}
}
} catch (Throwable xx) {
} catch(Throwable xx) {
Iris.reportError(xx);
}
}
@ -406,7 +420,8 @@ public class WandSVC implements IrisService {
/**
* Is the player holding Dust?
*
* @param p The player
* @param p
* The player
* @return True if they are
*/
public boolean isHoldingDust(Player p) {
@ -417,7 +432,8 @@ public class WandSVC implements IrisService {
/**
* Is the itemstack passed Iris dust?
*
* @param is The itemstack
* @param is
* The itemstack
* @return True if it is
*/
public boolean isDust(ItemStack is) {
@ -427,20 +443,23 @@ public class WandSVC implements IrisService {
/**
* Update the location on an Iris wand
*
* @param left True for first location, false for second
* @param a The location
* @param item The wand
* @param left
* True for first location, false for second
* @param a
* The location
* @param item
* The wand
* @return The updated wand
*/
public ItemStack update(boolean left, Location a, ItemStack item) {
if (!isWand(item)) {
if(!isWand(item)) {
return item;
}
Location[] f = getCuboid(item);
Location other = left ? f[1] : f[0];
if (other != null && !other.getWorld().getName().equals(a.getWorld().getName())) {
if(other != null && !other.getWorld().getName().equals(a.getWorld().getName())) {
other = null;
}

View File

@ -88,20 +88,21 @@ public class IrisCreator {
* Create the IrisAccess (contains the world)
*
* @return the IrisAccess
* @throws IrisException shit happens
* @throws IrisException
* shit happens
*/
public World create() throws IrisException {
if (Bukkit.isPrimaryThread()) {
if(Bukkit.isPrimaryThread()) {
throw new IrisException("You cannot invoke create() on the main thread.");
}
IrisDimension d = IrisToolbelt.getDimension(dimension());
if (d == null) {
if(d == null) {
throw new IrisException("Dimension cannot be found null for id " + dimension());
}
if (!studio()) {
if(!studio()) {
Iris.service(StudioSVC.class).installIntoWorld(sender, d.getLoadKey(), new File(name()));
}
@ -111,11 +112,11 @@ public class IrisCreator {
O<Boolean> done = new O<>();
done.set(false);
WorldCreator wc = new IrisWorldCreator()
.dimension(dimension)
.name(name)
.seed(seed)
.studio(studio)
.create();
.dimension(dimension)
.name(name)
.seed(seed)
.studio(studio)
.create();
access = (PlatformChunkGenerator) wc.generator();
PlatformChunkGenerator finalAccess1 = access;
@ -126,14 +127,14 @@ public class IrisCreator {
Supplier<Integer> g = () -> {
try {
return finalAccess1.getEngine().getGenerated();
} catch (Throwable e) {
} catch(Throwable e) {
return 0;
}
};
while (g.get() < req) {
while(g.get() < req) {
double v = (double) g.get() / (double) req;
if (sender.isPlayer()) {
if(sender.isPlayer()) {
sender.sendProgress(v, "Generating");
J.sleep(16);
} else {
@ -148,27 +149,27 @@ public class IrisCreator {
J.sfut(() -> {
world.set(wc.createWorld());
}).get();
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
}
if (access == null) {
if(access == null) {
throw new IrisException("Access is null. Something bad happened.");
}
done.set(true);
if (sender.isPlayer()) {
if(sender.isPlayer()) {
J.s(() -> {
sender.player().teleport(new Location(world.get(), 0, world.get().getHighestBlockYAt(0, 0), 0));
});
}
if (studio) {
if(studio) {
J.s(() -> {
Iris.linkMultiverseCore.removeFromConfig(world.get());
if (IrisSettings.get().getStudio().isDisableTimeAndWeather()) {
if(IrisSettings.get().getStudio().isDisableTimeAndWeather()) {
world.get().setGameRule(GameRule.DO_WEATHER_CYCLE, false);
world.get().setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false);
world.get().setTime(6000);
@ -176,19 +177,19 @@ public class IrisCreator {
});
}
if (pregen != null) {
if(pregen != null) {
CompletableFuture<Boolean> ff = new CompletableFuture<>();
IrisToolbelt.pregenerate(pregen, access)
.onProgress(pp::set)
.whenDone(() -> ff.complete(true));
.onProgress(pp::set)
.whenDone(() -> ff.complete(true));
try {
AtomicBoolean dx = new AtomicBoolean(false);
J.a(() -> {
while (!dx.get()) {
if (sender.isPlayer()) {
while(!dx.get()) {
if(sender.isPlayer()) {
sender.sendProgress(pp.get(), "Pregenerating");
J.sleep(16);
} else {
@ -200,7 +201,7 @@ public class IrisCreator {
ff.get();
dx.set(true);
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
}
}

View File

@ -51,17 +51,18 @@ public class IrisToolbelt {
* - GithubUsername/repository
* - GithubUsername/repository/branch
*
* @param dimension the dimension id such as overworld or flat
* @param dimension
* the dimension id such as overworld or flat
* @return the IrisDimension or null
*/
public static IrisDimension getDimension(String dimension) {
File pack = Iris.instance.getDataFolder("packs", dimension);
if (!pack.exists()) {
if(!pack.exists()) {
Iris.service(StudioSVC.class).downloadSearch(new VolmitSender(Bukkit.getConsoleSender(), Iris.instance.getTag()), dimension, false, false);
}
if (!pack.exists()) {
if(!pack.exists()) {
return null;
}
@ -80,15 +81,16 @@ public class IrisToolbelt {
/**
* Checks if the given world is an Iris World (same as access(world) != null)
*
* @param world the world
* @param world
* the world
* @return true if it is an Iris Access world
*/
public static boolean isIrisWorld(World world) {
if (world == null) {
if(world == null) {
return false;
}
if (world.getGenerator() instanceof PlatformChunkGenerator f) {
if(world.getGenerator() instanceof PlatformChunkGenerator f) {
f.touch(world);
return true;
}
@ -103,11 +105,12 @@ public class IrisToolbelt {
/**
* Get the Iris generator for the given world
*
* @param world the given world
* @param world
* the given world
* @return the IrisAccess or null if it's not an Iris World
*/
public static PlatformChunkGenerator access(World world) {
if (isIrisWorld(world)) {
if(isIrisWorld(world)) {
return ((PlatformChunkGenerator) world.getGenerator());
}
@ -117,8 +120,10 @@ public class IrisToolbelt {
/**
* Start a pregenerator task
*
* @param task the scheduled task
* @param method the method to execute the task
* @param task
* the scheduled task
* @param method
* the method to execute the task
* @return the pregenerator job (already started)
*/
public static PregeneratorJob pregenerate(PregenTask task, PregeneratorMethod method, Engine engine) {
@ -129,29 +134,33 @@ public class IrisToolbelt {
* Start a pregenerator task. If the supplied generator is headless, headless mode is used,
* otherwise Hybrid mode is used.
*
* @param task the scheduled task
* @param gen the Iris Generator
* @param task
* the scheduled task
* @param gen
* the Iris Generator
* @return the pregenerator job (already started)
*/
public static PregeneratorJob pregenerate(PregenTask task, PlatformChunkGenerator gen) {
if (gen.isHeadless()) {
if(gen.isHeadless()) {
return pregenerate(task, new HeadlessPregenMethod(((HeadlessGenerator) gen).getWorld(), (HeadlessGenerator) gen), gen.getEngine());
}
return pregenerate(task, new HybridPregenMethod(gen.getEngine().getWorld().realWorld(),
IrisSettings.getThreadCount(IrisSettings.get().getConcurrency().getParallelism())), gen.getEngine());
IrisSettings.getThreadCount(IrisSettings.get().getConcurrency().getParallelism())), gen.getEngine());
}
/**
* Start a pregenerator task. If the supplied generator is headless, headless mode is used,
* otherwise Hybrid mode is used.
*
* @param task the scheduled task
* @param world the World
* @param task
* the scheduled task
* @param world
* the World
* @return the pregenerator job (already started)
*/
public static PregeneratorJob pregenerate(PregenTask task, World world) {
if (isIrisWorld(world)) {
if(isIrisWorld(world)) {
return pregenerate(task, access(world));
}
@ -162,12 +171,13 @@ public class IrisToolbelt {
* Evacuate all players from the world into literally any other world.
* If there are no other worlds, kick them! Not the best but what's mine is mine sometimes...
*
* @param world the world to evac
* @param world
* the world to evac
*/
public static boolean evacuate(World world) {
for (World i : Bukkit.getWorlds()) {
if (!i.getName().equals(world.getName())) {
for (Player j : world.getPlayers()) {
for(World i : Bukkit.getWorlds()) {
if(!i.getName().equals(world.getName())) {
for(Player j : world.getPlayers()) {
new VolmitSender(j, Iris.instance.getTag()).sendMessage("You have been evacuated from this world.");
j.teleport(i.getSpawnLocation());
}
@ -182,14 +192,16 @@ public class IrisToolbelt {
/**
* Evacuate all players from the world
*
* @param world the world to leave
* @param m the message
* @param world
* the world to leave
* @param m
* the message
* @return true if it was evacuated.
*/
public static boolean evacuate(World world, String m) {
for (World i : Bukkit.getWorlds()) {
if (!i.getName().equals(world.getName())) {
for (Player j : world.getPlayers()) {
for(World i : Bukkit.getWorlds()) {
if(!i.getName().equals(world.getName())) {
for(Player j : world.getPlayers()) {
new VolmitSender(j, Iris.instance.getTag()).sendMessage("You have been evacuated from this world. " + m);
j.teleport(i.getSpawnLocation());
}

View File

@ -33,8 +33,6 @@ public class IrisWorldCreator {
private boolean studio = false;
private String dimensionName = null;
private long seed = 1337;
private int maxHeight = 256;
private int minHeight = 0;
public IrisWorldCreator() {
@ -45,18 +43,6 @@ public class IrisWorldCreator {
return this;
}
public IrisWorldCreator height(int maxHeight) {
this.maxHeight = maxHeight;
this.minHeight = 0;
return this;
}
public IrisWorldCreator height(int minHeight, int maxHeight) {
this.maxHeight = maxHeight;
this.minHeight = minHeight;
return this;
}
public IrisWorldCreator name(String name) {
this.name = name;
return this;
@ -78,27 +64,29 @@ public class IrisWorldCreator {
}
public WorldCreator create() {
IrisDimension dim = IrisData.loadAnyDimension(dimensionName);
IrisWorld w = IrisWorld.builder()
.name(name)
.minHeight(minHeight)
.maxHeight(maxHeight)
.seed(seed)
.worldFolder(new File(name))
.environment(findEnvironment())
.build();
.name(name)
.minHeight(dim.getMinHeight())
.maxHeight(dim.getMaxHeight())
.seed(seed)
.worldFolder(new File(name))
.environment(findEnvironment())
.build();
ChunkGenerator g = new BukkitChunkGenerator(w, studio, studio
? IrisData.loadAnyDimension(dimensionName).getLoader().getDataFolder() :
new File(w.worldFolder(), "iris/pack"), dimensionName);
? dim.getLoader().getDataFolder() :
new File(w.worldFolder(), "iris/pack"), dimensionName);
return new WorldCreator(name)
.environment(findEnvironment())
.generateStructures(true)
.generator(g).seed(seed);
.environment(findEnvironment())
.generateStructures(true)
.generator(g).seed(seed);
}
private World.Environment findEnvironment() {
IrisDimension dim = IrisData.loadAnyDimension(dimensionName);
if (dim == null || dim.getEnvironment() == null) {
if(dim == null || dim.getEnvironment() == null) {
return World.Environment.NORMAL;
} else {
return dim.getEnvironment();

View File

@ -41,37 +41,37 @@ public class WandSelection {
double accuracy = M.lerpInverse(0, 64 * 64, p.getLocation().distanceSquared(c.getCenter()));
double dist = M.lerp(0.125, 3.5, accuracy);
for (double i = c.getLowerX() - 1; i < c.getUpperX() + 1; i += 0.25) {
for (double j = c.getLowerY() - 1; j < c.getUpperY() + 1; j += 0.25) {
for (double k = c.getLowerZ() - 1; k < c.getUpperZ() + 1; k += 0.25) {
for(double i = c.getLowerX() - 1; i < c.getUpperX() + 1; i += 0.25) {
for(double j = c.getLowerY() - 1; j < c.getUpperY() + 1; j += 0.25) {
for(double k = c.getLowerZ() - 1; k < c.getUpperZ() + 1; k += 0.25) {
boolean ii = i == c.getLowerX() || i == c.getUpperX();
boolean jj = j == c.getLowerY() || j == c.getUpperY();
boolean kk = k == c.getLowerZ() || k == c.getUpperZ();
if ((ii && jj) || (ii && kk) || (kk && jj)) {
if((ii && jj) || (ii && kk) || (kk && jj)) {
Vector push = new Vector(0, 0, 0);
if (i == c.getLowerX()) {
if(i == c.getLowerX()) {
push.add(new Vector(-0.55, 0, 0));
}
if (j == c.getLowerY()) {
if(j == c.getLowerY()) {
push.add(new Vector(0, -0.55, 0));
}
if (k == c.getLowerZ()) {
if(k == c.getLowerZ()) {
push.add(new Vector(0, 0, -0.55));
}
if (i == c.getUpperX()) {
if(i == c.getUpperX()) {
push.add(new Vector(0.55, 0, 0));
}
if (j == c.getUpperY()) {
if(j == c.getUpperY()) {
push.add(new Vector(0, 0.55, 0));
}
if (k == c.getUpperZ()) {
if(k == c.getUpperZ()) {
push.add(new Vector(0, 0, 0.55));
}
@ -79,32 +79,32 @@ public class WandSelection {
accuracy = M.lerpInverse(0, 64 * 64, p.getLocation().distanceSquared(a));
dist = M.lerp(0.125, 3.5, accuracy);
if (M.r(M.min(dist * 5, 0.9D) * 0.995)) {
if(M.r(M.min(dist * 5, 0.9D) * 0.995)) {
continue;
}
if (ii && jj) {
if(ii && jj) {
a.add(0, 0, RNG.r.d(-0.3, 0.3));
}
if (kk && jj) {
if(kk && jj) {
a.add(RNG.r.d(-0.3, 0.3), 0, 0);
}
if (ii && kk) {
if(ii && kk) {
a.add(0, RNG.r.d(-0.3, 0.3), 0);
}
if (p.getLocation().distanceSquared(a) < 256 * 256) {
if(p.getLocation().distanceSquared(a) < 256 * 256) {
Color color = Color.getHSBColor((float) (0.5f + (Math.sin((i + j + k + (p.getTicksLived() / 2f)) / (20f)) / 2)), 1, 1);
int r = color.getRed();
int g = color.getGreen();
int b = color.getBlue();
p.spawnParticle(Particle.REDSTONE, a.getX(), a.getY(), a.getZ(),
1, 0, 0, 0, 0,
new Particle.DustOptions(org.bukkit.Color.fromRGB(r, g, b),
(float) dist * 3f));
1, 0, 0, 0, 0,
new Particle.DustOptions(org.bukkit.Color.fromRGB(r, g, b),
(float) dist * 3f));
}
}
}

View File

@ -25,29 +25,23 @@ public class EnginePanic {
private static final KMap<String, String> stuff = new KMap<>();
private static KMap<String, String> last = new KMap<>();
public static void add(String key, String value)
{
public static void add(String key, String value) {
stuff.put(key, value);
}
public static void saveLast()
{
public static void saveLast() {
last = stuff.copy();
}
public static void lastPanic()
{
for(String i : last.keySet())
{
public static void lastPanic() {
for(String i : last.keySet()) {
Iris.error("Last Panic " + i + ": " + stuff.get(i));
}
}
public static void panic()
{
public static void panic() {
lastPanic();
for(String i : stuff.keySet())
{
for(String i : stuff.keySet()) {
Iris.error("Engine Panic " + i + ": " + stuff.get(i));
}
}

View File

@ -102,70 +102,70 @@ public class IrisComplex implements DataProvider {
focusRegion = engine.getFocusRegion();
KMap<InferredType, ProceduralStream<IrisBiome>> inferredStreams = new KMap<>();
if (focusBiome != null) {
if(focusBiome != null) {
focusBiome.setInferredType(InferredType.LAND);
focusRegion = findRegion(focusBiome, engine);
}
//@builder
engine.getDimension().getRegions().forEach((i) -> data.getRegionLoader().load(i)
.getAllBiomes(this).forEach((b) -> b
.getGenerators()
.forEach((c) -> registerGenerator(c.getCachedGenerator(this)))));
.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, getData(), x, z)));
rockStream = engine.getDimension().getRockPalette().getLayerGenerator(rng.nextParallelRNG(45), data).stream()
.select(engine.getDimension().getRockPalette().getBlockData(data));
.select(engine.getDimension().getRockPalette().getBlockData(data));
fluidStream = engine.getDimension().getFluidPalette().getLayerGenerator(rng.nextParallelRNG(78), data).stream()
.select(engine.getDimension().getFluidPalette().getBlockData(data));
.select(engine.getDimension().getFluidPalette().getBlockData(data));
regionStyleStream = engine.getDimension().getRegionStyle().create(rng.nextParallelRNG(883), getData()).stream()
.zoom(engine.getDimension().getRegionZoom());
.zoom(engine.getDimension().getRegionZoom());
regionIdentityStream = regionStyleStream.fit(Integer.MIN_VALUE, Integer.MAX_VALUE);
regionStream = focusRegion != null ?
ProceduralStream.of((x, z) -> focusRegion,
Interpolated.of(a -> 0D, a -> focusRegion))
: regionStyleStream
.selectRarity(data.getRegionLoader().loadAll(engine.getDimension().getRegions()))
.cache2D("regionStream", engine, cacheSize);
ProceduralStream.of((x, z) -> focusRegion,
Interpolated.of(a -> 0D, a -> focusRegion))
: regionStyleStream
.selectRarity(data.getRegionLoader().loadAll(engine.getDimension().getRegions()))
.cache2D("regionStream", engine, cacheSize);
regionIDStream = regionIdentityStream.convertCached((i) -> new UUID(Double.doubleToLongBits(i), String.valueOf(i * 38445).hashCode() * 3245556666L));
caveBiomeStream = regionStream.convert((r)
-> engine.getDimension().getCaveBiomeStyle().create(rng.nextParallelRNG(InferredType.CAVE.ordinal()), getData()).stream()
.zoom(r.getCaveBiomeZoom())
.selectRarity(data.getBiomeLoader().loadAll(r.getCaveBiomes()))
.onNull(emptyBiome)
-> engine.getDimension().getCaveBiomeStyle().create(rng.nextParallelRNG(InferredType.CAVE.ordinal()), getData()).stream()
.zoom(r.getCaveBiomeZoom())
.selectRarity(data.getBiomeLoader().loadAll(r.getCaveBiomes()))
.onNull(emptyBiome)
).convertAware2D(ProceduralStream::get).cache2D("caveBiomeStream", engine, cacheSize);
inferredStreams.put(InferredType.CAVE, caveBiomeStream);
landBiomeStream = regionStream.convert((r)
-> engine.getDimension().getLandBiomeStyle().create(rng.nextParallelRNG(InferredType.LAND.ordinal()), getData()).stream()
.zoom(r.getLandBiomeZoom())
.selectRarity(data.getBiomeLoader().loadAll(r.getLandBiomes(), (t) -> t.setInferredType(InferredType.LAND)))
).convertAware2D(ProceduralStream::get)
.cache2D("landBiomeStream", engine, cacheSize);
-> engine.getDimension().getLandBiomeStyle().create(rng.nextParallelRNG(InferredType.LAND.ordinal()), getData()).stream()
.zoom(r.getLandBiomeZoom())
.selectRarity(data.getBiomeLoader().loadAll(r.getLandBiomes(), (t) -> t.setInferredType(InferredType.LAND)))
).convertAware2D(ProceduralStream::get)
.cache2D("landBiomeStream", engine, cacheSize);
inferredStreams.put(InferredType.LAND, landBiomeStream);
seaBiomeStream = regionStream.convert((r)
-> engine.getDimension().getSeaBiomeStyle().create(rng.nextParallelRNG(InferredType.SEA.ordinal()), getData()).stream()
.zoom(r.getSeaBiomeZoom())
.selectRarity(data.getBiomeLoader().loadAll(r.getSeaBiomes(), (t) -> t.setInferredType(InferredType.SEA)))
).convertAware2D(ProceduralStream::get)
.cache2D("seaBiomeStream", engine, cacheSize);
-> engine.getDimension().getSeaBiomeStyle().create(rng.nextParallelRNG(InferredType.SEA.ordinal()), getData()).stream()
.zoom(r.getSeaBiomeZoom())
.selectRarity(data.getBiomeLoader().loadAll(r.getSeaBiomes(), (t) -> t.setInferredType(InferredType.SEA)))
).convertAware2D(ProceduralStream::get)
.cache2D("seaBiomeStream", engine, cacheSize);
inferredStreams.put(InferredType.SEA, seaBiomeStream);
shoreBiomeStream = regionStream.convert((r)
-> engine.getDimension().getShoreBiomeStyle().create(rng.nextParallelRNG(InferredType.SHORE.ordinal()), getData()).stream()
.zoom(r.getShoreBiomeZoom())
.selectRarity(data.getBiomeLoader().loadAll(r.getShoreBiomes(), (t) -> t.setInferredType(InferredType.SHORE)))
-> engine.getDimension().getShoreBiomeStyle().create(rng.nextParallelRNG(InferredType.SHORE.ordinal()), getData()).stream()
.zoom(r.getShoreBiomeZoom())
.selectRarity(data.getBiomeLoader().loadAll(r.getShoreBiomes(), (t) -> t.setInferredType(InferredType.SHORE)))
).convertAware2D(ProceduralStream::get).cache2D("shoreBiomeStream", engine, cacheSize);
inferredStreams.put(InferredType.SHORE, shoreBiomeStream);
bridgeStream = focusBiome != null ? ProceduralStream.of((x, z) -> focusBiome.getInferredType(),
Interpolated.of(a -> 0D, a -> focusBiome.getInferredType())) :
engine.getDimension().getContinentalStyle().create(rng.nextParallelRNG(234234565), getData())
.bake().scale(1D / engine.getDimension().getContinentZoom()).bake().stream()
.convert((v) -> v >= engine.getDimension().getLandChance() ? InferredType.SEA : InferredType.LAND)
.cache2D("bridgeStream", engine, cacheSize);
Interpolated.of(a -> 0D, a -> focusBiome.getInferredType())) :
engine.getDimension().getContinentalStyle().create(rng.nextParallelRNG(234234565), getData())
.bake().scale(1D / engine.getDimension().getContinentZoom()).bake().stream()
.convert((v) -> v >= engine.getDimension().getLandChance() ? InferredType.SEA : InferredType.LAND)
.cache2D("bridgeStream", engine, cacheSize);
baseBiomeStream = focusBiome != null ? ProceduralStream.of((x, z) -> focusBiome,
Interpolated.of(a -> 0D, a -> focusBiome)) :
bridgeStream.convertAware2D((t, x, z) -> inferredStreams.get(t).get(x, z))
.convertAware2D(this::implode)
.cache2D("baseBiomeStream", engine, cacheSize);
Interpolated.of(a -> 0D, a -> focusBiome)) :
bridgeStream.convertAware2D((t, x, z) -> inferredStreams.get(t).get(x, z))
.convertAware2D(this::implode)
.cache2D("baseBiomeStream", engine, cacheSize);
heightStream = ProceduralStream.of((x, z) -> {
IrisBiome b = focusBiome != null ? focusBiome : baseBiomeStream.get(x, z);
return getHeight(engine, b, x, z, engine.getSeedManager().getHeight());
@ -173,40 +173,40 @@ public class IrisComplex implements DataProvider {
roundedHeighteightStream = heightStream.round();
slopeStream = heightStream.slope(3).cache2D("slopeStream", engine, cacheSize);
trueBiomeStream = focusBiome != null ? ProceduralStream.of((x, y) -> focusBiome, Interpolated.of(a -> 0D,
b -> focusBiome))
.cache2D("trueBiomeStream-focus", engine, cacheSize) : heightStream
.convertAware2D((h, x, z) ->
fixBiomeType(h, baseBiomeStream.get(x, z),
regionStream.get(x, z), x, z, fluidHeight))
.cache2D("trueBiomeStream", engine, cacheSize);
b -> focusBiome))
.cache2D("trueBiomeStream-focus", engine, cacheSize) : heightStream
.convertAware2D((h, x, z) ->
fixBiomeType(h, baseBiomeStream.get(x, z),
regionStream.get(x, z), x, z, fluidHeight))
.cache2D("trueBiomeStream", engine, cacheSize);
trueBiomeDerivativeStream = trueBiomeStream.convert(IrisBiome::getDerivative).cache2D("trueBiomeDerivativeStream", engine, cacheSize);
heightFluidStream = heightStream.max(fluidHeight).cache2D("heightFluidStream", engine, cacheSize);
maxHeightStream = ProceduralStream.ofDouble((x, z) -> height);
terrainSurfaceDecoration = trueBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.NONE)).cache2D("terrainSurfaceDecoration", engine, cacheSize);
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.NONE)).cache2D("terrainSurfaceDecoration", engine, cacheSize);
terrainCeilingDecoration = trueBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.CEILING)).cache2D("terrainCeilingDecoration", engine, cacheSize);
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.CEILING)).cache2D("terrainCeilingDecoration", engine, cacheSize);
terrainCaveSurfaceDecoration = caveBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.NONE)).cache2D("terrainCaveSurfaceDecoration", engine, cacheSize);
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.NONE)).cache2D("terrainCaveSurfaceDecoration", engine, cacheSize);
terrainCaveCeilingDecoration = caveBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.CEILING)).cache2D("terrainCaveCeilingDecoration", engine, cacheSize);
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.CEILING)).cache2D("terrainCaveCeilingDecoration", engine, cacheSize);
shoreSurfaceDecoration = trueBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.SHORE_LINE)).cache2D("shoreSurfaceDecoration", engine, cacheSize);
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.SHORE_LINE)).cache2D("shoreSurfaceDecoration", engine, cacheSize);
seaSurfaceDecoration = trueBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.SEA_SURFACE)).cache2D("seaSurfaceDecoration", engine, cacheSize);
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.SEA_SURFACE)).cache2D("seaSurfaceDecoration", engine, cacheSize);
seaFloorDecoration = trueBiomeStream
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.SEA_FLOOR)).cache2D("seaFloorDecoration", engine, cacheSize);
.convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.SEA_FLOOR)).cache2D("seaFloorDecoration", engine, cacheSize);
baseBiomeIDStream = trueBiomeStream.convertAware2D((b, x, z) -> {
UUID d = regionIDStream.get(x, z);
return new UUID(b.getLoadKey().hashCode() * 818223L,
d.hashCode());
})
.cache2D("", engine, cacheSize);
UUID d = regionIDStream.get(x, z);
return new UUID(b.getLoadKey().hashCode() * 818223L,
d.hashCode());
})
.cache2D("", engine, cacheSize);
//@done
}
public ProceduralStream<IrisBiome> getBiomeStream(InferredType type) {
switch (type) {
switch(type) {
case CAVE:
return caveBiomeStream;
case LAND:
@ -224,8 +224,8 @@ public class IrisComplex implements DataProvider {
}
private IrisRegion findRegion(IrisBiome focus, Engine engine) {
for (IrisRegion i : engine.getDimension().getAllRegions(engine)) {
if (i.getAllBiomeIds().contains(focus.getLoadKey())) {
for(IrisRegion i : engine.getDimension().getAllRegions(engine)) {
if(i.getAllBiomeIds().contains(focus.getLoadKey())) {
return i;
}
}
@ -236,14 +236,14 @@ public class IrisComplex implements DataProvider {
private IrisDecorator decorateFor(IrisBiome b, double x, double z, IrisDecorationPart part) {
RNG rngc = new RNG(Cache.key(((int) x), ((int) z)));
for (IrisDecorator i : b.getDecorators()) {
if (!i.getPartOf().equals(part)) {
for(IrisDecorator i : b.getDecorators()) {
if(!i.getPartOf().equals(part)) {
continue;
}
BlockData block = i.getBlockData(b, rngc, x, z, data);
if (block != null) {
if(block != null) {
return i;
}
}
@ -254,19 +254,19 @@ public class IrisComplex implements DataProvider {
private IrisBiome fixBiomeType(Double height, IrisBiome biome, IrisRegion region, Double x, Double z, double fluidHeight) {
double sh = region.getShoreHeight(x, z);
if (height >= fluidHeight - 1 && height <= fluidHeight + sh && !biome.isShore()) {
if(height >= fluidHeight - 1 && height <= fluidHeight + sh && !biome.isShore()) {
return shoreBiomeStream.get(x, z);
}
if (height > fluidHeight + sh && !biome.isLand()) {
if(height > fluidHeight + sh && !biome.isLand()) {
return landBiomeStream.get(x, z);
}
if (height < fluidHeight && !biome.isAquatic()) {
if(height < fluidHeight && !biome.isAquatic()) {
return seaBiomeStream.get(x, z);
}
if (height == fluidHeight && !biome.isShore()) {
if(height == fluidHeight && !biome.isShore()) {
return shoreBiomeStream.get(x, z);
}
@ -274,7 +274,7 @@ public class IrisComplex implements DataProvider {
}
private double interpolateGenerators(Engine engine, IrisInterpolator interpolator, KSet<IrisGenerator> generators, double x, double z, long seed) {
if (generators.isEmpty()) {
if(generators.isEmpty()) {
return 0;
}
@ -283,12 +283,12 @@ public class IrisComplex implements DataProvider {
IrisBiome bx = baseBiomeStream.get(xx, zz);
double b = 0;
for (IrisGenerator gen : generators) {
for(IrisGenerator gen : generators) {
b += bx.getGenLinkMax(gen.getLoadKey());
}
return b;
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
Iris.error("Failed to sample hi biome at " + xx + " " + zz + "...");
@ -302,12 +302,12 @@ public class IrisComplex implements DataProvider {
IrisBiome bx = baseBiomeStream.get(xx, zz);
double b = 0;
for (IrisGenerator gen : generators) {
for(IrisGenerator gen : generators) {
b += bx.getGenLinkMin(gen.getLoadKey());
}
return b;
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
Iris.error("Failed to sample lo biome at " + xx + " " + zz + "...");
@ -318,7 +318,7 @@ public class IrisComplex implements DataProvider {
double d = 0;
for (IrisGenerator i : generators) {
for(IrisGenerator i : generators) {
d += M.lerp(lo, hi, i.getHeight(x, z, seed + 239945));
}
@ -328,7 +328,7 @@ public class IrisComplex implements DataProvider {
private double getInterpolatedHeight(Engine engine, double x, double z, long seed) {
double h = 0;
for (IrisInterpolator i : generators.keySet()) {
for(IrisInterpolator i : generators.keySet()) {
h += interpolateGenerators(engine, i, generators.get(i), x, z, seed);
}
@ -337,7 +337,7 @@ public class IrisComplex implements DataProvider {
private double getHeight(Engine engine, IrisBiome b, double x, double z, long seed) {
return Math.min(engine.getHeight(),
Math.max(getInterpolatedHeight(engine, x, z, seed) + fluidHeight + overlayStream.get(x, z), 0));
Math.max(getInterpolatedHeight(engine, x, z, seed) + fluidHeight + overlayStream.get(x, z), 0));
}
private void registerGenerator(IrisGenerator cachedGenerator) {
@ -345,7 +345,7 @@ public class IrisComplex implements DataProvider {
}
private IrisBiome implode(IrisBiome b, Double x, Double z) {
if (b.getChildren().isEmpty()) {
if(b.getChildren().isEmpty()) {
return b;
}
@ -353,11 +353,11 @@ public class IrisComplex implements DataProvider {
}
private IrisBiome implode(IrisBiome b, Double x, Double z, int max) {
if (max < 0) {
if(max < 0) {
return b;
}
if (b.getChildren().isEmpty()) {
if(b.getChildren().isEmpty()) {
return b;
}

View File

@ -35,7 +35,13 @@ import com.volmit.iris.engine.framework.EngineWorldManager;
import com.volmit.iris.engine.framework.SeedManager;
import com.volmit.iris.engine.framework.WrongEngineBroException;
import com.volmit.iris.engine.mantle.EngineMantle;
import com.volmit.iris.engine.object.*;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisBiomePaletteLayer;
import com.volmit.iris.engine.object.IrisDecorator;
import com.volmit.iris.engine.object.IrisEngineData;
import com.volmit.iris.engine.object.IrisJigsawStructure;
import com.volmit.iris.engine.object.IrisObjectPlacement;
import com.volmit.iris.engine.object.IrisRegion;
import com.volmit.iris.engine.scripting.EngineExecutionEnvironment;
import com.volmit.iris.util.atomics.AtomicRollingSequence;
import com.volmit.iris.util.collection.KMap;
@ -132,18 +138,18 @@ public class IrisEngine implements Engine {
}
private void verifySeed() {
if (getEngineData().getSeed() != null && getEngineData().getSeed() != target.getWorld().getRawWorldSeed()) {
if(getEngineData().getSeed() != null && getEngineData().getSeed() != target.getWorld().getRawWorldSeed()) {
target.getWorld().setRawWorldSeed(getEngineData().getSeed());
}
}
private void tickRandomPlayer() {
if (perSecondBudLatch.flip()) {
if(perSecondBudLatch.flip()) {
buds.set(bud.get());
bud.set(0);
}
if (effects != null) {
if(effects != null) {
effects.tickRandomPlayer();
}
}
@ -168,7 +174,7 @@ public class IrisEngine implements Engine {
effects = new IrisEngineEffects(this);
setupMode();
J.a(this::computeBiomeMaxes);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.error("FAILED TO SETUP ENGINE!");
e.printStackTrace();
}
@ -177,7 +183,7 @@ public class IrisEngine implements Engine {
}
private void setupMode() {
if (mode != null) {
if(mode != null) {
mode.close();
}
@ -200,8 +206,8 @@ public class IrisEngine implements Engine {
}
private void warmupChunk(int x, int z) {
for (int i = 0; i < 16; i++) {
for (int j = 0; j < 16; j++) {
for(int i = 0; i < 16; i++) {
for(int j = 0; j < 16; j++) {
int xx = x + (i << 4);
int zz = z + (z << 4);
getComplex().getTrueBiomeStream().get(xx, zz);
@ -237,18 +243,18 @@ public class IrisEngine implements Engine {
//TODO: Method this file
File f = new File(getWorld().worldFolder(), "iris/engine-data/" + getDimension().getLoadKey() + ".json");
if (!f.exists()) {
if(!f.exists()) {
try {
f.getParentFile().mkdirs();
IO.writeAll(f, new Gson().toJson(new IrisEngineData()));
} catch (IOException e) {
} catch(IOException e) {
e.printStackTrace();
}
}
try {
return new Gson().fromJson(IO.readAll(f), IrisEngineData.class);
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
}
@ -263,11 +269,11 @@ public class IrisEngine implements Engine {
@Override
public double getGeneratedPerSecond() {
if (perSecondLatch.flip()) {
if(perSecondLatch.flip()) {
double g = generated.get() - generatedLast.get();
generatedLast.set(generated.get());
if (g == 0) {
if(g == 0) {
return 0;
}
@ -285,24 +291,24 @@ public class IrisEngine implements Engine {
}
private void computeBiomeMaxes() {
for (IrisBiome i : getDimension().getAllBiomes(this)) {
for(IrisBiome i : getDimension().getAllBiomes(this)) {
double density = 0;
for (IrisObjectPlacement j : i.getObjects()) {
for(IrisObjectPlacement j : i.getObjects()) {
density += j.getDensity() * j.getChance();
}
maxBiomeObjectDensity = Math.max(maxBiomeObjectDensity, density);
density = 0;
for (IrisDecorator j : i.getDecorators()) {
for(IrisDecorator j : i.getDecorators()) {
density += Math.max(j.getStackMax(), 1) * j.getChance();
}
maxBiomeDecoratorDensity = Math.max(maxBiomeDecoratorDensity, density);
density = 0;
for (IrisBiomePaletteLayer j : i.getLayers()) {
for(IrisBiomePaletteLayer j : i.getLayers()) {
density++;
}
@ -323,11 +329,11 @@ public class IrisEngine implements Engine {
double totalWeight = 0;
double wallClock = 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(getName() + "." + j, (wallClock / totalWeight) * timings.get(j));
}
@ -335,33 +341,33 @@ public class IrisEngine implements Engine {
double mtotals = 0;
for (double i : totals.values()) {
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()) {
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()) {
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()) {
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;
@ -395,11 +401,11 @@ public class IrisEngine implements Engine {
@Override
public void recycle() {
if (!cleanLatch.flip()) {
if(!cleanLatch.flip()) {
return;
}
if (cleaning.get()) {
if(cleaning.get()) {
cleanLatch.flipDown();
return;
}
@ -410,7 +416,7 @@ public class IrisEngine implements Engine {
try {
getMantle().trim();
getData().getObjectLoader().clean();
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
Iris.error("Cleanup failed! Enable debug to see stacktrace.");
}
@ -422,7 +428,7 @@ public class IrisEngine implements Engine {
@BlockCoordinates
@Override
public void generate(int x, int z, Hunk<BlockData> vblocks, Hunk<Biome> vbiomes, boolean multicore) throws WrongEngineBroException {
if (closed) {
if(closed) {
throw new WrongEngineBroException();
}
@ -432,9 +438,9 @@ public class IrisEngine implements Engine {
PrecisionStopwatch p = PrecisionStopwatch.start();
Hunk<BlockData> blocks = vblocks.listen((xx, y, zz, t) -> catchBlockUpdates(x + xx, y + getMinHeight(), z + zz, t));
if (getDimension().isDebugChunkCrossSections() && ((x >> 4) % getDimension().getDebugCrossSectionsMod() == 0 || (z >> 4) % getDimension().getDebugCrossSectionsMod() == 0)) {
for (int i = 0; i < 16; i++) {
for (int j = 0; j < 16; j++) {
if(getDimension().isDebugChunkCrossSections() && ((x >> 4) % getDimension().getDebugCrossSectionsMod() == 0 || (z >> 4) % getDimension().getDebugCrossSectionsMod() == 0)) {
for(int i = 0; i < 16; i++) {
for(int j = 0; j < 16; j++) {
blocks.set(i, 0, j, Material.CRYING_OBSIDIAN.createBlockData());
}
}
@ -446,7 +452,7 @@ public class IrisEngine implements Engine {
getMetrics().getTotal().put(p.getMilliseconds());
generated.incrementAndGet();
recycle();
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
fail("Failed to generate " + x + ", " + z, e);
}
@ -460,7 +466,7 @@ public class IrisEngine implements Engine {
try {
IO.writeAll(f, new Gson().toJson(getEngineData()));
Iris.debug("Saved Engine Data");
} catch (IOException e) {
} catch(IOException e) {
Iris.error("Failed to save Engine Data");
e.printStackTrace();
}
@ -473,7 +479,7 @@ public class IrisEngine implements Engine {
@Override
public IrisBiome getFocus() {
if (getDimension().getFocus() == null || getDimension().getFocus().trim().isEmpty()) {
if(getDimension().getFocus() == null || getDimension().getFocus().trim().isEmpty()) {
return null;
}
@ -482,12 +488,13 @@ public class IrisEngine implements Engine {
@Override
public IrisRegion getFocusRegion() {
if (getDimension().getFocusRegion() == null || getDimension().getFocusRegion().trim().isEmpty()) {
if(getDimension().getFocusRegion() == null || getDimension().getFocusRegion().trim().isEmpty()) {
return null;
}
return getData().getRegionLoader().load(getDimension().getFocusRegion());
}
@Override
public void fail(String error, Throwable e) {
failing = true;

View File

@ -45,19 +45,19 @@ public class IrisEngineEffects extends EngineAssignedComponent implements Engine
public void updatePlayerMap() {
List<Player> pr = getEngine().getWorld().getPlayers();
if (pr == null) {
if(pr == null) {
return;
}
for (Player i : pr) {
for(Player i : pr) {
boolean pcc = players.containsKey(i.getUniqueId());
if (!pcc) {
if(!pcc) {
players.put(i.getUniqueId(), new EnginePlayer(getEngine(), i));
}
}
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);
}
}
@ -65,14 +65,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;
}
@ -81,7 +81,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

@ -89,7 +89,7 @@ public class IrisEngineMantle implements EngineMantle {
private KList<IrisRegion> getAllRegions() {
KList<IrisRegion> r = new KList<>();
for (String i : getEngine().getDimension().getRegions()) {
for(String i : getEngine().getDimension().getRegions()) {
r.add(getEngine().getData().getRegionLoader().load(i));
}
@ -99,7 +99,7 @@ public class IrisEngineMantle implements EngineMantle {
private KList<IrisBiome> getAllBiomes() {
KList<IrisBiome> r = new KList<>();
for (IrisRegion i : getAllRegions()) {
for(IrisRegion i : getAllRegions()) {
r.addAll(i.getAllBiomes(getEngine()));
}
@ -107,13 +107,13 @@ public class IrisEngineMantle implements EngineMantle {
}
private void warn(String ob, BlockVector bv) {
if (Math.max(bv.getBlockX(), bv.getBlockZ()) > 128) {
if(Math.max(bv.getBlockX(), bv.getBlockZ()) > 128) {
Iris.warn("Object " + ob + " has a large size (" + bv + ") and may increase memory usage!");
}
}
private void warnScaled(String ob, BlockVector bv, double ms) {
if (Math.max(bv.getBlockX(), bv.getBlockZ()) > 128) {
if(Math.max(bv.getBlockX(), bv.getBlockZ()) > 128) {
Iris.warn("Object " + ob + " has a large size (" + bv + ") and may increase memory usage! (Object scaled up to " + Form.pc(ms, 2) + ")");
}
}
@ -130,46 +130,46 @@ public class IrisEngineMantle implements EngineMantle {
int x = xg.get();
int z = zg.get();
if (getEngine().getDimension().isUseMantle()) {
if(getEngine().getDimension().isUseMantle()) {
KList<IrisRegion> r = getAllRegions();
KList<IrisBiome> b = getAllBiomes();
for (IrisBiome i : b) {
for (IrisObjectPlacement j : i.getObjects()) {
if (j.getScale().canScaleBeyond()) {
for(IrisBiome i : b) {
for(IrisObjectPlacement j : i.getObjects()) {
if(j.getScale().canScaleBeyond()) {
scalars.put(j.getScale(), j.getPlace());
} else {
objects.addAll(j.getPlace());
}
}
for (IrisJigsawStructurePlacement j : i.getJigsawStructures()) {
for(IrisJigsawStructurePlacement j : i.getJigsawStructures()) {
jig = Math.max(jig, getData().getJigsawStructureLoader().load(j.getStructure()).getMaxDimension());
}
}
for (IrisRegion i : r) {
for (IrisObjectPlacement j : i.getObjects()) {
if (j.getScale().canScaleBeyond()) {
for(IrisRegion i : r) {
for(IrisObjectPlacement j : i.getObjects()) {
if(j.getScale().canScaleBeyond()) {
scalars.put(j.getScale(), j.getPlace());
} else {
objects.addAll(j.getPlace());
}
}
for (IrisJigsawStructurePlacement j : i.getJigsawStructures()) {
for(IrisJigsawStructurePlacement j : i.getJigsawStructures()) {
jig = Math.max(jig, getData().getJigsawStructureLoader().load(j.getStructure()).getMaxDimension());
}
}
for (IrisJigsawStructurePlacement j : getEngine().getDimension().getJigsawStructures()) {
for(IrisJigsawStructurePlacement j : getEngine().getDimension().getJigsawStructures()) {
jig = Math.max(jig, getData().getJigsawStructureLoader().load(j.getStructure()).getMaxDimension());
}
if (getEngine().getDimension().getStronghold() != null) {
if(getEngine().getDimension().getStronghold() != null) {
try {
jig = Math.max(jig, getData().getJigsawStructureLoader().load(getEngine().getDimension().getStronghold()).getMaxDimension());
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}
@ -178,13 +178,13 @@ public class IrisEngineMantle implements EngineMantle {
Iris.verbose("Checking sizes for " + Form.f(objects.size()) + " referenced objects.");
BurstExecutor e = getEngine().getTarget().getBurster().burst(objects.size());
KMap<String, BlockVector> sizeCache = new KMap<>();
for (String i : objects) {
for(String i : objects) {
e.queue(() -> {
try {
BlockVector bv = sizeCache.computeIfAbsent(i, (k) -> {
try {
return IrisObject.sampleSize(getData().getObjectLoader().findFile(i));
} catch (IOException ex) {
} catch(IOException ex) {
Iris.reportError(ex);
ex.printStackTrace();
}
@ -192,35 +192,35 @@ public class IrisEngineMantle implements EngineMantle {
return null;
});
if (bv == null) {
if(bv == null) {
throw new RuntimeException();
}
warn(i, bv);
synchronized (xg) {
synchronized(xg) {
xg.getAndSet(Math.max(bv.getBlockX(), xg.get()));
}
synchronized (zg) {
synchronized(zg) {
zg.getAndSet(Math.max(bv.getBlockZ(), zg.get()));
}
} catch (Throwable ed) {
} catch(Throwable ed) {
Iris.reportError(ed);
}
});
}
for (Map.Entry<IrisObjectScale, KList<String>> entry : scalars.entrySet()) {
for(Map.Entry<IrisObjectScale, KList<String>> entry : scalars.entrySet()) {
double ms = entry.getKey().getMaximumScale();
for (String j : entry.getValue()) {
for(String j : entry.getValue()) {
e.queue(() -> {
try {
BlockVector bv = sizeCache.computeIfAbsent(j, (k) -> {
try {
return IrisObject.sampleSize(getData().getObjectLoader().findFile(j));
} catch (IOException ioException) {
} catch(IOException ioException) {
Iris.reportError(ioException);
ioException.printStackTrace();
}
@ -228,20 +228,20 @@ public class IrisEngineMantle implements EngineMantle {
return null;
});
if (bv == null) {
if(bv == null) {
throw new RuntimeException();
}
warnScaled(j, bv, ms);
synchronized (xg) {
synchronized(xg) {
xg.getAndSet((int) Math.max(Math.ceil(bv.getBlockX() * ms), xg.get()));
}
synchronized (zg) {
synchronized(zg) {
zg.getAndSet((int) Math.max(Math.ceil(bv.getBlockZ() * ms), zg.get()));
}
} catch (Throwable ee) {
} catch(Throwable ee) {
Iris.reportError(ee);
}
@ -254,22 +254,22 @@ public class IrisEngineMantle implements EngineMantle {
x = xg.get();
z = zg.get();
for (IrisDepositGenerator i : getEngine().getDimension().getDeposits()) {
for(IrisDepositGenerator i : getEngine().getDimension().getDeposits()) {
int max = i.getMaxDimension();
x = Math.max(max, x);
z = Math.max(max, z);
}
for (IrisRegion v : r) {
for (IrisDepositGenerator i : v.getDeposits()) {
for(IrisRegion v : r) {
for(IrisDepositGenerator i : v.getDeposits()) {
int max = i.getMaxDimension();
x = Math.max(max, x);
z = Math.max(max, z);
}
}
for (IrisBiome v : b) {
for (IrisDepositGenerator i : v.getDeposits()) {
for(IrisBiome v : b) {
for(IrisDepositGenerator i : v.getDeposits()) {
int max = i.getMaxDimension();
x = Math.max(max, x);
z = Math.max(max, z);
@ -299,11 +299,11 @@ public class IrisEngineMantle implements EngineMantle {
m = Math.max(m, getDimension().getFluidBodies().getMaxRange(getData()));
for (IrisRegion i : getDimension().getAllRegions(getEngine())) {
for(IrisRegion i : getDimension().getAllRegions(getEngine())) {
m = Math.max(m, i.getFluidBodies().getMaxRange(getData()));
}
for (IrisBiome i : getDimension().getAllBiomes(getEngine())) {
for(IrisBiome i : getDimension().getAllBiomes(getEngine())) {
m = Math.max(m, i.getFluidBodies().getMaxRange(getData()));
}
@ -315,11 +315,11 @@ public class IrisEngineMantle implements EngineMantle {
m = Math.max(m, getDimension().getCarving().getMaxRange(getData()));
for (IrisRegion i : getDimension().getAllRegions(getEngine())) {
for(IrisRegion i : getDimension().getAllRegions(getEngine())) {
m = Math.max(m, i.getCarving().getMaxRange(getData()));
}
for (IrisBiome i : getDimension().getAllBiomes(getEngine())) {
for(IrisBiome i : getDimension().getAllBiomes(getEngine())) {
m = Math.max(m, i.getCarving().getMaxRange(getData()));
}

View File

@ -44,7 +44,7 @@ public class IrisExecutionEnvironment implements EngineExecutionEnvironment {
try {
this.manager.declareBean("Iris", api, api.getClass());
this.javaScriptEngine = (JavaScriptEngine) this.manager.loadScriptingEngine("javascript");
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
}
}
@ -62,7 +62,7 @@ public class IrisExecutionEnvironment implements EngineExecutionEnvironment {
Iris.debug("Execute Script (void) " + C.DARK_GREEN + script.getLoadKey());
try {
javaScriptEngine.exec("", 0, 0, script);
} catch (BSFException e) {
} catch(BSFException e) {
e.printStackTrace();
}
}
@ -71,7 +71,7 @@ public class IrisExecutionEnvironment implements EngineExecutionEnvironment {
Iris.debug("Execute Script (for result) " + C.DARK_GREEN + script);
try {
return javaScriptEngine.eval("", 0, 0, getEngine().getData().getScriptLoader().load(script));
} catch (BSFException e) {
} catch(BSFException e) {
e.printStackTrace();
}

View File

@ -118,47 +118,47 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
looper = new Looper() {
@Override
protected long loop() {
if (getEngine().isClosed() || getEngine().getCacheID() != id) {
if(getEngine().isClosed() || getEngine().getCacheID() != id) {
interrupt();
}
if (!getEngine().getWorld().hasRealWorld() && clw.flip()) {
if(!getEngine().getWorld().hasRealWorld() && clw.flip()) {
getEngine().getWorld().tryGetRealWorld();
}
if (!IrisSettings.get().getWorld().isMarkerEntitySpawningSystem() && !IrisSettings.get().getWorld().isAnbientEntitySpawningSystem()) {
if(!IrisSettings.get().getWorld().isMarkerEntitySpawningSystem() && !IrisSettings.get().getWorld().isAnbientEntitySpawningSystem()) {
return 3000;
}
if (getEngine().getWorld().hasRealWorld()) {
if (getEngine().getWorld().getPlayers().isEmpty()) {
if(getEngine().getWorld().hasRealWorld()) {
if(getEngine().getWorld().getPlayers().isEmpty()) {
return 5000;
}
if (chunkUpdater.flip()) {
if(chunkUpdater.flip()) {
updateChunks();
}
if (getDimension().isInfiniteEnergy()) {
if(getDimension().isInfiniteEnergy()) {
energy += 1000;
fixEnergy();
}
if (M.ms() < charge) {
if(M.ms() < charge) {
energy += 70;
fixEnergy();
}
if (cln.flip()) {
if(cln.flip()) {
engine.getEngineData().cleanup(getEngine());
}
if (precount != null) {
if(precount != null) {
entityCount = 0;
for (Entity i : precount) {
if (i instanceof LivingEntity) {
if (!i.isDead()) {
for(Entity i : precount) {
if(i instanceof LivingEntity) {
if(!i.isDead()) {
entityCount++;
}
}
@ -167,8 +167,8 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
precount = null;
}
if (energy < 650) {
if (ecl.flip()) {
if(energy < 650) {
if(ecl.flip()) {
energy *= 1 + (0.02 * M.clip((1D - getEntitySaturation()), 0D, 1D));
fixEnergy();
}
@ -186,34 +186,34 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
}
private void updateChunks() {
for (Player i : getEngine().getWorld().realWorld().getPlayers()) {
for(Player i : getEngine().getWorld().realWorld().getPlayers()) {
int r = 1;
Chunk c = i.getLocation().getChunk();
for (int x = -r; x <= r; x++) {
for (int z = -r; z <= r; z++) {
if (c.getWorld().isChunkLoaded(c.getX() + x, c.getZ() + z) && Chunks.isSafe(getEngine().getWorld().realWorld(), c.getX() + x, c.getZ() + z)) {
for(int x = -r; x <= r; x++) {
for(int z = -r; z <= r; z++) {
if(c.getWorld().isChunkLoaded(c.getX() + x, c.getZ() + z) && Chunks.isSafe(getEngine().getWorld().realWorld(), c.getX() + x, c.getZ() + z)) {
if (IrisSettings.get().getWorld().isPostLoadBlockUpdates()) {
if(IrisSettings.get().getWorld().isPostLoadBlockUpdates()) {
getEngine().updateChunk(c.getWorld().getChunkAt(c.getX() + x, c.getZ() + z));
}
if (IrisSettings.get().getWorld().isMarkerEntitySpawningSystem()) {
if(IrisSettings.get().getWorld().isMarkerEntitySpawningSystem()) {
Chunk cx = getEngine().getWorld().realWorld().getChunkAt(c.getX() + x, c.getZ() + z);
int finalX = c.getX() + x;
int finalZ = c.getZ() + z;
J.a(() -> getMantle().raiseFlag(finalX, finalZ, MantleFlag.INITIAL_SPAWNED_MARKER,
() -> {
J.a(() -> spawnIn(cx, true), RNG.r.i(5, 200));
getSpawnersFromMarkers(cx).forEach((block, spawners) -> {
if (spawners.isEmpty()) {
return;
}
() -> {
J.a(() -> spawnIn(cx, true), RNG.r.i(5, 200));
getSpawnersFromMarkers(cx).forEach((block, spawners) -> {
if(spawners.isEmpty()) {
return;
}
IrisSpawner s = new KList<>(spawners).getRandom();
spawn(block, s, true);
});
}));
IrisSpawner s = new KList<>(spawners).getRandom();
spawn(block, s, true);
});
}));
}
}
}
@ -222,42 +222,42 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
}
private boolean onAsyncTick() {
if (getEngine().isClosed()) {
if(getEngine().isClosed()) {
return false;
}
actuallySpawned = 0;
if (energy < 100) {
if(energy < 100) {
J.sleep(200);
return false;
}
if (!getEngine().getWorld().hasRealWorld()) {
if(!getEngine().getWorld().hasRealWorld()) {
Iris.debug("Can't spawn. No real world");
J.sleep(5000);
return false;
}
double epx = getEntitySaturation();
if (epx > IrisSettings.get().getWorld().getTargetSpawnEntitiesPerChunk()) {
if(epx > IrisSettings.get().getWorld().getTargetSpawnEntitiesPerChunk()) {
Iris.debug("Can't spawn. The entity per chunk ratio is at " + Form.pc(epx, 2) + " > 100% (total entities " + entityCount + ")");
J.sleep(5000);
return false;
}
if (cl.flip()) {
if(cl.flip()) {
try {
J.s(() -> precount = getEngine().getWorld().realWorld().getEntities());
} catch (Throwable e) {
} catch(Throwable e) {
close();
}
}
int chunkCooldownSeconds = 60;
for (Long i : chunkCooldowns.k()) {
if (M.ms() - chunkCooldowns.get(i) > TimeUnit.SECONDS.toMillis(chunkCooldownSeconds)) {
for(Long i : chunkCooldowns.k()) {
if(M.ms() - chunkCooldowns.get(i) > TimeUnit.SECONDS.toMillis(chunkCooldownSeconds)) {
chunkCooldowns.remove(i);
}
}
@ -265,15 +265,15 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
int spawnBuffer = RNG.r.i(2, 12);
Chunk[] cc = getEngine().getWorld().realWorld().getLoadedChunks();
while (spawnBuffer-- > 0) {
if (cc.length == 0) {
while(spawnBuffer-- > 0) {
if(cc.length == 0) {
Iris.debug("Can't spawn. No chunks!");
return false;
}
Chunk c = cc[RNG.r.nextInt(cc.length)];
if (!c.isLoaded() || !Chunks.isSafe(c.getWorld(), c.getX(), c.getZ())) {
if(!c.isLoaded() || !Chunks.isSafe(c.getWorld(), c.getX(), c.getZ())) {
continue;
}
@ -290,55 +290,55 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
}
private void spawnIn(Chunk c, boolean initial) {
if (getEngine().isClosed()) {
if(getEngine().isClosed()) {
return;
}
if (initial) {
if(initial) {
energy += 1.2;
}
//@builder
IrisBiome biome = IrisSettings.get().getWorld().isAnbientEntitySpawningSystem()
? getEngine().getSurfaceBiome(c) : null;
? getEngine().getSurfaceBiome(c) : null;
IrisEntitySpawn v = IrisSettings.get().getWorld().isAnbientEntitySpawningSystem()
? spawnRandomly(Stream.concat(getData().getSpawnerLoader()
.loadAll(getDimension().getEntitySpawners())
.shuffleCopy(RNG.r).stream()
.filter(this::canSpawn)
.filter((i) -> i.isValid(biome))
.flatMap((i) -> stream(i, initial)),
Stream.concat(getData().getSpawnerLoader()
.loadAll(getEngine().getRegion(c.getX() << 4, c.getZ() << 4).getEntitySpawners())
.shuffleCopy(RNG.r).stream().filter(this::canSpawn)
.flatMap((i) -> stream(i, initial)),
getData().getSpawnerLoader()
.loadAll(getEngine().getSurfaceBiome(c.getX() << 4, c.getZ() << 4).getEntitySpawners())
.shuffleCopy(RNG.r).stream().filter(this::canSpawn)
.flatMap((i) -> stream(i, initial))))
.collect(Collectors.toList()))
.popRandom(RNG.r) : null;
? spawnRandomly(Stream.concat(getData().getSpawnerLoader()
.loadAll(getDimension().getEntitySpawners())
.shuffleCopy(RNG.r).stream()
.filter(this::canSpawn)
.filter((i) -> i.isValid(biome))
.flatMap((i) -> stream(i, initial)),
Stream.concat(getData().getSpawnerLoader()
.loadAll(getEngine().getRegion(c.getX() << 4, c.getZ() << 4).getEntitySpawners())
.shuffleCopy(RNG.r).stream().filter(this::canSpawn)
.flatMap((i) -> stream(i, initial)),
getData().getSpawnerLoader()
.loadAll(getEngine().getSurfaceBiome(c.getX() << 4, c.getZ() << 4).getEntitySpawners())
.shuffleCopy(RNG.r).stream().filter(this::canSpawn)
.flatMap((i) -> stream(i, initial))))
.collect(Collectors.toList()))
.popRandom(RNG.r) : null;
//@done
if (IrisSettings.get().getWorld().isMarkerEntitySpawningSystem()) {
if(IrisSettings.get().getWorld().isMarkerEntitySpawningSystem()) {
getSpawnersFromMarkers(c).forEach((block, spawners) -> {
if (spawners.isEmpty()) {
if(spawners.isEmpty()) {
return;
}
IrisSpawner s = new KList<>(spawners).getRandom();
spawn(block, s, false);
J.a(() -> getMantle().raiseFlag(c.getX(), c.getZ(), MantleFlag.INITIAL_SPAWNED_MARKER,
() -> spawn(block, s, true)));
() -> spawn(block, s, true)));
});
}
if (v != null && v.getReferenceSpawner() != null) {
if(v != null && v.getReferenceSpawner() != null) {
int maxEntCount = v.getReferenceSpawner().getMaxEntitiesPerChunk();
for (Entity i : c.getEntities()) {
if (i instanceof LivingEntity) {
if (-maxEntCount <= 0) {
for(Entity i : c.getEntities()) {
if(i instanceof LivingEntity) {
if(-maxEntCount <= 0) {
return;
}
}
@ -346,7 +346,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
try {
spawn(c, v);
} catch (Throwable e) {
} catch(Throwable e) {
J.s(() -> spawn(c, v));
}
}
@ -355,33 +355,33 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
private void spawn(Chunk c, IrisEntitySpawn i) {
boolean allow = true;
if (!i.getReferenceSpawner().getMaximumRatePerChunk().isInfinite()) {
if(!i.getReferenceSpawner().getMaximumRatePerChunk().isInfinite()) {
allow = false;
IrisEngineChunkData cd = getEngine().getEngineData().getChunk(c.getX(), c.getZ());
IrisEngineSpawnerCooldown sc = null;
for (IrisEngineSpawnerCooldown j : cd.getCooldowns()) {
if (j.getSpawner().equals(i.getReferenceSpawner().getLoadKey())) {
for(IrisEngineSpawnerCooldown j : cd.getCooldowns()) {
if(j.getSpawner().equals(i.getReferenceSpawner().getLoadKey())) {
sc = j;
break;
}
}
if (sc == null) {
if(sc == null) {
sc = new IrisEngineSpawnerCooldown();
sc.setSpawner(i.getReferenceSpawner().getLoadKey());
cd.getCooldowns().add(sc);
}
if (sc.canSpawn(i.getReferenceSpawner().getMaximumRatePerChunk())) {
if(sc.canSpawn(i.getReferenceSpawner().getMaximumRatePerChunk())) {
sc.spawn(getEngine());
allow = true;
}
}
if (allow) {
if(allow) {
int s = i.spawn(getEngine(), c, RNG.r);
actuallySpawned += s;
if (s > 0) {
if(s > 0) {
getCooldown(i.getReferenceSpawner()).spawn(getEngine());
energy -= s * ((i.getEnergyMultiplier() * i.getReferenceSpawner().getEnergyMultiplier() * 1));
}
@ -391,33 +391,33 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
private void spawn(IrisPosition c, IrisEntitySpawn i) {
boolean allow = true;
if (!i.getReferenceSpawner().getMaximumRatePerChunk().isInfinite()) {
if(!i.getReferenceSpawner().getMaximumRatePerChunk().isInfinite()) {
allow = false;
IrisEngineChunkData cd = getEngine().getEngineData().getChunk(c.getX() >> 4, c.getZ() >> 4);
IrisEngineSpawnerCooldown sc = null;
for (IrisEngineSpawnerCooldown j : cd.getCooldowns()) {
if (j.getSpawner().equals(i.getReferenceSpawner().getLoadKey())) {
for(IrisEngineSpawnerCooldown j : cd.getCooldowns()) {
if(j.getSpawner().equals(i.getReferenceSpawner().getLoadKey())) {
sc = j;
break;
}
}
if (sc == null) {
if(sc == null) {
sc = new IrisEngineSpawnerCooldown();
sc.setSpawner(i.getReferenceSpawner().getLoadKey());
cd.getCooldowns().add(sc);
}
if (sc.canSpawn(i.getReferenceSpawner().getMaximumRatePerChunk())) {
if(sc.canSpawn(i.getReferenceSpawner().getMaximumRatePerChunk())) {
sc.spawn(getEngine());
allow = true;
}
}
if (allow) {
if(allow) {
int s = i.spawn(getEngine(), c, RNG.r);
actuallySpawned += s;
if (s > 0) {
if(s > 0) {
getCooldown(i.getReferenceSpawner()).spawn(getEngine());
energy -= s * ((i.getEnergyMultiplier() * i.getReferenceSpawner().getEnergyMultiplier() * 1));
}
@ -425,7 +425,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
}
private Stream<IrisEntitySpawn> stream(IrisSpawner s, boolean initial) {
for (IrisEntitySpawn i : initial ? s.getInitialSpawns() : s.getSpawns()) {
for(IrisEntitySpawn i : initial ? s.getInitialSpawns() : s.getSpawns()) {
i.setReferenceSpawner(s);
i.setReferenceMarker(s.getReferenceMarker());
}
@ -437,11 +437,11 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
KList<IrisEntitySpawn> rarityTypes = new KList<>();
int totalRarity = 0;
for (IrisEntitySpawn i : types) {
for(IrisEntitySpawn i : types) {
totalRarity += IRare.get(i);
}
for (IrisEntitySpawn i : types) {
for(IrisEntitySpawn i : types) {
rarityTypes.addMultiple(i, totalRarity / IRare.get(i));
}
@ -450,20 +450,20 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
public boolean canSpawn(IrisSpawner i) {
return i.isValid(getEngine().getWorld().realWorld())
&& getCooldown(i).canSpawn(i.getMaximumRate());
&& getCooldown(i).canSpawn(i.getMaximumRate());
}
private IrisEngineSpawnerCooldown getCooldown(IrisSpawner i) {
IrisEngineData ed = getEngine().getEngineData();
IrisEngineSpawnerCooldown cd = null;
for (IrisEngineSpawnerCooldown j : ed.getSpawnerCooldowns()) {
if (j.getSpawner().equals(i.getLoadKey())) {
for(IrisEngineSpawnerCooldown j : ed.getSpawnerCooldowns()) {
if(j.getSpawner().equals(i.getLoadKey())) {
cd = j;
}
}
if (cd == null) {
if(cd == null) {
cd = new IrisEngineSpawnerCooldown();
cd.setSpawner(i.getLoadKey());
cd.setLastSpawn(M.ms() - i.getMaximumRate().getInterval());
@ -485,7 +485,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
@Override
public void onChunkLoad(Chunk e, boolean generated) {
if (getEngine().isClosed()) {
if(getEngine().isClosed()) {
return;
}
@ -495,16 +495,16 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
}
private void spawn(IrisPosition block, IrisSpawner spawner, boolean initial) {
if (getEngine().isClosed()) {
if(getEngine().isClosed()) {
return;
}
if (spawner == null) {
if(spawner == null) {
return;
}
KList<IrisEntitySpawn> s = initial ? spawner.getInitialSpawns() : spawner.getSpawns();
if (s.isEmpty()) {
if(s.isEmpty()) {
return;
}
@ -525,7 +525,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
@Override
public void teleportAsync(PlayerTeleportEvent e) {
if (IrisSettings.get().getWorld().getAsyncTeleport().isEnabled()) {
if(IrisSettings.get().getWorld().getAsyncTeleport().isEnabled()) {
e.setCancelled(true);
warmupAreaAsync(e.getPlayer(), e.getTo(), () -> J.s(() -> {
ignoreTP.set(true);
@ -539,21 +539,21 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
J.a(() -> {
int viewDistance = IrisSettings.get().getWorld().getAsyncTeleport().getLoadViewDistance();
KList<Future<Chunk>> futures = new KList<>();
for (int i = -viewDistance; i <= viewDistance; i++) {
for (int j = -viewDistance; j <= viewDistance; j++) {
for(int i = -viewDistance; i <= viewDistance; i++) {
for(int j = -viewDistance; j <= viewDistance; j++) {
int finalJ = j;
int finalI = i;
if (to.getWorld().isChunkLoaded((to.getBlockX() >> 4) + i, (to.getBlockZ() >> 4) + j)) {
if(to.getWorld().isChunkLoaded((to.getBlockX() >> 4) + i, (to.getBlockZ() >> 4) + j)) {
futures.add(CompletableFuture.completedFuture(null));
continue;
}
futures.add(MultiBurst.burst.completeValue(()
-> PaperLib.getChunkAtAsync(to.getWorld(),
(to.getBlockX() >> 4) + finalI,
(to.getBlockZ() >> 4) + finalJ,
true, IrisSettings.get().getWorld().getAsyncTeleport().isUrgent()).get()));
-> PaperLib.getChunkAtAsync(to.getWorld(),
(to.getBlockX() >> 4) + finalI,
(to.getBlockZ() >> 4) + finalJ,
true, IrisSettings.get().getWorld().getAsyncTeleport().isUrgent()).get()));
}
}
@ -562,7 +562,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
public void execute(Future<Chunk> chunkFuture) {
try {
chunkFuture.get();
} catch (InterruptedException | ExecutionException e) {
} catch(InterruptedException | ExecutionException e) {
}
}
@ -579,45 +579,45 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
Map<IrisPosition, KSet<IrisSpawner>> p = new KMap<>();
Set<IrisPosition> b = new KSet<>();
getMantle().iterateChunk(c.getX(), c.getZ(), MatterMarker.class, (x, y, z, t) -> {
if (t.getTag().equals("cave_floor") || t.getTag().equals("cave_ceiling")) {
if(t.getTag().equals("cave_floor") || t.getTag().equals("cave_ceiling")) {
return;
}
IrisMarker mark = getData().getMarkerLoader().load(t.getTag());
IrisPosition pos = new IrisPosition((c.getX() << 4) + x, y, (c.getZ() << 4) + z);
if (mark.isEmptyAbove()) {
if(mark.isEmptyAbove()) {
AtomicBoolean remove = new AtomicBoolean(false);
try {
J.sfut(() -> {
if (c.getBlock(x, y + 1, z).getBlockData().getMaterial().isSolid() || c.getBlock(x, y + 2, z).getBlockData().getMaterial().isSolid()) {
if(c.getBlock(x, y + 1, z).getBlockData().getMaterial().isSolid() || c.getBlock(x, y + 2, z).getBlockData().getMaterial().isSolid()) {
remove.set(true);
}
}).get();
} catch (InterruptedException | ExecutionException e) {
} catch(InterruptedException | ExecutionException e) {
e.printStackTrace();
}
if (remove.get()) {
if(remove.get()) {
b.add(pos);
return;
}
}
for (String i : mark.getSpawners()) {
for(String i : mark.getSpawners()) {
IrisSpawner m = getData().getSpawnerLoader().load(i);
m.setReferenceMarker(mark);
// This is so fucking incorrect its a joke
//noinspection ConstantConditions
if (m != null) {
if(m != null) {
p.computeIfAbsent(pos, (k) -> new KSet<>()).add(m);
}
}
});
for (IrisPosition i : b) {
for(IrisPosition i : b) {
getEngine().getMantle().getMantle().remove(i.getX(), i.getY(), i.getZ(), MatterMarker.class);
}
@ -626,19 +626,19 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
@Override
public void onBlockBreak(BlockBreakEvent e) {
if (e.getBlock().getWorld().equals(getTarget().getWorld().realWorld())) {
if(e.getBlock().getWorld().equals(getTarget().getWorld().realWorld())) {
J.a(() -> {
MatterMarker marker = getMantle().get(e.getBlock().getX(), e.getBlock().getY(), e.getBlock().getZ(), MatterMarker.class);
if (marker != null) {
if (marker.getTag().equals("cave_floor") || marker.getTag().equals("cave_ceiling")) {
if(marker != null) {
if(marker.getTag().equals("cave_floor") || marker.getTag().equals("cave_ceiling")) {
return;
}
IrisMarker mark = getData().getMarkerLoader().load(marker.getTag());
if (mark == null || mark.isRemoveOnChange()) {
if(mark == null || mark.isRemoveOnChange()) {
getMantle().remove(e.getBlock().getX(), e.getBlock().getY(), e.getBlock().getZ(), MatterMarker.class);
}
}
@ -648,25 +648,25 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
Runnable drop = () -> J.s(() -> d.forEach((i) -> e.getBlock().getWorld().dropItemNaturally(e.getBlock().getLocation().clone().add(0.5, 0.5, 0.5), i)));
IrisBiome b = getEngine().getBiome(e.getBlock().getLocation());
if (dropItems(e, d, drop, b.getBlockDrops(), b)) {
if(dropItems(e, d, drop, b.getBlockDrops(), b)) {
return;
}
IrisRegion r = getEngine().getRegion(e.getBlock().getLocation());
if (dropItems(e, d, drop, r.getBlockDrops(), b)) {
if(dropItems(e, d, drop, r.getBlockDrops(), b)) {
return;
}
for (IrisBlockDrops i : getEngine().getDimension().getBlockDrops()) {
if (i.shouldDropFor(e.getBlock().getBlockData(), getData())) {
if (i.isReplaceVanillaDrops()) {
for(IrisBlockDrops i : getEngine().getDimension().getBlockDrops()) {
if(i.shouldDropFor(e.getBlock().getBlockData(), getData())) {
if(i.isReplaceVanillaDrops()) {
e.setDropItems(false);
}
i.fillDrops(false, d);
if (i.isSkipParents()) {
if(i.isSkipParents()) {
drop.run();
return;
}
@ -676,15 +676,15 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
}
private boolean dropItems(BlockBreakEvent e, KList<ItemStack> d, Runnable drop, KList<IrisBlockDrops> blockDrops, IrisBiome b) {
for (IrisBlockDrops i : blockDrops) {
if (i.shouldDropFor(e.getBlock().getBlockData(), getData())) {
if (i.isReplaceVanillaDrops()) {
for(IrisBlockDrops i : blockDrops) {
if(i.shouldDropFor(e.getBlock().getBlockData(), getData())) {
if(i.isReplaceVanillaDrops()) {
e.setDropItems(false);
}
i.fillDrops(false, d);
if (i.isSkipParents()) {
if(i.isSkipParents()) {
drop.run();
return true;
}
@ -711,7 +711,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
@Override
public double getEntitySaturation() {
if (!getEngine().getWorld().hasRealWorld()) {
if(!getEngine().getWorld().hasRealWorld()) {
return 1;
}

View File

@ -30,12 +30,14 @@ import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.util.hunk.view.BiomeGridHunkView;
import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.parallel.BurstExecutor;
import com.volmit.iris.util.scheduling.ChronoLatch;
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
import org.bukkit.block.Biome;
import org.bukkit.generator.ChunkGenerator;
public class IrisBiomeActuator extends EngineAssignedActuator<Biome> {
private final RNG rng;
private final ChronoLatch cl = new ChronoLatch(5000);
public IrisBiomeActuator(Engine engine) {
super(engine, "Biome");
@ -45,16 +47,16 @@ public class IrisBiomeActuator extends EngineAssignedActuator<Biome> {
@BlockCoordinates
private boolean injectBiome(Hunk<Biome> h, int x, int y, int z, Object bb) {
try {
if (h instanceof BiomeGridHunkView hh) {
if(h instanceof BiomeGridHunkView hh) {
ChunkGenerator.BiomeGrid g = hh.getChunk();
if (g instanceof TerrainChunk) {
if(g instanceof TerrainChunk) {
((TerrainChunk) g).getBiomeBaseInjector().setBiome(x, y, z, bb);
} else {
hh.forceBiomeBaseInto(x, y, z, bb);
}
return true;
}
} catch (Throwable e) {
} catch(Throwable e) {
}
@ -67,36 +69,50 @@ public class IrisBiomeActuator extends EngineAssignedActuator<Biome> {
PrecisionStopwatch p = PrecisionStopwatch.start();
BurstExecutor burst = burst().burst(multicore);
for (int xf = 0; xf < h.getWidth(); xf++) {
for(int xf = 0; xf < h.getWidth(); xf++) {
int finalXf = xf;
burst.queue(() -> {
IrisBiome ib;
for (int zf = 0; zf < h.getDepth(); zf++) {
for(int zf = 0; zf < h.getDepth(); zf++) {
ib = getComplex().getTrueBiomeStream().get(finalXf + x, zf + z);
int maxHeight = (int) (getComplex().getFluidHeight() + ib.getMaxWithObjectHeight(getData()));
if (ib.isCustom()) {
if(ib.isCustom()) {
try {
IrisBiomeCustom custom = ib.getCustomBiome(rng, x, 0, z);
Object biomeBase = INMS.get().getCustomBiomeBaseFor(getDimension().getLoadKey() + ":" + custom.getId());
//
// int m = hits.size();
// String str = ib.getLoadKey() + ":custom:" + custom.getId();
// hits.add(str);
//
// if(m != hits.size())
// {
// Iris.info("Added " + str);
// }
if (biomeBase == null || !injectBiome(h, x, 0, z, biomeBase)) {
if(biomeBase == null || !injectBiome(h, x, 0, z, biomeBase)) {
throw new RuntimeException("Cant inject biome!");
}
for (int i = 0; i < maxHeight; i++) {
for(int i = 0; i < maxHeight; i++) {
injectBiome(h, finalXf, i, zf, biomeBase);
}
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
Biome v = ib.getSkyBiome(rng, x, 0, z);
for (int i = 0; i < maxHeight; i++) {
for(int i = 0; i < maxHeight; i++) {
h.set(finalXf, i, zf, v);
}
}
} else {
Biome v = ib.getSkyBiome(rng, x, 0, z);
for (int i = 0; i < maxHeight; i++) {
h.set(finalXf, i, zf, v);
if(v != null) {
for(int i = 0; i < maxHeight; i++) {
h.set(finalXf, i, zf, v);
}
} else if(cl.flip()) {
Iris.error("No biome provided for " + ib.getLoadKey());
}
}
}

View File

@ -67,21 +67,21 @@ public class IrisDecorantActuator extends EngineAssignedActuator<BlockData> {
@BlockCoordinates
@Override
public void onActuate(int x, int z, Hunk<BlockData> output, boolean multicore) {
if (!getEngine().getDimension().isDecorate()) {
if(!getEngine().getDimension().isDecorate()) {
return;
}
PrecisionStopwatch p = PrecisionStopwatch.start();
BurstExecutor burst = burst().burst(multicore);
for (int i = 0; i < output.getWidth(); i++) {
for(int i = 0; i < output.getWidth(); i++) {
int finalI = i;
burst.queue(() -> {
int height;
int realX = Math.round(x + finalI);
int realZ;
IrisBiome biome, cave;
for (int j = 0; j < output.getDepth(); j++) {
for(int j = 0; j < output.getDepth(); j++) {
boolean solid;
int emptyFor = 0;
int lastSolid = 0;
@ -90,36 +90,36 @@ 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()) {
getSeaSurfaceDecorator().decorate(finalI, j,
realX, Math.round(+finalI + 1), Math.round(x + finalI - 1),
realZ, Math.round(z + j + 1), Math.round(z + j - 1),
output, biome, getDimension().getFluidHeight(), getEngine().getHeight());
realX, Math.round(+finalI + 1), Math.round(x + finalI - 1),
realZ, Math.round(z + j + 1), Math.round(z + j - 1),
output, biome, getDimension().getFluidHeight(), getEngine().getHeight());
getSeaFloorDecorator().decorate(finalI, j,
realX, realZ, output, biome, height + 1,
getDimension().getFluidHeight() + 1);
realX, realZ, output, biome, height + 1,
getDimension().getFluidHeight() + 1);
}
if (height == getDimension().getFluidHeight()) {
if(height == getDimension().getFluidHeight()) {
getShoreLineDecorator().decorate(finalI, j,
realX, Math.round(x + finalI + 1), Math.round(x + finalI - 1),
realZ, Math.round(z + j + 1), Math.round(z + j - 1),
output, biome, height, getEngine().getHeight());
realX, Math.round(x + finalI + 1), Math.round(x + finalI - 1),
realZ, Math.round(z + j + 1), Math.round(z + j - 1),
output, biome, height, getEngine().getHeight());
}
getSurfaceDecorator().decorate(finalI, 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(finalI, k, j));
if (solid) {
if (emptyFor > 0) {
if(solid) {
if(emptyFor > 0) {
getSurfaceDecorator().decorate(finalI, j, realX, realZ, output, cave, k, lastSolid);
getCeilingDecorator().decorate(finalI, j, realX, realZ, output, cave, lastSolid - 1, emptyFor);
emptyFor = 0;

View File

@ -21,7 +21,6 @@ package com.volmit.iris.engine.actuator;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.EngineAssignedActuator;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.object.IrisRegion;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.documentation.BlockCoordinates;
@ -54,7 +53,7 @@ public class IrisTerrainNormalActuator extends EngineAssignedActuator<BlockData>
PrecisionStopwatch p = PrecisionStopwatch.start();
BurstExecutor e = burst().burst(multicore);
for (int xf = 0; xf < h.getWidth(); xf++) {
for(int xf = 0; xf < h.getWidth(); xf++) {
int finalXf = xf;
e.queue(() -> terrainSliver(x, z, finalXf, h));
}
@ -71,10 +70,14 @@ public class IrisTerrainNormalActuator extends EngineAssignedActuator<BlockData>
/**
* This is calling 1/16th of a chunk x/z slice. It is a plane from sky to bedrock 1 thick in the x direction.
*
* @param x the chunk x in blocks
* @param z the chunk z in blocks
* @param xf the current x slice
* @param h the blockdata
* @param x
* the chunk x in blocks
* @param z
* the chunk z in blocks
* @param xf
* the current x slice
* @param h
* the blockdata
*/
@BlockCoordinates
public void terrainSliver(int x, int z, int xf, Hunk<BlockData> h) {
@ -83,7 +86,7 @@ public class IrisTerrainNormalActuator extends EngineAssignedActuator<BlockData>
IrisBiome biome;
IrisRegion region;
for (zf = 0; zf < h.getDepth(); zf++) {
for(zf = 0; zf < h.getDepth(); zf++) {
realX = xf + x;
realZ = zf + z;
biome = getComplex().getTrueBiomeStream().get(realX, realZ);
@ -92,7 +95,7 @@ public class IrisTerrainNormalActuator extends EngineAssignedActuator<BlockData>
hf = Math.round(Math.max(Math.min(h.getHeight(), getDimension().getFluidHeight()), he));
// this 0 is where we are going to need to modify the world base height, the Zero, not this instance...
if (hf < 0) {
if(hf < 0) {
continue;
}
@ -101,28 +104,28 @@ public class IrisTerrainNormalActuator extends EngineAssignedActuator<BlockData>
int depth, fdepth;
// Fluid height and lower
for (int i = hf; i >= 0; i--) {
if (i >= h.getHeight()) { // h.getheight is terrain height
for(int i = hf; i >= 0; i--) {
if(i >= h.getHeight()) { // h.getheight is terrain height
continue;
}
// will need to change
if (i == 0) {
if (getDimension().isBedrock()) {
if(i == 0) {
if(getDimension().isBedrock()) {
h.set(xf, i, zf, BEDROCK);
lastBedrock = i;
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;
}
@ -132,18 +135,18 @@ public class IrisTerrainNormalActuator extends EngineAssignedActuator<BlockData>
}
// top of surface
if (i <= he) {
if(i <= he) {
depth = he - i;
if (blocks == null) {
if(blocks == null) {
blocks = biome.generateLayers(getDimension(), realX, realZ, rng,
he,
he,
getData(),
getComplex());
he,
he,
getData(),
getComplex());
}
if (blocks.hasIndex(depth)) {
if(blocks.hasIndex(depth)) {
h.set(xf, i, zf, blocks.get(depth));
continue;
}
@ -152,7 +155,7 @@ public class IrisTerrainNormalActuator extends EngineAssignedActuator<BlockData>
ore = ore == null ? region.generateOres(realX, i, realZ, rng, getData()) : ore;
ore = ore == null ? getDimension().generateOres(realX, i, realZ, rng, getData()) : ore;
if (ore != null) {
if(ore != null) {
h.set(xf, i, zf, ore);
} else {
h.set(xf, i, zf, getComplex().getRockStream().get(realX, realZ));

View File

@ -46,7 +46,7 @@ public class AtomicCache<T> {
public void reset() {
t.set(null);
if (nullSupport) {
if(nullSupport) {
set.set(false);
}
}
@ -55,7 +55,7 @@ public class AtomicCache<T> {
return aquire(() -> {
try {
return t.get();
} catch (Throwable e) {
} catch(Throwable e) {
return null;
}
});
@ -65,7 +65,7 @@ public class AtomicCache<T> {
return aquire(() -> {
try {
return t.get();
} catch (Throwable e) {
} catch(Throwable e) {
e.printStackTrace();
return null;
}
@ -73,18 +73,18 @@ public class AtomicCache<T> {
}
public T aquire(Supplier<T> t) {
if (this.t.get() != null) {
if(this.t.get() != null) {
return this.t.get();
} else if (nullSupport && set.get()) {
} else if(nullSupport && set.get()) {
return null;
}
lock.lock();
if (this.t.get() != null) {
if(this.t.get() != null) {
lock.unlock();
return this.t.get();
} else if (nullSupport && set.get()) {
} else if(nullSupport && set.get()) {
lock.unlock();
return null;
}
@ -92,10 +92,10 @@ public class AtomicCache<T> {
try {
this.t.set(t.get());
if (nullSupport) {
if(nullSupport) {
set.set(true);
}
} catch (Throwable e) {
} catch(Throwable e) {
Iris.error("Atomic cache failure!");
e.printStackTrace();
}

View File

@ -46,7 +46,7 @@ public interface Cache<V> {
idx -= (z * w * h);
final int y = idx / w;
final int x = idx % w;
return new int[]{x, y, z};
return new int[] {x, y, z};
}
int getId();

View File

@ -56,7 +56,7 @@ public class LinkedTerrainChunk implements TerrainChunk {
@Override
public BiomeBaseInjector getBiomeBaseInjector() {
if (unsafe) {
if(unsafe) {
return (a, b, c, d) -> {
};
}
@ -67,7 +67,7 @@ public class LinkedTerrainChunk implements TerrainChunk {
@Override
public Biome getBiome(int x, int z) {
if (storage != null) {
if(storage != null) {
return storage.getBiome(x, z);
}
@ -77,7 +77,7 @@ public class LinkedTerrainChunk implements TerrainChunk {
@Override
public Biome getBiome(int x, int y, int z) {
if (storage != null) {
if(storage != null) {
return storage.getBiome(x, y, z);
}
@ -86,7 +86,7 @@ public class LinkedTerrainChunk implements TerrainChunk {
@Override
public void setBiome(int x, int z, Biome bio) {
if (storage != null) {
if(storage != null) {
storage.setBiome(x, z, bio);
return;
}
@ -100,7 +100,7 @@ public class LinkedTerrainChunk implements TerrainChunk {
@Override
public void setBiome(int x, int y, int z, Biome bio) {
if (storage != null) {
if(storage != null) {
storage.setBiome(x, y, z, bio);
return;
}
@ -190,7 +190,7 @@ public class LinkedTerrainChunk implements TerrainChunk {
@Override
public void inject(BiomeGrid biome) {
if (biome3D != null) {
if(biome3D != null) {
biome3D.inject(biome);
}
}

View File

@ -81,11 +81,11 @@ public class MCATerrainChunk implements TerrainChunk {
int xx = (x + ox) & 15;
int zz = (z + oz) & 15;
if (y > 255 || y < 0) {
if(y > getMaxHeight() || y < getMinHeight()) {
return;
}
if (blockData == null) {
if(blockData == null) {
Iris.error("NULL BD");
}
@ -94,12 +94,12 @@ public class MCATerrainChunk implements TerrainChunk {
@Override
public org.bukkit.block.data.BlockData getBlockData(int x, int y, int z) {
if (y > getMaxHeight()) {
if(y > getMaxHeight()) {
y = getMaxHeight();
}
if (y < 0) {
y = 0;
if(y < getMinHeight()) {
y = getMinHeight();
}
return NBTWorld.getBlockData(mcaChunk.getBlockStateAt((x + ox) & 15, y, (z + oz) & 15));

View File

@ -49,8 +49,10 @@ public interface TerrainChunk extends BiomeGrid, ChunkData {
/**
* Get biome at x, z within chunk being generated
*
* @param x - 0-15
* @param z - 0-15
* @param x
* - 0-15
* @param z
* - 0-15
* @return Biome value
* @deprecated biomes are now 3-dimensional
*/
@ -61,9 +63,12 @@ public interface TerrainChunk extends BiomeGrid, ChunkData {
/**
* Get biome at x, z within chunk being generated
*
* @param x - 0-15
* @param y - 0-255
* @param z - 0-15
* @param x
* - 0-15
* @param y
* - 0-255
* @param z
* - 0-15
* @return Biome value
*/
Biome getBiome(int x, int y, int z);
@ -71,9 +76,12 @@ public interface TerrainChunk extends BiomeGrid, ChunkData {
/**
* Set biome at x, z within chunk being generated
*
* @param x - 0-15
* @param z - 0-15
* @param bio - Biome value
* @param x
* - 0-15
* @param z
* - 0-15
* @param bio
* - Biome value
* @deprecated biomes are now 3-dimensional
*/
@Deprecated
@ -82,10 +90,14 @@ public interface TerrainChunk extends BiomeGrid, ChunkData {
/**
* Set biome at x, z within chunk being generated
*
* @param x - 0-15
* @param y - 0-255
* @param z - 0-15
* @param bio - Biome value
* @param x
* - 0-15
* @param y
* - 0-255
* @param z
* - 0-15
* @param bio
* - Biome value
*/
void setBiome(int x, int y, int z, Biome bio);
@ -103,11 +115,15 @@ public interface TerrainChunk extends BiomeGrid, ChunkData {
* <p>
* Setting blocks outside the chunk's bounds does nothing.
*
* @param x the x location in the chunk from 0-15 inclusive
* @param y the y location in the chunk from 0 (inclusive) - maxHeight
* (exclusive)
* @param z the z location in the chunk from 0-15 inclusive
* @param blockData the type to set the block to
* @param x
* the x location in the chunk from 0-15 inclusive
* @param y
* the y location in the chunk from 0 (inclusive) - maxHeight
* (exclusive)
* @param z
* the z location in the chunk from 0-15 inclusive
* @param blockData
* the type to set the block to
*/
void setBlock(int x, int y, int z, BlockData blockData);
@ -116,10 +132,13 @@ public interface TerrainChunk extends BiomeGrid, ChunkData {
* <p>
* Getting blocks outside the chunk's bounds returns air.
*
* @param x the x location in the chunk from 0-15 inclusive
* @param y the y location in the chunk from 0 (inclusive) - maxHeight
* (exclusive)
* @param z the z location in the chunk from 0-15 inclusive
* @param x
* the x location in the chunk from 0-15 inclusive
* @param y
* the y location in the chunk from 0 (inclusive) - maxHeight
* (exclusive)
* @param z
* the z location in the chunk from 0-15 inclusive
* @return the data of the block or the BlockData for air if x, y or z are
* outside the chunk's bounds
*/

View File

@ -31,7 +31,7 @@ public interface Deserializer<T> {
T fromStream(InputStream stream) throws IOException;
default T fromFile(File file) throws IOException {
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
try(BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
return fromStream(bis);
}
}
@ -42,8 +42,8 @@ public interface Deserializer<T> {
}
default T fromResource(Class<?> clazz, String path) throws IOException {
try (InputStream stream = clazz.getClassLoader().getResourceAsStream(path)) {
if (stream == null) {
try(InputStream stream = clazz.getClassLoader().getResourceAsStream(path)) {
if(stream == null) {
throw new IOException("resource \"" + path + "\" not found");
}
return fromStream(stream);
@ -51,7 +51,7 @@ public interface Deserializer<T> {
}
default T fromURL(URL url) throws IOException {
try (InputStream stream = url.openStream()) {
try(InputStream stream = url.openStream()) {
return fromStream(stream);
}
}

View File

@ -21,9 +21,9 @@ package com.volmit.iris.engine.data.io;
public interface MaxDepthIO {
default int decrementMaxDepth(int maxDepth) {
if (maxDepth < 0) {
if(maxDepth < 0) {
throw new IllegalArgumentException("negative maximum depth is not allowed");
} else if (maxDepth == 0) {
} else if(maxDepth == 0) {
throw new MaxDepthReachedException("reached maximum depth of NBT structure");
}
return --maxDepth;

View File

@ -30,7 +30,7 @@ public interface Serializer<T> {
void toStream(T object, OutputStream out) throws IOException;
default void toFile(T object, File file) throws IOException {
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file))) {
try(BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file))) {
toStream(object, bos);
}
}

View File

@ -36,14 +36,14 @@ public interface StringDeserializer<T> extends Deserializer<T> {
@Override
default T fromStream(InputStream stream) throws IOException {
try (Reader reader = new InputStreamReader(stream)) {
try(Reader reader = new InputStreamReader(stream)) {
return fromReader(reader);
}
}
@Override
default T fromFile(File file) throws IOException {
try (Reader reader = new FileReader(file)) {
try(Reader reader = new FileReader(file)) {
return fromReader(reader);
}
}

View File

@ -46,7 +46,7 @@ public interface StringSerializer<T> extends Serializer<T> {
@Override
default void toFile(T object, File file) throws IOException {
try (Writer writer = new FileWriter(file)) {
try(Writer writer = new FileWriter(file)) {
toWriter(object, writer);
}
}

View File

@ -40,49 +40,49 @@ 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, height, realZ, getData()));
}
} else {
int stack = decorator.getHeight(getRng().nextParallelRNG(Cache.key(realX, realZ)), realX, realZ, getData());
if (decorator.isScaleStack()) {
if(decorator.isScaleStack()) {
stack = Math.min((int) Math.ceil((double) max * ((double) stack / 100)), decorator.getAbsoluteMaxStack());
} else {
stack = Math.min(max, stack);
}
if (stack == 1) {
if(stack == 1) {
data.set(x, height, z, decorator.getBlockDataForTop(biome, getRng(), realX, height, realZ, getData()));
return;
}
for (int i = 0; i < stack; i++) {
for(int i = 0; i < stack; i++) {
int h = height - i;
if (h < getEngine().getMinHeight()) {
if(h < getEngine().getMinHeight()) {
continue;
}
double threshold = (((double) i) / (double) (stack - 1));
BlockData bd = threshold >= decorator.getTopThreshold() ?
decorator.getBlockDataForTop(biome, getRng(), realX, h, realZ, getData()) :
decorator.getBlockData100(biome, getRng(), realX, h, realZ, getData());
decorator.getBlockDataForTop(biome, getRng(), realX, h, realZ, getData()) :
decorator.getBlockData100(biome, getRng(), realX, h, realZ, getData());
if (bd instanceof PointedDripstone) {
if(bd instanceof PointedDripstone) {
PointedDripstone.Thickness th = PointedDripstone.Thickness.BASE;
if (stack == 2) {
if(stack == 2) {
th = PointedDripstone.Thickness.FRUSTUM;
if (i == stack - 1) {
if(i == stack - 1) {
th = PointedDripstone.Thickness.TIP;
}
} else {
if (i == stack - 1) {
if(i == stack - 1) {
th = PointedDripstone.Thickness.TIP;
} else if (i == stack - 2) {
} else if(i == stack - 2) {
th = PointedDripstone.Thickness.FRUSTUM;
}
}

View File

@ -48,18 +48,18 @@ public abstract class IrisEngineDecorator extends EngineAssignedComponent implem
KList<IrisDecorator> v = new KList<>();
RNG rng = new RNG(Cache.key((int) realX, (int) realZ));
for (IrisDecorator i : biome.getDecorators()) {
for(IrisDecorator i : biome.getDecorators()) {
try {
if (i.getPartOf().equals(part) && i.getBlockData(biome, this.rng, realX, realZ, getData()) != null) {
if(i.getPartOf().equals(part) && i.getBlockData(biome, this.rng, realX, realZ, getData()) != null) {
v.add(i);
}
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(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

@ -37,33 +37,33 @@ public class IrisSeaFloorDecorator 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, height, realZ, getData()));
}
} else {
int stack = decorator.getHeight(getRng().nextParallelRNG(Cache.key(realX, realZ)), realX, realZ, getData());
if (decorator.isScaleStack()) {
if(decorator.isScaleStack()) {
int maxStack = max - height;
stack = (int) Math.ceil((double) maxStack * ((double) stack / 100));
} else stack = Math.min(stack, max - height);
if (stack == 1) {
if(stack == 1) {
data.set(x, height, z, decorator.getBlockDataForTop(biome, getRng(), realX, height, realZ, getData()));
return;
}
for (int i = 0; i < stack; i++) {
for(int i = 0; i < stack; i++) {
int h = height + i;
if (h > max || h > getEngine().getHeight()) {
if(h > max || h > getEngine().getHeight()) {
continue;
}
double threshold = ((double) i) / (stack - 1);
data.set(x, h, z, threshold >= decorator.getTopThreshold() ?
decorator.getBlockDataForTop(biome, getRng(), realX, h, realZ, getData()) :
decorator.getBlockData100(biome, getRng(), realX, h, realZ, getData()));
decorator.getBlockDataForTop(biome, getRng(), realX, h, realZ, getData()) :
decorator.getBlockData100(biome, getRng(), realX, h, realZ, getData()));
}
}
}

View File

@ -37,33 +37,33 @@ 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()) {
if(decorator != null) {
if(!decorator.isStacking()) {
if(height >= 0 || height < getEngine().getHeight()) {
data.set(x, height + 1, z, decorator.getBlockData100(biome, getRng(), realX, height, realZ, getData()));
}
} else {
int stack = decorator.getHeight(getRng().nextParallelRNG(Cache.key(realX, realZ)), realX, realZ, getData());
if (decorator.isScaleStack()) {
if(decorator.isScaleStack()) {
int maxStack = max - height;
stack = (int) Math.ceil((double) maxStack * ((double) stack / 100));
}
if (stack == 1) {
if(stack == 1) {
data.set(x, height, z, decorator.getBlockDataForTop(biome, getRng(), realX, height, realZ, getData()));
return;
}
for (int i = 0; i < stack; i++) {
for(int i = 0; i < stack; i++) {
int h = height + i;
if (h >= max || h >= getEngine().getHeight()) {
if(h >= max || h >= getEngine().getHeight()) {
continue;
}
double threshold = ((double) i) / (stack - 1);
data.set(x, h + 1, z, threshold >= decorator.getTopThreshold() ?
decorator.getBlockDataForTop(biome, getRng().nextParallelRNG(i), realX, h, realZ, getData()) :
decorator.getBlockData100(biome, getRng().nextParallelRNG(i), realX, h, realZ, getData()));
decorator.getBlockDataForTop(biome, getRng().nextParallelRNG(i), realX, h, realZ, getData()) :
decorator.getBlockData100(biome, getRng().nextParallelRNG(i), realX, h, realZ, getData()));
}
}
}

View File

@ -36,35 +36,35 @@ 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 (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()
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()) {
if(decorator != null) {
if(!decorator.isStacking()) {
data.set(x, height + 1, z, decorator.getBlockData100(biome, getRng(), realX, height, realZ, getData()));
} else {
int stack = decorator.getHeight(getRng().nextParallelRNG(Cache.key(realX, realZ)), realX, realZ, getData());
if (decorator.isScaleStack()) {
if(decorator.isScaleStack()) {
int maxStack = max - height;
stack = (int) Math.ceil((double) maxStack * ((double) stack / 100));
} else stack = Math.min(max - height, stack);
if (stack == 1) {
if(stack == 1) {
data.set(x, height, z, decorator.getBlockDataForTop(biome, getRng(), realX, height, realZ, getData()));
return;
}
for (int i = 0; i < stack; i++) {
for(int i = 0; i < stack; i++) {
int h = height + i;
double threshold = ((double) i) / (stack - 1);
data.set(x, h + 1, z, threshold >= decorator.getTopThreshold() ?
decorator.getBlockDataForTop(biome, getRng(), realX, h, realZ, getData()) :
decorator.getBlockData100(biome, getRng(), realX, h, realZ, getData()));
decorator.getBlockDataForTop(biome, getRng(), realX, h, realZ, getData()) :
decorator.getBlockData100(biome, getRng(), realX, h, realZ, getData()));
}
}
}

View File

@ -41,7 +41,7 @@ public class IrisSurfaceDecorator extends IrisEngineDecorator {
@BlockCoordinates
@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;
}
@ -50,22 +50,22 @@ 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, height, 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) {
} catch(Throwable e) {
Iris.reportError(e);
}
bd = bd.clone();
@ -75,55 +75,55 @@ public class IrisSurfaceDecorator extends IrisEngineDecorator {
data.set(x, height + 1, z, bd);
} else {
if (height < getDimension().getFluidHeight()) {
if(height < getDimension().getFluidHeight()) {
max = getDimension().getFluidHeight();
}
int stack = decorator.getHeight(getRng().nextParallelRNG(Cache.key(realX, realZ)), realX, realZ, getData());
if (decorator.isScaleStack()) {
if(decorator.isScaleStack()) {
stack = Math.min((int) Math.ceil((double) max * ((double) stack / 100)), decorator.getAbsoluteMaxStack());
} else {
stack = Math.min(max, stack);
}
if (stack == 1) {
if(stack == 1) {
data.set(x, height, z, decorator.getBlockDataForTop(biome, getRng(), realX, height, realZ, getData()));
return;
}
for (int i = 0; i < stack; i++) {
for(int i = 0; i < stack; i++) {
int h = height + i;
double threshold = ((double) i) / (stack - 1);
bd = threshold >= decorator.getTopThreshold() ?
decorator.getBlockDataForTop(biome, getRng(), realX, h, realZ, getData()) :
decorator.getBlockData100(biome, getRng(), realX, h, realZ, getData());
decorator.getBlockDataForTop(biome, getRng(), realX, h, realZ, getData()) :
decorator.getBlockData100(biome, getRng(), realX, h, realZ, getData());
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;
}
if (bd instanceof PointedDripstone) {
if(bd instanceof PointedDripstone) {
PointedDripstone.Thickness th = PointedDripstone.Thickness.BASE;
if (stack == 2) {
if(stack == 2) {
th = PointedDripstone.Thickness.FRUSTUM;
if (i == stack - 1) {
if(i == stack - 1) {
th = PointedDripstone.Thickness.TIP;
}
} else {
if (i == stack - 1) {
if(i == stack - 1) {
th = PointedDripstone.Thickness.TIP;
} else if (i == stack - 2) {
} else if(i == stack - 2) {
th = PointedDripstone.Thickness.FRUSTUM;
}
}

View File

@ -78,7 +78,6 @@ import org.bukkit.block.BlockFace;
import org.bukkit.block.data.BlockData;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
@ -145,7 +144,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
@BlockCoordinates
default void generate(int x, int z, TerrainChunk tc, boolean multicore) throws WrongEngineBroException {
generate(x, z, Hunk.view((ChunkGenerator.ChunkData) tc), Hunk.view((ChunkGenerator.BiomeGrid) tc), multicore);
generate(x, z, Hunk.view(tc), Hunk.view(tc, tc.getMinHeight(), tc.getMaxHeight()), multicore);
}
@BlockCoordinates
@ -210,10 +209,10 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
default IrisBiome getCaveOrMantleBiome(int x, int y, int z) {
MatterCavern m = getMantle().getMantle().get(x, y, z, MatterCavern.class);
if (m != null && m.getCustomBiome() != null && !m.getCustomBiome().isEmpty()) {
if(m != null && m.getCustomBiome() != null && !m.getCustomBiome().isEmpty()) {
IrisBiome biome = getData().getBiomeLoader().load(m.getCustomBiome());
if (biome != null) {
if(biome != null) {
return biome;
}
}
@ -250,11 +249,11 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
@BlockCoordinates
@Override
default void catchBlockUpdates(int x, int y, int z, BlockData data) {
if (data == null) {
if(data == null) {
return;
}
if (B.isUpdatable(data)) {
if(B.isUpdatable(data)) {
getMantle().updateBlock(x, y, z);
}
}
@ -269,38 +268,38 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
@ChunkCoordinates
@Override
default void updateChunk(Chunk c) {
if (c.getWorld().isChunkLoaded(c.getX() + 1, c.getZ() + 1)
&& c.getWorld().isChunkLoaded(c.getX(), c.getZ() + 1)
&& c.getWorld().isChunkLoaded(c.getX() + 1, c.getZ())
&& c.getWorld().isChunkLoaded(c.getX() - 1, c.getZ() - 1)
&& c.getWorld().isChunkLoaded(c.getX(), c.getZ() - 1)
&& c.getWorld().isChunkLoaded(c.getX() - 1, c.getZ())
&& c.getWorld().isChunkLoaded(c.getX() + 1, c.getZ() - 1)
&& c.getWorld().isChunkLoaded(c.getX() - 1, c.getZ() + 1) && getMantle().getMantle().isLoaded(c)) {
if(c.getWorld().isChunkLoaded(c.getX() + 1, c.getZ() + 1)
&& c.getWorld().isChunkLoaded(c.getX(), c.getZ() + 1)
&& c.getWorld().isChunkLoaded(c.getX() + 1, c.getZ())
&& c.getWorld().isChunkLoaded(c.getX() - 1, c.getZ() - 1)
&& c.getWorld().isChunkLoaded(c.getX(), c.getZ() - 1)
&& c.getWorld().isChunkLoaded(c.getX() - 1, c.getZ())
&& c.getWorld().isChunkLoaded(c.getX() + 1, c.getZ() - 1)
&& c.getWorld().isChunkLoaded(c.getX() - 1, c.getZ() + 1) && getMantle().getMantle().isLoaded(c)) {
getMantle().getMantle().raiseFlag(c.getX(), c.getZ(), MantleFlag.UPDATE, () -> J.s(() -> {
PrecisionStopwatch p = PrecisionStopwatch.start();
KMap<Long, Integer> updates = new KMap<>();
RNG r = new RNG(Cache.key(c.getX(), c.getZ()));
getMantle().getMantle().iterateChunk(c.getX(), c.getZ(), MatterCavern.class, (x, y, z, v) -> {
if (!B.isFluid(c.getBlock(x & 15, y, z & 15).getBlockData())) {
if(!B.isFluid(c.getBlock(x & 15, y, z & 15).getBlockData())) {
return;
}
boolean u = false;
if (B.isAir(c.getBlock(x & 15, y, z & 15).getRelative(BlockFace.DOWN).getBlockData())) {
if(B.isAir(c.getBlock(x & 15, y, z & 15).getRelative(BlockFace.DOWN).getBlockData())) {
u = true;
} else if (B.isAir(c.getBlock(x & 15, y, z & 15).getRelative(BlockFace.WEST).getBlockData())) {
} else if(B.isAir(c.getBlock(x & 15, y, z & 15).getRelative(BlockFace.WEST).getBlockData())) {
u = true;
} else if (B.isAir(c.getBlock(x & 15, y, z & 15).getRelative(BlockFace.EAST).getBlockData())) {
} else if(B.isAir(c.getBlock(x & 15, y, z & 15).getRelative(BlockFace.EAST).getBlockData())) {
u = true;
} else if (B.isAir(c.getBlock(x & 15, y, z & 15).getRelative(BlockFace.SOUTH).getBlockData())) {
} else if(B.isAir(c.getBlock(x & 15, y, z & 15).getRelative(BlockFace.SOUTH).getBlockData())) {
u = true;
} else if (B.isAir(c.getBlock(x & 15, y, z & 15).getRelative(BlockFace.NORTH).getBlockData())) {
} else if(B.isAir(c.getBlock(x & 15, y, z & 15).getRelative(BlockFace.NORTH).getBlockData())) {
u = true;
}
if (u) {
if(u) {
updates.compute(Cache.key(x & 15, z & 15), (k, vv) -> {
if (vv != null) {
if(vv != null) {
return Math.max(vv, y);
}
@ -311,11 +310,11 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
updates.forEach((k, v) -> update(Cache.keyX(k), v, Cache.keyZ(k), c, r));
getMantle().getMantle().iterateChunk(c.getX(), c.getZ(), MatterUpdate.class, (x, y, z, v) -> {
if (v != null && v.isUpdate()) {
if(v != null && v.isUpdate()) {
int vx = x & 15;
int vz = z & 15;
update(x, y, z, c, new RNG(Cache.key(c.getX(), c.getZ())));
if (vx > 0 && vx < 15 && vz > 0 && vz < 15) {
if(vx > 0 && vx < 15 && vz > 0 && vz < 15) {
updateLighting(x, y, z, c);
}
}
@ -331,11 +330,11 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
Block block = c.getBlock(x, y, z);
BlockData data = block.getBlockData();
if (B.isLit(data)) {
if(B.isLit(data)) {
try {
block.setType(Material.AIR, false);
block.setBlockData(data, true);
} catch (Exception e) {
} catch(Exception e) {
Iris.reportError(e);
}
}
@ -347,21 +346,21 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
Block block = c.getBlock(x, y, z);
BlockData data = block.getBlockData();
blockUpdatedMetric();
if (B.isStorage(data)) {
if(B.isStorage(data)) {
RNG rx = rf.nextParallelRNG(BlockPosition.toLong(x, y, z));
InventorySlotType slot = null;
if (B.isStorageChest(data)) {
if(B.isStorageChest(data)) {
slot = InventorySlotType.STORAGE;
}
if (slot != null) {
if(slot != null) {
KList<IrisLootTable> tables = getLootTables(rx, block);
try {
InventoryHolder m = (InventoryHolder) block.getState();
addItems(false, m.getInventory(), rx, tables, slot, x, y, z, 15);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
}
@ -379,12 +378,12 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
boolean packedFull = false;
splitting:
for (int i = 0; i < nitems.length; i++) {
for(int i = 0; i < nitems.length; i++) {
ItemStack is = nitems[i];
if (is != null && is.getAmount() > 1 && !packedFull) {
for (int j = 0; j < nitems.length; j++) {
if (nitems[j] == null) {
if(is != null && is.getAmount() > 1 && !packedFull) {
for(int j = 0; j < nitems.length; j++) {
if(nitems[j] == null) {
int take = rng.nextInt(is.getAmount());
take = take == 0 ? 1 : take;
is.setAmount(is.getAmount() - take);
@ -398,11 +397,11 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
}
}
for (int i = 0; i < 4; i++) {
for(int i = 0; i < 4; i++) {
try {
Arrays.parallelSort(nitems, (a, b) -> rng.nextInt());
break;
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
@ -413,7 +412,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
@Override
default void injectTables(KList<IrisLootTable> list, IrisLootReference r) {
if (r.getMode().equals(IrisLootMode.CLEAR) || r.getMode().equals(IrisLootMode.REPLACE)) {
if(r.getMode().equals(IrisLootMode.CLEAR) || r.getMode().equals(IrisLootMode.REPLACE)) {
list.clear();
}
@ -427,11 +426,11 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
int rz = b.getZ();
double he = getComplex().getHeightStream().get(rx, rz);
PlacedObject po = getObjectPlacement(rx, b.getY(), rz);
if (po != null && po.getPlacement() != null) {
if(po != null && po.getPlacement() != null) {
if (B.isStorageChest(b.getBlockData())) {
if(B.isStorageChest(b.getBlockData())) {
IrisLootTable table = po.getPlacement().getTable(b.getBlockData(), getData());
if (table != null) {
if(table != null) {
return new KList<>(table);
}
}
@ -446,14 +445,14 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
injectTables(tables, biomeSurface.getLoot());
injectTables(tables, biomeUnder.getLoot());
if (tables.isNotEmpty()) {
if(tables.isNotEmpty()) {
int target = (int) Math.round(tables.size() * multiplier);
while (tables.size() < target && tables.isNotEmpty()) {
while(tables.size() < target && tables.isNotEmpty()) {
tables.add(tables.get(rng.i(tables.size() - 1)));
}
while (tables.size() > target && tables.isNotEmpty()) {
while(tables.size() > target && tables.isNotEmpty()) {
tables.remove(rng.i(tables.size() - 1));
}
}
@ -466,29 +465,29 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
KList<ItemStack> items = new KList<>();
int b = 4;
for (IrisLootTable i : tables) {
for(IrisLootTable i : tables) {
b++;
items.addAll(i.getLoot(debug, items.isEmpty(), rng, slot, x, y, z, b + b, mgf + b));
}
if (PaperLib.isPaper() && getWorld().hasRealWorld()) {
if(PaperLib.isPaper() && getWorld().hasRealWorld()) {
PaperLib.getChunkAtAsync(getWorld().realWorld(), x >> 4, z >> 4).thenAccept((c) -> {
Runnable r = () -> {
for (ItemStack i : items) {
for(ItemStack i : items) {
inv.addItem(i);
}
scramble(inv, rng);
};
if (Bukkit.isPrimaryThread()) {
if(Bukkit.isPrimaryThread()) {
r.run();
} else {
J.s(r);
}
});
} else {
for (ItemStack i : items) {
for(ItemStack i : items) {
inv.addItem(i);
}
@ -548,17 +547,17 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
AtomicReference<IrisPosition> r = new AtomicReference<>();
BurstExecutor b = burst().burst();
while (M.ms() - time.get() < timeout && r.get() == null) {
while(M.ms() - time.get() < timeout && r.get() == null) {
b.queue(() -> {
for (int i = 0; i < 1000; i++) {
if (M.ms() - time.get() > timeout) {
for(int i = 0; i < 1000; i++) {
if(M.ms() - time.get() > timeout) {
return;
}
int x = RNG.r.i(-29999970, 29999970);
int z = RNG.r.i(-29999970, 29999970);
checked.incrementAndGet();
if (matcher.apply(stream.get(x, z), find)) {
if(matcher.apply(stream.get(x, z), find)) {
r.set(new IrisPosition(x, 120, z));
time.set(0);
}
@ -570,7 +569,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
}
default IrisPosition lookForBiome(IrisBiome biome, long timeout, Consumer<Integer> triesc) {
if (!getWorld().hasRealWorld()) {
if(!getWorld().hasRealWorld()) {
Iris.error("Cannot GOTO without a bound world (headless mode)");
return null;
}
@ -579,7 +578,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
long s = M.ms();
int cpus = (Runtime.getRuntime().availableProcessors());
if (!getDimension().getAllBiomes(this).contains(biome)) {
if(!getDimension().getAllBiomes(this).contains(biome)) {
return null;
}
@ -587,50 +586,50 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
AtomicBoolean found = new AtomicBoolean(false);
AtomicBoolean running = new AtomicBoolean(true);
AtomicReference<IrisPosition> location = new AtomicReference<>();
for (int i = 0; i < cpus; i++) {
for(int i = 0; i < cpus; i++) {
J.a(() -> {
try {
Engine e;
IrisBiome b;
int x, z;
while (!found.get() && running.get()) {
while(!found.get() && running.get()) {
try {
x = RNG.r.i(-29999970, 29999970);
z = RNG.r.i(-29999970, 29999970);
b = getSurfaceBiome(x, z);
if (b != null && b.getLoadKey() == null) {
if(b != null && b.getLoadKey() == null) {
continue;
}
if (b != null && b.getLoadKey().equals(biome.getLoadKey())) {
if(b != null && b.getLoadKey().equals(biome.getLoadKey())) {
found.lazySet(true);
location.lazySet(new IrisPosition(x, getHeight(x, z), z));
}
tries.getAndIncrement();
} catch (Throwable ex) {
} catch(Throwable ex) {
Iris.reportError(ex);
ex.printStackTrace();
return;
}
}
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
e.printStackTrace();
}
});
}
while (!found.get() || location.get() == null) {
while(!found.get() || location.get() == null) {
J.sleep(50);
if (cl.flip()) {
if(cl.flip()) {
triesc.accept(tries.get());
}
if (M.ms() - s > timeout) {
if(M.ms() - s > timeout) {
running.set(false);
return null;
}
@ -641,7 +640,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
}
default IrisPosition lookForRegion(IrisRegion reg, long timeout, Consumer<Integer> triesc) {
if (getWorld().hasRealWorld()) {
if(getWorld().hasRealWorld()) {
Iris.error("Cannot GOTO without a bound world (headless mode)");
return null;
}
@ -650,7 +649,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
long s = M.ms();
int cpus = (Runtime.getRuntime().availableProcessors());
if (!getDimension().getRegions().contains(reg.getLoadKey())) {
if(!getDimension().getRegions().contains(reg.getLoadKey())) {
return null;
}
@ -659,25 +658,25 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
AtomicBoolean running = new AtomicBoolean(true);
AtomicReference<IrisPosition> location = new AtomicReference<>();
for (int i = 0; i < cpus; i++) {
for(int i = 0; i < cpus; i++) {
J.a(() -> {
Engine e;
IrisRegion b;
int x, z;
while (!found.get() && running.get()) {
while(!found.get() && running.get()) {
try {
x = RNG.r.i(-29999970, 29999970);
z = RNG.r.i(-29999970, 29999970);
b = getRegion(x, z);
if (b != null && b.getLoadKey() != null && b.getLoadKey().equals(reg.getLoadKey())) {
if(b != null && b.getLoadKey() != null && b.getLoadKey().equals(reg.getLoadKey())) {
found.lazySet(true);
location.lazySet(new IrisPosition(x, getHeight(x, z), z));
}
tries.getAndIncrement();
} catch (Throwable xe) {
} catch(Throwable xe) {
Iris.reportError(xe);
xe.printStackTrace();
return;
@ -686,14 +685,14 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
});
}
while (!found.get() || location.get() != null) {
while(!found.get() || location.get() != null) {
J.sleep(50);
if (cl.flip()) {
if(cl.flip()) {
triesc.accept(tries.get());
}
if (M.ms() - s > timeout) {
if(M.ms() - s > timeout) {
triesc.accept(tries.get());
running.set(false);
return null;
@ -714,7 +713,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
boolean isStudio();
default IrisBiome getBiome(int x, int y, int z) {
if (y <= getHeight(x, z) - 2) {
if(y <= getHeight(x, z) - 2) {
return getCaveBiome(x, z);
}
@ -722,7 +721,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
}
default IrisBiome getBiomeOrMantle(int x, int y, int z) {
if (y <= getHeight(x, z) - 2) {
if(y <= getHeight(x, z) - 2) {
return getCaveOrMantleBiome(x, y, z);
}
@ -732,7 +731,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
default String getObjectPlacementKey(int x, int y, int z) {
PlacedObject o = getObjectPlacement(x, y, z);
if (o != null && o.getObject() != null) {
if(o != null && o.getObject() != null) {
return o.getObject().getLoadKey() + "@" + o.getId();
}
@ -742,7 +741,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
default PlacedObject getObjectPlacement(int x, int y, int z) {
String objectAt = getMantle().getMantle().get(x, y, z, String.class);
if (objectAt == null || objectAt.isEmpty()) {
if(objectAt == null || objectAt.isEmpty()) {
return null;
}
@ -751,16 +750,16 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
int id = Integer.parseInt(v[1]);
IrisRegion region = getRegion(x, z);
for (IrisObjectPlacement i : region.getObjects()) {
if (i.getPlace().contains(object)) {
for(IrisObjectPlacement i : region.getObjects()) {
if(i.getPlace().contains(object)) {
return new PlacedObject(i, getData().getObjectLoader().load(object), id, x, z);
}
}
IrisBiome biome = getBiome(x, y, z);
for (IrisObjectPlacement i : biome.getObjects()) {
if (i.getPlace().contains(object)) {
for(IrisObjectPlacement i : biome.getObjects()) {
if(i.getPlace().contains(object)) {
return new PlacedObject(i, getData().getObjectLoader().load(object), id, x, z);
}
}
@ -777,16 +776,16 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
default void gotoBiome(IrisBiome biome, Player player) {
Set<String> regionKeys = getDimension()
.getAllRegions(this).stream()
.filter((i) -> i.getAllBiomes(this).contains(biome))
.map(IrisRegistrant::getLoadKey)
.collect(Collectors.toSet());
.getAllRegions(this).stream()
.filter((i) -> i.getAllBiomes(this).contains(biome))
.map(IrisRegistrant::getLoadKey)
.collect(Collectors.toSet());
Locator<IrisBiome> lb = Locator.surfaceBiome(biome.getLoadKey());
Locator<IrisBiome> locator = (engine, chunk)
-> regionKeys.contains(getRegion((chunk.getX() << 4) + 8, (chunk.getZ() << 4) + 8).getLoadKey())
&& lb.matches(engine, chunk);
-> regionKeys.contains(getRegion((chunk.getX() << 4) + 8, (chunk.getZ() << 4) + 8).getLoadKey())
&& lb.matches(engine, chunk);
if (!regionKeys.isEmpty()) {
if(!regionKeys.isEmpty()) {
locator.find(player);
} else {
player.sendMessage(C.RED + biome.getName() + " is not in any defined regions!");
@ -794,10 +793,10 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
}
default void gotoJigsaw(IrisJigsawStructure s, Player player) {
if (s.getLoadKey().equals(getDimension().getStronghold())) {
if(s.getLoadKey().equals(getDimension().getStronghold())) {
KList<Position2> p = getDimension().getStrongholds(getSeedManager().getSpawn());
if (p.isEmpty()) {
if(p.isEmpty()) {
player.sendMessage(C.GOLD + "No strongholds in world.");
}
@ -807,19 +806,19 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
Iris.debug("Ps: " + p.size());
for (Position2 i : p) {
for(Position2 i : p) {
Iris.debug("- " + i.getX() + " " + i.getZ());
}
for (Position2 i : p) {
for(Position2 i : p) {
double dx = i.distance(px);
if (dx < d) {
if(dx < d) {
d = dx;
pr = i;
}
}
if (pr != null) {
if(pr != null) {
Location ll = new Location(player.getWorld(), pr.getX(), 40, pr.getZ());
J.s(() -> player.teleport(ll));
}
@ -827,36 +826,36 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
return;
}
if (getDimension().getJigsawStructures().stream()
.map(IrisJigsawStructurePlacement::getStructure)
.collect(Collectors.toSet()).contains(s.getLoadKey())) {
if(getDimension().getJigsawStructures().stream()
.map(IrisJigsawStructurePlacement::getStructure)
.collect(Collectors.toSet()).contains(s.getLoadKey())) {
Locator.jigsawStructure(s.getLoadKey()).find(player);
} else {
Set<String> biomeKeys = getDimension().getAllBiomes(this).stream()
.filter((i) -> i.getJigsawStructures()
.stream()
.anyMatch((j) -> j.getStructure().equals(s.getLoadKey())))
.map(IrisRegistrant::getLoadKey)
.collect(Collectors.toSet());
.filter((i) -> i.getJigsawStructures()
.stream()
.anyMatch((j) -> j.getStructure().equals(s.getLoadKey())))
.map(IrisRegistrant::getLoadKey)
.collect(Collectors.toSet());
Set<String> regionKeys = getDimension().getAllRegions(this).stream()
.filter((i) -> i.getAllBiomeIds().stream().anyMatch(biomeKeys::contains)
|| i.getJigsawStructures()
.stream()
.anyMatch((j) -> j.getStructure().equals(s.getLoadKey())))
.map(IrisRegistrant::getLoadKey)
.collect(Collectors.toSet());
.filter((i) -> i.getAllBiomeIds().stream().anyMatch(biomeKeys::contains)
|| i.getJigsawStructures()
.stream()
.anyMatch((j) -> j.getStructure().equals(s.getLoadKey())))
.map(IrisRegistrant::getLoadKey)
.collect(Collectors.toSet());
Locator<IrisJigsawStructure> sl = Locator.jigsawStructure(s.getLoadKey());
Locator<IrisBiome> locator = (engine, chunk) -> {
if (biomeKeys.contains(getSurfaceBiome((chunk.getX() << 4) + 8, (chunk.getZ() << 4) + 8).getLoadKey())) {
if(biomeKeys.contains(getSurfaceBiome((chunk.getX() << 4) + 8, (chunk.getZ() << 4) + 8).getLoadKey())) {
return sl.matches(engine, chunk);
} else if (regionKeys.contains(getRegion((chunk.getX() << 4) + 8, (chunk.getZ() << 4) + 8).getLoadKey())) {
} else if(regionKeys.contains(getRegion((chunk.getX() << 4) + 8, (chunk.getZ() << 4) + 8).getLoadKey())) {
return sl.matches(engine, chunk);
}
return false;
};
if (!regionKeys.isEmpty()) {
if(!regionKeys.isEmpty()) {
locator.find(player);
} else {
player.sendMessage(C.RED + s.getLoadKey() + " is not in any defined regions, biomes or dimensions!");
@ -867,27 +866,27 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
default void gotoObject(String s, Player player) {
Set<String> biomeKeys = getDimension().getAllBiomes(this).stream()
.filter((i) -> i.getObjects().stream().anyMatch((f) -> f.getPlace().contains(s)))
.map(IrisRegistrant::getLoadKey)
.collect(Collectors.toSet());
.filter((i) -> i.getObjects().stream().anyMatch((f) -> f.getPlace().contains(s)))
.map(IrisRegistrant::getLoadKey)
.collect(Collectors.toSet());
Set<String> regionKeys = getDimension().getAllRegions(this).stream()
.filter((i) -> i.getAllBiomeIds().stream().anyMatch(biomeKeys::contains)
|| i.getObjects().stream().anyMatch((f) -> f.getPlace().contains(s)))
.map(IrisRegistrant::getLoadKey)
.collect(Collectors.toSet());
.filter((i) -> i.getAllBiomeIds().stream().anyMatch(biomeKeys::contains)
|| i.getObjects().stream().anyMatch((f) -> f.getPlace().contains(s)))
.map(IrisRegistrant::getLoadKey)
.collect(Collectors.toSet());
Locator<IrisObject> sl = Locator.object(s);
Locator<IrisBiome> locator = (engine, chunk) -> {
if (biomeKeys.contains(getSurfaceBiome((chunk.getX() << 4) + 8, (chunk.getZ() << 4) + 8).getLoadKey())) {
if(biomeKeys.contains(getSurfaceBiome((chunk.getX() << 4) + 8, (chunk.getZ() << 4) + 8).getLoadKey())) {
return sl.matches(engine, chunk);
} else if (regionKeys.contains(getRegion((chunk.getX() << 4) + 8, (chunk.getZ() << 4) + 8).getLoadKey())) {
} else if(regionKeys.contains(getRegion((chunk.getX() << 4) + 8, (chunk.getZ() << 4) + 8).getLoadKey())) {
return sl.matches(engine, chunk);
}
return false;
};
if (!regionKeys.isEmpty()) {
if(!regionKeys.isEmpty()) {
locator.find(player);
} else {
player.sendMessage(C.RED + s + " is not in any defined regions or biomes!");
@ -895,7 +894,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
}
default void gotoRegion(IrisRegion r, Player player) {
if (!getDimension().getAllRegions(this).contains(r)) {
if(!getDimension().getAllRegions(this).contains(r)) {
player.sendMessage(C.RED + r.getName() + " is not defined in the dimension!");
return;
}
@ -904,7 +903,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
}
default void cleanupMantleChunk(int x, int z) {
if (IrisSettings.get().getPerformance().isTrimMantleInStudio() || !isStudio()) {
if(IrisSettings.get().getPerformance().isTrimMantleInStudio() || !isStudio()) {
J.a(() -> getMantle().cleanupChunk(x, z));
}
}

View File

@ -35,7 +35,7 @@ public abstract class EngineAssignedModifier<T> extends EngineAssignedComponent
public void modify(int x, int z, Hunk<T> output, boolean multicore) {
try {
onModify(x, z, output, multicore);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.error("Modifier Failure: " + getName());
e.printStackTrace();
}

View File

@ -60,7 +60,7 @@ public abstract class EngineAssignedWorldManager extends EngineAssignedComponent
@EventHandler
public void on(IrisEngineHotloadEvent e) {
for (Player i : e.getEngine().getWorld().getPlayers()) {
for(Player i : e.getEngine().getWorld().getPlayers()) {
i.playSound(i.getLocation(), Sound.BLOCK_AMETHYST_BLOCK_BREAK, 1f, 1.8f);
VolmitSender s = new VolmitSender(i);
s.sendTitle(C.IRIS + "Engine " + C.AQUA + "<font:minecraft:uniform>Hotloaded", 70, 60, 410);
@ -71,34 +71,34 @@ public abstract class EngineAssignedWorldManager extends EngineAssignedComponent
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void on(PlayerTeleportEvent e) {
if (ignoreTP.get()) {
if(ignoreTP.get()) {
return;
}
if (!PaperLib.isPaper() || e.getTo() == null) {
if(!PaperLib.isPaper() || e.getTo() == null) {
return;
}
try {
if (e.getTo().getWorld().equals(getTarget().getWorld().realWorld())) {
if(e.getTo().getWorld().equals(getTarget().getWorld().realWorld())) {
getEngine().getWorldManager().teleportAsync(e);
}
} catch (Throwable ex) {
} catch(Throwable ex) {
}
}
@EventHandler
public void on(WorldSaveEvent e) {
if (e.getWorld().equals(getTarget().getWorld().realWorld())) {
if(e.getWorld().equals(getTarget().getWorld().realWorld())) {
getEngine().save();
}
}
@EventHandler
public void on(EntitySpawnEvent e) {
if (e.getEntity().getWorld().equals(getTarget().getWorld().realWorld())) {
if (e.getEntityType().equals(EntityType.ENDER_SIGNAL)) {
if(e.getEntity().getWorld().equals(getTarget().getWorld().realWorld())) {
if(e.getEntityType().equals(EntityType.ENDER_SIGNAL)) {
KList<Position2> p = getEngine().getDimension().getStrongholds(getEngine().getSeedManager().getSpawn());
Position2 px = new Position2(e.getEntity().getLocation().getBlockX(), e.getEntity().getLocation().getBlockZ());
Position2 pr = null;
@ -106,19 +106,19 @@ public abstract class EngineAssignedWorldManager extends EngineAssignedComponent
Iris.debug("Ps: " + p.size());
for (Position2 i : p) {
for(Position2 i : p) {
Iris.debug("- " + i.getX() + " " + i.getZ());
}
for (Position2 i : p) {
for(Position2 i : p) {
double dx = i.distance(px);
if (dx < d) {
if(dx < d) {
d = dx;
pr = i;
}
}
if (pr != null) {
if(pr != null) {
e.getEntity().getWorld().playSound(e.getEntity().getLocation(), Sound.ITEM_TRIDENT_THROW, 1f, 1.6f);
Location ll = new Location(e.getEntity().getWorld(), pr.getX(), 40, pr.getZ());
Iris.debug("ESignal: " + ll.getBlockX() + " " + ll.getBlockZ());
@ -130,28 +130,28 @@ public abstract class EngineAssignedWorldManager extends EngineAssignedComponent
@EventHandler
public void on(WorldUnloadEvent e) {
if (e.getWorld().equals(getTarget().getWorld().realWorld())) {
if(e.getWorld().equals(getTarget().getWorld().realWorld())) {
getEngine().close();
}
}
@EventHandler
public void on(BlockBreakEvent e) {
if (e.getPlayer().getWorld().equals(getTarget().getWorld().realWorld())) {
if(e.getPlayer().getWorld().equals(getTarget().getWorld().realWorld())) {
onBlockBreak(e);
}
}
@EventHandler
public void on(BlockPlaceEvent e) {
if (e.getPlayer().getWorld().equals(getTarget().getWorld().realWorld())) {
if(e.getPlayer().getWorld().equals(getTarget().getWorld().realWorld())) {
onBlockPlace(e);
}
}
@EventHandler
public void on(ChunkLoadEvent e) {
if (e.getChunk().getWorld().equals(getTarget().getWorld().realWorld())) {
if(e.getChunk().getWorld().equals(getTarget().getWorld().realWorld())) {
onChunkLoad(e.getChunk(), e.isNewChunk());
}
}

View File

@ -39,10 +39,10 @@ public interface EngineComponent {
default void close() {
try {
if (this instanceof Listener) {
if(this instanceof Listener) {
Iris.instance.unregisterListener((Listener) this);
}
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}

View File

@ -38,7 +38,7 @@ public class EngineData {
try {
f.getParentFile().mkdirs();
return new Gson().fromJson(IO.readAll(f), EngineData.class);
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
@ -50,7 +50,7 @@ public class EngineData {
try {
f.getParentFile().mkdirs();
IO.writeAll(f, new Gson().toJson(this));
} catch (IOException e) {
} catch(IOException e) {
Iris.reportError(e);
e.printStackTrace();
}

View File

@ -36,7 +36,7 @@ public interface EngineDecorator extends EngineComponent {
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
default boolean canGoOn(BlockData decorant, BlockData atop) {
if (atop == null || B.isAir(atop)) {
if(atop == null || B.isAir(atop)) {
return false;
}

View File

@ -41,7 +41,7 @@ public interface EngineMode extends Staged {
BurstExecutor e = burst().burst(stages.length);
e.setMulticore(multicore);
for (EngineStage i : stages) {
for(EngineStage i : stages) {
e.queue(() -> i.generate(x, z, blocks, biomes, multicore));
}
@ -63,7 +63,7 @@ public interface EngineMode extends Staged {
@BlockCoordinates
default void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes, boolean multicore) {
for (EngineStage i : getStages()) {
for(EngineStage i : getStages()) {
i.generate(x, z, blocks, biomes, multicore);
}
}

View File

@ -49,22 +49,22 @@ public class EnginePlayer {
sample();
J.a(() -> {
if (region != null) {
for (IrisEffect j : region.getEffects()) {
if(region != null) {
for(IrisEffect j : region.getEffects()) {
try {
j.apply(player, getEngine());
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
}
}
if (biome != null) {
for (IrisEffect j : biome.getEffects()) {
if(biome != null) {
for(IrisEffect j : biome.getEffects()) {
try {
j.apply(player, getEngine());
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}
@ -79,12 +79,12 @@ public class EnginePlayer {
public void sample() {
try {
if (ticksSinceLastSample() > 55 && player.getLocation().distanceSquared(lastLocation) > 9 * 9) {
if(ticksSinceLastSample() > 55 && player.getLocation().distanceSquared(lastLocation) > 9 * 9) {
lastLocation = player.getLocation().clone();
lastSample = M.ms();
sampleBiomeRegion();
}
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
}

View File

@ -28,7 +28,7 @@ public interface EngineStage {
void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes, boolean multicore);
default void close() {
if (this instanceof EngineComponent c) {
if(this instanceof EngineComponent c) {
c.close();
}
}

View File

@ -24,7 +24,7 @@ public interface Fallible {
default void fail(String error) {
try {
throw new RuntimeException();
} catch (Throwable e) {
} catch(Throwable e) {
Iris.reportError(e);
fail(error, e);
}

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