Jump to content

Empfohlene Beiträge

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

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

 

bearbeitet von Joey
Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B