Rednael Geschrieben 26. März 2016 Share Geschrieben 26. März 2016 (bearbeitet) Guten Abend. Ich bin gerade dabei ein Plugin am programmieren, welches beim Start des Server Schilder aus einer Config lädt, diese platziert und updated. Das funktioniert soweit. Allerdings möchte ich, ohne den Namen des Schildes zu kennen, mithilfe der Koordinaten (X, Y, Z) auf die gespeicherte IP und den PORT zugreifen. Um konkreter zu sein: Das Plugin soll JOIN-Schilder erschaffen und wenn ein Spieler auf das Schild klickt, soll er auf den Server mit den zusammen mit den Koordinaten des Schildes gespeicherten Daten (IP, PORT) geschickt werden. Am Ende sollen in der Datei etwa 20 Einträge dieses Formates stehen und ich möchte mithilfe die durch den Klick des Spielers auf das Schild ermittelten Koordinaten auf die IP und den PORT zugreifen. Name des jeweiligen Servers/Schildes: Schild: NAME: Name des Schildes <- unbekannt, aber hierfür nicht wichtig IP: 123.456.789.0 <- gesucht PORT: 25565 <- gesucht X: 123 <- bekannt Y: 456 <- bekannt Z: 789 <- bekannt Kann mir hier jemand weiterhelfen? Das wäre super. Falls ihr dafür mehr Informationen benötigt, schreibt es mir bitte bearbeitet 26. März 2016 von Rednael Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
boomer41 Geschrieben 26. März 2016 Share Geschrieben 26. März 2016 Map<String, Object> schilder = getConfig().getSection("schilder").getValues(true); for (Map.Entry<String, Object> schildEintrag : schilder.entrySet()) { ConfigurationSection schild = (ConfigurationSection) schildEintrag.getValue(); schild.getString(...) } Keine Gewähr, ist ausm Kopf. Die Variable "schild" beinhaltet alles was unter schild1, schild2 usw steht, wobei schild1 und schild2 auch frei wählbare Namen sind. Vorraussetzung: Deine Datei ist so aufgebaut: schilder: schild1: <USW> schild2: <USW> Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Rednael Geschrieben 27. März 2016 Autor Share Geschrieben 27. März 2016 (bearbeitet) vor 14 Stunden schrieb boomer41: Map<String, Object> schilder = getConfig().getSection("schilder").getValues(true); for (Map.Entry<String, Object> schildEintrag : schilder.entrySet()) { ConfigurationSection schild = (ConfigurationSection) schildEintrag.getValue(); schild.getString(...) } Keine Gewähr, ist ausm Kopf. Die Variable "schild" beinhaltet alles was unter schild1, schild2 usw steht, wobei schild1 und schild2 auch frei wählbare Namen sind. Vorraussetzung: Deine Datei ist so aufgebaut: schilder: schild1: <USW> schild2: <USW> Soweit verstehe ich es eigentlich, aber ich habe ja nur die Unterwerte X, Y und Z und in der gleichen Unterspalte stehen auch die anderen Werte, die ich auslesen möchte, also so ähnlich wie bei einer Datenbank. Dort, wo X, Y und Z einen bestimmten Wert haben, möchte ich den Wert von PORT und IP auslesen, unabhängig von den anderen Werten und Überpunkten: //Jetzt mal ein bisschen umstrukturiert: Schild: Server1: NAME: BedWars 3 IP: 12345.67890 PORT: 25516 X: 647 Y: 356 Z: 357 WELT: welt Server2: NAME: SurvivalGames 2 IP: 5648794.35637 PORT: 25598 X: 426 Y: 246 Z: 845 WELT: welt Server3: NAME: PvP 5 IP: 89736.783566 PORT: 25523 X: 357 Y: 265 Z: 195 WELT: welt //IPs und Ports sind frei ausgedacht, die Servernamen und Koordinaten auch ;) Ich bestimme die Koordinaten des Schildes, wenn ein Spieler auf es klickt und möchte dann vergleichen, ob in der Config, dort, wo die Koordinaten des Schildes, auf das der Spieler geklickt hat, übereinstimmen und dann den IP und PORT für einen Servierwechsel auslesen. Gibt es vielleicht eine bessere Methode, das zu regeln? Vielleicht hast Du es ja auch schon super erklärt, nur ich verstehe nicht ganz, wie ich dann an die Werte gelangen kann. Frohe Ostern und eine Hoffnung, dass mir jemand das erklären kann bearbeitet 27. März 2016 von Rednael Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
boomer41 Geschrieben 27. März 2016 Share Geschrieben 27. März 2016 In der Schleife bekommst du praktisch alle Unterpunkte zurück. Überprüfe mit schild.getInt("X") usw. ob das gleich ist. Wenn Ja kannst du dann mit getString("IP") die IPs abgreifen Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Rednael Geschrieben 27. März 2016 Autor Share Geschrieben 27. März 2016 Ok, dann ist ja super, danke Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Rednael Geschrieben 27. März 2016 Autor Share Geschrieben 27. März 2016 (bearbeitet) Im Scheduler wirft er mir aber im 10Tick-Takt Fehler aus: public void updateSign() { Bukkit.getScheduler().runTaskTimerAsynchronously(this, new Runnable() { @Override public void run() { Map<String, Object> schild = sc.getConfigurationSection("Schild").getValues(true); for (Map.Entry<String, Object> eintrag : schild.entrySet()) { ConfigurationSection section = (ConfigurationSection) eintrag.getValue(); String name = section.getString("NAME"); String ip = section.getString("IP"); int port = section.getInt("PORT"); double x = section.getDouble("X"); double y = section.getDouble("Y"); double z = section.getDouble("Z"); World w = Bukkit.getServer().getWorld(section.getString("WELT")); Location loc = new Location(w, x, y, z); Sign s = (Sign) loc.getBlock().getState(); Ping server = new Ping(ip, port); s.setLine(3, server.parseData(Connection.ONLINE_PLAYERS) + "/" + server.parseData(Connection.MAX_PLAYERS)); s.setLine(2, server.parseData(Connection.MOTD)); if(s.getLine(2).equalsIgnoreCase(null)) { s.setLine(0, "§f§l█████████"); s.setLine(1, "§cServer wird"); s.setLine(2, "§cgesucht"); s.setLine(3, "§f§l█████████"); } else if (!s.getLine(2).equalsIgnoreCase(null)){ String voll = ""; if (Integer.valueOf(server.parseData(Connection.ONLINE_PLAYERS)) == Integer.valueOf(server.parseData(Connection.MAX_PLAYERS))) { voll = "§7[§6PREMIUM§7]"; } else { voll = "§7[§aWarten§7]"; } s.setLine(0, "§0" + name); s.setLine(1, voll); s.setLine(2, "§7" + server.parseData(Connection.MOTD)); s.setLine(3, "§f" + server.parseData(Connection.ONLINE_PLAYERS) + "§7/§f" + server.parseData(Connection.MAX_PLAYERS)); } s.update(); } } }, 200L, 10L); } Fehler: [15:42:05 WARN]: org.apache.commons.lang.UnhandledException: Plugin LobbySystem v1.0 generated an exception while executing task 2 at org.bukkit.craftbukkit.v1_9_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:56) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to org.bukkit.configuration.ConfigurationSection at net.rednaelde.lobby.plugin.start$1.run(start.java:130) at org.bukkit.craftbukkit.v1_9_R1.scheduler.CraftTask.run(CraftTask.java:71) at org.bukkit.craftbukkit.v1_9_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:53) ... 3 more [15:42:05 WARN]: Exception in thread "Craft Scheduler Thread - 1" [15:42:05 WARN]: org.apache.commons.lang.UnhandledException: Plugin LobbySystem v1.0 generated an exception while executing task 2 at org.bukkit.craftbukkit.v1_9_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:56) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to org.bukkit.configuration.ConfigurationSection at net.rednaelde.lobby.plugin.start$1.run(start.java:130) at org.bukkit.craftbukkit.v1_9_R1.scheduler.CraftTask.run(CraftTask.java:71) at org.bukkit.craftbukkit.v1_9_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:53) ... 3 more Den Fehler bringt er alle 0.5 Sekunden... Ich weiß nicht weiter bearbeitet 27. März 2016 von Rednael Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden