Wie kann man einen Reset Command Programmieren (Minecraft Spigot Plugin)?
Hallo, liebe Community!
Ich möchte für meinen spigot Server einen Command programmieren(zb. /reset), der alle Welten (Normal, Nether, End) resettet. Da ich noch nicht so lange code fällt es mir schwer solch einen command zu coden. Der Command sollte sozusagen den Server stoppen, die Welten-Ordner löschen und dann den Server wieder neu ausführen(mit der Start.bat Datei), damit so auch eine komplett neue Welt mit einem neuen Seed generiert wird. Ich möchte auf dem Server Challenges spielen oder Speedruns machen und wenn man jedes mal den Server stoppen und die Welten per Hand löschen muss, geht es nach ner Zeit tierisch auf die nerven.
Ich code mit Eclipse und ich hoffe dass mir hier irgendjemand helfen kann ;)
MfG Martin
3 Antworten
Moin,ich programmiere auch noch nicht so lange, aber du könntest entweder gucken ob es eine Mutliverse-API gibt (falls du MV nutzt) oder sonst löscht du einfach die Welten und erstellst neue indem du den Command über die Konsole dispatcht.
Stoppen kannst du deinen Server so:
Bukkit.getServer().shutdown();
Und um die Welten zu resetten kannst du das machen:
Bukkit.dispatchCommand((CommandSender)Bukkit.getConsoleSender(), "mv delete world");
Dann muss eine Sekunde gewartet werden, dies kann mit einem Scheduler gemacht werden und dann muss folgendes ausgeführt werden:
Bukkit.dispatchCommand((CommandSender)Bukkit.getConsoleSender(), "mv confirm");
So sollte es funktionieren, falls nicht kannst du einfach antworten :).
Nach dem der Server gestoppt wurde kannst du ihn aber meines Wissens nach nicht neustarten, da das Plugin dann ja deaktiviert ist.
mfg
Hatte heute Mittag nun folgendes programmiert:
package de.m4trixxlp.m4utils.commands;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class ResetCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if(sender instanceof Player) {
Player player = (Player) sender;
if(player.hasPermission("m4utils.reset")) {
if(args.length == 0) {
player.sendMessage("§cDer server wird resettet.");
Bukkit.getServer().shutdown();
}
} else
player.sendMessage("§cDazu hast du keine Rechte!");
} return false;
}
}
Der Server wird gestoppt, alles funzt. Was kann ich nun dazu programmieren, damit die Welten-Ordner gelöscht werden und die start.bat Datei autromatisch ausgefrührt wird?
Hey,
Ja, die Methode ist nur mit MV kompatibel. Wenn du deine Welten mit einem anderen Plugin verwaltest musst du beim dispatchen einfach den Befehl des jeweiligen Plugins einfügen.
Nach dem der Server gestoppt wurde kannst du ihn aber meines Wissens nach nicht neustarten, da das Plugin dann ja deaktiviert ist.
Du könntest allerdings auch noch eine Welt via dispatch erstellen, und den Spieler dann dorthin teleportieren. Zwischen dem erstellen und teleportieren müsste dann allerdings ein Cooldown liegen da sich die Welt ja erst generieren muss.
lg
Hi!
Habe jetzt doch MV drauf gemacht und mal dafür den command mit scheduler gecoded, jedoch wenn ich im spiel /reset ausführe, wird nur vom plugin das /mv delete (weltname) ausgegeben aber jedoch nicht nach dem scheduler das /mvconfirm. Habe ich etwas mit dem scheduler falsch gemacht? D: Hoffe du kannst mir helfen.
Hier mein code: https://www.bilder-upload.eu/bild-c9619f-1587559202.png.html
Hey,
du musst noch hinzufügen das der int jede Sekunde um 1 heruntergesetzt wird.
Jetzt wird dieser int als 1 definiert, kann also garnicht auf 0 kommen.
lg
Habe den fehler gefunden, musste countdown- - eingeben nach dem scheduler und nun funktioniert es. Vielen dank!
lg
Hay,
habe jetzt versucht alles in einem Zug in den scheduler zu packen aber es scheint nicht richtig zu funktionieren, weil nur der teleport zur Lobby stattfindet. Danach wird in der konsole immer sekundenweise diese Meldung ausgeführt:
[13:54:50] [Server thread/INFO]: This command has already been run! Please type the original command again if you want to rerun it.
Könntest du mir evtl sagen was ich wieder falsch gemacht hab?
Hier mein neuer code: https://www.bilder-upload.eu/bild-a782e0-1587642672.png.html
lg
Hey,
ich verstehe nicht weshalb du bei 8 mvconfirm ausführst? Das benötigst du nicht wenn du einen Spieler teleportierst.
Es funktioniert nicht ohne da mv den tp nicht akzeptiert ohne confirm da im chat auch steht "no safe location found"
Hey. Auch wenn der Beitrag schon alt ist, hier für alle die noch vorbeischauen: ihr könnt mit Bukkit.createWorld(new WorldCreator(values...) ). Welten erstellen.
Ist die Fragenoch aktuell? Dann könnte ich wahrscheinlich weiterhelfen...
Ja die Frage ist noch aktuell ;D Wie könntest du mir denn weiterhelfen?
Vielen Dank für die schnelle Antwort! Hatte leider in den letzten Tagen nicht viel Zeit weswegen ich erst gleich weiter programmieren werde. Sind die zwei unteren Befehle nur mit MV-Core kompatibel oder würde das auch so klappen?
MfG