跳到主要内容

物品源系统

Malkuth 通过物品源(ItemSource)系统支持 33 个固定物品源 + 1 个条件物品源(mod,仅 Mod 服务器生效),可从第三方插件或内置来源加载物品。你也可以注册自定义物品源。

MalkuthItem 对象

MalkuthItem 是物品源管理的核心对象,位于 kim.hhhhhy.malkuth.common.api.item 包下。

方法一览

方法返回值说明
getLoadedSources()List<ItemSource>获取所有已加载的物品源实例
get(source: String)ItemSource?根据名称精确获取物品源实例
getSource(source: String)ItemSource根据名称或别名获取物品源,未找到时回退到 minecraft
register(instance: ItemSource)Unit注册自定义物品源
parse2ItemStack(id: String, player: Player?)BuildSourceItem解析物品 ID 为 BuildSourceItem

物品 ID 格式

Malkuth 使用 source:itemId 格式标识物品:

minecraft:diamond_sword     → 原版钻石剑
mythicmobs:SkeletonKingSword → MythicMobs 物品
itemsadder:custom_gem → ItemsAdder 物品

解析物品

import kim.hhhhhy.malkuth.common.api.item.MalkuthItem

// 解析物品 ID 为 BuildSourceItem
val result = MalkuthItem.parse2ItemStack("mythicmobs:SkeletonKingSword", player)
player.inventory.addItem(result.itemStack)

// 获取所有已加载的物品源
val sources = MalkuthItem.getLoadedSources()
sources.forEach { println("已加载物品源: ${it.name}") }

ItemSource 接口

自定义物品源需要实现 ItemSource 接口:

import kim.hhhhhy.malkuth.common.api.item.ItemSource

interface ItemSource {

/** 物品源名称(唯一标识) */
val name: String

/** 物品源别名列表(可选的替代名称) */
val alias: List<String>

/** 所属插件名称 */
val pluginName: String

/** 该物品源对应的插件是否已加载 */
val isLoaded: Boolean

/**
* 根据物品 ID 构建 ItemStack
* @param id 物品 ID(不含 source: 前缀)
* @param player 目标玩家(部分物品源需要玩家上下文)
* @return 构建出的 ItemStack
*/
fun build(id: String, player: Player? = null): ItemStack
}

BuildSourceItem

字段类型说明
playerPlayer?目标玩家
idString物品 ID
itemStackItemStack构建出的物品
sourceString物品源插件名称

注册自定义物品源

import kim.hhhhhy.malkuth.common.api.item.ItemSource
import kim.hhhhhy.malkuth.common.api.item.MalkuthItem

class MyItemSource : ItemSource {

override val name = "myplugin"
override val alias = listOf("mp", "my")
override val pluginName = "MyPlugin"
override val isLoaded: Boolean
get() = Bukkit.getPluginManager().isPluginEnabled("MyPlugin")

override fun build(id: String, player: Player?): ItemStack {
return MyPlugin.getItem(id) ?: warnItemNotFound(id)
}
}

// 注册物品源
MalkuthItem.register(MyItemSource())

注册后即可在商店配置中使用:

goods:
- id: "my_item"
source: "myplugin:custom_item"

内置物品源

Malkuth 内置了 33 个固定物品源 + 1 个条件物品源,自动检测对应插件是否加载:

物品源名称对应插件说明
minecraft原版物品
mythicmobsMythicMobs神话物品
itemsadderItemsAdderIA 自定义物品
neigeitemsNeigeItemsNI 物品
mmoitemsMMOItemsMMO 物品
oraxenOraxenOraxen 自定义物品
zaphkielZaphkielZaphkiel 物品
craftengineCraftEngineCE 物品
baikirutoBaikirutoBaikiruto 物品
sxitemSX-ItemSX 物品
slimefunSlimefun粘液科技物品
headdatabaseHeadDatabase头颅数据库
executableitemsExecutableItemsEI 物品
azureflowAzureFlowAzureFlow 物品
magicgemMagicGem魔法宝石
pxrpgPxRPGPxRPG 物品
ratzielRatzielRatziel 物品
customfishingCustomFishing自定义钓鱼物品
nexoNexoNexo 物品
novaNovaNova 物品
hmccosmeticsHMCCosmeticsHMC 装饰物品
sertralineSertralineSertraline 物品
dragonarmourersDragonArmourers龙铠甲物品
repositoryMalkuth 物品仓库
ecoarmorEcoArmorEco 护甲
ecocratesEcoCratesEco 宝箱
ecoitemsEcoItemsEco 物品
ecomobsEcoMobsEco 怪物掉落
ecopetsEcoPetsEco 宠物物品
ecoscrollsEcoScrollsEco 卷轴
reforgesReforgesEco 重铸物品
stattrackersStatTrackersEco 统计追踪器
talismansTalismansEco 护符
modMod 物品(模组服支持)
备注

物品源的 isLoaded 属性会在运行时动态检测对应插件是否启用。未安装对应插件的物品源不会影响 Malkuth 正常运行。