资源图标

二次开发 开源 世界管理 城市世界 —— 给你的服务器带来一些城市吧! 1.0.0

请登录后获取
版权类型
二次开发
插件中文名称
城市世界
插件英文名称
CityWorld
原帖地址
https://github.com/echurchill/CityWorld
支持的核心(服务端)
  1. Paper
  2. Purpur
  3. Leaves
语言支持
多语言
适配版本(Java)
  1. 最新版本
  2. 26.x
  3. 1.21
本插件基于DeepseekV41开发,AI敏感者慎用。

【这是什么】


CityWorld 把原版的地形生成器整个换掉,取而代之的是一座无限延伸的城市。

你出生在街区里,脚下是柏油路和人行道,抬头是住宅楼、写字楼和市政建筑;
往前走是商业区、工业区、公园、停车场、加油站和环岛;
再往外是郊区独栋、农场、谷仓、水塔,然后是山脉、峡谷和大海。
地下同样是一座城:下水道、地下室、矿井、地堡、地铁通道、宝藏库,
每一层的箱子都装着不同类别的战利品。

整座城市由世界种子决定:同一个种子、同一个坐标,永远是同一栋楼、
同一条街、同一个箱子里的东西。删掉存档重新生成,城市一模一样。


【城市里有什么】

· 街道系统:柏油路、人行道、斑马线、环岛、路灯、路牌(牌子上真的写着路名)
· 建筑:摩天楼、写字楼、公寓、商店、仓库、工厂、图书馆、博物馆、市政厅、
纪念碑、工地(未完工的楼,带脚手架和塔吊)
· 民居与乡村:独栋房、农场、谷仓、风车、水塔、露营地、山间小屋
· 地下世界:下水道、地下室、储物间、矿井、矿洞、地堡、油井平台
· 自然与人造物:公园、喷泉、湖泊、海滩、无线电塔、热气球、飞艇、恐龙骨架、
废弃城堡、坠毁的飞碟、油田
· 内饰:楼房内部真的能进,有办公桌、会议室、书架、货架、储物柜、
厨房、休息室、收银台
· 战利品:不同场所的箱子用不同战利品表(民居 / 仓库 / 食品 / 矿洞 /
下水道 / 工厂原料与成品……),也可以切换成原版战利品表
· 生物与 NPC:按区域生成动物、怪物和流浪村民(概率可调)


【10 种世界风格】

normal 经典城市:市中心 + 郊区 + 乡村 + 山地
destroyed 同一套城市,但是废墟版:塌陷、破洞、熔岩侵蚀
flooded 海平面抬高,街道被淹,城市半沉在水里
sanddunes 沙漠沙丘,城镇半埋在沙里
snowdunes 雪丘覆盖的同类地形
astral 异星地貌:黑色方块、水晶尖塔、埋在地下的城
maze 迷宫走廊,走廊之间夹杂小镇
nature 纯自然,没有任何建筑
metro 纯城市,没有自然地形,密不透风
floating 漂浮城市(上游因性能问题已禁用,会自动退回 normal)

风格不对或写错,会自动回落到 normal,并在后台提示。


【安装】

1. 服务器需要 Paper(见下方「兼容版本」)
2. 把 CityWorld-x.x.x.jar 放进 plugins/ 目录
3. 重启服务器

首次启动会在插件目录生成配置和自定义建筑目录:

plugins/CityWorld/config.yml 全局默认配置
plugins/CityWorld/<世界名>.yml 每个世界自己的配置
plugins/CityWorld/Schematics for <世界名>/ 放你自己的建筑图纸


【创建世界】

方式一:改 bukkit.yml(最简单,主世界也能用)

worlds:
city:
generator: CityWorld:normal

然后把 server.properties 的 level-name 改成 city,世界不存在时服务器会自动创建。
冒号后面是风格名,不写就是 normal。

方式二:用 Multiverse-Core

/mv create city NORMAL -g CityWorld:normal
/mv create ruins NORMAL -g CityWorld:destroyed
/mv create alien NORMAL -g CityWorld:astral

方式三:用插件自带命令(需要 OP)

/cityworld 创建并进入 CityWorld(normal)
/cityworld flooded 创建并进入 CityWorld_flooded
/cityworld astral nether 创建异星风格的下界世界
/cityworld leave 回到名为 world 的默认世界


【命令与权限】

/cityinfo 查看脚下这块地的地块/道路/建筑信息(玩家命令)
/citychunk regen <半径> 重新生成周围区块,最大 15
/citychunk clean <半径> 清理范围内的掉落物(卡顿服救命用)

权限节点:
cityworld.command 使用 /cityworld(默认 OP)
cityworld.create 允许用命令创建世界(默认 OP)
citychunk.command 使用 /citychunk(默认 OP)
cityinfo.command 使用 /cityinfo(默认 OP)
cityworld.* 以上全部


【配置】

config.yml 里按世界名分节,default: 是所有世界的模板。
常用开关(全部是 true/false,除标注外):

