Block traversable avec la texture du block adjascent



  • Bonjour, j'ai récement eu l'idée d'un block que l'on peut traverser, et qui prends la texture du block qui est en x + 1, cependant je n'ai pas trouvé de solution pour récupérer la texture sur le forum, voici mon code pour le moment :

    package com.mod.ciolmod.blocks;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.client.Minecraft;
    import net.minecraft.util.AxisAlignedBB;
    import net.minecraft.util.IIcon;
    import net.minecraft.world.IBlockAccess;
    import net.minecraft.world.World;
    
    public class BlockTravers extends Block {
    
       public BlockTravers(Material p_i45394_1_)
       {
           super(p_i45394_1_);
           this.setBlockBounds(0.0f, 0.0f, 0.0f, 1f, 1f, 1f);
           this.setLightLevel(0.1f);
           this.setLightOpacity(10);
       }
    
        public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_)
        {
            return null;
        }
    
        public boolean isOpaqueCube(){
            return false;
        }
    
       public boolean renderAsNormalBlock()
       {
           return true;
       }
    
    }
    

    Merci de votre réponse,
    Bonne journée !


  • Administrateurs

    Salut,
    Il faut que tu override la fonction getIcon(IBlockAccess world, int x, int y, int z, int side) et que tu return l'IIcon du bloc à x + 1.

    De tête ça donne quelques choses comme ceci :

    public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
    {
        return world.getBlock(x + 1, y, z).getIcon(world, x + 1, y, z, side);
    }
    

    Attention par contre au risque de boucle. En plaçant que le même bloc en ligne sur la même coordonnée x, ça risque de mal se comporter.



  • Merci beaucoup ça fonctionne, cependant y aurait-il moyen de récupérer la teinte vert si c'est de la grass à côté ?  🙂



  • Salut, rends toi dans la classe BlockGrass, tu verras trois instance de IIcon au-dessus du constructeur, teste les voir laquelle est la bonne.



  • Merci beaucoup pour toute votre aide 🙂

    voici le code pour ceux que ça intéresse :

    package com.mod.ciolmod.blocks;
    
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.util.AxisAlignedBB;
    import net.minecraft.util.IIcon;
    import net.minecraft.world.ColorizerGrass;
    import net.minecraft.world.IBlockAccess;
    import net.minecraft.world.World;
    
    public class BlockTravers extends Block {
    
    public BlockTravers(Material p_i45394_1_)
    {
    super(p_i45394_1_);
    this.setBlockBounds(0.0f, 0.0f, 0.0f, 1f, 1f, 1f);
    this.setLightLevel(0.1f);
    this.setLightOpacity(10);
    
    }
    
    public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_)
       {
           return null;
       }
    
       public boolean isOpaqueCube(){
    
        return false;
    
        }
    
    public boolean renderAsNormalBlock()
    
    {
    
    return true;
    
    }
    
    @Override
    public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
    {
       return world.getBlock(x + 1, y, z).getIcon(world, x + 1, y, z, side);
    }
    
       @SideOnly(Side.CLIENT)
       public int getBlockColor()
       {
           double d0 = 0.5D;
           double d1 = 1.0D;
           return ColorizerGrass.getGrassColor(d0, d1);
       }
    
       @SideOnly(Side.CLIENT)
       public int getRenderColor(int p_149741_1_)
       {
           return this.getBlockColor();
       }
    
       @SideOnly(Side.CLIENT)
       public int colorMultiplier(IBlockAccess p_149720_1_, int p_149720_2_, int p_149720_3_, int p_149720_4_)
       {
           int l = 0;
           int i1 = 0;
           int j1 = 0;
    
           for (int k1 = -1; k1 <= 1; ++k1)
           {
               for (int l1 = -1; l1 <= 1; ++l1)
               {
                   int i2 = p_149720_1_.getBiomeGenForCoords(p_149720_2_ + l1, p_149720_4_ + k1).getBiomeGrassColor(p_149720_2_ + l1, p_149720_3_, p_149720_4_ + k1);
                   l += (i2 & 16711680) >> 16;
                   i1 += (i2 & 65280) >> 8;
                   j1 += i2 & 255;
               }
           }
    
           return (l / 9 & 255) << 16 | (i1 / 9 & 255) << 8 | j1 / 9 & 255;
       }
    
    }