LING_Y_
最近我想写一个功能,效果是这样的:规划出一个区域

获得区域边界上所有的Location,当玩家的位置于区域的任意位置距离<=1.5时

  1. player.sendBlockChange()
复制代码
给玩家发送一个假方块在区域边界上的符合条件的位置(目的是阻挡玩家进去)
然后在玩家离开时(距离>1.5)再讲区域边界上的方块还原

我目前想到的解决方法是:
监听PlayerMoveEvent,当符合条件时发送假方块,离开时再发送假方块(air)

但是使用PlayerMoveEvent的消费会很大
问有大佬知道有什么更好的解决方案吗?

2000000
本帖最后由 2000000 于 2023-2-9 17:21 编辑

使用 BukkitRunnale 异步重复任务代替。
           
您只是想检查玩家的 x y z 变化,但 playerMoveEvent 在 yaw pitch 变化时也会被触发,即使稍微摆动鼠标也可能触发几千次,这意味着您的 playerMoveEvent 内的内容也会无意义的执行几千次,从一个地方移动到另一个地方不单单只触发几十次 playerMoveEvent。只需要 BukkitRunnable 异步重复遍历所有玩家,检查他们,干你想干的事情


lapin_boy
不管你监听还是不监听,PlayerMoveEvent事件他都会一直发生,并不会你少监听他就不发生,关键是你里面代码的复杂度

小张up
事实上占用没那么抽象

一切取决于你的代码复杂度,代码优化成度

如果代码的占用本身巨大,那么即使不监听也没用


第一页 上一页 下一页 最后一页