Xu_Yichen
如题,如何做出一个长按右键隔几ticks发射一个雪球的物品

qipao_start
bukkit只提供了诸如当点击时会调用的事件 而并不会提供按键时间长短...
楼主后面所说的隔几ticks发射一个雪球 可以通过BukkitRunnable实现
例子:
  1. new BukkitRunnable(){
  2.   int time;//设置一个计数器 比如每次操作时加一
  3.   @Override
  4.   public void run(){
  5.      if(time == /*计数器最大值*/){
  6.         cancel();
  7.         return;
  8.      }
  9.      //发射雪球等等的代码
  10.   }
  11. }.runTaskTimer(/*Plugin*/, /*延迟多少ticks开始执行*/, /*隔多少ticks执行一次*/);
复制代码


发射雪球的代码可以通过
  1. player.launchProjectile(Snowball.class, /*雪球发射的向量*/);
复制代码

实现

如果想将这一个方法重复执行 可以先将BukkitRunnable设为一个变量 然后每次将其runTaskTimer一下就好了

FrankHan2004
qipao_start 发表于 2022-3-28 23:04
bukkit只提供了诸如当点击时会调用的事件 而并不会提供按键时间长短...
楼主后面所说的隔几ticks发射一个雪 ...

但是你没考虑如果提前松开按键怎么办啊

qipao_start
FrankHan2004 发表于 2022-3-29 07:51
但是你没考虑如果提前松开按键怎么办啊

...我想我在楼上说的很清楚...
bukkit只提供了诸如当点击时会调用的事件 而并不会提供按键时间长短...

也就是说 按一次按键 就会调用一次事件
并不会提供按键时间长短
那么在没有时间计算的情况下
提前松开按键

就显然不存在了 毕竟只有在按下按键的那一瞬间才会调用 而松开是根本不会也没法考虑的

克鲁鲁殿下
qipao_start 发表于 2022-3-29 21:26
...我想我在楼上说的很清楚...

也就是说 按一次按键 就会调用一次事件

在你保持右键的时候,玩家交互事件会被一直触发,所以你大可不必写重复,因为这个东西会自己帮你重复触发

FrankHan2004
qipao_start 发表于 2022-3-29 21:26
...我想我在楼上说的很清楚...

也就是说 按一次按键 就会调用一次事件

所以不符合需求,才反驳的你........
楼上说的是对的,保守的办法就是一个bukkitRunnable循环计时,一个Listener更新玩家是否按住了右键(右手产生交互)

William_Shi
很显然,你们这一句一个楼上,已经导致指向开始混乱了。很显然,殿下是正确的,因为按住右键会持续不断地触发 Interact 事件。只需要保存事件触发的时间戳,再判断间隔,就可以避免两秒十七发了。(当然玩家可能拿不到29杀了)

Xu_Yichen

就你离谱

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