Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Java
You last visited: Today at 00:28

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Minecraft Plugin Spieler aus Config laden

Discussion on Minecraft Plugin Spieler aus Config laden within the Java forum part of the Coders Den category.

Reply
 
Old   #1
 
kleinkiiko's Avatar
 
elite*gold: 3
Join Date: Jul 2011
Posts: 384
Received Thanks: 41
Minecraft Plugin Spieler aus Config laden

Falls es im falschen Berreich ist bitte verschieben^^

Hay,
ich bin momentan dran ein Plugin zu schreiben und nun würde ich gerne Spieler in eine config file eintragen lassen und mir dann per Befehl ausgeben lassen z.b so:

Unser Admin Team:
Spieler1
Spieler2
Spieler3

usw

Halt das sie alle untereinander stehen. Ich bekomme es aber nur hin das sie nebeneinander stehen. ( Kenne mich mit Config files noch nicht so aus )
Hier mal mein Code zum ausgeben:

Java-Quellcode
Code:
cs.sendMessage("§cAdmin§8: " + this.plugin.getConfig().getString("Admins.Admin") + "\n ");
so werden sie nur hintereinander angezeigt obwohl ich das \n gemacht habe. Momentan füge ich die Spieler per Hand in die Config ein aber man kann das doch bestimmt auch per Command machen oder?

Würde mich über eine Antwort freuen

Wie gesagt kenne ich mich mit config files noch nicht wirklich aus
kleinkiiko is offline  
Old 07/18/2016, 14:48   #2
 
.Scy's Avatar
 
elite*gold: 15
Join Date: Jul 2010
Posts: 3,926
Received Thanks: 1,158
was ist cs für ein objekt? und der quellcode zu SendMessage wäre auch nicht verkehrt, vlt. kann sendMessage garnicht mit "\n" umgehen.

was du sonst auch noch machen kannst wäre die ganzen namen in einer ArrayList<String> speichern und dann über eine for-each schleife über die ArrayList iterieren und cs.sendMessage einfach jedesmal aufrufen.
.Scy is offline  
Old 07/18/2016, 14:54   #3
 
kleinkiiko's Avatar
 
elite*gold: 3
Join Date: Jul 2011
Posts: 384
Received Thanks: 41
Habe für den Player cs genommen ( Um ihn "anzusprechen" ) anstelle von cs könnte man auch p nehmen.
SendMessage kann mit /n umgehen da ich es an einer andere Stelle auch gemacht habe.
SendMessage ist von Bukkit bzw Spigot ja von haus aus drin^^
kleinkiiko is offline  
Old 07/18/2016, 15:07   #4
 
.Scy's Avatar
 
elite*gold: 15
Join Date: Jul 2010
Posts: 3,926
Received Thanks: 1,158
wenn du mehrere zeilen mit sendMessage ausgeben willst, dann musst du ein String-array reingeben.
also z.b.:
Code:
String[] = new String[5];
String[0] = "§cAdmin§8:";
String[1] = "Admin1";
...
cs.sendMessage(temp);
ansonsten musst du über eine ArrayList iterieren und halt pro eintrag in der ArrayList 1x sendMessage aufrufen.
.Scy is offline  
Thanks
1 User
Old 07/18/2016, 15:12   #5
 
kleinkiiko's Avatar
 
elite*gold: 3
Join Date: Jul 2011
Posts: 384
Received Thanks: 41
Wenn ich das über ein String mache kann ich dann einfach in der config z.b die namen eintragen udn diese werden dann untereinander angezeigt?
kleinkiiko is offline  
Old 07/18/2016, 15:22   #6
 
.Scy's Avatar
 
elite*gold: 15
Join Date: Jul 2010
Posts: 3,926
Received Thanks: 1,158
hier mal eine möglichkeit wie du aus einer datei ein String-array machst:
Code:
package de;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.ArrayList;

public class Users {
	public ArrayList<String> temp;
	
