-1
My Bukkit插件會執行一個計時器,該計時器會穿上護甲,倒計時然後移除護甲,然後當我再次運行計時器時速度更快?爲什麼是這樣?我希望用戶能夠多次使用該命令而無需再次登錄。有人能幫我嗎?我的Bukkit定時器運行一次,當我再次執行命令時,它的速度更快
if(args[0].equalsIgnoreCase("BlackWing"))
{
final ItemStack[] oldarmor1;
oldarmor1 = p.getInventory().getArmorContents();
ItemStack ib = new ItemStack(Material.CHAINMAIL_BOOTS, 1);
ib.addEnchantment(Enchantment.PROTECTION_FALL, 4);
ib.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1);
ItemStack il=new ItemStack(Material.CHAINMAIL_LEGGINGS, 1);
il.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1);
ItemStack ic = new ItemStack(Material.CHAINMAIL_CHESTPLATE, 1);
ic.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1);
ItemStack ih = new ItemStack(Material.CHAINMAIL_HELMET, 1);
ih.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1);
ItemStack[] armors1 = { ib ,
il,
ic,
ih};
p.getInventory().setArmorContents(armors1);
PotionEffect pe = new PotionEffect(PotionEffectType.JUMP, 600, 5);
p.addPotionEffect(pe);
ItemStack ironsword = new ItemStack(Material.IRON_SWORD,1);
ironsword.addEnchantment(Enchantment.DAMAGE_ALL, 3);
p.getInventory().setItem(0, ironsword);
getServer().getScheduler().scheduleAsyncRepeatingTask(this, new Runnable(){
public void run(){
if (number != 0){
p.sendMessage(ChatColor.RED + "[FairyTail] " + ChatColor.GRAY + number + " seconds left");
number=number -1;
}else{
p.getInventory().setArmorContents(oldarmor1);
}
}
}, 0L, 20L);
}
number=30;
那麼我會做什麼來取消它? – user4806359
你可以在'BukkitScheduler'類中使用cancelTask(id)方法,或者編寫自己的擴展了'BukkitRunnable'的類,然後使用this.cancel()。調度任務時,任務的ID將以int形式返回:'int id = getServer()。getScheduler()。scheduleSync ...' –