SlashBlade: Resharped

SlashBlade: Resharped

185k Downloads

关于特定ForgeEvent问题……

Hylberra opened this issue · 2 comments

commented

问题比较……邪门,我甚至没办法总结一个有效的标题出来
我也没办法说这是bug或者是特性或者是建议?我已经完全困惑了,自从我动了想要限制重铸次数上限和刀魂数量上限的想法,到我自己尝试各种手段,再到拉了好几个朋友来帮忙……到现在
每个人都在劝我放弃这个,因为这似乎无法通过外力解决,config解决不了,datapack完全做不到,kjs也解决不了
剩下的可能性是写个mixin,但我周围似乎没人会……
所以我来交issue了……我其实不太抱希望,因为这个问题从拔刀剑2就有,一直留到重锋,我无法确认这是什么级别的问题……我甚至不确定问题能不能解决

长话短说,这是关于一个ForgeEvent的issue
具体一点说,是ForgeEvents.onEvent("mods.flammpfeil.slashblade.event.SlashBladeEvent$UpdateEvent")
这个事件

这个事件和其他几个事件一起会每tick在每一把拔刀剑上执行一次,KJS等手段既不能绕过它来修改拔刀剑的NBT也不能阻止这个事件的执行

它的效果?我不知道,我只知道有这个事件在,如果编辑拔刀剑的nbt时不一并修改uuid,那么编辑会被覆盖掉,根本不发生任何事情
同样还是因为这一系列事件,当你把一个拔刀剑物品删除的时候会造成一次小小的卡顿,大约会让整个服务器卡顿一秒——但想象一下你装了个trashcan之类的模组然后按着delete键用鼠标扫过一排拔刀剑把它们全部摧毁会发生什么……?
还是基于相同的一系列事件:kjs根本无法修改拔刀剑的nbt,我朋友在帮我写kjs的时候这堆东西不知为何让kjs无法扫到接口,甚至几次导致线程损坏。
这还不是最过分的,最过分的是——如果我没理解错他表达的意思的话——为什么这模组还会有event阻止你写个event来阻止这个每tick循环执行的event,这怎么还套娃套上了?how?
——反正他已经被气得完全不打算掺和这件事了,而我还得自己再想想办法……
——或者真的放弃使用这个模组。那是我最不希望的,这个模组承载了我太多的回忆了,好不容易能在高版本重新见面,要是以这种方式告别也太遗憾了

但这一坨event它们基本上完全封死了通过KJS等手段来限制拔刀剑所能积累的最大重铸次数或者刀魂数量的可能,而游戏内的config或者能用datapack修改的部分也好……也似乎没有提供可用的设置

……另外,朋友有些担心这个事件高频复读在多玩家的服务器环境里,是否有导致tps等各项性能受灾难性影响的可能,毕竟这个流程几乎是在每一把拔刀剑物品上每tick执行一次,一旦玩家数量增加导致刀的数量跟着增加,我不太确定这会发生什么
原话是“你就用吧活爹,服务器炸了就好玩了”
但……我是真的不想放弃这个模组啊,我到底该怎么办?

这个event到底是做什么的啊?为什么还设置了能阻止kjs等手段阻止这个event的东西?
如果无法停掉它……那要怎么才能给重铸次数和魂数量设置上限?

整件事就简直……令人困惑而且绝望——这件事导致我甚至现在,此时此刻,在写issue的时候都抱着一种完全困惑而且不抱希望的心态
事实上,我想感谢任何看到这里的人,听我废话这么多很可能并不是一件愉快的事情,但……我的困惑在驱使我留下这个issue,所以真的很抱歉
顺便无论问题最后能不能解决,也感谢重锋的开发者们……至少高版本拔刀剑是真的有在变好,至少我有这么一次机会能来这里诉苦而不是对着一堆问题做不了任何事情
谢谢你们

commented

?多简单的事啊

const $ItemSlashBlade = Java.loadClass("mods.flammpfeil.slashblade.item.ItemSlashBlade")

// 在修改时
if(item instanceof $ItemSlashBlade) {
    if(item.getCapability($ItemSlashBlade.BLADESTATE).isPresent()) {
        let state = blade.getCapability($ItemSlashBlade.BLADESTATE).resolve().get()
        state.setRefine(233) //或者别的数值
    }
}
commented

目前删除了Furia遗留的数据同步网络包处理了NBT的问题。
理论来说NBT数据会通过Cap双向同步了,如果不能的话那我也没有办法。