	public Users(){
		temp = new ArrayList<String>();
		temp.add("§cAdmin§8: ");
	}
	
	public void get(String req) {
		String line;
		try {
		if(req == null){
			return;
		}
		File file = new File(req);
		LineNumberReader reader = new LineNumberReader(new FileReader(file));
		
		while((line = reader.readLine())!= null){
			temp.add(line);
		}
		reader.close();
		}catch(IOException ioe){
			ioe.printStackTrace();
		}
	}
	
	public void wrapper(){
		String[] users = new String[temp.size()];
		int counter = 0;
		for(String a : temp){
			users[counter] = a;
			counter++;
		}
		
	}
}
die ArrayList kannst du von überall erreichen und im wrapper ist der code um aus der ArrayList ein String-Array zu "zaubern".

dein aufruf würde also ungefähr so aussehen:
Code:
private Users asd = new Users();
asd.get("HIERDATEIPFAD EINGEBEN");
String[] users = new String[asd.temp.size()];
		int counter = 0;
		for(String a : asd.temp){
			users[counter] = a;
			counter++;
		}
cs.sendMessage(users);
es sollte so funktionieren.

Edit: ich hab's jetzt als eigene Class gemacht, müsstest also ne Users.class hinzufügen zu dem projekt oder du nimmst dir nur die methoden und packst das ganze einfach direkt über den cs.sendMessage aufruf.

edit2: hatte noch nen kleinen fehler drinnen
.Scy is offline  
Thanks
1 User
Old 07/18/2016, 15:26   #7
 
kleinkiiko's Avatar
 
elite*gold: 3
Join Date: Jul 2011
Posts: 384
Received Thanks: 41
Ok danke werde ich mir gleich mal anschauen
kleinkiiko is offline  
Old 07/18/2016, 16:27   #8
 
0xFADED's Avatar
 
elite*gold: 7
Join Date: Dec 2013
Posts: 446
Received Thanks: 187
Ich weiß nicht wie diese Admin-Liste als String bei dir aussieht.
Falls die Admins z.B. durch Kommas oder andere Zeichen getrennt sind, kannst du Lambda-Magie benutzen um die auszugeben.

Code:
import java.util.Arrays;

public class AdminList {
  public static void main(String[] args) {
     String admins = "0xfaded,.Scy,kleinkiiko";
    
     cs.sendMessage("Die Admins sind:");
     Arrays.stream(admins.split(",")).forEach(cs::sendMessage);
  }
}
0xFADED is offline  
Thanks
1 User
Old 07/18/2016, 16:31   #9
 
kleinkiiko's Avatar
 
elite*gold: 3
Join Date: Jul 2011
Posts: 384
Received Thanks: 41
Würde halt gerne so haben das die Admins in einer Config datei stehen und dort ausgelesen werden . So das die dann Ingame Untereinander stehen so in etwa:

Unsere Admins:
0xfaded
Scy
kleinkiiko

So soll es aussehen.
kleinkiiko is offline  
Old 07/18/2016, 16:37   #10
 
.Scy's Avatar
 
elite*gold: 15
Join Date: Jul 2010
Posts: 3,926
Received Thanks: 1,158
Quote:
Originally Posted by kleinkiiko View Post
Würde halt gerne so haben das die Admins in einer Config datei stehen und dort ausgelesen werden . So das die dann Ingame Untereinander stehen so in etwa:

Unsere Admins:
0xfaded
Scy
kleinkiiko

So soll es aussehen.
genau das tut mein code

musst natürlich die datei auch genau so formatieren:
0xfaded
Scy
kleinkiiko
asd
qwe
eewq
...

mit meinem beispiel wird halt am anfang auch "§cAdmin§8: " als erstes ausgegeben, was das tut weiß ich nicht, aber bei dir stand dies am anfang.

wenn du die datei erstellen willst durch ingame-nachrichten(wie du an die nachricht selbst kommst musst du selbst gucken), geht das auch relativ einfach.
.Scy is offline  
Thanks
1 User
Old 07/18/2016, 16:51   #11
 
