Rotation de dalles



  • Salut,

    Je reviens avec un nouveau problème de rotation de bloc. Cette fois-ci, je m'attaque aux dalles.
    Je veux faire les versions dalles de mes blocs de route avec des lignes orientées en fonction de l'orientation du joueur.

    Pour info, mes blocs "lignes" normaux fonctionnent comme ceci: 1 ID contient jusqu'à 8 blocs "lignes" différentes, les metadatas 0 à 7 contiennent le type de ligne et les metadatas 8 à 15 la version "orientée à 90°". Pas d'utilisation de tileEntity (chose que j'évite au maximum)
    Je veux faire pareil avec mes dalles, éviter le tileEntity. Je compte donc utiliser un ID pour 4 lignes différentes, metadatas 0 à 3 pour les dalles du bas, 4 à 7 pour les dalles du bas avec rotation 90°, 8 à 11 pour les dalles hautes et 12 à 15 pour les dalles hautes avec rotation 90°. J'espère que vous arriverez à suivre 😛
    Je sais faire le rendu d'une texture tournée à 90° sans avoir besoin de faire une texture supplémentaire (cf mon premier topic) donc pas besoin de se soucier de ça.

    Là où je bloque, c'est à la gestion des metadatas et des fonctions spécifiques aux dalles. J'ai essayé de faire comme pour les blocs rotatifs, à savoir utiliser la méthode onBlockPlacedBy dans la classe du bloc pour appliquer le metadata en fonction du sous-bloc et de l'orientation mais ça casse la fonctionnalité de l'empilement de 2 dalles en un bloc (vu que les metadatas ne correspondent plus).
    Faudrait que je puisse ajouter une dalle sur une dalle de metadata 4 avec la dalle de metadata 0 en main (et pareil pour les autres, 5 sur 1, 6 sur 2 etc, ainsi que les versions dalles hautes) tout en vérifiant l'orientation du joueur.

    Mon code est entièrement accessible ici: https://github.com/KillerMapper/roadstuff/
    Les classes en question sont cette classe Block et cette classe ItemBlock. C'est à peu près le même code que celui de base pour faire des dalles.

    Je suis sur que ça devrait pouvoir se faire sans que ça ne soit trop compliqué, mais j'ai l'impression de passer à côté. Gérer les metadatas à la pose du bloc dans la classe du Block, est-ce pertinent?

    Je continue de chercher de mon côté (ça fait déjà quelques jours que je suis dessus) tout en espérant trouver un peu d'indices par ici 😉


  • Administrateurs

    Salut,
    Laisse tomber la fonction onBlockPlacedBy
    Passe entièrement par les fonctions qui se trouve dans l'item bloc je pense que ça sera plus simple.
    Car de toute façon il faut que tu modifies les différentes fonctions qui se trouve dans l'item bloc comme c'est dans cette classe que le placement en haut ou en bas est géré.



  • C'est bien ce que je pensais. Faut tout faire dans la classe de l'item.

    Par contre, je n'arrive pas à trouver où mettre la définition du metadata avec ces 3 fonctions que les dalles utilisent… En attendant, je vais juste créer les dalles tournées comme les dalles normales et ajouter un craft simple, et passer à autre chose histoire d'avancer un peu.


  • Administrateurs

    Dans la fonction onItemUse



  • Problème réglé (normalement, je dois encore tester mais à première vue tout est bon), merci à BrokenSwing pour la correction.

    Le code est ici https://github.com/KillerMapper/roadstuff/blob/master/src/main/java/net/killermapper/roadstuff/common/items/asphalt/ItemBlockSlabAsphaltLines01.java (j'ai pas encore commit la dernière version je crois, ça sera fait une fois mon problème de paquets résolu).