本帖最后由 z1224748848 于 2019-2-3 21:34 编辑






完结撒花 <3

字数统计:约15569字




-> 传送门:
     BukkitDev 原帖 > 点击前往
     MCBBS 搬运贴 > 点击前往





欢迎来到 Shopkeepers 中文 Wiki!

关于 Shopkeepers

Shopkeepers是一个可以让您自定义村民以任何您想要的价格售卖物品的Bukkit插件. 您可以设置为无限出售物品的管理员商店, 您也可以设置玩家商店, 需要使用箱子供货.

BukkitDev 页面: http://dev.bukkit.org/bukkit-plugins/shopkeepers/
Wiki(英文): https://github.com/Shopkeepers/Shopkeepers-Wiki/wiki
Bug 追踪器: https://github.com/Shopkeepers/Shopkeepers/issues
源码: https://github.com/Shopkeepers/Shopkeepers/

Maven 存储库(正式版): http://nexus3.cube-nation.de/repository/releases/
Maven 存储库(开发快照版): http://nexus3.cube-nation.de/repository/snapshots/

特别鸣谢

  • 所有贡献者! (点击前往GitHub查看)
  • MasterMithrandir 创作了当前Logo!
  • cube-nation.de 托管正式版和开发版本的Maven存储库

赞助作者

如果您喜欢这个插件, 请考虑一下通过赞助作者来支持其开发工作吧:

  • 赞助 blablubbabc (当前维护作者: 2013年 12月 - 现今)
  • 赞助 nisovin (前作者: 2012年 8月 - 2013年 12月)

为所有通过赞助来保持作者工作动力的人说一句大大的 "感谢" !


Minecraft-Servers-Listing.comTRS Game Serversterminalserver.us
Minewindmercurialmusic

想要为插件维护做出自己的贡献? 寻找一位记录员!

需要我自己来完成的事情越少, 我就有越多的时间来更新插件. 因此, 我正在寻找愿意参与插件维护的人. 例如: 维持帮助文档(Wiki)随着插件更新而更新内容, 改进现有的帮助文档, 或帮助管理Issues和回答用户的问题.

如果您是拥有编写Bukkit插件经验的程序员, 或者有关于如何为项目做出贡献的idea, 请告诉我!

如果你感兴趣, 随时通过 dev.bukkit.org 或者是 Spigot 论坛 PM联系我.



命令 | Commands

通常不需要命令来创建或设置商店. 因此, 列出大多数的命令仅管理员可使用. 有关每一条命令所需要的权限节点信息可以在 权限 | Permissions 页面找到.

插件帮助(Help)

运行 /shopkeepers help 命令可以列出所有可用命令列表. 玩家没有所需权限来运行的命令会被自动过滤掉.

通过命令创建 Shopkeeper 商店

可以通过看向一个方块同时运行 /shopkeepers [商店类型] [实体类型] 指令来创建管理员商店. 玩家可以在配置文件中允许玩家通过命令创建商店时看向一个箱子运行同样的命令来创建一个玩家商店.

重载插件(Reload)

你可以使用 /shopkeepers reload 命令来重载插件. 这将会保存所有修改同时重载配置文件.

调试模式(Debug)

使用 /shopkeepers debug 命令来开关调试模式. 此模式会向控制台输出调试信息(有时很有用). 另外还有一个 /shopkeepers checkitem 命令, 将会输出手持物品和下一格物品的调试信息.
然后 /shopkeepers check 命令将会输出一些有用的统计信息, 比如已加载的区块数量, 已加载的Shopkeepers商店数量还有运算AI和重力所需的时间.


列表(List)

使用 /shopkeeper list [player|'admin'] [页码] 来列出所有玩家商店(如果未指定玩家或'admin'), 如果指定玩家或者是'admin'将会显示指定玩家拥有的商店或所有管理员商店. 显示内容将会被分成很多页.

删除(Remove)

使用 /shopkeeper remove [player|'all'|'admin'] 来删除所有玩家商店 (如果未指定玩家或'admin'), 指定玩家的所有商店, 或者所有管理员商店. 此命令需要玩家通过 /shopkeeper confirm 命令确认执行.

远程控制(Remote)

/shopkeepers remote \<商店名> 允许你远程打开一个 管理员 商店的交互菜单来刷新它们的名字, id或者UUID.

转移从属关系(Transfer)

使用 /shopkeepers transfer \<新主人>来转移一个Shopkeepers商店的主人关系给另一玩家. 使用此命令时必须看向一个Shopkeepers商店的源箱子.

交易权限(Trading permission)

使用 /shopkeepers setTradePerm \<商店ID> \<交易权限|-|?> 来设置, 删除 (-) 或者显示 (?) 一个通过Shopkeepers商店ID, UUID或名字指定的管理员商店当前的交易权限. 玩家若想和此Shopkeepers商店交易需要拥有此此交易权限, 可选作为全局交易权限需求.

出租(Hire)

使用 /shopkeepers setforhire 来设置一个玩家商店为出租状态. 手持租下此商店的花费物品, 运行此命令时需要看向一个Shopkeepers商店源箱子. 此功能允许其他玩家通过花费一定物品来暂时获得此Shopkeepers商店的主人关系.



插件统计信息 | Plugin Statistics

插件使用 bStats 搜集 匿名 统计数据, 这有助于统计使用Shopkeepers的服务器数量, 哪一个Minecraft版本服务器使用Shopkeepers最多, 以及不同功能的使用频率.

当前信息搜集列表:
  • 常规信息:
    • 使用该插件的服务器数
    • 服务器的在线玩家数
    • 是否正版模式
    • Minecraft服务器版本
    • 插件版本
    • 服务器核心数
    • 系统架构
    • 操作系统
    • 服务器所在国家
    • Java版本
  • Shopkeepers统计信息:
    • 联动插件使用情况 (Citizens, Towny, WorldGuard, Gringotts, 其他类似Vault的经济插件)
    • Shopkeepers商店数量
    • 是否使用玩家商店
    • 是否在配置中启用了某些功能 (比如. World Guard/Towny兼容, Citizens NPC商店, 即时保存, 彩色名字, 箱子保护, 清除不活跃的商店, 税率, 严格型交易物品检查, 交易记录, 禁用原版村民, ...)
    • 包含商店的世界数量


所有信息都可以在这里公开查看: https://bstats.org/plugin/bukkit/Shopkeepers/

您可以通过编辑bStats配置文件(plugins/bStats/config.yml)来为服务器上的所有插件禁用bStats的数据统计功能, 或者仅通过设置Shopkeepers的配置选项 enable-metricsfalse 来防止Shopkeepers发送统计数据.


配置管理员商店 | Admin Shop Setup

此页面介绍了管理员商店特有的创建与编辑过程.
想要了解创建/编辑常规商店的帮助信息, 请查看 编辑商店 | Editing Shops 页面.

设置交易项

想要修改管理员商店的交易项目, 先打开编辑器窗口.


窗口中的每一列代表一个交易项.
最顶行为 第一售价物品, 第二行为 第二售价物品, 最底一行为 需要出售的商品.
在一个交易项中 第一售价物品商品 是必填项, 而第二售价物品是可选项.
你只需简单地将物品放入窗口中即可. 你最多可以在一个Shopkeepers商店上设置八个交易项.

完成交易项的编辑后, 只需要关闭窗口即可保存.
然后右键一下商店, 就能看到你刚刚编辑的交易项!
它应该适用于交易任何物品, 包括被附魔物品或成书.




NPC商店 | Citizen Shopkeepers

Shopkeepers支持 (实验性功能)将 Citizens NPC 创建为商店对象 (默认禁用, 详情查看 配置文件 | Configuration 页面). 这个功能需要安装 Citizens 插件.

此功能允许使用实体来创建商店, 这是一个Shopkeepers本体不支持的功能, 因为这么做会大幅度增加维护插件的工作量. 举个例子就是玩家NPC和各种怪物类型, 也支持Citizens NPC的附加功能, 比如自定义行为 (说话, 行走, 以及其他的行为.).

创建Citizens NPC商店所需的权限节点为 shopkeeper.citizen.

你可以通过运行 /shopkeeper npc 命令来创建一个管理员Citizens NPC商店.
另外, 你可以为已经存在的Citizens NPC添加一个 'shopkeeper' 标记, 然而, 更推荐使用上述命令来创建Citizens NPC商店.


管理员Citizens NPC商店默认情况下以村民作为实体类型. 你需要使用Citizens命令来更改NPC的实体类型.

玩家Citizens NPC商店将自动设置为名字为店主的玩家实体. 插件还有一个配置选项来决定玩家是否有权限自主重命名Citizens NPC商店的玩家实体 (默认值: false).



权限 | Permssions

