1.12.2 Problème avec une plante



  • Bonjour,
    je suis actuellement en train de créer une plante pour mon mod. Tout fonctionne parfaitement (les drops, les graines etc...) mais lorsque je saute sur la farmland sur laquelle il y a ma plante, la farmland se transforme en dirt mais ma plante ne se détruit pas (c'est ce qui est censé se passer pour une plante normal comme les patates ou les carottes). Pourquoi est ce que la plante ne se détruit pas ? Je suis en 1.12.2. Voici le code :

    package fr.fulllager.elonia.blocks.crops;
    
    import java.util.Random;
    
    import fr.fulllager.elonia.init.ItemMod;
    import net.minecraft.block.BlockCrops;
    import net.minecraft.block.IGrowable;
    import net.minecraft.block.properties.PropertyInteger;
    import net.minecraft.block.state.IBlockState;
    import net.minecraft.init.Blocks;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemBlock;
    import net.minecraft.util.math.AxisAlignedBB;
    import net.minecraft.util.math.BlockPos;
    import net.minecraft.world.IBlockAccess;
    
    public class BlockCropsElonium extends BlockCrops implements IGrowable
    {
        public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 7);
        private static final AxisAlignedBB[] ELONIUM_AABB = new AxisAlignedBB[] {new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.125D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.25D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.375D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.625D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.75D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)};
    
        public BlockCropsElonium(String name) {
    		setUnlocalizedName(name);
    		setRegistryName(name);
    		setTickRandomly(true);
    		setDefaultState(blockState.getBaseState().withProperty(getAgeProperty(), Integer.valueOf(0)));
    	}
        
        public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
        {
            return ELONIUM_AABB[((Integer)state.getValue(this.getAgeProperty())).intValue()];
        }
        
    	protected Item getSeed()
    	{
    		Random r = new Random();
    		int nbr = r.nextInt(100);
    		if(nbr == 1) {
    			return ItemMod.elonium_seed;
    		}
    		else {
    			return ItemBlock.getItemFromBlock(Blocks.DIRT);
    		}
    	}
    	
    	protected Item getCrop()
        {
            Random r = new Random();
            int nbr = r.nextInt(1000);
    	if(nbr == 1) {		
                    return ItemMod.elonium_ingot;
    	}else if(nbr == 2 || nbr == 3){
    		return ItemMod.elonium_pepite;
    	}else {
    		return ItemBlock.getItemFromBlock(Blocks.DIRT);
    	}
        }
    }
    
    

    Merci par avance.



  • Merci beaucoup j'ai regarde la fonction et me susi rendu compte que je n'avais pas mis d'EnumPlantType. Je met le code ici si vous avez le même problème :

    @Override
    	public EnumPlantType getPlantType(IBlockAccess world, BlockPos pos) {
    		return EnumPlantType.Crop;
    	}
    	
    	@Override
    	public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, IPlantable plantable) {
    		IBlockState plant = plantable.getPlant(world, pos.offset(direction));
            net.minecraftforge.common.EnumPlantType plantType = plantable.getPlantType(world, pos.offset(direction));
            return this == net.minecraft.init.Blocks.FARMLAND;
    	}
    

    Merci


  • Moddeurs confirmés Rédacteurs Administrateurs

    Bonsoir,
    C'est la fonction canSustainPlant qui gère ça de mémoire.



  • J'ai essaye d'ajouter la fonction mais cela ne fonctionne toujours pas :

    package fr.fulllager.elonia.blocks.crops;
    
    import java.util.Random;
    
    import fr.fulllager.elonia.init.ItemMod;
    import net.minecraft.block.BlockBush;
    import net.minecraft.block.BlockCrops;
    import net.minecraft.block.BlockLiquid;
    import net.minecraft.block.IGrowable;
    import net.minecraft.block.material.Material;
    import net.minecraft.block.properties.PropertyInteger;
    import net.minecraft.block.state.IBlockState;
    import net.minecraft.init.Blocks;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemBlock;
    import net.minecraft.util.EnumFacing;
    import net.minecraft.util.math.AxisAlignedBB;
    import net.minecraft.util.math.BlockPos;
    import net.minecraft.world.IBlockAccess;
    import net.minecraftforge.common.IPlantable;
    
    public class BlockCropsElonium extends BlockCrops implements IGrowable
    {
        public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 7);
        private static final AxisAlignedBB[] ELONIUM_AABB = new AxisAlignedBB[] {new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.125D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.25D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.375D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.625D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.75D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)};
    
        public BlockCropsElonium(String name) {
    		setUnlocalizedName(name);
    		setRegistryName(name);
    		setTickRandomly(true);
    		setDefaultState(blockState.getBaseState().withProperty(getAgeProperty(), Integer.valueOf(0)));
    	}
        
        public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
        {
            return ELONIUM_AABB[((Integer)state.getValue(this.getAgeProperty())).intValue()];
        }
        
    	protected Item getSeed()
    	{
    		Random r = new Random();
    		int nbr = r.nextInt(100);
    		if(nbr == 1) {
    			return ItemMod.elonium_seed;
    		}
    		else {
    			return ItemBlock.getItemFromBlock(Blocks.DIRT);
    		}
    	}
    	
    	protected Item getCrop()
        {
            Random r = new Random();
    		int nbr = r.nextInt(1000);
    		if(nbr == 1) {
    			return ItemMod.elonium_ingot;
    		}else if(nbr == 2 || nbr == 3){
    			return ItemMod.elonium_pepite;
    		}else {
    			return ItemBlock.getItemFromBlock(Blocks.DIRT);
    		}
        }
    	
    	@Override
    	public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, IPlantable plantable) {
    		return super.canSustainPlant(state, world, pos, direction, plantable);
    		}
    }
    
    

    Est ce qu'il ne faudrait pas plutot que je recopie la fonction ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Non plus, il faut que tu implémentes la logique approprié.



  • Merci beaucoup j'ai regarde la fonction et me susi rendu compte que je n'avais pas mis d'EnumPlantType. Je met le code ici si vous avez le même problème :

    @Override
    	public EnumPlantType getPlantType(IBlockAccess world, BlockPos pos) {
    		return EnumPlantType.Crop;
    	}
    	
    	@Override
    	public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, IPlantable plantable) {
    		IBlockState plant = plantable.getPlant(world, pos.offset(direction));
            net.minecraftforge.common.EnumPlantType plantType = plantable.getPlantType(world, pos.offset(direction));
            return this == net.minecraft.init.Blocks.FARMLAND;
    	}
    

    Merci


  • Moddeurs confirmés Rédacteurs Administrateurs

    Merci pour le partage de la solution, cela servira surement à d'autres 😉


Log in to reply