• 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!

Spigot Wartezeit einfügen

LuxLP_

Minecrafter
Registriert
7 Oktober 2016
Beiträge
5
Diamanten
301
Minecraft
LuxLP_
Nabend alle zusammen,

Ich code momentan ein Plugin wo ich zwischen zwei Codezeilen eine Wartezeit benötige (siehe Beispiel). Hab bereits im Internet nachgesucht und hab alles versucht, jedoch geht das eine nicht oder während der bestimmten Zeit kann man keine anderen Befehle eingeben. Da ich in der Wartezeit jedoch ein Befehl eingeben muss, weiß ich nicht wie weiter machen.

p.sendMessage(“Wähle /ja oder /nein“);
// Hier sollen 10sek Wartezeit sein
p.sendMessage(“Du hast nichts ausgewählt!“);

Bei mir im Plugin geht es um einen Abstimmung. Das heißt eine Abstimmung wird erstellt und das Resultat wird nach 10sek angezeigt. Jedoch soll man in der Zwischenzeit einen Befehl ausführen können.
Ich bedanke mich bereits im Voraus für jegliche Antworten&Hilfe.

Mfg
-Lux
 
D

deleted196100

Guest
Ich bin so frei und zitiere hier mal meine Antwort auf eine Private Nachricht zu diesem Thread falls andere das selbe Problem haben.
Hi,

Zum Verständnis eine kurze Erklärung;
Aller Code wird standardmäßig vom Main Thread des Servers ausgeführt. Die einzige Möglichkeit eine Verzögerung zu erzeugen wäre den Thread für eine bestimmte Zeit zu blocken, was beim Main thread allerdings dazu führen würde, dass der gesamte Server in dieser Zeit anhält und die Spieler vom Server fliegen. Um zu verhindern, dass der Main Thread blockiert wird musst du die Zweite Nachricht in einem extra Task senden welche du mit dem Scheduler erstellen kannst.

Hier wird zwischen Asynchronen und Synchronen Tasks unterschieden. Asynchrone Tasks werden in einem eigenen Thread ausgeführt und belasten somit nicht den Main Thread, Synchrone Tasks werden vom Main Thread ausgeführt, allerdings ohne diesen während der Wartezeit zu blocken.

Da der Mainthread oft das "Bottleneck" des Servers darstellt empfiehlt es sich Arbeit wie z.b. Datenbankabfragen wenn möglich auf Asynchrone Tasks auszulagern wenn dies möglich ist. (Einige Aufgaben können allerdings nur vom Mainthread ausgeführt werden, Laut Spigot Dokumentation sind das alle nicht Threadsicheren Anfragen an die Spigot API).

(https://hub.spigotmc.org/javadocs/s...bukkit.plugin.Plugin-java.lang.Runnable-long-)

Wie in der Dokumentation beschrieben brauchst du für den Code den du ausführen möchtest eine Runnable Objekt. Bei diesem musst du die run Methode mit dem Code den du ausführen willst überschreiben.

Java:
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitScheduler;

public final class ExamplePlugin extends JavaPlugin {
    public void onEnable() {
        BukkitScheduler scheduler = getServer().getScheduler();
        scheduler.runTaskLaterAsynchronously(this, new Runnable() {
            @Override
            public void run() {
                // Dein Code
            }
        }, 20L); // <- Delay in Gameticks (1 Sekunde = 20 Gameticks)
    }
}

Ich hoffe ich konnte helfen. Schau dir am besten die Javadocs von Spigot an, da steht eigentlich alles.
 
Oben