通常情况下默认权限配置就能让Shopkeepers在安装后正常运行: 拥有OP权限的玩家允许使用所有功能, 常规玩家拥有权限与商店实体交易, 运行基础命令, 和创建基本玩家商店.

如果你想做些修改, 你可能需要使用一个 权限插件 然后配置它来添加或删除指定玩家或权限组的特殊权限.

此页面包含所有可用权限的简短介绍. 一个 default: true 表示默认情况下所有玩家拥有此权限.

可以在插件的 plugin.yml 中找到一个绝对是最新的列出所有 静态 权限节点以及它们子权限节点和默认值的列表.

  1. permissions:
  2.     # 命令权限节点
  3.     shopkeeper.help:
  4.         description: 显示插件命令帮助
  5.         default: true
  6.     shopkeeper.reload:
  7.         description: 重载插件
  8.         default: op
  9.     shopkeeper.debug:
  10.         description: 允许开关调试模式以及运行调试命令
  11.         default: op
  12.     shopkeeper.list.own:
  13.         description: 列出自己拥有的所有商店
  14.         default: true
  15.     shopkeeper.list.others:
  16.         description: 列出他人拥有的所有商店
  17.         default: op
  18.     shopkeeper.list.admin:
  19.         description: 列出所有管理员商店
  20.         default: op
  21.     shopkeeper.remove.own:
  22.         description: 通过命令删除自己拥有的所有玩家商店
  23.         default: op
  24.     shopkeeper.remove.others:
  25.         description: 通过命令删除他人拥有的所有玩家商店
  26.         default: op
  27.     shopkeeper.remove.all:
  28.         description: 通过命令删除所有的玩家商店
  29.         default: op
  30.     shopkeeper.remove.admin:
  31.         description: 通过命令删除所有的管理员商店
  32.         default: op
  33.     shopkeeper.remote:
  34.         description: 通过命令遥控一个管理员商店
  35.         default: op
  36.     shopkeeper.transfer:
  37.         description: 转移玩家商店的从属关系
  38.         default: op
  39.     shopkeeper.settradeperm:
  40.         description: 为管理员商店设置交易权限
  41.         default: op
  42.     shopkeeper.setforhire:
  43.         description: 设置一个商店为出租状态
  44.         default: op

  45.     # 全局权限节点
  46.     shopkeeper.trade:
  47.         description: 允许与商店交易
  48.         default: true
  49.     shopkeeper.hire:
  50.         description: 允许租下商店
  51.         default: true
  52.     shopkeeper.bypass:
  53.         description: 绕过玩家商店保护 (允许管理他人拥有的玩家商店)
  54.         default: op
  55.     # 动态最大商店数权限节点: 默认的最大商店限制在配置文件中配置.
  56.     # shopkeeper.maxshops.<最大数量>
  57.     #   description: 玩家可以拥有的最大商店数量, 只能使用配置文件中设置的值
  58.     #   default: false

  59.     # 商店种类权限
  60.     shopkeeper.admin:
  61.         description: 允许创建及修改管理员商店
  62.         default: op
  63.     shopkeeper.player.sell:
  64.         description: 允许创建(玩家)出售商店
  65.         default: false
  66.     shopkeeper.player.buy:
  67.         description: 允许创建(玩家)收购商店
  68.         default: false
  69.     shopkeeper.player.trade:
  70.         description: 允许创建(玩家)交易商店
  71.         default: false
  72.     shopkeeper.player.book:
  73.         description: 允许创建(玩家)图书出售商店
  74.         default: false
  75.     shopkeeper.player:
  76.         description: 允许创建任意玩家商店
  77.         default: true
  78.         children:
  79.             shopkeeper.player.sell: true
  80.             shopkeeper.player.buy: true
  81.             shopkeeper.player.trade: true
  82.             shopkeeper.player.book: true

  83.     # 商店实体权限
  84.     shopkeeper.sign:
  85.         description: 允许创建牌子商店
  86.         default: true
  87.     shopkeeper.citizen:
  88.         description: 允许创建 Citizens(NPC) 商店
  89.         default: op
  90.     shopkeeper.entity.*:
  91.         description: 允许创建任何实体类型的商店
  92.         default: op
  93.     # 动态实体类型权限:
  94.     # 你可以在这里找到所有可用的实体类型名:
  95.     # [url]https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/EntityType.html[/url]
  96.     # 此权限节点使用小写实体类型名.
  97.     # shopkeeper.entity.<实体类型>:
  98.     #   description: 允许创建指定实体类型的商店
  99.     #   default: false

  100.     # 经典权限
  101.     shopkeeper.player.normal:
  102.         description: 允许创建及修改(玩家)出售商店
  103.         default: true
  104.         children:
  105.             shopkeeper.player.sell: true
  106.     shopkeeper.villager:
  107.         description: 允许创建村民商店
  108.         default: true
  109.         children:
  110.             shopkeeper.entity.villager: true
  111.     shopkeeper.witch:
  112.         description: 允许创建女巫商店
  113.         default: true
  114.         children:
  115.             shopkeeper.entity.witch: true
  116.     shopkeeper.creeper:
  117.         description: 允许创建爬行者商店
  118.         default: true
  119.         children:
  120.             shopkeeper.entity.creeper: true

  121.     # 星号: 包含所有的权限
  122.     shopkeeper.*:
  123.         description: 允许访问一切
  124.         default: op
  125.         children:
  126.             shopkeeper.help: true
  127.             shopkeeper.reload: true
  128.             shopkeeper.debug: true
  129.             shopkeeper.list.own: true
  130.             shopkeeper.list.others: true
  131.             shopkeeper.list.admin: true
  132.             shopkeeper.remove.own: true
  133.             shopkeeper.remove.others: true
  134.             shopkeeper.remove.all: true
  135.             shopkeeper.remove.admin: true
  136.             shopkeeper.remote: true
  137.             shopkeeper.transfer: true
  138.             shopkeeper.settradeperm: true
  139.             shopkeeper.setforhire: true
  140.             shopkeeper.hire: true
  141.             shopkeeper.trade: true
  142.             shopkeeper.bypass: true
  143.             shopkeeper.admin: true
  144.             shopkeeper.player: true
  145.             shopkeeper.sign: true
  146.             shopkeeper.citizen: true
  147.             shopkeeper.entity.*: true
复制代码



配置玩家商店 | Player Shop Setup

此页面介绍了具体到特定种类玩家商店的配置和编辑步骤. 有关大体上如何配置商店的帮助信息, 请查阅 基础商店编辑 | Editing Shops.

设置交易项

在开始前, 我们先设置一个 出售型 的玩家商店:

首先, 玩家需要在箱子内摆放他想出售的物品. 如果想出售成书的话必须使用 图书出售 类型的商店(在这种情况下, 您必须把想要出售的成书放在箱子内, 然后使用书与笔来当供货).




现在打开商店编辑器窗口. 顶行将显示从箱子内发现的各种商品物. 底行将显示这些物品的价格. 如果还未指定价格, 将会出现一个屏障图标. 想要修改价格的话, 左键绿宝石(或屏障)来提升价格, 右键来降低价格. 也可以按住潜行键然后一次改动10个单位. 您也可以左右键点击来以同样的方法修改出售物的数量.




当全部设置好之后, 只需要关闭窗口来保存.

当一个玩家通过玩家商店完成一次交易后, 玩家购买的商品将会从箱子内移走, 取而代之的是玩家这次交易所支付的绿宝石. 由于游戏的一些限制, 玩家就算把箱子内的某物品都买光了, 商店上面的交易项也不会更新. 然而, 如果玩家试图买箱子内并不存在的货物, 将以将会失败, 对话框会自行关闭.

对于 收购 商店来说, 您至少得在供货箱中放入一个您想收购的物品, 放入很多个也可以. 这样做才能在商店编辑器中显示这种物品来设置收购价格, 不管您把目标物品放在箱子的哪个格子都是可以的. 一个收购商店只能收购基础物品, 并不能收购附魔物品, 附魔书, 或者已经启用了的地图.

您可以在 配置文件 | Configuration 中设置在收购和出售商店中使用的 货币(物品).

交易 用来交易任何基础物品. 然而, 这使得配置它有点更难了. Mouro001 创建了一个简短的小教程: (图片稍后翻译) https://imgur.com/82NnbPU



安装与更新 | Installation and Updating

