diff --git a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/SectionResolver.kt b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/api/builder/SectionResolver.kt similarity index 91% rename from project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/SectionResolver.kt rename to project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/api/builder/SectionResolver.kt index 4c172483..38c27ecb 100644 --- a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/SectionResolver.kt +++ b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/api/builder/SectionResolver.kt @@ -1,4 +1,4 @@ -package cn.fd.ratziel.module.item.impl.builder.resolver +package cn.fd.ratziel.module.item.api.builder import cn.fd.ratziel.module.item.api.ArgumentResolver diff --git a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/api/feature/ItemTrigger.kt b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/api/feature/ItemTrigger.kt index dd7225f9..94c42591 100644 --- a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/api/feature/ItemTrigger.kt +++ b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/api/feature/ItemTrigger.kt @@ -11,6 +11,6 @@ interface ItemTrigger { /** * 触发器名称列表 */ - val names: Array + val names: Array } \ No newline at end of file diff --git a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/BasicItemResolver.kt b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/BasicItemResolver.kt index 64d725f8..b6a8e576 100644 --- a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/BasicItemResolver.kt +++ b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/BasicItemResolver.kt @@ -7,6 +7,7 @@ import cn.fd.ratziel.core.util.priority import cn.fd.ratziel.core.util.sortPriority import cn.fd.ratziel.function.ArgumentContext import cn.fd.ratziel.module.item.api.builder.ItemResolver +import cn.fd.ratziel.module.item.api.builder.SectionResolver import cn.fd.ratziel.module.item.impl.builder.DefaultItemSerializer import cn.fd.ratziel.module.item.impl.builder.resolver.sectionResolvers.PapiResolver import kotlinx.serialization.json.JsonElement diff --git a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/BasicTagResolver.kt b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/BasicTagResolver.kt index 9c640b7d..a820fc13 100644 --- a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/BasicTagResolver.kt +++ b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/BasicTagResolver.kt @@ -2,6 +2,7 @@ package cn.fd.ratziel.module.item.impl.builder.resolver import cn.fd.ratziel.core.util.splitNonEscaped import cn.fd.ratziel.function.ArgumentContext +import cn.fd.ratziel.module.item.api.builder.SectionResolver import cn.fd.ratziel.module.item.impl.builder.resolver.sectionResolvers.PapiResolver import cn.fd.ratziel.module.item.impl.builder.resolver.sectionResolvers.RandomResolver import taboolib.common.util.VariableReader diff --git a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/sectionResolvers/PapiResolver.kt b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/sectionResolvers/PapiResolver.kt index 6f053ef9..a88968d4 100644 --- a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/sectionResolvers/PapiResolver.kt +++ b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/sectionResolvers/PapiResolver.kt @@ -2,7 +2,7 @@ package cn.fd.ratziel.module.item.impl.builder.resolver.sectionResolvers import cn.fd.ratziel.function.ArgumentContext import cn.fd.ratziel.function.popOrNull -import cn.fd.ratziel.module.item.impl.builder.resolver.SectionResolver +import cn.fd.ratziel.module.item.api.builder.SectionResolver import org.bukkit.OfflinePlayer import taboolib.common.platform.ProxyPlayer import taboolib.platform.compat.replacePlaceholder diff --git a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/sectionResolvers/RandomResolver.kt b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/sectionResolvers/RandomResolver.kt index 2e83416e..a7b423df 100644 --- a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/sectionResolvers/RandomResolver.kt +++ b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/builder/resolver/sectionResolvers/RandomResolver.kt @@ -1,7 +1,7 @@ package cn.fd.ratziel.module.item.impl.builder.resolver.sectionResolvers import cn.fd.ratziel.function.ArgumentContext -import cn.fd.ratziel.module.item.impl.builder.resolver.SectionResolver +import cn.fd.ratziel.module.item.api.builder.SectionResolver import taboolib.common.util.random /** diff --git a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/feature/action/ActionManager.kt b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/feature/action/ActionManager.kt index d2ceefe2..943aa368 100644 --- a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/feature/action/ActionManager.kt +++ b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/feature/action/ActionManager.kt @@ -21,9 +21,10 @@ object ActionManager { */ val triggers: MutableSet = mutableSetOf( AttackTrigger, DamageTrigger, BreakTrigger, - InteractTrigger.LeftClick, InteractTrigger.RightClick, ReleaseTrigger, - ) + ).apply { + addAll(InteractTrigger.Triggers.values()) + } /** * 物品唯一标识符 - 触发器表 (存有物品触发器和物品动作) diff --git a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/feature/action/triggers/InteractTrigger.kt b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/feature/action/triggers/InteractTrigger.kt index b81b5bd1..489ab90d 100644 --- a/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/feature/action/triggers/InteractTrigger.kt +++ b/project/module-item/src/main/kotlin/cn/fd/ratziel/module/item/impl/feature/action/triggers/InteractTrigger.kt @@ -1,7 +1,9 @@ package cn.fd.ratziel.module.item.impl.feature.action.triggers +import cn.fd.ratziel.core.Identifier import cn.fd.ratziel.module.item.api.feature.ItemTrigger import cn.fd.ratziel.module.item.impl.feature.action.ActionManager +import cn.fd.ratziel.script.api.ScriptEnvironment import cn.fd.ratziel.script.impl.SimpleScriptEnv import org.bukkit.event.block.Action.* import org.bukkit.event.player.PlayerInteractEvent @@ -29,30 +31,44 @@ object InteractTrigger { set("event", event) set("item", item) set("neoItem", neoItem) - set("block", event.clickedBlock) - set("position", event.clickedPosition) } // 触发触发器 when (event.action) { - - // 左键 - LEFT_CLICK_AIR, LEFT_CLICK_BLOCK -> - ActionManager.trigger(neoItem.identifier, LeftClick, env) - - // 右键 - RIGHT_CLICK_AIR, RIGHT_CLICK_BLOCK -> - ActionManager.trigger(neoItem.identifier, RightClick, env) - + LEFT_CLICK_AIR -> Triggers.LEFT_CLICK_AIR.trigger(neoItem.identifier, env) + LEFT_CLICK_BLOCK -> Triggers.LEFT_CLICK_BLOCK.trigger(neoItem.identifier, env) + RIGHT_CLICK_AIR -> Triggers.RIGHT_CLICK_AIR.trigger(neoItem.identifier, env) + RIGHT_CLICK_BLOCK -> Triggers.RIGHT_CLICK_BLOCK.trigger(neoItem.identifier, env) else -> {} } } - object LeftClick : ItemTrigger { - override val names = arrayOf("onLeft", "left", "onLeftClick", "leftClick") - } + enum class Triggers( + override vararg val names: String, + val parent: ItemTrigger? = null + ) : ItemTrigger { + + /** + * includes [LEFT_CLICK_AIR] [LEFT_CLICK_BLOCK] + */ + LEFT_CLICK("onLeft", "left", "onLeftClick", "leftClick"), + + /** + * includes [RIGHT_CLICK_AIR] [RIGHT_CLICK_BLOCK] + */ + RIGHT_CLICK("onLeft", "left", "onLeftClick", "leftClick"), + + LEFT_CLICK_AIR("onLeftClickedAir", "left-air", "left-click-air", parent = LEFT_CLICK), + LEFT_CLICK_BLOCK("onLeftClickedBlock", "left-block", "left-click-block", parent = LEFT_CLICK), + RIGHT_CLICK_AIR("onRightClickedAir", "right-air", "right-click-air", parent = RIGHT_CLICK), + RIGHT_CLICK_BLOCK("onRightClickedBlock", "right-block", "right-click-block", parent = RIGHT_CLICK); + + fun trigger(identifier: Identifier, environment: ScriptEnvironment) { + // Trigger myself + ActionManager.trigger(identifier, this, environment) + // Trigger parent + if (parent != null) ActionManager.trigger(identifier, parent, environment) + } - object RightClick : ItemTrigger { - override val names = arrayOf("onRight", "right", "onRightClick", "rightClick") } } \ No newline at end of file