Bukkit isInRegion

Dieses Thema im Forum "Tutorials" wurde erstellt von [Dev] iTzSasukeHDxLP, 19. August 2014.

  1. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Hey Leute,

    heute möchte ich vorführen, wie man per Bukkit bzw Worldguard herausfindet, ob ein Spieler in einer Region ist. Das kann nützlich sein, zB. für Minigames o.ä

    Was braucht ihr:
    • Bukkit als Library
    • WorldGuard in eurem Plugin eingebunden
    • Eine IDE eurer Wahl


    Ich will heute eine Methode basteln, die herausfindet, ob ein Spieler in einer Region ist, oder nicht.

    Code (Text):
    1. public boolean isInRegion(Player p, String region) {
    2.    
    3.         return false;
    4.     }
    Der Player p ist der betreffende Spieler und der String region ist der Name der Region, in der der Spieler sein könnte.

    Als erstes brauchen wir Worldguard:
    Code (Text):
    1. public boolean isInRegion(Player p, String region) {
    2.         WorldGuardPlugin wgp = WorldGuardPlugin.inst();
    3.         return false;
    4.     }
    Mithilfe von Worldguard können wir auf verschiedene Objekte und Methoden, wie die Regions, die es gibt, zugreifen.

    Danach brauchen wir alle Regions des betreffenden Spielers:
    Code (Text):
    1. public boolean isInRegion(Player p, String region) {
    2.         WorldGuardPlugin wgp = WorldGuardPlugin.inst();
    3.         ApplicableRegionSet ars = wgp.getRegionManager(p.getWorld()).getApplicableRegions(p.getLocation());
    4.         return false;
    5.     }
    Das ApplicableRegionSet ars enthält nun alle Regionen, die "anwendbar" sind, welche gefunden wurden.

    Eine Methode wäre, es die Regionen mit einem Iterator durchzugehen:
    Code (Text):
    1. Iterator<ProtectedRegion> r = ars.iterator();
    Eine Protectedregion ist, wie der Name schon sagt, eine geschütze Region, die gelegt wurde.

    Und überprüfen, ob der name stimmt:
    Code (Text):
    1. while (r.hasNext()) {
    2.             ProtectedRegion protR = r.next();
    3.             if (protR.getId().equals(region)) {
    4.                 //return true;
    5.             }
    6.  
    7.         }
    Solange noch etwas in der Datenliste enthalten ist, nimmt die while-Schleife sich das nächste Objekt und prüft, ob die ID der Region, die gerade geprüft wird, unserer Wunschregion, bzw. deren Namen entspricht.

    Insgesamt würde das dann so aussehen:
    Code (Text):
    1. public boolean isInRegion(Player p, String region) {
    2.         WorldGuardPlugin wgp = WorldGuardPlugin.inst();
    3.         ApplicableRegionSet ars = wgp.getRegionManager(p.getWorld()).getApplicableRegions(p.getLocation());
    4.         Iterator<ProtectedRegion> r = ars.iterator();
    5.         while (r.hasNext()) {
    6.             ProtectedRegion protR = r.next();
    7.             if (protR.getId().equals(region)) {
    8.                 return true;
    9.             }
    10.  
    11.         }
    12.         return false;
    13.     }
    Hier nochmal eine kürzere Variante, die mir erst hinterher eingefallen ist:
    Code (Text):
    1. public boolean isInRegion(Player p, String region) {
    2.         WorldGuardPlugin wgp = WorldGuardPlugin.inst();
    3.         ApplicableRegionSet ars = wgp.getRegionManager(p.getWorld()).getApplicableRegions(p.getLocation());
    4.      
    5.         for(ProtectedRegion prg : ars){
    6.             if(prg.getId().equals(region))
    7.                 return true;
    8.         }
    9.         return false;
    10.     }
    Viel Spaß damit!;)
     
    #1
    MiCrJonas gefällt das.
  2. StarDrink
    Offline

    StarDrink

    Registriert seit:
    9. September 2011
    Beiträge:
    37
    Minecraft:
    StarDrink
    Hallo,

    Code kann man hernehmen, allerdings hast du nichts erklärt und nur hingeschrieben... Neulinge kopieren sich den Code, ohne zu wissen, was nun überhaupt geschehen ist.
     
    #2
  3. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Ich habe das ganze eigentlich nicht als detailliertes Tutorial konzipiert, aber ich werde, auf deinen Wunsch hin, mehr Erklärungen hinzufügen.
     
    #3
  4. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Was verstehst du unter Anfänger? Leute die sich heute einfach mal gedacht haben, dass sie Plugins programmieren wollen? Das ist doch alles erklärt. Und wenn man ein wenig Ahnung hat, dann versteht man das schon.
    Sasuke hat es wohl auch verstanden; und das heißt schon was. (Nimm es nicht persönlich, Sasuke)
     
    #4