Morceau d'armure pouvant émettre de la lumière



  • Bonjour, après plusieurs tentatives et de longues heurs de programmation, je suis toujours a point mort.
    Je voudrait faire en sorte que si le joueur porte un morceau d'armure spécifique, alors le joueur émet de la lumière.
    Voila tout ! 🙂



  • En gros un système de lumière dynamique, n'est-ce pas ?
    Je vais faire des recherches, peut-être que certains mods tels que Dynamic Light peuvent être Open-Source, et donc aider. Sinon comme première solution je te proposerai, de créer un nouveau block transparent (texture avec alpha = 0), sans collision (pour ne pas gêner les entity près du joueur), regarde le code de la canne à sucre pour ceci (= BlockReed.java, je crois) et tu le fais produire de la lumière(voir la glowstone). Et dans un tick handler, tu check si le joueur porte ton morceau d'armure spécifique, si oui, tu check si il y a ton block custom près de lui (player.posY -1 ou player.posY +1, à toi de voir). Si ce n'est pas le cas, alors tu set un block d'air aux anciennes coords et t'en remets un nouveau aux nouvelles coords. Tu comprends la méthode ou pas ? 😃



  • Ok je fais avec le block et je re-post si j'ai des soucis



  • Voilà les principales méthodes / caractéristiques que devraient posséder ton block :

    1. Émettre de la lumière avec setLightLevel(1.0F)
    2. Material.air dans le constructeur
    3. Resistance and Hardness 0 avec les méthodes setResistance(0) et setHardness(0)
    4. Boite de collision inexistance avec :
         public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
         {
             return null;
         }
    5. collisionRayTrace doit retourner null pour que le contour du block ne soit pas dessiné. SInon t'as toujours l'event DrawBlockHighlightEvent, à enregistrer sur le bus Forge, que tu peux cancel si il s'agit de ton block qui est actuellement look par le joueur
    6. shouldSideBeRendered, isOpaqueCube, renderAsNormalBlock doit retourner false. Tout sa c'est pour avoir un block transparent.

    Sinon t'as la méthode World#setBlockToAir(x, y, z)


  • Moddeurs confirmés Rédacteurs Administrateurs

    Salut,
    Minecraft n'est pas du tout prévu pour ça.
    La gestion de la lumière est vraiment un gros soucis de Minecraft x)

    Dynamique light pour réussir à faire de la lumière dynamique autour du joueur patch pas mal de classe de minecraft, il modifie directement le moteur de lumière.

    Après la méthode de plaigon fonctionnera mais niveau performance ça va être une horreur.



  • Bah le mod Archimedes' Ships fait bien cela mais avec des centaines de block…Donc ouais après faudrait voir comment il optimise cela ^^'


  • Moddeurs confirmés Rédacteurs Administrateurs

    Il optimise pas x)
    Du-coup le serveur se retrouve à devoir placer des blocs juste pour de la lumière. Alors qu'à la base la lumière c'est sensé être client only.



  • Bon bah contacte atomicstryker dans le but qu'il te fournisse une aide quant à son mod, voire peut-être une API qui te permettrait de t'en servir facilement xD
    Solution peut-être inespérée après ^^'



  • lol, bon bah je vais faire mumuse avec minecraft et ses class qui gère cela 😄

    EDIT : Quelle class gère la lumière ??   😕



  • Géré dans les classes de rendu (BlockRender en 1.7 je crois) mais vraiment hard codé (du moins en 1.8, en 1.7 je pense aussi). Après je sais que Tessellator (pour dessiner des carrés) a une fonction pour mettre de la lumière.



  • Je ne trouve pas de BlockRender.class 😕

    EDIT : Avec du GL c'est faisable ?



  • Alors c'est un autre nom, je regarde demain (plutôt aujourd'hui, mais après avoir dormi ^^)
    Je pense que oui, mais ça aura pas le même effet de lumière que celle dans mc.

    Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk


Log in to reply