Réarranger des objets en Java (par exemple pour les fichiers Minecraft NBT)


Ce sont quelques sortes préliminaires pour quelque chose qui va être un outil de conversion pour les fichiers NBT. Il s'agit d'un format de fichier fournissant des objets imbriqués, ceux d'entre vous connaissant Minecraft pourraient le savoir.

Considérons donc que nous avons un objet comme ceci:

object.name = String
object.id = int
object.randomInformation = Object
object.storedObjects = Object[]

Ce que j'essaie de réaliser, c'est ceci: L'utilisateur doit pouvoir donner des fichiers de configuration pour différentes versions de l'objet. Cela peut ressembler à ceci:

Version1.dat:

someCoolObjectName.id = 1

Version2.dat:

someCoolObjectName.id = 2

Ainsi, lors de la conversion de Version1 à la version 2, le programme lit le fichier NBT, recherche n'importe quel objet avec un id de 1, le change en 2 et l'écrit dans un autre fichier. Jusqu'à présent, pas une grosse affaire.

Le problème commence, quand il s'agit de changements réels dans la version. Cela comprend:

  • propriétés renommées
  • propriétés déplacées
  • propriétés ajoutées/supprimées
  • propriétés qui contient les objets qui doivent être traités comme s'ils étaient un objet "normal" lui-même (si vous êtes dans Minecraft, vous pouvez penser à des objets dans un coffre)

J'ai pensé à quelque chose comme ça:

Version1.dat:

foo:object.id=1
bar:object.randomInformation
*:object.storedObjects

Version2.dat:

foo:object.id=2
bar:object.usefulInformation
blubb:object.(int)addedInformation
*:object.storedObjects

Cela signifierait lors de la conversion de 1 à 2:

  • changer l'id de 1 à 2
  • renommer randomInformation en usefulInformation
  • ajouter une propriété addedInformation, qui est un entier
  • convertir chaque Objet dans l'objet.storedObjects comme un objet normal
  • il suffit de copier toutes les autres propriétés

Cela signifierait que je dois implémenter tout un "langage" pour le fichier de configuration et le convertir en une liste de "commandes" à effectuer pour chaque objet. N'est-il pas un moyen plus facile de faire cela? Ou est-ce déjà une bonne idée?

Rappelez-vous, j'aurai beaucoup d'objets différents dans chaque version, où la plupart du temps seul l'id doit être changé. Mais sur certains objets, identifiés par leur identifiant, divers changements doivent être apportés. Et je ne veux pas changer le code du programme pour chaque nouvelle version.

Author: Anedar, 2014-01-14

1 answers

Ce n'est pas si difficile! Mais vous devez écrire les méthodes de conversion à partir des deux objets ou si le deuxième objet étend le premier objet, vous pouvez simplement copier les champs du premier objet. Si les champs ne sont pas visibles, vous pouvez utiliser la réflexion pour les copier.

Pour la gestion Minecraft NBT, vous pouvez utiliser la bibliothèque JNBT.

 0
Author: gyurix, 2014-09-07 11:36:58