= 创作分享 =
MOD特性反馈
[CagedMobs] 大量漏式生物笼造成的极端卡顿 ...
Evans

[CagedMobs] 大量漏式生物笼造成的极端卡顿

Evans 于 2025-1-28 14:04 ( 1天前 ) 发表在 [特性反馈] 分类。 [复制链接] [只看楼主] [打印]
6 0
漏洞反馈
MOD版本: 2.0.7
MC版本: 1.20.2
笼中生物的漏式生物笼在下方的容器已满时,将会将生物笼的收获进度保持在100%,而收获进度到达100%又会触发生物笼检查下方的容器是否已满,而这个检查每个tick都会进行一次,当生物笼数量达到十个以上是这个特性甚至可能将服务器tps降低到6TPS甚至更低, 表现是在spark的profiler中显示漏斗尝试InsertItem严重超时。

以下是代码分析
在MobCageBlockEntity类中
生物笼当前的收获进度由int currentGrowTicks控制,当currentGrowTicks >= totalGrowTicks时,将会触发attemptHarvest(BlockState state)方法。而在其中有这样一行代码
if(this.autoHarvest()){
                this.currentGrowTicks = 0;
            }else{
                this.currentGrowTicks = this.totalGrowTicks;
            }
其中autoHarvest()方法是一个对漏式生物笼下方方块实体物品栏的遍历,但在下方容器物品栏是空,代码在客户端运行或者下方容器物品栏是满的的时候都会返回false,而问题出在这里

在返回false后,attemptHarvest(BlockState state)将会进入 else 的部分,而在 else 部分中currentGrowTicks将会被设为与totalGrowTicks相同的值,而在此时,他又会触发currentGrowTicks >= totalGrowTicks的检查,继续通过,并运行autoHarvest()。而这个检查是在tick()方法中的。这就导致每个漏式生物笼在每个tick都会对下方的容器的物品栏进行遍历,导致服务端极度卡顿。

我已经将这个问题作为Issue上交给CagedMobs的开发者,但是考虑到CagedMobs的上一次commit已是在2年前,这个问题可能大概率不会得到解决



发表于 前天 14:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

回复 | 举报

该帖共收到 0 条回复!
百科目前不允许匿名发帖哦~ 请先 [ 登陆 ][ 注册 ] 吧~

本版积分规则

发新帖
  • 回复
  • 点评
  • 评分

[ MC百科(mcmod.cn) 除另有声明,所有开放公共编辑的内容均使用 BY-NC-SA 3.0 协议 ]

Minecraft百科CC协议
快速回复 返回顶部 返回列表