Les tentatives du Major

Discussion dans 'Discussions générales' créé par majorjohn, 31 Août 2019.

  1. majorjohn

    majorjohn Invocateur de Staff Administrateur

    Aujourd'hui, je déterre ce forum pour poster mes quelques recherches sur starmade. J'ai essayé de décompiler starmade (suite à la maj de dé-obfusacation d'une nouvelle partie du code) mais sans succès.

    Mon but était de pouvoir lancer le client de starmade dans l'ide (ici intellij). J'ai donc pris un décompiler au pif (JD-GUI) et j'ai tenté d'en faire quelque chose. Sans succès, celui-ci est inéficasse sur starmade.

    Voici les différents décompiler que j'ai utilisé :
    CFR : Complètement à la masse des erreurs syntaxique des utilisation de goto et de label une vrai plaît à lire et impossible à corriger même avec la meilleure bonne volonté du monde.
    Enigma : à la base créer pour minecraft je me suis dit que ça valait le coup de l'essayer, mais non. J'ai jamais réussi à l'utiliser ça crash en permanence.
    Le décompiler d'intilliJ (appelé également fernflower) : alors là les petits amis, on commence à rentré sur un truc costaud qui envoie du pâté. Des erreurs par-ci par-là, mais c'est humainement lisible. Je n'ai pas réussi à déterminé la quantité de correction à apporté (mais elle doit être au-dessus de 100).
    Procyon : La aussi, on est sur un petit bijou. Il ne fait pas totalement le taff mais comme le décompiler d'intelliJ c'est humainement lisible.

    Procyon et le decompiler d'intelliJ ne bute pas forcément sur la même chose bien qu'il y ait une zone ou les deux ce plante et pour moi ça n'a aucun sens. Ce qui pour l'instant fait échouer ma tentative d'exécuter starmade dans un ide (dommage !)

    A une prochaine (Je continuerai d'alimenter le sujet si je continue mes recherches dans l'optique de modder starmade) !

    Fly safe o7
  2. Alphajim

    Alphajim Akksul Barram, leader du Concordat d'Iyssada

    Tu devrais demander sur le discord officiel ;)

    EDIT : Ah en fait tu l'as déjà fait x)
  3. majorjohn

    majorjohn Invocateur de Staff Administrateur

    Me revoilà ! Aujourd'hui, je vous présente un peu mes différentes recherches. Cette fois-ci, je me suis concentré sur le code en lui-même et j'ai regardé à quoi on avait accès.

    Je me suis particulièrement intéressé au npc. J'ai utilisé les sources venant du décompiler d'intellij principalement.
    La partie juste en dessous en citation recense les packages que j'ai croisés et qui m'ont marqué. Vous pouvez zapper cette partie, c'est une sorte de mémo pour moi ou pour des gens qui souhaite modifier les npc.

    Je m'attaque donc à une fonctionnalité simple que je veux ajouter. Je veux pouvoir donner des crédits via un script lua.
    J'ai donc modifié la classe AICreatureDialogAI en ajoutant la méthode suivante :

    Code:
    public int giveCredits(int count) {
       this.getEntity().modCreditsServer(count);
       return 0;
    }
    Afin de tester cette petite modification, il faut mettre à jour le jar avec cette classe. J'ai essayé via mon IDE, mais je retombe dans le même problème énoncé dans mon précédent post. Il m'est impossible de compiler tout le projet. Moi qui ne voulais pas reprendre ce sujet tout de suite, c'est râpé. Je me suis concentré sur la génération du .class (Un jar contient des .class et on développe dans des fichiers .java. La compilation d'un .java donne un .class)

    Après quelques essais et recherche avec mon amis google j'ai réussi à compiler à la main. Pour ceux que ça intéresse, j'ai utilisé la commande suivante :

    Code:
    javac -cp "../../lib/\*" org/schema/game/common/data/player/dialog/AICreatureDialogAI.java
    
    Le dossier lib contenant toutes les librairies de starmade qu'on peut trouver dans le dossier d'installation /lib, ainsi que le jar de Starmade lui-même (histoire d'avoir tout les dépendances).

    J'ai récupérer AICreatureDialogAI.class et j'ai remplacer le fichier existant dans mon jar (j'ai utilisé 7Zip, un jar n'est rien de plus qu'un zip). J'ai ensuite utilisé ce jar customisé dans mon dossier starmade.

    Le jeu démarre \o/ (Ouais, je voulais vous retranscrire ma satisfaction au bout de quelques heures de recherche pour juste ça ^^). Bon, je vais en solo, je crée un pnj j'assigne le script et ... rien. C'est marrant, je ne peux plus faire aucune action. Direction les logs et je trouve une jolie erreur.

    Et c'est repartie pour de l'investigation les petits gars ! Après investigation mon jdk est supérieur au jre ! Too Bad !

    Bon du coup après une petite recherche, le coco utilise la version 1.7.0_80, donc go to https://www.oracle.com/technetwork/java/archive-139210.html et on download.

    Après un nouveau "patch" du jar, je lance le jeu. Je crée mon pnj, j'assigne le script et Pouf ! Ça marche ! \o/

    Voilà mon tout premier mode de starmade est enfin fait ! Ajouter une fonction pour le lua !


    Une petite note d'une chose étrange que j'ai rencontrée. J'ai deux pc et deux starmade. Le fait de passer un jar d'un pc à un autre a donnée des comportements bizarres. Encore une nouvelle investigation à mener plus tard !

    Voilà pour cette fois ci !

    Fly safe o7
  4. falco708

    falco708 Wonderbolt

    très intéressant merci beaucoup pour ton retour j'ai appris quelques trucs que je ne savais pas :)
    sinon je suis étonné que starmade soit toujours si difficile à moder, les devs n'ont pas dit qu'ils voulaient faciliter ça ?
  5. majorjohn

    majorjohn Invocateur de Staff Administrateur

    Bah on est passé de impossible à compliqué. Et c'est déjà pas mal !
    Après il faut savoir que je n'ai jamais moddé avant. J'ai les connaissances théorique global pour le faire mais du coups j'ai eu un temps d'apprentisage réel qui m'a couté quelque essaie et donc du temps.
    Donc pour moi c'est une très grande avancé. Surtout que si j'ai bien compris y'a des moddeur qui travail sur une api plus propre et plus facile pour faire du vrai mod (oui parce que la on est plus sur un bricolage que sur du réel modding durable et combinatoire).

Partager cette page