开发接口
提示
开发接口可在售后群下载,如果你是开发者,欢迎联系作者 15568820 进行交流或咨询
API
kotlin
package me.yeezhi.soulringx.api
import me.yeezhi.soulringx.core.entity.StoreItem
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack
import java.math.BigDecimal
import java.util.function.Function
/**
* 物品存储管理接口
*/
interface IStoreItemAPI {
/**
* 获取物品(指定仓库)
* @param name 玩家名
* @param pageName 仓库页
* @param itemStack 物品
*/
fun get(name: String, pageName: String, itemStack: ItemStack): StoreItem?
/**
* 扣除物品(指定仓库)
* @param name 玩家名
* @param pageName 仓库页
* @param itemStack 物品
* @param amount 数量
* @return 未成功扣除数量
*/
fun take(name: String, pageName: String, itemStack: ItemStack, amount: Int): Int
/**
* 扣除物品(自动匹配仓库)
* @param name 玩家名
* @param itemStack 物品
* @param amount 数量
* @return 未成功扣除数量
*/
fun take(name: String, itemStack: ItemStack, amount: Int): Int
/**
* 扣除物品(自动匹配仓库)
* @param name 玩家名
* @param amount 数量
* @param matcher 匹配回调
* @return 未成功扣除数量
*/
fun take(name: String, amount: Int, matcher: Function<ItemStack, Boolean>): Int
/**
* 添加物品(指定仓库)
* @param name 玩家名
* @param pageName 仓库页
* @param itemStack 物品
* @param amount 数量
* @return 当前数量
*/
fun add(name: String, pageName: String, itemStack: ItemStack, amount: Int): Int
/**
* 添加物品(自动匹配仓库)
* @param name 玩家名
* @param itemStack 物品
* @param amount 数量
* @return 当前数量
*/
fun add(name: String, itemStack: ItemStack, amount: Int): Int
/**
* 匹配物品
* @param name 玩家名
* @param pageName 仓库页
* @param matcher 匹配回调
*/
fun match(name: String, pageName: String, matcher: Function<ItemStack, Boolean>): StoreItem?
/**
* 统计物品数量
* @param name 玩家名
* @param matcher 匹配回调
*/
fun count(name: String, matcher: Function<ItemStack, Boolean>): BigDecimal
/**
* 匹配物品列表
* @param name 玩家名
* @param pageName 仓库页
* @param matcher 匹配回调
*/
fun matchs(name: String, pageName: String, matcher: Function<ItemStack, Boolean>): List<StoreItem>
/**
* 匹配物品列表
* @param name 玩家名
* @param matcher 匹配回调
*/
fun matchs(name: String, matcher: Function<ItemStack, Boolean>): List<StoreItem>
/**
* 批量存入物品
* @param player 玩家
* @param onlyExisting 是否仅存入仓库中已有的物品
*/
fun storeItemsBulk(player: Player, onlyExisting: Boolean = true)
}kotlin
package me.yeezhi.soulringx.api
import me.yeezhi.soulringx.core.entity.StoreItem
import me.yeezhi.soulringx.core.entity.UnlockRule
import me.yeezhi.soulringx.core.entity.filter.FilterData
import me.yeezhi.soulringx.core.enums.SoulPageType
import me.yeezhi.soulringx.core.util.ItemFinder
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack
import java.util.*
import java.util.function.Function
/**
* 仓库页接口
*/
interface ISoulPageAPI {
/**
* 获取默认仓库名
*/
fun getDefaultPageName(): String
/**
* 获取仓库解锁规则
* @param player 玩家
* @param pageName 仓库页
*/
fun getUnlockRules(player: Player, pageName: String): UnlockRule
/**
* 获取仓库可以容量
* @param name 玩家名
* @param pageName 仓库页
*/
fun getSoulPageSize(name: String, pageName: String): Int
/**
* 打开仓库页面
* @param player 玩家
* @param ownerName 仓库主人
* @param pageName 仓库页
* @param pageType 页面类型
* @param itemFinders 额外筛选规则
* @param async 异步构建
*/
fun openSoulPage(
player: Player,
ownerName: String = player.name,
pageName: String = getDefaultPageName(),
pageType: SoulPageType = SoulPageType.NORMAL,
itemFinders: List<ItemFinder> = ArrayList(),
async: Boolean = true
)
/**
* 打开分类页面
* @param player 玩家
* @param pageName 仓库页
* @param closeBack 关闭页面返回仓库页面
* @param itemFinders 额外筛选规则
* @param async 异步构建
*/
fun filterSoulPage(
player: Player,
pageName: String,
closeBack: Boolean = false,
itemFinders: List<ItemFinder> = ArrayList(),
async: Boolean = true
)
/**
* 打开仓库搜索页面
* @param player 玩家
* @param pageName 仓库页
*/
fun searchSoulPage(player: Player, pageName: String)
/**
* 获取存储物品列表快照
* 将按照玩家配置数据进行筛选,排序
* @param name 玩家
* @param pageName 仓库页
* @param filter 是否筛选
* @param itemFinders 筛选规则
*/
fun getStoreItems(
name: String, pageName: String, filter: Boolean = false, itemFinders: List<ItemFinder> = ArrayList()
): List<StoreItem>
/**
* 获取筛选数据
* @param name 玩家名
* @param pageName 仓库页
*/
fun getFilters(name: String, pageName: String): LinkedList<FilterData>
/**
* 添加仓库已解锁槽位
* @param name 玩家名
* @param pageName 仓库
* @param amount 槽位数量
* @return 当前解锁数量
*/
fun addUnlockedSlots(name: String, pageName: String, amount: Int): Int
/**
* 获取空闲槽位数量
* @param name 玩家名
* @param pageName 仓库页
*/
fun getFreeSlot(name: String, pageName: String): Int
/**
* 仓库是否满
* @param name 玩家名
* @param pageName 仓库页
*/
fun isFull(name: String, pageName: String): Boolean
/**
* 所有仓库是否满
* @param name 玩家名
*/
fun isFull(name: String): Boolean
/**
* 判断物品是否在仓库黑名单中,禁止存入
* @param pageName 仓库页
* @param itemStack 物品
*/
fun isBlacklisted(pageName: String, itemStack: ItemStack): Boolean
/**
* 判断物品是否允许存入仓库(综合黑名单 + 容量等规则)
* @param player 玩家
* @param itemStack 物品
*/
fun canStoreItem(player: Player, itemStack: ItemStack): Boolean
/**
* 合并仓库物品
* @param player 玩家
* @param pageName 合并至的仓库名
* @param matcher 需合并物品匹配回调
*/
fun mergeSoulPage(player: Player, pageName: String, matcher: Function<ItemStack, Boolean>)
}kotlin
package me.yeezhi.soulringx.api
import me.yeezhi.soulringx.core.entity.PlayerData
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack
interface ISoulRingXAPI {
/**
* 获取玩家数据
* @param player 玩家
*/
fun getPlayerData(player: Player): PlayerData
/**
* 设置玩家数据
* @param player 玩家
* @param playerData 数据
*/
fun setPlayerData(player: Player, playerData: PlayerData)
/**
* 是否为空间戒指
* @param itemStack 物品
*/
fun hasSoulRing(itemStack: ItemStack?): Boolean
/**
* 玩家背包查找空间戒指
* @param player 玩家
*/
fun findSoulRing(player: Player): ItemStack?
/**
* 获取空间戒指
* @param player 玩家
* @param pickup 拾取模式
*/
fun getSoulRing(player: Player, pickup: Boolean): ItemStack
}kotlin
package me.yeezhi.soulringx.api
import org.bukkit.entity.Player
/**
* 拾取控制接口
*/
interface IPickupAPI {
/**
* 拾取模式总开关
* @param player 玩家
*/
fun hasPickup(player: Player): Boolean
/**
* 是否自动拾取地上掉落物
* @param player 玩家
*/
fun hasPickupDrop(player: Player): Boolean
/**
* 是否启用击杀掉落拾取
* @param player 玩家
*/
fun hasPickupKill(player: Player): Boolean
/**
* 是否启用击杀掉落拾取
* @param player 玩家
*/
fun hasPickupBreak(player: Player): Boolean
}kotlin
package me.yeezhi.soulringx.api
import me.yeezhi.soulringx.core.entity.StoreItem
import org.bukkit.inventory.ItemStack
/**
* 回收站
*/
interface IRecycleBinAPI {
/**
* 添加物品
* @param name 玩家名
* @param itemStack 物品
* @param amount 数量
* @return 当前数量
*/
fun add(name: String, itemStack: ItemStack, amount: Int): Int
/**
* 扣除物品
* @param name 玩家名
* @param itemStack 物品
* @param amount 数量
* @return 当前数量
*/
fun take(name: String, itemStack: ItemStack, amount: Int): Int
/**
* 获取物品
* @param name 玩家名
* @param itemStack 物品
* @return 存储物品
*/
fun get(name: String, itemStack: ItemStack): StoreItem?
/**
* 删除物品
* @param name 玩家名
* @param itemStack 物品
*/
fun remove(name: String, itemStack: ItemStack)
/**
* 清空回收站
* @param name 玩家名
*/
fun clear(name: String)
}Event
提示
由于 YeePlugins 在 onEnable 阶段执行云端加载,若需注册监听,请在插件加载完成后通过循环检测再进行注册
kotlin
package me.yeezhi.soulringx.api.event
import org.bukkit.event.Event
import org.bukkit.event.HandlerList
import org.bukkit.inventory.ItemStack
import java.math.BigDecimal
/**
* 仓库物品操作事件 (抽象父类,不直接触发)
*/
abstract class StoreItemEvent : Event() {
// 所有者
abstract val owner: String
// 仓库名
abstract val pageName: String
// 物品
abstract val itemStack: ItemStack
// 操作数量
abstract val amount: BigDecimal
// 操作前
abstract val before: BigDecimal
// 操作后
abstract val after: BigDecimal
}
/**
* 仓库增加物品事件
*/
class StoreItemAddEvent(
// 所有者
override val owner: String,
// 仓库名
override val pageName: String,
// 物品
override val itemStack: ItemStack,
// 操作数量
override val amount: BigDecimal,
// 操作前
override val before: BigDecimal,
// 操作后
override val after: BigDecimal
) : StoreItemEvent() {
override fun getHandlers(): HandlerList = handlerList
companion object {
@JvmStatic
val handlerList = HandlerList()
}
}
/**
* 仓库扣除物品事件
*/
class StoreItemTakeEvent(
// 所有者
override val owner: String,
// 仓库名
override val pageName: String,
// 物品
override val itemStack: ItemStack,
// 操作数量
override val amount: BigDecimal,
// 操作前
override val before: BigDecimal,
// 操作后
override val after: BigDecimal
) : StoreItemEvent() {
override fun getHandlers(): HandlerList = handlerList
companion object {
@JvmStatic
val handlerList = HandlerList()
}
}kotlin
package me.yeezhi.soulringx.core.listener
import me.yeezhi.soulringx.api.event.StoreItemAddEvent
import me.yeezhi.soulringx.api.event.StoreItemTakeEvent
import me.yeezhi.soulringx.core.util.debug
import me.yeezhi.yeecore.internal.util.StringUtil.replace
import taboolib.common.platform.event.SubscribeEvent
import taboolib.common.platform.function.info
import taboolib.module.nms.getName
import java.text.SimpleDateFormat
/**
* 基于TabooLib的监听示例
*/
object StoreItemListener {
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
@SubscribeEvent
fun onStoreItemAddEvent(event: StoreItemAddEvent) {
if (!debug) {
return
}
val map = mutableMapOf<String, String>(
"{time}" to sdf.format(System.currentTimeMillis()),
"{owner}" to event.owner,
"{page}" to event.pageName,
"{item}" to event.itemStack.getName(),
"{amount}" to event.amount.toString(),
"{before}" to event.before.toString(),
"{after}" to event.after.toString(),
)
info(
"""
[{time}] 物品新增
玩家: {owner}({page})
物品: {item}
数量: {before} + {amount} → {after}
""".trimIndent().replace(map)
)
}
@SubscribeEvent
fun onStoreItemTakeEvent(event: StoreItemTakeEvent) {
if (!debug) {
return
}
val map = mutableMapOf<String, String>(
"{time}" to sdf.format(System.currentTimeMillis()),
"{owner}" to event.owner,
"{page}" to event.pageName,
"{item}" to event.itemStack.getName(),
"{amount}" to event.amount.toString(),
"{before}" to event.before.toString(),
"{after}" to event.after.toString(),
)
info(
"""
[{time}] 物品扣除
玩家: {owner}({page})
物品: {item}
数量: {before} + {amount} → {after}
""".trimIndent().replace(map)
)
}
}