Résolu 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;> -
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 -
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 !