1.12.2 Problème de méthodes



  • Re-bonjour a tous,
    j'ai un autre problème.. (et oui, encore une fois...)
    Je suis entrain de coder une nouvelle dalle, comme je ne sais pas comment faire j'ai téléchargé le git hub d'un tutoriel de modding sur youtube d'un anglais ( désolé je ne me souvient plus du nom de la chaine ).
    Voici mes trois classes :
    Classe SlabBase :

    package fr.luky.feurimod.blocks;
    
    import fr.luky.feurimod.ModFeurimod;
    import fr.luky.feurimod.init.ModBlocks;
    import net.minecraft.block.Block;
    import net.minecraft.block.BlockSlab;
    import net.minecraft.block.material.Material;
    import net.minecraft.block.properties.IProperty;
    import net.minecraft.block.properties.PropertyEnum;
    import net.minecraft.block.state.BlockStateContainer;
    import net.minecraft.block.state.IBlockState;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.IStringSerializable;
    import net.minecraft.util.math.BlockPos;
    import net.minecraft.world.World;
    
    import java.util.Random;
    
    public class FeurimodSlabBase extends BlockSlab {
    
        Block half;
    
        public static final PropertyEnum<Variant> VARIANT = PropertyEnum.<Variant>create("variant", Variant.class);
    
        public FeurimodSlabBase(String name, Material materialIn, float hardness, float resistance, int harvestLevel, String harvestType) {
            super(materialIn);
    
            setRegistryName(name).setUnlocalizedName(name).setCreativeTab(ModFeurimod.feurimodTab);
            setHardness(hardness);
            setResistance(resistance);
            setHarvestLevel(harvestType, harvestLevel);
            this.useNeighborBrightness = !this.isDouble();
    
            IBlockState state = this.blockState.getBaseState().withProperty(VARIANT, Variant.DEFAULT);
            if (!this.isDouble()) state = state.withProperty(HALF, EnumBlockHalf.BOTTOM);
            setDefaultState(state);
    
            this.half = half;
    
            ModBlocks.INSTANCE.getBlocks().add(this);
        }
    
        @Override
        public Item getItemDropped(IBlockState state, Random rand, int fortune) {
            return Item.getItemFromBlock(half);
        }
    
        @Override
        public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) {
            return new ItemStack(half);
        }
    
        @Override
        public IBlockState getStateFromMeta(int meta) {
            IBlockState state = this.blockState.getBaseState().withProperty(VARIANT, Variant.DEFAULT);
            if (!this.isDouble()) state = state.withProperty(HALF, ((meta&8) != 0) ? EnumBlockHalf.TOP : EnumBlockHalf.BOTTOM);
            return state;
        }
    
        @Override
        public int getMetaFromState(IBlockState state) {
            int meta = 0;
            if (!this.isDouble() && state.getValue(HALF) == EnumBlockHalf.TOP) meta |= 8;
            return meta;
        }
    
        @Override
        protected BlockStateContainer createBlockState() {
            if (!this.isDouble()) return new BlockStateContainer(this, new IProperty[]{VARIANT, HALF});
            else return new BlockStateContainer(this, new IProperty[]{VARIANT});
        }
    
        @Override
        public String getUnlocalizedName(int meta) {
            return super.getUnlocalizedName();
        }
    
        @Override
        public IProperty<?> getVariantProperty() {
            return VARIANT;
        }
    
        @Override
        public Comparable<?> getTypeForItem(ItemStack stack) {
            return Variant.DEFAULT;
        }
    
        public static enum Variant implements IStringSerializable {
            DEFAULT;
    
    
            @Override
            public String getName() {
                return "default";
            }
        }
    }
    

    Classe HalfSlabBase :

    package fr.luky.feurimod.blocks;
    
    import net.minecraft.block.material.Material;
    
    public class FeurimodSlabHalfBase extends FeurimodSlabBase {
    
        public FeurimodSlabHalfBase(String name, Material materialIn, float hardness, float resistance, int harvestLevel, String harvestType) {
            super(name, materialIn, hardness, resistance, harvestLevel, harvestType);
        }
    
        @Override
        public boolean isDouble() {
            return true;
        }
    }
    

    et enfin ma classe DoubleSlabeBase :

    package fr.luky.feurimod.blocks;
    
    import net.minecraft.block.material.Material;
    
    public class FeurimodSlabDoubleBase extends FeurimodSlabBase {
    
        public FeurimodSlabDoubleBase(String name, Material materialIn, float hardness, float resistance, int harvestLevel, String harvestType) {
            super(name, materialIn, hardness, resistance, harvestLevel, harvestType);
        }
    
        @Override
        public boolean isDouble() {
            return true;
        }
    }
    

    Mon problème vien de ma classe SlabBase ou l'ide me dit qu'il manque la méthode isDouble().
    Comment faire pour résoudre ce problème ??
    Merci d'avance, Luky.



  • Bonjour !

    Ta class FeurimodSlabBase est héritée de BlockSlab qui contient la méthode abstract boolean isDouble() mais je ne la vois nulle part dans FeurimodSlabBase. A mon sens, le problème vient de là 🤔

    Bonne soirée !



  • Bonjour @Epharos ,
    C'est bien ce que je pensait😁
    Mais du coup je suis obligé de mettre TRUE ou FALSE dans ma classe FeurimodSlabBase...
    Que dois-je mettre ???



  • Finalement le problème est résolu : j'avais juste oublié la mention abstract dans Public class FeurimodSlabBase... (il freut le mettre entre public et class)

    Merci @Epharos pour votre aide et bonne journée à tous 😁😁



  • C'était la deuxième possibilité en effet de mettre ta class en abstraite, mais j'étais pas certain de cette façon de faire 😛


Log in to reply