安装

  • 请确认你正在运行 受支持的 Bukkit / Spigot 服务器核心 最新版. 你可以在此处找到有关服务器设置的更多信息: https://www.spigotmc.org/wiki/spigot/
    请注意插件基于CraftBukkit构建(或Spigot). Bukkit缺少让插件正常工作的必要API. 这代表 其他服务端 (Tekkit, Forge, 以及其他.) 将不能运行此插件.
    其他 CraftBukkit 或 Spigot 衍生物/分支 _可能_可以运行, 但它们不在我的技术支持范围内. 所以如果你运行这些服务端时遇到问题, 请先尝试能否在最新版Spigot服务端上重现该问题.
  • 从这里 下载 最新版的Shopkeepers: https://dev.bukkit.org/projects/shopkeepers/files
    每一个正式更新都有写明支持的 Bukkit / Minecraft 版本.
  • 关闭服务器. 将下载的 Shopkeepers.jar 拖入服务器的插件文件夹. 重启服务器.
  • 检查服务器的日志看是否出现问题, 然后检查所有东西都在正常工作.

安装成功后你可能想要进行一些自定义化操作:

  • Shopkeepers 将会在其文件夹中创建一个 config.yml 文件. 有很多个配置选项供你自定义化Shopkeepers. 前往 配置文件 | Configuration 页面来查阅更多信息.
  • 如果你使用了某款权限插件, 你可能希望给你的玩家和管理员分配他们需要的权限节点. 前往 权限 | Permissions 页面来查阅更多信息.
  • 当你配置好所有东西后你就可以开始 创建商店 | Creating Shops 了!
  • 当你运行时遇到问题 (或者有其他想问的问题), 可以看看 常见问题 | Frequently Asked Questions 页面.

目录结构

Shopkeepers 将在服务器的插件文件中创建其插件文件夹: <服务器目录>/plugins/Shopkeepers/

整个目录结构如下所示:

  1. ../plugins/ # 服务器的插件文件夹
  2.     +--Shopkeepers/ # 插件文件夹
  3.         |-- config.yml # 配置选项及提示信息
  4.         |-- save.yml # 已保存的Shopkeeepers商店信息 (商店, 交易项, ..)
  5.         |-- # 其他语言文件 (可选项)
复制代码

升级

通常情况下只需关闭服务器 -> 替换 Shopkeepers.jar 文件 -> 重启服务器即可完成大多数Shopkeepers更新.

然而, 为了防止出现问题,你在更新时应该始终遵循这些步骤:

  • 阅读你所安装版本之后 所有更新日志. 有时更新日志会包含有关潜在问题和迁移数据的说明. 如果你从一个非常古老的版本更新到新版, 当最新版不再支持从你安装的版本迁移数据时甚至可能需要先更新为两者之间的较新版.
  • 备份 更新前的Shopkeeper插件文件夹, 以防数据丢失.
  • 有时配置选项会出现改动, 比如添加新的配置选项或者删除旧配置选项. 查看更新日志以寻找 配置文件迁移 需要进行哪些手动操作. 如果运行时遇到问题, 先尝试删除(记得备份)配置文件, 使插件在下次启动时重新创建默认配置文件, 然后重新配置一遍配置选项.


基础商店编辑 | Editing Shops

当你创建好了自己的商店后(管理员/玩家商店), 你可以执行各种操作来进一步定制你的商店, 或者删除它. 此页面描述了一些编辑商店的通用操作.

打开 "商店编辑器"

通过潜行时右键商店, 你可以打开该商店的 "商店编辑器". 它的界面看起来就像一个普通的箱子, 但是包含一些特殊按钮. 你可以通过点击这些预制的按钮来对商店进行一些特定操作.

示例: 一个(空的)管理员商店的编辑器

重命名商店

如果想要重命名商店的名字, 点击命名牌按钮后在聊天栏中输入商店的新名字.

插件将会使用 配置文件 | Configuration 中指定的正则表达式来验证你输入的新名字. 此正则表达式规定了允许作为名字的字符, 以及名字的最大最小长度.

更改商店实体变体

某些商店实体类型提供了可在编辑器窗口中选择的多种变体类型. 举个例子, 你可以在通过点击(村民实体)商店编辑器中的羊毛块按钮来循环选定村民的职业.

删除商店

如果你想删除这个商店, 你可以点击编辑器右下角的骨头按钮. 请三思而后行, 此操作不可撤销!

配置交易项

每种不同的商店类型都有不同的交易项配置方法. 可以在 配置管理员商店 | Admin Shop Setup玩家商店配置 | Player Shop Setup.

创建商店 | Creating Shops

Shopkeepers 支持多种管理员/玩家商店, 它们的区别在于如何配置交易项, 以及商店从哪里供货.

并且Shopkeepers支持非常多的对象类型, 即商店在世界中的展示形式.

商店类型

默认可用的 管理员商店类型 有: 暂时只有 系统(admin).

默认可用的 玩家商店类型 有: 常规(normal) (或称 出售(sell)), 收购(buy), 交易(trade), 图书出售(book).

每种商店类型在配置交易项的时候都有轻微的不同.

每种商店类型都有一个对应的权限节点, 如果玩家想要创建该类型商店就需要此权限节点. 更多信息请查看 权限 | Permissions.

对象类型

对象类型即商店在世界中展示形式, 默认情况下是一只村民实体.

默认可用的商店对象类型有: 牌子(sign), Citizen (即 NPC), 或者 生物名.

如果想要以指定对象类型创建商店, 玩家需要与之对应的一个权限节点. 更多信息请查看 权限 | Permissions.

另外, 每种对象类型都可以在配置文件中全局禁用. 更多信息请查看 配置文件 | Configuration.

一些对象类型可能会默认禁用.

可用实体类型

理论上你可以使用任何实体来充当Shopkeepers的商店实体. 然而, 不是所有的实体类型都能正确运行: 有些实体可能会做一些怪异但无害的行为, 也有一些实体可能会对你服务器的数据造成严重问题.

因此, 只有一小部分被预先测试通过的实体类型默认启用.

如果你想尝试(责任自负)其他实体类型是否能充当Shopkeepers商店实体, 你需要在 配置文件 | Configuration 中手动启用它. 你可以在Spigot 文档中找到所有可用的实体类型.

(请注意: 此列表为服务端上所定义的实体类型, 并不仅为生物/怪物)

此外, 只有当玩家拥有所需的权限节点时. 才能使用每个启用的实体类型: shopkeeper.entity.<实体类型> (或者使用 shopkeeper.entity.* 来允许使用所有实体类型). 举个例子: shopkeeper.entity.villager

默认情况下玩家只能创建村民, 女巫和爬行者商店 (如果这些实体类型未被禁用).

为了兼容旧版本Shopkeepers, 有一些实体类型拥有等效的其他权限节点: shopkeeper.villager, shopkeeper.witchshopkeeper.creeper. 请尽量避免使用这些权限节点, 因为它们可能会在未来版本中删除.

每一个商店实体的AI都会被重写, 所以不必担心它们会乱跑, 并且它们不会受到伤害. 它们还会在离开生成点几秒钟后被传送回去.

如果你想使用其他的实体类型, 请不要错过Shopkeepers和Citizens的联动功能! 你可以在 NPC商店 | Citizen Shopkeepers 页面中找到更多信息.

创建商店

管理员商店

管理员商店无需供货, 并且可以交易任何你想交易的物品.

若要创建一个管理员商店, 只需要看向一个(非箱子)方块时运行命令 /shopkeeper [对象类型]. 这样就可以在你看向的方块上创建一个商店.

想要了解关于如何配置商店或交易项请查看 基础商店编辑 | Editing Shops管理员商店配置 | Admin Shop Setup 页面.

玩家商店

玩家商店从一个箱子中获取交易所需的货物.

若要创建一个玩家商店, 你需要一个 村民刷怪蛋 (或者其他在配置文件中指定的物品). 请确认在商店创建过程中处于非创造模式.

首先, 你可以对着空气右键 (不要对着方块) 来循环选择不同的 商店类型 (常规(normal), 图书出售(book), 收购(buying), 以及交易(trading)). 你也可以潜行时右键来循环选择 Shopkeeper 对象类型 (村民, 牌子, 女巫, ..).

然后, 对着一个箱子右键来选定它, 接着对着另一个方块右键来在该位置放下商店.

你也可以在看向一个箱子时使用 /shopkeeper [商店类型] [对象类型] 命令来创建商店, 但是这会使商店实体出生在箱子上.

[商店类型] 和 [对象类型] 是可选参数. 当未指定时, 将会使用你当前的选定 (就是通过手持商店创建工具点击来选择的类型), 或者将使用默认值.

想要了解关于如何配置商店或交易项请查看 基础商店编辑 | Editing Shops管理员商店配置 | Admin Shop Setup 页面.


创建一个经济系统 | Creating an Economy

这些是我(其实是 nisovin)关于如何在服务器中构建一个Minecraft经济系统的建议. 请注意这些建议都基于我对于一个RPG服务器该如何运转的观点. 对于其他种类的服务器, 特别是PVP服务器, 具有一些需要在构建良好经济系统时考虑的平衡性问题.