kleinkiiko's Avatar
 
elite*gold: 3
Join Date: Jul 2011
Posts: 384
Received Thanks: 41
Egal wo ich den unteren Code einfüge bekomme ich immer den Error:

Code:
Description	Resource	Path	Location	Type
Syntax error on token ";", { expected after this token	Users.java	/kAdmin/src/de/kleinkiko/kAdmin line 48	Java Problem
Syntax error on token ".", @ expected after this token	Users.java	/kAdmin/src/de/kleinkiko/kAdmin line 46	Java Problem
Syntax error, insert ")" to complete MethodDeclaration	Users.java	/kAdmin/src/de/kleinkiko/kAdmin line 46	Java Problem
Syntax error, insert "Identifier (" to complete MethodHeaderName	Users.java	/kAdmin/src/de/kleinkiko/kAdmin	line 46	Java Problem
Syntax error, insert "SimpleName" to complete QualifiedName	Users.java	/kAdmin/src/de/kleinkiko/kAdmin	line 46	Java Problem
Zeile 46:
Code:
asd.get("kAdmin.Admins");
Zeile 48:
Code:
int counter = 0;
Habe es grade in der Klasse Users drin wo auch der obere Code drin steht.
Pastebin der ganzen Klasse:
kleinkiiko is offline  
Old 07/18/2016, 18:20   #12
 
.Scy's Avatar
 
elite*gold: 15
Join Date: Jul 2010
Posts: 3,926
Received Thanks: 1,158
so kannst du den code nicht ausführen.

dort wo du diese zeile eingefügt hattest:
Code:
cs.sendMessage("§cAdmin§8: " + this.plugin.getConfig().getString("Admins.Admin") + "\n ");
musst du folgendes hinschreiben anstelle von dem aufruf:
Code:
Users asd = new Users();
asd.get("HIERDATEIPFAD EINGEBEN");
String[] users = new String[asd.temp.size()];
		int counter = 0;
		for(String a : asd.temp){
			users[counter] = a;
			counter++;
		}
cs.sendMessage(users);
du kannst den code nicht einfach in die Users.class packen.

nachtrag:
falls du es in einer methode schreibst, dann musst du das private vor Users asd entfernen(siehe oben).
.Scy is offline  
Thanks
1 User
Old 07/18/2016, 19:25   #13
 
kleinkiiko's Avatar
 
elite*gold: 3
Join Date: Jul 2011
Posts: 384
Received Thanks: 41
Habe es jetzt so gemacht wie du gesagt hast. Der Obere Code ( Lange ) ist in der Users.class und der kleinere ist dort wo du gesagt hast.

Nun bekomme ich folgenden Fehler wenn ich den Befehl nutze:

Code:
[19:21:16] [Server thread/INFO]: kleinkiko issued server command: /alist
[19:21:16] [Server thread/WARN]: java.io.FileNotFoundException: kAdmin.Admin (Das System kann die angegebene Datei nicht finden)
[19:21:16] [Server thread/WARN]: 	at java.io.FileInputStream.open0(Native Method)
[19:21:16] [Server thread/WARN]: 	at java.io.FileInputStream.open(Unknown Source)
[19:21:16] [Server thread/WARN]: 	at java.io.FileInputStream.<init>(Unknown Source)
[19:21:16] [Server thread/WARN]: 	at java.io.FileReader.<init>(Unknown Source)
[19:21:16] [Server thread/WARN]: 	at de.kleinkiko.kAdmin.Users.get(Users.java:24)
[19:21:16] [Server thread/WARN]: 	at de.kleinkiko.kAdmin.alist.onCommand(alist.java:25)
[19:21:16] [Server thread/WARN]: 	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
[19:21:16] [Server thread/WARN]: 	at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)
[19:21:16] [Server thread/WARN]: 	at org.bukkit.craftbukkit.v1_10_R1.CraftServer.dispatchCommand(CraftServer.java:646)
[19:21:16] [Server thread/WARN]: 	at net.minecraft.server.v1_10_R1.PlayerConnection.handleCommand(PlayerConnection.java:1351)
[19:21:16] [Server thread/WARN]: 	at net.minecraft.server.v1_10_R1.PlayerConnection.a(PlayerConnection.java:1186)
[19:21:16] [Server thread/WARN]: 	at net.minecraft.server.v1_10_R1.PacketPlayInChat.a(PacketPlayInChat.java:45)
[19:21:16] [Server thread/WARN]: 	at net.minecraft.server.v1_10_R1.PacketPlayInChat.a(PacketPlayInChat.java:1)
[19:21:16] [Server thread/WARN]: 	at net.minecraft.server.v1_10_R1.PlayerConnectionUtils$1.run(SourceFile:13)
[19:21:16] [Server thread/WARN]: 	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
[19:21:16] [Server thread/WARN]: 	at java.util.concurrent.FutureTask.run(Unknown Source)
[19:21:16] [Server thread/WARN]: 	at net.minecraft.server.v1_10_R1.SystemUtils.a(SourceFile:45)
[19:21:16] [Server thread/WARN]: 	at net.minecraft.server.v1_10_R1.MinecraftServer.D(MinecraftServer.java:737)
[19:21:16] [Server thread/WARN]: 	at net.minecraft.server.v1_10_R1.DedicatedServer.D(DedicatedServer.java:399)
[19:21:16] [Server thread/WARN]: 	at net.minecraft.server.v1_10_R1.MinecraftServer.C(MinecraftServer.java:673)
[19:21:16] [Server thread/WARN]: 	at net.minecraft.server.v1_10_R1.MinecraftServer.run(MinecraftServer.java:572)
[19:21:16] [Server thread/WARN]: 	at java.lang.Thread.run(Unknown Source)
Die Datei befindet sich eigentlich in dem Plugin Ordner dann in kAdmin und dort ist die Datei Admin bzw die Config
kleinkiiko is offline  
Old 07/18/2016, 19:32   #14
 
