
PaperFixes
来自CraftBukkit、Spigot和Paper的bug及性能修复集合,以Forge模组形式呈现。
PaperFixes
将 CraftBukkit、Spigot 和 Paper 中的一系列漏洞与性能修复带到了 Forge 模组中。
这是一个性能模组,可能会出现漏洞和不兼容问题。如果发现任何问题,请在 GitHub 上提交 issue。
当前的修复与功能
漏洞修复
avoidItemMergeForFullStacks- 在边界框检查之前,跳过对已满物品堆叠的合并检查。clearPacketQueue- 在玩家断开连接时清空数据包队列,以防止内存泄漏。explosionsIgnoreDeadEntities- 将死亡实体和不可选中的玩家排除在爆炸影响之外。fixMc54738(MC-54738) - 限制生物群系权重变量,以修复地形尖刺问题。fixMc80966(MC-80966) - 确保空子区块向客户端发送数据。fixMc98153(MC-98153) - 防止在下界传送门中出现回弹和窒息。fixMc133373(MC-133373) - 重置 NaN 属性值。fixShulkerDispenseCrash- 防止在高度限制处通过发射器放置非空潜影盒时崩溃。fixShulkerDupe- 修复因未移除潜影盒方块实体而导致的复制漏洞。fixWaterMobSpawnCheck- 确保水生生物生成在水中且有足够空间。dontOffloadBeaconColorUpdate- 避免信标更新时不必要的线程切换。handleNullTileCrashes- 记录空方块实体日志,而不是引发更多问题。removeInvalidMobSpawners- 移除已不存在的问题生物生成器。sortEnchantments- 按 ID 排序附魔,以确保相同的物品被视为相同。
客户端
-
cacheLastChunk- 由于 Minecraft 在一帧内会多次从区块提供器访问同一区块,我们可以缓存最后一次访问的区块。这在客户端上通常不会有太大影响,但在飞行并加载区块时,如果每个区块需要执行大量操作,速度会稍快一些。 -
fastWorldBorder- 默认在客户端(包括内部服务器)上禁用,因为边界移动动画无法正常工作,导致倒计时结束时边界会直接跳到最终位置。如果你不在意这一点,可以为客户端和内部服务器启用世界边界缓存。
功能
-
spawnChunkGamerule- 启用spawnChunkRadius游戏规则。 允许你为世界或服务器定义出生区块半径,类似于现代 Minecraft,但有一些差异。在 Minecraft 1.12 中不存在区块票据,因此出生区块是固定的 16×16 区域,始终加载并 tick。其中的实体仅在更小的 12×12 区域内处理,因为实体 AI 需要 5×5 的已加载区域。PaperFixes 使用一致的直径,以包含出生点的区块为中心,而原版如果出生点位于区块中心时可能会变成 17×17。 将此游戏规则设为0可完全禁用出生区块。 -
spawnChunkRadius- 为上述功能设置默认出生区块半径。仅适用于新世界或尚未使用 PaperFixes 2.0.0-beta.1 或更高版本运行过的世界。取值范围为 0 到 32,其中 0 完全禁用出生区块,32 则提供 64 区块的直径。 improvedTickLoop- 使用纳秒而非毫秒来测量时间以获得更好的精度,使用LockSupport.parkNanos进行精确休眠,并根据 tick 长度自适应调整休眠时间。当服务器落后超过 2.5 秒时,会尽可能快地运行 tick,在下一次 tick 开始附近进行自旋而不是休眠,以避免休眠过久。tickLoopSpinTime- 控制服务器 tick 循环自旋而不是休眠的持续时间(以纳秒为单位)。还会影响循环在原本应为休眠时间时停止运行计划任务的时间点。runTasksDuringSleep- 允许 tick 循环在休眠期间运行计划任务而不是空闲等待。fastWorldBorder- 缓存世界边界的角点,以加快计算速度,而不是每次都重新计算。
性能
-
ioThreadSleep- 控制世界保存线程的休眠时间。在 PaperFixes 中默认完全不休眠,以避免罕见的内存和保存问题。如果启用,它会休眠 2 毫秒而不是通常的 10 毫秒。除非有特定原因,否则最好保持禁用。 cacheBlockDensities- 缓存方块密度值,这样爆炸就不需要重复检查相同的方块数据。cacheLastChunk- 在一个 tick 内缓存从区块提供器最后访问的区块,避免重复查找。compactLut- 使用更小、更快的查找表来计算正弦和余弦。感谢 jellysquid3 和 ruViolence。fastChests- 仅在需要时运行箱子开/关动画,而不是每个 tick 都运行。smartRegionRead- 一次性读取整个区域文件头,以加快世界加载并减少潜在问题。fastEntityDataMap- 使用更快的哈希映射来存储和查找实体数据。optimizePathfinding- 通过跳过重复或不可能的路径来改进寻路。optimizedTaskQueue- 为计划任务使用更快的队列实现。pathingChunkCache- 使用快速的一维缓存跟踪实体正在经过的区块。感谢 jellysquid3 和 ruViolence。pathNodeCache- 保存寻路数据,以避免重复计算相同的方块。感谢 jellysquid3 和 ruViolence。queueChunkSaving- 随时间逐步保存区块,而不是一次性全部保存,从而减少保存期间服务器停顿的时间。trimRegionCache- 仅卸载使用最少的区域,而不是一次性全部卸载,防止活跃区域立即被重新加载。sharedRandomForEntities- 为所有实体使用共享的随机数生成器,而不是为每个实体创建新的生成器。
已知不兼容项
- 改进的 tick 循环与 VintageFix 中的
mixin.bugfix.slow_tps_catchup选项不兼容(已在提交 ecbc3e1 中移除,且不再存在于最新版本中),也与 Forged Carpet 的 tick 循环改动不兼容,可能还与其他任何模组不兼容。 - 劣质核心模组可能导致重入错误,并在游戏启动时立即崩溃。这不是 PaperFixes 的错,且无法避免,因为这些模组过早加载了游戏类。唯一的解决办法是用修复了这些问题的分支模组替换它们。
有问题的核心模组及解决方案的不完整列表:- Quark:替换为 Quark: RoTN Edition(感谢 sahih_international 发现这一点)
正在加载版本记录…

正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。