RptStructure —— 巨型建筑一键搬迁 · 框选存点/换地打印/可撤销 · 全 GUI 操作 · 适配 Folia [1.21 ~ 26.3]

原创 付费 工具 RptStructure —— 巨型建筑一键搬迁 · 框选存点/换地打印/可撤销 · 全 GUI 操作 · 适配 Folia [1.21 ~ 26.3] 1.0.0

请登录后获取
版权类型
原创
插件中文名称
RPT建筑迁移器
插件英文名称
RptStructure
原帖地址
#
支持的核心(服务端)
  1. Paper
  2. Folia
语言支持
中文(简体)
适配版本(Java)
  1. 26.x
  2. 1.21

关于这个插件​

RptStructure 是给服主 / 管理员用的巨型建筑搬迁工具。
要做的事很简单:在游戏里把一片区域框起来 → 存成一座"建筑" → 走到新位置打印出来。听起来像 WorldEdit 的 schematic,但它解决的是另一个维度的问题 —— 大。
原版 .nbt 结构方块和大多数结构插件在遇到"一座上百格见方的主城"时只有两种命运:要么卡服(一次性几百上千万个方块挤在同一个 tick 里),要么直接内存溢出。RptStructure 的做法是把建筑按区块切成很多小片:每一片的横截面固定是一个区块(16×16),纵向再按 48 格分层。切完之后一片一片地处理,每片单独加载区块、单独读写,所以再大的建筑也只是"慢一点",不会把服务端拖死,也完全适配 Folia 这种区域多线程核心。
还有一个服主才会懂的点:打印之前会先把落点的原地形备份下来。建筑铺下去之后发现位置偏了、朝向错了、或者干脆铺错了世界 —— 点一下「撤销」,那一整片原地形会原样恢复。不需要提前手动 //copy 备份,也不需要回滚整个存档。

功能说明​

1. 一个界面,管全部操作​

输入 /rptsm(或 /structuremigrator)打开建筑迁移界面。界面里一共 7 个按钮 + 1 张状态牌:

你想干的事按钮做什么
设置选区点 1点 1把你脚下这一格设为角点 1
设置选区点 2点 2把你脚下这一格设为角点 2
重置选区重置清掉两个点,同时关掉线框与预览
保存建筑保存把选区里的建筑存下来(点击后在聊天栏输入名字)
预览建筑预览在你脚下画出这座建筑将要占的范围(绿色线框)
加载 / 打印建筑加载把建筑打印到当前位置(点击后在聊天栏输入名字)
撤销上次加载撤销把上一次打印前备份的原地形恢复回去
  • ★ 两个点都设好之后,会有一条青色粒子线框把选区框出来,一眼就能确认自己选对了没有。
  • ★ 「预览」和「加载」是一对:先点预览,你会看到这座建筑要占多大一块;确认没问题,直接点加载,它就正好落在你刚才预览的位置(不需要再走一遍)。
  • ★ 界面里所有点击与拖拽都被拦下,图标拿不走、也塞不进东西。
  • ★ 界面中间那张状态牌随时告诉你:两个点设了没、选区多大、当前在忙还是空闲、撤销备份还能不能用、这座服务器上一共存了哪几座建筑。
  • ★ 命令只有三条:/rptsm(开界面)、/rptsm reload(管理员重载配置)、/rptsm help(帮助)。打错的子命令会直接打开界面,不会让管理员卡在"没有这个命令"上。

2. 为什么大建筑不会卡服​

这是本插件的核心,值得单独说一段。
① 按区块分片。 一座建筑的选区会被切成若干小片:横向严格压在单个区块(16×16)内,纵向每 48 格一层。这样每一个分片只归属一个区域(region) —— 在 Folia 这种把世界切成多个区域、每区域独立线程的核心上,"读这片方块、写这片方块"就永远只发生在同一条线程上,天然满足线程归属要求,不需要任何跨区域加锁。
② 一片一片来,而且严格按顺序。 分片不是一股脑全丢出去,而是"加载这一片的区块 → 处理完 → 再处理下一片"。
③ 按从下往上放。 打印建筑时,分片按 Y 从低到高排序。这一点很关键:如果从上往下放,一座有沙子和砾石的建筑,上半部分会先掉下来散掉。从下往上就完全没有这个问题。撤销时反过来从上往下放回,同样是刻意的。
④ 文件读写完全不占用服务器线程。 每一片在"读世界方块"和"写文件"之间是完全分开的两步,读写 .nbt 文件全程在插件自己的独立线程上跑,服务器区域线程只负责搬方块。所以即便你在打印一座超大型建筑,玩家该跑图跑图、该打架打架,不会被拖成幻灯片。

