Probleme de transparence



  • Bonjour ou bonsoir !
    Dernièrement j'ai voulu ajouter des vitres colorées sur mon serveur en paralèlle des vitres classiques
    tout semble fonctionner sauf un élément de la transparence de ces dernieres :

    A droites les miennes a Gauche les blocs de verre vanilla
    Je ne comprends pas pourquoi les miennes ne se comportent pas comme les fenêtres classiques voici la classe de mes vitres
    (si vous avez besoin de l'ItemBlock je l'ajouterais)

    ​package com.phoenixarena.phoenix.common;
    
    import java.util.List;
    import java.util.Random;
    
    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.client.renderer.texture.IIconRegister;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.IIcon;
    
    public class BlockPhoenixGlassMetaDataBlock extends Block
    {
        //MetaData
        public static String[] subBlock = new String[]{"glassWhiteIronBlock","glassOrangeIronBlock","glassMagentaIronBlock","glassLightBlueIronBlock","glassYellowIronBlock","glassLimeIronBlock","glassPinkIronBlock","glassGreyIronBlock","glassLightGreyIronBlock","glassCyanIronBlock","glassPurpleIronBlock","glassBlueIronBlock","glassBrownIronBlock","glassGreenIronBlock","glassRedIronBlock","glassBlackIronBlock"};
        public IIcon[] iconArray = new IIcon[subBlock.length];
        //Declaration du bloc
        protected BlockPhoenixGlassMetaDataBlock()
        {
            super(Material.glass);    
        }
        public boolean renderAsNormalBlock()
        {
            return false;
        }
        //Transparence
        public boolean isOpaqueCube()
        {
        return false;
        }
        //Silk Touch
        protected boolean canSilkHarvest()
        {
            return true;
        }
        //Couche Alpha
        @SideOnly(Side.CLIENT)
        public int getRenderBlockPass()
        {
            return 1;
        }
    
        public int quantityDropped(Random p_149745_1_)
        {
            return 0;
        }
        //Drops de blocs
        public int damageDropped(int metadata)
        {
            return metadata;
        }
        //Ajout des blocs
        public void getSubBlocks(Item item, CreativeTabs tabs, List list)
        {
            for(int i = 0; i<subblock.length; i++)<br="">        {
                list.add(new ItemStack(item,1, i));
            }
        }
        //Catalogue des textures
        public void registerBlockIcons(IIconRegister iconRegister)
        {
            for(int i = 0; i<subblock.length; i++)<br="">        {
                this.iconArray* = iconRegister.registerIcon(Phoenix.MODID + ":" + subBlock*);
            }
        }
        //Ajout des textures
        public IIcon getIcon(int side, int metadata)
        {
            if(metadata >=0 && metadata < subBlock.length)
            {
                return this.iconArray[metadata];    
            }
            return this.iconArray[0];
        }
    }
    

    J'ai crée ce bloc a l'aide du tutoriel vidéo concernant les blocs à métadatas
    En esperant que vous pourrez m'aider
    Merci beaucoup</subblock.length;></subblock.length;>


  • Administrateurs

    Regarde dans BlockGlass. C'est la fonction shouldBeRendered qui te manque.
    Sinon c'est quoi un "Ptonleme" ?



  • XD mince c'est ça de taper trop vite ^^ on décale d'une touche et problème devient : ptonlème
    Pour ce qui est du code j'ai trouvé ça dans BlockBreakable.class :

    ​    @SideOnly(Side.CLIENT)
    
        public boolean shouldSideBeRendered(IBlockAccess p_149646_1_, int p_149646_2_, int p_149646_3_, int p_149646_4_, int p_149646_5_)
        {
            Block block = p_149646_1_.getBlock(p_149646_2_, p_149646_3_, p_149646_4_);
    
            if (this == Blocks.glass || this == Blocks.stained_glass)
            {
                if (p_149646_1_.getBlockMetadata(p_149646_2_, p_149646_3_, p_149646_4_) != p_149646_1_.getBlockMetadata(p_149646_2_ - Facing.offsetsXForSide[p_149646_5_], p_149646_3_ - Facing.offsetsYForSide[p_149646_5_], p_149646_4_ - Facing.offsetsZForSide[p_149646_5_]))
                {
                    return true;
                }
    
                if (block == this)
                {
                    return false;
                }
            }
    
            return !this.field_149996_a && block == this ? false : super.shouldSideBeRendered(p_149646_1_, p_149646_2_, p_149646_3_, p_149646_4_, p_149646_5_);
        }
    

    Mais quand je le copie dans mon bloc il y a des erreurs sur le field_149996_a je suis un peu perdu 😕
    merci d'avance


  • Administrateurs

    field_149996_a est une valeur booléenne qui est défini dans le constructeur. Le vers à la valeur false.
    Donc tu peux mettre false pour la remplace.
    Ça donne donc :

    return !false && block == this ? false : super.shouldSideBeRendered(p_149646_1_, p_149646_2_, p_149646_3_, p_149646_4_, p_149646_5_);
    

    qu'on peut remplacer par :

    return true && block == this ? false : super.shouldSideBeRendered(p_149646_1_, p_149646_2_, p_149646_3_, p_149646_4_, p_149646_5_);
    

    et donc simplifier par :

    return block == this ? false : super.shouldSideBeRendered(p_149646_1_, p_149646_2_, p_149646_3_, p_149646_4_, p_149646_5_);
    

    C'est de la logique ^^

    Pense aussi a remplacer :

            if (this == Blocks.glass || this == Blocks.stained_glass)
    

    par :

            if (this == TaClassePrincipale.tonBlock)
    


  • Tout marche 😄 Merci beaucoup !
    Franchement je saurais pas décrire a quel point je suis heureux j'ai planché dessus tout l'après midi mais je débute ^^
    Merci Encore ! 🙂