• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Bukkit Scheduler nur für einen Spieler ausführen und nicht für den gesamten Server?

Minecraft Version
Java

otteo

Minecrafter
Registriert
13 Juli 2020
Beiträge
2
Diamanten
200
Hallo,
Ich arbeite seit kurzem an einem Home System und komme bei dem Countdown nicht weiter. Wenn ein Spieler den Befehl /home <Name> eingibt, soll ein Countdown von 5 Sekunden kommen. Dieser wird aber nicht nur auf den einzelnen Spieler angewendet sondern auf den gesamten Server. Das führt zu Bugs wenn mehrere Spieler gleichzeitig den Befehl ausführen. Wie mache ich das das der Scheduler nur für den einzelnen Spieler ausgeführt wird.

~ otteo
 

otteo

Minecrafter
Registriert
13 Juli 2020
Beiträge
2
Diamanten
200
Der Code ist dieser hier:
Home Command:
package de.otteo.ultihome.commands;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;

import de.otteo.ultihome.main.Main;

public class HomeCommand implements CommandExecutor {
   
    private int seconds = Main.cfg.getInt("countdownseconds");



    @Override
    public boolean onCommand(CommandSender s, Command cmd, String l, String[] args) {
        String prefix = ChatColor.translateAlternateColorCodes('&', Main.cfg.getString("prefix"));
        String homenotexist = ChatColor.translateAlternateColorCodes('&', Main.cfg.getString("homenotexist"));
        String noperms = ChatColor.translateAlternateColorCodes('&', Main.cfg.getString("noperms"));
        String invalidargsdelhome = ChatColor.translateAlternateColorCodes('&', Main.cfg.getString("invalidargshome"));
        String hometeleport = ChatColor.translateAlternateColorCodes('&', Main.cfg.getString("hometeleport"));




        Player p = (Player) s;

        if(s instanceof Player) {
            if(p.hasPermission("ultimatehome.delhome")) {
                if(args.length == 1) {
                     if(!Main.homecfg.isSet(p.getName() + "." + args[0])) {
                         homenotexist = homenotexist.replace("%prefix%", prefix);
                         homenotexist = homenotexist.replace("%homename%", args[0]);
                         p.sendMessage(homenotexist);
                         return true;
                     } else {
                         double X = Main.homecfg.getDouble(p.getName() + "." + args[0] + ".X");
                         double Y = Main.homecfg.getDouble(p.getName() + "." + args[0] + ".Y");
                         double Z = Main.homecfg.getDouble(p.getName() + "." + args[0] + ".Z");
                         float Yaw = (float) Main.homecfg.getDouble(p.getName() + "." + args[0] + ".Yaw");
                         float Pitch = (float) Main.homecfg.getDouble(p.getName() + "." + args[0] + ".Pitch");
                         World world = Bukkit.getWorld(Main.homecfg.getString(p.getName() + "." + args[0] + ".World"));
                         Location home = new Location(world, X, Y, Z, Yaw, Pitch);
                         hometeleport = hometeleport.replace("%prefix%", prefix);
                         hometeleport = hometeleport.replace("%homename%", args[0]);
                         p.sendMessage(hometeleport);
                         if(Main.cfg.getBoolean("countdown") == true) {
                             Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getPlugin(), new Runnable() {
                               
                                @Override
                                public void run() {
                                    if(seconds == Main.cfg.getInt("countdownseconds")) {
                                        p.sendMessage("&eTeleportation in " + Main.cfg.getInt("countdownseconds") + " Sekunden.");
                                    }
                                    if(seconds == 0) {
                                        seconds = Main.cfg.getInt("countdownseconds");
                                        p.teleport(home);
                                    }
                                   
                                }
                            }, 0, 20);
                         } else {
                             p.teleport(home);
                         }

                     }
                } else {
                    invalidargsdelhome = invalidargsdelhome.replace("%prefix%", prefix);
                    p.sendMessage(invalidargsdelhome);
                }
            } else {
                noperms = noperms.replace("%prefix%", prefix);
                p.sendMessage(noperms);
            }
        }
        return false;
    }

}

Der Scheduler soll nur für den Spieler ausgeführt werden, der den Befehl auch ausführt. Sonst gibt es Bugs wenn mehrere Spieler gleichzeitig den Befehl ausführen.

~ otteo
 
Zuletzt bearbeitet:
Oben