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

Dear visitor, welcome to Nitrado.net Prepaid Gameserver Community-Support - Archiv. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

4Levitan

User / Kunde

  • "4Levitan" started this thread

Posts: 23

  • Send private message

1

Wednesday, May 7th 2014, 9:07pm

InventorySaveAPI zum kostenlosen Download!

Hallo liebe Devs :)
Vielleicht kennt ihr das, ihr wollt irgendwelche einstellbaren Kits in eine Config einfügen. Das ist immer eine menge Arbeit, da ihr ja alle Daten (Item, Amount, Position, Data, Durability, Enchantments etc.) einzeln speichern müsst. Ich hatte das auch schon oft und habe deshalb einfach mal eine kleine API verfasst, mit der man mit nur 1 Methode das komplette Spielerinventar in eine Config schreiben kann. Das ist für den Dev und für den Spieler einfacher. Stellt euch das vor: Ihr habt ein Surf-Plugin mit Kits, und der Spieler will es einstellen. Anstatt die Kits jetzt umständlich im Editor zu erstellen, packt er sich sein Inventar so voll, wie es ihm gefällt, und schreibt z.B. "/kit add <Name>". Der Dev muss nun nur noch diesen Befehl einbauen, indem er eine Methode aufruft und das Spielerinventar und den Namen einträgt. Fertig. Laden funktioniert genauso einfach: Anhand des Namens das Kit zurückgeben lassen und dann wieder per Methode ins Inventar legen. So brauch der Spieler 1 Befehl, um seine ganzen Kits eizurichten und der Dev nur eine Hand voll Methoden, um ganze Inventare zu speichern und zu laden. Und genau das macht diese API! Es wird alles aus dem Spielerinventar gespeichert:
  • Welches Item
  • Anzahl
  • Displayname
  • Beschreibung
  • Position im Inventar
  • Haltbarkeit
  • Enchantments mit Level

Pro Inventory wird 1 Datei erstellt, diese findet ihr im Ordner "plugins/InventorySaveAPI", es ist jedoch empfohlen, diese API nie anzurühren, da die API alles macht, was ihr braucht.

Eine weitere Methode lädt dieses Inventar nun und gibt es einem Spieler. Die API besteht aus 3 Klassen. Zuerst natürlich die Main, der Klasse "SavedInventory", in der die Werte, sprich: Die Datei, die Items etc., gespeichert werden. Die für euch interessante Klasse ist "InventoryManager"-Klasse, das ist die einzige, die ihr braucht. Sie liefert euch folgende (selbsterklärende) Methoden:

Source code

1
2
3
4
5
getSavedInventory() // gibt einem eine Collection aller existierenden Instanzen von SavedInventory aus
exists(String invname) // Zeigt an, ob ein SavedInventory mit diesem Namen existiert, d.h. es ein File mit diesem Namen und dem passenden Inhalt gibt
addInventory(PlayerInventory inv, String invname) // PlayerInventory ist das Inventar des Spielers (p.getInventory()) und invname ist der Name der gespeicherten Datei (siehe exists-Methode)
getInventory(String invname) // Gibt einem ein SavedInventory zurück, das man mal erstellt hat
deleteInventory(String invname) // Löscht die Instanz der SavedInventory-Klasse und natürlich das passende File, damit beim Reload das Inventory nicht wieder neu lädt :D


Falls ihr euch fragt: "Was bringt mir diese API jetzt genau?" Hier ein Anwendungsbeispiel (Ich weiß, dass man keine Commands in der Main-Klasse hat und das es schlecht geschrieben ist aber es soll ja schließlich nur ein Beispiel sein). Das, was hier gezeigt wird, dürfte selbsterklärend sein :)


Spoiler Spoiler


Das war es auch schon. Ich freue mich immer über Feedback, Lob, konstruktive Kritik, Wünsche, Kiddies die rumflamen (Bevor das mit den Kiddies wer ernst nimmt, das ist Ironie) etc.
Download ist im Anhang.
Viel Spaß damit!
4Levitan has attached the following file:
LG Levi

Howha

User / Kunde

  • "Howha" is male

Posts: 105

Location: Heidelberg

  • Send private message

2

Wednesday, May 7th 2014, 10:20pm

Das ist immer eine menge Arbeit, da ihr ja alle Daten (Item, Amount, Position, Data, Durability, Enchantments etc.) einzeln speichern müsst.

Man kann auch einfach ein ItemStack in einer FileConfiguration abspeichern. :)

4Levitan

User / Kunde

  • "4Levitan" started this thread

Posts: 23

  • Send private message

3

Thursday, May 8th 2014, 9:49am

Nö. Ok, theoretisch schon, dann hast du aber folgendes im File stehen:


Source code

1
2
3
Test: 
   ==: org.bukkit.inventory.ItemStack 
   type: CHAINMAIL_HELMET



Und das geht, solange man der Server nicht reloaded. Nach einem Reload fehlt einem dann ja alles, da die Instanz an sich ja nicht gespeichert wird. Du musst also alles einzeln speichern.
LG Levi

Howha

User / Kunde

  • "Howha" is male

Posts: 105

Location: Heidelberg

  • Send private message

4

Thursday, May 8th 2014, 11:26am

Man kann auch ItemStacks auslesen. Es gibt die Methode getItemStack(String path)

4Levitan

User / Kunde

  • "4Levitan" started this thread

Posts: 23

  • Send private message

5

Thursday, May 8th 2014, 12:03pm

Ich muss mich entschuldigen, du hast Recht. Es ist zwar nicht so ordentlich in der Config, aber es würde auch funktionieren.
LG Levi

This post has been edited 1 times, last edit by "4Levitan" (May 8th 2014, 12:18pm)


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