MC百科社群

标题: Mod开发中击杀实体问题 [打印本页]

作者: FireDragon    时间: 2023-1-7 21:47
标题: Mod开发中击杀实体问题
版本:1.12.2,forge:2847
想问一下大佬setHeath,isDead=true,world.removeEntity,setDead这几个方法击杀实体的本质,因为我用这几个方法击杀实体一直出现假死(就是重进世界就会回来),想问一下解决办法,十分感谢!awa

作者: FireDragon    时间: 2023-1-7 21:50
本人初学mod开发,可能会比较沙雕
作者: xm94732568960    时间: 2023-1-22 09:24
FireDragon 发表于 2023-1-7 21:50
本人初学mod开发,可能会比较沙雕

你是不是在client客户端调用的
作者: FireDragon    时间: 2023-1-22 23:41
xm94732568960 发表于 2023-1-22 09:24
你是不是在client客户端调用的

对,是不是得同步服务端
作者: xm94732568960    时间: 2023-1-23 08:14
本帖最后由 xm94732568960 于 2023-1-23 08:17 编辑
FireDragon 发表于 2023-1-22 23:41
对,是不是得同步服务端

触发击杀实体的代码应该在服务端执行,然后服务端给客户端发包让客户端知道这个实体被击杀了
可以理解为只有服务端对世界的更改是有效的(真实世界),在客户端里看到的内容都只是服务端发送的影子
如果击杀实体的包是从客户端发往服务端的话,这个模组就会有安全性问题,玩家开挂发包不就能随便秒杀服务端里的实体么


作者: FireDragon    时间: 2023-2-5 08:33
xm94732568960 发表于 2023-1-23 08:14
触发击杀实体的代码应该在服务端执行,然后服务端给客户端发包让客户端知道这个实体被击杀了
可以理解为只 ...

forge可真够6的
作者: xm94732568960    时间: 2023-2-5 09:59
FireDragon 发表于 2023-2-5 08:33
forge可真够6的

和forge没关系,目前大多数游戏都使用这种发包机制
作者: xm94732568960    时间: 2023-2-5 10:04
FireDragon 发表于 2023-2-5 08:33
forge可真够6的

正常情况下服务端杀死实体后,会自动发包给客户端让它知道这个实体被击杀了
作者: FireDragon    时间: 2023-2-5 11:07
xm94732568960 发表于 2023-2-5 10:04
正常情况下服务端杀死实体后,会自动发包给客户端让它知道这个实体被击杀了 ...

所以要获取服务端实体列表再用setHealth之类的杀吗?
作者: xm94732568960    时间: 2023-2-5 12:43
FireDragon 发表于 2023-2-5 11:07
所以要获取服务端实体列表再用setHealth之类的杀吗?

啊,客户端无权直接访问服务端数据,只能给服务端发包,应该是服务端自己寻找符合条件的实体,进行杀死就可以
作者: xm94732568960    时间: 2023-2-5 12:47
FireDragon 发表于 2023-2-5 11:07
所以要获取服务端实体列表再用setHealth之类的杀吗?

你可以说明一下你要做的是什么东西,这样我也清楚一点
作者: QQ酱208628    时间: 2023-5-26 13:18
FireDragon 发表于 2023-2-5 08:33
forge可真够6的

这个应该是运算方面的逻辑,和Forge没有任何关系。
setHealth为0时会setDead,setDeat是直接设定isDead=true,一种干净的方法处理,world.removeEntity是不会调用死亡事件的,会直接清理生物。
服务端与客户端是两个运行同步的线程,死亡这一类的逻辑运算应该是服务端上执行的。




欢迎光临 MC百科社群 (https://bbs.mcmod.cn/) MC百科|最大的MineCraft中文模组百科