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

Spigot [Gelöst] Befehle wie /pl Nachricht ändern

D

deleted209242

Guest
Sehr geehrte Foren User,

ich wollte in meinem Plugin die Befehle wie /plugins /pl usw. sperren bzw. eher die Nachricht davon ändern.
So in etwa sieht mein jetztiger Code aus:
java:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
        Player p = (Player)sender;
        
        if(cmd.getName().equalsIgnoreCase("pl")){
            sender.sendMessage("§e--------- §fPlugins: Calderya §e------------------------");
            sender.sendMessage("§7Below is a list of all Plugins:");
            if (p.isOp()) {
                sender.sendMessage("§6Plugins: §2" + ???);
            } else {
                sender.sendMessage("§6Plugins: §fby Sullaysur!");
            }
            
            return true;
        }
        return false;
    }

Bei "sender.sendMessage("§6Plugins: §2" + ???);" soll bei den "???" dann die Auflistung der Plugins kommen, wie bekomme ich die da rein?
 

PSandro

Kuhfänger
Registriert
7 November 2016
Beiträge
51
Diamanten
302
die Befehle wie /plugins /pl usw. sperren

Du kannst das auf mehrere Arten erreichen:
1. Du entziehst den normalen Spielern die Permission bukkit.command.plugins
2. Du nutzt das PlayerCommandPreprocessEvent um jegliche Befehle "vor der Verarbeitung" (preprocess) bei fehlender Berechtigung abzufangen und sie nicht zu den Command Handlern durchzulassen. Eine Implementation könnte z.B. so aussehen:
java:
@EventHandler
public void onPlayerCommand(PlayerCommandPreprocessEvent event) {
    if (event.getMessage().startsWith("/pl")) {
        final Player player = event.getPlayer();
        event.setCancelled(!player.isOp());
    }
}
(Nachteil an dieser Implementation: Alle Commands die mit /pl beginnen werden ohne OP geblockt, aber als Beispiel reicht es glaube ich.)

[Edit]
3. Du nimmst deinen jetzigen Ansatz und generierst dir eine Nachricht zum Ausgeben der Plugin Namen. Diese Möglichkeit gefällt mir persönlich nicht so gut, aber sie kommt deiner Fragestellung am nächsten.
java:
private String getPluginList() {
        StringBuilder pluginList = new StringBuilder();
        Plugin[] plugins = Bukkit.getPluginManager().getPlugins();

        for (Plugin plugin : plugins) {
            if (pluginList.length() > 0) {
                pluginList.append(ChatColor.WHITE);
                pluginList.append(", ");
            }

            pluginList.append(plugin.isEnabled() ? ChatColor.GREEN : ChatColor.RED);
            pluginList.append(plugin.getDescription().getName());
        }

        return "(" + plugins.length + "): " + pluginList.toString();
}

Quelle: https://github.com/Bukkit/Bukkit/blob/f210234e59275330f83b994e199c76f6abd41ee7/src/main/java/org/bukkit/command/defaults/PluginsCommand.java
 
Zuletzt bearbeitet:
D

deleted209242

Guest
Du kannst das auf mehrere Arten erreichen:
1. Du entziehst den normalen Spielern die Permission bukkit.command.plugins
2. Du nutzt das PlayerCommandPreprocessEvent um jegliche Befehle "vor der Verarbeitung" (preprocess) bei fehlender Berechtigung abzufangen und sie nicht zu den Command Handlern durchzulassen. Eine Implementation könnte z.B. so aussehen:
java:
@EventHandler
public void onPlayerCommand(PlayerCommandPreprocessEvent event) {
    if (event.getMessage().startsWith("/pl")) {
        final Player player = event.getPlayer();
        event.setCancelled(!player.isOp());
    }
}
(Nachteil an dieser Implementation: Alle Commands die mit /pl beginnen werden ohne OP geblockt, aber als Beispiel reicht es glaube ich.)
Das ist ja gut und schön, das ganze Zeug weiß ich auch, ist aber nicht sinn der Übung.
Es geht darum wie ich die Command ausgabe ändere als statt "Plugins: Worldedit" dann "Plugins: HAHAHA Hier geht das nicht!"
Und dann würde ich gerne wissen, wie ich die Pluginauflistung als String in eine Ausgabe bekomme (also die oben angesprochenenen ??? zu ersetzen).
 

PSandro

Kuhfänger
Registriert
7 November 2016
Beiträge
51
Diamanten
302
Es geht darum wie ich die Command ausgabe ändere als statt "Plugins: Worldedit" dann "Plugins: HAHAHA Hier geht das nicht!"
Und dann würde ich gerne wissen, wie ich die Pluginauflistung als String in eine Ausgabe bekomme (also die oben angesprochenenen ??? zu ersetzen).
Das müsste sich dann mit dem Edit meines Beitrags ergeben haben (Siehe 3.).

Offtopic: Ich verstehe deine grundsätzliche Intention, die Command Ausgabe zu "Plugins: HAHAHA Hier geht das nicht!" nicht: Warum sollte man die Auflistung der Plugins manipulieren wollen? Zum Schutz der Integrität oder vor Kompromittierung? Wohl kaum. Das bisschen Anerkennung sollte man den Entwicklern doch lassen. [Hier] geht es zu der Diskussion um dieses Thema.
 
D

deleted209242

Guest
Das müsste sich dann mit dem Edit meines Beitrags ergeben haben (Siehe 3.).

Offtopic: Ich verstehe deine grundsätzliche Intention, die Command Ausgabe zu "Plugins: HAHAHA Hier geht das nicht!" nicht: Warum sollte man die Auflistung der Plugins manipulieren wollen? Zum Schutz der Integrität oder vor Kompromittierung? Wohl kaum. Das bisschen Anerkennung sollte man den Entwicklern doch lassen. [Hier] geht es zu der Diskussion um dieses Thema.

Das mit dem "Plugins: HAHAHA Hier geht das nicht" sollte nur verdeutlichen worauf ich hinaus will, klar ist es den Entwiklern gegönnt, dass man zeigt dass man ihre Plugin nutzt, da es aber ein Privater Server ist und dort nur Selbstprogrammierte Plugins drauf landen, ist das egal, da leidet keiner drunter, da ich ja auch nur meine dann ausblende.

Zudem Danke für die Lösung, hat funktioniert.
 
Zuletzt bearbeitet von einem Moderator:
Oben