比如玩家射出了一支箭 或者 发射了一枚火球
然后距离超出了他周围已加载的区块 这时候这个发射物依然会被储存下来
翻了下1.12.2的doc 没有看到监听实体的移动方法
所以 有什么好的方法可以实现 在一枚发射物射出一段距离后 他周围没有玩家 就把这个发射物给清掉
然后距离超出了他周围已加载的区块 这时候这个发射物依然会被储存下来
翻了下1.12.2的doc 没有看到监听实体的移动方法
所以 有什么好的方法可以实现 在一枚发射物射出一段距离后 他周围没有玩家 就把这个发射物给清掉
本帖最后由 1448848683 于 2021-5-20 09:26 编辑
可以试试给发射物设置一个生命周期,例如2400刻,发射物生成时间超过这个刻了就删除,要不就用world.getEntitiesWithinAABB,但谨慎使用,这方法有点废性能。
至于怎么调用,你可以试试实体刻。
可以试试给发射物设置一个生命周期,例如2400刻,发射物生成时间超过这个刻了就删除,要不就用world.getEntitiesWithinAABB,但谨慎使用,这方法有点废性能。
至于怎么调用,你可以试试实体刻。
大体思路:
1. 对实体进行标记
2. 在区块加载时判断该区块上是否有需要移除的实体
3. 移除
1. 对实体进行标记
2. 在区块加载时判断该区块上是否有需要移除的实体
3. 移除
1448848683 发表于 2021-5-21 01:18
可以试试给发射物设置一个生命周期,例如2400刻,发射物生成时间超过这个刻了就删除,要不就用world.getEnt ...
我尝试过创建一个task来删掉这个发射物,但是在这个发射物进入未加载的区块时,他会直接被保存下来。
而这个task就算到了时间,这个生物已经被标记为dead了。
等区块被加载的时候,这个发射物会依然存在
南柯郡守 发表于 2021-5-21 08:41
大体思路:
1. 对实体进行标记
2. 在区块加载时判断该区块上是否有需要移除的实体
现在我用的是这个方法。
但除此之外是不是就没其他更合理的方法来处理发射物了。
本帖最后由 1448848683 于 2021-5-20 22:49 编辑
没办法,mc的机制就是这样,但关于你的需求我其实有个小建议,你根据发射物的速度和时间去计算距离玩家的距离,根据这个推算出需要多少刻移除发射物,然后在其tick的方法里去每次减少1,<=0时移除自身,会比计算距离更好一些
你要是需要更合理的移除的话,1.16的Entity类有个名为writeUnlessPassenger和isAlive的方法,不知道1.12有没有,你可以试着复写一下,或许可以用来在生物进入未加载区块的时候把生物删了。
Cuki 发表于 2021-5-20 22:10
我尝试过创建一个task来删掉这个发射物,但是在这个发射物进入未加载的区块时,他会直接被保存下来。
而 ...
没办法,mc的机制就是这样,但关于你的需求我其实有个小建议,你根据发射物的速度和时间去计算距离玩家的距离,根据这个推算出需要多少刻移除发射物,然后在其tick的方法里去每次减少1,<=0时移除自身,会比计算距离更好一些
你要是需要更合理的移除的话,1.16的Entity类有个名为writeUnlessPassenger和isAlive的方法,不知道1.12有没有,你可以试着复写一下,或许可以用来在生物进入未加载区块的时候把生物删了。