diff --git a/core/build.gradle.kts b/core/build.gradle.kts index bb6a059df..b9d95c58f 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -136,6 +136,8 @@ slimJar { relocate("org.apache.maven", "$lib.maven") relocate("org.codehaus.plexus", "$lib.plexus") relocate("org.eclipse.sisu", "$lib.sisu") + relocate("org.eclipse.aether", "$lib.aether") + relocate("com.google.inject", "$lib.guice") } tasks { diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandStudio.java b/core/src/main/java/com/volmit/iris/core/commands/CommandStudio.java index d6261ee23..7c0bba906 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandStudio.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandStudio.java @@ -47,7 +47,6 @@ import com.volmit.iris.util.io.IO; import com.volmit.iris.util.json.JSONArray; import com.volmit.iris.util.json.JSONObject; import com.volmit.iris.util.mantle.MantleChunk; -import com.volmit.iris.util.mantle.MantleFlag; import com.volmit.iris.util.math.M; import com.volmit.iris.util.math.Position2; import com.volmit.iris.util.math.RNG; @@ -218,9 +217,7 @@ public class CommandStudio implements DecreeExecutor { int sections = mantle.getWorldHeight() >> 4; chunkMap.forEach((pos, chunk) -> { var c = mantle.getChunk(pos.getX(), pos.getZ()); - for (MantleFlag flag : MantleFlag.values()) { - c.flag(flag, chunk.isFlagged(flag)); - } + c.copyFlags(chunk); c.clear(); for (int y = 0; y < sections; y++) { var slice = chunk.get(y); diff --git a/core/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java b/core/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java index 7d1dfc062..ff69c9d9f 100644 --- a/core/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java +++ b/core/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java @@ -144,6 +144,14 @@ public class MantleChunk { ref.release(); } + public void copyFlags(MantleChunk chunk) { + use(); + for (int i = 0; i < flags.length(); i++) { + flags.set(i, chunk.flags.get(i)); + } + release(); + } + public void flag(MantleFlag flag, boolean f) { if (closed.get()) throw new IllegalStateException("Chunk is closed!"); flags.set(flag.ordinal(), f); diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/SimpleScript.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/SimpleScript.kt index da2f1ef53..4e5203763 100644 --- a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/SimpleScript.kt +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/SimpleScript.kt @@ -26,6 +26,7 @@ object SimpleScriptDefinition : ScriptCompilationConfiguration({ ) jvm { + dependenciesFromClassContext(KotlinScript::class, wholeClasspath = true) dependenciesFromClassContext(SimpleScript::class, wholeClasspath = true) } diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisPackExecutionEnvironment.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisPackExecutionEnvironment.kt index c901ffc97..7eeb7ed23 100644 --- a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisPackExecutionEnvironment.kt +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisPackExecutionEnvironment.kt @@ -5,9 +5,9 @@ import com.volmit.iris.core.scripting.ExecutionEnvironment import com.volmit.iris.core.scripting.kotlin.base.DataScript import com.volmit.iris.core.scripting.kotlin.base.NoiseScript import com.volmit.iris.core.scripting.kotlin.runner.Script +import com.volmit.iris.core.scripting.kotlin.runner.valueOrThrow import com.volmit.iris.util.math.RNG import kotlin.reflect.KClass -import kotlin.script.experimental.api.valueOrThrow open class IrisPackExecutionEnvironment( private val data: IrisData @@ -19,7 +19,7 @@ open class IrisPackExecutionEnvironment( val loaded = data.scriptLoader.load(script) return compileCache.get(script) .computeIfAbsent(type) { _ -> runner.compileText(type, loaded.source, script) } - .valueOrThrow() + .valueOrThrow("Failed to compile script $script") } override fun execute(script: String) = diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisSimpleExecutionEnvironment.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisSimpleExecutionEnvironment.kt index 5d9ff96ae..1641bdbe6 100644 --- a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisSimpleExecutionEnvironment.kt +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisSimpleExecutionEnvironment.kt @@ -8,13 +8,14 @@ import com.volmit.iris.core.scripting.kotlin.runner.Script import com.volmit.iris.core.scripting.kotlin.runner.ScriptRunner import com.volmit.iris.core.scripting.kotlin.runner.classpath import com.volmit.iris.core.scripting.kotlin.runner.valueOrNull +import com.volmit.iris.core.scripting.kotlin.runner.valueOrThrow import com.volmit.iris.util.collection.KMap import com.volmit.iris.util.data.KCache import com.volmit.iris.util.format.C import java.io.File import kotlin.reflect.KClass +import kotlin.script.experimental.annotations.KotlinScript import kotlin.script.experimental.api.ResultWithDiagnostics -import kotlin.script.experimental.api.valueOrThrow import kotlin.text.split open class IrisSimpleExecutionEnvironment : ExecutionEnvironment.Simple { @@ -55,7 +56,7 @@ open class IrisSimpleExecutionEnvironment : ExecutionEnvironment.Simple { protected open fun compile(script: String, type: KClass<*>) = compileCache.get(script) .computeIfAbsent(type) { _ -> runner.compileText(type, script) } - .valueOrThrow() + .valueOrThrow("Failed to compile script") private fun evaluate0(name: String, type: KClass<*>, properties: Map? = null): Any? { val current = Thread.currentThread() @@ -64,7 +65,7 @@ open class IrisSimpleExecutionEnvironment : ExecutionEnvironment.Simple { try { return compile(name, type) .evaluate(properties) - .valueOrThrow() + .valueOrThrow("Failed to evaluate script") .valueOrNull() } catch (e: Throwable) { e.printStackTrace() @@ -76,7 +77,8 @@ open class IrisSimpleExecutionEnvironment : ExecutionEnvironment.Simple { override fun configureProject(projectDir: File) { projectDir.mkdirs() - val libs = javaClass.classLoader.classpath + val libs = listOf(javaClass.classLoader.classpath, KotlinScript::class.java.classLoader.classpath) + .flatMap { it } .sortedBy { it.absolutePath } .toMutableList() @@ -111,7 +113,7 @@ open class IrisSimpleExecutionEnvironment : ExecutionEnvironment.Simple { val classpath = files() plugins { - kotlin("jvm") version("2.1.20") + kotlin("jvm") version("2.2.0") } repositories { diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/Utils.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/Utils.kt index 4449c4f13..d3fae9699 100644 --- a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/Utils.kt +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/Utils.kt @@ -2,6 +2,7 @@ package com.volmit.iris.core.scripting.kotlin.runner import kotlinx.coroutines.runBlocking import java.io.File +import java.lang.RuntimeException import kotlin.script.experimental.api.* import kotlin.script.experimental.dependencies.CompoundDependenciesResolver import kotlin.script.experimental.dependencies.FileSystemDependenciesResolver @@ -51,4 +52,8 @@ private fun format(file: File, projectDir: String, home: String): String { path.startsWith(home) -> $$"$USER_HOME$/$${path.substring(home.length + 1)}" else -> path } +} + +fun ResultWithDiagnostics.valueOrThrow(message: CharSequence): R = valueOr { + throw RuntimeException(it.reports.joinToString("\n", "$message\n") { r -> r.render(withStackTrace = true) }) } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b2b3b82c5..4b12ffb07 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,7 @@ [versions] # Plugins shadow = "9.0.0-rc1" # https://plugins.gradle.org/plugin/com.gradleup.shadow -slimjar = "2.1.2" # https://plugins.gradle.org/plugin/de.crazydev22.slimjar +slimjar = "2.1.4" # https://plugins.gradle.org/plugin/de.crazydev22.slimjar download = "5.6.0" # https://plugins.gradle.org/plugin/de.undercouch.download runPaper = "2.3.1" # https://plugins.gradle.org/plugin/xyz.jpenilla.run-paper sentryPlugin = "5.8.0" # https://github.com/getsentry/sentry-android-gradle-plugin