1.12.2 Recette de four avec metadata



  • Bonjour, je veux faire cuire mon block, qui a une métadata, pour qu'il donne un item mais ca ne fonctionne pas.
    J'ai vérifié, avec un autre block (ou item), ca fonctionne bien.

            GameRegistry.addSmelting(new ItemStack(BlockInit.ORE_OVERWORLD, 1, 0), new ItemStack(ItemInit.tnt_ingot), 20.0F);
    

    Comment faire ?
    Merci. 😁


  • Moddeurs confirmés Rédacteurs Administrateurs

    Bonsoir,
    Le deuxième argument d'itemstack c'est la quantité, le metadata c'est le troisième.

    Ici tu mets l'item ayant le metadata 0, donc ça revient à la même chose que s'il n'y a avait pas de metadata.



  • @robin4002 d'accord mais ca ne marche toujours pas meme si je met 1.
    Pour meiux comprendre, voici la classe du block etc.

    Block

    public class BlockOreMod extends Block implements IHasModel, IMetaName
    {
        public static final PropertyEnum<EnumHandler.EnumType> VARIANT = PropertyEnum.<EnumHandler.EnumType>create("variant", EnumHandler.EnumType.class);
        
        private String name, dimension;
        
        public BlockOreMod(String name, String dimension)
        {
            super(Material.ROCK);
            setUnlocalizedName(name);
            setRegistryName(name);
            setCreativeTab(Main.GbTab);
            setHardness(4.0F);
            setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, EnumHandler.EnumType.TNT));
            
            this.name = name;
            this.dimension = dimension;
            
            BlockInit.BLOCKS.add(this);
            ItemInit.ITEMS.add(new ItemBlockVariants(this).setRegistryName(this.getRegistryName()));
        }
        
        @Override
        public int damageDropped(IBlockState state)
        {
            return ((EnumHandler.EnumType)state.getValue(VARIANT)).getMeta();
        }
        
        @Override
        public int getMetaFromState(IBlockState state)
        {
            return ((EnumHandler.EnumType)state.getValue(VARIANT)).getMeta();
        }
        
        @Override
        public IBlockState getStateFromMeta(int meta)
        {
            return this.getDefaultState().withProperty(VARIANT, EnumHandler.EnumType.byMetadata(meta));
        }
        
        @Override
        public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player)
        {
            return new ItemStack(Item.getItemFromBlock(this), 1, getMetaFromState(world.getBlockState(pos)));
        }
        
        @Override
        public void getSubBlocks(CreativeTabs itemIn, NonNullList<ItemStack> items)
        {
            for(EnumHandler.EnumType variant : EnumHandler.EnumType.values())
            {
                items.add(new ItemStack(this, 1, variant.getMeta()));
            }
        }
        
        @Override
        protected BlockStateContainer createBlockState()
        {
            return new BlockStateContainer(this, new IProperty[] {VARIANT});
        }
        
        @Override
        public String getSpeciaName(ItemStack stack)
        {
            return EnumHandler.EnumType.values() [stack.getItemDamage()].getName();
        }
        
        @Override
        public void registerModels()
        {
            for(int i = 0; i < EnumHandler.EnumType.values().length; i++)
            {
                Main.proxy.registerVariantRenderer(Item.getItemFromBlock(this), i, "ore_" + this.dimension + "_" + EnumHandler.EnumType.values()[i].getName(), "inventory");
            }
        }
        
    }
    

    IHasModel

    public interface IHasModel 
    {
        public void registerModels();
    }
    
    

    IMetaName

    public interface IMetaName
    {
        public String getSpeciaName(ItemStack stack);
    }
    

    EnumHandler

    public class EnumHandler
    {
        public static enum EnumType implements IStringSerializable
        {
            TNT(0, "tnt_ore"),
            URANIUM(1, "uranium");
            
            private static final EnumType[] META_LOOKUP = new EnumType[values().length];
            private final int meta;
            private final String name, unlocializedName;
            
            private EnumType(int meta,String name)
            {
                this(meta, name, name);
            }
            
            private EnumType(int meta,String name, String unlocializedName)
            {
                this.meta = meta;
                this.name = name;
                this.unlocializedName = unlocializedName;
            }
            
            @Override
            public String getName()
            {
                return this.name;
            }
            
            public int getMeta()
            {
                return this.meta;
            }
            
            public String getUnlocializedName()
            {
                return this.unlocializedName;
            }
            
            @Override
            public String toString()
            {
                return this.name;
            }
            
            public static EnumType byMetadata(int meta)
            {
                return META_LOOKUP[meta];
            }
            
            static
            {
                for(EnumType enumtype : values())
                {
                    META_LOOKUP[enumtype.getMeta()] = enumtype;
                }
            }
        }
    }
    


  • up 😰


Log in to reply