Skip to content

Commit

Permalink
Experimental | Optimize & Move ArgumentContext
Browse files Browse the repository at this point in the history
  • Loading branch information
TheFloodDragon committed Jul 16, 2024
1 parent 39dce8e commit da5502c
Show file tree
Hide file tree
Showing 30 changed files with 263 additions and 162 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import cn.fd.ratziel.core.element.Element
import cn.fd.ratziel.core.element.api.ElementHandler
import cn.fd.ratziel.core.element.service.ElementRegistry
import cn.fd.ratziel.core.util.FutureFactory
import cn.fd.ratziel.function.argument.ArgumentContext
import cn.fd.ratziel.function.argument.SimpleArgumentContext
import cn.fd.ratziel.function.argument.popOrNull
import cn.fd.ratziel.function.ArgumentContext
import cn.fd.ratziel.function.SimpleArgumentContext
import cn.fd.ratziel.function.popOrNull
import taboolib.common.LifeCycle
import taboolib.common.TabooLib
import taboolib.common.platform.function.severe
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package cn.fd.ratziel.function;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

/**
* ArgumentContext - 参数上下文
* 本质为一个参数容器
*
* @author TheFloodDragon
* @since 2024/7/16 11:56
*/
public interface ArgumentContext {

/**
* 弹出第一个指定类型的参数
*
* @throws NullPointerException 当无法找到指定类型的参数时抛出
*/
@NotNull
default <T> T pop(@NotNull Class<T> type) throws NullPointerException {
T result = popOrNull(type);
if (result == null) throw new NullPointerException("Cannot find argument: " + type.getName() + " !");
return result;
}

/**
* 弹出第一个指定类型的参数
* 若无法找到, 则返回空
*/
@Nullable
<T> T popOrNull(@NotNull Class<T> type);

/**
* 弹出第一个指定类型的参数
* 若无法找到, 则返回默认值
*/
@NotNull
default <T> T popOr(@NotNull Class<T> type, @NotNull T def) {
T result = popOrNull(type);
if (result == null) return def;
return result;
}

/**
* 弹出所有指定类型的参数
*/
@NotNull
<T> Iterable<? extends T> popAll(@NotNull Class<T> type);

/**
* 添加一个参数元素
*/
boolean add(Object element);

/**
* 删除一个参数元素
*/
boolean remove(Object element);

/**
* 获取所有参数
*/
@NotNull
Iterable<Object> args();

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package cn.fd.ratziel.function.argument
package cn.fd.ratziel.function

import cn.fd.ratziel.function.argument.Argument
import cn.fd.ratziel.function.argument.ArgumentSupplier
import cn.fd.ratziel.function.argument.exception.ArgumentException
import cn.fd.ratziel.function.util.uncheck
import java.util.function.Function
Expand Down Expand Up @@ -41,10 +43,10 @@ inline fun <reified T : Any, R, V : Any> Argument<V>.ascertain(
onFalse: Function<Argument<V>, R>
): R = this.ascertain(T::class.java, onTrue, onFalse)

inline fun <reified T> ArgumentContext.pop() = pop(T::class.java)
inline fun <reified T : Any> ArgumentContext.pop() = pop(T::class.java)

inline fun <reified T> ArgumentContext.popAll() = popAll(T::class.java)
inline fun <reified T : Any> ArgumentContext.popAll() = popAll(T::class.java)

inline fun <reified T> ArgumentContext.popOr(default: T) = popOr(T::class.java, default)
inline fun <reified T : Any> ArgumentContext.popOr(default: T) = popOr(T::class.java, default)

inline fun <reified T> ArgumentContext.popOrNull() = popOrNull(T::class.java)
inline fun <reified T : Any> ArgumentContext.popOrNull() = popOrNull(T::class.java)
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package cn.fd.ratziel.function.argument
package cn.fd.ratziel.function

import cn.fd.ratziel.function.argument.exception.ArgumentNotFoundException
import cn.fd.ratziel.function.util.uncheck
import java.util.concurrent.CopyOnWriteArraySet

Expand All @@ -16,24 +15,16 @@ open class SimpleArgumentContext(

constructor(vararg values: Any) : this(CopyOnWriteArraySet<Any>().apply { values.forEach { add(it) } })

override fun <T> popOrNull(type: Class<T>): T? {
override fun <T : Any> popOrNull(type: Class<T>): T? {
return uncheck(collection.find { type.isAssignableFrom(it::class.java) })
}

override fun <T> popAll(type: Class<T>): Iterable<T> {
override fun <T : Any> popAll(type: Class<T>): Iterable<T> {
return uncheck(collection.filter { type.isAssignableFrom(it::class.java) })
}

override fun args(): Collection<Any> {
return collection
}

override fun <T> pop(type: Class<T>): T {
return popOrNull(type) ?: throw ArgumentNotFoundException(type)
}

override fun <T> popOr(type: Class<T>, default: T): T {
return popOrNull(type) ?: default
}

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package cn.fd.ratziel.module.item.api

import cn.fd.ratziel.function.argument.ArgumentContext
import cn.fd.ratziel.function.argument.SimpleArgumentContext
import cn.fd.ratziel.function.ArgumentContext
import cn.fd.ratziel.function.SimpleArgumentContext

/**
* ArgumentResolver
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package cn.fd.ratziel.module.item.api.builder

import cn.fd.ratziel.function.argument.ArgumentContext
import cn.fd.ratziel.function.argument.SimpleArgumentContext
import cn.fd.ratziel.function.ArgumentContext
import cn.fd.ratziel.function.SimpleArgumentContext
import cn.fd.ratziel.module.item.api.NeoItem
import java.util.concurrent.CompletableFuture

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package cn.fd.ratziel.module.item.api.feature

import cn.fd.ratziel.function.argument.ArgumentContext
import cn.fd.ratziel.script.api.ScriptEnvironment

/**
* ItemAction - 物品动作
Expand All @@ -13,6 +13,6 @@ interface ItemAction {
/**
* 执行物品动作
*/
fun execute(context: ArgumentContext)
fun execute(context: ScriptEnvironment)

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package cn.fd.ratziel.module.item.command

import cn.fd.ratziel.function.argument.SimpleArgumentContext
import cn.fd.ratziel.function.SimpleArgumentContext
import cn.fd.ratziel.module.item.ItemManager
import cn.fd.ratziel.module.item.nms.RefItemStack
import org.bukkit.entity.Player
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package cn.fd.ratziel.module.item.event

import cn.fd.ratziel.core.Identifier
import cn.fd.ratziel.function.argument.ArgumentContext
import cn.fd.ratziel.function.ArgumentContext
import cn.fd.ratziel.module.item.api.NeoItem
import cn.fd.ratziel.module.item.api.builder.ItemGenerator

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package cn.fd.ratziel.module.item.event

import cn.fd.ratziel.core.Identifier
import cn.fd.ratziel.function.argument.ArgumentContext
import cn.fd.ratziel.function.ArgumentContext
import kotlinx.serialization.json.JsonElement

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import cn.fd.ratziel.core.Priority
import cn.fd.ratziel.core.element.Element
import cn.fd.ratziel.core.util.FutureFactory
import cn.fd.ratziel.core.util.sortPriority
import cn.fd.ratziel.function.argument.ArgumentContext
import cn.fd.ratziel.function.ArgumentContext
import cn.fd.ratziel.module.item.ItemElement
import cn.fd.ratziel.module.item.ItemRegistry
import cn.fd.ratziel.module.item.api.ItemData
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import cn.fd.ratziel.core.serialization.asMutable
import cn.fd.ratziel.core.serialization.handlePrimitives
import cn.fd.ratziel.core.util.priority
import cn.fd.ratziel.core.util.sortPriority
import cn.fd.ratziel.function.argument.ArgumentContext
import cn.fd.ratziel.function.ArgumentContext
import cn.fd.ratziel.module.item.api.builder.ItemResolver
import cn.fd.ratziel.module.item.impl.builder.DefaultItemSerializer
import cn.fd.ratziel.module.item.impl.builder.resolver.sectionResolvers.PapiResolver
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package cn.fd.ratziel.module.item.impl.builder.resolver

import cn.fd.ratziel.core.util.splitNonEscaped
import cn.fd.ratziel.function.argument.ArgumentContext
import cn.fd.ratziel.function.ArgumentContext
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
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package cn.fd.ratziel.module.item.impl.builder.resolver.sectionResolvers

import cn.fd.ratziel.function.argument.ArgumentContext
import cn.fd.ratziel.function.argument.popOrNull
import cn.fd.ratziel.function.ArgumentContext
import cn.fd.ratziel.function.popOrNull
import cn.fd.ratziel.module.item.impl.builder.resolver.SectionResolver
import org.bukkit.OfflinePlayer
import taboolib.common.platform.ProxyPlayer
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package cn.fd.ratziel.module.item.impl.builder.resolver.sectionResolvers

import cn.fd.ratziel.function.argument.ArgumentContext
import cn.fd.ratziel.function.ArgumentContext
import cn.fd.ratziel.module.item.impl.builder.resolver.SectionResolver
import taboolib.common.util.random

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package cn.fd.ratziel.module.item.impl.feature.action

import cn.fd.ratziel.core.Identifier
import cn.fd.ratziel.function.argument.SimpleArgumentContext
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import cn.fd.ratziel.core.serialization.getBy
import cn.fd.ratziel.core.serialization.toBasic
import cn.fd.ratziel.module.item.event.ItemResolvedEvent
import cn.fd.ratziel.script.ScriptBlockBuilder
import cn.fd.ratziel.script.ScriptManager
import kotlinx.serialization.json.JsonObject
import taboolib.common.platform.event.SubscribeEvent
import taboolib.common.platform.function.severe
Expand Down Expand Up @@ -36,7 +37,7 @@ object ActionRegister {
continue
}
// 构建脚本块
val block = ScriptBlockBuilder.build(raw.value.toBasic())
val block = ScriptBlockBuilder.build(raw.value.toBasic(), ScriptManager.defaultScriptLanguage.executor)
// 创建脚本动作, 放入表中
map[type] = ScriptedAction(block)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package cn.fd.ratziel.module.item.impl.feature.action

import cn.fd.ratziel.function.argument.ArgumentContext
import cn.fd.ratziel.module.item.api.feature.ItemAction
import cn.fd.ratziel.script.ScriptTypes
import cn.fd.ratziel.script.api.EvaluableScript
import cn.fd.ratziel.script.api.ScriptEnvironment
import cn.fd.ratziel.script.impl.SimpleScriptEnvironment

/**
* ScriptedAction
Expand All @@ -20,9 +17,8 @@ open class ScriptedAction(
val script: EvaluableScript,
) : ItemAction {

override fun execute(context: ArgumentContext) {
val environment = context.popOr(ScriptEnvironment::class.java, SimpleScriptEnvironment(context))
script.evaluate(ScriptTypes.KETHER.executor, environment)
override fun execute(context: ScriptEnvironment) {
script.evaluate(context)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,18 @@ public interface EvaluableScript {
/**
* 评估脚本
*
* @param executor 覆写的脚本执行器
* @param environment 覆写的的脚本环境
* @throws ScriptException 当脚本评估中产生错误时抛出
*/
@Nullable
Object evaluate(@NotNull ScriptExecutor executor, @NotNull ScriptEnvironment environment) throws ScriptException;
Object evaluate(@NotNull ScriptEnvironment environment) throws ScriptException;

/**
* 获取脚本执行器
*
* @return 覆写的脚本执行器
*/
@NotNull
ScriptExecutor getExecutor();

}
Loading

0 comments on commit da5502c

Please sign in to comment.