开发接口
提示
开发接口可在售后群下载,如果你是开发者,欢迎联系作者 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)
}