SOLVED Test d'un effect quand on touche un fluid raté


  • Bonsoir désolé pour mon inactivité sais dernier temps j’ai u un gros problem de pc , Bref nous attardons pas la.

    j’ai donc crée un fluid et dans la class BlockFluid j’ai rajouté sa :
    :::
    public void onEntityCollidedWithBlock(World par1, int par2, int par3, EntityPlayer par4, Entity par5)

    {     
        par4.addPotionEffect(new PotionEffect(Potion.confusion.getId(), 400, 0, true));
        }
    :::

    mais quand je vais sur mon liquide rien ne se passe .
    Donc si qu’elle qu’un serais comment faire merci .

    la class du block fluid :

    :::
    import net.minecraft.block.material.Material;

    import net.minecraft.client.renderer.texture.IIconRegister;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.potion.Potion;
    import net.minecraft.potion.PotionEffect;
    import net.minecraft.util.AxisAlignedBB;
    import net.minecraft.util.IIcon;
    import net.minecraft.world.IBlockAccess;
    import net.minecraft.world.World;
    import net.minecraftforge.fluids.BlockFluidClassic;
    import net.minecraftforge.fluids.Fluid;

    public class blockFuildMagic extends BlockFluidClassic
    {
        private IIcon stillIcon, flowingIcon;

    public blockFuildMagic(Fluid fluid, Material material)
        {
            super(fluid, material);
        }

    public IIcon getIcon(int side, int meta)
        {
            return (side == 0 || side == 1) ? stillIcon : flowingIcon;
        }

    public void registerBlockIcons(IIconRegister register)
        {
            stillIcon = register.registerIcon(“ModAnaxia:magic_fluid_still”);
            flowingIcon = register.registerIcon(“ModAnaxia:magic_fluid_flow”);
        }

    public boolean canDisplace(IBlockAccess world, int x, int y, int z)
        {
            if(world.getBlock(x, y, z).getMaterial().isLiquid())
            {
                return false;
            }
            return super.canDisplace(world, x, y, z);
        }

    public boolean displaceIfPossible(World world, int x, int y, int z)
        {
            if(world.getBlock(x, y, z).getMaterial().isLiquid())
            {
                return false;
            }
            return super.displaceIfPossible(world, x, y, z);
        }
        public void onEntityCollidedWithBlock(World par1, int par2, int par3, EntityPlayer par4, Entity par5)
        {     
        par4.addPotionEffect(new PotionEffect(Potion.confusion.getId(), 400, 0, true));
        }
     }
    :::

  • Administrateurs Rédacteurs Moddeurs confirmés

    Parce que tu as les mauvais argument. La bonne fonction est :
        public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity)
    Et comme la fonction entity n’a pas la fonction addPotionEffect, il faut passer par un instanceof et un cast de EntityLivingBase :
    https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotechmod/main/blocks/BlockLiquidNitrogen.java#L79-L86


  • Pour les problèmes d’arguments je vous conseille de faire Alt + shift + s puis “override or implement methods” ce qui vous empêchera de vous tromper d’argument.


  • merci sa marche niquel !
    Bonne soirée


  • si c’est resolu passe le en RESOLU que quelqu’un le deplace