• 如果您发现没有下载许可,请先验证邮箱再进行下载;金锭可通过每日签到或资源出售获取,目前没有其他渠道可获取。
  • 游客, 欢迎您来到九域资源社区,如果您是新人,请前往 论坛公告 板块查看新人引导教程 或者 点我打开
  • 已支持自助资源推荐投送,可在资源“更多选项”中使用金粒投放。
  • 已支持 API 上传资源版本更新,点击了解详情。
  • 已支持付费资源设置购买协议,可在“更多选项”中设置。
  • 全站已支持 Markdown 格式文本编辑器,可自由选择使用 BB 代码或 Markdown 格式。
资源图标

原创 GlobalMarket-宝可梦全球市场[服务端专用][1.12.2] 1.0.0

◆ 游戏版本
1.12.2
◆ 前置/依赖
Pixelmon mod
◆ 模组加载器
  1. Forge

GlobalMarket · 全球市场

Minecraft 1.12.2 · Forge · Pixelmon Reforged 8.4.3

**交易市场:图形化界面、宝可梦原样托管与返还、并发防超卖。

GlobalMarket 主界面

环境要求

项目 版本
Minecraft 1.12.2
Forge 14.23.5.2860(1.12.2 的较新版本均可)
Pixelmon Reforged 8.4.3(必需,本模组就是按这个版本开发的)
Java 8
客户端与服务端都要安装本模组,并且两边用同一个 jar。 两边版本不一致时客户端会提示"GlobalMarket 客户端版本不兼容,请更新模组", 管理员可以用 /globalmarket version 查看双方的版本号。

安装

  1. 把 GlobalMarket-1.0.0.jar 放进服务端和客户端的 mods/ 目录;
  2. 确认 mods/ 里已经有 Pixelmon Reforged 1.12.2-8.4.3(本模组依赖它);
  3. 启动一次服务器,会自动生成:
    • 配置:config/GlobalMarket.cfg
    • 数据库:config/market.db(SQLite,建表与升级全自动)
  4. 进游戏按 J 打开市场(按键可在"控制"里改,分类:游戏),或输入 /globalmarket open。
如果服务器启动时报"没有可用的 SQLite 驱动",把 config/GlobalMarket.cfg 里的 database.driver 改成 embedded,并改用同版本发布的 GlobalMarket-1.0.0-embedded.jar(自带驱动)即可。

玩家怎么用

市场界面(按 J,或输入 /globalmarket open)

  • 6 × 5 = 30 个商品格子,卡片上只有"图标 + 价格"(大额价格写成 15M、1.2k,完整金额在悬浮描述里);
  • 搜索:输入关键词,回车立即搜,停笔也会自动搜;
  • 分类:全部 / 物品 / 宝可梦 / 我的在售;排序:最新、价格升降、等级升降;
  • 筛选:闪光、等级区间、价格区间、个体区间、特性、性格、性别、体型(全部由服务端过滤);
  • 右侧查看器:选中宝可梦后显示它的照片、等级/性格/特性/性别/个体/生命/携带和六边形雷达图;
  • 悬浮描述:鼠标指到货物上显示名字、价格、数量、卖家、上架时间、过期时间等(内容可在配置里自定义);
  • 操作:左键选中,右键快速买 1 个(自己的挂单一律是"下架",不能买自己的货);
  • 底部导航:浏览 / 我的在售 / 上架 / 历史 / 邮箱。

上架

  • 物品:从背包 9×4 格子里选一格 → 填单价和数量 → 确认;
  • 宝可梦:图形化列表(队伍优先,其次 PC),选中后填单价。 已经在市场上的宝可梦不会再出现在列表里,队伍里的最后一只不能上架;
  • 上架后货品由市场托管(从背包/PC 取走并原样保存),下架或过期会原样退回。

邮箱与历史

  • 市场邮箱:买家背包满、卖家离线、下架返还、回滚补偿、挂单过期都会进这里。 退回的物品/宝可梦按图标格子展示(6×4 一页):物品带数量角标、宝可梦显示官方照片、钱显示金色金额; 鼠标悬停看完整信息,左键领取这一封,底部按钮一键全部领取;
  • 交易历史:我的购买 / 我的出售,含数量、单价、实付、税金与时间。

命令

命令 说明
/globalmarket open [玩家] 打开市场界面(和快捷键 J 一样;给别的玩家打开需要 OP)
/globalmarket 或 /globalmarket listings 在聊天框里列出市场(不开界面)
/globalmarket items / pokemon 只看物品 / 宝可梦
/globalmarket search <关键词> 搜索
/globalmarket selling 我的在售
/globalmarket sell <槽位0-35> <单价> [数量] 上架背包物品
/globalmarket sellpokemon party <0-5> <价格> 上架队伍宝可梦
/globalmarket sellpokemon pc <箱子> <格子> <价格> 上架 PC 宝可梦
/globalmarket buy <编号> [数量] 购买
/globalmarket cancel <编号> 下架自己的挂单
/globalmarket history <bought|sold> [页码] 交易历史
/globalmarket mail 查看/领取邮箱
/globalmarket info <编号> 查看某条挂单详情
/globalmarket version 查看版本、协议、经济与数据库状态(排错第一步)
/globalmarket reload 重载配置(需要权限)
/globalmarket admin ... remove / release / inspect / recover / audit(需要管理员权限)

