You are not logged in.

  • Login
Bitte besucht unser neues Forum unter https://forum.nitrado.net | Please visit our new Forum at https://forum.nitrado.net

frickx

User / Kunde

  • "frickx" is male
  • "frickx" started this thread

Posts: 448

Location: Braunschweig <3

  • Send private message

1

Tuesday, February 3rd 2015, 3:18am

Conf+ - Nie wieder YAML [FrickXs Geburtstagrelease]



Hallo liebe Leser und Leserinnen,


zu meinem heutigen Geburtstag würde ich gerne eine kleine aber feine Sache releasen, dass es für mich ziemlich nervig ist, mit Konstanten und YamlConfigurations zu arbeiten.

Conf+ ist derzeit in 3 Dateien aufgeteilt aufgrund der Übersichtlichkeit

Die Annotation kurz erklärt:

FILE = Die Datei in der der Schlüssel mit dem Wert gespeichert wird.

KEY = Der Schlüssel unter dem der Wert gespeichert werden soll

TYPE = Bestimmt den Typen von dem zu ladenen / speichernen Wert.

Im Folgenden werde ich ein kleines Beispiel konstruieren.

Der ConfigManager braucht bei der Instanzierung euer Plugin als Referenz, also wird er z.B. so in der onEnable-Methode aufgerufen.

Java source code

1
ConfigManager configManager = new ConfigManager(this);


Mit dieser Beispielklasse werden wir in diesem kleinen Beispiel arbeiten.

Java source code

1
2
3
4
5
6
7
8
9
10
public class Constants
{
    public static JavaPlugin plugin;

    @ConfigKey(FILE = "config.yml", KEY = "test", TYPE = ConfigType.STRINGLIST)
    public static List<String> test = new ArrayList<>();

    @ConfigKey(FILE = "config.yml", KEY = "spawnLocation", TYPE = ConfigType.LOCATION)
    public static Location spawnLocation = new Location(Bukkit.getWorld("world"), 1, 1, 1, 1, 1);
}


Nun fragt ihr euch sicherlich, wo euch Conf+ die Arbeit mit den Dateien abnimmt / erleichtert. Nun dies ist ganz simpel.

Conf+ schaut zuerst welches "Feld" die Annotation von der ConfigKey-Klasse hat (in unserem Beispiel sind das zwei Stück (test und spawnlocation).

Basierend auf der Methode die ihr aufgerufen habt, werden nun alle Felder mit der Annotation gespeichert oder ausgelesen.

In diesem Beispiel wollen wir das "Feld" test in der Datei "config.yml" speichern unter dem Schlüssel "test" und dazu geben wir an, dass es sich dabei um eine String-Liste handelt.

Das "Feld" spawnLocation soll ebenfalls in der "config.yml" gespeichert werden unter dem gleichnamigen Schlüssel mit dem Typ LOCATION (standardmäßig könnt ihr ja keine Locations in den YML-Dateien speichern (nur über Umwege machbar)).

Wenn wir nun die saveConfigForClass()-Methode von unserem ConfigManager aufrufen, erhalten wir den YAML-Output wie er auch oben im Bild zu sehen ist.

Aufruf der Methode erfolgt so:

Java source code

1
configManager.saveConfigForClass(Constants.class);


Hinweis: Die Methode braucht zum Arbeiten eine Klasse und keine Instanz einer Klasse!
ACHTUNG: Bei dem Aufruf dieser Methode werden die vorhandenen Werte aus der Datei überschrieben!


Wie ihr sehen könnt brauchen wir uns nun nicht mehr mit den FileConfigurations usw. rumschlagen, da euch Conf+ die Arbeit einfach abnimmt.

Nun woll ihr sicherlich noch wissen wie ihr die Configs wieder auslesen könnt richtig? Nichts leichter als das.

Als erstes rufen wir wieder unsere ConfigManager-Instanz mit der loadConfigForClass()-Methode


Java source code

1
configManager.loadConfigForClass(Constants.class);


Das ist alles an Zauberei die ihr braucht um alle Werte wieder einzulesen. Conf+ schaut dabei natürlich in jede Datei rein, die ihr über die Annotation mitgegeben habt.

Am Ende erhalten wir wieder unsere Objekte in den einzelnen "Feldern" und können mit diesen weiterarbeiten.

Bitte beachtet hierbei, dass ihr die Objekte auf null überprüfen solltet, bevor ihr mit diesen weiterarbeitet, da es sonst Fehlermeldungen in der Konsole hagelt.



Fazit: Einfacher kann man euch die Verwaltung von YAML-Dateien wirklich nicht mehr machen. Hoffe ihr habt ein bisschen Spaß mit dem Zeug und könnt evt. noch einige Verbesserungsvorschläge geben.



LINKS:


MfG,
FrickX

PS: Den Thread zu schreiben dauert länger als das Programmieren von drei Klassen :D
PS2: Und nun lasse ich mich erstmal feiern. :ill:

This post has been edited 2 times, last edit by "frickx" (Feb 3rd 2015, 3:57am)


krisboy

User / Kunde

Posts: 34

  • Send private message

2

Tuesday, February 3rd 2015, 1:14pm

Alles Gute, feier gut!
Schön dass du was kostenlos veröffentlichst.
MFG krisboy

Feeliiix

User / Kunde

Posts: 7

  • Send private message

3

Tuesday, February 3rd 2015, 1:23pm

Sorry ich verstehe nicht ganz.

Wie komm ich jetzt an z.b. getString() ?
PS: Alles Gute!

@frickx

Feeliiix

frickx

User / Kunde

  • "frickx" is male
  • "frickx" started this thread

Posts: 448

Location: Braunschweig <3

  • Send private message

4

Tuesday, February 3rd 2015, 1:55pm

Danke euch beiden :)
@Feeliiix: die Methoden brauchst du nicht mehr, du brauchst nur noch auf die Variablen der Klasse zugreifen. Heißt jeglichen Zugriff auf die API brauchst du selbst nicht mehr machen

