Spigot Spieler darf nur einmal am Tag joinen?

4 Antworten

Hallo,

Du könntest eine Config erstellen in der du speicherst wann der Spieler joint und dann Anfragen ob schon 24h vergangen sind. Außerdem würde ich dir eher das PlayerLoginEvent für so etwas empfehlen. Dort gibt es nämlich eine Möglichkeit den Spieler erst gar nicht auf den Server zu lassen (es kommt nämlich sonst eine Join-Nachricht. Außer dem buggt es ziemlich rum, wenn man den Spieler beim JoinEvent kickt)

Was hast du denn schon versucht?
Standardmäßig würde ich eine ArrayList (da vermutlich nicht viele Spieler) anlegen und den Spieler beim Joinen in diese Arraylist mit Aufnehmen. Falls er schon in der Arraylist steht, wird der Spieler gekickt. Wenn der Server eh einmal am Tag neustartet ist das ok, ansonsten würde ich keine ArrayList sondern eine Map nutzen, die Player und LocalDateTime beinhaltet.

Falls du mehr Infos brauchst, frag einfach.

Woher ich das weiß:Studium / Ausbildung

gibt es einen weg den spieler bis zum nächsten Tag zu bannen?

kicken kann man ja mit event.getPlayer().kickPlayer()

0
@Halllomenschen

Bannen wäre kein Problem, einfach ein Temp Ban bis Mitternacht ausführen, das System müsste dann selbst wissen wie viele Sekunden es noch bis Mitternacht sind.

0
@webdesignnoobie

Hier ist mein Code:

for (String name1 : Varo.this.recordingTime.keySet())
        {
          if (Bukkit.getPlayer(name1) == null)
            continue;
          if ("Water_Storm".equals(Bukkit.getPlayer(name1).getName()) == false) {
          if ((((Integer)Varo.this.recordingTime.get(name1)).intValue() == 15) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 10) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 5) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 4) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 3) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 2))
            Bukkit.broadcastMessage("§e" + name1 + " §3wird in §e" + Varo.this.recordingTime.get(name1) + " §3Sekunden gekickt.");
          else if (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 1)
            Bukkit.broadcastMessage("§e" + name1 + " §3wird in §eeiner §3Sekunde gekickt.");
          else if (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 0 && (Bukkit.getPlayer(name1).getName() != "Water_Storm")){
     //Hier will ich statt kick bann machen um zu regulieren, dass der spieler erst am nächsten Tag kommt!!!       
Bukkit.getPlayer(name1).kickPlayer("§4Deine Aufnahmezeit ist aufgebraucht. §cDu wurdest deshalb gekickt.");
          }
          }
          else if ("Water_Storm".equals(Bukkit.getPlayer(name1).getName()) == true){
        	  if ((((Integer)Varo.this.recordingTime.get(name1)).intValue() == 15) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 10) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 5) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 4) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 3) || (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 2)) {
                  Bukkit.broadcastMessage("§e" + name1 + " §3wird in §e" + Varo.this.recordingTime.get(name1) + " §3Sekunden gekickt.");
        	  	  Bukkit.getPlayer(name1).sendMessage("§3Deine Runde endet in §e" + Varo.this.recordingTime.get(name1) + " §3Sekunden.");}
                else if (((Integer)Varo.this.recordingTime.get(name1)).intValue() == 1) {
                  Bukkit.getPlayer(name1).sendMessage("§eDeine Runde§3 endet in einer Sekunde.");
                Bukkit.getPlayer(name1).sendMessage("§4Deine Aufnahmezeit ist aufgebraucht. Da du der Owner des Servers bist, kannst du dich noch im Server umschauen");
        	  Bukkit.getPlayer(name1).setGameMode(GameMode.SPECTATOR);
          }}


          if (((Integer)Varo.this.recordingTime.get(name1)).intValue() > 0) {
              Varo.this.recordingTime.put(name1, Integer.valueOf(((Integer)Varo.this.recordingTime.get(name1)).intValue() - 1));
            }


        }

Ich habe bis jetzt programmiert, dass der Spieler nach Ablauf seiner Aufnahmezeit(wird ein Varo-Plugin) gekickt werden soll, es sei dem, der Spieler heißt Water_Storm, da dieser Spieler der Owner. Nun will ich ihn nicht nur Kicken, sondern auch bis Mitternacht bannen. In einem JoinListener habe ich schon geregelt, dass der Spieler nur von 18-19Uhr joinen kann.

0
@Halllomenschen

Und auf was genau kommt die Meldung bezüglich BanList in Eclipse?
BanList ist eine von Bukkit implementierte Klasse.

0
Map<Player, Datum> map = new HashMap<>();

onJoin {
 if(map.get(player) == heute) {
  //do something here
 } else {
   map.put(player, heute);
 }
}

Was möchtest Du wissen?