Java player.sendMessage发送两次

Java player.sendMessage发送两次,java,minecraft,bukkit,Java,Minecraft,Bukkit,在右键点击shrooms后,它会说你吃了shrooms,然后再试一次,它会说不要过量,孩子们,但如果你吃了糖,它会告诉你吸了可卡因,不要过量,孩子们会立刻。有什么问题吗 我曾经尝试过不同的类,在右键单击sendMessage时也尝试过,如果吃了糖,请双击 事件类 package com.maverick.drugPlugin.Events; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.en

在右键点击shrooms后,它会说你吃了shrooms,然后再试一次,它会说不要过量,孩子们,但如果你吃了糖,它会告诉你吸了可卡因,不要过量,孩子们会立刻。有什么问题吗

我曾经尝试过不同的类,在右键单击sendMessage时也尝试过,如果吃了糖,请双击

事件类

package com.maverick.drugPlugin.Events;

import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;


public class EventsClass implements Listener {
    @EventHandler
    @SuppressWarnings({ "deprecation" })
    public void consumeDrugs(PlayerInteractEvent event) {
        Player player = event.getPlayer();
        Action action = event.getAction();

        if(action.equals(Action.RIGHT_CLICK_AIR) || action.equals(Action.RIGHT_CLICK_BLOCK)) {
            if (player.getItemInHand().getType() == Material.BROWN_MUSHROOM) {
                if(!player.hasPotionEffect(PotionEffectType.CONFUSION)) {
                player.getInventory().getItemInHand().setAmount(player.getInventory().getItemInHand().getAmount() - 1);
                player.sendMessage(ChatColor.RED + "You consumed " + ChatColor.BLUE + "shrooms");
                player.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 120*20, 1, true, false));
                } else {
                player.sendMessage(ChatColor.DARK_RED + "Don't overdose, kids");
            }
    }
}
        if(action.equals(Action.RIGHT_CLICK_AIR) || action.equals(Action.RIGHT_CLICK_BLOCK)) {
            if (player.getItemInHand().getType() == Material.SUGAR) {
                if(!player.hasPotionEffect(PotionEffectType.CONFUSION)) {
                player.getInventory().getItemInHand().setAmount(player.getInventory().getItemInHand().getAmount() - 1);
                player.sendMessage(ChatColor.RED + "You snorted " + ChatColor.BLUE + "cocaine");
                player.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 120*20, 1, true, false));
                } else {
                player.sendMessage(ChatColor.DARK_RED + "Don't overdose, kids");
                }

            }
        }
    }
}

我想这样,当你吸食含糖可卡因时,它会说你先吸食可卡因,然后再尝试再次吸食,它会告诉你不要过量,孩子们喜欢吃shrooms。

玩家互动事件可能有点喜怒无常,有时会引发一次、两次甚至多次。在这种情况下,我过去使用的解决方案是使用一个映射来存储播放器触发交互事件时的当前时间戳System.currentTimeMillis


然后进行一点测试,如果后续交互事件在短时间内发生,根据您的行为,比如100-200毫秒,您可以放弃它们,这样可以解决双击问题。

我尝试了所有方法,但似乎找不到问题。我尝试了不同的类,尝试了注册点击,结果显示它在消费糖时注册了两次点击。我想不出怎样才能阻止它。好了,你做到了。它注册了两次点击,这就是问题所在!也许你在地雷船上发现了一只虫子!上面的代码中没有错误,不算IF-statements。是的,我发现如果它调用两次,我可以调试。我现在正在与人们讨论它为什么会这样做。感谢您的快速回复。您使用的是哪个版本?因为在1.13.2中,这段代码可以很好地工作。此外,getItemInHand也不推荐使用,请改用getInventory.getItemInMainHand。
package com.maverick.drugPlugin;

import org.bukkit.plugin.java.JavaPlugin;

import com.maverick.drugPlugin.Events.EventsClass;

import org.bukkit.ChatColor;

public class Drugs extends JavaPlugin {

    public void onEnable() {
        getServer().getPluginManager().registerEvents(new EventsClass(), this);
        getServer().getConsoleSender().sendMessage(ChatColor.GREEN + "\n\nDrugs are enabled\n\n");
    }

    public void onDisable() {
        getServer().getConsoleSender().sendMessage(ChatColor.RED + "\n\nDrugs are Disabled\n\n");
    }
}