thiserik

User / Kunde

Posts: 273

  • Send private message

5

Tuesday, February 3rd 2015, 2:00pm

@frickx Alles Gute!

Feeliiix

User / Kunde

Posts: 7

  • Send private message

6

Tuesday, February 3rd 2015, 3:13pm

Verstehe Danke!

bubbleguj

User / Kunde

  • "bubbleguj" is male

Posts: 704

Location: Vancouver, Canada

Occupation: Special Projects Assistant

Thanks: 9

  • Send private message

7

Tuesday, February 3rd 2015, 10:12pm

Sieht ganz interessant aus ich schau's mir mal an! Alles Gute! :)
Programmer (noun.)
A person who fixed a problem that you don't have, in a way you don't understand.

Algorithm (noun.)
Word used by programmers when they don't want to explain what they did.

daniel0916

User / Kunde

Posts: 998

  • Send private message

8

Tuesday, February 3rd 2015, 10:42pm

Sieht interessant aus. Alles Gute!

frickx

User / Kunde

  • "frickx" is male
  • "frickx" started this thread

Posts: 448

Location: Braunschweig <3

  • Send private message

9

Tuesday, February 3rd 2015, 10:53pm

@daniel0916 und @thiserik

Danke für eure Glückwünsche :)

@daniel0916 ja, ich hatte es satt immer wieder die Dateien anzulegen und zu gucken, ob die Keys auch wirklich stimmen, deshalb das Helferlein :)

frickx

User / Kunde

  • "frickx" is male
  • "frickx" started this thread

Posts: 448

Location: Braunschweig <3

  • Send private message

10

Thursday, February 5th 2015, 10:56am

#push

frickx

User / Kunde

  • "frickx" is male
  • "frickx" started this thread

Posts: 448

Location: Braunschweig <3

  • Send private message

11

Friday, February 6th 2015, 1:33pm

#push

Hat es denn bis jetzt keiner ausprobiert? Oo

UnitedSeventeen

User / Kunde

  • "UnitedSeventeen" is male

Posts: 641

Location: Localhost

Occupation: Nix

  • Send private message

12

Friday, February 6th 2015, 1:44pm

Sieht ganz interessant aus ^^.
Leider arbeite ich kaum noch mit Bukkit :D

frickx

User / Kunde

  • "frickx" is male
  • "frickx" started this thread

Posts: 448

Location: Braunschweig <3

  • Send private message

13

Tuesday, February 10th 2015, 2:56am

/push

sewil267

User / Kunde

  • "sewil267" is male

Posts: 686

Location: Localhost

Occupation: Schule :c

  • Send private message

14

Tuesday, February 10th 2015, 8:44am

Ich möchte mit dem Pluginsprogrammieren beginnen. Was genau an Arbeit nimmt mir das programm ab? Dauert es dadurch kürzer?

frickx

User / Kunde

  • "frickx" is male
  • "frickx" started this thread

Posts: 448

Location: Braunschweig <3

  • Send private message

15

Tuesday, February 10th 2015, 9:30am

Ich möchte mit dem Pluginsprogrammieren beginnen. Was genau an Arbeit nimmt mir das programm ab? Dauert es dadurch kürzer?
Steht doch alles im ersten Post...

mcf_

User / Kunde

Posts: 1,363

Thanks: 22

  • Send private message

16

Tuesday, February 10th 2015, 2:37pm

Also ich finde dein System viel zu aufwendig, wenn man immer so viel schreiben muss:

Java source code

1
2
@ConfigKey(FILE = "config.yml", KEY = "asdf", TYPE = ConfigType.STRINGLIST)
public static List<String> asdf = new ArrayList<>();


Da lob ich mein System wo ich nur einen neuen Eintrag in 'ner Enumeration eintragen muss ^^
Das geht schneller, bis bei einer Location. Da ist dein System besser - zumindest noch :D



frickx

User / Kunde

  • "frickx" is male
  • "frickx" started this thread

Posts: 448

Location: Braunschweig <3

  • Send private message

17

Tuesday, February 10th 2015, 3:14pm

Also ich finde dein System viel zu aufwendig, wenn man immer so viel schreiben muss:

Java source code

1
2
@ConfigKey(FILE = "config.yml", KEY = "asdf", TYPE = ConfigType.STRINGLIST)
public static List asdf = new ArrayList<>();


Da lob ich mein System wo ich nur einen neuen Eintrag in 'ner Enumeration eintragen muss ^^
Das geht schneller, bis bei einer Location. Da ist dein System besser - zumindest noch :D
Naja 2 Zeilen und er liest die Sachen automatisch ein?

Außerdem kannste den ersten Parameter eh meistens kopieren.

Und wie dir sicherlich aufgefallen ist, arbeite ich auch mit Enums

Bitte besucht unser neues Forum unter https://forum.nitrado.net| Please visit our new Forum at https://forum.nitrado.net