Skip to content

开发接口

提示

开发接口可在售后群下载,如果你是开发者,欢迎联系作者 15568820 进行交流咨询

货币注册

kotlin
package me.yeezhi.yeemarket.api

import org.bukkit.entity.Player

/**
 * 通用货币接口
 */
interface Currency {

    /**
     * 货币唯一ID
     * @return 货币标识符,如 "vault", "points", "yeevalue"
     */
    val id: String

    /**
     * 插件名,插件未加载时不进行接口注册
     */
    val plugin: String

    /**
     * 初始化货币接口
     * @return false 注册失败
     */
    fun setup(): Boolean

    /**
     * 查询玩家余额
     * @param player 玩家
     * @param currencyId 货币ID,用于支持多货币系统(可选参数)
     */
    fun getBalance(player: Player, currencyId: String? = null): Double

    /**
     * 增加余额
     * @param player 玩家
     * @param currencyId 货币ID
     * @param amount 金额
     *  */
    fun deposit(player: Player, currencyId: String? = null, amount: Long)

    /**
     * 扣减余额
     * @param player 玩家
     * @param currencyId 货币ID
     * @param amount 金额
     */
    fun withdraw(player: Player, currencyId: String? = null, amount: Long)
}
java
package me.yeezhi.yeemarket.currency;

import com.mc9y.nyeconomy.api.NyEconomyAPI;
import me.yeezhi.yeemarket.api.Currency;
import org.bukkit.entity.Player;

public class NyEconomy implements Currency {

    /**
     * 初始化货币接口
     */
    public boolean setup() {
        return true;
    }

    /**
     * 货币唯一ID
     */
    public String getId() {
        return "nye";
    }

    /**
     * 插件名
     */
    public String getPlugin() {
        return "NyEconomy";
    }

    /**
     * 查询玩家余额
     *
     * @param player     玩家
     * @param currencyId 货币ID,用于支持多货币系统(可选参数)
     */
    public double getBalance(Player player, String currencyId) {
        return (double) NyEconomyAPI.getInstance().getBalance(currencyId, player.getName());
    }

    /**
     * 增加余额
     *
     * @param player     玩家
     * @param currencyId 货币ID
     * @param amount     金额
     *
     */
    public void deposit(Player player, String currencyId, long amount) {
        NyEconomyAPI.getInstance().deposit(currencyId, player.getName(), (int) amount);
    }

    /**
     * 扣减余额
     *
     * @param player     玩家
     * @param currencyId 货币ID
     * @param amount     金额
     */
    public void withdraw(Player player, String currencyId, long amount) {
        NyEconomyAPI.getInstance().withdraw(currencyId, player.getName(), (int) amount);
    }
}

API

kotlin
package me.yeezhi.yeemarket.api

import me.yeezhi.yeemarket.core.entity.Goods
import me.yeezhi.yeemarket.core.entity.PriceRule
import me.yeezhi.yeemarket.core.enums.TradeResult
import me.yeezhi.yeemarket.core.enums.TradeType
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack

/**
 * 市场接口
 */
interface IMarketAPI {

    /**
     * 获取商品
     * @param goodsId 商品编号
     */
    fun getGoods(goodsId: String): Goods?

    /**
     * 更新商品
     */
    fun updateGoods(goods: Goods)

    /**
     * 上架商品
     * @param player 玩家
     * @param type 类型
     * @param itemStack 物品
     * @param amount 数量
     * @param currency 货币
     * @param price 单价
     * @return null为上架失败
     */
    fun shelfGoods(
        player: Player, type: TradeType, itemStack: ItemStack, amount: Int, currency: String = "", price: Long = 0
    ): Goods?

    /**
     * 下架商品
     * @param operator 操作者
     * @param goodsId 商品编号
     * @param ignoreMsg 无视提示
     * @param ignorePermission 无视权限
     */
    fun unshelfGoods(
        operator: Player, goodsId: String, ignoreMsg: Boolean = false, ignorePermission: Boolean = false
    ): Boolean

