• 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 [Help:] Check for joined Player if he is banned

D

deleted191575

Guest
Hallo Liebe Community,
Ich habe heute mal wieder ein kleineres Problem mit gebracht wo ich den Fehler zwar weiß aber nicht weiß wie ich ihn beheben kann, der Fehler besteht daraus dass ich nicht weiß wie ich einen boolean aus meiner Config für den gejointen Spieler abfrage. Hierbei handelt es sich um den "boolean banned", ich freue mich jetzt schon auf eure Unterstützung bei behebng meines Problems.

Dies ist der Code für den JoinListener;

Code:
package net.brutalverzockt.citybuild_system.listener;

import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import net.brutalverzockt.citybuild_system.main.Main;
import net.brutalverzockt.citybuild_system.main.Utils;

public class PlayerJoinListener implements Listener {
   
    @EventHandler(priority = EventPriority.HIGH)
    public void onJoin(PlayerJoinEvent e) {
        Player p = e.getPlayer();
       
        FileConfiguration cfg = Main.getPlugin().getConfig();
       
        if(cfg.contains("Ban.Players.Player" + p.getDisplayName())) {
            if(cfg.getBoolean("Ban.Players.Player" + p.getDisplayName() + "banned", true)) {
                p.kickPlayer(Main.getPlugin().getConfig().getString("Ban.Reason"));
            }
        }
       
        for(Player players : Bukkit.getOnlinePlayers()) {
            if(p.hasPermission("system.team")) {
               
                players.sendMessage(Utils.prefix + "Der Spieler §6" + p.getDisplayName() + " §7ist jetzt §aonline");
                e.setJoinMessage("");
               
            } else
                e.setJoinMessage("");
        }
    }
}

Hier als nächstes folgt nun der Bann Command

Code:
package net.brutalverzockt.citybuild_system.cmds;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;

import net.brutalverzockt.citybuild_system.main.Main;
import net.brutalverzockt.citybuild_system.main.Utils;

public class Ban_cmd implements CommandExecutor {

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if(sender instanceof Player) {
            Player p = (Player) sender;
            if(p.hasPermission("system.ban")) {
                if(args.length >= 1) {
                   
                    Player target = Bukkit.getPlayer(args[0]);
                    if(target != null) {
                        if(target != p) {
                           
                            boolean banned = true;
                           
                            String reason = "";
                            for(int i = 1 ; i < args.length ; i++) {
                            reason += (args[i]);

                            target.kickPlayer(Utils.prefix + "Du wrdest von §6" + p.getDisplayName() + " §7auf §6City§ebuild §7wegen§8: §7' §f" + reason + " §7' §cgebannt");
                           
                            FileConfiguration cfg = Main.plugin.getConfig();
                           
                            cfg.set("Ban.Players.Player", target.getDisplayName().toString());
                            cfg.set("Ban.Players.Reason", reason);
                            cfg.set("Ban.Players.banned", banned);
                            cfg.set("Ban.Players.Who", p.getDisplayName().toString());
                            Main.getPlugin().saveConfig();
                            }
                            p.sendMessage(Utils.prefix + "Du hast den Spieler §6" + target.getDisplayName() + " §aerfolgreich §7gebannt");
                        } else
                            p.sendMessage(Utils.prefix + "Du kannst dich §4§n§lnicht§r §7selbst bannen");
                    } else
                        p.sendMessage(Utils.notfound);
                } else
                    p.sendMessage(Utils.usage + "/ban §8<§6Spieler§8>");
            } else
                p.sendMessage(Utils.noperm);
        } else
            sender.sendMessage(Utils.noplayer);
        return false;
    }

}

Hier noch einmal der Problem Code:

Code:
if(cfg.getBoolean("Ban.Players.Player" + p.getDisplayName() + "banned", true)) {
 
D

deleted202832

Guest
Wenn du nach diesem Pfad abfragst "Ban.Players.Player" + p.getDisplayName() + "banned" musst du den Pfad so setzen:
Code:
 cfg.set("Ban.Players." + playername + ".banned", boolean);

zudem hast du noch einen '.' vergessen und zwar musst du deine Abfrage umändern zu:
Code:
if(cfg.getBoolean("Ban.Players.Player." + p.getDisplayName() + ".banned") == true) {

so wie du deine Werte setzt hat jeder gebannte Spieler die selben Werte

Abgesehen davon würde ich dir raten alles über MySQL zu machen

//EDIT
Solltest du alles über Config weiterhin machen musst du alle Werte anders setzen und abfragen^^

Das Problem was du aktuell haben wirst ist das du immer wieder alte Werte überschreibst

Lösung:
Code:
cfg.set("Ban.Players." + target.getName() + ".Reason", reason);
cfg.set("Ban.Players." + target.getName() + ".Banned", banned);
cfg.set("Ban.Players." + target.getName() + ".Who", p.getName());
 
Zuletzt bearbeitet von einem Moderator:
D

deleted191575

Guest
Danke für deine Hilfe aber nun gibt es ein neues kleines Problem wenn ich das Result nun als Kick-Grund setzen möchte kann der jenige Spieler wieder auf den Server uneingeschränkt, wie lade ich nun aus der Cfg die "Ban-Reason" ? Ich habe es versuch indem dass ich:
Code:
cfg.get("Ban.Players." + p.getDisplayName() + ".Reason"));
als (Result) gecastet habe kann mir jemand bitte weiterhelfen :) ?
 
