
EcoBal经济API
EcoBal 是一个用于 fabric mods 的经济 API。
EcoBal - 稳健且可配置的 Fabric 经济 API
EcoBal 是一个功能强大、独立的服务端 Fabric 经济模组,旨在作为其他模组(如 ShopShelves)的核心 API 层,并开箱即用地提供完整、功能丰富的经济体验。它管理玩家余额、持久化、管理命令,并提供高级、可配置的游戏内消息格式化。
📧 联系我与支持信息
💬 主要支持渠道(首选)
所有一般性问题、功能请求以及非紧急的错误报告都应发布到我们 Discord 服务器 的相应频道中。 我们会积极监控服务器并尽快回复。这能确保整个社区都能从讨论和解决方案中受益。
🆘 紧急私信(PM)政策
虽然我们更倾向于所有问题都先通过 Discord 服务器处理,但在特定的紧急情况下,欢迎直接私信我:
- 允许的理由: 你的服务器崩溃,或遇到与我的某个模组/插件直接相关的严重、破坏游戏的错误。
- 要求: 你必须是服务器的所有者。
- 时区: 我处于 (CET/CEST) 时区。
- 私信时间: 请仅在 (布鲁塞尔时间) 上午 10:00 至晚上 10:00 之间发送私信。
我会尽快回复你的私信,以提供帮助并尽我所能解决你的紧急问题。但请理解,无法保证立即回复,私信是一种职业礼节,而非应得的权利。 感谢你的理解与配合!
🛠️ API 集成指南:EconomyManager
对于模组开发者,EcoBal 通过静态的 EconomyManager 类提供所有核心经济功能。使用 silentDeposit 和 silentWithdraw 方法来管理资金而不触发 EcoBal 的内置消息,从而允许你的模组使用自己的自定义反馈。
API 位置: me.andy.ecobal.api.EconomyManager
package me.andy.ecobal.api;
import me.andy.ecobal.config.MessageFormattingData;
import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; import java.util.UUID;
// 注意:此版本为 API 文档简化版。 // 模组中的完整实现包含文件持久化逻辑。
/**
- =========================================================================
ECOBAL 核心经济 API (ECONOMYMANAGER)
=========================================================================
- 玩家经济余额的核心 API 和管理器。
所有函数均为静态且线程安全,可供外部模组使用。
- 用法:通过直接调用静态方法进行集成:
{@code EconomyManager.silentDeposit(uuid, amount);} */ public class EconomyManager {
// 内部余额和名称映射由 EcoBal 管理和持久化。 // 它们不会作为公共字段直接暴露。 // 以下方法提供受控访问。
// --- 数据访问 API ---
/**
- 获取玩家的原始余额。如果玩家没有记录的余额,则返回 0.00
- 且不会创建新账户(非常适合外部模组拉取数据)。
- @param uuid 玩家的唯一 ID。
- @return 玩家的余额,如果未找到则返回 0.00。 */ public static double getPlayerBalance(UUID uuid) { // 实现使用 balances.getOrDefault(uuid, 0.00) return 0.00; // 编译/API 可见性占位符 }
/**
- 从持久化缓存中获取玩家最后已知的用户名。
- 用于显示离线玩家的名称(例如,在排行榜中)。
- @param uuid 玩家的唯一 ID。
- @return 最后已知的名称,如果没有缓存名称则返回 UUID 字符串。 */ public static String getPlayerName(UUID uuid) { // 实现使用 names.getOrDefault(uuid, uuid.toString()) return uuid.toString(); // 编译/API 可见性占位符 }
/**
- 获取当前最高余额,按降序排序。
- @param count 要获取的最高余额数量。
- @return 一个按值降序排序的 UUID 和余额的 LinkedHashMap。 */ public static LinkedHashMap<UUID, Double> getTopBalances(int count) { // 实现流式处理余额,排序并限制为 'count'。 return new LinkedHashMap<>(); // 编译/API 可见性占位符 }
/**
- 获取所有玩家余额完整映射的不可修改副本。
- 适用于复杂的外部排序、同步或完整数据库访问。
- @return 一个不可修改的所有玩家 UUID 及其余额的 Map。 */ public static Map<UUID, Double> getAllBalances() { // 实现使用 Collections.unmodifiableMap(balances) return Collections.emptyMap(); // 编译/API 可见性占位符 }
/**
- 获取原始配置的货币符号(例如 "$"、"€"、"C")。
- @return 配置的货币符号。 */ public static String getCurrencySymbol() { return MessageFormattingData.get().currencySymbol(); }
// --- 事务 API(静默与非静默)---
/**
- 静默地向玩家余额添加金额(API 存款/给予)。
- 不会触发 EcoBal 的内部玩家通知。
- @param uuid 玩家的唯一 ID。
- @param amount 要添加的金额(必须 > 0)。 */ public static void silentDeposit(UUID uuid, double amount) { // 调用内部存款逻辑。 }
/**
- 静默地从玩家余额中减去金额(API 取款/扣除)。
- 不会触发 EcoBal 的内部玩家通知。
- @param uuid 玩家的唯一 ID。
- @param amount 要减去的金额(必须 > 0)。
- @return 如果交易成功(玩家有足够的钱)则返回 true,否则返回 false。 */ public static boolean silentWithdraw(UUID uuid, double amount) { // 调用内部取款逻辑。 return true; // 编译/API 可见性占位符 }
/**
- 将玩家余额设置为特定金额(不能为负数)。
- @param uuid 玩家的唯一 ID。
- @param amount 新余额金额(使用 max(0.00, amount))。 */ public static void setBalance(UUID uuid, double amount) { // 设置内部余额并触发持久化。 }
// --- 实用方法 ---
/**
- 将原始 double 余额格式化为货币字符串(例如 "$1,000.00")。
- 使用配置的货币符号。
- @param balance 余额金额。
- @return 格式化后的字符串。 */ public static String formatBalance(double balance) { return String.format("%s%,.2f", getCurrencySymbol(), balance); }
// 注意:完整模组提供内部方法如 getBalance、deposit // 和 reset* 供命令使用,但如果使用静默方法, // 这些通常不需要用于外部模组集成。 }
功能特性
无缝后端集成
- 专用 API: 在稳定的静态
EconomyManager类中暴露核心方法(getBalance、silentDeposit、silentWithdraw),便于集成到其他模组中。 - 静默交易:
silentDeposit和silentWithdraw允许开发者管理资金而不触发 EcoBal 的内置聊天消息,从而能够使用自己的自定义游戏内反馈。 - 排行榜数据: 新的 API 方法(
getTopBalances、getAllBalances)允许外部模组(例如记分板、玩家列表模组)拉取原始、排序后的余额数据。
可配置的经济核心
- 余额持久化: 所有玩家余额和最后已知用户名会在服务器启动时自动加载,并在关闭时保存,确保离线玩家名称在
/baltop中正确显示。 - 可配置默认值: 通过 JSON 配置文件设置默认的
starting_balance和currency_symbol,可在游戏内通过管理命令调整。 - BalTop 系统: 实现
/baltop,具有可配置的页眉、页脚、前三名格式,以及每页最多 10 名玩家的动态分页。
高级消息格式化
- 富文本支持: 所有游戏内消息(聊天、错误、动作栏)支持标准的传统颜色代码(
&c)和现代的十六进制颜色代码(&#RRGGBB)。 - 交互式消息: 在所有可配置消息中支持复杂的文本功能,如悬停文本(
{text})和点击操作(<action:type,value>)。 - 自定义消息传递: 玩家可以选择其偏好的消息模式:聊天、动作栏或两者,可通过
/ecobal mode进行配置。 - 完整配置自定义: 每条经济消息(余额查询、支付成功/失败、管理操作)都存储在可自定义的 JSON 文件(
message_formatting.json)中,并为chat和actionbar提供单独的格式。
稳健的权限
- Fabric Permissions API v0: 使用标准的 Fabric Permissions API 进行权限检查,如果未检测到权限插件,则内置回退到原版 OP 等级。
- OP 回退逻辑: 如果权限 API 不存在,公共命令(
/bal、/pay、/baltop、/ecobal)对所有人开放(OP 等级 0),而所有管理命令需要 OP 等级 2。 - 细粒度控制: 为每条命令分离权限:
/bal、/pay、/baltop、/eco和/ecobal help。
命令
玩家命令
/balance、/bal(查看自己或其他玩家的余额)/pay <player> <amount>(向其他玩家转账)/balancetop、/baltop、/ecotop [page](查看最富有的玩家)
管理与配置命令(需要 ecobal.eco 权限或 OP 等级 2)
/eco give <player> <amount>(向玩家余额添加金钱)/eco take <player> <amount>(从玩家余额中移除金钱)/eco set <player> <amount>(精确设置玩家余额)/eco start <amount>(设置新玩家的默认起始余额)/eco symbol <symbol>(设置全局货币符号,例如 '$')/ecobal reload(无需重启服务器即可重新加载所有配置文件)/ecobal mode [mode](检查或设置消息传递模式:CHAT、ACTIONBAR、BOTH)/ecobal reset(全局将所有玩家余额重置为起始余额)/eco reset <player>(将单个玩家的余额重置为起始余额)
权限
ecobal.command.use:允许使用/ecobal和/eb帮助命令。ecobal.bal:允许使用/balance和/bal命令。ecobal.pay:允许使用/pay命令。ecobal.top:允许使用/balancetop和/baltop命令。ecobal.eco:允许使用所有管理/eco命令和配置命令。
整合包政策
- 你被允许将 EcoBal 包含在任何整合包中。
- 署名表示感谢,但并非严格要求。
- 请勿直接修改模组的 JAR 文件。
- 整合包本身,或整合包内对本模组的访问,不得出售。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。