Hallo Spieler,

Ich habe festgestellt, dass Du dich noch nicht im Forum registriert oder eingeloggt hast. Ohne eine abgeschlossene Registrierung, kannst Du das Forum nicht vollständig verwenden.

Nutze bitte den Befehl / forum register <E-Mail> <Passwort> auf unserem Minecraft-Server (craftleben.de) und trage die entsprechenden Informationen ein, sofern Du noch nicht registriert bist. Andernfalls, kannst Du dich normal einloggen.



Achte dabei bitte auf Folgendes:

<E-Mail> - Nutze hier bitte deine aktuelle Email-Adresse! Solltest du dein Passwort vergessen, wird dir an diese E-Mail ein Link zum Zurücksetzen gesendet.

<Passwort> - Nutze hier bitte ein sicheres Passwort, welches Du dir merken kannst!

Sebi war dumm...

Sebi_zocer

Entwickler
Beigetreten
Nov. 30, 2019
Beiträge
15
Hay,

das ist eine Aufgabe an alle Leute, die mit Java programmieren können.

Diese Methode soll überprüfen, ob eine Base (Eckpunkte sind lowx, highx, lowz und highz) (Im Baserand sind noch 3 Blöcke in jede Richtung extra drin, um Abstand zur anderen Base zu haben) mit dem äußerem Rand eine andere Region (region) überschneidet.

Beide Regionen sind 9x9 groß.

Java:
    public static boolean isSomehowInRegion(Region region, int lowx, int highx, int lowz, int highz){
        int currentlowx = 1;
        int currenthighx = 2;
        int currentlowz = 3;
        int currenthighz = 4;
       
        Bukkit.getConsoleSender().sendMessage("Checking §e" + region.getName());
       
        if(region.isBase()){
            Base b = RegionManager.getBase(region);
            currentlowx = b.getCoreX() - b.getRange();
            currenthighx = b.getCoreX() + b.getRange();
            currentlowz = b.getCoreZ() - b.getRange();
            currenthighz = b.getCoreZ() + b.getRange();
        } else if(region.isCube()) {
            Cube c = RegionManager.getCube(region);
            currentlowx = c.getLowloc().getBlockX();
            currenthighx = c.getHighloc().getBlockX();
            currentlowz = c.getLowloc().getBlockZ();
            currenthighz = c.getHighloc().getBlockZ();
        } else if(region.isSpawn()) {
            //not working properly
            if(isInSpawn(new Location(RegionManager.getSpawn().getSpawn().getWorld(), lowx + ((highx - lowx) / 2), 0, lowz + ((highz - lowz) / 2)))) {
                return true;
            } else if(isNearSpawn(lowx, highx, lowz, highz)) {
                return true;
            }
        }
       
        if(currentlowx + currenthighx + currentlowz + currenthighz != 10) {
            boolean xcord = false;
            boolean zcord = false;
           
            boolean b1 = highx >= currentlowx;
            boolean b2 = highx <= currenthighx;
            boolean b3 = lowx >= currentlowx;
            boolean b4 = lowx <= currenthighx;
           
            boolean b5 = highz >= currentlowz;
            boolean b6 = highz <= currenthighz;
            boolean b7 = lowz >= currentlowz;
            boolean b8 = lowz <= currenthighz;
           
            if((b1 && b2) || (b3 && b4)) {
                xcord = true;
            }
            Bukkit.getConsoleSender().sendMessage((b1 ? "§a" : "§c") + highx + " >= " + currentlowx + " §7&& " + (b2 ? "§a" : "§c") + highx + " <= " + currenthighx);
            Bukkit.getConsoleSender().sendMessage((b3 ? "§a" : "§c") + lowx + " >= " + currentlowx + " §7&& " + (b4 ? "§a" : "§c") + lowx + " <= " + currenthighx);
           
            if((b5 && b6) || (b7 && b8)) {
                zcord = true;
            }
            Bukkit.getConsoleSender().sendMessage((b5 ? "§a" : "§c") + highz + " >= " + currentlowz + " §7&& " + (b6 ? "§a" : "§c") + highz + " <= " + currenthighz);
            Bukkit.getConsoleSender().sendMessage((b7 ? "§a" : "§c") + lowz + " >= " + currentlowz + " §7&& " + (b8 ? "§a" : "§c") + lowz + " <= " + currenthighz);
           
            if(xcord && zcord) {
                return true;
            }
        }
       
        return false;
    }
Das Ergebnis: Man kann überall seine Base hinsetzen, aber in den Eckpunkten der bestehenden Region geht das nicht.

Was hat Sebi falsch gemacht?

Tipp: Es gibt keine Schreibfehler. Der Code würde funktionieren...
 
Zuletzt bearbeitet:

Larsibaer

Mitglied
Beigetreten
Feb. 20, 2020
Beiträge
6
Müsste da nicht eine 3 hin statt eine 2 ?
Code:
if(isInSpawn(new Location(RegionManager.getSpawn().getSpawn().getWorld(), lowx + ((highx - lowx) / 2), 0, lowz + ((highz - lowz) / 2)))) {
                return true;
            } else if(isNearSpawn(lowx, highx, lowz, highz)) {
                return true;
            }
        }
Ich hoffe es ist Richtig :eek:
 

Sebi_zocer

Entwickler
Beigetreten
Nov. 30, 2019
Beiträge
15
Nein, das ermittelt die Mitte vom Spawn.

Beispiel:
Spawn:
lowX: 10
highX: 20
lowZ: 10
highZ: 20
Mitte:
X: 15
Z: 15

Wie kommt man auf die Mitte (15)?

Antwort:
Mitte X = lowX + ((highX - lowX) : 2) = 15
Mitte Z = lowZ + ((highZ - lowZ) : 2) = 15


Der Spawn ist bei dem gesamtem Code das Unwichtigste