货币系统 API
Malkuth 支持自定义货币系统,允许第三方插件注册自己的货币类型并与商城集成。
方法一览
| 方法 | 返回值 | 说明 |
|---|---|---|
registerCurrency(id: String, currency: ShopSerializer.CustomCurrency) | Unit | 注册自定义货币 |
getCurrencyBalance(player: Player, shopId: String) | Double | 获取玩家在指定商店使用的货币余额 |
hasCurrency(player: Player, shopId: String, price: Double) | Boolean | 检查玩家是否有足够的货币 |
CustomCurrency 结构
ShopSerializer.CustomCurrency 是自定义货币的核心接口,定义了货币的基本行为:
import kim.hhhhhy.malkuth.common.api.currency.ShopSerializer
interface CustomCurrency {
/** 货币显示名称 */
val name: String
/** 货币图标(用于 GUI 显示) */
val icon: String
/**
* 获取玩家余额
* @param player 目标玩家
* @return 当前余额
*/
fun getBalance(player: Player): Double
/**
* 检查玩家是否有足够余额
* @param player 目标玩家
* @param amount 需要的金额
* @return 是否足够
*/
fun has(player: Player, amount: Double): Boolean
/**
* 扣除玩家余额
* @param player 目标玩家
* @param amount 扣除金额
* @return 是否成功
*/
fun take(player: Player, amount: Double): Boolean
/**
* 给予玩家余额
* @param player 目标玩家
* @param amount 给予金额
* @return 是否成功
*/
fun give(player: Player, amount: Double): Boolean
}
注册自定义货币
import kim.hhhhhy.malkuth.common.api.currency.ShopSerializer.CustomCurrency
class PointsCurrency : CustomCurrency {
override val name = "积分"
override val icon = "EMERALD"
override fun getBalance(player: Player): Double {
return PointsPlugin.getPoints(player).toDouble()
}
override fun has(player: Player, amount: Double): Boolean {
return getBalance(player) >= amount
}
override fun take(player: Player, amount: Double): Boolean {
if (!has(player, amount)) return false
PointsPlugin.removePoints(player, amount.toInt())
return true
}
override fun give(player: Player, amount: Double): Boolean {
PointsPlugin.addPoints(player, amount.toInt())
return true
}
}
// 注册
Malkuth.api.registerCurrency("points", PointsCurrency())
查询余额
val api = Malkuth.api
// 获取玩家在商店使用的货币余额
val balance = api.getCurrencyBalance(player, "main_shop")
player.sendMessage("你的余额: $balance")
// 检查是否足够购买
if (api.hasCurrency(player, "main_shop", 100.0)) {
player.sendMessage("余额充足")
} else {
player.sendMessage("余额不足")
}
在商店配置中使用自定义货币
注册完成后,可以在商店配置文件中通过货币 ID 引用:
shop:
id: "points_shop"
name: "积分商店"
currency: "points" # 使用注册的货币 ID
goods:
- id: "diamond"
price: 500 # 500 积分
提示
自定义货币注册应在插件启用阶段(onEnable)完成,确保在 Malkuth 加载商店配置之前注册。建议在 plugin.yml 中将 Malkuth 设为前置依赖。