对于一个良好的游戏内经济系统来说, 三个东西最重要: 让玩家获得货币的方式, 鼓励玩家使用货币与其他玩家交易, 回收货币的方式.

分发货币

为了让一个经济系统运作, 玩家必须要有显而易见的方式获得货币. 在Minecraft中, 玩家最开始需要一个不设立商店就能赚到钱的方式, 应使他们通过做基本Minecraft生存行为就能赚到钱. 基本Minecraft生存行为包括: 挖矿, 杀怪, 以及种田.

让玩家有能力赚钱最简单的方法就是设立系统商店, 向玩家收购各种凋落物. 举个例子, 你可以设立一个商店收购圆石, 一个收购小麦, 还有一个收购怪物掉落物, 以及其他各种东西. 你需要确保这条赚钱之路并不是非常高利润. 在某些时候, 如果有一个玩家需要大量圆石, 你应该鼓励他设立一个比系统价格高的商店来收购它.

你还可以使用一些插件来使玩家在做出基本Minecraft生存行为时自动掉落钱. 举个例子, 在玩家杀死怪物时有几率掉落金钱就非常好.

鼓励交易

为了使一个经济系统真正的良好运作, 玩家必须尽量与其他玩家交易. 货币仅在玩家可以拿来买东西时才有价值. 给予玩家设立商店的权限是理所当然的第一步. 在主城规划一片区域, 比如用作开放市场, 玩家可以在此设立商店. 这样可以使玩家更容易找到东西来买, 而不用在诺大的城市中苦苦寻找商店.

如果你使用了一个普通的货币商店, 你也可以在市场附近设立一个地方来让玩家通过虚拟货币与实物货币的转换来"存款"和"取款". 你还可以在附近放一个末影箱, 然后玩家就可以用它来存放一些比较重要/值钱的东西(就像一个保险箱).

现在, 鼓励玩家之间交易的最好方式就是不给基础物品设立系统商店. 如果有出售/收购基础物品的系统商店存在, 玩家就都会选择来这里消费, 因为非常方便, 并且永久有效. 然而, 如果没有系统商店了, 玩家就只能去浏览其他玩家的商店来寻找他们想买的物品, 并且他们如果想要卖掉物品也只能通过设立自己的商店来出售.

回收货币

根据之前的方案, 货币在游戏中凭空产生, 现在你也需要使货币凭空消失来防止通货膨胀. 如果你不停散布货币, 也鼓励玩家之间交易, 却没有回收货币的方案, 那么玩家就会越来越富有直到货币变得不再值钱. 想要修复这个漏洞, 你还是需要通过系统商店出售一些东西. 在魔兽世界里, 这被称作一个 "gold sink". 这是指一种一个玩家花了钱, 但是这笔钱并不会流入其他玩家账户的方式, 借此将货币从经济系统中回收.

你肯定不想出售基础材料, 因为这会使玩家和其他玩家交易的热情消退. 取而代之的是, 你应该出售一些玩家无法用常规方式获得的物品. 一个挺好的商品就是Shopkeepers本身. Shopkeepers插件允许玩家通过村民刷怪蛋创建商店, 所以出售村民刷怪蛋的话是个不错的选择.

Minecraft原版也有一些常规方式不可能得到的物品. 你可以试试出售带有高级附魔的武器, 比如亡灵杀手VII 和击退IV. 如果你禁用了末地, 你也可以出售末地石和龙蛋. 你也可以出售各种刷怪蛋或者刷怪笼. 你还可以通过操控合成表来迫使一个物品变得稀有. 举个例子, 你可以禁用末影箱的合成表然后在商店中出售它. 这实在有太多可能性.

你甚至可以出售区域保护服务. 每个人都想把他们的家保护起来, 这是玩家自己做不到的事情. 一个很好的方案就是: 创建一个出售一种特殊的书的商店, 可以叫做"土地产权证", 并且由管理员担保签发. 玩家可以买一本这样的书然后成为广大地主的一员, 可以通过消耗它来创建一块保护区域.

想要讨论或分享你关于建立Minecraft服务器经济系统的建议?

看看这里的评论区: https://dev.bukkit.org/projects/shopkeepers/pages/creating-an-economy


已知问题 | Known Issues

这篇文档列出了由不同Minecraft客户端/Spigot服务端版本或已知Minecraft/Spigot问题造成的Shopkeepers会出现的问题. 如果你遇到了问题, 先看看这个列表有没有包含你的问题, 并且它可能提供一些关于如何解决问题的帮助信息.

你可能想知道的Shopkeepers潜在问题:

  • 如果没有正确完成一项成书交易, 玩家有时仍然可以打开然后阅读那本书, 只要他们在关闭商店时以足够快的手速打开他们背包里面的临时假书. 我对此无能为力了.
  • 在Shopkeepers早期版本, 服务器崩溃和不正确的关服行为可能导致非Citizens Shopkeepers商店实体复制成多个.
  • 配置选项 always-show-nameplates 在Minecraft 1.8中无效.
  • 插件与旧版本Bukkit的兼容性没有经过测试. 如果你遇到了任何问题, 请告诉我, 我回去看看有没有什么我能做的.
  • 有很多实体类型仅供实验性用途. 使用它们可能造成各种各样奇怪的问题. 详情请查看v1.50的更新日志.
  • 在最新的Minecraft 1.8.x的版本中, Minecraft交易逻辑有轻微的变动(因此Shopkeepers的交易逻辑也变动了): 如果交易要求物品带有一些特殊数据(比如自定义名称, Lore, 附魔, 以及其他.), Minecraft仅在玩家提供的物品已包含所有的特殊数据后就允许完成交易. 玩家提供的物品可以再包含一些其他的数据.
  • 在Minecraft 1.9和Minecraft 1.10中, 任何类型的刷怪蛋都可以作为商店创建工具. 如果你正打算升级到此版本, 你可能需要将配置文件中指定的附加值设置为'0'来使刷怪蛋正确工作. 在Minecraft 1.11及其更高版本, 配置文件中有一项新的配置选项来指定用于商店创建工具的刷怪蛋的类型(详情请查看v1.83的更新日志).
  • 使用骷髅或僵尸变种的Shopkeepers实体在更新到Minecraft 1.11及其更高版本之后再退回低版本便不能再被加载(会丢失).
  • 如果你正在运行一个低于Minecraft 1.11版本的服务器, 你不能再对Shopkeepers实体循环选择僵尸或骷髅的变种. 已存在的使用僵尸/骷髅变种的Shopkeepers实体将会回滚到普通的僵尸/骷髅.
  • 这里有一个公开的Minecraft Bug, 会导致某些交易中的错误物品被删除(当交易的两个要求物品是相同种类但带有不同的NBT数据, 并且玩家把物品放反了时): https://bugs.mojang.com/browse/MC-121932
  • 如果你是用的是Spigot服务端, 并且有一片地区聚集有大量的村民, 请考虑一下禁用 tick-inactive-villagers 这项Spigot服务端设置: 启用此功能可能使聚集有村民的区块永久加载(从而使服务器卡顿).


常见问题 FAQ | Frequently Asked Questions

目录

  • 为什么我不能从我的商店买东西?
  • 它不显示交易结果!
  • 商店不接受我放进去的头颅物品!
  • 我无法把交易结果物品从GUI上拿下来!
  • 颜色设置似乎在配置文件中无效! 它们变成了怪异的颜色!]
  • 我不能在Shopkeeper的名字中使用颜色代码!
  • 你将会添加对于货币插件的支持吗(和Vault的联动)?
  • 我该如何在一些类似WorldGuard插件阻止我时创建Shopkeepers商店?
  • 我可以对一个Shopkeeper设置超过8个交易项吗?
  • 你可以改为只是重新平衡, 或者能让管理员能够配置常规村民的交易项吗?
  • 我服务器的timing报告显示, Shopkeepers正在占用我服务器的大量处理时间!
  • 噢! 明智的Nisovin啊, 我该如何做才能创建一个成功的经济系统?
  • 我是一个插件开发者: 我该如何确认一个实体是否是Shopkeeper实体?
  • 我能看看源码吗?
  • 我想问一个问题/我遇到一个问题!

为什么我不能从我的商店买东西?

你不能从自己的商店里面买东西. 此限制有助于出现错误时减少重复错误. 此项措施并不能完全防止出现bug, 但是可以使它们变得不那么明显.

这里有一个配置选项控制这个行为: prevent-trading-with-own-shop

它不显示交易结果!

你提供的物品可能和交易所要求的物品不匹配. Minecraft要求玩家提供的物品和交易要求物品包含有相同的内部数据.

