NpcShop icon

NpcShop -----

全功能NPC商店系统



## 简介

NpcShop是一个功能强大的Minecraft商店插件,提供与Citizens2插件联动的NPC商店功能。玩家可以与NPC互动打开商店GUI,购买管理员设置的商品。支持多种货币类型,界面美观,操作简单直观。

**版本要求**: Spigot/Paper 1.21.4+

## 主要特点

✅ **完整的物品数据保留** - 上架物品的所有属性、附魔、Lore等完全保留
✅ **多种货币支持** - 支持Vault和PlayerPoints两种经济系统
✅ **美观的GUI界面** - 使用现代化设计的GUI,支持自定义样式
✅ **完整的权限系统** - 细粒度权限控制,可设置管理员和普通用户权限
✅ **多页面显示** - 自动分页显示商品,无商品数量限制
✅ **商店类型系统** - 支持普通商店和礼包商店两种类型
✅ **物品名称自动翻译** - 自动翻译物品名称为中文,提升用户体验
✅ **实时数据保存** - 使用SQLite数据库,确保数据安全性和一致性

1.png 2.png 3.png

## 安装说明

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]
Resource Information
Author:
----------
Total Downloads: 54
First Release: Mar 28, 2025
Last Update: Apr 15, 2025
Category: ---------------
All-Time Rating:
0 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings