TheRedCraft Posted April 29, 2017 Posted April 29, 2017 Hallo ich habe eine frage denn ich habe einen ban manager programmiert allerdings Funktioniert er nich so wie er soll, denn eigentlich get nur der unban befehl nicht hier der code meiner main package de.thecraft.simpelban.main; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; public class Main extends JavaPlugin { static List<String> bans = new ArrayList<String>(); File file = new File("plugins/Bans", "banns.yml"); FileConfiguration cfg = YamlConfiguration.loadConfiguration(file); @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { Player p = (Player) sender; if (cmd.getName().equalsIgnoreCase("ban")) { if (args.length == 1) { if (sender instanceof Player) { if (p.isOp() || p.hasPermission("ban.ban")) { if (!(sender.getName() == sender.getName())) { p.sendMessage("Du kannst dich nicht selber bannen"); } else { p.sendMessage("Du kannst dich nicht selber bannen"); String ban = args[0]; Player target = Bukkit.getPlayer(args[0]); bans.add(ban); target.kickPlayer("§cDu Wurdest Gebannt"); } } } else { sender.sendMessage("Das können nur spieler"); } } else { p.sendMessage("Nutze /ban <Spielername>"); } } if (cmd.getName().equalsIgnoreCase("unban")) { if (args.length == 1) { if (sender instanceof Player) { if (p.isOp() || p.hasPermission("ban.unban") || p.hasPermission("ban.*")) { String unban = args[0]; bans.remove(unban); p.sendMessage("Der Spieler " + unban + " wurde entbannt"); }else{ p.sendMessage("Das Darfst du nicht"); } } } else { p.sendMessage("Nutze /unban <Spielername>"); } } return super.onCommand(sender, cmd, label, args); } @Override public void onDisable() { Bukkit.getServer().getConsoleSender().sendMessage("§4Ban manager Wurde erfolgreich Disabled"); cfg.set("Bans.Player", bans); try { cfg.save(file); } catch (IOException e) { e.printStackTrace(); } super.onDisable(); } @Override public void onEnable() { Bukkit.getServer().getConsoleSender().sendMessage("§4Ban manager Wurde erfolgreich Geladen"); bans = cfg.getStringList("Bans.Player"); Bukkit.getPluginManager().registerEvents(new Event_PreJoinListener(), this); super.onEnable(); } } Es funktioniert so die spieler "Die gebannt sind" werden auf eine ArrayList gespeichert die ArrayList wird in einer datei die "banns.yml" gespeichert und bei neustarten wieder geholt aber wenn ich dan den unban befehl eingebe, dan wird der spieler aus der ArrayList nicht wieder entfernt warum ? und noch hier der code von meinen PlayerPreLoginEvent: package de.thecraft.simpelban.main; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerPreLoginEvent; @SuppressWarnings("deprecation") public class Event_PreJoinListener implements Listener{ @EventHandler public void onPreJoin(PlayerPreLoginEvent e){ if(Main.bans.contains(e.getName())){ e.disallow(PlayerPreLoginEvent.Result.KICK_OTHER, "§cDu wurdest gebannt."); } } } Hoffe auf viele antworten
Baustein Posted April 30, 2017 Posted April 30, 2017 In deinem Code geht's ja drunter und drüber. Kannst du mir zum Beispiel mal erklären, was if (!(sender.getName() == sender.getName())) { soll? Kann es sein, dass du bei jedem Bann "Du kannst dich nicht selber bannen" geschrieben bekommst? Und warum speicherst du die Spielernamen, und nicht die UUIDs? Ein Spieler kann sich einfach umbenennen und ist wieder entbannt. Liebe Grüße, Baustein
TheRedCraft Posted May 5, 2017 Author Posted May 5, 2017 Am 30.4.2017 um 14:27 schrieb Baustein: In deinem Code geht's ja drunter und drüber. Kannst du mir zum Beispiel mal erklären, was if (!(sender.getName() == sender.getName())) { soll? Kann es sein, dass du bei jedem Bann "Du kannst dich nicht selber bannen" geschrieben bekommst? Und warum speicherst du die Spielernamen, und nicht die UUIDs? Ein Spieler kann sich einfach umbenennen und ist wieder entbannt. Liebe Grüße, Baustein Nein ich bekomme nicht immer nur die ausage das man sich selber bann en kann Der Code if (!(sender.getName() == sender.getName())) { heißt das der wenn der sender nicht so heißt wie der sender das ist daführ das man sich nicht selber bannen kann und wie ich mir die uuids holen, weiß ich nicht aber wenn du es kannst, kannst du mir ja schreiben.
Joey Posted May 5, 2017 Posted May 5, 2017 (edited) Dann muss du aber den Inhalt des Arguments abfragen, da du den Spieler, den du bannen möchtest ja als Argument übergibst. So wie du es jetzt hast wird immer der Name mit dem der den Command eingibt, mit dem Namen des Spielers der den Command eingibt verglichen (Ist halt immer gleich, ist ja auch die gleicher variable). Also so if (!sender.getName().equals(args[0])) Und so bekommst du die UUID: player.getUniqueId().toString() PS: Außerdem könntest du am Anfang abfragen, ob der Sender überhaupt ein Spieler ist, so wie du es jetzt hast kannst du den Ban cmd nicht per Console ausführen Edited May 5, 2017 by Joey
TheRedCraft Posted May 5, 2017 Author Posted May 5, 2017 ok danke aber wie kann ich das problem als gelöst makieren?
Baustein Posted May 6, 2017 Posted May 6, 2017 Brauchst du nicht. Freut mich, dass dein Problem gelöst ist. Liebe Grüße, Baustein
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now