- 版权类型
- 原创
- 插件中文名称
- AL摆摊
- 插件英文名称
- ALStall
- 原帖地址
- #
- 支持的核心(服务端)
- Spigot
- Paper
- Folia
- Purpur
- 语言支持
- 中文(简体)
- 前置组件
- 无
- 适配版本(Java)
- 最新版本
- 26.x
- 1.21
ALStall
GUI摆摊 / 多摊位独立管理 / 自由区域与固定点位 / SQLite与MySQL / Folia支持
不是简单生成一个村民商店,而是一套围绕玩家摊位、区域租赁、商品仓库和服务器经济设计的摆摊系统。
适用于:生存服 / 经济服 / RPG服 / 养老服 / 商业街 / 主城市场 / Folia 或 Luminol 服务端
GUI摆摊 / 多摊位独立管理 / 自由区域与固定点位 / SQLite与MySQL / Folia支持
不是简单生成一个村民商店,而是一套围绕玩家摊位、区域租赁、商品仓库和服务器经济设计的摆摊系统。
适用于:生存服 / 经济服 / RPG服 / 养老服 / 商业街 / 主城市场 / Folia 或 Luminol 服务端
插件简介
ALStall 是一款面向 Paper / Purpur / Folia / Luminol 等服务端的 GUI 玩家摆摊插件。玩家可以创建自己的多个摊位,每个摊位都有独立名称、介绍、图标、商品、仓库、资金和实体。
插件支持两种摆摊区域:一种是自由区域,玩家可以在区域内任意位置生成自己的摊位实体;另一种是 fixed 固定点位区域,由管理员提前设置待租点位,玩家右键待租实体后选择自己的摊位进行租赁。
摊位实体只是展示与交互入口,不保存真实商品。实体过期、管理员删除区域、服务器重启、实体被异常清理时,只会影响实体本身,玩家的摊位数据、商品和资金仍保存在数据库中。
- 支持玩家创建多个摊位,每个摊位独立管理
- 支持 SQLite / MySQL 保存摊位、商品、仓库、资金、区域和实体数据
- 支持 free 自由区域与 fixed 固定点位区域
- fixed 待租实体右键租赁,租赁后绑定玩家自己的指定摊位
- 支持 Vault 金币和 PlayerPoints 点券,用于租金、颜色购买等功能
- 商品支持出售模式和收购模式
- 出售收入可按税率扣税,税后收入自动进入对应摊位资金
- 收购模式从摊位资金付款,收购到的物品进入对应商品仓库
- 商品仓库只允许放入和商品模板完全相同的物品,防止当云仓库使用
- 上架商品时只保存商品模板和价格,不会扣除玩家手中物品,库存从 0 开始
- 支持名称颜色、介绍颜色、实体发光颜色,支持权限与购买
- 支持渐变色,渐变色可单独要求权限
- 支持 CustomModelData、CraftEngine、ItemsAdder、Oraxen 自定义材质
- 支持自定义菜单、shape 布局、自定义按钮和多动作触发
- 支持 Folia 区域线程调度,插件声明 folia-supported
核心亮点
| 模块 | 说明 | 适合场景 |
|---|---|---|
| 多摊位系统 | 一个玩家可以拥有多个摊位,每个摊位有不同商品、名字、介绍、资金和实体 | 商人职业、VIP摊位、多店铺玩法 |
| 自由区域 | 管理员创建 free 区域后,玩家可在区域内任意位置生成自己的摊位实体 | 主城市场、玩家集市、开放商业区 |
| 固定点位 | 管理员创建 fixed 区域和待租点位,玩家右键待租实体租赁 | 固定商铺、摊位竞租、主城店铺 |
| 数据库保存 | 摊位、商品、资金、仓库库存、活跃实体、区域和点位都保存到数据库 | 长期运营服务器 |
| 实体只是入口 | 摊位实体到期后自动删除,商店数据仍可通过指令和 GUI 管理 | 减少主城长期实体堆积 |
| 商品仓库 | 每个商品有自己的库存仓库,只能放入同类物品 | 防云仓库、防乱塞物品 |
| 收购与出售 | 同一个商品可设置为出售模式或收购模式 | 玩家商店、材料回收、自动收货摊位 |
| 资金管理 | 每个摊位有独立资金,收入自动进入摊位资金,收购从摊位资金扣款 | 店铺经济、收购资金控制 |
| 颜色与发光 | 名称颜色、介绍颜色、实体发光颜色可由权限控制,也可配置购买 | VIP外观、点券消耗 |
| Folia兼容 | 实体操作和调度按 Folia / Paper 环境处理 | Folia / Luminol 区域线程服务器 |
| 第三方领地限制 | 区域外随地摆摊可检测 Residence、Dominion、WorldGuard、GriefPrevention、Lands、Towny、PlotSquared | 防止玩家在别人领地乱摆摊 |
玩家如何使用
打开摊位 GUI:
代码:
/stall
/alstall
- 输入 `/stall` 打开自己的摊位列表
- 如果没有摊位,点击创建新摊位,或使用 `/stall create [编号]`
- 进入某个摊位后,可以修改名称、介绍、颜色、图标、开摊状态和实体
- 点击商品界面,选择空商品位进行上架
- 上架时先手持要作为商品模板的物品,设置价格和模式,然后确认上架
- 确认上架后库存为 0,不会扣除手上物品
- 进入商品仓库,手动放入与商品模板完全相同的物品作为库存
- 生成摊位实体后,其他玩家右键实体即可打开商店购买或出售物品
- 商品界面:管理商品槽位和商品仓库
- 修改名字:左键输入新名字,右键选择名字颜色
- 商店介绍:左键输入介绍,右键选择介绍颜色
- 开摊/闭摊:闭摊后其他玩家不能购买或出售,即使已经打开 GUI 也会被阻止
- 生成/删除实体:每个摊位只能有一个实体,删除实体需要聊天确认
- 资金管理:查看收入、存入资金、提取资金
- 设置图标:手持物品后输入确认,把物品作为摊位图标
- 实体发光:可开启/关闭实体发光,右键设置发光颜色
自由区域与固定点位
free 自由区域:
管理员创建 free 区域后,玩家可以在区域内任意位置生成自己的摊位实体。区域可以设置租金,玩家生成实体时按区域租金扣费。
代码:
/stalladmin region create market free 100
管理员创建 fixed 区域后,可以在区域内创建固定待租点位。没有摊主时,待租实体手持绿宝石,玩家右键后选择自己的摊位租赁。
代码:
/stalladmin region create shop fixed 500
/stalladmin plot create shop
/stalladmin plot wand shop
区域优先级:
- ALStall 自己的摆摊区域优先级最高
- 如果玩家在 ALStall 区域内摆摊,不检查禁摆世界和第三方领地限制
- 区域外随地摆摊需要 `alstall.spawn.anywhere` 权限
- 区域外默认租金为 `100.0`,可在配置中修改
- 区域外仍会检查禁摆世界和第三方领地限制
- 玩家在自己的领地,或拥有对应领地 build/成员/信任权限时,可以摆摊
商品与仓库规则
| 规则 | 说明 |
|---|---|
| 上架不扣物品 | 上架时只保存手持物品的模板和价格,库存从 0 开始,需要玩家手动放入仓库 |
| 同类物品限制 | 仓库只能放入与商品模板完全相同的物品,支持自定义名称、Lore、NBT、CE、ItemsAdder、Oraxen 等物品识别 |
| 仓库页数 | 默认 1 页,权限 `alstall.warehouse.<页数>` 可解锁更多页,配置默认上限 10 页 |
| 最大库存 | 按仓库可用 B 槽数量乘以物品原版最大堆叠数计算,例如普通物品 64、末影珍珠 16、装备 1 |
| 下架限制 | 商品库存不为 0 时不能下架,必须先手动取空仓库 |
| 防连点 | GUI 点击冷却默认 0.2 秒,可防连点器疯狂切换界面 |
| 防异常点击 | 菜单内会拦截拖拽、数字键、双击收集、副手交换、丢弃键等特殊点击 |
其他玩家付款购买库存,收入扣除税率后进入这个摊位的商店资金。
收购模式:
其他玩家把同类物品出售给摊位,插件从摊位资金付款,物品进入这个商品仓库。仓库满了或资金不足时会停止收购。
实体与全息
摊位实体默认是村民,但插件会关闭 AI、重力和碰撞,使实体固定在原地,不会有原版职业行为,不会自己移动。
- 实体默认存在 6 小时,到期后自动删除实体和全息,不删除商店数据
- 实体死亡、数据丢失、区域删除、过期时,全息会一起清理
- 管理员删除区域后,会清理该区域内摊位实体,但保留玩家摊位和商品数据
- TextDisplay 全息默认透明背景,支持亮度、透明度和可见范围设置
- 全息最后一行可显示剩余到期时间,例如 6天1时20分
- 实体视线可平滑看向附近玩家,默认每 tick 小步转向,只看 3 格内最近玩家
- 全息可见范围默认 45 格
代码:
stall:
entity-life-hours: '6h'
hologram:
background-alpha: 0
view-range: 45.0
full-bright: true
look-at:
enabled: true
radius: 3.0
interval-ticks: 1
smooth-step-degrees: 6.0
自定义菜单与材质
插件菜单已经拆分到独立文件夹,方便服主单独修改每个界面。
代码:
plugins/ALStall/menus/stall_list.yml
plugins/ALStall/menus/stall_manage.yml
plugins/ALStall/menus/products.yml
plugins/ALStall/menus/warehouse.yml
plugins/ALStall/menus/listing.yml
plugins/ALStall/menus/funds.yml
plugins/ALStall/menus/shop.yml
plugins/ALStall/menus/rent_select.yml
plugins/ALStall/menus/color_select.yml
plugins/ALStall/menus/glow_color_select.yml
代码:
# 原版材质
type: 'CHEST'
# CustomModelData
type: 'PAPER'
custom_model_data: 10001
# CraftEngine
craftengine: 'namespace:item_id'
ce: 'namespace:item_id'
# ItemsAdder
itemsadder: 'namespace:item_id'
ia: 'namespace:item_id'
# Oraxen
oraxen: 'item_id'
# 兼容旧写法
plugin_item: 'ce:namespace:item_id'
plugin_item: 'ia:namespace:item_id'
plugin_item: 'oraxen:item_id'
- 菜单使用 `title / shape / items` 格式
- 可以在 shape 中添加新的单字符按钮
- 支持左键、右键、Shift+左键、Shift+右键动作
- 支持多个动作顺序执行
- 支持发送消息、玩家命令、控制台命令、播放声音、打开其他 GUI、延迟和关闭菜单
颜色、渐变色与购买
颜色选择界面参照 AL 系列插件风格,支持翻页、权限显示和 Shift+右键购买。
| 项目 | 说明 |
|---|---|
| 名字颜色 | 右键修改摊位名称颜色 |
| 介绍颜色 | 右键修改摊位介绍颜色 |
| 实体发光颜色 | 右键设置实体发光颜色 |
| 渐变色 | 渐变色可配置独立权限 `alstall.color.gradient` |
| 购买方式 | 支持 Vault 金币或 PlayerPoints 点券 |
代码:
color-purchase:
enabled: true
colors:
enabled: true
currency: 'vault'
price: 500.0
glow:
enabled: true
currency: 'vault'
price: 1000.0
glow-feature:
enabled: true
currency: 'vault'
price: 500.0
permission-grant:
commands:
- 'lp user %player% permission set %permission% true'
数据库与防刷说明
ALStall 的商品库存不依赖 GUI 里显示的物品本身,而是以数据库库存为准。
- 购买商品时,数据库先扣库存,成功后才给买家物品
- 出售给摊位时,插件先扣除卖家的同类物品,再通过数据库事务增加库存和扣除摊位资金
- 闭摊后,即使买家已经打开商店界面或正在聊天输入数量,也无法继续交易
- 仓库取出时先扣数据库库存,再把物品交给摊主
- 仓库放入时先验证同类物品和容量,再增加数据库库存并扣除玩家手上/背包物品
- 拖拽、数字键、双击收集、副手交换等特殊菜单操作会被取消
- 商品下架必须先手动清空库存,避免大量物品一次性掉落
如果多服共用摊位数据,请使用 MySQL。SQLite 只建议单服使用。跨服环境下还需要保证同一个 UUID 不会在多个子服同时在线,或者使用可靠的跨服背包同步方案;否则任何涉及玩家背包的交易插件都会有额外风险。
安装说明
推荐环境:
| 项目 | 说明 |
|---|---|
| Java | Java 21 或更高 |
| 服务端 | Paper / Purpur / Folia / Luminol 等 1.20+ 服务端 |
| 经济 | Vault + 经济插件,可选;PlayerPoints 可选 |
| 数据库 | 默认 SQLite,可切换 MySQL |
| 自定义材质 | CraftEngine / ItemsAdder / Oraxen 可选 |
- 将 `ALStall.jar` 放入服务器 `plugins` 文件夹
- 启动服务器,生成 `plugins/ALStall/` 配置目录
- 按需求修改 `config.yml`、`messages/zh_CN.yml`、`menus/*.yml`
- 如果使用 MySQL,请先在 `database` 中填写连接信息
- 如果使用颜色购买、租金和商品交易,请安装 Vault + 经济插件,或安装 PlayerPoints
- 使用 `/stalladmin reload` 重载配置,或重启服务器
代码:
plugins/ALStall/config.yml
plugins/ALStall/messages/zh_CN.yml
plugins/ALStall/messages/en_US.yml
plugins/ALStall/menus/*.yml
plugins/ALStall/menus_en_US/*.yml
plugins/ALStall/stalls.db
依赖与兼容
| 依赖 | 是否必须 | 用途 |
|---|---|---|
| Vault + 经济插件 | 可选 | 租金、商品交易、金币购买颜色 |
| PlayerPoints | 可选 | 点券购买颜色 |
| CraftEngine | 可选 | 自定义 GUI 图标和摊位图标 |
| ItemsAdder | 可选 | 自定义 GUI 图标和摊位图标 |
| Oraxen | 可选 | 自定义 GUI 图标和摊位图标 |
| Residence | 可选 | 区域外摆摊领地检测 |
| Dominion | 可选 | 区域外摆摊领地检测 |
| WorldGuard | 可选 | 区域外摆摊区域保护检测 |
| GriefPrevention | 可选 | 区域外摆摊领地检测 |
| Lands / Towny / PlotSquared | 可选 | 区域外摆摊领地或城镇地皮检测 |
常用命令
玩家命令:
代码:
/stall
/stall create [编号]
/stall manage <编号>
| 命令 | 说明 | 权限 |
|---|---|---|
| /stall | 打开自己的摊位 GUI | alstall.use |
| /stall create [编号] | 创建自己的摊位 | alstall.create |
| /stall manage <编号> | 管理指定编号摊位 | alstall.use |
代码:
/stalladmin wand
/stalladmin open <玩家名>
/stalladmin reload
/stalladmin help region
/stalladmin help plot
/stalladmin help entity
代码:
/stalladmin region create <名称> [free|fixed] [租金]
/stalladmin region list
/stalladmin region delete <名称或ID>
代码:
/stalladmin plot create <区域名称或ID> [租金]
/stalladmin plot wand <区域名称或ID> [租金]
/stalladmin plot list [区域名称或ID]
/stalladmin plot delete <点位ID>
代码:
/stalladmin entity remove
/stalladmin entity remove <内部摊位ID>
/stalladmin entity remove <玩家名>
/stalladmin entity remove <玩家名> <摊位编号>
常用权限
| 权限 | 默认 | 说明 |
|---|---|---|
| alstall.use | 所有玩家 | 允许打开玩家摊位 GUI |
| alstall.create | 所有玩家 | 允许创建自己的摊位 |
| alstall.spawn | 所有玩家 | 允许在摆摊区域生成摊位实体 |
| alstall.spawn.anywhere | OP | 允许在 ALStall 区域外生成自由摊位,但仍受禁摆世界和领地限制 |
| alstall.buy | 所有玩家 | 允许右键摊位实体购买或出售商品 |
| alstall.color | 所有玩家 | 允许修改自己摊位名字和介绍颜色 |
| alstall.color.all | OP | 允许使用所有名字/介绍颜色 |
| alstall.color.gradient | OP | 允许购买和使用渐变色 |
| alstall.glow | 关闭 | 允许开启自己摊位实体发光,玩家可在 GUI 中 Shift+右键购买 |
| alstall.glow.color.all | OP | 允许使用所有实体发光颜色 |
| alstall.admin | OP | 管理员命令、区域管理、重载配置,并绕过禁摆世界和领地限制 |
| alstall.limit.bypass | OP | 跳过摊位、商品位和仓库页数权限限制,但仍不超过菜单/配置上限 |
| alstall.listing-filter.bypass | OP | 绕过商品上架名字、Lore、附魔黑名单过滤 |
代码:
alstall.stalls.<数量> # 可拥有多少个摊位,例如 alstall.stalls.3
alstall.items.<数量> # 每个摊位可上架多少个商品,例如 alstall.items.10
alstall.warehouse.<页数> # 每个商品仓库可用多少页,例如 alstall.warehouse.2
适合购买的人群
- 你希望服务器有玩家自助摆摊和玩家市场
- 你希望玩家可以拥有多个独立摊位,而不是只能开一个商店
- 你需要主城商业街、固定商铺或自由摆摊区域
- 你希望摊位实体到期自动清理,减少实体长期堆积
- 你需要 SQLite / MySQL 保存长期商店数据
- 你希望商品支持出售和收购两种模式
- 你需要独立商品仓库,并防止玩家把仓库当云仓库
- 你需要 Folia / Luminol 兼容
- 你需要 CustomModelData、CraftEngine、ItemsAdder、Oraxen 自定义材质支持
- 你希望颜色、渐变色、实体发光能接入权限和点券/金币购买
- 你只需要一个纯指令商店,不需要 GUI
- 你不希望使用任何数据库保存摊位数据
- 你希望商店实体永久存在且不会过期
- 你的跨服环境允许同一个 UUID 同时在多个子服在线,并且没有统一背包同步
- 你不想配置区域、权限、菜单或经济
购买前建议:
- 确认服务器使用 Java 21 或更高版本
- 确认服务端为 Paper / Purpur / Folia / Luminol 等 1.20+ 兼容服务端
- 如果要使用付费租金、商品交易或颜色购买,请安装 Vault + 经济插件,或安装 PlayerPoints
- 如果多服共用摊位数据,请使用 MySQL,不建议跨服共用 SQLite
- 如果启用区域外随地摆摊,建议同时安装并测试服务器正在使用的领地插件
- 更新前建议备份 `plugins/ALStall/` 配置目录和数据库文件
更新与配置注意事项
- 玩家可创建摊位数量会同时受 `alstall.stalls.<数量>` 和 `menus/stall_list.yml` 中 S 槽数量限制
- 每个摊位可上架商品数量会同时受 `alstall.items.<数量>` 和 `menus/products.yml` 中 B 槽数量限制
- 每个商品仓库页数受 `alstall.warehouse.<页数>` 和 `stall.max-warehouse-pages-cap` 限制,默认最多 10 页
- 区域现在按管理员选择的三维范围判断,创建区域时请选低点和高点
- 实体到期只删除实体和全息,不删除玩家商店、商品和资金
- 商品下架前必须先清空库存,库存不为 0 时不会下架
- 上架商品不会扣除手持物品,库存需要到商品仓库手动放入
- 配置、语言更新后会自动补齐缺少的配置项
ALStall
让玩家摆摊不只是一个右键商店,而是可以长期运营、可租赁、可管理、可美化的服务器市场系统。
让玩家摆摊不只是一个右键商店,而是可以长期运营、可租赁、可管理、可美化的服务器市场系统。