Problème texture bloc four



  • Bonjour j'essaye depuis quelques heures de créer un bloc avec les textures comme un four (c'est à dire orientable et avec des texture différentes sur le dessus le devant et les cotés) voici mes essais

    {
        "variants": {
            "facing=north": { "model": "furnace" },
            "facing=south": { "model": "furnace", "y": 180 },
            "facing=west":  { "model": "furnace", "y": 270 },
            "facing=east":  { "model": "furnace", "y": 90 }
        }
    }
    
    

    avec celui-ci j'ai réussi a obtenir ma texture d'inventaire mais pas celle du bloc posé

    {
        "multipart": [{
            "when": {
    "orientation": "north"
            },
            "apply": {
                "model": "simpleores:custom_furnace"
            }
        }]
    }
    

    avec celle-ci et ses dérivés mon jeu crash voici ce que me dis mes logs

    ConditionPropertyValue{key=orientation, value=north}: Definition: BlockStateContainer{block=simpleores:custom_furnace, properties=[]} has no property: orientation
    
    

    en espérant avoir été suffisament claire dans mes explications



  • Premièrement, tu as un problème au niveau du nom de la property : dans le premier essai du met facing alors que dans le deuxième tu met orientation. Il va donc falloir se décider pour le nom.
    Deuxièmement, tu block n'as pas de property. Dans le code du block, tu devrais avoir ça :

    
    @Override
    protected BlockStateContainer createBlockState()
    {
        return new BlockStateContainer(this, new IProperty[] {TA_PROPERTY});
    }
    
    

  • Administrateurs

    Salut,
    Il faut rajouter une propriété orientation dans ton bloc.



  • Donc si j'ai bien compris ce que tu m'as dit je nomme ma propriété orientation et j'aimerais quelle est quatres valeurs possible south, north, west et east comment puis-je initialiserr cette propriété ?



  • Il existe déja des propriétés dans les classes de mc, que tu peux utiliser. Par Exemple dans BlockHorizontal, il y as ce que tu cherche. Par contre la propriété s’appelle facing, donc il faudra adapter le json .



  • Bonjour j'ai utiliser la propriété facing dont tu m'as parler et j'ai réessayer avec les deux json que j'ai mis au-dessus en remplaçant orientation par facing sans succès par contre les logs ont changé voici ce que j'ai maintenant

    Don't know how to convert simpleores:custom_furnace[facing=north] back into data…
    

    Je met ma classe au cas où

    package fr.priya.simpleores.blocks;
    
    import fr.priya.simpleores.ModSimpleores;
    import fr.priya.simpleores.gui.TileEntityCustomFurnace;
    import net.minecraft.block.Block;
    import net.minecraft.block.BlockHorizontal;
    import net.minecraft.block.material.Material;
    import net.minecraft.block.properties.IProperty;
    import net.minecraft.block.properties.PropertyDirection;
    import net.minecraft.block.state.BlockStateContainer;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.world.World;
    
    public class CustomFurnace extends Block{
    public static final String NAME = "custom_furnace";
         public static final PropertyDirection FACING = BlockHorizontal.FACING;
    
    public CustomFurnace(Material material)
    {
        super(material);
    
        SimpleoresBlocks.setBlockName(this, NAME);
        setResistance(5.0F);
        setHardness(3.0F);
        setCreativeTab(ModSimpleores.blocksTab);
    
    }
    public TileEntity createTileEntity(World world, int metadata)
    {
    return new TileEntityCustomFurnace();
    }
    public boolean hasTileEntity(int metadata)
    {
    return true;
    }
    @Override
    protected BlockStateContainer createBlockState()
       {
           return new BlockStateContainer(this, new IProperty[] {FACING});
       }
    }
    
    

    je pense que mon problème se situe dans ma classe car j'ai essaye sans le json et le bug persiste


  • Administrateurs

    Il faut ajouter les fonctions getStateFromMeta et getMetaFromState



  • J'ai bien rajouté les fonctions manquantes comme tu m'as indiqué maintenant j'arrive a avoir le rendu de mon four in-game quand je le pose mais il ne s'oriente pas voici mes rajouts

      public IBlockState getStateFromMeta(int meta)
       {
           EnumFacing enumfacing = EnumFacing.getFront(meta);
    
           if (enumfacing.getAxis() == EnumFacing.Axis.Y)
           {
               enumfacing = EnumFacing.NORTH;
           }
    
           return this.getDefaultState().withProperty(FACING, enumfacing);
       }
    }
    
    

    (je me suis inspirée de la classe four)
    et voici mon json aussi inspiré de celui du four

    {
       "variants": {
           "facing=north": { "model": "simpleores:custom_furnace" },
           "facing=south": { "model": "simpleores:custom_furnace", "y": 180 },
           "facing=west":  { "model": "simpleores:custom_furnace", "y": 270 },
           "facing=east":  { "model": "simpleores:custom_furnace", "y": 90 }
       }
    }
    
    

  • Administrateurs

    Normal, il manque encore la fonction changeant l'état du bloc en fonction de la direction du joueur lorsque tu poses le bloc.

    Regardes le code la citrouille / autres blocs avec orientation.



  • Merci beaucoup problème résolu je met le code complet pour ceux qui veulent

     @Override
    protected BlockStateContainer createBlockState()
       {
           return new BlockStateContainer(this, new IProperty[] {FACING});
       }
       public IBlockState getStateFromMeta(int meta)
       {
           EnumFacing enumfacing = EnumFacing.getFront(meta);
    
           if (enumfacing.getAxis() == EnumFacing.Axis.Y)
           {
               enumfacing = EnumFacing.NORTH;
           }
    
           return this.getDefaultState().withProperty(FACING, enumfacing);
       }
    
       public IBlockState withMirror(IBlockState state, Mirror mirrorIn)
       {
           return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING)));
       }
    
       public int getMetaFromState(IBlockState state)
       {
           return ((EnumFacing)state.getValue(FACING)).getIndex();
       }
    
       public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer)
       {
           return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite());
       }