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

Custom Nachricht hinter einem Befehl

Benny1008

Kuhfänger
Registriert
14 Juni 2017
Beiträge
67
Diamanten
300
Minecraft
Benny1008
Heyho! :)

Ich habe ein ChatFilter Plugin mit einer Blacklist geschrieben.
Nun wollte ich wissen wie ich es schaffe, dass ich dieser Liste Worte hinzufügen kann mit /bladd <Wort> oder /blremove <Wort>
Könntet ihr mir da bitte helfen? :)
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Beim CommandExecutor liegt ein String[] (hier mal "args" genannt) bei.

Javascript:
if (args.length < 1) {
  sender.sendMessage("Dödel. Du musst das Wort da auch hinschreiben, wenn es gebannt werden soll...");
  return;
}

String word = args[0];

// ruf deine Methode auf die das Wort zum Filter hinzufügt...
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Weißt du wie man einen Command registriert in Bukkit?
Wenn nicht, dann ließ das bitte erst nach, damit du den folgenden Teil richtig verstehst:
http://bukkit.gamepedia.com/Plugin_Tutorial/de#Befehle.2FCommands

Sobald du dann deinen CommandExecutor registriert hast, dürfte das den Rest erledigen:
Javascript:
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    if (args.length < 1)   {
      sender.sendMessage("Dödel. Du musst das Wort da auch hinschreiben, wenn es gebannt werden soll...")
      return true;
  }

String word = args[0]; // Index 0 ist das erste Argument deines Commands, also bei "/bladd <Wort>" wäre args[0] <Wort>
bannedWords.add(word);

return true;
}

bannedWords ist in diesem Fall deine Liste mit gebannten Wörtern. Diese Liste müsstest du dir von irgendwo anders organisieren.
Bei /blremove <Wort> müsstest du bloß bannedWords.add mit bannedWords.remove ersetzen.

Hoffe ich konnte das einigermaßen verständlich darstellen.
 

Benny1008

Kuhfänger
Registriert
14 Juni 2017
Beiträge
67
Diamanten
300
Minecraft
Benny1008
Ich habe mir nochmal ein paar Gedanken gemacht und bin auf darauf gekommen keine einzelne Befehle zu machen für das ein- oder ausfügen, sondern mit weiteren Argumenten zu Arbeiten.

Dies ist mein CommandExecutor
Javascript:
blacklist Blacklist = new blacklist(this);
getCommand("blacklist").setExecutor(Blacklist);

Dann kommt

Javascript:
    public boolean onCommand(CommandSender sender, Command cmd, String cmdlabel, String[] args) {
        Player p = (Player) sender;
      
        if(args.length == 0) {
            p.sendMessage("§cBenutze die Argumente 'add' oder 'remove'!");
        } else { if(args.length == 3) {
            if(args[0].equalsIgnoreCase("add")) {
            String Word = args[1];
            addWord(Word);
            p.sendMessage("§fDu hast das Wort §c" + Word + " §fzur Blacklist hinzugefügt!");
          
          
        } else {
            if(args[0].equalsIgnoreCase("remove")) {
                String Word = args[1];
                removeWord(Word);
                p.sendMessage("§fDu hast das Wort §c" + Word + " §faus der Blacklist entfernt!");
              
            }
        }
    }

}
        return true;
}

Nun muss ich aber eine Methode für 'addWord' und 'removeWord' erstellen und genau da hab ich eine Denkblockade :D Hat dort jemand vielleicht einen nützlichen Link oder sowas? :)
 

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Ich verstehe nicht, warum du 3 Argumente haben möchtest und dann nur die ersten beiden abfragst?

Deine Wörter musst du jedenfalls in einer Datenstruktur ablegen, die auch von anderen Codestellen (z.B. Ereignisbehandlung) zugänglich wäre. Ich würde dazu eine eigene Klasse empfehlen, die du vom Plugin aus instanzierst. Einen Verweis auf diese Instanz kannst du dann entweder im Plugin oder in der Klasse selber ablegen. Diese Klasse könnte die Wörter z.B. in einer Set-Datenstruktur ablegen. Hier solltest du die Wörter dann in Kleinbuchstaben ablegen. Die Klasse könnte auch das Laden und Speichern der Wörter übernehmen. Und dort könntest du dann auch addWord(), removeWord() und z.B. testWord() implementieren.
 

Benny1008