IncludeRoads / IncludeRoundabouts 街道 / 环岛
IncludeSewers / IncludeBasements 下水道 / 地下室
IncludeMines / IncludeBunkers 矿井 / 地堡
IncludeBuildings / IncludeHouses 楼房 / 民居
IncludeFarms / IncludeMunicipalities 农场 / 市政建筑
IncludeIndustrialSectors 工业区
IncludeAirborneStructures 飞艇、热气球
IncludeCaves / IncludeLavaFields 洞穴 / 熔岩区
IncludeSeas / IncludeMountains 海洋 / 山地
IncludeOres / IncludeBones 矿物 / 恐龙骨架
IncludeWorkingLights 街灯是否真的发光
IncludeNamedRoads 路牌是否写路名
IncludeDecayedBuildings destroyed 风格里楼房是否破败
UseMinecraftLootTables 箱子是否用原版战利品表
SpawnAnimals / SpawnBaddies / SpawnVagrants 动物 / 怪物 / 流浪村民概率(0~1)

改完重启生效。只想让某个世界关掉矿井,就改 plugins/CityWorld/<世界名>.yml,
里面的同名键会覆盖 config.yml。


【用自己的建筑(schematic)】

把建筑图纸丢进对应分类目录,城市生成时会像原生建筑一样把它摆出来:

plugins/CityWorld/Schematics for city/PARK/我的公园.schem
plugins/CityWorld/Schematics for city/HIGHRISE/我的塔楼.schem

分类名:ROUNDABOUT PARK HIGHRISE MIDRISE LOWRISE INDUSTRIAL MUNICIPAL
CONSTRUCTION NEIGHBORHOOD FARM NATURE ASTRAL OUTLAND

首次读取后会在图纸旁边生成 <图纸名>.schem.yml,可以调:

GroundLevelY: 0 图纸里第几层算「地面」,用来和街面对齐
OddsOfAppearance: 0.6 出现概率
FlipableX: true 允许左右镜像(变体翻倍)
FlipableZ: false 允许前后镜像
Decayable: true destroyed 世界里可能被破坏
BroadcastLocation: false 摆放时是否在后台播报坐标

格式只支持 Sponge .schem(v1/v2/v3),不需要安装 WorldEdit。
旧的 MCEdit .schematic 不支持,后台会提示,用 WorldEdit 7 另存为 .schem 即可。
尺寸超过目标地块的图纸会被跳过并给出提示。


【兼容版本】

Paper 26.1 / 26.2 / 26.3 Java 25
Paper 1.21.8 Java 21

同一个 jar 全部通用(jar 本体是 Java 21 字节码,装哪个版本就用哪个版本的 Java)。
已在 26.1.2 / 26.2 / 26.3 / 1.21.8 四个服务端上实测:10 种风格全部正常生成,
战利品表全部加载,自定义建筑正常摆放。同一组种子在不同版本生成的地形完全一致。

Folia / 代理服(Velocity/BungeeCord 自身)未测试,请谨慎使用。


【重要提醒】

1. 只对新生成的区块生效
CityWorld 不会改写已经生成过的地形。想换风格或从头开始,删掉世界文件夹重开,
或用 /citychunk regen 局部重生。

2. level-type 不认插件生成器
只能用 bukkit.yml 的 generator: 或 Multiverse 的 -g 参数指定。

3. 首次跑图比较慢
为了保证地块状态不出错,插件对每个世界的区块生成做了串行化处理。
建议 view-distance 别开太大;如果开服时全速预生成,记得把 spigot.yml 的
timeout-time(默认 60 秒)调高,否则会被判定「服务器无响应」而重启。

4. 箱子是空的?
说明战利品数据包没加载上。检查 <世界根>/datapacks/cityworld/pack.mcmeta 是否存在,
后台是否有 [Loot] loot table ... is not loaded yet 的提示。
一般 /reload confirm 或再重启一次就会恢复。

5. floating 风格会退回 normal
这是上游作者出于性能考虑主动禁用的,不是 bug。


【技术说明(给服主)】

本项目是把 DaddyChurchill 的 CityWorld 4.x 移植到现代 Paper 上的版本,
包名为 org.gsn.CityWorld。上游代码在新版本上其实跑不起来,已修复的问题包括:

· 1.20.5 生物改名(MUSHROOM_COW → MOOSHROOM)
· 1.21 数据包目录改为单数 loot_table,否则所有箱子永远是空的
· 方块材质被塞进 ItemStack 导致生成器直接启动失败
· 区块生成异常时返回 null 导致整个区块系统崩溃
· Paper 的 Moonrise 在工作线程并发生成区块,原代码的缓存不是线程安全的
· 1.21.9+/26.x 把维度拆成独立目录,数据包必须写到世界根目录才会被扫描
· 26.x 移除了旧式战利品表写法,已全部改成显式数值提供器
· 去掉 WorldEdit 依赖,自带 Sponge .schem 读取器(自研 NBT 解析)

源码与问题反馈:https://github.com/CatGirlMaoDie/CityWorld
QQ群:1087780842


【致谢】

· DaddyChurchill —— CityWorld 原作者,绝大部分设计、生成逻辑与建筑外观来自他
· Sablednah —— 命令与 API
· drew-bahrue —— WorldEdit 与战利品集成
· 以及上游项目所有贡献者

请在转载或二次开发时保留以上署名。
后退
顶部 底部