配置文件说明
config.yml
主配置文件,位于 plugins/Malkuth/config.yml,用于配置数据库、Redis、文件监听、MiniMessage、上架编辑器、恢复服务、交易安全、邮箱后端和玩家商店方块等全局行为。
# 连接配置
database:
# 是否启用数据库,否则 sqlite
enable: false
# 地址
host: localhost
# 端口
port: 3306
# 用户名
user: root
# 密码
password: "your_password"
# 数据库
database: "malkuth"
# 表名前缀
prefix: "malkuth"
# 使用 Redis 缓存可高效同步跨服数据,避免数据库卡顿
redis:
enable: false
host: 127.0.0.1
port: 6379
# password:
# user
file:
# 是否启用 goods/shop/ui/recycle 等业务配置文件监听;config.yml 自身会常驻监听以便该开关可热切换
enable_listen: true
# 物品溢出配置
# 当玩家背包满时,购买、下架、上架回滚等操作产生的物品如何处理
item-overflow:
# 是否将溢出物品掉落在玩家脚下;关闭时已接入兜底的路径会写入邮箱
drop_on_ground: true
# 掉落的物品是否标记归属;开启后会阻止其他玩家拾取该溢出掉落物
# 同时会阻止漏斗、漏斗矿车吸取他人的归属掉落物,并阻止归属不一致的掉落物互相合并
drop_item_owner: false
# 认主保护时长,单位秒;超过后任何玩家均可拾取
# 设为 0 或负数表示直到掉落物消失前始终只有归属玩家可拾取
drop_item_owner_timeout: 60
# 调试日志配置
# Debug 总开关与各商店模式开关仅通过 /malkuth debug 命令临时启用,重启后恢复关闭
# matcher-detail 会输出大量匹配细节,仅建议短时排查时开启
debug:
matcher-detail: false
matcher-summary: true
max-lines-per-action: 30
# 货币链路:扣款/给予/余额校验/离线补发,排查「钱扣了但没拿到东西」时开启
currency: false
# 数据库链路:交易落库、结算写入,排查数据不一致时开启
database: false
# 锁链路:并发扣款、重复上架时的锁竞争与超时
lock: false
# MiniMessage 文本解析配置
# 在 PAPI 变量解析之后对 UI 标题、物品名/lore、商品展示等文本执行 MiniMessage 标签解析
# (如 <red>、<gradient:#FF0000:#00FF00>、<bold> 等),解析结果会转为 Legacy 色码继续兼容 & 色码。
minimessage:
# 是否启用 MiniMessage 解析,默认关闭以保持历史文本行为。
# Adventure、MiniMessage、Examination 仅作为 compileOnly 依赖,不会打包进 Malkuth.jar。
# 只有服务端提供完整依赖且 Minecraft 版本为 1.16 及以上时,才会加载 API 实现;
# 依赖缺失、版本过低或二进制不兼容时自动降级为传统色码,不影响插件其他功能。
# click、hover、selector、nbt 等交互/数据标签仅降级对应 token,不会让整行回退。
enabled: false
# 上架 GUI 默认商店配置
# /mal market gui、/mal auction gui、/mal request gui 未指定商店时优先使用这里的值。
# 留空时:同模式只有一个商店则自动选择;存在多个可用商店则打开选店界面。
upload_entry:
defaults:
global_market: ''
auction: ''
global_request: ''
# 上架创建编辑器配置
upload_editor:
# 数值输入方式:auto 优先使用牌子输入,不支持或打开失败时回退聊天;sign 仅使用牌子;chat 仅使用聊天栏。
input_mode: auto
# 是否在真实提交前打开独立确认页,默认开启以避免误上架、误扣款。
confirm_before_submit: true
# 未提交草稿的保留时间,单位秒;有效范围 30..1800,默认 300 秒。
draft_timeout_seconds: 300
# 单次数值或文本输入的等待时间,单位秒;超时后本次输入失效,默认 60 秒。
input_timeout_seconds: 60
# 创建事务恢复配置
recovery:
# 当前子服的稳定标识,用于恢复任务认领与审计;单服可保持 local,多服环境应为每个子服设置唯一值。
server_id: local
# 购物车配置
cart:
# 每个玩家购物车最大商品种类数
max-capacity: 50
# 交易安全配置
trade:
# 单次购买允许的最大数量,防止玩家输入超大数字导致数量计算溢出
max-purchase-amount: 999999
# 分布式锁安全配置
lock:
# Redis 锁异常时是否放行交易。默认 false 表示 fail-close,避免跨服并发重复提交
redis_fail_open: false
# 通知配置
notification:
# 是否启用通知系统(拍卖成交、邮箱到达等)
enabled: true
# 每个离线玩家的待投递通知队列上限
max-queue-per-player: 100
# ==============================
# 邮箱后端配置
# ==============================
mailbox:
# 邮箱储存后端
# internal - 使用 Malkuth 内置邮箱系统(默认)
# assiah - 使用 Assiah 邮箱插件
backend: internal
# 已领取邮件自动清理天数(清理 N 天前已领取的邮件,每小时执行一次)
cleanup-days: 7
# Assiah 后端配置(仅 backend: assiah 时生效)
assiah:
# 邮件过期时间(毫秒),0 表示不指定(走 Assiah 自身过期策略)
# 默认 7 天 = 604800000
expire_time: 604800000
# Assiah 插件不可用时是否自动降级到内置邮箱
fallback: true
# 是否把内置邮箱台账中的未领取邮件自动转发到 Assiah(默认开启)
# 关闭后幂等邮件将固定留在内置邮箱,玩家需通过内置邮箱 UI 领取
forward_internal: true
# 转发任务扫描间隔(秒),最小 10 秒
forward_interval_seconds: 60
# 每轮转发的最大邮件数量(1-200)
forward_batch: 50
# ============================================================
# 交易日志
# 将商店交易信息异步写入 plugins/Malkuth/trade-logs/{shopId}/{yyyy-MM-dd}.log
# 每行格式:时间 | shop=... | type=... | buyer=... | seller=... | goods=... | amount=... | price=...
# 此处为全局总开关;需在各商店配置文件中额外设置 trade_log: true 才会记录该商店的交易。
# ============================================================
trade_log:
# 是否启用交易日志写入(全局总开关,默认关闭)
enabled: false
配置项说明
| 配置项 | 说明 | 默认值 |
|---|---|---|
database.enable | 启用 MySQL,false 则使用 SQLite | false |
database.host | 数据库地址 | localhost |
database.port | 数据库端口 | 3306 |
database.user | 数据库用户名 | root |
database.password | 数据库密码 | your_password |
database.database | 数据库名 | malkuth |
database.prefix | 表名前缀 | malkuth |
redis.enable | 启用 Redis 缓存(跨服同步) | false |
redis.host | Redis 地址 | 127.0.0.1 |
redis.port | Redis 端口 | 6379 |
redis.password | Redis 密码(可选) | 空 |
redis.user | Redis 用户名(可选) | 空 |
file.enable_listen | 自动监听 goods/、shop/、recycle/、ui/、currency.yml 与 autosell_chest.yml 的变更;config.yml 自身不受该开关控制,始终常驻监听 | true |
item-overflow.drop_on_ground | 背包满时溢出物品是否掉落在地;关闭时已接入兜底的路径会写入邮箱 | true |
item-overflow.drop_item_owner | 掉落的溢出物品是否标记归属;开启后其他玩家无法拾取,漏斗与漏斗矿车也无法吸取,归属不一致的掉落物不会互相合并 | false |
item-overflow.drop_item_owner_timeout | 认主保护时长(秒),超时后任何玩家均可拾取;0 或负数表示直到掉落物消失前始终只有归属玩家可拾取 | 60 |
debug.matcher-detail | 是否输出逐条 matcher 细节;会显著增加日志量 | false |
debug.matcher-summary | 是否输出每次匹配动作的摘要日志 | true |
debug.max-lines-per-action | 单次匹配动作允许输出的最大日志行数;至少为 1 | 30 |
debug.currency | 是否输出货币链路日志(扣款、给予、余额校验、离线补发) | false |
debug.database | 是否输出数据库链路日志(交易落库、结算写入) | false |
debug.lock | 是否输出锁链路日志(并发扣款、重复上架时的锁竞争与超时) | false |
minimessage.enabled | 在 PAPI 变量替换后启用受限 MiniMessage;仅 Minecraft 1.16+ 且服务端类路径提供完整 Adventure / MiniMessage / Examination 时生效,否则自动使用传统色码 | false |
upload_entry.defaults.global_market | /malkuth market gui 未指定商店时优先使用的全球市场 ID | 空 |
upload_entry.defaults.auction | /malkuth auction gui 未指定商店时优先使用的拍卖行 ID | 空 |
upload_entry.defaults.global_request | /malkuth request gui 未指定商店时优先使用的全球求购 ID | 空 |
upload_editor.input_mode | 编辑器数值输入方式:auto、sign 或 chat;auto 牌子输入失败时回退聊天 | auto |
upload_editor.confirm_before_submit | 新 GUI 创建流程是否在真实提交前打开 upload_create_confirm.yml;不控制旧参数式命令 | true |
upload_editor.draft_timeout_seconds | 未提交草稿保留秒数,运行时限制在 30..1800 | 300 |
upload_editor.input_timeout_seconds | 单次输入等待秒数,运行时限制在 10..600 | 60 |
recovery.server_id | 恢复任务认领和审计使用的稳定子服标识;群组服每个子服应保持唯一 | local |
cart.max-capacity | 购物车最大商品种类数 | 50 |
trade.max-purchase-amount | 玩家输入购买数量、购物车合并数量和发货数量的安全上限,避免超大数量导致溢出 | 999999 |
lock.redis_fail_open | Redis 分布式锁异常时是否放行交易;默认 false 为 fail-close,跨服环境不建议开启 | false |
notification.enabled | 启用通知系统(拍卖成交、邮箱到达等) | true |
notification.max-queue-per-player | 每个离线玩家的待投递通知队列上限 | 100 |
mailbox.backend | 邮箱后端:internal(内置)或 assiah(对接 Assiah 插件) | internal |
mailbox.cleanup-days | 已领取邮件自动清理天数(每小时执行一次) | 7 |
mailbox.assiah.expire_time | Assiah 后端邮件过期时间(毫秒);0 表示不指定,交给 Assiah 自身策略处理 | 604800000 |
mailbox.assiah.fallback | Assiah 不可用时自动降级到内置邮箱 | true |
mailbox.assiah.forward_internal | 是否把先写入内置幂等台账的未领取邮件后台转发到 Assiah;关闭后固定留在内置邮箱 | true |
mailbox.assiah.forward_interval_seconds | 后台转发扫描间隔,运行时最少 10 秒 | 60 |
mailbox.assiah.forward_batch | 每轮扫描的最大邮件数量 | 50 |
trade_log.enabled | 交易日志全局总开关;还需在商店配置里写 trade_log: true 才会记录该商店 | false |
当 mailbox.backend: assiah 时,赠送、管理员发放等常规邮件会直接写入 Assiah。拍卖流拍/中标、全球市场到期退回、全球求购供货退回/成交投递、退款补偿和上架回滚等幂等邮件会先写入 Malkuth 内置邮箱台账,避免跨服或重试时重复发放。
默认 forward_internal: true 会按间隔把这些未领取台账邮件安全搬运到 Assiah,成功后才在内置侧标记完成;Assiah 未就绪时邮件继续保留,等待下一轮或由玩家从内置邮箱领取。若设为 false,幂等邮件不会转发,固定留在内置邮箱。
启用 minimessage.enabled 后只开放颜色、文本装饰、渐变、彩虹与重置标签,并继续兼容 & 色码。click、hover、selector、nbt 等交互或数据标签会作为普通文本降级,不会执行;服务器版本低于 1.16 或缺少完整运行库时也会自动回退。
三个 upload_entry.defaults.* 留空时,同模式只有一个可用商店会自动选择;存在多个商店时打开 upload_shop_select.yml,没有可用商店时拒绝进入编辑器。显式传入 [商店] 时优先使用命令参数。
调试总开关不在 config.yml 里,只能用 /malkuth debug on 临时启用,重启后自动恢复关闭。总开关开启且 debug.matcher-detail: true 时,回收、上传限制和物品匹配链路会输出大量明细日志。它适合排查某一件物品为什么被拒绝或匹配到了哪条规则,不适合作为长期常驻监控;排查完成后建议立即关闭。
debug.currency、debug.database、debug.lock 是分域开关,同样要在总开关开启后才输出。想只看某一类商店的流程日志时,用 /malkuth debug <模式> on 按商店模式单独开启,避免整台服务器刷屏。
trade_log.enabled: true 只是打开全局总闸,还要在具体商店配置里写 trade_log: true,该商店的成交才会写入 plugins/Malkuth/trade-logs/{商店ID}/{年-月-日}.log。
写入是异步的,不占用主线程;内部队列上限 10000 条,极端刷单场景下超出的记录会被丢弃,因此它适合做经营复盘和纠纷取证,不适合当作结算凭据。日志文件不会自动轮转或清理,需要你自己定期归档。
autosell_chest.yml
自动售卖箱独立配置位于 plugins/Malkuth/autosell_chest.yml。默认关闭,开启后玩家可以放置带有 malkuth_autosell_type 标记的售卖箱物品,系统会按间隔扫描箱内物品,并复用 recycle/*.yml 的货币奖励规则估价后发放收益。
enabled: false
tick-interval: 20
hologram-update-interval: 20
unload-chunk-behavior: pause
limits:
default: 1
permission-prefix: 'malkuth.autosell.limit.'
currency:
mode: vault
types:
basic:
display: '&a自动售卖箱'
block: chest
item:
material: chest
name: '&a自动售卖箱'
lore:
- '&7放置后会周期自动出售箱内物品'
- '&7右键打开升级界面'
price-source:
mode: recycle_shop
shop: default_recycle
input:
hopper: true
manual: true
hopper-output: false
merge:
allow-double-chest: false
require-same-owner: true
require-same-type: true
require-same-level: true
large-chest-upgrade-cost-multiplier: 2.0
hologram:
enabled: true
lines:
- '&a自动售卖箱 &7Lv.{level}'
- '&7下次售卖: &f{remaining}'
- '&7倍率: &e{multiplier}x'
levels:
'1':
interval: 60s
multiplier: 1.0
upgrade-cost: 0
max-items-per-run: 64
'2':
interval: 30s
multiplier: 1.25
upgrade-cost: 5000
max-items-per-run: 128
| 配置项 | 说明 | 默认值 |
|---|---|---|
enabled | 自动售卖箱总开关;关闭时放置会被拦截,定时售卖任务不会启动 | false |
tick-interval | 主检查间隔,单位 tick;只有到期箱子才会扫描库存 | 20 |
hologram-update-interval | 全息刷新预留配置,当前售卖箱不会生成全息实体 | 20 |
unload-chunk-behavior | 区块未加载时的处理策略;pause 会延后下次售卖,simulate 当前仍是预留 | pause |
limits.default | 玩家无额外权限时可放置的数量 | 1 |
limits.permission-prefix | 数量上限权限前缀,例如 malkuth.autosell.limit.5 | malkuth.autosell.limit. |
currency.mode | 售卖收益与升级扣费使用的货币模式,可填 vault、playerpoints 或 currency.yml 自定义货币键 | vault |
types.<类型>.display | 类型显示名,用于提示和升级界面 | &a自动售卖箱 |
types.<类型>.block | 放置后允许绑定的方块材质 | chest |
types.<类型>.item | /malkuth autosell give 发放给玩家的物品外观 | 见默认配置 |
types.<类型>.price-source | 价格来源配置;当前实现会复用 recycle/*.yml 中的货币奖励规则估价 | recycle_shop / default_recycle |
types.<类型>.input.hopper | 是否允许漏斗向箱子输入物品 | true |
types.<类型>.input.manual | 是否允许玩家手动放入物品;当前仍保留普通箱子交互 | true |
types.<类型>.input.hopper-output | 是否允许漏斗从售卖箱抽出物品 | false |
types.<类型>.merge.allow-double-chest | 是否允许和相邻售卖箱形成大箱子 | false |
types.<类型>.hologram | 售卖箱全息文本预留配置,当前不会生成全息实体 | 见默认配置 |
types.<类型>.levels.<等级>.interval | 该等级的售卖间隔,支持 ms、s、m、h | 60s / 30s |
types.<类型>.levels.<等级>.multiplier | 该等级的收益倍率 | 1.0 / 1.25 |
types.<类型>.levels.<等级>.upgrade-cost | 升到该等级需要扣除的货币;一级通常为 0 | 0 / 5000 |
types.<类型>.levels.<等级>.max-items-per-run | 单次最多售卖物品数量 | 64 / 128 |
当前自动售卖箱只结算能被回收规则命中且包含货币奖励的物品。它不会发放回收规则中的物品奖励或 Kether 奖励;收益会按售卖箱等级倍率、单次数量上限和配置货币发放给箱主。
玩家商店方块
config.yml 还包含一组玩家商店方块绑定配置,控制 /malkuth place 的目标方块、生成模式与保护行为。
player-shop-block:
enabled: true
target-distance: 5
# BIND_EXISTING: 绑定玩家当前指向方块
# PLACE_ABOVE: 在玩家指向方块上方生成方块并绑定
mode: BIND_EXISTING
bind-existing:
allowed-materials:
- CHEST
- BARREL
place-above:
base-materials:
- STONE
- COBBLESTONE
require-air-above: true
generated-material: CHEST
generated-block: CHEST
hologram:
enabled: true
default-enabled: true
default-lines:
- '&6{owner} 的商店'
- '&f商品数量: &a{goods_count}'
- '&7右键点击打开'
height: 1.2
min-height: 0.0
max-height: 5.0
line-spacing: 0.25
min-line-spacing: 0.1
max-line-spacing: 1.0
refresh-interval-ticks: 200
cleanup-radius: 1.5
max-lines: 6
max-line-length: 80
# 全息渲染方式
# ARMOR_STAND: 每行一个隐形盔甲架,全版本可用,无背景板
# TEXT_DISPLAY: 单个 TextDisplay 实体承载多行,支持背景板与朝向,需要 1.19.4 及以上服务端
render-mode: ARMOR_STAND
# TEXT_DISPLAY 渲染方式的外观参数,render-mode: ARMOR_STAND 时整节不生效
text-display:
billboard: CENTER
alignment: CENTER
background: '#40000000'
see-through: false
shadowed: false
text-opacity: -1
scale: 1.0
view-range: -1
stall-entity:
enabled: false
type: ARMOR_STAND
click-to-open: true
name-display: '&6{owner} 的摊位'
name-visible: true
gravity: false
cleanup-radius: 2.0
default-model:
helmet: PLAYER_HEAD
chestplate: ''
leggings: ''
boots: ''
main-hand: ''
off-hand: ''
use-owner-head: true
small: false
invisible: false
arms: true
display: '&a默认形象'
icon: PLAYER_HEAD
models:
merchant:
permission: 'malkuth.stall.merchant'
display: '&6商人形象'
icon: EMERALD
equipment:
helmet: PLAYER_HEAD
chestplate: 'LEATHER_CHESTPLATE:#8B4513'
leggings: 'LEATHER_LEGGINGS:#5C4033'
boots: 'LEATHER_BOOTS:#2F1B0C'
use-owner-head: true
small: false
invisible: false
arms: true
offset:
x: 0.5
y: 0.0
z: 0.5
facing: BLOCK_FACE
protection:
disable-vanilla-interact: true
deny-break-by-others: true
| 配置项 | 说明 | 默认值 |
|---|---|---|
player-shop-block.enabled | 总开关,关闭后 /malkuth place 与绑定方块交互都会失效 | true |
player-shop-block.target-distance | 玩家视线检测距离;源码会把该值限制在 1~32 之间 | 5 |
player-shop-block.mode | 绑定模式:BIND_EXISTING 绑定现有方块,PLACE_ABOVE 在目标方块上方生成并绑定 | BIND_EXISTING |
player-shop-block.bind-existing.allowed-materials | BIND_EXISTING 模式允许直接绑定的方块材质列表 | CHEST, BARREL |
player-shop-block.place-above.base-materials | PLACE_ABOVE 模式允许作为底座的方块材质列表 | STONE, COBBLESTONE |
player-shop-block.place-above.require-air-above | 生成模式下是否要求目标方块上方必须为空气 | true |
player-shop-block.place-above.generated-material | 生成模式下实际放置并绑定的方块材质 | CHEST |
player-shop-block.place-above.generated-block | 生成模式下的方块来源,支持原版方块或 CraftEngine 方块 ID | CHEST |
player-shop-block.hologram.enabled | 是否启用玩家商店方块全息显示 | true |
player-shop-block.hologram.default-enabled | 新绑定商店方块时是否默认显示全息 | true |
player-shop-block.hologram.default-lines | 默认全息文本,支持 {owner}、{shop_id}、{shop_title}、{goods_count}、坐标等变量 | 见默认配置 |
player-shop-block.hologram.height | 全息第一行相对方块顶部的高度 | 1.2 |
player-shop-block.hologram.min-height / max-height | 玩家命令可设置的全息高度范围,源码会自动夹紧到范围内 | 0.0 / 5.0 |
player-shop-block.hologram.line-spacing | 多行全息的行间距;仅 render-mode: ARMOR_STAND 生效 | 0.25 |
player-shop-block.hologram.min-line-spacing / max-line-spacing | 玩家命令可设置的行距范围 | 0.1 / 1.0 |
player-shop-block.hologram.refresh-interval-ticks | 动态占位符刷新间隔,源码最低按 20 tick 处理 | 200 |
player-shop-block.hologram.cleanup-radius | 重载或刷新时清理残留全息实体的水平扫描半径 | 1.5 |
player-shop-block.hologram.max-lines | 玩家自定义全息最多行数,源码限制在 1~20 | 6 |
player-shop-block.hologram.max-line-length | 玩家自定义单行最大字符数,源码限制在 8~200 | 80 |
player-shop-block.hologram.render-mode | 全息渲染方式:ARMOR_STAND 每行一个隐形盔甲架,TEXT_DISPLAY 单实体承载多行并支持背景板 | ARMOR_STAND |
player-shop-block.hologram.text-display.billboard | 朝向模式:CENTER 始终正对玩家、FIXED 固定朝向、VERTICAL 仅绕垂直轴跟随、HORIZONTAL 仅绕水平轴跟随 | CENTER |
player-shop-block.hologram.text-display.alignment | 文本对齐:CENTER、LEFT 或 RIGHT | CENTER |
player-shop-block.hologram.text-display.background | 背景板 ARGB 颜色,支持 #AARRGGBB 与 #RRGGBB(视为不透明),填 TRANSPARENT 完全取消背景板;非法值回退默认 | #40000000 |
player-shop-block.hologram.text-display.see-through | 是否穿透方块显示,开启后隔墙也能看到全息 | false |
player-shop-block.hologram.text-display.shadowed | 文本是否带阴影 | false |
player-shop-block.hologram.text-display.text-opacity | 文本不透明度,仅 1~255 生效;-1 使用原版默认 | -1 |
player-shop-block.hologram.text-display.scale | 整体缩放倍数,源码限制在 0.1~10.0 | 1.0 |
player-shop-block.hologram.text-display.view-range | 超过该距离不再渲染(格);-1 或非正数使用客户端默认 | -1 |
player-shop-block.stall-entity.enabled | 是否启用摆摊实体系统 | false |
player-shop-block.stall-entity.type | 实体类型;当前已实现 ARMOR_STAND,NPC 仍会跳过生成 | ARMOR_STAND |
player-shop-block.stall-entity.click-to-open | 右键摆摊实体是否打开对应玩家商店 | true |
player-shop-block.stall-entity.name-display | 摆摊实体显示名,支持店主、商店、商品数量和坐标变量 | &6{owner} 的摊位 |
player-shop-block.stall-entity.name-visible | 是否显示摆摊实体名称;name-display 为空时不会显示 | true |
player-shop-block.stall-entity.gravity | 盔甲架实体是否启用重力,建议保持关闭避免模型掉落 | false |
player-shop-block.stall-entity.cleanup-radius | 清理残留摆摊实体时的扫描半径 | 2.0 |
player-shop-block.stall-entity.default-model | 默认盔甲架装备与外观;PLAYER_HEAD 可配合 use-owner-head 显示店主头颅 | 见默认配置 |
player-shop-block.stall-entity.models | 可选模型列表,可用 permission 控制玩家能否选择 | 见默认配置 |
player-shop-block.stall-entity.offset | 实体生成偏移,相对于绑定方块坐标 | 0.5, 0.0, 0.5 |
player-shop-block.stall-entity.facing | 实体朝向:BLOCK_FACE 或 OWNER_FACING | BLOCK_FACE |
player-shop-block.protection.disable-vanilla-interact | 右键已绑定方块打开商店后,是否取消原版交互(如箱子/木桶界面) | true |
player-shop-block.protection.deny-break-by-others | 是否阻止非店主破坏已绑定方块 | true |
默认 ARMOR_STAND 每行一个隐形盔甲架,全版本可用,升级后观感和以前完全一致,但没有背景板。
TEXT_DISPLAY 用一个原版 TextDisplay 实体承载全部行,可以配背景板、朝向跟随和文本对齐,观感更接近成品全息插件,代价是需要 1.19.4 及以上服务端。低于该版本时插件会自动回退 ARMOR_STAND,并在控制台告警一次,不会导致全息消失。
切到 TEXT_DISPLAY 后 line-spacing 不再参与计算,行距由实体自身排版决定;想让全息更紧凑或更大,改 text-display.scale。若服务端不支持缩放所需的内部结构,插件会保持原版默认缩放并告警一次。
如果你只有一个服务器且不需要 MySQL,可以将 database.enable 设为 false,插件会自动使用 SQLite 存储数据,无需额外配置数据库。
如果你使用 BungeeCord 或 Velocity 群组服,需要同时启用 MySQL 和 Redis。所有子服连接同一个数据库和 Redis 实例,即可实现商城数据跨服同步。
file.enable_listen: true 只会监听已经加载的 goods/*.yml、shop/*.yml、recycle/*.yml、ui/*.yml、currency.yml 与 autosell_chest.yml。语言文件不受该开关影响,修改后需要执行 /malkuth reload。
config.yml 自身始终常驻监听,不受这个开关控制,这样你把开关改成 false 或再改回 true 都能立刻生效。保存 config.yml 后插件会重载其中的配置值并重新注册监听:关掉开关时会清理业务文件监听,重新打开时会自动恢复商品、商店、UI、回收和自动售卖箱配置。
如果编辑器采用非原子方式保存,插件可能读到写入中的半个文件。此时缺失的 file.enable_listen 不会被当成「已关闭」,而是保留旧值并在控制台告警,等下一次完整写入再更新。
/malkuth reload 会重载主配置(含 minimessage.*、upload_entry.*、upload_editor.*、recovery.*、player-shop-block.*、item-overflow.*、trade_log.enabled 与 debug.* 中的可配置项)、currency.yml、autosell_chest.yml、shop/、goods/、ui/、recycle/ 与语言文件,并重新建立玩家商店方块绑定缓存。同时它会清除所有未提交的上架草稿、暂停后再恢复创建/拍卖恢复服务、按新配置重启 Assiah 转发任务,重置缓存服务与邮箱后端,清空随机商品结果、购物车和回收统计缓存,刷新商店占位符缓存,关闭在线玩家当前打开的商店界面,并广播一次跨服缓存失效通知。
语言文件
语言文件位于 plugins/Malkuth/lang/ 目录(默认包含 zh_CN.yml 与 en_US.yml),你可以自定义插件中所有提示消息的文本。
格式说明
- 支持
&颜色代码(如&a绿色、&c红色、&e黄色) - 使用
{0}、{1}、{2}等位置变量替换动态内容
消息分类
语言文件中的消息按功能模块分类:
| 分类 | 说明 |
|---|---|
auction-* | 拍卖行相关消息(竞拍成功/失败、余额不足等) |
player-shop-* | 玩家商店消息(购买成功、售罄等) |
shopblock-* / shopblock_hologram-* / shopblock_stall-* | 玩家商店方块、全息显示和摆摊实体消息 |
global-market-* | 全球市场相关消息(筛选、排序、搜索、购买/下架等) |
global-request-* | 全球求购相关消息(创建、供货、审核、取消、过期、通知与 UI 输入) |
upload-* | 上架相关消息(上架成功、黑白名单拦截等) |
edit-* | 编辑商品消息 |
recycle-* | 回收系统消息(回收成功、无可回收物品等) |
order-* | 挂单相关消息 |
buy-* | 购买相关消息(无权限、限购等) |
mailbox-* | 邮箱消息(登录提醒、领取成功等) |
favorite-* | 收藏夹消息 |
cart-* | 购物车消息(加入、移除、结算等) |
gift-* | 赠送消息(输入玩家名、赠送成功等) |
pricecompare-* | 比价搜索消息 |
ui-* | 聊天输入与界面交互提示(搜索/数量输入等) |
item-source-* | 物品源挂钩与解析错误提示 |
matcher-* | 物品匹配拒绝原因提示(source / nbt / locked) |
limit-* | 新限购系统提示(商店级/商品级数量与金额限制) |
command-tax-* | 税收报表命令输出 |
command-extract-* | 默认资源释放命令输出 |
autosell-* | 自动售卖箱发放、放置、升级、售卖和管理提示 |
config-* | 配置加载与热重载提示(goods/shop/ui/currency/recycle) |
cross-server-* | 跨服同步提示 |
schedule-* | 定时任务提示 |
command-* | 命令执行提示(重载、调试、同步等) |
system-* | 系统级提示(权限不足、商店不可用等) |
serializer-* | 配置序列化错误与校验提示 |
banner-* | 启动横幅文本 |
prefix | 全局消息前缀 |