如题,我在EntityLivingBase类下发现了canEntityBeSeen
但这个方法判断的是玩家是否与实体间有方块阻挡
但这个方法判断的是玩家是否与实体间有方块阻挡
「视野」会随着玩家的 FOV 以及第三人称视角模式变化,而玩家的 FOV 和第三人称视角模式在客户端直接调整,因此一般不大可能仅靠服务端判断玩家的视野范围。
题主可能更需要说清楚这个「视野」的目的是什么,以判断相关代码更应该直接在客户端执行,还是在服务端执行(相关数据手动发包至服务端)。
题主可能更需要说清楚这个「视野」的目的是什么,以判断相关代码更应该直接在客户端执行,还是在服务端执行(相关数据手动发包至服务端)。
土球球 发表于 2021-12-19 00:40
「视野」会随着玩家的 FOV 以及第三人称视角模式变化,而玩家的 FOV 和第三人称视角模式在客户端直接调整, ...
我写了一个物品,并在事件中参考了原版的横扫攻击,但我发现扩大判定范围后,玩家能够攻击到自身身后的目标所以我想再额外判断目标是否在玩家是视野内,准确说应该是判断实体是否在玩家正面
我之前也提问过一个"如何获取以玩家前一格方块为圆心的半圆范围"的问题,目的也是类似的
你看看这个https://www.mcbbs.net/thread-1285482-1-1.html,我感觉二楼的回答对你应该有点帮助。用你那个什么canBeSeen判断完了以后让这个玩家扔一个隐形的投掷物,看看能不能砸到目标。

不过感觉这个应该会有延迟吧,不过可以把投掷物的速度调整的快一点。哦~原来说的是Forge啊,就当上面全都是放屁好了,Forge就简单多了。
说两个比较无脑的实现方式,抛砖引玉一下吧。
第一个:按你说要求,既要实体在玩家的视野范围内,又要玩家能够不被方块阻挡的看到这个实体,那这个实体是一定会被渲染在画面上的,那就用mixin改改实体的渲染方法,在渲染一个实体的时候判断一下这个实体是否符合你的要求,然后决定是否进行下一步操作。
第二个更暴利,既然能看见,那就在客户端上获取这玩家到这个实体之间的所有方块,看看其中是否有非透明或半透明方块,一个一个判断。
这样看起来比较拖性能,但是毕竟都是在客户端上运行的逻辑,客户端累到死也跟服务端没关系,单机玩家不会卡,在服务端里用还对服务端没有影响。
不过感觉这个应该会有延迟吧,不过可以把投掷物的速度调整的快一点。哦~原来说的是Forge啊,就当上面全都是放屁好了,Forge就简单多了。
说两个比较无脑的实现方式,抛砖引玉一下吧。
第一个:按你说要求,既要实体在玩家的视野范围内,又要玩家能够不被方块阻挡的看到这个实体,那这个实体是一定会被渲染在画面上的,那就用mixin改改实体的渲染方法,在渲染一个实体的时候判断一下这个实体是否符合你的要求,然后决定是否进行下一步操作。
第二个更暴利,既然能看见,那就在客户端上获取这玩家到这个实体之间的所有方块,看看其中是否有非透明或半透明方块,一个一个判断。
这样看起来比较拖性能,但是毕竟都是在客户端上运行的逻辑,客户端累到死也跟服务端没关系,单机玩家不会卡,在服务端里用还对服务端没有影响。