【Lv:3】
- 注册
- 2021/03/28
- 消息
- 6
- 金粒
- 2,364金粒














链接库
这是bugreport:https://bugs.mojang.com/browse/MCPE-155283 有能力的upvote下吧。
这是骚扰的纪录: https://github.com/Amulet-Team/Amulet-Map-Editor/issues/702
这是微软官方解释Actorprefix更改储存方式的原因:https://docs.microsoft.com/en-us/minecraft/creator/documents/actorstorage
解决问题的插件:https://github.com/PREMIEREHELL/Amulet-Plugins/blob/main/EntitiePlugin.py
插件依赖的软件和库:https://github.com/Amulet-Team/Amulet-Map-Editor/releases
问题
此bug具体内容如上。关键信息大致可译为:Actorprefix 和其中储存的NBT数据被抛到脑后而永不垃圾回收,无论实体是被沙还是时间到了的那种消失(despawned)。成千上万的actorprefix被留在任何区块指针键外浪费空间。微软可能忘记了一个过期实体垃圾回收功能。
简而言之,就是1.18.30后实体生成后就永远不会从存档中消失。
在升级1.18.30后存档大小爆炸性增长,存档达到了惊人的1.9GiB,但感觉没跑那么多区块。于是将区块 地图 pendingticks 传送门 和挂载着的实体 全部删除后,发现LevelDB 依然剩余约850MiB 的数据,其中仅仅只有几MiB不是没有用的Actorprefix实体。
四处问问后,发现其他服总大小仅仅400多MiB的存档,含有较为惊人的200MiB actorprefix。
虽然这是个服务器存档,在个人本地,可能在压缩和不会刷出太多实体的加持下,这个问题不会太明显。
但依然,微软正在破坏所有人的存档!!!
不建议你使用此方法,如果你的存档小于512mb而且不是服务器用存档。
基岩似乎是1GiB开始影响性能,4GiB有明显性能下降。不知道微软改Actorprefix储存方式后会不会有所缓解。
你兴许有充足的时间等待微软官方修复。
但可以确定的是
1.18.30/31/32/33 1.19 1.19.10
都没有也不会修复
基岩似乎是1GiB开始影响性能,4GiB有明显性能下降。不知道微软改Actorprefix储存方式后会不会有所缓解。
你兴许有充足的时间等待微软官方修复。
但可以确定的是
1.18.30/31/32/33 1.19 1.19.10
都没有也不会修复
解决方法
在发现问题后,趁着夜色跑到wall外面和老外讨论交流了一番,发现外面也是多脸蒙B,有且仅有两个人在讨论这个问题。Dan Martin(PREMIERHELL)和 gentlegiantJGC。这两个名字十分熟悉,既是bugreport的报告者,又都是Amulet 地图编辑器项目的管理。于是就溜达到某些git不存在hub 内的Amulet-editor 意见反馈,用 一大堆rubbish 组成一个魔术封包去骚扰以球两人回应。没想到,仅仅用几分钟gentle就回应了,一个小时后我们就有了解决的插件。
1.克隆EntitiePlugin.py 到 amulet安装位置\plugins\operations\ 像这种款

没文件夹就建文件夹。
2.启动Amulet 读取存档,此时如果存档大要的时间需要比较久,需耐心等待。
3.依次点击 3D编辑器 Operations 左上角选中“The Entitie‘s...”插件 点击“Delete All” 如下面这种款。此步任何一个地方所用时间都取决于你PC的性能,本身py就慢,这软件/插件还毫无多线优化……。

几小时后你就可以看到一个窗口上面写着删了多少limbo实体。我用约5小时删除了 12601867 个。 有图有真相。

细节(灌水)
在四处询问时,有为“大佬”称“直接删多余.ldb文件呗。” 我不知道他对leveldb了解多少,但我可以看出他要么是指的是给存档做个化疗,然后祈祷?或者,重开=删除多余ldb,因为ldb没了就相当于重开了。 另外有 ”大佬“ 称此事为区块储存错误……遍历所有区块后即可解决……。 在这群体中只有一位大佬提到了是实体的问题,但依然不愿详解……不知道,一知半解,留一手(好开发差件miancai),大概就这几种情况了。
跑到外面转的时候,自己发的贴子被bot吞了……问下为什么结果被老外说发的是一堆不可理解的rubbish……补上一句 Such a task for non-native-English Speaker. 后,估计让其感觉guilt,主动提出帮我改从谷歌生草机出的作文。(然而我不用谷歌bollocks-er……完蛋,eng白学……)
插件作者在entitiesplugin.py上一个版本中就有加list dead 的功能……其在bugreport 中也暗示到这些实体的删除方式存在。估计是我提出一键删除这个功能,才快速改下UI ,把已经有的功能再简化,所以才能几小时内就完成。 或者,其早就开始相关实验并且已经码了一些。 不过……为什么他不直接告诉我他早就写好了呢???
此插件是肿瘤削减术,根治还得靠免疫系统(微软修复。)。
如1.19.10不追加修复的话,至少未来两月这bug是肯定会继续发酵的。
如果你觉得本篇教程对你有帮助的话,就请给予些支持吧!
最后编辑: