Jump to content

[Programmierung] Config nach Unterpunkten durchsuchen


Rednael

Empfohlene Beiträge

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 von Rednael
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

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 von Rednael
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Rednael
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B