网易我的世界论坛

标题: 如何实现“坐”? [打印本页]

作者: 贰柒2700    时间: 2021-7-30 01:28
标题: 如何实现“坐”?
想要给椅子实现坐的功能,但是没琢磨明白有大佬提供一下思路吗?以及涉及的一些接口。
具体说下想要的效果:玩家点击椅子,就会坐上去(此时不能移动),现在玩家模型为坐的姿态,当玩家跳跃时离开椅子。

作者: sevenstars    时间: 2021-7-30 03:44
你的椅子是方块还是生物?如果是生物的话,参考原版骷髅马的行为,有个minecraft:rideable。如果是方块的话,你就得创建一个无敌的隐形生物和你的方块叠在一起,隐形生物和方块共存亡。如果隐形生物没了,就再创建一个,隐形生物要是检测到自己不在椅子方块里面就摧毁自己,然后检测到玩家点击椅子,就用SetRiderRideEntity让玩家坐在实体上。
还有更麻烦的方法,就是注册脚本驱动节点,给玩家添加动画控制器,然后玩家点击椅子就把玩家移动速度设为0,然后再触发玩家的坐下动画,这样玩家就被固定在椅子上并呈现坐的姿态了,离开椅子可以检测按跳跃键然后把移动速度恢复,再关闭玩家的坐下动画

作者: sevenstars    时间: 2021-7-30 03:50
如果要使用第二种方法(不需要生物),禁止玩家移动可以采用客户端SetCanMove不响应移动,循环设置向量为0等方式实现,还是不要修改玩家移动速度了,因为这个会存档,所以你还得在玩家离开时把他的移动速度恢复,不然玩家卸载掉你的mod后,如果当时坐在椅子上,那他再进游戏就动不了了,就像某些贝爷生存一样,玩家卸载了mod血量还是三颗星。
作者: 贰柒2700    时间: 2021-7-30 15:21
sevenstars 发表于 2021-7-30 03:44
你的椅子是方块还是生物?如果是生物的话,参考原版骷髅马的行为,有个minecraft:rideable。如果是方块的话 ...

非常感谢!我的椅子是方块的,现在有个疑问:“如果隐形生物没了,就再创建一个”,我应该怎么判断椅子坐标上有没有生物呢?
作者: 贰柒2700    时间: 2021-7-31 17:19
贰柒2700 发表于 2021-7-30 15:21
非常感谢!我的椅子是方块的,现在有个疑问:“如果隐形生物没了,就再创建一个”,我应该怎么判断椅子坐 ...

已解决
作者: ks小白小桂圆    时间: 2021-8-1 00:38
请问你是怎么解决的
作者: 贰柒2700    时间: 2021-8-1 01:29
ks小白小桂圆 发表于 2021-8-1 00:38
请问你是怎么解决的

先是用tryplaceblockevent事件,当玩家放置方块时,同时在该位置生成隐形实体。

用GetEngineActor获取所有实体,再根据实体的id用getpos获取他们的坐标,遍历判断每个实体的位置是否和我这个方块重合(我这里实体要比方块高一格的)
如果重合,就让玩家骑上去。

如果隐形实体被移除了,我是通过重新放置该方块或者用木棍点击来重新生成隐形实体。

接着用EntityTickServerEvent获取隐形实体的位置,判断该位置方块是否为椅子,如果不是就移除该实体。
作者: ks小白小桂圆    时间: 2021-8-1 21:26
哦哦,谢谢
作者: 给施工队施工    时间: 2021-8-2 13:34
大佬,知道【您的账号目前无法提审组件】是什么原因吗,怎么解决,知道的话劳烦你帮下忙,急死了,上个月底就开始这样了,这个月也还是这样,反馈给官方也收不到答复
作者: 贰柒2700    时间: 2021-8-2 16:54
给施工队施工 发表于 2021-8-2 13:34
大佬,知道【您的账号目前无法提审组件】是什么原因吗,怎么解决,知道的话劳烦你帮下忙,急死了,上个月底 ...

加QQ群没,私聊一下大喜或者水母
作者: 给施工队施工    时间: 2021-8-2 19:07
qq群?不知道有群呢,能发一下吗





欢迎光临 网易我的世界论坛 (https://mc.netease.com/) Powered by Discuz! X3.3