并不是所有内部数据对于玩家来说都是可见的: 你可能需要使用其他插件来比较物品的内部数据 (举个例子. 可以试试PowerNBT插件).

通常当你的服务器上创建同一种类的物品会出现有轻微不同的变体时, 就会造成此问题. 一些插件可能会对其创建的物品添加一些内部数据, 为了追踪其来源, 主人, 或者物品的一些其他信息.

如果你启用了Debug模式, 就可以在交易失败时在控制台看到关于此次交易失败的详细信息.

商店不接受我放进去的头颅物品!

在Shopkeepers的旧版本当中, 由于Spigot的一个bug, 可能不支持包含有自定义材质的头颅物品, 那样可能会导致Shopkeepers保存那样的物品时使数据文件出错. 如果你想尝试能否在你的服务器上保存这种物品(责任自负!), 有一个配置选项控制这个行为: skip-custom-head-saving

关于头颅物品你可能遇到的另一个问题: 头颅物品可能会从Mojang的服务器中更新自己的纹理材质然后更新物品的内部数据. 如果这导致你手中的头颅物品数据和Shopkeepers商店记录的物品数据不匹配, 那么Shopkeepers就会拒绝交易.

我无法把交易结果物品从GUI上拿下来!

如果交易GUI显示了交易结果物品, 但是你却拿不下来, 这可能是由:

  • Shopkeepers可能不支持这种点击方式. 试试使用普通的左键点击把它拿下来.
  • 服务器和客户端之间"看到"的可能存在差异: 请确认你使用的Minecraft客户端版本和服务端版本匹配并且你没有使用奇怪的mod.

    除此之外: 一些插件可能修改客户端和服务端之间传出/传入的数据(举个例子. 跨版本兼容型插件, 或试图隐藏玩家视角的一些其他可见的物品数据的插件, 等等..). 试试你能不能在一个其他啥插件都没装的服务器上重现这个bug, 然后试着找出是哪个插件导致了这个问题.

打开Debug模式可能会在交易失败时在控制台记录更多信息.

颜色设置似乎在配置文件中无效! 它们变成了怪异的颜色!

试试把配置文件中的编码配置选项改成"UTF-8". 然后确保你的配置文件的确是UTF-8编码的. 你可以使用各种工具, 举个例子, 使用NotepadPlusPlus来查看一个文件的编码类型.

我不能在Shopkeeper的名字中使用颜色代码!

每次重新命名Shopkeepers时, 首先会验证新名称. 插件使用你可以在配置文件中找到并修改的正则表达式来验证Shopkeepers的新名字. 此正则表达式指定可以使用哪些字符作为名称以及名称必须至少/至多多少字符. 默认情况下, 此正则表达式可能不包含颜色代码 &. 因此, 为了允许在Shopkeepers名字中使用各种颜色, 你必须先将该字符添加到配置文件中的正则表达式中.

你将会添加对于货币插件的支持吗(和Vault的联动)?

对不起, 不会. 交易接口实际上仅适用于物品交易. 举个例子, 在你放入交易要求的物品之前, 交易结果物品甚至都不会出现. 作为替代品, 你可以使用另一个插件来创建某种可以将虚拟货币转换成实体货币(绿宝石)的银行. 通过这种方式, 玩家可以把虚拟货币存款/取款成绿宝石来买买买. 你可能会对Gringotts或者GoldIsMoney这两个插件感兴趣.

我该如何在一些类似WorldGuard插件阻止我时创建Shopkeepers商店?

你可以先试试启用配置文件中的 bypass-spawn-blocking 配置选项后是否解决问题. 如果这没有作用, 你就需要在对方插件中寻找如何禁用此生成限制的方法了. WorldGuard就有一个配置选项来指定其会阻止哪种生物的生成. 这是mobs的子配置选项, 叫做 block-creature-spawn. 如果此选项为空, 你需要在这里添加所有你想阻止生成的生物类型, 确保没有写Villager. 另一个可行方案就是设置WorldGuard的 block-plugin-spawning 配置选项(同样是mobs的子选项)为 false, 但这可能会产生其他副作用.

我可以对一个Shopkeeper设置超过8个交易项吗?

我感觉一个Shopkeeper设置8个交易项都有点多了, 如果你需要出售更多商品, 最好设置很多个Shopkeeper. 然而, 如果你坚持要这么做, 当然可以设置更多个交易项, 只是需要更多的时间.

对于玩家商店, 它实际上相当容易. 交易物品将会使用箱子内的前八种. 所以, 只需要先设置这些物品的价格, 接着重新排列箱子内的物品, 然后你就可以设置其他物品的价格了.

对于系统商店, 唯一的方法就是修改保存下来的save.yml文件然后手动添加交易项. 请注意我不赞成也不会帮助你这么做. 如果你尝试这样做然后弄乱了你保存的文件, 你需要自己修复. 在我看来, 你怎么样都不应该这么做. 拥有多个具有各种商品分类的Shopkeepers商店明明是一种更加有好的方式(可能需要在附近立一些牌子).

你可以改为只是重新平衡, 或者能让管理员能够配置常规村民的交易项吗?

这里已经有一款插件来提供村民贸易二次平衡以及定制贸易功能了, 你可以在这里找到它: https://dev.bukkit.org/projects/rebalance-villagers

我服务器的timing报告显示, Shopkeepers正在占用我服务器的大量处理时间!

在给你提供提升性能的建议并解释Shopkeepers运行时间之前, 有几个方面你需要知道:  

  • 看看低速任务实际运行的频率(PerTick和Count). 如果这些任务很少运行, 那么它对性能的影响其实不足为之担心. 举个例子: 一些任务可能只在插件启动(或者你重载插件)时运行. 运行一些很繁忙的任务可能是你的服务器正在自动保存数据(通常它本身就很慢).
  • 如果此任务的确运行的很频繁, 那么它可能是以下东西之一:
    • 'LivingEntityAI' 负责处理实体的重力和看向附近玩家的行为.
      Shopkeeper实体默认情况下禁用了它的Minecraft原生AI, 这保证了Shopkeeper实体的行为数保持在绝对最小. 在早期版本中插件禁用了绝大部分实体AI然后让Minecraft负责处理其余的事情. 然而, 即使这样, Minecraft仍然在后台执行了Shopkeeper实体不需要的AI行为任务(例如, 村民会定期搜索附近的村庄, 这甚至导致额外的区块加载).
      你可以使用 use-legacy-mob-behavior 配置选项切换为使用旧的AI处理模式, 然后比较此更改之前和之后服务器的整体性能变化. 在任何一种情况下, Shopkeeper实体的性能影响应该低于自然产生的Minecraft实体的性能影响. 但是使用Shopkeepers插件来处理Shopkeeper实体的一些行为的话, 你应该能够观察到这对于服务器整体性能的好处 (因为Minecraft花在更新实体和其他后台任务上的时间减少了).
    • 'WorldListener' 会对区块加载产生应答同时生成与之对应的Shopkeepers. 如果你的某区块内包含有很多Shopkeepers, 那自然需要更多的时间来加载. 如果这确实影响了你的服务器, 那么你很可能在很小的范围内有过多的Shopkeepers. 试试减少受影响区域内的Shopkeepers数量.
      比起为所有的玩家商店规划一小片密集的市场区域, 考虑一下在世界各地设置几个市场并限制玩家可以在那里创建的商店数量, 或让你的玩家在世界各地更自由地创建商店. 然而, 请注意让你的玩家扩散到世界各地同时也会增加需要加载的区块数量. 因此, 这涉及平衡服务器的整体平均性能与某些密集区域潜在的峰值性能问题.
      你可以通过配置文件和权限节点来限制玩家可以创建的上商店数量. 那么玩家就会被迫删除暂时不需要的商店. 同时还有一个配置选项是删除许久未登录玩家的商店(虽然这带来了启动插件所需的时间变长的副作用).
    • 牌子商店会阻止方块的物理更新.
      方块的物理更新在Minecraft中执行的挺频繁的. Shopkeepers插件会对此产生应答以防止牌子商店被摧毁. 如果这在你的服务器上造成了性能问题, 请考虑减少方块物理更新的次数(例如检测并禁止高频红石), 或直接在配置文件中禁用牌子商店.
    • 保存Shopkeepers数据.
      默认情况下插件会在每次玩家编辑Shopkeeper结束后保存数据. 如果你有很多玩家经常和Shopkeeper交互, 那么改成定期保存数据反而性能会更好. 配置文件中有一项可以禁用(编辑完就)立即保存数据(的行为)(save-instantly).


