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

Banen

banyan

Redstoneengineer
Registriert
25 Dezember 2014
Beiträge
34
Diamanten
300
http://lmgtfy.com/?q=bukkit+bannen

2 Sekunden Google, Antwort gegeben.

Trotzdessen für alle Suchfaulen;

Code:
p.setBanned(true); <--- (p = Spieler)
p.kickPlayer(); <--- Da das obere zwar übernommen wird, jedoch nicht "ausgeführt" wird (vom Sinn her)

Das verändert den "Grund" jedoch in keinster Weise, sind nur die Befehle um jemanden vom Server auszuschließen!

MfG
 

KillawOrCarel

Kuhfänger
Registriert
15 Juli 2017
Beiträge
78
Diamanten
1
Das verändert den "Grund" jedoch in keinster Weise, sind nur die Befehle um jemanden vom Server auszuschließen!
Hier wird der Grund nicht gesetzt, also ist diese Antwort nicht für "Suchfaule" sondern von Menschen, die sich besser fühlen wollen, weil sie Google kennen. Bravo! Das ist sowas von unhilfreich, du solltest erwähnen bei GuteFrage zu posten.

Um Personen zu sperren bietet die Spigot API derzeit keine* Möglichkeit an. Es gibt hierfür aber einen einfachen Workaround aus My Yak-ler**, indem die Vanilla Befehle verwendet werden (Ob dies auch für Spieler funktioniert, die offline sind, habe ich nicht getestet).

Java:
@Override
public void invoke(final Player player, final Object reason) {
    final String cmd = String.format(
        "minecraft:ban %s %s", player.getName(), reason
    );
    log.info(String.format("Executing Command %s", cmd));
    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), cmd);
}

* Siehe auch hier, wo es derzeitig keinen UUID Typen gibt.
** Zum Zeitpunkt dieses Beitrages nicht veröffentlicht, sollte sich dies geändert haben, so findet man dies in meiner Signatur
 

JTK222

Threadripper
Registriert
5 September 2013
Beiträge
1.150
Diamanten
323
Minecraft
JTK222
Beim Player logged in event abfragen ob der Spieler aufgrund eines Banns wieder gekickt wird und per event.setKickMessage() setzt du dann die Nachricht.
Ich bin mir nicht sicher ob es evtl. auch ein Kick Event gibt dass man beim erstem ban nutzen muss.
Sobald sich jemand jedoch wieder einloggen will kannst du demjenigen so die nachricht anzeigen.
So musst du aber die Gründe in Kombination mit der UUID speichern.

(Wenn du die Standard ban Dateien benutzt kannst du dir eine simple Methode schreiben die die UUID des Spieler unten dran anhängt.
Spart auch den unsauberen weg einen Befehl auszuführen).

Edit: So macht es Minecraft übrigens:
Code:
GameProfile gameprofile = server.getPlayerProfileCache().getGameProfileForUsername(args[0]);
UserListBansEntry userlistbansentry = new UserListBansEntry(gameprofile, (Date)null, sender.getName(), (Date)null, s);
server.getPlayerList().getBannedPlayers().addEntry(userlistbansentry);
EntityPlayerMP entityplayermp = server.getPlayerList().getPlayerByUsername(args[0]);
entityplayermp.connection.disconnect(new TextComponentTranslation("multiplayer.disconnect.banned", new Object[0]));
Ich weiß nicht inwiefern Spigot zugriff auf diese Methoden erlaubt bzw. wie nah es am original ist.
Aber damit müsste es 100% gehen.
 

Leonard held

Minecrafter
Registriert
13 Januar 2016
Beiträge
5
Diamanten
300
Also du könntest es über nen Command machen und dann einfach bei jedem Rejoin überprüfen ob er gebannt ist

PHP:
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) //Methode erstellen
{

if (cmd.getName.equalsIgnoreCase("banen")) {  // Command erstellen
  Player p = (Player) sender;  //Variable erstellen 
  p.setBanned(true);   //Spieler Banen
  p.kickPlayer("<Grund>");   // Spieler Kicken 

}
return false;
}

public void onJoin(PlayerJoinEvent e) {    //Join Event 
Player p = e.getPlayer;    //Variable
if (p.isBanned == true) {   // Überprüfen ob der Spieler Gebannt ist
   p.kickPlayer("<Grund>");  //Spieler Kicken
} else {  //wenn nicht dann wird weiter gemacht 
   p.setJoinMessage("<Message>") 
   ...
}
}

Ist jetzt nicht der beste aber sollte reichen als Beispiel :)
Mit dem Code bannst du dich selber. Aber du könntest jetzt mit den Argumenten arbeiten und den Spieler den du nach dem Command angibst bannen Lassen. Da ich das gerade Freihand geschrieben habe kann ich dir gerade nicht alles geben und kann es auch nicht Garantieren aber es müsste soweit eigentlich passen. Du musst das halt noch ergänzen wie du es benötigst. Du kannst auch um eine Gleiche Ban Message zu haben alles in einer Config speichern.

Wenn du noch Hilfe Brauchst kannst du mir schreiben :)
 
Zuletzt bearbeitet:
Oben