D

deleted202832

Guest
Kannst du mir mal den Code vom Listener schicken und den Bereich wo du die Werte alle setzt beim bannen?
// Schon Listener registriert oder kommt eine Fehlermeldung?
Und nebenbei möchte ich nur anmerken das bei dir alle 30 Tage die Spieler entbannt sind wenn diese den Namen ändern sollten.
Um dies zu umgehen müsstest du statt den Spielernamen die UUID als String speichern und abfragen
 
D

deleted191575

Guest
Das soll auh mein System sein, die Spieler sollten später spätestens nach 30 Tagen entbannt sein, falls sie sich umbennnen allerdings muss ich natürlich auch noch mit nem UUID Fetcher arbeiten aber dass habe ich noch nie getan ich bin ein echter Anfänger was Java angeht. :D Im anhang sit nun der Listener.

Code:
@EventHandler(priority = EventPriority.HIGHEST)
    public void onLogin(PlayerLoginEvent e) {
        Player p = e.getPlayer();
            e.setKickMessage("");
        FileConfiguration cfg = Main.getPlugin().getConfig();
       
        if(cfg.getBoolean("Ban.Players." + p.getName() + ".Banned") == true) {
            e.setResult((Result) cfg.get("Ban.Players." + p.getDisplayName() + ".Reason")); //Wen ich das hier so mache kann der Spieler trotzdem drauf aber sollte ich null reinschreiben so wird er gekickt wie er es auch eigentlich sollte
        }
    }

Und hier nun der Command der die ganzen Werte setzt:

Code:
package net.brutalverzockt.citybuild_system.cmds;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;

import net.brutalverzockt.citybuild_system.main.Main;
import net.brutalverzockt.citybuild_system.main.Utils;

public class Ban_cmd implements CommandExecutor {

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if(sender instanceof Player) {
            Player p = (Player) sender;
            if(p.hasPermission("system.ban")) {
                if(args.length >= 1) {
                   
                    Player target = Bukkit.getPlayer(args[0]);
                    if(target != null) {
                        if(target != p) {
                           
                            boolean banned = true;
                           
                            String reason = "";
                            for(int i = 1 ; i < args.length ; i++) {
                            reason += (args[i]);

                            target.kickPlayer(Utils.prefix + "Du wurdest von §6" + p.getDisplayName() + " §7auf §6City§ebuild §7wegen§8: §7' §f" + reason + " §7' §cgebannt");
                           
                            FileConfiguration cfg = Main.plugin.getConfig();
                           
                            cfg.set("Ban.Players." + target.getName() + ".Reason", reason);
                            cfg.set("Ban.Players." + target.getName() + ".Banned", banned);
                            cfg.set("Ban.Players." + target.getName() + ".Who", p.getName());
                            Main.getPlugin().saveConfig();
                           
                            }
                            p.sendMessage(Utils.prefix + "Du hast den Spieler §6" + target.getDisplayName() + " §aerfolgreich §7gebannt");
                        } else
                            p.sendMessage(Utils.prefix + "Du kannst dich §4§n§lnicht§r §7selbst bannen");
                    } else
                        p.sendMessage(Utils.notfound);
                } else
                    p.sendMessage(Utils.usage + "/ban §8<§6Spieler§8> <§6Grund§8>");
            } else
                p.sendMessage(Utils.noperm);
        } else
            sender.sendMessage(Utils.noplayer);
        return false;
    }

}
 
D

deleted202832

Guest
Du benutzt die falsche Methode, was du brauchst ist:
Code:
e.disallow(Result.KICK_BANNED, "Du bist gebannt");
Außerdem kannst du e.setKickMessage(""); entfernen

Ich nehme an es kommt eine NullPointerException wenn der Spieler nicht gebannt ist bzw nicht in der Config drin steht weil du direkt nach einem boolean abfragst aber der nicht unbedingt existiert
 
Oben