利用定时器来设定特效出现是否延迟,以及周期频率
奖励特效一:
VexLighting
在玩家处生成一道闪电
// 闪电特效
package com.project.minecraft.vexview;
import com.project.minecraft.main;
import lk.vexview.api.VexViewAPI;
import lk.vexview.effects.VexLightning;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
public class Jiangli_Effect1 extends BukkitRunnable {
Player player;
public Jiangli_Effect1(Player player){
this.player = player;
}
int s = 5;
@Override
public void run() {
s--;
VexLightning vl = new VexLightning(0, 255, 255);
VexViewAPI.spawnVexEffect(player.getLocation(), vl);
}
/**
* 开启特效的方法
*/
public void startEffect() {
runTaskTimer(main.plugin, 0L, 20L*4);
}
// /**
// * 关闭特效的方法
// */
// public void stopEffect() {
// cancel();
// }
}
package com.project.minecraft.vexview;
import com.project.minecraft.main;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
public class Jiangli_Effect2 extends BukkitRunnable {
Player player;
public Jiangli_Effect2(Player player){
this.player = player;
}
int s = 20;
@Override
public void run(){
s --;
// 依然还是要判断玩家
if (player == null || !player.isOnline()) {
cancel();
}
Location location = player.getLocation();
for (double radius = 0, y = 0, degree = 0; degree < 360 * 4; degree++, y += 0.01, radius += 0.01) {
double radians = Math.toRadians(degree);
double x = radius * Math.cos(radians);
double z = radius * Math.sin(radians);
location.add(x, y, z);
location.getWorld().playEffect(location, Effect.FLAME, 50);
location.subtract(x, y, z);
}
if (s == 0){
cancel();
}
// if (degree >= 360) {
// degree = 0;
// } else {
// degree += 10;
// }
//
}
/**
* 开启特效的方法
*/
public void startEffect() {
runTaskTimer(main.plugin, 0L, 20L*2);
}
// /**
// * 关闭特效的方法
// */
// public void stopEffect() {
// cancel();
// }
}
其他粒子特效(声音或者图形)
+编写的数学函数即可生成 想要得到的粒子特效。
Bukkit定时器是平时开发也会用到的,比如延迟,冷却,准备时间等等,都会使用。
bukkit提供了一个专有的线程,可以用来实现延迟等效果。
Java里面1000L是1秒,而Bukkit里面的是20L一秒,Bukkit服务器是使用单线程的.
然后想要实现一个定时器,可以直接new一个BukkitRunnable抽象类然后创建继承的Runnable接口方法就行了。
这里不会多说,具体请反编译核心文件的org.bukkit.scheduler查看,文档直接官方看就行了
一般有2种方法实现,1是直接new匿名类,2是创建一个类继承BukkitRunnable实现定时器。
匿名类的方法创建定时器,一般来说,我喜欢创建一类继承来实现
定时器编程教程
http://mineplugin.org/index.php?oldid=6917