[1.7.x]Bibliothèques utilisables comme bibliothèques



  • Salut tout le monde.

    J'ai créer un bloc qui est simplement une bibliothèque, et j'aimerais que mon bloc influe comme une bibliothèque normal sur les tables d'enchantements. J'ai déjà regardé du côté de la bibliothèque: rien dedans, et du côté de la table d'enchantement, et j'ai trouvé ceci :

    if (p_149734_1_.getBlock(l, j1, i1) == Blocks.bookshelf)
    {
    if (!p_149734_1_.isAirBlock((l - p_149734_2_) / 2 + p_149734_2_, j1, (i1 - p_149734_4_) / 2 + p_149734_4_))
    {
    break;
    }
    
    p_149734_1_.spawnParticle("enchantmenttable", (double)p_149734_2_ + 0.5D, (double)p_149734_3_ + 2.0D, (double)p_149734_4_ + 0.5D, (double)((float)(l - p_149734_2_) + p_149734_5_.nextFloat()) - 0.5D, (double)((float)(j1 - p_149734_3_) - p_149734_5_.nextFloat() - 1.0F), (double)((float)(i1 - p_149734_4_) + p_149734_5_.nextFloat()) - 0.5D);
    

    qui est visiblement ce qui fait que les bibliothèques influent la table d'enchantement.

    Comment puis-je faire pour que mon bloc soit comme une bibliothèque ?

    Cordialement.
    Skillb0w


  • Administrateurs

    La seule solution serait de modifier cette condition donc soit :

    • envoyer un pull request en changeant cette fonction pour que ça passe par une fonction dans la classe du bloc (faut t-il encore que LexManos accepte).
    • faire un coremod et patché cette classe (plutôt compliqué).

  • Modérateurs

    Malheuresement, ça ne semble pas possible sans faire sa propre table d'enchantement ou passer un coup d'ASM (très complexe a mettre en place)

    Écrit avec Tapatalk depuis mon mobile. Pardonnez les possibles fautes, j'aime juste pas écrire avec mon mobile.



  • Donc en gros pour un débutant comme moi ce n'est pas faisable ?

    Cordialement.
    Skillb0w


  • Administrateurs

    Attend mardi et je te passe le code pour patcher une classe vanilla.

    Envoyé de mon AN7DG3-LZ en utilisant Tapatalk



  • Je serais pas là tout le mois d’août. Tu pourras quand même me l'envoyer par MP, et m'expliquer vite fait comment l'utiliser 🙂

    Cordialement.
    Skillb0w


  • Administrateurs

    Un tutoriel sera fait pour expliquer.

    Envoyé de mon AN7DG3-LZ en utilisant Tapatalk



  • Super. Merci d'avance 🙂

    Cordialement.
    Skillb0w


  • Modérateurs

    Je vais être honnete avec toi, tu as trouvé le code qui gère ça, c'est vraiment pas mal pour un débutant 😉

    Écrit avec Tapatalk depuis mon mobile. Pardonnez les possibles fautes, j'aime juste pas écrire avec mon mobile.



  • Merci, après je n'ai fait que des blocs et des items donc je reste débutant ^^
    Mais ça fait toujours plaisir 🙂

    Cordialement.
    Skillb0w



  • tu sais si tu faut un bloc qui quand tu clique dessus fait spawn un enderDragon, 4 wither boss des particule de flame et d'explotion et fait un playsound d'une musique épique, certe ne c'est qu'un bloc mais c'est vachement complet



  • Oui c'est vrai, et ça à l'air plutôt fun 😄
    Tu me donne une idée pour quand j'aurais un peu plus d'experience 🙂

    Cordialement.
    Skillb0w



  • ^^ bha écoute de rien



  • Tu extends le bloc bibliothèque au lieu d'étendre le bloc "Block"


  • Administrateurs

    Ça aurai fonctionné si la condition était instanceof BlockBookShelf, mais la avec == Blocks.bookshelf) ça fonctionnera pas même si tu extends.



  • Je n'avais pas regardé la condition.
    Effectivement, ça ne peut pas fonctionné alors 😕



  • Je sais, j'ai dis dans mon premier message que j'avais regardé le code de la table d'enchantement, et qu'il y avait ceci (entre autre) :

    if (p_149734_1_.getBlock(l, j1, i1) == Blocks.bookshelf)
    

    Et donc que mon bloc ne pouvait pas être vérifié.

    Cordialement.
    Skillb0w



  • Je ne pense pas qu'il faut utiliser l'ASM, si ça ce trouve y'a un event.


  • Administrateurs

    Non, si il y avait un event, il y aurait la fonction MinecraftForge.EVENT_BUS.post dans le code de mc, or ce n'est pas le cas.
    Et ajouter une fonction du genre isBookShelf(world, x, y, z) dans la classe Block.java aurait été mieux qu'un event, donc je doutes que ça existe.



  • La fonction qui montre permet juste à faire apparaître les particules, si on bidouille un peu ptet que les particules peuvent se faire dans la classe de la bibliothèque qu'il a créé. (Mais ça risque d'être compliqué (ou pas))
    Si on recherche bien je n'ai trouvé qu'une seule fonction appelant le bloc bookshelf :

    
    /**
    * Determines the amount of enchanting power this block can provide to an enchanting table.
    * @param world The World
    * @param x X position
    * @param y Y position
    * @param z Z position
    * @return The amount of enchanting power this block produces.
    */
    public float getEnchantPowerBonus(World world, int x, int y, int z)
    {
    return this == Blocks.bookshelf ? 1 : 0;
    }
    
    

    Je pense que si on override la méthode dans la classe de son bloc comme ça :

    
    /**
    * Determines the amount of enchanting power this block can provide to an enchanting table.
    * @param world The World
    * @param x X position
    * @param y Y position
    * @param z Z position
    * @return The amount of enchanting power this block produces.
    */
    @Override
    public float getEnchantPowerBonus(World world, int x, int y, int z)
    {
    return this == Blocks.bookshelf || this == MaClass.monBookshelf ? 1 : 0;
    }
    
    

    Je ne suis pas sûr mais avant de faire de l'ASM il faut chercher s'il y a une solution.