    /**
     * 尝试交易
     * @param trader 交易者
     * @param goodsId 商品编号
     * @param amount 数量
     */
    fun tryTradeGoods(trader: Player, goodsId: String, amount: Int): TradeResult

    /**
     * 设置商品价格
     * @param player 玩家
     * @param goodsId 商品编号
     * @param price 新价格
     */
    fun setGoodsPrice(player: Player, goodsId: String, price: Long): Boolean

    /**
     * 编辑商品库存
     * 将按照库存增加或减少进行物品返还扣除操作
     * @param player 玩家
     * @param goodsId 商品编号
     * @param stock 新库存
     */
    fun setGoodsStock(player: Player, goodsId: String, stock: Int): Boolean

    /**
     * 设置商品货币
     * @param player 玩家
     * @param goodsId 商品编号
     * @param currency 货币
     */
    fun setGoodsCurrency(player: Player, goodsId: String, currency: String): Boolean

    /**
     * 获取上架限制数量
     * @param player 玩家
     * @param type 交易类型
     */
    fun getShelfLimit(player: Player, type: TradeType): Int

    /**
     * 获取物品价格规则
     * @param itemStack 物品
     * @param currency 货币
     */
    fun getPriceRule(itemStack: ItemStack, currency: String): PriceRule?

    /**
     * 获取物品市场价
     * @param itemStack 物品
     * @param currency 货币
     */
    fun getMarketPriceFormat(itemStack: ItemStack, currency: String): String

    /**
     * 获取税率
     * @param owner 所有者(卖家)
     * @param currency 货币
     * @param price 总价
     */
    fun getTax(owner: String, currency: String, price: Long): Long

    /**
     * 获取税率倍率
     * @param name 玩家名
     * @param currency 货币
     */
    fun getTaxRatio(name: String, currency: String): Double

    /**
     * 搜索商品
     * @param player 玩家
     * @param content 搜索内容,留空则弹出输入页面
     */
    fun search(player: Player, content: String)

    /**
     * 判断物品是否为上架黑名单
     * @param itemStack 物品
     */
    fun isBlacklisted(itemStack: ItemStack): Boolean
}
kotlin
package me.yeezhi.yeemarket.api

import me.yeezhi.yeemarket.core.entity.DepotItem
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack

/**
 * 暂存仓库接口
 */
interface IDepotAPI {

    /**
     * 添加物品
     * @param owner 所有者
     * @param itemStack 物品
     * @param amount 数量
     * @param reason 原因
     */
    fun add(owner: String, itemStack: ItemStack, amount: Int, reason: DepotItem.Reason): DepotItem

    /**
     * 取出物品
     * @param player 玩家
     * @param depotItemId 暂存物品Id
     */
    fun claim(player: Player, depotItemId: String): Boolean

    /**
     * 一键取出
     * @param player 玩家
     * @return 取出的物品数量
     */
    fun bulkClaim(player: Player): Int
}
kotlin
package me.yeezhi.yeemarket.api

import me.yeezhi.yeemarket.core.entity.TradeOrder
import org.bukkit.entity.Player

/**
 * 交易订单接口
 */
interface ITradeOrderAPI {

    /**
     * 创建订单
     * @param trader 交易者
     * @param order 订单
     */
    fun create(trader: Player, order: TradeOrder)

    /**
     * 结算订单
     * 处理税率,收益,通知
     * @param owner 所有者(商家)
     * @param order 交易订单
     * @param check 订单校验,检查是否能从数据库中删除
     * @param msg 是否发送消息通知
     * @return 是否结算成功
     */
    fun process(owner: Player, order: TradeOrder, check: Boolean = true, msg: Boolean = true): Boolean
}

Event

提示

由于 YeePlugins 在 onEnable 阶段执行云端加载,若需注册监听,请在插件加载完成后通过循环检测再进行注册

kotlin
package me.yeezhi.yeemarket.api.event

import me.yeezhi.yeemarket.core.entity.Goods
import org.bukkit.entity.Player
import org.bukkit.event.Cancellable
import org.bukkit.event.Event
import org.bukkit.event.HandlerList

