dengyu 发表于 2020-8-9 18:55:44

如何监听到模组合成的事件

如题,我希望能够监听到模组工作台(如无尽贪婪里面的终极工作台、神秘里面的奥术工作台等等)的合成事件,不过CraftItemEvent并不可以(可以就怪了233),请问有什么办法可以监听到这些模组工作台的合成事件呢
(如果神秘的奥术注魔也可以监听到就好了2333)

南柯郡守 发表于 2020-8-9 19:01:16

插件如何监听mod通信
https://www.mcbbs.net/thread-1077955-1-1.html
(出处: Minecraft(我的世界)中文论坛)


监听MOD通信
因为合成、注魔等一定会发包通信

但是我也只知道如何监听
如何解析还是不太懂

洞穴夜莺 发表于 2020-8-9 19:15:37

本帖最后由 洞穴夜莺 于 2020-8-9 19:18 编辑

模组主动监听Mod事件基本是无解的
但是可以用Mod发布事件,这样Bukkit插件就可以监听

381983340 发表于 2020-8-9 19:18:35

感谢分享。

cocosoys 发表于 2020-8-12 03:40:50

这个只能自己写监听,不会写可以参考文献https://fmltutor.ustc-zzzz.net/2.1.2-%E8%87%AA%E5%AE%9A%E4%B9%89%E6%96%B0%E7%9A%84%E4%BA%8B%E4%BB%B6.html

洞穴夜莺 发表于 2020-8-12 08:42:55

本帖最后由 洞穴夜莺 于 2020-8-12 09:09 编辑

南柯郡守 发表于 2020-8-9 19:01
插件如何监听mod通信
https://www.mcbbs.net/thread-1077955-1-1.html
(出处: Minecraft(我的世界)中文论坛 ...

玄学方法---谁告诉你Mod合成一定会通信的?工业Mod切割机合成漏斗倒原料进去,漏斗倒成品出来,请问哪里需要通信?
而且合成作为一种Container操作,你在监听什么呢?

南柯郡守 发表于 2020-8-12 10:38:26

洞穴夜莺 发表于 2020-8-12 08:42
玄学方法---谁告诉你Mod合成一定会通信的?工业Mod切割机合成漏斗倒原料进去,漏斗倒成品出来,请问哪里 ...

没写过MOD
但是就理论来说

如果不与服务器通信 仅在客户端完成
那不就成了客户端单方面的操作 且不说别的玩家客户端不知道这东西合成了物品单独的客户端行为岂不是跟作弊刷物品一样?

洞穴夜莺 发表于 2020-8-12 10:51:07

本帖最后由 洞穴夜莺 于 2020-8-12 13:16 编辑

南柯郡守 发表于 2020-8-12 10:38
没写过MOD
但是就理论来说



这里指合成物品可能是仅服务端行为
其次Container操作监听CustomPayload无用
最后,回答问题:工业切割机合成哪个阶段需要客户端参与?

William_Shi 发表于 2020-8-12 13:23:51

洞穴夜莺 发表于 2020-8-12 10:51
这里指合成物品可能是仅服务端行为
其次Container操作监听CustomPayload无用
最后,回答问题:工业切割机 ...

我觉得应该这样类比

比如说炼药,炼药对于客户端来说
1.放置原料,涉及到物品栏打开、物品栏更新数据包
2.炼药过程中,渲染粒子
3.在tick过程中炼药完成,服务端触发炼药完毕的事件,对于TileEntity保存的物品栏进行更新
不存在客户端行为,除非玩家打开物品栏
所以就不能检测到所谓合成事件
当然限于我的Mod开发水平,我实在无力解答如何监听
但我认为如果我写个合成GUI可能(Bukkit插件)根本不会涉及到合成的监听
而且Mod事件总线和Bukkit事件总线本来就不在一起的
针对原版的事件已经是服务端强行拼接,Mod事件估计不可控
但是如果相应Mod有留出事件的API,你可以写个Mod监听然后和Bukkit插件进行相关通信

洞穴夜莺 发表于 2020-8-12 13:34:55

本帖最后由 洞穴夜莺 于 2020-8-12 14:17 编辑

William_Shi 发表于 2020-8-12 13:23
我觉得应该这样类比

比如说炼药,炼药对于客户端来说


观点赞同
因为不清楚Bukkit和Forge嫁接的方式
前面的所说发布事件是Mod有办法访问Bukkit事件总线为前提的发布Bukkit事件(不像Bukkit插件,因为Mod有能力在核心jar和其他Mod的jar的几乎任何位置注入自己的代码,所以我认为Mod理所应当能够访问Bukkit事件总线,故提出了前面的解决方案)
另外即使Mod A没有留出API,Mod B也可以直接向Mod A注入代码的,这和Bukkit插件不同

此外如果机器在常加载区块,周围没有人,并且使用漏斗等自动化时,客户端可能完全不参与
页: [1]
查看完整版本: 如何监听到模组合成的事件