.Scy's Avatar
 
elite*gold: 15
Join Date: Jul 2010
Posts: 3,926
Received Thanks: 1,158
mit dem dateipfad ist so ne sache, ich weiß nicht wo die datei in der du den code untergebracht hast aus geführt wird, du könntest also einfach zu der datei Admin gehen und dir den dateipfad angucken, also den kompletten, unter windows würde es so aussehen:
c:\Users\Irgend\was\Plugin\kaAdmin\admin

unter einem unix system eher so:
/Plugin/kAdmin/admin

oder du nimmst den relativen pfad:
Plugin/kAdmin/admin

versuch einfach mal letzteres
.Scy is offline  
Thanks
1 User
Old 07/18/2016, 19:59   #15
 
kleinkiiko's Avatar
 
elite*gold: 3
Join Date: Jul 2011
Posts: 384
Received Thanks: 41
Mit dem Pfad ging es: plugins/kAdmin/config.yml

Vielen dank euch alle das ihr mit mir so viel geduld hattet^^

//EDIT:
Sobald ich den Server nun reloade wird die config überschrieben und dort steht nur der Standart drin den ich vorher in der Main klasse angegeben hab.

Habe ihn so angegeben in der Main klasse bei public void onEnable:

Code:
this.getConfig().addDefault("kAdmin.Admins", "kleinkiko");
	   this.getConfig().options().copyDefaults(true);
	   this.saveConfig();
kleinkiiko is offline  
Reply


Similar Threads Similar Threads
[Minecraft Server Plugin] Problem mit der Config
12/30/2013 - General Coding - 0 Replies
Hi e*pvpers! Und zwar habe ich bei meinem Plugin das Problem, dass sich die config.yml immer automatisch leert! Hier der Code von dem Plugin: package tk.bukkit.gorok; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.command.Command;



All times are GMT +2. The time now is 00:28.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.