跳转到主要内容

Minecraft 原版服务端与 Paper 服务端的一些原版技术机制异同

本文大量参考了 https://paper-chan.moe/paper/ 你可以把它当做是一篇译文,但不完全是译文。

Paper 是旨在解决游戏玩法和机制不一致问题的高性能 Spigot 分支。(High performance Spigot fork that aims to fix gameplay and mechanics inconsistencies)

正如其介绍所说,Paper 会按照自己的理解来修改一些错误和漏洞,也提供比 Spigot 更好的性能。
同时 Paper 会谨慎引入任何优化,而不会像某些激进分支一样致宝贵的存档受损等等,因此我们认为 Paper 是一个值得信赖的 Minecraft 服务端。

但相应的,其可调整性/绝对性能可能不会有其分支那么好。
同样,很多人可能不喜欢 Paper 的一些调整(比如禁止末地门复制重力方块),这里将列出一些主要的差异。


如果你想大搞一下原版技术(大量利用机制及“特性”),那么 Paper 可能不是那么适合,可以试试更为贴近原版的 Spigot 服务端。
亦或是直接使用 Fabric/Forge 服务端,它们作为模组服务端在未安装影响游戏内容的模组时,能提供和原版服务端几乎完全一致的行为,同时也能通过安装优化模组达到优化效果。 

如果你只是想恢复一些 Paper 决定强制禁用的“特性”,你也可以考虑使用 Purpur 服务端,Purpur 提供了更多可调整设置(Your Minecraft, your way),但其中可能也包含一些较为激进的调整,也许可能导致您的存档受损。

当然直接使用原版服务端(Vanilla)能让你获得 100% 原版体验,也可以结合 MCDReforged 添加一些不影响游戏内容的插件。


本文版本 Paper 1.19.3 #364

注意:从 1.19 开始, Paper 配置文件从根目录的 paper.yaml 迁移到了 config 文件夹,并有全局设置和每世界设置。


普通

视距 View Distance

默认情况下,原版服务端会按 server.properties 中的 view-distance 来想客户端发送区块数据,而不管客户端设置的视距。
Paper 会按照客户端视距设置来决定发送多少区块数据,但不会超过服务端值。
如客户端设置为 10 视距,服务端设置为 32 视距,Paper 只会向客户端发送 10 视距区块,原版则仍然会发送 32 视距区块。
如客户端设置为 32 视距,服务端设置为 10 视距,Paper 只会向客户端发送 10 视距区块,原版也会发送 10 视距区块。

机制解释

恢复方法

paper-global.yml 中设置 autoconfig-send-distance 为 false


红石 Redstone

Paper 提供了两个额外的优化红石实现供服务器所有者选择。
你的服主可能会决定开启以获得更流畅的游戏体验。

你可以在 paper-world-defaults.yml 中找到 redstone-implementation 设置。


redstone-implementation 解释:
替代红石实现最终是实验性的,因此,如果发现问题,可以在更新间删除或永久删除。

默认值:vanilla
说明:指定服务器使用的红石实现。替代实现可以通过优化功率计算和减少发出的块和形状更新的数量来大大减少红石粉引起的延迟。
可以使用以下值:

  • vaniila:原版红石实现。
  • eigencraft:Theosib 的 Eigencraft 红石实现。
  • alternate-current:Space Walker 的 Alternate Current 红石实现。

注意: Eigencraft 和 Alternate Current 的实现都改变了红石粉的行为。您可以在每个实现的相应文档中阅读有关行为如何改变的信息:

机制解释

见上文

恢复方法

paper-world-defaults.yml 中设置 redstone-implementationvanilla

您可以在 config/paper-world-defaults.yml 下找到选项 redstone-implementation。这里的默认值是 vanilla;
然而我们推荐使用 alternate-current,因为它更加优化,并且在我个人的经验与原版实现几乎一致。




实体跟踪范围 Entity Tracking Range

默认情况下 Paper(spigot) 服务端的实体跟踪范围略低,这能降低服务端工作量(?),但也有可能造成生物不动。
若在单人游戏中设置实体跟踪距离为 100% 那么跟踪范围是 160 方块。

entity-tracking-range 解释:
控制实体将变得 “可见“ 或以其他方式被客户端“跟踪”的块范围。此范围之外的实体将不可见,因为它们不会被渲染以保持 CPU 使用率和带宽。这对于 PVP 服务器特别有用,因为降低玩家范围​​会在一定程度上“削弱”穿墙和雷达。其他控制物品展示框、绘画、掉落物品、经验球和告示牌的范围。其他是服务器上所有实体的一般最大限制。
更改这些值不会对服务器性能产生太大影响。这些将主要帮助客户端在降低这些时滞后。