关于提升性能的建议: 减少数量. 这里有一篇不错的博文说明了原理.

  • 尝试减少加载的区块数量和区块的加载频率.
    如果你有很多玩家经常在世界中高速穿行, 并且还是用高视距, 你自然会得到很多需要处理的区块加载/卸载任务. 始终注意一下由Minecraft特性或插件造成的, 没有玩家却需要额外加载的区块, 或者可能阻止区块卸载的行为. 实际加载的区块数量越多, 定期世界保存需要保存的数据也越多.
    或许可以考虑一下将服务器的市场区规划到离出生点远一点的地方, 这样每当玩家加入服务器时, 就不需要额外加载Shopkeepers.
  • 尝试减少实体的数量.
    在Minecraft中每加载一个实体就会造成一定的性能开销. 尽管每个Shopkeeper实体都尽可能禁用了不需要的AI, 但同样也会产生一定的影响.

噢! 明智的Nisovin啊, 我该如何做才能创建一个成功的经济系统?

Nisovin实际上对此有点想法. 你可以在 创建一个经济系统 | Creating an Economy 页面阅读他的建议.

我是一个插件开发者: 我该如何确认一个实体是否是Shopkeeper实体?

每个Shopkeeper实体都应该标有 'shopkeeper' 的元数据标签, 所以你可以检查它来确认是否是Shopkeeper实体.

我能看看源码吗?

当然可以, 就在这里.

我想问一个问题/我遇到一个问题!

提交一个Issues是获取帮助或报告插件问题的最佳方式.

在提交Issues之前:

  • 看看以下文档是否已经包含有你的问题的答案:
  • 看看是否已经有一个和你的问题相同的Issues.

在报告问题前:

  • 尝试在以下服务器环境来重现你遇到的问题:
    • 使用最新版的Spigot和Shopkeepers.
    • 没有其他插件.
    • 没有任何服务端/客户端mod.


在报告问题时:

  • 提供你正在使用的Minecraft, Spigot和Shopkeepers版本.
  • 提供问题的详细说明, 并提供有助于重现问题的尽可能多的信息.
  • 如果可以, 带上一个在没有其他插件的Spigot服务器中关于如何重现问题的分布说明.


配置文件 | Configuration

通常情况下, 默认配置就已经提供了使Shopkeepers安装好就可以直接使用的配置合理值. 如果你想要做一些修改, 应该保留原有的注释, 上面有你需要的帮助信息.

然而, 当插件添加缺失的配置选项时(通常是因为插件更新), 所有注释都会被删掉. 你依然可以在这里找到默认的配置文件, 格式化你的配置文件同时还能找回所有注释.

或者, 也可以在这里这里找到一份实时更新的配置文件.