权限节点

权限 作用
globalmarket.admin 管理员子命令(/globalmarket admin ...)
globalmarket.reload 重载配置
globalmarket.bypass.blacklist 不受物品/宝可梦黑名单限制
globalmarket.bypass.limit 完全不受上架数量限制
自定义(见下) 按权限分配不同的上架上限

权限来源:混合端(CatServer 等)读 Bukkit 权限(LuckPerms、PermissionsEx 等都生效), 纯 Forge 端读 Forge 权限(默认按 OP 等级,装了权限模组则由它接管)。

按权限分配上架上限(limits.permission-tiers)

默认所有玩家用同一套上限(limits.daily-listing-limit 每日上架次数、 limits.max-active-listings 最大在售数)。想让不同权限的玩家有不同额度,就在配置里加档位:

代码:
limits {
    I:daily-listing-limit=20
    I:max-active-listings=100
    # 每行一条:<权限节点>=<每日上架次数>,<最大在售数>
    # 两个数字都可以写 0 = 不限制
    S:permission-tiers <
        globalmarket.limit.vip=50,100
        globalmarket.limit.mvp=150,300
        globalmarket.limit.staff=0,0
     >
}
  • 上例含义:有 globalmarket.limit.vip 的玩家每天最多上架 50 次、最多在售 100 件;MVP 更高; 有 globalmarket.limit.staff 的玩家完全不限;
  • 同时拥有多个档位时取最宽松的一档(两个数字各自取最大;写 0 的那个维度直接变成不限制), 所以档位只会放宽、不会低于上面那两项基准值;
  • 档位是权限节点,玩家加权限即可生效、不需要改配置也不需要用命令(LuckPerms:/lp user <玩家> permission set globalmarket.limit.vip true);
  • 想改权限节点的名字就改这一行,改完 /globalmarket reload 生效;玩家重进或等下一次打开市场界面后,界面上的"今日剩余上架次数"也会跟着变。

配置一览(config/GlobalMarket.cfg)

分类 键 默认 说明
market enabled true 是否启用市场
economy provider auto 经济来源:auto(有 Vault 经济就用 Vault,否则用 PokéDollars)/ vault / pixelmon
tax enabled / rate true / 5.0 是否收交易税 / 税率(%)
limits daily-listing-limit 20 每人每日上架次数(0 = 不限制)
limits max-active-listings 100 每人最大在售数(0 = 不限制)
limits permission-tiers 空 按权限分配上架上限(格式见上一节)
price minimum / maximum 1 / 999999999999 允许的单价区间
listing allow-item / allow-pokemon true / true 是否允许上架物品 / 宝可梦
listing expire-hours 0 挂单过期小时数,0 = 永不过期;>0 时过期自动下架并进邮箱
listing expire-check-seconds 60 过期扫描间隔(秒,最小 10)
delivery enabled true 是否启用邮箱
general timezone Asia/Shanghai 用于"每日次数"和时间的时区
database type sqlite 数据库类型:sqlite(本地文件 config/market.db)/ mysql
database mysql-host / mysql-port 127.0.0.1 / 3306 MySQL 地址与端口
database mysql-database globalmarket 库名(不存在会自动创建)
database mysql-username / mysql-password root / 123456 MySQL 账号
database mysql-create-database true 库不存在时自动建库(utf8mb4)
database driver server 仅 SQLite 用:server(用服务端自带驱动)/ embedded(用随身驱动)
compat require-supported-pixelmon-version true Pixelmon 版本不匹配时是否停用市场
blacklist items / pokemon 空 上架黑名单(物品 modid:name;宝可梦 Species 或 Species:Form)
tooltip show-icon-info true 悬浮描述里是否保留图标自带信息
tooltip item-lines / pokemon-lines 空 悬浮描述模板,每行一条;留空 = 内置默认
改完执行 /globalmarket reload(需要 globalmarket.reload 权限)即可生效,不用重启。 expire-hours 从 0 改成非 0 后,之前挂上去的"永不过期"挂单也会按新设置过期。 升级模组后,配置里已经废弃的选项会被自动清理,日志里会列出删了哪些。

经济:Vault 还是 PokéDollars

默认 economy.provider=auto:

  • 混合服务端(CatServer / Mohist 等)装了 Vault + 经济插件(EssentialsX、CMI 等)→ 自动使用 Vault, 玩家余额、扣款、收款全部走该插件,货币名也用它(例如 Coins);
  • 纯 Forge 服务端(没有 Bukkit/Vault)→ 自动使用 Pixelmon PokéDollars,不需要任何配置;
  • 想强制某一种就把 provider 写成 vault 或 pixelmon。强制 vault 但没挂上时会退回 PokéDollars 并打警告, 服务器不会因此起不来;
  • 混合端的插件比 Forge 的模组加载得晚,所以市场会在服务端完全启动后、以及每次用钱之前自动重试挂钩—— 启动日志里那几行 "Vault is installed but ..." 属于正常现象,插件加载完就会自动用上;
  • /globalmarket version 的 economy: 一行会显示当前实际用的是哪种经济,排查时先看它。

