diff --git a/src/content/docs/java/advance/optimize/go.mdx b/src/content/docs/java/advance/optimize/go.mdx index 55eaa1a14..2c362dbb0 100644 --- a/src/content/docs/java/advance/optimize/go.mdx +++ b/src/content/docs/java/advance/optimize/go.mdx @@ -1026,15 +1026,21 @@ exp: 4.0 ::: -将红石系统替换为优化版本,减少冗余更新,降低服务器必须计算的逻辑量。可能会对~~个别~~的红石机器产生影响, +将红石系统替换为优化版本,减少冗余更新,降低服务器必须计算的逻辑量。可能会对 ~~个别~~ 的红石机器产生影响, 但其提升非常大,性能提升可能有 70%,利大于弊。甚至还可以修复 Bukkit 造成的红石同步问题。 -`ALTERNATE_CURRENT`是基于 [Alternate Current](https://modrinth.com/mod/alternate-current)。更多信息请阅读该页面。 +`ALTERNATE_CURRENT` 是基于 [Alternate Current](https://modrinth.com/mod/alternate-current)。更多信息请阅读该页面。 :::caution -此选项会使 TNT 复制失效,生电服请不要考虑此选项。 +Paper 提供的两种红石优化算法都会对红石机器有不同程度的轻微影响。 + +`ALTERNATE_CURRENT` 算法会使某一 TNT 复制机的设计失效,需要对设计进行更改,可以查看 SpaceWalkerRS 在 [alternate-current#23](https://github.com/SpaceWalkerRS/alternate-current/issues/23#issuecomment-1475507971) 中对这个问题的详细解释,同时在 Issue 底部可以找到有人附上的机器改造教程。 + +`EIGENCRAFT` 算法可以兼容目前几乎所有的红石机器,但是也有罕见的边缘例子,比如 theosib 在 [MC-81098 评论](https://mojira.dev/MC-81098#comment-420777) 中提及的红石设计。 + +如你服是生电服并且玩家不想改造机器,可以使用 `EIGENCRAFT`。或者保留此项为 `VANILLA` 不使用红石优化。 ::: diff --git a/src/content/docs/java/process/redstone/intro.md b/src/content/docs/java/process/redstone/intro.md index 4cb5c080d..7320894fc 100644 --- a/src/content/docs/java/process/redstone/intro.md +++ b/src/content/docs/java/process/redstone/intro.md @@ -4,10 +4,10 @@ title: 概述 生电是 Minecraft 服务器中重要的一环,同时也是吸引玩家的一个重要手段 -这篇文档不是教你如何制作红石机器,而是教你如何在服务端中 **还原原版特性**,以及一些专门用于红石的服务端 +这篇文档不是教你如何制作红石机器,而是教你如何调整服务端配置以 **还原原版特性**,以及介绍一些专门用于红石的服务端核心 ## 「生电」的概念 在游戏中,「生电」,顾名思义,「生」指的是「生存」,「电」指的是「电路」。 -更详细的定义请参考 https://www.bilibili.com/opus/689475167383978005 +更详细的定义可参考 [《生电究竟是个什么东西?》第 1 期:什么是生电?](https://www.bilibili.com/opus/689475167383978005) diff --git a/src/content/docs/java/process/redstone/mchprs.md b/src/content/docs/java/process/redstone/mchprs.md index 0b52bc0eb..0f6134ce7 100644 --- a/src/content/docs/java/process/redstone/mchprs.md +++ b/src/content/docs/java/process/redstone/mchprs.md @@ -2,7 +2,7 @@ title: MCHPRS --- -一个为红石而构建的 Minecraft 服务器。每个 512x512 的区域运行在单独的线程上,基于 Rust ,拥有非常高的性能 +一个为红石而构建的 1.20.4 Minecraft 服务器。基于 Rust,每个 512x512 的区域运行在单独的线程上,拥有非常高的性能 MCHPRS 与传统服务器非常不同。因为这个服务器是为计算红石的使用而量身定制的,所以许多原版的东西在这里不存在 @@ -24,7 +24,7 @@ cargo build --release 完成后,编译的可执行文件为 `./target/release/mchprs` 或 `./target/release/mchprs.exe` ,具体取决于操作系统。 -如果你希望基于你的 CPU 进一步优化 (但兼容性会下降),你可以使用这个指令构建: +如果你希望基于你的 CPU 进一步优化(但兼容性会下降),你可以使用这个指令构建: ```bash RUSTFLAGS="-C target-cpu=native" cargo build --release @@ -50,51 +50,54 @@ RUSTFLAGS="-C target-cpu=native" cargo build --release ## Velocity -MCHPRS 本身不支持玩家身份验证,但支持 Velocity 转发 +MCHPRS 本身不支持玩家身份验证,但支持 Velocity 的现代转发 -要使用 Velocity IP 转发,您必须设置并配置 Velocity 代理。确保您的 Velocity 配置中 `player-info-forwarding-mode` 设置为 -`modern`.然后,将其追加到 `Config.toml`: +要使用 Velocity IP 转发,您必须设置并配置 Velocity 代理。确保您 Velocity 配置中的 `player-info-forwarding-mode` 为 +`modern`。然后,将以下配置追加到 `Config.toml`: ```toml [velocity] enabled = true -# 这是来自你 velocity 配置中 `forwarding-secret-file` 文件里的密钥内容, +# 这是来自你 Velocity 配置中 `forwarding-secret-file` 文件里的密钥内容, # 而不是该文件的路径。 secret = "<密钥>" ``` ## 普通命令 -| 命令 | 缩写 | 说明 | -| ------------------------------ | --------------- | ---------------------------------------------------------------------------------------------------------------- | -| `/rtps [rtps\|无限]` | 无 | 将区域的红石刻每秒设置为`[rtps]`(1 个红石刻=2 个游戏刻) | -| `/radvance [刻数]` | `/radv` | 使区域推进`[刻数]`个红石刻 | -| `/teleport [玩家名]` | `/tp` | 传送至目标玩家所在位置 | -| `/teleport [x] [y] [z]` | `/tp` | 传送至指定坐标(支持相对坐标,浮点数格式参见[此文档](https://doc.rust-lang.org/std/primitive.f64.html#grammar)) | -| `/speed [速度值]` | 无 | 设置飞行速度 | -| `/gamemode [模式]` | `/gmc`, `/gmsp` | 切换游戏模式 | -| `/container [类型] [信号强度]` | 无 | 获取特定容器(如木桶),该容器被比较器检测时会输出指定信号强度 | -| `/toggleautorp` | 无 | 切换红石编译器的自动编译功能 | -| `/stop` | 无 | 关闭服务器 | +| 命令 | 缩写 | 说明 | +| ------------------------------ | --------------- | ------------------------------------------------------------------------------------------------------------------------ | +| `/rtps [rtps\|无限]` | 无 | 将区域的红石刻每秒设置为 `[rtps]`。默认值:`10`。(1 个红石刻 = 2 个游戏刻) | +| `/radvance [刻数]` | `/radv` | 使区域推进 `[刻数]` 个红石刻 | +| `/teleport [玩家名]` | `/tp` | 传送至目标玩家所在位置 | +| `/teleport [x] [y] [z]` | `/tp` | 传送至指定坐标(支持相对坐标,浮点数格式参见 [Rust 官方文档](https://doc.rust-lang.org/std/primitive.f64.html#grammar)) | +| `/speed [速度值]` | 无 | 设置飞行速度 | +| `/gamemode [模式]` | `/gmc`,`/gmsp` | 切换游戏模式 | +| `/container [类型] [信号强度]` | 无 | 获取特定容器(如木桶),该容器被比较器检测时会输出指定信号强度 | +| `/worldsendrate [频率]` | `/wsr` | 将世界发送速率设置为 `[频率]`(向客户端发送世界更新的频率)。范围:`1` ~ `1000`。默认值:`60`。 | +| `/toggleautorp` | 无 | 切换红石编译器的自动编译功能 | +| `/stop` | 无 | 关闭服务器 | ## Redpiler -Redpiler 是 MCHPRS 的核心,这允许红石模拟比其他方式快得多。当 redpiler 运行时,所有红石连接都会预先计算,因此在此状态下与世界的交互受到限制。当 -redpiler 运行时放置或破坏方块将导致重置并禁用 redpiler. +Redpiler 是 MCHPRS 的核心,这允许红石模拟比其他方式快得多。当 Redpiler 运行时,所有红石连接都会预先计算,因此在此状态下与世界的交互受到限制。当 +Redpiler 运行时放置或破坏方块将导致重置并禁用 Redpiler。 | 命令 | 别名 | 说明 | | ------------------- | ------- | ---------------------------------------------------- | | `/redpiler compile` | `/rp c` | 手动启动红石编译器。可使用下列多个参数(详见下文)。 | | `/redpiler reset` | `/rp r` | 停止红石编译器。 | -| 参数 | 简写 | 说明 | -| ---------------- | ---- | ------------------------------------------------------------------------------------------------------------------- | -| `--optimize` | `-o` | 启用红石编译优化。警告:此操作可能导致当前建造状态损坏。使用时请备份存档。 | -| `--io-only` | `-i` | 仅更新输入/输出相关方块状态(包括活板门、红石灯、音符盒、按钮、拉杆和压力板)。此参数可显著降低延迟并提升模拟速度。 | -| `--wire-dot-out` | `-d` | 将点状红石线视为`-i`参数中的输出方块(适用于彩色显示器等场景)。 | -| `--update` | `-u` | 红石编译器重置后更新全部方块状态。 | -| `--export` | `-e` | 以二进制格式导出编译图谱。适用于红石编译图谱的第三方开发场景。 | -| `--export-dot` | 无 | 生成后端图谱的 graphviz 点文件。用于调试/开发用途。 | +| 参数 | 简写 | 说明 | +| ------------------------ | ---- | ------------------------------------------------------------------------------------------------------------------- | +| `--optimize` | `-o` | 启用红石编译优化。警告:此操作可能导致当前建造状态损坏。使用时请备份存档。 | +| `--io-only` | `-i` | 仅更新输入/输出相关方块状态(包括活板门、红石灯、音符盒、按钮、拉杆和压力板)。此参数可显著降低延迟并提升模拟速度。 | +| `--wire-dot-out` | `-d` | 将点状红石线视为`-i`参数中的输出方块(适用于彩色显示器等场景)。 | +| `--update` | `-u` | 红石编译器重置后更新全部方块状态。 | +| `--export` | `-e` | 以二进制格式导出编译图谱。适用于红石编译图谱的第三方开发场景。 | +| `--export-dot` | 无 | 生成后端图谱的 graphviz 点文件。用于调试/开发用途。 | +| `--print-after-all` | 无 | 每次红石编译器构建后输出 RIL 电路调试信息。用于调试/开发用途。 | +| `--print-before-backend` | 无 | 每次后端编译之前输出 RIL 电路调试信息。用于调试/开发用途。 | ## 优点 @@ -104,4 +107,4 @@ redpiler 运行时放置或破坏方块将导致重置并禁用 redpiler. ## 其他 -自行查看 [README](https://github.com/MCHPR/MCHPRS/) +更多有关 MCHPR 的介绍请查看 [README](https://github.com/MCHPR/MCHPRS/) diff --git a/src/content/docs/java/process/redstone/mod.md b/src/content/docs/java/process/redstone/mod.md index ef836576f..2d6099834 100644 --- a/src/content/docs/java/process/redstone/mod.md +++ b/src/content/docs/java/process/redstone/mod.md @@ -10,33 +10,25 @@ Carpet 是一个适用于原版 Minecraft 的 Mod,它可以开关一些特性 Carpet 还有许多扩展,你可以在下表里下载它们 -| 名字 | 下载链接 | -| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Carpet Extra | [Modrinth](https://modrinth.com/mod/carpet-extra) [CurseForge](https://www.curseforge.com/minecraft/mc-mods/carpet-extra) [GitHub](https://github.com/gnembon/carpet-extra/releases) | -| Carpet TIS Addition | [Modrinth](https://modrinth.com/mod/carpet-tis-addition) [CurseForge](http://curseforge.com/minecraft/mc-mods/carpet-tis-addition) [GitHub](https://github.com/TISUnion/Carpet-TIS-Addition/releases) | -| Carpet Org Addition | [Modrinth](https://modrinth.com/mod/carpet-org-addition) [GitHub](https://github.com/fcsailboat/Carpet-Org-Addition/releases) | -| GugleCarpetAddition | [Modrinth](https://modrinth.com/mod/gca) [CurseForge](https://www.curseforge.com/minecraft/mc-mods/guglecarpetaddition) [GitHub](https://github.com/Gu-ZT/gugle-carpet-addition) | +| 名字 | 下载链接 | +| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Carpet Extra | [Modrinth](https://modrinth.com/mod/carpet-extra) [CurseForge](https://www.curseforge.com/minecraft/mc-mods/carpet-extra) [GitHub](https://github.com/gnembon/carpet-extra/releases) | +| Carpet TIS Addition | [Modrinth](https://modrinth.com/mod/carpet-tis-addition) [CurseForge](http://curseforge.com/minecraft/mc-mods/carpet-tis-addition) [GitHub](https://github.com/TISUnion/Carpet-TIS-Addition/releases) | +| Carpet Org Addition | [Modrinth](https://modrinth.com/mod/carpet-org-addition) [GitHub](https://github.com/fcsailboat/Carpet-Org-Addition/releases) | +| Gugle's Carpet Addition | [Modrinth](https://modrinth.com/mod/gca) [CurseForge](https://www.curseforge.com/minecraft/mc-mods/guglecarpetaddition) [GitHub](https://github.com/Gu-ZT/gugle-carpet-addition) | 这些拓展的规则和命令基本上都在 GitHub 里(都有中文) ## 其他 Mod -其他 mod 基本上都是对生电作用没那么大,所以在下面简单介绍一下 - -AppleSkin(正常在客户端显示饱和度和消耗度) - -Xaero's Minimap 和 Xaero's World Map(在客户端获取其他功能) - -Jade(许多功能需要服务器端安装才能使用) - -JEI/REI(一些功能需要服务器端安装才能使用) - -Servux(让玩家在服务器可以正常使用使用 MiniHUD 中的显示结构功能和更好的原理图粘贴) - -Easy Auth(登录) - -BBOR(服务器支持才能正常显示结构信息,要不然就只能客户端手动输入种子) - -Syncmatica(服务器安装客户端才能正常使用) - -Fuji(像 CMI 一样的多功能 mod) +以下的 mod 对生电帮助可能没那么大,但是可以提高游玩和生存的体验,所以简单介绍一下 + +- [AppleSkin](https://www.mcmod.cn/class/744.html) - 饥饿值,食物的饱食度恢复的扩展显示(需要服务器端安装才能显示准确的值) +- [Xaero's Minimap](https://www.mcmod.cn/class/1701.html) 和 [Xaero's World Map](https://www.mcmod.cn/class/1483.html) - 地图显示模组 +- [Jade](https://www.mcmod.cn/class/3482.html) - 支持显示多种有用信息的 HUD 模组,用于提高生存体验(许多功能需要服务器端安装才能使用) +- [JEI](https://www.mcmod.cn/class/459.html) 或 [REI](https://www.mcmod.cn/class/1674.html) - 用于查看物品和合成配方。(一些功能需要服务器端安装才能使用) +- [Servux](https://www.mcmod.cn/class/5219.html) - 让玩家在服务器可以正常使用 MiniHUD 中的显示结构功能和更好的原理图粘贴。 +- [EasyAuth](https://www.mcmod.cn/class/6241.html) - 一个用于服务端的登录模组。 +- [BBOR](https://www.mcmod.cn/class/1869.html) - 支持显示自然生成的结构,3D 群系边界,和史莱姆区块。 +- [Syncmatica](https://www.mcmod.cn/class/6842.html) - 允许上传投影原理图到服务器,并与其他玩家共享。 +- [Fuji](https://www.mcmod.cn/class/12645.html) - 像 CMI 一样的多功能模组。 diff --git a/src/content/docs/java/process/redstone/plugin.md b/src/content/docs/java/process/redstone/plugin.md index 40bbf7433..533f1e774 100644 --- a/src/content/docs/java/process/redstone/plugin.md +++ b/src/content/docs/java/process/redstone/plugin.md @@ -2,236 +2,424 @@ title: 插件端 --- -从原版特性方面来讲,插件端其实并不适合原版生电,Paper 也在他们的文档中说明了这一点 +从原版特性方面来讲,插件端其实并不适合原版生电,Paper 文档中也说明了这一点: -`Unfortunately, it currently is not possible to get a 100% Vanilla experience in Paper. ` +`Unfortunately, it currently is not possible to get a 100% Vanilla experience in Paper.` `遗憾的是,目前在 Paper 中无法获得 100% 的原版体验。` -但插件端广阔的插件生态以及较好的优化也是一些人在 **轻度生电** 的情况下使用插件端的原因。这篇文档会通过调整服务端配置尽可能在插件端还原原版特性 +但插件端广阔的插件生态以及较好的优化也是一些人在 **轻度生电** 的情况下使用插件端的原因。这篇文档会通过调整服务端配置尽可能在插件端还原原版特性和相关行为,以贴合轻度生电或原版生存体验。 -## Paper +:::note + +本篇文档所列配置项均基于对应核心的最新 MC 版本。 + +文中提供的推荐值未必完全适用于您的服务器,复制粘贴并不可取,请根据实际情况和需求来酌情调整服务端配置。 + +::: -以下是推荐的配置,以获得最接近原版的生电体验: +## Paper -### Paper 世界默认配置 (paper-world-defaults.yml) +### Paper 世界默认配置 ```yaml +# paper-world-defaults.yml chunks: - delay-chunk-unloads-by: 0s # 延迟卸载区块的时间,格式为持续时间,例如 10h(小时)、25m(分钟),支持 d、h、m 和 s 单位 - max-auto-save-chunks-per-tick: 200 # 每个 Tick 自动保存的最大区块数 + # 延迟卸载区块的时间,格式为带有单个时间单位的数字,例如 10h(小时)、25m(分钟),支持 d、h、m 和 s 单位 + # 设为 0s,以允许使用末影珍珠滞留回传装置 + delay-chunk-unloads-by: 0s + # 每 tick 自动保存的最大区块数 + max-auto-save-chunks-per-tick: 200 collisions: - allow-player-cramming-damage: true # 玩家因实体过多而发生拥挤碰撞时是否会受到伤害 - max-entity-collisions: 2147483647 # 达到此数量后服务器将停止处理实体碰撞 + # 当玩家因实体过多而发生拥挤碰撞时是否会受到伤害 + allow-player-cramming-damage: true + # 达到此数量后服务器将停止处理实体碰撞 + # 设为 2147483647 或极高的值,以尽可能的处理密集实体碰撞,可能会降低性能 + max-entity-collisions: 2147483647 entities: behavior: - only-merge-items-horizontally: true # 仅合并高度相同的物品 - phantoms-do-not-spawn-on-creative-players: false # 禁止幻翼在创造模式玩家周围生成 - phantoms-only-attack-insomniacs: false # 禁止幻翼攻击曾经睡眠过的玩家 - cooldown-failed-beehive-releases: false # 为蜜蜂释放失败时添加冷却时间(例如蜂巢被阻挡或夜晚) + # 是否为蜜蜂离巢尝试添加失败冷却时间 + # 原版中,蜜蜂会不断检测蜂巢是否被方块阻挡和天气,以检查是否能离开蜂巢 + # 设为 false,以确保蜜蜂在符合条件时马上离巢,如阻挡蜂巢的栅栏门被打开 + cooldown-failed-beehive-releases: false + # 是否仅合并高度相同的掉落物 + only-merge-items-horizontally: true + # 是否禁止幻翼在创造模式玩家的周围生成 + phantoms-do-not-spawn-on-creative-players: false + # 幻翼是否只攻击长期不睡觉的玩家 + phantoms-only-attack-insomniacs: false + # 当实体被困住时,重新获取 POI 点操作的冷却延迟时间(单位:tick) + # 设为 disabled,不施加额外的冷却延迟 + stuck-entity-poi-retry-delay: disabled spawning: - count-all-mobs-for-spawning: true # 生成点生物和其他生物是否计入全局生物上限 - duplicate-uuid: - mode: NOTHING # 指定重复实体 UUID 的处理方式:SAFE_REGEN(重新生成或删除)、DELETE(删除实体)、NOTHING(不处理)、WARN(记录日志) - filter-bad-tile-entity-nbt-from-falling-blocks: false # 从下落方块中移除特定 NBT 数据(注意:有些冒险地图可能需要关闭此项,但公共服务器不建议关闭) - filtered-entity-tag-nbt-paths: [] # 需要从物品的 EntityTag 中移除的 NBT 标签路径列表(格式与原版命令相同;为空列表时禁用过滤) - per-player-mob-spawns: false # 生物上限是否按每位玩家计算(开启后生物分布更均匀,避免单人占用全部生物上限) + # 箭的最大清除时间(单位:tick) + # 设为 disabled,不断运动中的箭将不会被清除,允许使用以此机制实现的区块加载器或其他装置 + # 同时玩家可使用此机制制造卡服机 + max-arrow-despawn-invulnerability: disabled + # 是否将由刷怪笼生成的生物和其他杂项实体计入全局生物生成上限 + count-all-mobs-for-spawning: true + duplicate-uuid: + # 指定处理重复 UUID 的实体的方式,支持以下方式 + # SAFE_REGEN(重新分配 UUID,如果实体相似则删除) + # DELETE(删除实体) + # NOTHING(不处理,不输出日志) + # WARN(不处理,仅输出日志) + mode: NOTHING + # 是否从下落方块中移除特定 NBT 数据(注意:有些冒险地图可能需要关闭此项,但公共服务器不建议关闭) + filter-bad-tile-entity-nbt-from-falling-blocks: false + # 需要从物品的 EntityTag 中移除的 NBT 标签列表,标签格式与在原版命令中使用的相同 + # 设为空列表,以禁用移除 + filtered-entity-tag-nbt-paths: [] + # 生物生成上限是否按每位玩家计算(开启后生物分布更均匀,避免单个玩家占用全部生成上限) + # 设为 false,以遵循原版的生成机制 + per-player-mob-spawns: false +fixes: + # 是否修复掉落物合并穿墙 + # 仅推荐 spigot.yml 内 merge-radius.item 的值较高的时候使用 + # 设为 true, 非原版,但是可能会对生电机器有用 + fix-items-merging-through-walls: true hopper: - cooldown-when-full: false # 漏斗满时是否应用短暂冷却,避免持续尝试吸取新物品 + # 是否在漏斗满时应用短暂冷却,避免持续尝试吸取新物品 + cooldown-when-full: false maps: - item-frame-cursor-limit: 2147483647 # 每个地图允许的游标(标记)数量,过多游标可能导致客户端卡顿 + # 每个地图允许的最大指针(标记)数量,过多的标记会导致客户端卡顿 + item-frame-cursor-limit: 2147483647 +misc: + # 是否禁用末影龙重生前检查末影水晶放置位置的优化 + # 设为 true,以允许远程复活末影龙,和使用屠龙炮等机制 + allow-remote-ender-dragon-respawning: true + # 是否在方块更新的同时更新附近生物寻路 + # 设为 true,以确保强依赖方块改动更新生物寻路的生电机器能正常工作 + update-pathfinding-on-block-update: true scoreboards: - use-vanilla-world-scoreboard-name-coloring: true # 使用原版记分板的玩家昵称着色(对为原版客户端制作的冒险地图有用) + # 是否将非玩家实体始终视为在记分板的队伍里 + # 设为 true,以兼容一些数据包的功能 + allow-non-player-entities-on-scoreboards: true + # 是否使用原版记分板的玩家昵称着色(对为原版客户端制作的冒险地图有用) + # 设为 true,以兼容一些数据包的功能 + use-vanilla-world-scoreboard-name-coloring: true unsupported-settings: - disable-world-ticking-when-empty: true # 当世界中无玩家或无强制加载区块时停止该世界的 Tick 处理 - fix-invulnerable-end-crystal-exploit: false # 允许创建无敌末地水晶(修复 MC-108513 漏洞) + # 当世界中无玩家或无强制加载区块时,是否暂停该世界的 tick 运算 + disable-world-ticking-when-empty: true + # 是否修复无敌末地水晶漏洞(MC-108513) + fix-invulnerable-end-crystal-exploit: false ``` -### Paper 全局设置 (paper-global.yml) +### Paper 全局配置 + +:::caution + +以下 `paper-global.yml` 的某些推荐值可能会导致严重问题,开启时请认真考虑,如: + +`item-validation` 下的配置值若过高,将允许玩家制作并使用禁人物品,可用来恶意踢出其他玩家或者复制物品。 + +`packet-limiter.interval` 的值若为 `-1` 或其他极高的值,可能存在被发包攻击,卡服的风险。 + +::: ```yaml +# paper-global.yml commands: - suggest-player-names-when-null-tab-completions: false # 当按 Tab 键 补全且没有其他选项时返回玩家名称列表 - time-command-affects-all-worlds: true # /time 命令是否作用于所有世界(否则只作用于执行者所在的世界) + # 当按 Tab 键补全且没有其他选项时,是否返回在线玩家名称列表 + suggest-player-names-when-null-tab-completions: false + # /time 命令是否作用于所有世界,否则只作用于执行者所在的世界 + time-command-affects-all-worlds: true item-validation: - display-name: 2147483647 # 物品显示名称的最大长度(字符数) - lore-line: 2147483647 # 物品附魔说明每行的最大长度(字符数) - resolve-selectors-in-books: true # 是否解析书中命令选择器(开启后给予创造模式物品时可能导致服务器崩溃) -book: - author: 2147483647 # 书籍作者名的最大长度(字符数) - page: 2147483647 # 书籍每页内容的最大长度(字符数) - title: 2147483647 # 书籍标题的最大长度(字符数) -book-size: - page-max: disabled # 书籍单页允许的最大字节数;设为“disabled”以禁用额外限制 + book: + # 书作者名的最大长度(单位:字符) + author: 214748364 + # 书的最大页数(单位:字符) + page: 2147483647 + # 书名的最大长度(单位:字符) + title: 2147483647 + book-size: + # 书单页允许的最大字节数 + # 设为 disabled,以禁用此限制 + page-max: disabled + # 物品显示名称的最大长度(单位:字符) + display-name: 2147483647 + # 物品自定义描述信息每行的最大长度(单位:字符) + lore-line: 2147483647 + # 是否解析书中命令选择器(开启后给予创造模式物品时可能导致服务器崩溃) + resolve-selectors-in-books: true misc: - fix-entity-position-desync: false # 让服务器以与客户端相同的精度处理实体位置以避免同步问题(修复 MC-4 漏洞) - max-joins-per-tick: 2147483647 # 每个 Tick 允许的最大加入玩家数,超出则延迟加入(与 bukkit.yml 中的连接节流无关) + # 是否修复末地超远距离的地形生成问题(MC-159283) + # 设为 false,以允许生成末地环 + fix-far-end-terrain-generation: false + # 每个 tick 允许的最大加入玩家数,超出则延迟加入(与 bukkit.yml 中的连接节流无关) + max-joins-per-tick: 2147483647 packet-limiter: + # 将以下 all-packets 和 overrides 内数据包的 interval 设为 -1 + # 以允许使用一些生电辅助 mod 的功能,如打印机,快速合成等 all-packets: - interval: 0.000001 # 最大数据包速率生效的时间间隔(单位:秒) - max-packet-rate: 999999.0 # 每个玩家在上述时间间隔内允许的最大数据包数量 + # 最大数据包速率生效的时间间隔(单位:秒) + interval: -1 + # 设置特定数据包的速率生效的时间间隔 + #(可视具体情况来禁用特定数据包的速率限制) + overrides: + minecraft:place_recipe: + interval: -1 spam-limiter: - incoming-packet-threshold: 2147483647 # 收到的数据包超过此阈值时视为垃圾流量并忽略 + # 收到的数据包超过此阈值时视为垃圾流量并忽略 + # 设为 disabled,以禁用此阈值限制 + incoming-packet-threshold: disabled unsupported-settings: - allow-headless-pistons: true # 是否允许生成无头活塞(通常用于破坏不可破坏方块) - allow-permanent-block-break-exploits: true # 是否允许使用原版漏洞破坏基岩、末地传送门框架等不可破坏方块 - allow-piston-duplication: true # 是否允许复制 TNT、地毯和铁轨(不包括沙子) - perform-username-validation: false # 是否验证用户名(允许特殊字符,但可能导致命令或插件问题) - allow-unsafe-end-portal-teleportation: true # 是否允许利用末地传送门漏洞进行传送(例如沙子复制,不建议启用) - skip-tripwire-hook-placement-validation: true # 是否跳过绊线钩放置校验以允许相关复制漏洞 - update-equipment-on-player-actions: false # 是否在玩家执行某些动作时更新装备;为 false 时可利用属性切换漏洞 + # 是否允许生成无头活塞(通常用于破坏不可破坏的方块) + allow-headless-pistons: true + # 是否允许使用原版漏洞破坏基岩、末地门框架、末地传送门方块等原版中不可破坏的方块 + allow-permanent-block-break-exploits: true + # 是否允许复制 TNT、地毯和铁轨(不包括沙子) + allow-piston-duplication: true + # 是否允许利用末地传送门漏洞进行传送 + # 设为 true,以允许使用沙子复制 + allow-unsafe-end-portal-teleportation: true + # Paper 物品混淆的过大物品序列化器是否跳过以下物品组件 + # 设为以下配置,以确保一些数据包中物品模型的视觉效果和在原版的效果一致 + oversized-item-component-sanitizer: + dont-sanitize: + - minecraft:container + - minecraft:charged_projectiles + - minecraft:bundle_contents + # 是否验证用户名 + # 设为 false,以允许用户名包含特殊字符,但可能导致命令或插件问题 + perform-username-validation: false + # 是否跳过绊线钩放置校验 + # 设为 true,以允许使用拌线钩复制 + skip-tripwire-hook-placement-validation: true + # 在使用盾牌格挡时,是否跳过原版的伤害 tick 计算 + # + # 之前,很多 PVP 玩家利用了在 Spigot 及其下游的一个长久以来的问题: + # 当玩家使用盾牌格挡时不会获得免疫伤害的无敌帧效果,这与原版行为不一致 + # 玩家能够利用这种机制暂时“禁用”对方的格挡,并将其击退到空中,这成为 1.9+ PVP 的一种独特玩法 + # + # 设为 true,以允许使用此盾牌眩晕机制(Shield Stunning) + skip-vanilla-damage-tick-when-shield-blocked: true + # 是否在玩家执行动作时更新装备 + # 设为 false,以允许使用属性切换漏洞 + update-equipment-on-player-actions: false ``` -:::caution[book 配置] - -该选项可能会在你的服务器上启用禁人书,开启时请认真考虑 - -::: - ### spigot.yml 配置 ```yaml +# spigot.yml world-settings: default: - # 启用 TNT 爆炸,对于一些基于 TNT 的机器很重要 - enable-tnt-explosions: true - # 保持原版的红石机制 - redstone-implementation: vanilla - # 禁用红石随机更新顺序 - randomize-redstone-updates: false - # 禁用实体激活范围限制 + # 实体激活范围 + # 将全部或部分生物设为 -1,以忽略对应生物的激活范围限制 entity-activation-range: - animals: 0 - monsters: 0 - raiders: 0 - misc: 0 - water: 0 - villagers: 0 - flying-monsters: 0 - # 禁用实体追踪范围限制 + animals: -1 + monsters: -1 + raiders: -1 + misc: -1 + water: -1 + villagers: -1 + flying-monsters: -1 + # 实体追踪范围 + # 由于 Spigot 的可配置生物追踪范围的侵入性更改,无法直接恢复到原版行为 + # 将全部或部分生物设为以下推荐值,以尽可能贴合原版的追踪范围 entity-tracking-range: - players: 128 - animals: 128 - monsters: 128 - misc: 128 - other: 128 + players: 512 + animals: 160 + monsters: 256 + misc: 160 + display: 160 + other: 512 ``` ### bukkit.yml 配置 ```yaml +# bukkit.yml settings: - # 允许使用命令方块 - allow-command-block: true - # 禁用生物生成限制 + # 生物生成限制 + # bukkit.yml 内默认值即遵从原版的单区块生成上限数值 + # 如觉得生成过少导致农场效率过低,可以适当调高相应生物类别的生成限制值 spawn-limits: - monsters: -1 - animals: -1 - water-animals: -1 - water-ambient: -1 - water-underground-creature: -1 - ambient: -1 + monsters: 70 + animals: 10 + water-animals: 5 + water-ambient: 20 + water-underground-creature: 5 + axolotls: 5 + ambient: 15 ``` ### 红石优化 -请查看 [红石优化](/java/advance/optimize/go#redstone-implementation) - -同时 Mojang 在 24w33a 更新了红石的链接机制 (虽然是实验性内容),从代码来看,Mojang 的优化方式与 Alternate Current 非常像 +Mojang 在 1.21.2 的第一个快照 [24w33a](https://zh.minecraft.wiki/w/Java%E7%89%8824w33a) 中更新了红石线的信号更新机制(虽然是实验性内容)。 -可以考虑在服务器中开启 +从代码来看,Mojang 的优化方式与 Alternate Current 非常像,可以考虑在服务器中开启,请查看 [红石优化](/java/advance/optimize/go#redstone-implementation)。 ## Purpur -Purpur 可以还原比 Paper 多的特性 (虽然也就多了两个),但可以获得来自 Pufferfish 的生物优化 +Purpur 提供更多自定义配置项,你可以调整以下配置项来恢复部分原版特性。 ```yaml -allow-void-trading: true # 允许虚空交易 - -shared-random: true # 允许 RNG 预测 +# purpur.yml +settings: + # 是否开启 TPS 追赶 + # 设为 false,以防止 TPS 卡顿造成的生物突然加速影响游戏体验 + tps-catchup: false +world-settings: + default: + settings: + entity: + # 是否使用共享随机数生成源 + # 设为 false,以允许使用 RNG 预测 + shared-random: false + gameplay-mechanics: + player: + # 是否带回 1.21.4 快照版 24w44a 之前的村民虚空交易(MC-50614) + # 设为 true,当村民离开交互范围时,村民交易界面不关闭 + allow-void-trading: true ``` -## Leaves(推荐) +## Leaves(推荐) -Leaves 是一个专注于生电玩家的 Minecraft 服务端,也是还原原版特性最完全的插件端 +:::note -Leaves 会覆盖 Paper 的一些配置,所以不必再去手动更改 Paper 的配置文件,只需要关注 `leaves.yml` +Leaves 的实现方式决定了 Leaves 不可能完全符合原版特性,如果对生电需求很高仍然建议使用 Fabric! -```yaml -# leaves.yml -settings: - modify: - fakeplayer: - spawn-phantom: true # 是否允许虚拟玩家(假人)在夜晚未睡时生成幻翼 - minecraft-old: - block-updater: - instant-block-updater-reintroduced: true # 重新启用即时方块更新机制,减少红石延迟 - cce-update-suppression: true # 启用 CCE 更新抑制 ,具体请看 https://www.bilibili.com/read/cv24323749/ - redstone-wire-dont-connect-if-on-trapdoor: true # 当红石线位于活板门上方时不进行连接 - armor-stand-cant-kill-by-mob-projectile: true # 阻止怪物投掷物击杀盔甲架 - zero-tick-plants: true # 允许零刻农作物(无延迟农田刷新) - old-hopper-suck-in-behavior: true # 恢复旧版漏斗吸物行为 - fix-fortress-mob-spawn: true # 修复下界堡垒刷怪生成机制 - skip-height-check: true # 跳过怪物生成高度限制检查 - string-tripwire-hook-duplicate: true # 修复绊线钩重复连接的 bug - budding-amethyst-can-push-by-piston: true # 允许活塞推动紫水晶母岩 - stackable-shulker-boxes: true # 允许潜影盒堆叠 - no-block-update-command: true # 禁用 /blockupdate 命令 - no-tnt-place-update: true # 放置 TNT 时不触发方块更新 - container-passthrough: true # 允许容器方块传递红石信号 - bow-infinity-fix: true # 无限无箭矢射击 - hopper-counter: true # 启用漏斗内物品计数器 - region: - fix: - vanilla-hopper: true # 修复原版漏斗的已知问题 -``` +如某些生电机器在 Leaves 上出现非预期行为请优先在 Leaves 的 QQ/Discord/GitHub 中反馈,而不是反馈给机器作者。 -:::caution[漏斗问题] +::: -`vanilla-hopper` 选项开启后会严重降低漏斗性能,非必要最好别开 +Leaves 是一个专注于生电玩家的 Minecraft 服务端,皆在还原被上游破坏的原版特性,也是目前插件端核心中对于生电适配性最高的核心。 -::: +其配置文件 `leaves.yml` 提供了涵盖性能优化、问题修复、原版机制恢复以及玩法增强等各种生电友好的自定义配置项。 + +请阅读 [Leaves 文档](https://docs.leavesmc.org/zh_Hans/leaves/reference/configuration) 以了解各项配置的用法,根据服务器的需求调整相关的配置项。 ## Leaf -Leaf 是一个 Paper 的分支,拥有非常高的性能 (基本是 Paper 系里面性能最强的,Folia 除外),同时对原版的破坏不大 +Leaf 是一个 Paper 的分支,拥有非常高的性能(基本是 Paper 系里面性能最强的,Folia 除外),同时对原版特性破坏不大。 -如果你想尽可能的承载较多的人,那么可以考虑使用 Leaf +如果你想承载更多的玩家,可以考虑使用 Leaf。 -配置文件方面的更改按照上方其他核心的配置文件进行修改即可 +请阅读 [Leaf 文档](https://www.leafmc.one/zh/docs/config/leaf-global) 以了解如何调整相关配置项以贴合原版行为。其他配置文件的修改可参考前文。 ## Luminol -Luminol 是 Folia 的一个分支,相比于 Folia 有这更好的性能,同时可以还原更多的特性 +Luminol 是 Folia 的一个分支,相比于 Folia 有着更好的性能,同时可以还原更多的特性。 :::tip[Folia 生电] -Folia 是 Paper 的分支,也就是说 Paper 玩不了的机器 Folia 照样玩不了 +Folia 是 Paper 的分支,也就是说 Paper 玩不了的机器 Folia 照样玩不了。 + +唯一使用 Folia 的理由是 Folia 可以调用多个核心以实现更好的性能,因此在选择 Folia 开服前应该认真的思考。 + +如果机器配置低于 16 物理核心(不是线程数),建议优先考虑 Leaves 或者 Leaf,而不是 Folia。 -唯一使用 Folia 的理由是 Folia 可以调用多个核心是实现更好的性能,因此在选择 Folia 开服前应该认真的思考 +一些碎碎念: -同时机器性能不够 (没有 8h16g) 建议考虑 Leaf 而不是 Folia +尽管在 Folia 上,许多游戏行为和常规的服务器核心看起来相差不大,但其底层机制相较于原版 MC 已经发生了重大改变。 + +部分原版机制的缺失,跨维度时序与原版的差异,仍然是 Folia 目前迈不过去的门槛。 + +因此,目前 Folia 系核心仍旧不能作为原版生电服平替 Fabric 的选择,也不建议各位服主贸然选择 Folia。 ::: ```toml -[fixes] - -# 允许虚空交易 -[fixes.allow_void_trading] -enabled = true +# luminol_global_config.toml +[fixes.poi_range_fixes] + # 当区块未加载时,是否不进行村民竞争同一兴趣点的计算 + # 设为 true,以解决大型刷铁机等包含村民的大型机器的一部分卡服问题 + # 详细请看 https://github.com/PaperMC/Folia/issues/292 + do_not_compete_poi_if_unloaded = true [fixes.allow_unsafe_teleportation] -#如果你想使用刷沙特性,请打开此项 -enabled = true + # 是否允许利用末地传送门漏洞进行传送 + # 设为 true,以允许使用沙子复制 + # 可能会导致一些问题,详细请看 https://github.com/PaperMC/Folia/issues/297 + enabled = true + +[fixes.collision_behavior] + # 指定服务器使用何种实体碰撞计算方式 + # 可用选项: + # VANILLA - 完全使用原版计算方式,可能会降低性能,但完全符合原版行为 + # BLOCK_SHAPE_VANILLA - 对于方块使用 Paper 的计算方式,其它使用原版的计算方式,兼顾性能优化和遵循原版 + # PAPER - 完全使用 Paper 计算方式,拥有较好的优化,但会破坏部分原版行为 + mode = "BLOCK_SHAPE_VANILLA" + +[fixes.fix_high_velocity_issue] + # 是否修复高速实体跨越多个 tick 区域移动导致崩服的问题 + # 设为 true,以允许使用珍珠炮或者类似需要实体高速远距离移动的机器 + enabled = true - -# 使用原版随机源 [fixes.use_vanilla_random_source] -enable_for_player_entity = true - + # 是否为实体使用原版的随机数生成源 + # 设为 true,以允许使用 RNG 预测 + enable_for_player_entity = true + +[function.tripwire_dupe] + # 是否恢复已在 1.21.2 快照 24w33a 与 24w36a 中修复的绊线复制漏洞(MC-59471) + enabled = true + # 可用选项: + # VANILLA20 + # VANILLA21 + # MIXED + behavior_mode = "VANILLA21" + +[misc.disable_moved_wrongly_threshold] + # 是否禁用生物移动速度限制 + enabled = true + +[misc.force_disable_packet_limiter_of_paper] + # 是否禁用 Paper 自带的数据包速率限制 + # 设为 true,以允许使用一些生电辅助 mod 的功能,如打印机,快速合成等 + # 禁用数据包速率限制可能存在被发包攻击,卡服的风险,开启时请认真考虑! + force_disable = true + +[optimizations.lithium_sleeping_block_entity] + # 是否使用锂的方块实体优化 + # 设为 true,以在保持原版特性的情况下提高漏斗等方块实体的性能 + enabled = true ``` -同时需要调整分配线程数,因为众所周知 Folia 默认的分配线程数非常脑瘫,会出现一核有难,八核围观的场景 +同时需要调整分配线程数。因为众所周知 Folia 默认的分配线程数非常保守,会出现一核有难,八核围观的场景。 -打开 Paper 的全局配置,找到 `threaded-regions.threads`,通常情况下,分配给区块 Tick 线程数应该是 80% 乘上你的物理 CPU 核数 +打开 Paper 的全局配置,找到 `threaded-regions.threads`,通常情况下,分配给区块 Tick 线程数应该是 80% 乘上你的物理 CPU 核数。 + +## Lophine + +Lophine 是一个基于 Luminol 的分支,相比于 Luminol 添加了更多适用于生电的实用功能和可配置的原版特性。其目标是在 Folia 上实现更多生电相关机制。 + +```toml +# lophine_global_config.toml +[experiment.redstone] + # 是否重新引入 1.19 版本前的瞬时方块更新机制 + instant-block-updater = true + # 是否允许利用 ClassCastException 进行更新抑制 + cce-update-suppression = true + # 是否重新引入以下机制: + # 1.20 版本前的机制:红石粉不会连接四周开启的活板门上的红石粉 + # 1.20.2 版本前的机制:红石粉、红石中继器和红石比较器收到来自下侧的状态更新时不检查附着 + redstone-ignore-upwards-update = true + +[function.old-feature] + # 是否重新引入 1.21.4 版本前的机制:允许玩家在进入游戏后的几秒内免疫伤害 + spawn_invulnerable_time = true + # 是否重新引入 1.21 版本前的袭击机制 + # 设为 true,以允许大部分袭击塔设计恢复运作 + old_raid_behavior = true + # 是否重新引入 1.21.2 版本前的机制:当僵尸村民、尸壳、溺尸或僵尸猪灵被伤害时,它们生成普通僵尸增援 + old_zombie_reinforcement = true + # 是否恢复 1.21.2-1.21.5 中 TNT 接触到水但爆炸中心不处于水中时,可以破坏方块但不会炸毁掉落物实体的特性 + old_explosion_damage_calculator = true + # 是否带回 1.21.4 快照版 24w44a 之前的村民虚空交易(MC-50614) + # 设为 true,当村民离开交互范围时,村民交易界面不关闭 + villager-void-trade = true + +[misc.item-entity] + # 是否基于物品的 tick 顺序来合并掉落物,这是 Spigot 长期以来的默认行为 + # + # 在 Spigot 中,后 tick 的物品实体会合并到先 tick 的实体上 + # 如果合并半径相对较大,可以避免掉落物卡在一些非预期的奇怪位置 + # 因此,这对于会产生大量掉落物的刷怪塔或红石装置非常有用 + # 而在原版中,掉落物合并是基于物品堆叠数量进行的,数量较少的物品堆会合并到数量较多的堆中 + # + # 设为 true,非原版,但是可以让掉落物合并更适用于一些生电机器 + follow-tick-sequence-merge = true +```