所以我正在努力解决问题。我有两个单独的课程。 1个类用于runnable,1个类用于事件处理。有什么方法可以将事件播放器(e.getPlayer)传递给另一个类吗?我正在尝试更新项目的名称以达到冷却目的。这是我的代码
@SuppressWarnings("deprecation")
@EventHandler
public void ItemRightClick(PlayerInteractEvent e) {
Player p = e.getPlayer();
Action a = e.getAction();
ItemStack item = p.getItemInHand();
ItemMeta itemmeta = item.getItemMeta();
if(a == Action.PHYSICAL) return;
if(!p.getItemInHand().getType().equals(Material.DIAMOND_HOE)) return;
if(!itemmeta.getDisplayName().contains("Wand of Regen")) return;
if(cooldown.containsKey(p)) {
if(cooldown.get(p) + cooldownTime <= System.currentTimeMillis()) {
cooldown.remove(p);
} else {
if((int) (cooldown.get(p) + cooldownTime - System.currentTimeMillis()) / 1000 != 0) {
itemmeta.setDisplayName(ChatColor.RED + "Wand of Regen" + ChatColor.GRAY + " - " + ChatColor.AQUA + "Remaining " + ChatColor.GREEN + (int) (cooldown.get(p) + cooldownTime - System.currentTimeMillis()) / 1000 + ChatColor.AQUA + " seconds");
item.setItemMeta(itemmeta);
return;
}
itemmeta.setDisplayName(ChatColor.RED + "Wand of Regen" + ChatColor.GRAY + " - " + ChatColor.GREEN + "Ready");
item.setItemMeta(itemmeta);
}
}
p.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 5 * 100, 3));
p.sendMessage("Regen activated");
cooldown.put(p, System.currentTimeMillis());
}
}
这是可运行的类
public class StepEvent extends BukkitRunnable {
@Override
public void run() {
}
}
答案 0 :(得分:0)
您可以使用其中的播放器构建您的StepEvent
课程,如下所示:
public class StepEvent extends BukkitRunnable {
private Player passedPlayer;
public StepEvent(Player passedPlayer) {
this.passedPlayer = passedPlayer;
}
@Override
public void run() {
passedPlayer.doStuff();
}
}
每当你需要在播放器中使用这个Runnable时,就像你通常那样创建它的一个实例:
StepEvent stepEventWithPlayer = new StepEvent(playerToBePassed);