Java Plugin Minecraft Command beginnt ohne "/"?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hallo,

das ist sogar recht einfach. Wenn du schon mal was von Listeners gehört hast, macht das die Sache noch leichter.

Zuerst brauchst du in deinem Plugin eine Klasse, die das Interface Listener implementiert.

public class Sample implements Listener { }

Hier erstellst du nun eine Methode, die für dich überprüft, ob der Spieler "#[...]" in den Chat eingibt. Diese sollte ungefähr so aussehen:

@EventHandler // diese Annotation brauchst du für eine Listener-Methode
public void onChatCommand(PlayerChatEvent e) { }

Wie du sie nennst, ist nicht so wichtig, aber nach den Conventions nennt man diese Methoden "on[Event]". Als Parameter übergibst du das entsprechende Event, auf das gewartet werden soll. In diesem Falle ein PlayerChatEvent e.

Nun willst du als erstes ja überhaupt überprüfen, ob der Spieler ein "#" vor seine Nachricht gesetzt hat. Ansonsten muss ja gar nichts überprüft werden. Dafür speicherst du das, was er eingegeben hat als String in einer lokalen Variable.

String msg = e.getMessage();

Nun kannst du mit einem if-Statement überprüfen, ob das Eingegebene mit "#" startet. Dafür gibt es praktischerweise eine Methode, die jeder String hat:

if (msg.startsWith("#")) { }

Diese Methode ist ein boolean, der true oder false zurückgibt, je nachdem, ob der String mit dem angegebenen Teilstring "#" beginnt oder nicht.
Jetzt kannst du dich um die Commands kümmern. Dafür machst du ein switch-Statement, das den Teil hinter "#" überprüft.

switch (msg.substring(1).toLowerCase()) { }

msg.substring(1) gibt nur den Teil hinter dem "#" zurück, dafür ist 1 der Index. toLowerCase() wandelt alle Buchstaben in Kleinbuchstaben um. So lässt er sich leichter überprüfen, sonst müsste man alle Kombinationen aus Groß- und Kleinschreibung durchgehen.

switch (msg.substring(1).toLowerCase()) { 
        case "bla": // tu etwas
        case "bli": // tu etwas
        // und so weiter...
        default: return;
}

In die verschiedenen Fälle schreibst du dann einfach, was bei welchem Command passieren soll. Das überlasse ich dir.

Und was soll dieses default? Das ist da, falls jemand zwar einen "#" vor seine Nachricht setzt, allerdings keinen Command anspricht. Wenn also jemand "#yolo" eingibt, und es keinen Command/case "yolo" gibt. In diesem Falle soll die Methode abgebrochen werden, weil es dann ja sowieso unwichtig ist. Das passiert mit return.

Damit die Commands dann auch noch verheimlicht werden und sie nicht im Chat zu sehen sind, schreibst du nach dem switch einfach noch folgende Zeile:

e.setCancelled(true);

Dadurch werden die eigentlichen Dinge, die nach einer Chatnachricht passieren, nicht mehr ausgeführt.

Theoretisch kannst du davor noch eine Nachricht an den Spieler senden.

e.getPlayer().sendMessage("§aDein Command wurde ausgeführt");

Das ist aber rein optional.

Damit das Ganze auch akzeptiert wird, musst du in deiner Main-Klasse in der onEnable-Methode noch folgendes schreiben:

// Anstelle von Sample deine Listener-Klasse reinschreiben
Bukkit.getPluginManager().registerEvents(Sample, this); 

Damit wird der Listener erst "aktiviert".

Viel Spaß beim Herumexperimentieren! Falls du allgemeine Fragen hast, schreib hier einfach. Sehr spezifische Fragen zu der Bukkit/Spigot Library kann ich dir nicht beantworten, so sehr beschäftige ich mich damit nicht.

LG

Das geht ja.
Im Chatevent kannst du n Check machen womit alles anfängt. Ist aber einfach nur dumm

Warum? Es geht um ein Troll plugin.

0

Das ist wieder was anderes. Ja, dann wäre es sogar gut. Du cancelst dann das Event und in der Konsole ist es nicht sichtbar.

0

Nein, da du nur mit "/" in die onCommand-Methode kommst.

Ja ok also geht das nur bei Client coding?

0

Wer sagt, dass man die onCommand-Methode braucht? Eine Reihe von Befehlen lässt sich auch woanders ausführen. Das ist dann zwar kein Command mehr im Minecraft-Sinne, aber es läuft auf das Gleiche hinaus.

0

Minecraft Vote Befehl mit Befehl ausführen?

Hey, ich habe einen Minecraft Bau/Farming Server und wollte mal wissen ob es ein Plugin gibt wo man /vote macht und dann über die Console ein Befehl ausgeführt wird der einem Spieler Geld gibt

zB: Ein spieler macht /vote

Message: 200$ wurde zu deinem Kontostand hinzugefügt!

Wisst ihr welches Plugin das ist?

...zur Frage

Spigot Plugin / Entfernen?

Hey ich bin recht neu in java und Spigot Plugin Programmieren. Ich wollte mal Fragen wie ich das / bei einem Befehl entfernen kann damit ich ein Troll Plugin coden kann :D z.b. #Rechte

...zur Frage

Red Dead Redemption 2 Startet nicht mehr?

Ich habe mir RDR 2 für die PS4 am Freitag gekauft und bis her lief alles einwandfrei. Doch heute habe ich versucht das spiel zu starten und plötzlich komme ich in einen unendlichen Ladescreen, ich habe es viermal versucht und jedesmal mindestens eine Halbe stunde gewartet... Eine neu installation hat auch nicht funktuniert.. Ich kann mir einfach nicht erklären was los ist und was ich machen soll...

...zur Frage

Minecraft Plugin Coden Godmode?

Tag, wie oben steht wollte ich wissen wie man einen Spieler in den unbesiegbarkeitsmodus setzen kann mit einem befehl z.B. /Leben

...zur Frage

Wie kann ich in einem Minecraft/java Plugin eine Werkbank öffnen?

Also wenn ein Spieler einen Befehl ausführt, dass sich ganz einfach das Werkbank Inventar bei ihm öffnet

...zur Frage

Minecraft Daily Belohnung Plugin?

Ich suche schon seit 3 Stunden ein ganz einfaches Plugin für Spigot (1.12.2) das einfach nur jedem Spieler der ich sage mal /Geschenk eingibt, dann einen Command ausführt, den man in der config.yml einstellen kann. Habt ihr selbst so ein Plugin programmiert oder wisst ihr ob es das bei SpigotMC gibt?

...zur Frage

Was möchtest Du wissen?