数据库:SQLite(默认)/ MySQL

默认是 SQLite 单文件(config/market.db),零配置。多台服务器想共用一个市场、或者想集中备份时, 把 database.type 改成 mysql(同段的 mysql-* 就是连接参数,默认 127.0.0.1:3306 / root / 123456 / 库名 globalmarket):

  • 库不存在会先自动建库(utf8mb4);已经存在的库会直接复用;
  • 需要 MySQL 5.7.6+ / MariaDB 10.2+;
  • 需要服务端有 MySQL 驱动:混合端(CatServer/Spigot)的 libraries/ 里通常自带, 纯 Forge 端把 mysql-connector-java-x.y.z.jar 放进 config/globalmarket/jdbc/ 即可;两处都没有时启动日志会直接说明;
  • 改完 type 需要重启服务端;/globalmarket version 会显示当前用的数据库与位置;
  • 切换数据库不会自动搬数据,但两边表结构一致,用任何 SQL 工具都能直接导出导入。

货物悬浮描述自定义

市场里鼠标指到货物上显示的那段文字,服务端改一次对所有玩家生效:

代码:
tooltip {
    B:show-icon-info=true
    S:item-lines <
        &f{name}
        &a{lang:globalmarket.gui.row.price} {currency}{price}
        &7{lang:globalmarket.gui.row.seller} {seller}
        &8{left_line}
        -
        &8{lang:globalmarket.gui.hint.buyFast}
     >
    S:pokemon-lines <
        &f{name}
        &7{lang:globalmarket.gui.row.level} {level}  &7{lang:globalmarket.gui.row.nature} {nature}
        &8{lang:globalmarket.gui.row.iv} {iv_total}  &8{lang:globalmarket.gui.row.held} {held}
        &a{lang:globalmarket.gui.row.price} {currency}{price}
        &8{left_line}
     >
}
  • 每行一条;写一行 -(减号)就是一条分隔线;留空则用模组内置的默认描述;
  • 颜色代码:&7 灰、&a 绿、&c 红、&l 加粗(也可以直接写 §);
  • 常用占位符:{name} 名称、{price} 单价、{price_compact} 单价(1.2k 写法)、{currency} 货币符号、 {total} 总价、{remaining} 剩余、{quantity} 总量、{seller} 卖家、{listed} 上架时间、 {expires} 过期时间、{left} 剩余时间、{left_line} 整行"剩余 xx"(永不过期时整行消失);
  • 宝可梦专用:{species} {dex} {form} {form_name} {nickname} {level} {nature} {ability} {gender} {shiny} {held} {ball} {ot} {iv_total} {hp} {max_hp} {moves} {growth};
  • {lang:词条键} 会取玩家客户端语言的文本,例如 {lang:globalmarket.gui.row.price} 中文显示"价格"、英文显示"Price";
  • 渲染后没有任何可见文字的行会自动省略;写错的占位符会原样显示,方便你排错。

常见问题

客户端提示"GlobalMarket 客户端版本不兼容,请更新模组"? 客户端与服务端的 jar 版本不一致,两边换成同一个 jar;用 /globalmarket version 看双方版本。

界面文字显示成原始 key(例如 globalmarket.gui.title)? 确认客户端是中文语言;必要时按 F3+T 重载资源。

挂单过期了,但邮箱里没有? 先看 listing.expire-hours 是不是 0(0 = 永不过期)。过期一律进邮箱,卖家在线时还会收到一句聊天提示; 过期扫描每轮最多处理 5 条,量大时分会几轮清完。

为什么买不了自己的挂单? 有意限制。自己的挂单请用"下架"。

宝可梦上架失败? 常见原因:这只宝可梦已经在市场上、是队伍里的最后一只、在上架黑名单里、正在战斗、 价格超出 price 区间、达到每日或最大在售上限。

权限给了但上限没变? 混合端读的是 Bukkit 权限(LuckPerms 等),纯 Forge 端读 Forge 权限; 确认玩家确实在线、权限节点和配置里写的一字不差,然后 /globalmarket reload,再让玩家重进或用 /globalmarket version 确认。


数据与备份

  • 默认全部数据在 config/market.db(SQLite 单文件),备份它就等于备份市场; 用 MySQL 时数据在对应的库里,按平时的数据库备份流程做即可;
  • 结构升级由模组自动完成,升级不会丢数据;
  • 管理员可用 /globalmarket admin audit / recover 处理异常挂单与遗留交易。

许可与致谢

  • 不含任何 Pixelmon 的资源或代码,运行需要玩家自行安装 Pixelmon Reforged; 请遵守 Pixelmon 的授权条款,不要随包分发 Pixelmon。
作者
lapin2022
下载
9
查看
221
首次发布
最后更新

Ratings

0.00 星 0 星

来自lapin2022的更多资源