如果自定义配置后遇到了问题, 试试看使用默认配置时问题是否还存在.

  1. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  2. # Shopkeepers 配置文件
  3. # Wiki 文档: [url]https://github.com/Shopkeepers/Shopkeepers-Wiki/wiki/Configuration[/url]
  4. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

  5. # 决定是否需要迁移配置文件. 请不要手动修改!
  6. config-version: 1
  7. # 进入插件的调试模式.
  8. debug: false
  9. # 是否匿名报告插件使用信息到 [url]https://bStats.org[/url]
  10. # 所有上传的信息都可以在这里看到:
  11. # [url]https://bstats.org/plugin/bukkit/Shopkeepers[/url]
  12. enable-metrics: true

  13. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  14. # Shopkeeper 数据
  15. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

  16. # 保存的数据文件所使用的编码格式. 如果为空, 将会使用你系统的默认编码.
  17. # 如果你保存文件时遇到问题, 比如特殊字符不能正确保存,
  18. # 试试把这个配置选项设置为 'UTF-8'.
  19. file-encoding: "UTF-8"
  20. # 是否在每次编辑完成一个 Shopkeeper 后立即保存数据文件.
  21. # 如果禁用, 将会每5分钟/插件关闭时保存一次数据.
  22. # 如果你的服务器拥有很多玩家/Shopkeeper,
  23. # 出于性能考虑还是关闭这个选项比较好.
  24. save-instantly: true

  25. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  26. # 插件兼容性
  27. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

  28. # 插件是否应定期验证当前应该生成的所有 Shopkeeper 实体是否实际存在.
  29. # 在你遇到 Shopkeeper 实体莫名其妙消失的问题时应该尝试启用该配置选项.
  30. enable-spawn-verifier: false
  31. # 如果启用, Shopkeepers 会尝试绕过阻止生成Shopkeeper实体的插件
  32. # (比如. 领地保护插件).
  33. bypass-spawn-blocking: true
  34. # 如果启用, Shopkeepers 会尝试绕过阻止与Shopkeeper实体交互的插件.
  35. bypass-shop-interaction-blocking: false

  36. # 如果启用, 玩家会仅允许在拥有建筑权限或设置了 'allow-shop' 的 WorldGuard 区域创建商店.
  37. enable-world-guard-restrictions: false
  38. # 如果启用(同时还需要启用 enable-world-guard-restrictions 配置选项),
  39. # 玩家仅允许在设置了 'allow-shop'的 WorldGuard区域内设置商店,
  40. # 然而, 玩家仍然需要箱子的使用权限才能完成商店配置.
  41. # 同时如果他们不能在此区域内防止箱子的话,
  42. # 就需要有其他人提前配置好商店箱子,
  43. # 并且需要禁用 require-chest-recently-placed 配置选项.
  44. require-world-guard-allow-shop-flag: false
  45. # 如果启用, 玩家只能在被 Towny 指定为商业区的地方创建商店.
  46. enable-towny-restrictions: false

  47. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  48. # 创建商店 (或删除商店)
  49. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

  50. # 用于创建玩家商店的工具.
  51. shop-creation-item: VILLAGER_SPAWN_EGG
  52. # 商店创建工具的显示名. 设置空值以忽略.
  53. shop-creation-item-name: ""
  54. # 商店创建工具的Lore. 设置空值以忽略.
  55. shop-creation-item-lore: []
  56. # 是否阻止商店创建工具的正常使用. 拥有忽略权限(通常是管理员)的玩家可以忽略此设置.
  57. prevent-shop-creation-item-regular-usage: false
  58. # 当点击商店删除按钮后, 是否返还商店创建工具.
  59. deleting-player-shop-returns-creation-item: false

  60. # 是否允许玩家使用 /shopkeeper 命令创建商店.
  61. create-player-shop-with-command: false

  62. # 创建玩家商店时选定的箱子是否要求是近期放置的.
  63. require-chest-recently-placed: true
  64. # 玩家商店可以放置离商店供货箱的最远距离.
  65. # 这个值不能超过50.
  66. max-chest-distance: 15
  67. # 是否阻止玩家商店供货箱被破坏.
  68. # 建议启用此选项.
  69. protect-chests: true
  70. # 是否在商店供货箱被破坏后删除该玩家商店.
  71. delete-shopkeeper-on-break-chest: false

  72. # 默认情况下玩家可以创建的商店数量最大值.
  73. # 设置为 0 来允许玩家创建无数个商店.
  74. max-shops-per-player: 0
  75. # 一个权限节点列表, 可用于显式设置特定玩家或玩家组可以拥有的最大商店数.
  76. # 使用 shopkeeper.maxshops.<数量> 权限节点来使用这一特性.
  77. max-shops-perm-options: 5,15,25

  78. # 如果启用(即设置大于0的值), 每次插件启动时, Shopkeepers 都会检查并删除不活跃玩家的商店.
  79. # 此项配置选项决定距离玩家上次登录多少天后将玩家视为不活跃状态.
  80. player-shopkeeper-inactive-days: 0

  81. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  82. # 商店(实体)类型
  83. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

  84. # 一个可以被作为 Shopkeeper 实体的生物类型清单.
  85. # 不支持在此处向默认值添加新的生物类型,
  86. # 因为一些生物类型可能会不正常工作或者造成各种各样的问题.
  87. enabled-living-shops:
  88. - VILLAGER
  89. - COW
  90. - MUSHROOM_COW
  91. - SHEEP
  92. - PIG
  93. - CHICKEN
  94. - OCELOT
  95. - RABBIT
  96. - WOLF
  97. - SNOWMAN
  98. - IRON_GOLEM
  99. - POLAR_BEAR
  100. - BLAZE
  101. - SILVERFISH
  102. - SKELETON
  103. - STRAY
  104. - WITHER_SKELETON
  105. - SPIDER
  106. - CAVE_SPIDER
  107. - CREEPER
  108. - WITCH
  109. - ENDERMAN
  110. - ZOMBIE
  111. - ZOMBIE_VILLAGER
  112. - PIG_ZOMBIE
  113. - HUSK
  114. - GIANT
  115. - GHAST
  116. - SLIME
  117. - MAGMA_CUBE
  118. - SQUID
  119. - EVOKER
  120. - VEX
  121. - VINDICATOR
  122. - ILLUSIONER
  123. - PARROT
  124. - TURTLE
  125. - PHANTOM
  126. - COD
  127. - SALMON
  128. - PUFFERFISH
  129. - TROPICAL_FISH
  130. - DROWNED
  131. - DOLPHIN

  132. # 在旧的 Shopkeepers 实体行为管理模式下, Shopkeepers 实体可以被推走,
  133. # 并且它们的 AI 和重力由 Minecraft 负责处理.
  134. # 而在新的 Shopkeepers 实体行为管理模式下, 它们的所有原生 AI 都被禁用,
  135. # 并且重力和行为等由插件负责处理.
  136. use-legacy-mob-behavior: false
  137. # Shopkeepers 实体是否受重力影响.
  138. disable-gravity: false
  139. # 一个以玩家为圆心, 区块为单位的范围, 范围内的 Shopkeepers 实体将会受到重力影响.
  140. # 设定的值过高可能对性能由负面影响.
  141. # 如果设置在服务器的实体跟踪范围之下, 将会使玩家能够看到在半空中漂浮的 Shopkeepers 实体,
  142. # 直到玩家足够接近它们(并使它们受到重力影响).
  143. # 设置为0将会使 Shopkeepers 实体即使和玩家在同一区块, 也无法受到重力影响.
  144. # 如果重力选项被禁用, 或使用旧的 Shopkeepers 实体行为管理模式, 那么此配置选项没有任何作用.
  145. gravity-chunk-range: 4

  146. # 是否允许怪物型 Shopkeeper 实体发出声音.
  147. silence-living-shop-entities: true

  148. # 是否为怪物型 Shopkeeper 实体显示头顶民牌.
  149. show-nameplates: true
  150. # 是否一直显示头顶名牌. 如果禁用, 头顶名牌仅会在玩家直视 Shopkeeper 实体后显示.
  151. # 请注意: 自 Minecraft 1.8以后, 此配置选项可能不再有效.
  152. always-show-nameplates: false
  153. # 头顶名牌的前缀(方便与玩家区分开).
  154. nameplate-prefix: "&a"

  155. # 是否允许创建 Citizen(NPC)商店. 需要前置插件 Citizens.
  156. enable-citizen-shops: false

  157. # 是否允许创建牌子商店
  158. enable-sign-shops: true
  159. # 是否允许创建立牌商店(与之对应的是挂墙牌子商店).
  160. enable-sign-post-shops: true
  161. # 牌子商店第一行显示的内容.
  162. sign-shop-first-line: "[SHOP]"

  163. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  164. # 命名
  165. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

  166. # 插件使用正则表达式来验证商店的显示名.
  167. # 想要了解更多关于正则表达式的信息请查阅此 Java 文档:
  168. # [url]https://docs.oracle.com/javase/9/docs/api/java/util/regex/Pattern.html[/url]
  169. # 这里有一些示例:
  170. # * "[A-Za-z0-9 ]{3,25}": 默认值. 允许输入数字和字母, 要求 3 到 25 个字符长.
  171. # * "[A-Za-z0-9& ]{3,25}": 和默认值一样, 但是允许输入颜色代码符号.
  172. # * ".*": 允许输入任何内容.
  173. name-regex: "[A-Za-z0-9 ]{3,25}"
  174. # 能否通过物品来重命名玩家商店.
  175. # 这将会隐藏编辑器的重命名按钮.
  176. naming-of-player-shops-via-item: false
  177. # 是否允许重命名玩家型NPC(Citizen) Shopkeepers 实体.
  178. # 默认情况下这种类型的商店会被命名为主人的名字.
  179. allow-renaming-of-player-npc-shops: false

  180. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  181. # 编辑器菜单
  182. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

  183. # 编辑器菜单的标题.
  184. editor-title: "Shopkeeper Editor"

  185. # 编辑器中用于表示 "重命名此商店" 按钮的物品(类型).
  186. # 同时指定重命名工具(如果启用)
  187. name-item: NAME_TAG
  188. # 重命名工具所需的指定Lore. 设置空值以忽略.
  189. name-item-lore: []

  190. # 玩家商店的编辑器是否包含打开商店库存箱的选项.
  191. # 请注意: 这将会覆盖编辑器的重命名按钮!
  192. enable-chest-option-on-player-shop: false
  193. # 编辑器中用于表示 "打开商店库存箱" 按钮的物品(类型).
  194. chest-item: CHEST

  195. # 编辑器中用于表示 "删除此商店" 按钮的物品(类型).
  196. delete-item: BONE

  197. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  198. # 非 Shopkeepers 村民
  199. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

  200. # 是否禁用和常规村民的交易行为.
  201. disable-other-villagers: false
  202. # 是否禁止生成常规村民.
  203. block-villager-spawns: false
  204. # 是否可以租用常规村民.
  205. hire-other-villagers: false

  206. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  207. # 出租
  208. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

  209. # 在玩家商店中用于表示 "出租此商店" 按钮的物品(类型),
  210. # 以及雇佣非 Shopkeepers 村民所花费的物品(类型).
  211. hire-item: EMERALD
  212. # 雇佣所需的物品的显示名. 设置空值以忽略.
  213. hire-item-name: ""
  214. # 雇佣所需的物品的Lore. 设置空值以忽略.
  215. hire-item-lore: []
  216. # 雇佣一名非 Shopkeepers 村民的花费.
  217. hire-other-villagers-costs: 1
  218. # 当玩家的商店正在出租时, 箱子容器的标题.
  219. for-hire-title: "For Hire"
  220. # 租用一个商店时, 租下的玩家是否需要拥有创建该类型商店的权限.
  221. hire-require-creation-permission: true

  222. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  223. # 交易
  224. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

  225. # 是否阻止玩家与自己的 Shopkeeper 交易.
  226. # 建议启用此选项.
  227. prevent-trading-with-own-shop: true
  228. # 启用此选项后, Shopkeeper无法在其主人在线的情况下交易.
  229. # 这可能在希望强制玩家与其他在线玩家直接交易的角色扮演(RPG)服务器中很有用.
  230. prevent-trading-while-owner-is-online: false
  231. # Minecraft 在某些情况下允许使用不完全匹配的物品来交易
  232. # (举个例子. 带有额外数据的物品可以用来交易).
  233. # 启用此选项后 Shopkeepers 将会在玩家提供的物品完全匹配交易要求物品后才完成交易.
  234. use-strict-item-comparison: false
  235. # 是否在插件文件夹中记录所有通过 Shopkeepers 完成的交易为一份 .csv 文件.
  236. # 请注意: 目前此功能可能不适用于系统商店, 所以不要依赖于使用它来检查系统商店的交易正确性!
  237. enable-purchase-logging: false

  238. # 应从玩家商店收入中回收的营业额百分比(收税).
  239. tax-rate: 0
  240. # 在计算玩家商店交易税时是向上舍入(true)还是向下舍入(false).
  241. tax-round-up: false

  242. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  243. # 货币
  244. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

  245. # 玩家商店中使用的货币物品类型.
  246. currency-item: EMERALD
  247. # 货币(物品)的显示名. 设置空值以忽略.
  248. currency-item-name: ""
  249. # 货币(物品)的Lore. 设置空值以忽略.
  250. currency-item-lore: []

  251. # 当玩家没有设置价格时的占位符.
  252. zero-currency-item: BARRIER
  253. # 无价格占位符的显示名. 设置空值以忽略.
  254. zero-currency-item-name: ""
  255. # 无价格占位符的Lore. 设置空值以忽略.
  256. zero-currency-item-lore: []

  257. # 第二种, 更高面值, 用于玩家交易商店的第二价格栏的货币物品类型.
  258. # 设置为 'AIR' 来禁用第二货币.
  259. high-currency-item: EMERALD_BLOCK
  260. # 高面值货币(物品)的显示名. 设置空值以忽略.
  261. high-currency-item-name: ""
  262. # 高面值货币(物品)的Lore. 设置空值以忽略.
  263. high-currency-item-lore: []

  264. # 高面值货币相对于低面值货币的价值.
  265. high-currency-value: 9
  266. # 只有当商品的价格超过此值时自动使用高面值货币.
  267. high-currency-min-cost: 20

  268. # 当玩家没有设置高面值价格要求时的占位符.
  269. high-zero-currency-item: BARRIER
  270. # 高面值价格占位符的显示名. 设置空值以忽略.
  271. high-zero-currency-item-name: ""
  272. # 高面值价格占位符的Lore. 设置空值以忽略.
  273. high-zero-currency-item-lore: []

  274. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  275. # 插件消息文本
  276. # *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

  277. language: en

  278. msg-creation-item-selected: |
  279.     &aRight-click to select the shop type.
  280.     &aSneak + right-click to select the object type.
  281.     &aRight-click a chest to select it.
  282.     &aThen right-click a block to place the shopkeeper.

  283. msg-button-name: "&aSet Shop Name"
  284. msg-button-name-lore:
  285. - Lets you rename
  286. - your shopkeeper
  287. msg-button-chest: "&aView Chest Inventory"
  288. msg-button-chest-lore:
  289. - Lets you view the inventory
  290. - your shopkeeper is using
  291. msg-button-type: "&aChoose Appearance"
  292. msg-button-type-lore:
  293. - Changes the look
  294. - of your shopkeeper
  295. msg-button-delete: "&4Delete"
  296. msg-button-delete-lore:
  297. - Closes and removes
  298. - this shopkeeper
  299. msg-button-hire: "&aHire"
  300. msg-button-hire-lore:
  301. - Buy this shopkeeper

  302. msg-trading-title-prefix: "&2"
  303. msg-trading-title-default: "Shopkeeper"

  304. msg-selected-sell-shop: "&aSelling shopkeeper selected (sells items to players)."
  305. msg-selected-buy-shop: "&aBuying shopkeeper selected (buys items from players)."
  306. msg-selected-trade-shop: "&aTrading shopkeeper selected (trades items with players)."
  307. msg-selected-book-shop: "&aBook shopkeeper selected (sells books)."

  308. msg-selected-living-shop: "&aYou selected: &f{type}"
  309. msg-selected-sign-shop: "&aYou selected: &fsign shop"
  310. msg-selected-citizen-shop: "&aYou selected: &fcitizen npc shop"

  311. msg-selected-chest: "&aChest selected! Right-click a block to place your shopkeeper."
  312. msg-must-select-chest: "&7You must right-click a chest before placing your shopkeeper."
  313. msg-no-chest-selected: "&7The selected block is not a chest!"
  314. msg-chest-too-far: "&7The shopkeeper's chest is too far away!"
  315. msg-chest-not-placed: "&7You must select a chest you have recently placed!"
  316. msg-chest-already-in-use: "&7Another shopkeeper is already using the selected chest!"
  317. msg-no-chest-access: "&7You cannot access the selected chest!"
  318. msg-too-many-shops: "&7You have too many shops!"
  319. msg-no-admin-shop-type-selected: "&7You have to select an admin shop type!"
  320. msg-no-player-shop-type-selected: "&7You have to select a player shop type!"
  321. msg-shop-create-fail: "&7You cannot create a shopkeeper there."

  322. msg-type-new-name: "&aPlease type the shop's name into the chat.\n  &aType a dash (-) to remove the name."
  323. msg-name-set: "&aThe shop's name has been set!"
  324. msg-name-has-not-changed: "&aThe shop's name has not changed."
  325. msg-name-invalid: "&aThat name is not valid!"

  326. msg-shop-type-disabled: "&7The shop type '{type}' is disabled."
  327. msg-shop-object-type-disabled: "&7The shop object type '{type}' is disabled."
  328. msg-must-target-chest: "&7You have to target a chest."
  329. msg-unused-chest: "&7No shopkeeper is using this chest."
  330. msg-not-owner: "&7You are not the owner of this shopkeeper."
  331. msg-owner-set: "&aNew owner was set to &e{owner}"

  332. msg-trade-perm-set: "&aThe shop's trading permission has been set!"
  333. msg-trade-perm-removed: "&aThe shop's trading permission has been removed!"
  334. msg-trade-perm-view: "&aThe shop's current trading permission is '&e{perm}&a'."

  335. msg-must-hold-hire-item: "&7You have to hold the required hire item in your hand."
  336. msg-set-for-hire: "&aThe Shopkeeper was set for hire."
  337. msg-hired: "&aYou have hired this shopkeeper!"
  338. msg-missing-hire-perm: "&7You do not have the permission to hire shopkeepers."
  339. msg-cant-hire: "&7You cannot afford to hire this shopkeeper."
  340. msg-cant-hire-shop-type: "&7You do not have the permission to hire this type of shopkeeper."
  341. msg-villager-for-hire: "&aThe villager offered his services as a shopkeeper in exchange for &6{costs}x {hire-item}&a."

  342. msg-missing-trade-perm: "&7You do not have the permission to trade with this shop."
  343. msg-missing-custom-trade-perm: "&7You do not have the permission to trade with this shop."
  344. msg-cant-trade-while-owner-online: "&7You cannot trade while the owner of this shop ('{owner}') is online."

  345. msg-sell-shop-created: |
  346.     &aShopkeeper created!
  347.     &aAdd items you want to sell to your chest, then
  348.     &aright-click the shop while sneaking to modify costs.
  349. msg-buy-shop-created: |
  350.     &aShopkeeper created!
  351.     &aAdd one of each item you want to buy to your chest, then
  352.     &aright-click the shop while sneaking to modify costs.
  353. msg-trade-shop-created: |
  354.     &aShopkeeper created!
  355.     &aAdd items you want to sell to your chest, then
  356.     &aright-click the shop while sneaking to modify costs.
  357. msg-book-shop-created: |
  358.     &aShopkeeper created!
  359.     &aAdd written books and blank books to your chest, then
  360.     &aright-click the shop while sneaking to modify costs.
  361. msg-admin-shop-created: |
  362.     &aShopkeeper created!
  363.     &aRight-click the shop while sneaking to modify trades.

  364. msg-list-admin-shops-header: "&9There are &e{shopsCount} &9admin shops: &e(Page {page} of {maxPage})"
  365. msg-list-player-shops-header: "&9Player '&e{player}&9' has &e{shopsCount} &9shops: &e(Page {page} of {maxPage})"
  366. msg-list-shops-entry: "  &e{shopSessionId}) &7{shopName}&r&8at &7({location})&8, type: &7{shopType}&8, object type: &7{objectType}"

  367. msg-removed-admin-shops: "&e{shopsCount} &aadmin shops were removed."
  368. msg-removed-player-shops: "&e{shopsCount} &ashops of player '&e{player}&a' were removed."
  369. msg-removed-all-player-shops: "&aAll &e{shopsCount} &aplayer shops were removed."

  370. msg-confirm-remove-admin-shops: "&cYou are about to irrevocable remove all admin shops!"
  371. msg-confirm-remove-own-shops: "&cYou are about to irrevocable remove all your shops!"
  372. msg-confirm-remove-player-shops: "&cYou are about to irrevocable remove all shops of player &6{player}&c!"
  373. msg-confirm-remove-all-player-shops: "&cYou are about to irrevocable remove all player shops of all players!"

  374. msg-confirmation-required: "&7Please confirm this action by typing &6/shopkeepers confirm"
  375. msg-confirmation-expired: "&cConfirmation expired."
  376. msg-nothing-to-confirm: "&cThere is nothing to confirm currently."

  377. msg-no-permission: "&cYou don't have the permission to do that."

  378. msg-command-unknown: "&cUnknown command '&e{command}&c'!"
  379. msg-command-argument-unexpected: "&cUnexpected argument '&e{argument}&c'."
  380. msg-command-argument-missing: "&cMissing argument '&e{argumentFormat}&c'."
  381. msg-command-argument-invalid: "&cInvalid argument '&e{argument}&c'."
  382. msg-command-player-argument-missing: "&cNo player specified for '&e{argumentFormat}&c'."
  383. msg-command-player-argument-invalid: "&cNo player found for '&e{argument}&c'."
  384. msg-command-shop-type-argument-invalid: "&cUnknown shop type '&e{argument}&c'."
  385. msg-command-shop-object-type-argument-invalid: "&cUnknown shop object type '&e{argument}&c'."
  386. msg-command-shopkeeper-argument-invalid: "&cNo shopkeeper found for '&e{argument}&c'."

  387. msg-command-help-title: "&9***** &8[&6Shopkeepers v{version}&8] &9*****"
  388. msg-command-help-usage-format: "&e{usage}"
  389. msg-command-help-description-format: "&8 - &3{description}"

  390. msg-command-description-shopkeeper: "Creates a shopkeeper."
  391. msg-command-description-help: "Shows this help page."
  392. msg-command-description-reload: "Reloads this plugin."
  393. msg-command-description-debug: "Toggles debug mode on and off."
  394. msg-command-description-list: "Lists all shops for the specified player, or all admin shops."
  395. msg-command-description-remove: "Removes all shops for the specified player, all players, or all admin shops."
  396. msg-command-description-remote: "Remotely opens a shop."
  397. msg-command-description-transfer: "Transfers the ownership of a shop."
  398. msg-command-description-settradeperm: "Sets, removes (-) or displays (?) the trading permission."
  399. msg-command-description-setforhire: "Sets one of your shops for sale."
复制代码

[groupid=1511]Server CT[/groupid]