Bukkit将事件的玩家传递给另一个班级

问题描述 投票:0回答:1

所以我正在努力解决问题。我有两个单独的课程。 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() {

    }
}
java bukkit
1个回答
0
投票

您可以在其构造函数中使用Player创建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);
© www.soinside.com 2019 - 2024. All rights reserved.