Kuhfänger
Registriert
14 Juni 2017
Beiträge
67
Diamanten
300
Minecraft
Benny1008
Ich verstehe nicht, warum du 3 Argumente haben möchtest und dann nur die ersten beiden abfragst?
Javascript:
if(args.length == 0) {
            p.sendMessage("§cBenutze die Argumente 'add' oder 'remove'!");
Dieser Code ist nur dazu da um den Spieler darauf aufmerksam zu machen das er nicht nur '/blacklist' , sondern auch ein add oder remove schreiben soll.

Deine Wörter musst du jedenfalls in einer Datenstruktur ablegen, die auch von anderen Codestellen (z.B. Ereignisbehandlung) zugänglich wäre. Ich würde dazu eine eigene Klasse empfehlen, die du vom Plugin aus instanzierst. Einen Verweis auf diese Instanz kannst du dann entweder im Plugin oder in der Klasse selber ablegen. Diese Klasse könnte die Wörter z.B. in einer Set-Datenstruktur ablegen. Hier solltest du die Wörter dann in Kleinbuchstaben ablegen. Die Klasse könnte auch das Laden und Speichern der Wörter übernehmen. Und dort könntest du dann auch addWord(), removeWord() und z.B. testWord() implementieren.
Okay, ich werde mich mal in die Richtung Informieren :)
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
Zudem solltest du die Blacklist irgendwie abspeichern. Am einfachsten wäre es wohl, wenn du deine Wörter als Liste in einer Bukkit-Config speicherst. Dazu gibts auch genug.

Zu diesem "if(args.length == 3)": @BlackHole meint damit, dass du bei "/blacklist add BösesWort" nur eine args.length von 2 hast. Der Command "blacklist" gehört nicht zu deiner Liste von Argumenten. Du hast args[0]=add und args[1]=BösesWort. Somit eine args.length von 2 ;)
 

PrisonBreak-Server

Minecrafter
Registriert
5 Juli 2017
Beiträge
1
Alter
25
Diamanten
300
Javascript:
if(args.length == 0) {
            p.sendMessage("§cBenutze die Argumente 'add' oder 'remove'!");
Dieser Code ist nur dazu da um den Spieler darauf aufmerksam zu machen das er nicht nur '/blacklist' , sondern auch ein add oder remove schreiben soll.


Okay, ich werde mich mal in die Richtung Informieren :)

Ehm... nein ich glaube er meint das:

} else { if(args.length == 3) {

Wieso fragst du da ab ob es 3 Argumente hat also mit dem ersten 4, wenn du eh nur 1 weiteres abfragst also add/remove..

Richtig wäre also:

Code:
} else { if(args.length == 1) {

Die Wörter kannst du dann einfach in einer File abspeichern:

Code:
File mainDir = new File("plugins/deinplugin");
File blacklist = new File("plguins/deinplugin/blacklist.yml");

FileConfiguration blacklistCFG = YamlConfiguration.loadConfiguration(blacklist);

blacklistCFG.set("blacklist", DeineArraylist);

blacklistCFG.save(blacklist);
 
Zuletzt bearbeitet:

moinless

Schafhirte
Registriert
4 Oktober 2013
Beiträge
103
Diamanten
302
  • File mainDir = new File("plugins/deinplugin");
  • File blacklist = new File("plguins/deinplugin/blacklist.yml");
  • FileConfiguration blacklistCFG = YamlConfiguration.loadConfiguration(blacklist);
  • blacklistCFG.set("blacklist", DeineArraylist);
  • blacklistCFG.save(blacklist);

Wofür das File mainDir = new File("plugins/deinplugin")?

Desweiteren sollte er statt "plugins/deinplugin" folgendes verwenden: plugin.getDataFolder()+"//blacklist.yml"

Wieso fragst du da ab ob es 3 Argumente hat also mit dem ersten 4, wenn du eh nur 1 weiteres abfragst also add/remove..

Der Command selber zählt nicht als Argument. Desweiteren möchte er mehr als ein Argument abfragen (add/remove <Wort) ->
Code:
args.length == 2
.
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Nun muss ich aber eine Methode für 'addWord' und 'removeWord' erstellen und genau da hab ich eine Denkblockade :D Hat dort jemand vielleicht einen nützlichen Link oder sowas? :)

Ausm Kopf gekrakelt, könnte also nicht exakt stimmen:

Code:
public void remove(Plugin plugin, String word) {
  plugin.getConfig().getStringList("blacklist").remove(word);
  plugin.saveConfig();
}

public void add(Plugin plugin, String word) {
  plugin.getConfig().getStringList("blacklist").add(word);
  plugin.saveConfig();
}

Das wäre meiner Meinung nach das aller aller Einfachste was du tun kannst.
Extra Datei etc. ginge auch, ist aber wieder mehr Arbeit. Musst du wissen wie viel du dafür aufwenden willst.
 
Oben