[Bug]: 监听玩家操作方块容器事件刷屏 - legacy-script-engine
MoonlightUU opened this issue · 10 comments
Describe the bug
监听玩家操作方块容器时 编辑方块实体NBT 或 操作方块容器成功 导致的死循环 qaq
To Reproduce
mc.listen('onContainerChange', function(pl, bl, slotNum, oit, nit) {
let containerBlock = bl.getContainer();
return log(containerBlock.removeItem(0, 1))
//如果往容器第一格放入物品将会刷屏 即使玩家只放入一次
Expected behavior
期望修复 ovo
Screenshots
none
Platform
Windows 10
Version
此服务器正在运行基岩版专用服务器版本 1.20.81-1.671+a9081c5 带有 LeviLamina-0.12.2+916edf645
Additional context
No response
这个显然是你的代码写的有问题 再好好看看lse文档吧
这个显然是你的代码写的有问题 再好好看看lse文档吧
指出错误
removeItem会造成容器更改
removeItem会造成容器更改
所以是玩家在服务器removeItem了么?
removeItem会造成容器更改
所以是玩家在服务器removeItem了么?
当然是因为removeItem会导致容器更改,容器更改会产生onContainerChange事件,onContainerChange里调removeItem不就死循环了吗😥
removeItem会造成容器更改
给你举个例子吧 这个事件监听容器变更 但是 只能监听玩家去操作容器; 而不是监听容器本身变化 ;
比如 玩家前面有个箱子 漏斗放入一个泥土 那这个事件有反应吗? 没有 ;
再比如 玩家打开了这个箱子 漏斗放入一个泥土 那这个事件有反应吗? 有了;
回到正题 这些操作? 是玩家做的吗 不是 它只是打开了箱子; 现在 ? 你知道我说的问题在哪了吗?
removeItem会造成容器更改
所以是玩家在服务器removeItem了么?
当然是因为removeItem会导致容器更改,容器更改会产生onContainerChange事件,onContainerChange里调removeItem不就死循环了吗😥
再说另外一个问题 更改方块的实体nbt 比如我把方块实体的自定义名称更改了; 写入;
这个事件触发时 如果进行上面的操作 同样死循环;
那么 是玩家更改了方块nbt吗? 它只是打开了容器...
removeItem会造成容器更改
所以是玩家在服务器removeItem了么?
当然是因为removeItem会导致容器更改,容器更改会产生onContainerChange事件,onContainerChange里调removeItem不就死循环了吗😥
再说另外一个问题 更改方块的实体nbt 比如我把方块实体的自定义名称更改了; 写入;
这个事件触发时 如果进行上面的操作 同样死循环;
那么 是玩家更改了方块nbt吗? 它只是打开了容器...
1.这是levilamina的issue,不是lse的
2.lse目前只做维护,并会在ls完成后停止,不会再做其他的更改了
3.你这个直接在外层加个flag做个特判就解决了,为什么要搞这么复杂
该事件监听容器变化,至于变化是谁造成的,不由script engine负责,script只转发原始事件。该行为是预期行为。有需要请自行处理该逻辑问题