Jump to content

ArrayList


TheRedCraft
 Share

Recommended Posts

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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

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 by Joey
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...
B
B