• 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!
  • Dies ist ein moderiertes Forum. Dein Beitrag ist für dich und andere erst sichtbar, wenn er von einem Teammitglied moderiert wurde! Wird dein Beitrag abgelehnt erhältst du eine Meldung. Bitte erstelle so lange keine neuen Beiträge! Die Freischaltung wird auch nicht durch Nachfragen bei einem Teammitglied beschleunigt.

Bukkit isInRegion

FelixKlauke

Erzengel
Ehem. Teammitglied
Registriert
5 Januar 2014
Beiträge
1.038
Diamanten
299
Minecraft
FelixKlauke
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:
public boolean isInRegion(Player p, String region) {
    
        return false;
    }

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:
public boolean isInRegion(Player p, String region) {
        WorldGuardPlugin wgp = WorldGuardPlugin.inst();
        return false;
    }
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:
public boolean isInRegion(Player p, String region) {
        WorldGuardPlugin wgp = WorldGuardPlugin.inst();
        ApplicableRegionSet ars = wgp.getRegionManager(p.getWorld()).getApplicableRegions(p.getLocation());
        return false;
    }
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:
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:
while (r.hasNext()) {
            ProtectedRegion protR = r.next();
            if (protR.getId().equals(region)) {
                //return true;
            }

        }
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:
public boolean isInRegion(Player p, String region) {
        WorldGuardPlugin wgp = WorldGuardPlugin.inst();
        ApplicableRegionSet ars = wgp.getRegionManager(p.getWorld()).getApplicableRegions(p.getLocation());
        Iterator<ProtectedRegion> r = ars.iterator();
        while (r.hasNext()) {
            ProtectedRegion protR = r.next();
            if (protR.getId().equals(region)) {
                return true;
            }

        }
        return false;
    }

Hier nochmal eine kürzere Variante, die mir erst hinterher eingefallen ist:
Code:
public boolean isInRegion(Player p, String region) {
        WorldGuardPlugin wgp = WorldGuardPlugin.inst();
        ApplicableRegionSet ars = wgp.getRegionManager(p.getWorld()).getApplicableRegions(p.getLocation());
     
        for(ProtectedRegion prg : ars){
            if(prg.getId().equals(region))
                return true;
        }
        return false;
    }

Viel Spaß damit!;)
 
Zuletzt bearbeitet:

StarDrink

Redstoneengineer
Registriert
9 September 2011
Beiträge
37
Diamanten
0
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.
 

FelixKlauke

Erzengel
Ehem. Teammitglied
Registriert
5 Januar 2014
Beiträge
1.038
Diamanten
299
Minecraft
FelixKlauke
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.

Ich habe das ganze eigentlich nicht als detailliertes Tutorial konzipiert, aber ich werde, auf deinen Wunsch hin, mehr Erklärungen hinzufügen.
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
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)
 
Oben