如题,如何做出一个长按右键隔几ticks发射一个雪球的物品
bukkit只提供了诸如当点击时会调用的事件 而并不会提供按键时间长短...
楼主后面所说的隔几ticks发射一个雪球 可以通过BukkitRunnable实现
例子:
复制代码
发射雪球的代码可以通过
复制代码
实现
如果想将这一个方法重复执行 可以先将BukkitRunnable设为一个变量 然后每次将其runTaskTimer一下就好了
楼主后面所说的隔几ticks发射一个雪球 可以通过BukkitRunnable实现
例子:
- new BukkitRunnable(){
- int time;//设置一个计数器 比如每次操作时加一
- @Override
- public void run(){
- if(time == /*计数器最大值*/){
- cancel();
- return;
- }
- //发射雪球等等的代码
- }
- }.runTaskTimer(/*Plugin*/, /*延迟多少ticks开始执行*/, /*隔多少ticks执行一次*/);
发射雪球的代码可以通过
- player.launchProjectile(Snowball.class, /*雪球发射的向量*/);
实现
如果想将这一个方法重复执行 可以先将BukkitRunnable设为一个变量 然后每次将其runTaskTimer一下就好了
qipao_start 发表于 2022-3-28 23:04
bukkit只提供了诸如当点击时会调用的事件 而并不会提供按键时间长短...
楼主后面所说的隔几ticks发射一个雪 ...
但是你没考虑如果提前松开按键怎么办啊
FrankHan2004 发表于 2022-3-29 07:51
但是你没考虑如果提前松开按键怎么办啊
...我想我在楼上说的很清楚...
bukkit只提供了诸如当点击时会调用的事件 而并不会提供按键时间长短...
也就是说 按一次按键 就会调用一次事件
但并不会提供按键时间长短
那么在没有时间计算的情况下
提前松开按键
就显然不存在了 毕竟只有在按下按键的那一瞬间才会调用 而松开是根本不会也没法考虑的
qipao_start 发表于 2022-3-29 21:26
...我想我在楼上说的很清楚...
也就是说 按一次按键 就会调用一次事件
在你保持右键的时候,玩家交互事件会被一直触发,所以你大可不必写重复,因为这个东西会自己帮你重复触发

qipao_start 发表于 2022-3-29 21:26
...我想我在楼上说的很清楚...
也就是说 按一次按键 就会调用一次事件
所以不符合需求,才反驳的你........
楼上说的是对的,保守的办法就是一个bukkitRunnable循环计时,一个Listener更新玩家是否按住了右键(右手产生交互)
很显然,你们这一句一个楼上,已经导致指向开始混乱了。很显然,殿下是正确的,因为按住右键会持续不断地触发 Interact 事件。只需要保存事件触发的时间戳,再判断间隔,就可以避免两秒十七发了。(当然玩家可能拿不到29杀了)
2452175985 发表于 2022-3-30 17:20
加插件!awa
就你离谱