在玩家改变世界时,使用delai-Minecraft-java发送物品

在玩家改变世界时,使用delai-Minecraft-java发送物品,java,minecraft,Java,Minecraft,我开始开发一个插件,当玩家以1秒的延迟改变世界时,它会提供物品 否则,这些项目不会出现在玩家的热栏中 出现了一个问题,如果在这一秒中,第二个玩家也改变了世界,那么这些物品将只提供给一个玩家(最后一个改变世界的玩家) 我的服务器是1.14.4 这是我的密码: float timerCount = 1.0F; @EventHandler public void onWorldSwitch(PlayerChangedWorldEvent event) { Player player = eve

我开始开发一个插件,当玩家以1秒的延迟改变世界时,它会提供物品

否则,这些项目不会出现在玩家的热栏中

出现了一个问题,如果在这一秒中,第二个玩家也改变了世界,那么这些物品将只提供给一个玩家(最后一个改变世界的玩家)

我的服务器是1.14.4

这是我的密码:

float timerCount = 1.0F;
@EventHandler
public void onWorldSwitch(PlayerChangedWorldEvent event) {
    Player player = event.getPlayer();
    BukkitTask CountDownId;

    ArrayList<Player> players = new ArrayList<Player>();
    players.add(player);
    timerCount = 1.0F;
    CountDownId = Bukkit.getScheduler().runTask(plugin, new Runnable(){
        public void run(){
            if(timerCount == 1.0F) {
                --timerCount;
            }
            else if(timerCount <= 0.0F) {
                int i = 0;
                player.sendMessage("Il est temps de te donner ton stuff");
                while( i <= players.size()) {
                    player.sendMessage("while loop");
                    plugin.giveStuff(players.get(i));
                    players.clear();
                }
                stopCountdown();
                timerCount = 5.0F;
            }
        }
    });
    player.sendMessage("world switch");
}
根据页面,您可以运行匿名BukkitRunnable,这意味着无需创建具有名称的新类。这是我从你那里编辑的代码。我无法测试它,因为我没有足够的bandwith下载打开服务器所需的文件。希望这能奏效

package net.example;

import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class MyPlugin extends JavaPlugin implements Listener {

    @Override
    public void onEnable() {
        Bukkit.getServer().getPluginManager().registerEvents(new MyListener(this),this);
    }

}
这里是听众课

package net.example;

import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.scheduler.BukkitRunnable;

public class MyListener implements Listener {

    private MyPlugin plugin; // A variable for your main method which extends JavaPlugin
    //Here we are getting instance of our plugin. We need this because BukkitRunnable have to be registered on a plugin.
    public MyListener(MyPlugin instance) {
        plugin = instance; //Saving Myplugin instance to our "plugin" variable
    }

    @EventHandler
    public void onWorldSwitch(PlayerChangedWorldEvent event) {
        Player player = event.getPlayer();
        // Create the task anonymously and schedule to run it once, after 20 ticks
        new BukkitRunnable() {
            @Override
            public void run() {
                // What you want to schedule goes here
                giveStuff(player);
            }
        }.runTaskLater(plugin, 20); //Run this task(all the commands within run() method) after 20 server ticks(1 second)
    }

    public void giveStuff(Player player) {
        ItemStack compass = new ItemStack(Material.COMPASS);
        ItemMeta compassM = compass.getItemMeta();
        compassM.setDisplayName("§5Navigation");
        compass.setItemMeta(compassM);

        player.getInventory().setItem(0, compass);
//        switch(player.getWorld().getName()) {
//            case "lobby" :
//                player.getInventory().setItem(0, compass);
//                player.sendMessage("lobby");
//                break;
//            case "pvp":
//                player.getInventory().setItem(0, compass);
//                player.sendMessage("pvp");
//                break;
//            default:
//                break;
    }
}
有些语句可能与OOP原则冲突。这样做是为了提高清晰度。 如果你需要更多帮助,请告诉我

package net.example;

import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.scheduler.BukkitRunnable;

public class MyListener implements Listener {

    private MyPlugin plugin; // A variable for your main method which extends JavaPlugin
    //Here we are getting instance of our plugin. We need this because BukkitRunnable have to be registered on a plugin.
    public MyListener(MyPlugin instance) {
        plugin = instance; //Saving Myplugin instance to our "plugin" variable
    }

    @EventHandler
    public void onWorldSwitch(PlayerChangedWorldEvent event) {
        Player player = event.getPlayer();
        // Create the task anonymously and schedule to run it once, after 20 ticks
        new BukkitRunnable() {
            @Override
            public void run() {
                // What you want to schedule goes here
                giveStuff(player);
            }
        }.runTaskLater(plugin, 20); //Run this task(all the commands within run() method) after 20 server ticks(1 second)
    }

    public void giveStuff(Player player) {
        ItemStack compass = new ItemStack(Material.COMPASS);
        ItemMeta compassM = compass.getItemMeta();
        compassM.setDisplayName("§5Navigation");
        compass.setItemMeta(compassM);

        player.getInventory().setItem(0, compass);
//        switch(player.getWorld().getName()) {
//            case "lobby" :
//                player.getInventory().setItem(0, compass);
//                player.sendMessage("lobby");
//                break;
//            case "pvp":
//                player.getInventory().setItem(0, compass);
//                player.sendMessage("pvp");
//                break;
//            default:
//                break;
    }
}