• 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!

[Gelöst] Benötige Hilfe beim programmieren eines Warp Plugins

zTrouble

Redstoneengineer
Registriert
8 September 2019
Beiträge
30
Diamanten
250
Heyho,

Wie einige es dem Titel schon entnommen haben möchte ich ein Warp Plugin programmieren, bis jetzt funktioniert auch alles jedoch liegt mein Problem beim /Warp Befehl, ich möchte das der Spieler "/Warp <Name>" macht und dann zum entsprechenden Warp teleportiert wird. Ich habe es so gemacht das beim "/Setwarp <Name>" Befehl auch noch der angegebene Name in der Config gespeichert wird, jetzt meine Frage wie kann ich die Argumente Abfragen, also ob die vom Spieler angegebenen Argumente ein Warpname ist und das er dann auch nur zum angegebenen Warp geportet wird.
- Hier der /Warp <Name> Befehl -
/Warp:
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if(sender instanceof Player) {
            Player p = (Player) sender;
                if(args.length == 1) {
                    FileConfiguration config = Main.getPlugin().getConfig();
                    World world = Bukkit.getWorld(config.getString("Warp.World"));
                     // Meine Idee wäre hier irgendwie etwas wie: Warpname warpname = config.getString(Warp.Name) oder so etwas zu machen, nächster Codeblock ist der
                     // /Setwarp Befehl
                    double X = config.getDouble("Warp.X");
                    double Y = config.getDouble("Warp.Y");
                    double Z = config.getDouble("Warp.Z");
                    float yaw = (float) config.getDouble("Warp.Yaw");
                    float pitch = (float) config.getDouble("Warp.Pitch");
                    Location location = new Location(world, X, Y, Z, yaw, pitch);
                    p.teleport(location);
                    p.sendMessage("§6§lInto§f§lbuild §8» §7Du wurdest zum §7Warp §a" + args[0] + " §7teleportiert");
                  
                    } else {
                        p.sendMessage("§6§lInto§f§lbuild §8» §7Bitte benutze §6/warp <Name>§7, mit §6/warps §7kannst du alle Warps sehen");
                  
                }
        }
      
      
        return false;
    }

}

- Hier der /Setwarp <Name> Befehl -
/Setwarp:
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if(sender instanceof Player) {
            Player p = (Player) sender;
            PermissionUser user = Permission***.getUser(p);
                if(user.has("warp.set")) {
                    if(args.length == 1) {
                        FileConfiguration config = Main.getPlugin().getConfig();
                        config.set("Warp.Name", args[0]);
                        config.set("Warp.World", p.getWorld().getName());
                        config.set("Warp.X", p.getLocation().getX());
                        config.set("Warp.Y", p.getLocation().getY());
                        config.set("Warp.Z", p.getLocation().getZ());
                        config.set("Warp.Yaw", p.getLocation().getYaw());
                        config.set("Warp.Pitch", p.getLocation().getPitch());
                        Main.getPlugin().saveConfig();
                        p.sendMessage("§6§lInto§f§lbuild §8» §7Du hast den Warp §a" + args[0] + " §7gesetzt");
                    } else {
                        p.sendMessage("§6§lInto§f§lbuild §8» §7Bitte benutze §6/warp <Name>");
                    }
                      
                }
        }
      
        return false;
    }
  

}

So sieht btw die Config aus:
Warp:
Name: zTrouble // Der Name steht btw für den Warpnamen und nicht für den Spielernarmen welcher den Befehl ausgeführt hat, habe den Warp nur zufällig "zTrouble" // genannt
World: world
X: -269.77740578977756
Y: 72.0
Z: 299.02737219807324
Yaw: 264.93585
Pitch: -3.5627093

Wer helfen möchte bitte KEINEN fertigen Code senden sondern versuchen zu erklären wie ich es selbst machen kann, Verbesserungen zu meinem Code sind auch gern gesehen.

LG
zTrouble
 

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
488
Minecraft
SirYwell
Zunächst einmal finde ich es sehr löblich, dass du explizit keinen fertigen Code vorgesetzt bekommen willst ^^. Ein kleiner Tipp zur Speicherung von Koordinaten hätte ich noch, das erspart dir sicherlich etwas Arbeit:
Location implementiert ConfigurationSerializable. Was das bedeutet, kann eventuell die Dokumentation oder dieses Tutorial verdeutlichen. Du kannst auf dieser Basis dann entweder eine eigene Warppoint-Klasse anlegen, die den Namen und die Koordinaten beinhalten und in dieser Klasse ebenfalls ConfigurationSerializable implementieren, oder einfach den Namen des Warps als Key in der Config verwenden. Dazu brauchst du dann diese Methode, um alle Warps zu laden.

Generell würde es sich empfehlen, die Warps in einer HashMap mit dem Namen als Key zu halten (und dann reichen theoretisch die Koordinaten als Value), so kannst du sehr einfach und schnell abfragen, ob der Name existiert, und wenn ja dorthin teleportieren.
 
Oben