1. 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!

Technik Bukkit isInRegion

Dieses Thema im Forum "Tutorials" wurde erstellt von SasukeKawaii, 19. August 2014.


  1. SasukeKawaii
    Offline

    SasukeKawaii Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    1.006
    Geschlecht:
    männlich
    Minecraft:
    SasukeKawaii
    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!;)
     
    Zuletzt bearbeitet: 19. August 2014
    • Gefällt mir Gefällt mir x 1
  2. Werbung
    Online

    Werbung

  3. 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.
     
  4. SasukeKawaii
    Offline

    SasukeKawaii Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    1.006
    Geschlecht:
    männlich
    Minecraft:
    SasukeKawaii
    Ich habe das ganze eigentlich nicht als detailliertes Tutorial konzipiert, aber ich werde, auf deinen Wunsch hin, mehr Erklärungen hinzufügen.
     
  5. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.064
    Geschlecht:
    männlich
    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)
     
    • Gefällt mir Gefällt mir x 1