Plugin das Sonder /und Leer - zeichen im Playername verbietet

Dieses Thema im Forum "Programmierung" wurde erstellt von Masiwo, 15. April 2014.

  1. Masiwo
    Offline

    Masiwo

    Registriert seit:
    28. April 2013
    Beiträge:
    40
    Ort:
    C:/Eclipse/Workspace/ @Paulh
    Minecraft:
    blotiu
    Hallo,

    ich bin gerade dabei ein Plugin zu schreiben , dass ein / und Leerzeichen im Namen verbieten soll. Am besten dies dann im Login Event.
    Das ganze sieht dann am Ender ungefähr so aus :
    Code (Text):
    1.     public void playerLoginEvent(PlayerLoginEvent e)
    2.     {
    3.         Player p = e.getPlayer();
    4.        
    5.         if p.getName() contains ("/"),(" "){
    6.             e.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Name ist ungültig");
    7.             {}
    8.        
    9.     }
    10.    
    11.  
    12. }
    Leider ist irgendwas an der if Abfrage falsch ... ;)
    Soll ich das evtl mit einer Collection machenoderso ?
    Vlt kann mir ja jmd helfenn ... ;)

    Danke für eine Antwort

    LG
    Daniel
     
    #1
  2. GermanUbuntu
    Offline

    GermanUbuntu

    Code (Text):
    1.     public void playerLoginEvent(PlayerLoginEvent e){
    2.         Player p = e.getPlayer();
    3.        
    4.         if (p.getName().contains("/") || p.getName().contains(" ")){
    5.             e.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Name ist ungültig");
    6.        
    7.             }
    8. }
    Versuch das ma so ;)





    Hier Deine Fehler:
    Code (Text):
    1.  
    2.     public void playerLoginEvent(PlayerLoginEvent e)
    3.     {
    4.         Player p = e.getPlayer();
    5.        
    6.         [U]if p.getName() contains ("/"),(" "){[/U]
    7.             e.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Name ist ungültig");
    8.             [U]{}[/U]
    9.        
    10.     }
    11.    
    12.  
    13. }
    14.  
    15.  
    16.  
     
    #2
  3. Masiwo
    Offline

    Masiwo

    Registriert seit:
    28. April 2013
    Beiträge:
    40
    Ort:
    C:/Eclipse/Workspace/ @Paulh
    Minecraft:
    blotiu
    Ok Danke vielmals,

    leider geht es noch nicht wirklich...
    Der Code gibt zwar keine Error Meldung mehr heraus aber ich kann mich noch mit z.B. blff 33fd einloggen.
    Hier nochmal der Code:
    Code (Text):
    1.  
    2.     public void playerLoginEvent(PlayerLoginEvent e){
    3.         Player p = e.getPlayer();
    4.        
    5.         if (p.getName().contains("/") || p.getName().contains(" ")){
    6.             e.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Name ist ungültig");
    7.        
    8.             }
    9. }
    10.  
    Danke für eine Antwort
     
    #3
  4. Mario52
    Offline

    Mario52

    Registriert seit:
    19. August 2013
    Beiträge:
    511
    Minecraft:
    Mario_52
    Habs selbst noch mal probiert.
    Code (Text):
    1. this.getServer().getPluginManager().registerEvents(this, this);
    Schreib das mal in onEnable(). Sofern du das Event in keiner anderen Klasse hast.
     
    #4
  5. Masiwo
    Offline

    Masiwo

    Registriert seit:
    28. April 2013
    Beiträge:
    40
    Ort:
    C:/Eclipse/Workspace/ @Paulh
    Minecraft:
    blotiu
    So ich hab das ganze jetzt so
    Code (Text):
    1. package main;
    2.  
    3. import org.bukkit.entity.Player;
    4. import org.bukkit.event.Listener;
    5. import org.bukkit.event.player.PlayerLoginEvent;
    6. import org.bukkit.plugin.java.JavaPlugin;
    7.  
    8. public class Main extends JavaPlugin implements Listener {
    9.     public void onEnable()
    10.     {
    11.         this.getServer().getPluginManager().registerEvents(this, this);
    12.     }
    13.    
    14.     public void onDisable()
    15.     {}
    16.    
    17.    
    18.     public void playerLoginEvent(PlayerLoginEvent e){
    19.         Player p = e.getPlayer();
    20.        
    21.         if (p.getName().contains("/") || p.getName().contains(" ")){
    22.             e.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Name ist ungültig");
    23.         }
    24. }
    25.  
    26.        
    27. }
    28.  
    29.  
    30.  
    Leider gehts immer noch nicht .
    Mario wenn du es mal probiert hast kannst du mir ja evtl mal deine Klasse schicken.

    Danke

    LG

    Daniel
     
    #5
  6. Wenn du die Javadoc lesen würdest, dann wüsstest du, dass entsprechende Methoden eine @EventHandler Annotation benötigen.
     
    #6
  7. Masiwo
    Offline

    Masiwo

    Registriert seit:
    28. April 2013
    Beiträge:
    40
    Ort:
    C:/Eclipse/Workspace/ @Paulh
    Minecraft:
    blotiu
    Habe ich eigentlich schon probiert.... eigenartig.
    Aber ich glaube so gehts auch nicht.
     
    #7
  8. Mario52
    Offline

    Mario52

    Registriert seit:
    19. August 2013
    Beiträge:
    511
    Minecraft:
    Mario_52
    Natürlich gehts so ...
    Ich habe es selbst nachgecodet. Bei mir klappts.
     
    #8
  9. minecraftboy
    Offline

    minecraftboy

    Registriert seit:
    28. September 2012
    Beiträge:
    336
    Ort:
    NRW
    Minecraft:
    gamemaster1511
    Du musst vor JEDES Event ein @EventHandler setzen
     
    #9
  10. games6471
    Offline

    games6471

    Wieso überprüfst du eigentlich nur den Spielername auf Schrägstriche und Leerzeichen? Der Spieler können immer noch Namen verwenden, die für uns schwer einzugeben sind oder Probleme bei manchen Plugins verursachen. Ein Spielername kann aus Buchstaben (Groß- und Kleinschreibung), Zahlen und Unterstrichen bestehen und kann aus min. 2 bis max. 16 Zeichen bestehen. Anhand dieser Informationen kann man nun ein regulären Ausdruck bilden.

    Code (Text):
    1.  
    2. import java.util.regex.Pattern;
    3.  
    4. import org.bukkit.event.EventHandler;
    5. import org.bukkit.event.Listener;
    6. import org.bukkit.event.player.PlayerLoginEvent;
    7.  
    8. public class TestListener implements Listener {
    9.  
    10.     //Wir werden diesen RegEx häufiger verwenden, also sollten wir den gleich compilieren.
    11.     private final Pattern namePattern = Pattern.compile("\\w{2,16}$");
    12.  
    13.     @EventHandler
    14.     public void onPlayerLogin(PlayerLoginEvent loginEvent) {
    15.         final String playerName = loginEvent.getPlayer().getName();
    16.         if (!namePattern.matcher(playerName).matches()) {
    17.             loginEvent.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Name ist ungültig!");
    18.         }
    19.     }
    20. }
     
    #10
  11. Masiwo
    Offline

    Masiwo

    Registriert seit:
    28. April 2013
    Beiträge:
    40
    Ort:
    C:/Eclipse/Workspace/ @Paulh
    Minecraft:
    blotiu
    Danke für deinen Code

    Danke schonmal, dass mit dem compilieren war keine schlechte Idee;).
    Bevor du das ganze geschrieben hattest gings dann auch so :
    Code (Text):
    1.     @EventHandler
    2.     public void playerLoginEvent(PlayerLoginEvent e) {
    3.         String name = e.getPlayer().getName();
    4.         if (name.contains("/") || name.contains(" ")) {
    5.             e.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Name ist ungültig");
    6.             return;
    7.         }
    8.     }
    9. }
    10.  
    Anscheinend war ich zu dumm return einzubauen .
    Eigentlich kam ja eh kein Code mehr danach weswegen das eig unnötig ist aber naja.
    Danke an alle guten Ratgeber.

    LG

    Daniel
     
    #11