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

RandomTickspeed über Konsole

SpielKlug

Minecrafter
Registriert
31 Juli 2018
Beiträge
4
Diamanten
300
Hallo, ich habe ein Plugin erstellt, welches bei einem Command den Befehl "gamerule Randomtickspeed 500" ausführen soll, soweit klappt auch alles. Aber wenn ich im Spiel /gamerule randomtickspeed eingebe, kommt nur 3, in der Konsole aber 500. Wenn ich es manuell durch die Konsole ändere, ändert es sich nur in der Konsole, nicht im Spiel.Im Chat kriege ich eine Nachricht "Game rule has been updated" sowohl im Spiel und Konsole

Diese Zeile nutze ich in Java dafür:

"Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "gamerule randomTickSpeed 500");"

Weiß einer Rat?

Danke im Vorraus
SpielKlug
 

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
488
Minecraft
SirYwell
Wenn ich das richtig verstehe, wird im Spiel eine andere Geschwindigkeit angezeigt als in der Konsole?

Hast du irgendein Multiworld-Setup? Ich könnte mir vorstellen, dass der Tickspeed pro Welt konfiguriert werden kann, was dann bei Eingabe in der Konsole passiert, weiß ich aber nicht.
 

Scrayos

Vorarbeiter
Registriert
11 Februar 2012
Beiträge
296
Alter
29
Diamanten
338
Minecraft
Scrayos
Zunächst einmal: Es freut mich, dass du eine Lösung für dein Problem gefunden hast und auch so nett warst, diese Lösung für andere, die ggf. ein ähnliches Problem haben, offen zu legen! Dennoch hätte ich da noch eine Frage und ggf. einen Verbesserungsvorschlag.

Hat es einen speziellen Grund, dass du den Tick-Speed über den Befehl verändern möchtest? Ich würde dir ansonsten den typsicheren, performanteren Weg über das Welt-Objekt empfehlen. Befehle in einem Plugin auszuführen sollte immer eher die Ultima Ratio, also eine letzte Möglichkeit sein um eine Funktionalität zu realisieren. APIs sind da definitiv der sauberere und verlässlichere Weg. Die Syntax von Befehlen ändert sich ja auch gerne mal, oder die Plugins werden beispielsweise ausgetauscht.

Du kannst die Gamerules alle über World#setGameRule(Gamerule, T) modifizieren. Seit Version 1.13 oder 1.14 geht dies sogar mit Generics und der Gamerule-Klasse. Damit kannst du sicherstellen, dass es sich um einen wirklichen Verweis handelt, und du dich nicht vertippt hast oder dergleichen. Schneller ist es natürlich sowieso. Für deinen konkreten Fall würde es also ein einfaches:
Java:
worldToChange.setGameRule(GameRule.RANDOM_TICK_SPEED, value);

tun, wobei worldToChange dem Namen der Variable der Welt, für die du es setzen möchtest, und value dem Namen der Variable mit dem numerischen Wert, auf den der Random-Tick-Speed gesetzt werden soll, entspricht.

Solltest du zudem noch nicht wissen wie du das Welten-Objekt zu einem Namen bekommst (vorausgesetzt, diese Welt ist bereits geladen, was sie durch die Nutzung von Multiverse recht sicher ist), so kannst du einfach Server#getWorld(String) mit dem entsprechenden, exakten Namen verwenden. Du kannst selbstverständlich auch bei deiner aktuellen Lösung bleiben (und ich finde es übrigens gut, dass du dir da schon selbst zu helfen wusstest), aber ich kann dir nur nahelegen ggf. einmal über diese sauberere Lösung nachzudenken. Bei weiteren Fragen hierzu, stehe ich dir gerne zur Verfügung.
 

BloodEko

Schafhirte
Showcase Teilnehmer
Registriert
9 September 2012
Beiträge
144
Diamanten
36
@SpielKlug
Ein kleiner Hinweis. Es kann sein, dass dein Plugin vor Multiverse läd.
Code in deiner onEnable() hätte dann noch keinen Zugriff auf ungeladene Welten.

Du kannst in der plugin.yml eine softdepend festlegen, damit dein Plugin später läd.
Oder via scheduler verzögern, dann ist es pluginunabhängig.
 
Zuletzt bearbeitet:
Oben