3. 打印前自动备份,随时可撤销​

  • 点「加载」之后,插件先把落点那一片原地形完整备份下来(备份成同样的分片格式,存到 plugins/RptStructure/structures/_undo_<你的UUID>/)。
  • ★ 只有备份完整成功,才会开始动世界。备份中途出任何问题都会取消加载并提示你,原地形一个方块都不动。
  • 备份就绪之后才开始打印。打印完如果发现位置不对,回界面点「撤销」即可 —— 它会按原位置把备份从上往下打印回去,然后删掉这份备份。
  • ★ 撤销记录是持久化的:就算中途重启了服务端,只要还没撤销过,回来照样能点撤销。不会出现"备份还在但撤销按钮没反应"的情况。
  • 备份是每个管理员各一份的,互不干扰。
  • 如果你在 config.yml 里把 undo.enabled 关掉,「加载」按钮会直接拒绝执行并说明原因 —— 因为加载前必须能备份才能撤销,关掉备份等于放下去就回不了头。

4. 保存是"两阶段"的,不会把旧建筑弄坏​

  • 保存 / 覆盖一座同名建筑时,插件会先把所有新分片写进 .tmp 临时文件;
  • 全部写成功之后,才统一改名替换成正式文件;
  • 只要中途有任何一片失败,临时文件会被清掉,原来的旧数据一个字节都不动,并提示"保存失败,已保留原有数据"。
也就是说:不存在"保存到一半失败,旧建筑被写坏了"这种情况。

5. 输入建筑名不会打扰别人​

点「保存 / 预览 / 加载」之后,界面会关闭,聊天栏提示你输入建筑名。
  • ★ 这个名字绝对不会发出去:插件用了两道保险(取消聊天事件 + 清空这条消息的收件人列表),所以这句话不会出现在任何人的聊天栏、不会进控制台日志,连你自己也看不到。
  • 输入 cancel 或 取消 可以放弃,默认 60 秒没输入会自动作废(可在 config.yml 调整)—— 作废之后你正常聊天不会被当成建筑名。
  • 默认建筑名只允许字母 / 数字 / 下划线 / 短横线,最多 32 位(可在 config.yml 改正则,想支持中文就改 structure.name-regex)。

6. 数据存在哪、什么格式​

  • 全部数据就是文件:plugins/RptStructure/structures/<建筑名>/ 下一堆 .nbt 分片。
  • ★ 没有数据库、没有外部依赖,不需要装 MySQL,也不需要任何前置插件。
  • ★ .nbt 是原版结构格式 —— 用原版结构方块或其它工具能直接读;想手工搬服务器,把 structures/ 目录整个拷走即可。
  • 撤销位置记录在 plugins/RptStructure/undo.yml(很小的一行一个玩家)。

支持版本与环境​

项目说明
Minecraft 版本1.21 ~ 26.3(同一个 jar 跨版本,字节码目标 Java 21)
服务端核心Folia、Paper(已声明 folia-supported: true)
Java 运行环境Java 21 及以上
前置插件无 —— 不需要 WorldEdit、不需要 Vault、不需要任何经济/权限插件(权限可选用 LuckPerms 之类的权限插件分配)
数据库无,数据就是 .nbt 文件
编译基线dev.folia:folia-api:26.2.build.1-beta

目标用户​

  • 要搬迁主城 / 大型建筑的服主 —— 这是本插件唯一的目标场景,也是它存在的理由。
  • 用 Folia 核心的服主 —— 结构类操作在 Folia 上是最容易踩"跨区域碰方块"红线的一类功能。本插件从设计上就把分片边界钉在区块上,天生安全。
  • 被"粘贴大建筑把服务器卡死"搞怕过的服主 —— 分片 + 顺序处理 + 文件 IO 完全离线程,就是冲着这个来的。
  • 经常"铺完发现铺错位置"的人 —— 打印前自动备份 + 一键撤销,不用再手动 //undo。
⚠️ 本插件不做的事:不提供建造 / 编辑 / 复制粘贴的通用编辑功能,也不做镜像、旋转、中轴对齐那一套。它只做一件事:把一整片已有建筑搬到别的地方去。要通用编辑器请用 WorldEdit。

是否付费​

付费插件。 具体定价与授权方式以资源页「售价」项为准。
  • 插件不含任何联网校验、授权服务器或机器绑定,购买后安装即用,离线环境照常运行。
  • 不区分免费版 / 高级版,买到的就是完整功能 —— 所有功能(含撤销)都在同一个 jar 里,没有任何功能被阉割。
  • 插件未做任何混淆,欢迎安全审查。

获取作者帮助​

途径内容
交流群QQ 群 1124248111
作者 QQ2221899680
游戏内输入 /rptsm help 查看说明

使用教程​

安装​

  1. 把 RptStructure-1.0.0.jar 放进服务端 plugins/ 目录。
  2. 重启服务端(新装插件不支持热加载)。
  3. 首次启动会生成 plugins/RptStructure/config.yml、gui.yml 与 structures/ 目录,默认配置开箱可用。
  4. 按需修改 config.yml(运行规则)与 gui.yml(界面),然后执行 /rptsm reload 生效,不需要重启服务端。
最快上手方式:/rptsm 打开界面 → 站在建筑的一角点「点 1」→ 走到对角点「点 2」→ 点「保存」→ 在聊天栏输入名字。

指令列表​

★ 全部功能都在界面里,所以这里只有三条:
指令权限说明
/rptsmrptsm.use打开建筑迁移界面(所有操作都在界面里)
/rptsm help免权限显示指令帮助
/rptsm reloadrptsm.admin重载 config.yml + gui.yml