/**
 * 商品上架
 * @param player 所有者
 * @param goods 商品
 */
class GoodShelfEvent(val player: Player, val goods: Goods) : Event(true), Cancellable {

    private var cancelled: Boolean = false

    override fun isCancelled(): Boolean = cancelled

    override fun setCancelled(cancel: Boolean) {
        this.cancelled = cancel
    }

    override fun getHandlers(): HandlerList = handlerList


    companion object {
        @JvmStatic
        val handlerList = HandlerList()
    }
}
kotlin
package me.yeezhi.yeemarket.api.event

import me.yeezhi.yeemarket.core.entity.Goods
import org.bukkit.entity.Player
import org.bukkit.event.Event
import org.bukkit.event.HandlerList

/**
 * 商品下架
 * @param operator 操作者,通常为所有者或管理员
 * @param goods 商品
 */
class GoodsUnShelfEvent(val operator: Player, val goods: Goods) : Event(true) {

    override fun getHandlers(): HandlerList = handlerList


    companion object {
        @JvmStatic
        val handlerList = HandlerList()
    }
}
kotlin
package me.yeezhi.yeemarket.api.event

import me.yeezhi.yeemarket.core.entity.TradeOrder
import org.bukkit.entity.Player
import org.bukkit.event.Event
import org.bukkit.event.HandlerList

/**
 * 订单创建事件
 * @param trader 交易者
 * @param order 交易订单
 */
class TradeOrderEvent(val trader: Player, val order: TradeOrder) : Event(true) {

    override fun getHandlers(): HandlerList = handlerList


    companion object {
        @JvmStatic
        val handlerList = HandlerList()
    }
}
kotlin
package me.yeezhi.yeemarket.api.event

import me.yeezhi.yeemarket.core.entity.Goods
import org.bukkit.entity.Player
import org.bukkit.event.Cancellable
import org.bukkit.event.Event
import org.bukkit.event.HandlerList

object GoodsTradeEvent {

    /**
     * 商品交易前
     * @param goods 商品信息
     * @param trader 交易者
     * @param amount 交易数量
     */

    class Before(val goods: Goods, val trader: Player, val amount: Int) : Event(true), Cancellable {

        private var cancelled: Boolean = false

        override fun isCancelled(): Boolean = cancelled

        override fun setCancelled(cancel: Boolean) {
            this.cancelled = cancel
        }

        override fun getHandlers(): HandlerList = handlerList


        companion object {
            @JvmStatic
            val handlerList = HandlerList()
        }
    }

    /**
     * 商品交易后
     * @param goods 商品信息
     * @param trader 交易者
     * @param amount 交易数量
     */
    class After(val goods: Goods, val trader: Player, val amount: Int) : Event(true) {

        override fun getHandlers(): HandlerList = handlerList


        companion object {
            @JvmStatic
            val handlerList = HandlerList()
        }
    }
}
kotlin
package me.yeezhi.yeemarket.api.event

import me.yeezhi.yeemarket.core.entity.Goods
import org.bukkit.event.Event
import org.bukkit.event.HandlerList

/**
 * 商品更新事件
 * 仅数据修改,如交易后库存变化,商家编辑等场景下触发(不包括上架、下架)
 * @param goods 更新后商品
 *
 */
class GoodsUpdateEvent(val goods: Goods) : Event(true) {

    override fun getHandlers(): HandlerList = handlerList

    companion object {
        @JvmStatic
        val handlerList = HandlerList()
    }
}
kotlin
package me.yeezhi.yeemarket.api.event

import org.bukkit.event.Event
import org.bukkit.event.HandlerList

/**
 * Redis频道消息事件
 * @param channel 频道
 * @param message 消息
 */
sealed class ChannelEvent(val channel: String, val message: String) : Event(true) {


    override fun getHandlers(): HandlerList = handlerList


    companion object {
        @JvmStatic
        val handlerList = HandlerList()
    }

    class Publish(channel: String, message: String) : ChannelEvent(channel, message)
    class Subscribe(channel: String, message: String) : ChannelEvent(channel, message)
}