## 简介
NpcShop是一个功能强大的Minecraft商店插件,提供与Citizens2插件联动的NPC商店功能。玩家可以与NPC互动打开商店GUI,购买管理员设置的商品。支持多种货币类型,界面美观,操作简单直观。
**版本要求**: Spigot/Paper 1.21.4+
## 主要特点
✅ **完整的物品数据保留** - 上架物品的所有属性、附魔、Lore等完全保留
✅ **多种货币支持** - 支持Vault和PlayerPoints两种经济系统
✅ **美观的GUI界面** - 使用现代化设计的GUI,支持自定义样式
✅ **完整的权限系统** - 细粒度权限控制,可设置管理员和普通用户权限
✅ **多页面显示** - 自动分页显示商品,无商品数量限制
✅ **商店类型系统** - 支持普通商店和礼包商店两种类型
✅ **物品名称自动翻译** - 自动翻译物品名称为中文,提升用户体验
✅ **实时数据保存** - 使用SQLite数据库,确保数据安全性和一致性
## 安装说明
1. 下载插件: [点击下载](插入下载链接)
2. 将NpcShop.jar放入服务器的plugins文件夹
3. 安装必要依赖:
- [
SagaLib]
- [
Citizens2]
- [
Vault]
- [
PlayerPoints]
4. 重启服务器
5. 配置插件,根据需要修改config.yml
## 使用方法
### 创建商店
1. 创建一个Citizens NPC
2. 选择该NPC: `/ns select <NPC ID>`
3. 创建商店: `/ns create <商店名称> [shop/gift]`
- shop: 普通商店,可添加单个物品销售
- gift: 礼包商店,可将多个物品打包销售
### 添加商品
**普通商店**:
1. 选择商店NPC: `/ns select <NPC ID>`
2. 手持要添加的物品
3. 添加商品: `/ns add <价格> <货币类型>`
- 货币类型: 1(Vault金币) 或 2(PlayerPoints点券)
**礼包商店**:
1. 选择商店NPC: `/ns select <NPC ID>`
2. 创建礼包: `/ns gift create <材质> <显示名称> <价格> <货币类型>`
3. 手持要添加的物品
4. 添加到礼包: `/ns gift add`
### 使用商店
玩家只需右键点击NPC即可打开商店界面:
- 在普通商店中点击商品直接购买
- 在礼包商店中可先查看礼包内容,确认后购买整个礼包
## 命令列表
Code (YAML):
| 命令 | 描述
|
|
------|
------
|
| `/ns select <NPC ID>` | 选择NPC
|
| `/ns create <商店名称>
[类型:shop/gift
]` | 创建商店并绑定到选中的NPC
|
| `/ns add <价格> <货币类型>` | 添加手持物品到商店
|
| `/ns remove <商品ID>` | 从商店移除指定商品
|
| `/ns edit <商品ID> <价格> <货币类型>` | 编辑商店中的商品
|
| `/ns info` | 查看选中NPC的商店信息
|
| `/ns style <样式>` | 设置商店样式
|
| `/ns gift create <材质> <显示名称> <价格> <货币类型>` | 创建礼包
|
| `/ns gift add` | 添加手持物品到礼包
|
| `/ns gift sel <礼包ID>` | 选择指定ID的礼包
|
| `/ns reload` | 重新加载插件配置 |
## 权限节点
Code (YAML):
| 权限 | 描述
|
|
------|
------
|
| `npcshop.admin` | 所有权限
(包含下列所有权限
)
|
| `npcshop.create` | 允许创建NPC商店
|
| `npcshop.edit` | 允许编辑商店商品
|
| `npcshop.remove` | 允许移除商店商品
|
| `npcshop.reload` | 允许重载插件配置
|
| `npcshop.select` | 允许选择NPC
|
| `npcshop.use` | 允许玩家使用NPC商店 |
## 配置文件
### config.yml 主要配置项
Code (YAML):
# NpcShop 配置文件
# 基础配置
settings:
debug
: false
save-interval
: 300
# 自动保存间隔(秒)
error-handling:
detailed-errors
: true
# 是否显示详细错误信息
log-errors
: true
# 是否记录错误到日志
translation:
enabled
: true
# 是否启用物品名称翻译
always-translate
: false
# 是否总是翻译物品名称(即使有自定义名称)
cooldown:
enabled
: true
# 是否启用GUI点击冷却
time
: 1000
# 点击冷却时间(毫秒)
message
: false
# 是否显示冷却提示消息
# 商店默认设置
default-shop:
rows
: 4
# 商店界面行数
title-format
:
"{name}"
# 标题格式
style
:
"default"
# 默认样式
# 经济设置
economy:
default-currency
: 1
# 默认货币类型 (1: Vault, 2: PlayerPoints)
currency-symbols:
1
:
"&6金币"
# Vault
2
:
"&3点券"
# PlayerPoints
# GUI设置
gui:
border-item
: BLACK_STAINED_GLASS_PANE
prev-page-item
: ARROW
next-page-item
: ARROW
close-item
: BARRIER
admin-only-item-id
: true
# 是否仅管理员可见物品ID
# 商店样式设置
shop-styles:
default:
border-item
: BLACK_STAINED_GLASS_PANE
background-item
: GRAY_STAINED_GLASS_PANE
button-color
: WHITE
title-color
:
"&e"
dark:
border-item
: BLACK_STAINED_GLASS_PANE
background-item
: GRAY_STAINED_GLASS_PANE
button-color
: GRAY
title-color
:
"&8"
light:
border-item
: WHITE_STAINED_GLASS_PANE
background-item
: LIGHT_GRAY_STAINED_GLASS_PANE
button-color
: WHITE
title-color
:
"&f"
colorful:
border-item
: CYAN_STAINED_GLASS_PANE
background-item
: LIGHT_BLUE_STAINED_GLASS_PANE
button-color
: PINK
title-color
:
"&d"
Code (YAML):
# NpcShop 消息配置文件
prefix
:
"&7[&bNpcShop&7] "
messages
:
# 通用消息
no-permission
:
"&c你没有权限执行此命令"
invalid-number
:
"&c无效的数字格式"
invalid-currency
:
"&c无效的货币类型,请使用 1(金币) 或 2(点券)"
invalid-price
:
"&c价格必须大于0"
invalid-material
:
"&c无效的物品材质: {0}"
invalid-shop-type
:
"&c无效的商店类型,请使用 shop 或 gift"
# 商店创建
create-usage
:
"&c用法: /ns create <商店名称> [类型:shop/gift]"
create-processing
:
"&a正在创建商店..."
shop-created
:
"&a成功创建商店 &f{0}"
shop-exists
:
"&c该NPC已经绑定了商店"
# NPC相关
select-usage
:
"&c用法: /ns select <NPC ID>"
npc-selected
:
"&a已选中NPC: &f{0}"
npc-not-found
:
"&c未找到ID为 {0} 的NPC"
no-npc-selected
:
"&c你没有选中任何NPC,请先使用 /ns select <NPC ID> 选择一个NPC"
citizens-required
:
"&cCitizens插件是必需的,但未找到"
# 商品管理
add-usage
:
"&c用法: /ns add <价格> <货币类型>"
add-processing
:
"&a正在添加商品..."
item-added
:
"&a成功添加商品,价格: &f{0} {1}"
no-item-in-hand
:
"&c你手中没有物品"
no-shop-selected
:
"&c你没有选择任何商店,请先创建或选择一个商店"
# 商品编辑
remove-usage
:
"&c用法: /ns remove <商品ID>"
edit-usage
:
"&c用法: /ns edit <商品ID> <价格> <货币类型>"
edit-success
:
"&a成功编辑商品,新价格: &f{0} {1}"
item-removed
:
"&a成功移除商品"
item-not-found
:
"&c未找到ID为 {0} 的商品"
# 商店操作
shop-opened
:
"&a已打开商店 &f{0}"
no-shop
:
"&c该NPC没有商店"
no-shop-found
:
"&c该NPC没有关联的商店"
reload-success
:
"&a成功重载配置"
# 商店样式
style-usage
:
"&c用法: /ns style <样式>"
style-success
:
"&a成功设置商店样式为 &f{0}"
style-not-found
:
"&c未找到样式 {0}"
# 商店信息
info-header
:
"&e====== &6商店信息 &e======"
info-name
:
"&a商店名称: &f{0}"
info-npc
:
"&aNPC ID: &f{0}"
info-items
:
"&a商品数量: &f{0}"
info-footer
:
"&e======================"
# 商品显示
lore-price
:
"&a价格: &f{0} {1}"
lore-item-id
:
"&7(商品ID: {0})"
lore-gift-id
:
"&7(礼包ID: &f{0}&7)"
lore-gift-item-id
:
"&7(物品ID: &f{0}&7)"
lore-empty-line
:
""
# 购买相关
purchase-success
:
"&a购买成功,花费: &f{0} {1},剩余: &f{2} {3}"
purchase-failed
:
"&c购买失败,余额不足"
inventory-full
:
"&c你的背包已满"
purchase-confirm
:
"&a点击确认购买 &f{0} &a价格: &f{1} {2}"
# 冷却提示
cooldown
:
"&c请稍等片刻再进行操作"
# 礼包相关
gift-usage
:
"&c用法: /ns gift <create|add|sel>"
gift-create-usage
:
"&c用法: /ns gift create <礼包图标材质> <显示名称> <价格> <货币类型>"
gift-sel-usage
:
"&c用法: /ns gift sel <礼包ID>"
gift-created
:
"&a成功创建礼包 &f{0}"
gift-not-found
:
"&c未找到指定的礼包"
gift-add-processing
:
"&a正在添加物品到礼包..."
gift-item-added
:
"&a成功添加物品到礼包"
gift-item-removed
:
"&a成功从礼包中移除物品"
gift-item-not-found
:
"&c未找到指定ID的物品"
gift-purchase-success
:
"&a成功购买礼包 &f{0},花费: &f{1} {2}"
gift-selected
:
"&a已选择礼包: &f{0}"
no-gift-selected
:
"&c你没有选择任何礼包,请先选择或创建一个礼包"
gifts-loaded
:
"&a成功加载 &f{0} &a个礼包"
# 插件消息
plugin-enabled
:
"§a§lNpcShop §f插件已启动"
plugin-disabled
:
"§c§lNpcShop §f插件已关闭"
# 命令消息
command-usage
:
"&e用法: &f/ns <create|add|remove|edit|info|style|reload>"
command-reload
:
"&a配置文件已重新加载"
# 错误处理
error-shop-load
:
"&c加载商店时出错: {0}"
error-item-serialize
:
"&c序列化物品时出错"
error-item-deserialize
:
"&c反序列化物品时出错"
error-database
:
"&c数据库操作失败: {0}"
economy-not-found
:
"&c错误: 未找到经济系统,请安装Vault插件"
playerpoints-not-found
:
"&c错误: 未找到点券系统,请安装PlayerPoints插件"
citizens-not-found
:
"&c错误: 未找到Citizens插件,请安装Citizens插件"
wrong-shop-type
:
"&c该NPC绑定的是礼包商店,不能直接添加商品,请使用 /ns gift create 和 /ns gift add 命令"
not-gift-shop
:
"&c该NPC绑定的不是礼包商店,无法添加礼包物品"
# 购买消息
buy-success
:
"&a成功购买 &f{0}x{1}&a,花费: &f{2} {3}&a,余额: &f{4} {3}"
buy-failed-no-money
:
"&c购买失败,你没有足够的{0},需要: &f{1}&c,余额: &f{2}"
buy-failed-inventory-full
:
"&c购买失败,你的背包已满"
# GUI商品Lore
lore-click-buy
:
"&7点击购买"
lore-shift-left-click
:
"&7Shift+左键购买10个"
lore-shift-right-click
:
"&7Shift+右键购买一组({0}个)"
lore-amount
:
"&a数量: &f{0}"
lore-unit-price
:
"&a单价: &f{0} {1}"
# 物品翻译消息
translation-enabled
:
"&a已启用物品名称翻译"
translation-load-success
:
"&a成功加载 &f{0} &a个物品翻译"
translation-load-failed
:
"&c加载物品翻译文件失败"
# 冷却消息
cooldown-active
:
"&c操作过于频繁,请稍后再试!"
cooldown-remaining
:
"&c请等待 &f{0} &c秒后再操作"
# 商店相关消息
shop-created
:
"&a成功创建商店 &f{0}"
shop-exists
:
"&c该NPC已经绑定了商店"
citizens-required
:
"&cCitizens插件是必需的,但未找到"
# 商品管理
add-usage
:
"&c用法: /ns add <价格> <货币类型>"
add-processing
:
"&a正在添加商品..."
item-added
:
"&a成功添加商品,价格: &f{0} {1}"
invalid-number
:
"&c无效的数字格式"
invalid-currency
:
"&c无效的货币类型,请使用 1(金币) 或 2(点券)"
invalid-price
:
"&c价格必须大于0"
invalid-material
:
"&c无效的物品材质: {0}"
no-item-in-hand
:
"&c你手中没有物品"
no-shop-selected
:
"&c你没有选择任何商店,请先创建或选择一个商店"
# 商品管理
add-usage
:
"&c用法: /ns add <价格> <货币类型>"
add-processing
:
"&a正在添加商品..."
item-added
:
"&a成功添加商品,价格: &f{0} {1}"
invalid-number
:
"&c无效的数字格式"
invalid-currency
:
"&c无效的货币类型,请使用 1(金币) 或 2(点券)"
invalid-price
:
"&c价格必须大于0"
invalid-material
:
"&c无效的物品材质: {0}"
no-item-in-hand
:
"&c你手中没有物品"
no-shop-selected
:
"&c你没有选择任何商店,请先创建或选择一个商店"
# 商品管理
add-usage
:
"&c用法: /ns add <价格> <货币类型>"
add-processing
:
"&a正在添加商品..."
item-added
:
"&a成功添加商品,价格: &f{0} {1}"
invalid-number
:
"&c无效的数字格式"
invalid-currency
:
"&c无效的货币类型,请使用 1(金币) 或 2(点券)"
invalid-price
:
"&c价格必须大于0"
invalid-material
:
"&c无效的物品材质: {0}"
no-item-in-hand
:
"&c你手中没有物品"
no-shop-selected
:
"&c你没有选择任何商店,请先创建或选择一个商店"
### 商店样式
插件提供了多种预设商店样式,可以通过`/ns style <样式名称>`设置:
- default: 默认样式
- dark: 暗色主题
- light: 亮色主题
- colorful: 彩色主题
## 特色功能
1. **礼包商店系统**:
- 将多个物品打包为一个礼包
- 玩家可以查看礼包内容后决定是否购买
- 管理员可以轻松管理礼包内容
2. **商品管理功能**:
- 显示商品ID,方便管理员编辑和移除
- 右键删除礼包或礼包内物品
- 支持单价和总价显示
3. **操作优化**:
- 冷却系统防止误操作和刷单
- 物品名称自动翻译
- 命令自动补全功能
- 智能错误处理和提示
## 常见问题
**Q: 如何让不同NPC显示不同的商店?**
A: 每个NPC可以绑定不同的商店,使用`/ns select <NPC ID>`选择不同的NPC,然后创建商店即可。
**Q: 如何删除商店?**
A: 目前需要删除NPC来删除商店,或直接编辑数据库文件。
**Q: 支持哪些版本的Minecraft?**
A: 目前插件支持Spigot/Paper 1.21.4及以上版本。
## 支持与反馈
如有问题或建议,请通过以下方式联系:
- 在Spigot论坛帖子下留言
- 提交GitHub Issue
---
**源代码**: [
GitHub]