主指令为 /rptsm,别名 /structuremigrator。
打错的子命令会直接打开界面,不会让人卡在"没有这个命令"上。

权限节点​

默认口径:普通玩家默认没有,OP 默认全部拥有(服主开箱即用)。
要给某个管理组开放,用权限插件授予即可,例如 LuckPerms:
/lp group admin permission set rptsm.use true
权限默认值说明
rptsm.use仅 OP打开界面并使用全部功能(设点 / 保存 / 预览 / 加载 / 撤销)
rptsm.admin仅 OP重载配置

本插件是管理员工具,因此不做付费分档 —— 没有"体积上限""建筑数量上限""高级功能解锁"这类权限节点。

主要配置项(config.yml)​

配置项默认值说明
structure.root-folderstructures建筑数据根目录(每座建筑一个子目录)
structure.name-regex字母/数字/下划线/短横线/中文建筑名允许的字符(正则)。
structure.name-max-length32建筑名长度上限
structure.y-band-size48纵向分带高度。调小 = 分片更多更平滑,调大 = 分片更少单次更重
structure.input-timeout-seconds60等管理员在聊天栏输入建筑名的超时(秒)
particle.selection-color / .preview-colorAQUA / LIME选区线框 / 预览线框的颜色
particle.size1.5粒子大小
particle.interval-ticks10重画间隔(tick),调大能省客户端性能
undo.enabledtrue关掉之后禁止加载(因为加载必须能备份才能撤销)
messages.*见默认文件全部提示文案,支持 MiniMessage

界面配置(gui.yml,独立文件)​

界面相关的一切都在 plugins/RptStructure/gui.yml 里,不在 config.yml:
配置项说明
title / rows界面标题 / 行数(1~6 行)
filler填充物(材质、名字)
layout★ 字符矩阵布局:每行一个 9 字符的字符串。空格 = 留空,# = 填充物,其它字符由装饰格的 symbol 认领
decorations.<键>每个按钮/展示格的 symbol 或 slot、material、name、lore,以及 action(pos1 / pos2 / reset / save / preview / load / undo / close)
texts状态牌上"没数据时"的占位文本

也就是说:想换按钮顺序就改 layout 的字符矩阵,想换图标/文案就改 decorations,全都不用碰代码。
配置写错(空值、非法正则、非法 MiniMessage、非法物品名)时,插件会自动退回默认值并在控制台提示一次,不会把异常抛给玩家、也不会让插件加载失败。

常见问题​

  • 保存时覆盖了同名建筑,旧的那座还在吗? 不在了(同名即覆盖),但覆盖过程是两阶段的 —— 新数据全部写成功才替换,失败会原样保留旧建筑。
  • 为什么「加载」点不了 / 说自己没权限? 加载要求 undo.enabled: true(默认就是开的)。如果是关掉的,加载会被直接拒绝 —— 因为加载前必须能备份才能撤销。
  • 撤销只能撤一次吗? 是。每个管理员只保留上一次加载的备份(备份就是那一整片原地形,已经很大了,保留多份不现实)。撤销成功后备份即删除。
  • 服务器崩溃 / 重启了,还能撤销吗? 能。撤销位置是落盘保存的,只要还没撤销过,重启回来照样点得动。
  • 打印到一半服务器关了会怎样? 建筑只铺了一部分,但备份是完整的(备份在打印之前就已经落盘了)。重启后点「撤销」即可把那一整片恢复原状。
  • 能撤销「保存」吗? 不能,也不影响世界 —— 保存只是读方块存成文件,从不修改世界。
  • 多个人同时操作会不会打架? 每个管理员有独立的选区和独立的撤销备份,互不影响。同一个人连点会被拦下("上一个操作还没完成"),不会出现两次操作叠在一起。
  • 建筑存在哪?怎么备份服务器? plugins/RptStructure/structures/<建筑名>/。整个目录拷走就行 —— 它就是一堆标准 .nbt。
  • 能搬到别的服务器吗? 能。把 structures/<建筑名>/ 整个目录拷到目标服务器的同路径下,/rptsm reload(或重启)后就能直接加载。
  • 和原版结构方块 / WorldEdit 兼容吗? 文件本身是原版结构格式,可以用原版结构方块的工具读取;但本插件不做 schem 一类格式的导入导出,也不提供建造/编辑功能。
  • 超大建筑大概要多久? 取决于分片数量和磁盘速度。建议先用「预览」确认范围再加载;打印过程中界面不会卡死,你可以照常走动,完成后会收到提示。

声明​

  • 本插件为原创作品,保留所有权利,默认不允许转载与整合。如需转载或整合进服务端整合包,请先通过上方交流群或作者 QQ 联系获取授权。
  • 本插件未使用任何混淆手段,欢迎安全审查。
  • 本插件不含任何后门、病毒或远程控制代码,不含任何联网校验,所有数据仅保存在服务器本地 plugins/RptStructure/ 目录中。
作者
RPT
查看
97
首次发布
最后更新

评分

0.00 星 0 次评分

RPT 的其他资源

后退
顶部 底部