entity-activation-range 解释:
描述:控制实体将被“激活”的块范围 - 此范围之外的实体将以较低的速率 tick 以防止服务器卡顿。更改后,这些数字会对游戏玩法产生不利影响,因此请谨慎编辑。
降低这些值可以显着提高性能,但代价是影响游戏行为。降低这些可能会影响物品和怪物农场,但对正常行为应该影响不大。

spigot.yaml 中的默认值:

    entity-activation-range:
      animals: 32
      monsters: 32
      misc: 16
    entity-tracking-range:
      players: 48
      animals: 48
      monsters: 48
      misc: 32
      other: 64
机制解释

恢复方法

在 spigot.yaml 中修改如下部分为如下值:

    entity-activation-range:
      animals: 64
      monsters: 64
      misc: 32
    entity-tracking-range:
      players: 144
      animals: 48
      monsters: 64
      misc: 32
      other: 64

如果你的服务器视距较大,可以将 entity-tracking-range 中的 players 设置为 (模拟距离-1)x16 以提高游戏体验(非原版)。


生物/怪物生成 Mob Spawn

Paper 中的默认生成值通常与原版默认值非常接近。
然而,Paper 的上游 Spigot/CraftBukkit 破坏了一些东西,而这些东西也没有在 Paper 上得到修复。

原版生物的生成不仅复杂,而且在多人游戏服务器上也存在固有缺陷。
例如,我们在下界维度中有两个玩家——玩家 A 在下界天花板上的猪灵农场的挂机,而玩家 B 只是在下界生物群落中闲逛。

即使游戏在两个玩家周围的所有加载区块都进行了怪物生成尝试,然而绝大多数成功的生物生成尝试最终都会在拥有最有利生成条件的玩家周围进行。

在这种情况下,玩家B会得到大部分的怪物,而玩家 A 会得到少部分,这仅仅只是因为玩家 B 周围总体上有更多的可生成怪物方块。


机制解释
恢复方法

尝试在 paper-world-defaults.yml 中设置 per-player-mob-spawnstrue

请参阅


基于地狱门的农场 Portal Based Farm

为单人游戏设计/验证的基于地狱门的农场可能不会正确运行。

由于 Paper 的上游 Spigot/CraftBukkit 行为发生变化,当怪物穿过另一侧没有玩家的传送门时,怪物会立即消失。
然而,这并不是因为 Paper 更改了什么,而是因为 Spigot/CraftBukkit 在之前的版本保留了旧版本行为。
当前的 Paper 版本和原版多人游戏行为一致。

事实上这是因为 Minecraft 原版单人游戏和多人游戏的机制不同。

在原版单人模式中 Minecraft 允许怪物穿过传送门而不消失。
某些原版单人游戏农场设计利用传送门绕过世界生成限制(通过将生物传送到其他世界来规避本世界生成上限)以增加农场的产量。

而在原版多人游戏中:

  • 玩家在维度 A,如果传送目标维度 B 有其他玩家,而且他们不在传送门附近 128 格,那么该怪物将立即消失。
  • 玩家在维度 A,如果传送目标维度 B 有其他玩家,而且该玩家在传送门附近 128 格,那么该怪物将保留;
    如果该玩家下线,或离开 128 格范围,那么该怪物将消失。

为什么是 128 格?
这是 Minecraft 中的一个机制,称为硬性消失。如果一个生物距离某个维度的所有玩家 128 个方块远,它将立即消失。

注意:如果你使用的 Paper 版本早于此 PR https://github.com/PaperMC/Paper/pull/9025,那么即使某个维度没有人,游戏服务器也可能会认为该维度有人,从而导致怪物消失。

请参阅此 issue:https://github.com/PaperMC/Paper/issues/6456

机制解释

见上文

恢复方法

如果你想恢复单人游戏行为,可以尝试安装此插件:https://hangar.papermc.io/Kyle/Otherside


地狱门区块加载器  Portal Based Chunk loader

一些区块加载器利用实体在下界和主世界中不停传送来达到区块加载的效果。

它确实可以使用,只要你传送的是物体,而不是怪物。
参见:基于地狱门的农场 Portal Based Farm 部分

机制解释

见上文,以及:

恢复方法


末影珍珠滞空 Ender Pearl Stasis Chamber

在区块卸载时末影珍珠能留在空中,并在区块加载时恢复运动。

Paper 于未知版本使用未知方法修复了此漏洞。

机制解释
恢复方法

paper-world-defaults.yml 中修改 disable-unloaded-chunk-enderpearl-exploit 为 false


刷铁机/铁傀儡农场 Iron Farm

