跳到主要内容

物品源系统

Malkuth 通过物品源(ItemSource)系统支持从 30+ 个第三方插件加载物品。你也可以注册自定义物品源。

MalkuthItem 对象

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

方法一览

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

物品 ID 格式

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

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

解析物品

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

// 解析物品 ID 为 ItemStack
val item = MalkuthItem.parse2ItemStack("mythicmobs:SkeletonKingSword", player)
if (item != null) {
player.inventory.addItem(item)
}

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

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 构建结果,失败返回 null
*/
fun build(id: String, player: Player?): BuildSourceItem?
}

BuildSourceItem

字段类型说明
itemStackItemStack构建出的物品
sourceString物品源名称
idString物品 ID

注册自定义物品源

import kim.hhhhhy.malkuth.common.api.item.ItemSource
import kim.hhhhhy.malkuth.common.api.item.BuildSourceItem
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?): BuildSourceItem? {
val item = MyPlugin.getItem(id) ?: return null
return BuildSourceItem(
itemStack = item,
source = name,
id = id
)
}
}

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

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

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

内置物品源

Malkuth 内置了 30+ 个物品源,自动检测对应插件是否加载:

物品源名称对应插件说明
minecraft原版物品
mythicmobsMythicMobs神话物品
itemsadderItemsAdderIA 自定义物品
neigeitemsNeigeItemsNI 物品
mmoitemsMMOItemsMMO 物品
oraxenOraxenOraxen 自定义物品
zaphkielZaphkielZaphkiel 物品
craftengineCraftEngineCE 物品
sxitemSX-ItemSX 物品
slimefunSlimefun粘液科技物品
headdatabaseHeadDatabase头颅数据库
executableitemsExecutableItemsEI 物品
azureflowAzureFlowAzureFlow 物品
magicgemMagicGem魔法宝石
pxrpgPxRPGPxRPG 物品
ratzielRatzielRatziel 物品
customfishingCustomFishing自定义钓鱼物品
nexoNexoNexo 物品
novaNovaNova 物品
hmccosmeticsHMCCosmeticsHMC 装饰物品
sertralineSertralineSertraline 物品
dragonarmourersDragonArmourers龙铠甲物品
ecoEcoEco 核心物品
ecoitemsEcoItemsEco 物品
ecoarmorEcoArmorEco 护甲
ecoscrollsEcoScrollsEco 卷轴
talismansTalismansEco 护符
ecobossesEcoBossesEco Boss 掉落
ecojobsEcoJobsEco 职业物品
ecopetsEcoPetsEco 宠物物品
ecoskillsEcoSkillsEco 技能物品
reforgesReforgesEco 重铸物品
modMod 物品(模组服支持)
备注

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