Bloc invisible



  • Bonjour à tous,

    Étant débutant dans le développement de mods via Minecraft Forge, je sollicite votre aide.
    Je souhaiterai coder un bloc invisible. Cependant, la texture de ce bloc est totalement blanche.
    Pour information, j'ai mit une image PNG 16x16 transparente en tant que texture.

    Voici la class de mon bloc :

    package com.clementdugal.wolfblocks;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.resources.model.ModelResourceLocation;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.init.Blocks;
    import net.minecraft.init.Items;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraftforge.fml.common.registry.GameRegistry;
    
    public class BlockInvisible extends Block {
    
    public BlockInvisible() {
    super(Material.glass);
    this.setHardness(0.3F);
    this.setStepSound(soundTypeGlass);
    this.setUnlocalizedName("invisible_block");
    this.setCreativeTab(CreativeTabs.tabBlock);
    }
    
    public void init() {
    Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(WolfBlocks.invisible_block), 0, new ModelResourceLocation("wolfblocks:invisible_block_inventory", "inventory"));
    
    GameRegistry.addRecipe(new ItemStack(WolfBlocks.invisible_block, 1), new Object[]{
    "AAA",
    "ABA",
    "AAA",
    'A', Blocks.glass,
    'B', new ItemStack(Items.potionitem, 1, 8206)
    });
    }
    
    public boolean isOpaqueCube() {
       return (false);
        }
    
    public boolean renderAsNormalBlock() {
            return (false);
        }
    }
    
    

    Avez vous une solution ?

    Merci d'avance.


  • Administrateurs

    Salut,
    Il suffit de jeter un coup d’œil a BlockGlass pour voir qu'il faut ajouter ces fonctions :

       @SideOnly(Side.CLIENT)
       public EnumWorldBlockLayer getBlockLayer()
       {
           return EnumWorldBlockLayer.CUTOUT;
       }
    
       public boolean isFullCube()
       {
           return false;
       }
    

    Et faire en sorte que son bloc soit extends BlockBreakable à la place de Block. (il faut ajouter false dans le constructeur).

    Pourquoi tu as une fonction init dans ton bloc ?



  • Regarde comment minecraft fait, il me semble que en 1.8 il y a un block comme cela : le barrier si je ne me trompe pas



  • Ah super, le bloc est bien invisible maintenant !  🙂

    Ma fonction init() sert à initialiser la texture dans l'inventaire  et les éventuelles recettes.
    La fonction est exécutée lors de la fonction init() de mon mod.

    Merci beaucoup 🙂


  • Administrateurs

    Mauvaise idée de faire ça comme.
    Les recettes doivent être enregistré côté serveur. La texture elle doit être côté client.
    La recette peut être mit sur les deux en même temps, ça ne cause pas de soucis. Par contre l'enregistrement de la texture dans l'inventaire va faire crasher ton serveur.



  • Ah ok, je ne savais pas, je n'ai pas encore testé le mod sur serveur.
    Merci de l'information 🙂



  • Par contre, j'ai également un étrange problème avec la texture du bloc dans l'inventaire.

    J'aimerai que la texture du bloc posée (totalement invisible) soit différente du bloc dans l'inventaire (avec des contours noirs).
    Pour cela, j'ai créer deux textures et tous les fichiers json qui vont avec.

    Le problème, c'est que la texture de l'inventaire n'est pas affichée (bloc rose/noir).

    As-tu une idée du problème ?



  • Je pense qu'il faut faire une classe ItemBlock pour cela.


  • Administrateurs

    Envoies un copier/coller des jsons.

    @**Snowy_1803 **non



  • Voici les jsons :

    /assets/wolfblocks/models/block/invisible_block

    {
    "parent": "block/cube_all",
    "textures": {
    "all": "wolfblocks:blocks/invisible_block"
    }
    }
    

    /assets/wolfblocks/models/item/invisible_block

    {
    "parent": "wolfblocks:block/invisible_block",
    "display": {
    "thirdperson": {
    "rotation": [ 10, -45, 170 ],
    "translation": [ 0, 1.5, -2.75 ],
    "scale": [ 0.375, 0.375, 0.375 ]
    }
    }
    }
    

    /assets/wolfblocks/blockstates/invisible_block

    {
    "variants": {
    "normal": { "model": "wolfblocks:invisible_block" }
    }
    }
    

    –------------------------------------------------------------

    /assets/wolfblocks/models/block/invisible_block_inventory

    {
    "parent": "block/cube_all",
    "textures": {
    "all": "wolfblocks:blocks/invisible_block_inventory"
    }
    }
    

    /assets/wolfblocks/models/item/invisible_block_inventory

    {
    "parent": "wolfblocks:block/invisible_block_inventory",
    "display": {
    "thirdperson": {
    "rotation": [ 10, -45, 170 ],
    "translation": [ 0, 1.5, -2.75 ],
    "scale": [ 0.375, 0.375, 0.375 ]
    }
    }
    }
    

    /assets/wolfblocks/blockstates/invisible_block_inventory

    {
    "variants": {
    "normal": { "model": "wolfblocks:invisible_block_inventory" }
    }
    }
    

  • Administrateurs

    /assets/wolfblocks/models/block/invisible_block_inventory -> supprimer
    /assets/wolfblocks/models/item/invisible_block_inventory -> supprimer
    /assets/wolfblocks/blockstates/invisible_block_inventory -> supprimer

    /assets/wolfblocks/models/item/invisible_block ->

    {
    "parent": "block/cube_all",
    "textures": {
    "all": "wolfblocks:blocks/invisible_block_inventory"
    }
    "display": {
    "thirdperson": {
    "rotation": [ 10, -45, 170 ],
    "translation": [ 0, 1.5, -2.75 ],
    "scale": [ 0.375, 0.375, 0.375 ]
    }
    }
    }
    


  • Ah, ça fonctionne parfaitement, merci beaucoup ! 😄