这一节可能不是非常恰当,因为 Paper 上确实可以使用铁傀儡农场。
但你需要根据服务器的实际来进行调整,比如服务器上的实体激活距离较低、模拟距离不一等。
而不是直接抄一个设计然后报告 Paper 破坏了你的农场。

机制解释
恢复方法


基岩和地狱门方块破坏 Bedrock And End Portal Block Breaking

Paper 默认修复了使用无头活塞等方式破坏基岩和地狱门方块等不可破坏的方块。

机制解释

恢复方法

paper-global.yml 中修改 allow-permanent-block-break-exploitstrue


服务端和客户端实体位置不一致 Location Of Server And Client Entities Inconsistent

常见于低版本,例如在方块边缘的船会时不时穿过方块掉落然后恢复。这是 Minecraft 发送的默认精度不足造成的。
Paper 默认情况下会发送精度更高的坐标来改善此行为。

机制解释

恢复方法

paper-global.yml 中修改 send-full-pos-for-hard-colliding-entitiesfalse


钓鱼运气公式 Fishing Luck Formula

默认不启用。
Paper 可以启用 aikar 的替代运气公式,来替代原版公式。

机制解释

恢复方法

paper-global.yml 中修改 use-alternative-luck-formula 为 false


漏斗分类机 Funnel sorter

Paper 可以调整漏斗行为,以优化性能。
其中 disable-move-event 会导致漏斗分类机无法使用。

机制解释

恢复方法

paper-world-defaults.yml中修改 disable-move-eventfalse



破坏性

物品复制(TNT、地毯、铁轨) Item Dupe(TNT、Carpet、Rail)

Paper 修复了几乎所有曝光的物品复制漏洞,其中包括铁轨、地毯、TNT 复制。
你可以恢复铁轨、地毯、TNT 复制,但除此以外的修复均不可恢复。

Paper 于未知版本使用未知方法修复了此漏洞。

机制解释

恢复方法

paper-world-defaults.yml 中修改 allow-piston-duplication 为 true


重力方块复制/沙子复制  Gravity Dupe/Sand Dupe

Paper 修复了利用末地门复制下落方块的 BUG。且不可恢复。

Paper 于未知版本使用未知方法修复了此漏洞。

机制解释
恢复方法

安装插件 GravityControl https://forums.papermc.io/threads/gravitycontrol-sand-dupe-enabler-for-paper-servers.12/

或使用此分支 https://github.com/Nats-ji/paper-sand-dupe-unpatched


村民骨折机  Zombie Villager Curing Discount Exploit

当治愈一个僵尸村民、感染它并再次治愈它时,产生的村民会叠加折扣。
默认情况下,Paper 修复了允许玩家重复治愈僵尸村民获得奖励的漏洞。

机制解释
恢复方法

paper-world-defaults.yml 中修改 fix-curing-zombie-villager-discount-exploitfalse


光照抑制  Light Suppression

从 Paper 1.17 #232 开始,Paper 的一个性能分支 Tuinity 已经合并到了 Paper,而其中带有 Starlight。
Starlight 完全重写了光照引擎,因此所有利用光照缓慢更新来实现的机制一般都不会起作用。

机制解释
恢复方法


RNG 附魔、RNG 操纵  RNG Manipulation

RNG(Random Number Generator) 随机数生成器。
Minecraft 的附魔等是根据你在游戏中的行为产生的随机数来实现的,例如你丢了多少物品,打开了几次箱子。
因此当一些聪明人对游戏进行了一些逆向工程后,就能达到操作 RNG 的效果,从而 100% 获得自己想要的附魔等。

Paper 于未知版本使用未知方法修复了此漏洞。

机制解释
恢复方法

使用插件 RandomControl:https://modrinth.com/plugin/randomcontrol
支持 Paper 1.9.4 - 1.19.3。



超堆叠物品过滤器 Overstacked Item Filter

某些物品分类器需要使用超堆叠物品过滤器,例如 https://www.youtube.com/watch?v=Gyo-dYoW09s,它利用了超堆叠 BUG,即堆叠无法堆叠的物品。

Paper 于未知版本使用 https://github.com/PaperMC/Paper/pull/5197 修复了此漏洞,并在之后添加了开关。

机制解释
恢复方法

paper-global.yml 中设置 allow-grindstone-overstackingtrue


虚空交易 VOID TRADING

交易时让村民通过传送门,而交易 GUI 保持开启,此时进行交易,让村民以为没有交易过。从而达到无限交易的效果。

Paper 于未知版本使用未知方法修复了此漏洞。

机制解释
恢复方法



使用 purpur:https://purpurmc.org/docs/Configuration/#allow-void-trading





主要参考