跳转到主要内容

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 可能也不是那么适合,如果你想恢复一些 Paper 决定强制禁用的“特性”,您可以考虑使用 Purpur 服务器。

本文版本 Paper 1.19.3 #364


 

普通

视距 View Distance

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

机制解释

恢复方法

 

红石 Redstone

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

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

 

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

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

  • Vaniila:原版红石实现。
  • eigencraft:theosib 的 Eigencraft 红石实现。
  • alternate-current:Space Walker 的 Current 红石实现。

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

机制解释

见上文

恢复方法

paper-world-defaults.yml 中设置 redstone-implementation 为 Vanilla。

 


您可以在config/paper-world-defaults.yml下找到选项redstone-implementation。这里的默认是vanilla; 然而alternate-current,这里推荐使用它,因为它更加优化,并且在我个人的经验中主要保留了 Vanilla 行为。

 

 

 

实体跟踪范围 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-spawns 为 true

请参阅

 

地狱门农场 Portal Based Farm

基于地狱门的农场可能不会正确运行。

由于 Paper 的上游 Spigot/CraftBukkit 行为发生变化,当生物穿过另一侧没有玩家的传送门时,生物会立即消失。

某些原版农场设计利用传送门绕过世界生成限制(通过将生物传送到其他世界来规避本世界生成上限)以增加农场的产量。
然而,在 Paper 中如果传送门一侧没有玩家,那么当实体通过传送门进入范围内没有玩家的维度时,实体会消失。
因此这些基于地狱门的农场将无法正常运作。
目前还没有修复,请参阅此 issue:https://github.com/PaperMC/Paper/issues/6456

机制解释

见上文

恢复方法

 

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

由于 Paper 的上游 Spigot/CraftBukkit 行为发生变化,当生物穿过另一侧没有玩家的传送门时,生物会立即消失。

一些区块加载器利用实体在下界和主世界中不停传送来达到区块加载的效果。
然而,在 Paper 中如果传送门一侧没有玩家,那么当实体通过传送门进入范围内没有玩家的维度时,实体会消失。
因此基于地狱门的区块加载器将无法正常运作。
目前还没有修复,请参阅此 issue:https://github.com/PaperMC/Paper/issues/6456

机制解释

见上文

恢复方法

 

末影珍珠滞空 Ender Pearl Stasis Chamber

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

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

机制解释
恢复方法

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

 

刷铁机/铁傀儡农场 IRON FARM

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

机制解释
恢复方法

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

 

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

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

机制解释

恢复方法

paper-global.yml 中修改 allow-permanent-block-break-exploits 为 true

 

 

 

破坏性

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

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

机制解释

恢复方法

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

 

 

 

 


实体跟踪范围

默认情况下 Paper 服务端的实体跟踪范围略低

 

 

 

 

 

主要参考