Skip to content

Commit

Permalink
Experimental | Fix & Update Script Env load
Browse files Browse the repository at this point in the history
  • Loading branch information
TheFloodDragon committed Jul 21, 2024
1 parent 37379e1 commit 0e98697
Show file tree
Hide file tree
Showing 14 changed files with 57 additions and 43 deletions.
1 change: 1 addition & 0 deletions project/module-item/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@ dependencies {
compileTaboo("module-bukkit-hook")
compileModule("runtime-bukkit")
compileModule("module-script")
compileModule("module-compat-core")
compileOnly(fileTree("libs"))
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package cn.fd.ratziel.module.item.impl.feature.action

import cn.fd.ratziel.core.Identifier
import cn.fd.ratziel.function.SimpleArgumentContext
import cn.fd.ratziel.module.item.api.feature.ItemTrigger
import cn.fd.ratziel.module.item.impl.feature.action.triggers.*
import cn.fd.ratziel.module.item.impl.service.NativeServiceRegistry
import cn.fd.ratziel.script.api.ScriptEnvironment
import cn.fd.ratziel.script.impl.SimpleScriptEnvironment
import cn.fd.ratziel.script.impl.SimpleScriptEnv
import java.util.concurrent.ConcurrentHashMap

/**
Expand Down Expand Up @@ -53,7 +52,7 @@ object ActionManager {

@JvmStatic
fun trigger(identifier: Identifier, trigger: ItemTrigger, function: ScriptEnvironment.() -> Unit) =
trigger(identifier, trigger, SimpleScriptEnvironment().apply(function))
trigger(identifier, trigger, SimpleScriptEnv().apply(function))

/**
* 匹配 [TriggerMap]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package cn.fd.ratziel.module.item.impl.feature.action.triggers

import cn.fd.ratziel.module.item.api.feature.ItemTrigger
import cn.fd.ratziel.module.item.impl.feature.action.ActionManager
import cn.fd.ratziel.script.impl.SimpleScriptEnvironment
import cn.fd.ratziel.script.impl.SimpleScriptEnv
import org.bukkit.event.block.Action.*
import org.bukkit.event.player.PlayerInteractEvent
import taboolib.common.platform.event.SubscribeEvent
Expand All @@ -25,7 +25,7 @@ object InteractTrigger {
val item = event.item ?: return
val neoItem = AttackTrigger.asNeo(item) ?: return
// 环境
val env = SimpleScriptEnvironment().apply {
val env = SimpleScriptEnv().apply {
set("event", event)
set("item", item)
set("neoItem", neoItem)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ class RefItemMeta<T : ItemMeta>(raw: T) {
internal fun new(tag: NBTCompound): T {
val handled =
if (MinecraftVersion.majorLegacy >= 12005)
InternalUtil.nbtToDcp(tag.getData())
NMS12005.INSTANCE.parsePatch(tag.getData())!!
else tag
return uncheck(constructor.instance(handled)!!)
}
Expand Down Expand Up @@ -135,35 +135,23 @@ class RefItemMeta<T : ItemMeta>(raw: T) {
obcClass("inventory.CraftMetaItem\$Applicator")
}

/**
* NBTTagCompound to DataComponentPatch
*/
fun nbtToDcp(tag: Any): Any = applicatorToDcp(nbtToApplicator(tag))

fun applicatorToDcp(applicator: Any): Any = applicatorBuildMethod.invoke(applicator)!!

fun nbtToApplicator(nbt: Any): Any =
applicatorPutMethod.invoke(
applicatorConstructor.instance()!!,
customDataKey,
NMS12005.customDataConstructor.instance(nbt)
)!!

val customDataKey by lazy {
META_ITEM.getProperty<Any>("CUSTOM_DATA", isStatic = true)
ReflexClass.of(META_ITEM.clazz, false).getField("CUSTOM_DATA")
}

val applicatorConstructor by lazy {
ReflexClass.of(applicatorClass).getConstructor()
ReflexClass.of(applicatorClass, false).getConstructor()
}

val applicatorPutMethod by lazy {
ReflexClass.of(applicatorClass).structure.methods.firstOrNull { it.name == "put" }
ReflexClass.of(applicatorClass, false).structure.methods.firstOrNull { it.name == "put" }
?: throw NoSuchMethodException("${applicatorClass.name}#put")
}

val applicatorBuildMethod by lazy {
ReflexClass.of(applicatorClass).getMethod("build")
ReflexClass.of(applicatorClass, false).getMethod("build")
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,26 @@
import javax.script.SimpleBindings;

/**
* SimpleScriptEnvironment
* SimpleScriptEnv
*
* @author TheFloodDragon
* @since 2024/7/15 13:41
*/
public class SimpleScriptEnvironment implements ScriptEnvironment {
public class SimpleScriptEnv implements ScriptEnvironment {

public SimpleScriptEnvironment() {
public SimpleScriptEnv() {
this(new SimpleBindings());
}

public SimpleScriptEnvironment(@NotNull Bindings bindings) {
public SimpleScriptEnv(@NotNull Bindings bindings) {
this(bindings, new SimpleArgumentContext());
}

public SimpleScriptEnvironment(@NotNull ArgumentContext context) {
public SimpleScriptEnv(@NotNull ArgumentContext context) {
this(new SimpleBindings(), context);
}

public SimpleScriptEnvironment(@NotNull Bindings bindings, @NotNull ArgumentContext context) {
public SimpleScriptEnv(@NotNull Bindings bindings, @NotNull ArgumentContext context) {
this.bindings = bindings;
this.context = context;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package cn.fd.ratziel.script

import cn.fd.ratziel.script.api.ScriptType
import taboolib.common.env.RuntimeEnv
import taboolib.common.platform.Awake

/**
* ScriptManager
Expand All @@ -13,4 +15,12 @@ object ScriptManager {
var defaultScriptLanguage: ScriptType = ScriptTypes.KETHER
internal set

@Awake
private fun initLanguages() {
// Load Env
for (lang in ScriptTypes.entries) {
if (lang.enabled) RuntimeEnv.ENV.loadDependency(lang.executor::class.java)
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ package cn.fd.ratziel.script
import cn.fd.ratziel.script.api.ScriptEnvironment
import cn.fd.ratziel.script.api.ScriptExecutor
import cn.fd.ratziel.script.api.ScriptType
import cn.fd.ratziel.script.executors.JavaScriptExecutor
import cn.fd.ratziel.script.executors.JexlExecutor
import cn.fd.ratziel.script.executors.KetherExecutor
import cn.fd.ratziel.script.executors.KotlinScriptExecutor
import cn.fd.ratziel.script.js.JavaScriptExecutor
import cn.fd.ratziel.script.jexl.JexlExecutor
import cn.fd.ratziel.script.kether.KetherExecutor
import cn.fd.ratziel.script.kts.KotlinScriptExecutor
import java.util.concurrent.CopyOnWriteArrayList

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package cn.fd.ratziel.script.impl
package cn.fd.ratziel.script.api

import cn.fd.ratziel.script.api.ScriptExecutor
import java.io.Reader
import javax.script.Compilable
import javax.script.CompiledScript
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import taboolib.common.platform.ProxyCommandSender
/**
* BasicAppliers
*
* 依托这设计
*
* @author TheFloodDragon
* @since 2024/7/16 12:21
*/
Expand All @@ -17,6 +19,15 @@ private object BasicAppliers {
@Awake
fun register() {
for (lang in ScriptTypes.entries) {
// Sender from Bindings
lang.appliers.add(ScriptEnvironment.Applier {
val sender = it.context.popOrNull(ProxyCommandSender::class.java)
if (sender == null) {
val newSender = it.bindings["player"] ?: it.bindings["sender"]
if (newSender != null) it.context.add(newSender)
}
})
// Sender from Context
if (lang == ScriptTypes.KETHER) {
lang.appliers.add(fetch<ProxyCommandSender> { bindings["@Sender"] = it })
} else lang.appliers.add(fetch<ProxyCommandSender> { bindings["sender"] = it })
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package cn.fd.ratziel.script.executors
package cn.fd.ratziel.script.jexl

import cn.fd.ratziel.script.api.CompilableScriptExecutor
import cn.fd.ratziel.script.api.ScriptContent
import cn.fd.ratziel.script.api.ScriptEnvironment
import cn.fd.ratziel.script.impl.CompilableScriptExecutor
import taboolib.common.env.RuntimeDependency
import taboolib.common.platform.Ghost
import javax.script.Compilable
import javax.script.CompiledScript
import javax.script.ScriptEngine
Expand All @@ -15,6 +16,7 @@ import javax.script.ScriptEngineManager
* @author TheFloodDragon
* @since 2024/7/14 21:41
*/
@Ghost // 避免依赖注入, 主动触发
@RuntimeDependency(
value = "!org.apache.commons:commons-jexl3:3.4.0",
test = "!org.apache.commons.jexl3.JexlEngine",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package cn.fd.ratziel.script.executors
package cn.fd.ratziel.script.js

import cn.fd.ratziel.script.api.CompilableScriptExecutor
import cn.fd.ratziel.script.api.ScriptContent
import cn.fd.ratziel.script.api.ScriptEnvironment
import cn.fd.ratziel.script.impl.CompilableScriptExecutor
import taboolib.common.env.RuntimeDependency
import taboolib.common.platform.Ghost
import javax.script.Compilable
import javax.script.CompiledScript
import javax.script.ScriptEngine
Expand All @@ -15,6 +16,7 @@ import javax.script.ScriptEngineManager
* @author TheFloodDragon
* @since 2024/7/14 21:40
*/
@Ghost // 避免依赖注入, 主动触发
@RuntimeDependency(
value = "!org.openjdk.nashorn:nashorn-core:15.4",
test = "!org.openjdk.nashorn.api.scripting.NashornScriptEngine"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package cn.fd.ratziel.script.executors
package cn.fd.ratziel.script.kether

import cn.fd.ratziel.script.api.ScriptContent
import cn.fd.ratziel.script.api.ScriptEnvironment
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package cn.fd.ratziel.script.executors
package cn.fd.ratziel.script.kts

import cn.fd.ratziel.core.env.CoreEnv
import cn.fd.ratziel.script.api.CompilableScriptExecutor
import cn.fd.ratziel.script.api.ScriptContent
import cn.fd.ratziel.script.api.ScriptEnvironment
import cn.fd.ratziel.script.impl.CompilableScriptExecutor
import taboolib.common.env.RuntimeDependencies
import taboolib.common.env.RuntimeDependency
import taboolib.common.platform.Ghost
import javax.script.Compilable
import javax.script.CompiledScript
import javax.script.ScriptEngine
Expand All @@ -17,6 +18,7 @@ import javax.script.ScriptEngineManager
* @author TheFloodDragon
* @since 2024/7/14 21:41
*/
@Ghost // 避免依赖注入, 主动触发
@RuntimeDependencies(
RuntimeDependency(
value = "!org.jetbrains.kotlin:kotlin-reflect:" + CoreEnv.KOTLIN_VERSION,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import cn.fd.ratziel.core.element.api.ElementHandler
import cn.fd.ratziel.core.serialization.toBasic
import cn.fd.ratziel.script.ScriptBlockBuilder
import cn.fd.ratziel.script.ScriptManager
import cn.fd.ratziel.script.impl.SimpleScriptEnvironment
import cn.fd.ratziel.script.impl.SimpleScriptEnv
import taboolib.common.LifeCycle

/**
Expand All @@ -27,7 +27,7 @@ object ActionElement : ElementHandler {
element.property.let { json ->
val block = ScriptBlockBuilder.build(json.toBasic(), ScriptManager.defaultScriptLanguage.executor)
println(block)
val result = block.evaluate(SimpleScriptEnvironment())
val result = block.evaluate(SimpleScriptEnv())
println(result)
}
}
Expand Down

0 comments on commit 0e98697

Please sign in to comment.