物品匹配提供商
解析内容匹配物品
抽象类
/**
* 物品匹配提供商
*/
abstract class ItemMatchProvider {
/**
* 物品匹配提供商的唯一标识符
*/
abstract val namespace: String
/**
* 匹配物品
*
* @param item 接收物品
* @param demand 物品格式
*
* @return 匹配数量
*/
abstract fun match(item: ItemStack, demand: Demand): Int
/**
* 获取匹配到的物品
*
* @param items 物品列表
* @param demand 物品格式
*
* @return 匹配到的物品,匹配不到则返回 null
*/
abstract fun getItem(items: List<ItemStack>, demand: Demand): ItemStack?
}注册提供商
// 创建一个物品匹配提供商实例
val provider = MyProvider()
// 注册物品匹配提供商
ItemMatchRegistry.registerProvider(provider)示例
/**
* Minecraft -material stone -amount 2 -cmd 1 -lore_key "hello world" -name ton
*/
class BukkitItemMatch() : ItemMatchProvider() {
companion object {
@Awake(LifeCycle.ENABLE)
fun init() {
// 确保 BukkitTest 插件已加载
if (!PluginReader.hasPlugin("BukkitTest")) return
// 注册 BukkitItemMatch 提供商
ItemMatchRegistry.registerProvider(BukkitItemMatch())
}
}
override val namespace: String
get() = "minecraft"
override fun match(item: ItemStack, demand: Demand): Int {
// 匹配物品的材质
demand.get("material")?.let {
if (Material.valueOf(it.uppercase()) != item.type) return 0
}
// 匹配物品的名称
demand.get("name")?.let {
if (item.itemMeta?.displayName != it) return 0
}
// 匹配物品的命令模型数据
demand.get("cmd")?.toInt()?.let {
if (item.itemMeta?.customModelData != it) return 0
}
// 匹配物品的描述信息(Lore)
demand.get("lore_key")?.let {
if (item.itemMeta?.lore?.contains(it) == true) return 0
}
return item.amount
}
}