最近我想写一个功能,效果是这样的:规划出一个区域
获得区域边界上所有的Location,当玩家的位置于区域的任意位置距离<=1.5时
就
复制代码给玩家发送一个假方块在区域边界上的符合条件的位置(目的是阻挡玩家进去)
然后在玩家离开时(距离>1.5)再讲区域边界上的方块还原
我目前想到的解决方法是:
监听PlayerMoveEvent,当符合条件时发送假方块,离开时再发送假方块(air)
但是使用PlayerMoveEvent的消费会很大
问有大佬知道有什么更好的解决方案吗?

获得区域边界上所有的Location,当玩家的位置于区域的任意位置距离<=1.5时
就
- player.sendBlockChange()
然后在玩家离开时(距离>1.5)再讲区域边界上的方块还原
我目前想到的解决方法是:
监听PlayerMoveEvent,当符合条件时发送假方块,离开时再发送假方块(air)
但是使用PlayerMoveEvent的消费会很大
问有大佬知道有什么更好的解决方案吗?
本帖最后由 2000000 于 2023-2-9 17:21 编辑
使用 BukkitRunnale 异步重复任务代替。
您只是想检查玩家的 x y z 变化,但 playerMoveEvent 在 yaw pitch 变化时也会被触发,即使稍微摆动鼠标也可能触发几千次,这意味着您的 playerMoveEvent 内的内容也会无意义的执行几千次,从一个地方移动到另一个地方不单单只触发几十次 playerMoveEvent。只需要 BukkitRunnable 异步重复遍历所有玩家,检查他们,干你想干的事情
使用 BukkitRunnale 异步重复任务代替。
您只是想检查玩家的 x y z 变化,但 playerMoveEvent 在 yaw pitch 变化时也会被触发,即使稍微摆动鼠标也可能触发几千次,这意味着您的 playerMoveEvent 内的内容也会无意义的执行几千次,从一个地方移动到另一个地方不单单只触发几十次 playerMoveEvent。只需要 BukkitRunnable 异步重复遍历所有玩家,检查他们,干你想干的事情
不管你监听还是不监听,PlayerMoveEvent事件他都会一直发生,并不会你少监听他就不发生,关键是你里面代码的复杂度
事实上占用没那么抽象
一切取决于你的代码复杂度,代码优化成度
如果代码的占用本身巨大,那么即使不监听也没用
一切取决于你的代码复杂度,代码优化成度
如果代码的占用本身巨大,那么即使不监听也没用