经济系统
EMC 高级商店内置完整的多货币经济体系,包含经济接口对接、宏观调控和价格限制三大系统。
多货币支持
插件通过 EconomyManager 统一管理所有货币类型。
已对接的经济插件
| 插件 | 货币类型 | 说明 |
|---|---|---|
| Vault | 金币 | 主要货币,支持所有基于 Vault 的经济插件 |
| PlayerPoints | 点券 | 第二货币,直接 API 对接 |
| PAPI 自定义货币 | 任意 | 通过 PlaceholderAPI 变量读取余额,命令执行扣除/充值 |
PAPI 自定义货币
通过「自定义货币商城」模块,可以定义任意第三方货币并用于商店交易。工作原理:
- 余额读取 — 解析 PAPI 占位符获取数值(如
%myplugin_balance%) - 扣除 — 执行控制台命令(如
myplugin take {player} {amount}) - 充值 — 执行控制台命令(如
myplugin give {player} {amount})
配置示例(shops/currency-shop.yml):
currencies:
medal:
display-name: "勋章"
symbol: "★"
balance-placeholder: "%myplugin_medal%"
withdraw-command: "myplugin takemedal {player} {amount}"
deposit-command: "myplugin givemedal {player} {amount}"
categories:
medal-shop:
name: "勋章商店"
currency: "medal"
icon: "DIAMOND"
items:
diamond_sword:
material: DIAMOND_SWORD
display-name: "钻石剑"
price: 50
amount: 1
buy-limit: 1
commands:
- "say {player} 购买了钻石剑"
混合支付
商品可配置需要多种货币同时支付。例如一件物品需要 50 金币 + 10 点券:
- 系统先检查所有货币是否足够
- 全部足够后依次扣除
- 任一扣除失败自动回滚已扣金额
经济宏观调控
根据全服物品的供需量自动调整价格,防止经济崩盘。
核心公式
当前价格 = 基础价格 × (1 + 调控系数 × (回收量 - 出售量) / 基准量)
- 回收量 — 玩家卖给商店的总数量
- 出售量 — 商店卖给玩家的总数量
- 调控系数 — 价格波动幅度因子
- 基准量 — 交易量基准值
价格衰减
长时间无交易的物品价格逐步回归基准价:
衰减因子 = 1.0 - 衰减速率 × (距上次交易时间 / 衰减阈值)
新价格 = 基础价格 + (当前价格 - 基础价格) × 衰减因子
配置示例
# economy-control.yml
enabled: true
adjust-factor: 0.1
base-volume: 1000
decay-rate: 0.01
decay-threshold-ms: 86400000
update-interval-ticks: 12000
sell-ratio: 0.5
items:
diamond:
base-price: 100.0
min-price: 50.0
max-price: 500.0
fixed: false
iron_ingot:
base-price: 10.0
min-price: 5.0
max-price: 50.0
fixed: false
golden_apple:
base-price: 200.0
min-price: 200.0
max-price: 200.0
fixed: true
| 参数 | 默认值 | 说明 |
|---|---|---|
adjust-factor | 0.1 | 调控系数,越大价格波动越剧烈 |
base-volume | 1000 | 交易量基准值 |
decay-rate | 0.01 | 价格衰减速率 |
decay-threshold-ms | 86400000 | 衰减触发阈值(毫秒),默认 24 小时 |
update-interval-ticks | 12000 | 价格更新间隔(tick),默认 10 分钟 |
sell-ratio | 0.5 | 回收价与购买价的比率 |
固定价格锚点
将物品设置为 fixed: true 后,该物品价格不受市场供需影响,始终保持基准价。
上架价格限制
防止恶意定价,管控全球市场、拍卖行、玩家商店的上架价格。
# price-limiter.yml
enabled: true
default-max-multiplier: 5.0
default-min-multiplier: 0.1
use-dynamic-base: true
items:
diamond:
max-price: 500
min-price: 10
| 参数 | 说明 |
|---|---|
default-max-multiplier | 默认最高价格倍率(基准价 × N) |
default-min-multiplier | 默认最低价格倍率 |
use-dynamic-base | 是否以动态调控价格为基准(否则使用固定基准价) |
拥有 emcshop.pricelimit.bypass 权限的玩家可绕过价格限制。
交易邮箱
离线时收到的物品/金币自动存入邮箱,上线时提示领取:
- GUI 界面一键领取所有物品
- 邮箱容量可配置,VIP 可扩容
- 过期物品自动清理
- 命令:
/mailbox
PAPI 占位符
插件注册的 PlaceholderAPI 占位符:
| 占位符 | 说明 |
|---|---|
%emcshop_balance% | 玩家主货币余额 |
%emcshop_points% | 玩家点券余额 |
%emcshop_shop_count% | 玩家开设商店数 |
%emcshop_total_trades% | 玩家总交易次数 |
%emcshop_total_spent% | 玩家总消费额 |
%emcshop_total_earned% | 玩家总收入 |
%emcshop_market_listings% | 当前上架数 |
%emcshop_mailbox_count% | 未领取邮箱物品数 |
%emcshop_shop_rating% | 商店评分 |
%emcshop_rank_trade% | 交易额排名 |
%emcshop_lottery_pool% | 当前彩票奖池 |
%emcshop_spin_free% | 今日剩余免费转盘次数 |
%emcshop_daily_refresh% | 每日商店刷新倒计时 |
%emcshop_coupon_count% | 持有优惠券数 |
%emcshop_fav_count% | 收藏夹物品数 |
%emcshop_item_price_<物品ID>% | 某物品当前动态价格 |