1.12.2 Enlever les dégats d'explosion pour une armure



  • Bonjour, je suis à la recherche de comment faire pour que mon armure immunise le joueur contre les dégats d'explosion.
    Si quelqu'un a la solution je le remercierai.😊
    Bonne journée 😁



  • Oui ton event n'est jamais appelé


  • Moddeurs confirmés Rédacteurs Administrateurs

    Bonsoir,
    Regardes du côté de l'event LivingDamageEvent.
    Avec event.getSource().isExplosion() tu peux savoir si les dégats viennent d'une explosion, reste à vérifier si le joueur à l'armure et cancel l'event.



  • Salut, le plus simple et sans doute le plus propre est de passer par les events, en outre LivingDamageEvent, tu récupère l'entité ( event.getEntity() instanceof EntityPlayer ), puis la source des dégâts, je n'ai pas de méthode en tête, de la tu vérifie les slots d'armure du joueur et si c'est ok event.setCanceled( true ) c'est basique mais sa devrait suffire ^^



  • Désolé de redemander mais, j'ai mis comme la bonne réponse trop rapidement. Ca ne va pas.
    Quelqu'un pourrait me dire pourquoi ?

    package com.drastic.mod.init.objects.armour;
    
    import com.drastic.mod.Main;
    import com.drastic.mod.init.ItemInit;
    import com.drastic.mod.util.IHasModel;
    
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.enchantment.EnchantmentHelper;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.init.Enchantments;
    import net.minecraft.init.MobEffects;
    import net.minecraft.inventory.EntityEquipmentSlot;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemArmor;
    import net.minecraft.item.ItemStack;
    import net.minecraft.potion.Potion;
    import net.minecraft.potion.PotionEffect;
    import net.minecraft.util.DamageSource;
    import net.minecraft.util.math.MathHelper;
    import net.minecraft.world.World;
    import net.minecraftforge.event.entity.living.LivingDamageEvent;
    import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
    import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
    
    public class ArmourMod extends ItemArmor implements IHasModel
    {
        public static boolean isC, isH, isL, isB;
    
        public ArmourMod(String name, ArmorMaterial materialIn, int renderIndexIn, EntityEquipmentSlot equipmentSlotIn)
        {
            super(materialIn, renderIndexIn, equipmentSlotIn);
            setUnlocalizedName(name);
            setRegistryName(name);
            setCreativeTab(CreativeTabs.COMBAT);
            ItemInit.ITEMS.add(this);
        }
    
        @Override
        public void registerModels()
        {
            Main.proxy.registerItemRederer(this, 0);        
        }
        
        @Override
        public void onArmorTick(World world, EntityPlayer player, ItemStack stack)
        {
            if(isFullSet(player))
            {
                if(player.isBurning())
                {
                    player.addPotionEffect(new PotionEffect(MobEffects.FIRE_RESISTANCE, 5, 0, true, false));
                }
                if(player.isInWater())
                {
                    player.addPotionEffect(new PotionEffect(MobEffects.WATER_BREATHING, 5, 0, true, false));
                }
                if(player.isPotionActive(MobEffects.POISON))
                {
                    player.removePotionEffect(MobEffects.POISON);
                }
                if(player.isPotionActive(MobEffects.SLOWNESS))
                {
                    player.removePotionEffect(MobEffects.SLOWNESS);
                }
                if(player.isPotionActive(MobEffects.HUNGER))
                {
                    player.removePotionEffect(MobEffects.HUNGER);
                }
                if(player.isPotionActive(MobEffects.BLINDNESS))
                {
                    player.removePotionEffect(MobEffects.BLINDNESS);
                }
                if(player.getHealth() < 5)
                {
                    player.addPotionEffect(new PotionEffect(MobEffects.REGENERATION, 5, 0, true, false));
                }
                
                player.addPotionEffect(new PotionEffect(MobEffects.RESISTANCE, 5, 0, true, false));
                player.addPotionEffect(new PotionEffect(MobEffects.STRENGTH, 5, 0, true, false));
                player.addPotionEffect(new PotionEffect(MobEffects.JUMP_BOOST, 5, 1, true, false));
                player.addPotionEffect(new PotionEffect(MobEffects.HASTE, 5, 0, true, false));
                player.capabilities.allowFlying = true;
                player.capabilities.setPlayerWalkSpeed(0.2F);
                player.capabilities.setFlySpeed(0.2F);
    
            }
            else
            {
                player.capabilities.allowFlying = false;
                player.capabilities.isFlying = false;
                player.capabilities.setPlayerWalkSpeed(0.1F);
                player.capabilities.setFlySpeed(0.1F);
            }
    
            super.onArmorTick(world, player, stack);        
        }
        
        public static boolean isFullSet(EntityPlayer player){       
            ItemStack head = player.getItemStackFromSlot(EntityEquipmentSlot.HEAD);
            ItemStack chest = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
            ItemStack legs = player.getItemStackFromSlot(EntityEquipmentSlot.LEGS);
            ItemStack feet = player.getItemStackFromSlot(EntityEquipmentSlot.FEET);
            
            return !head.isEmpty() && head.getItem() instanceof ArmourMod && !chest.isEmpty() && chest.getItem() instanceof ArmourMod && !legs.isEmpty() && legs.getItem() instanceof ArmourMod && !feet.isEmpty() && feet.getItem() instanceof ArmourMod;
        }
        
        public static void noBlastDamage(LivingDamageEvent e, EntityPlayer player)
        {
            if(e.getSource().isExplosion()) 
            {   
                if(isFullSet(player))
                {
                    e.setCanceled(true);
                }
            }
        }
        
    }
    
    
    


  • Je pense que ce dont ils parlaient c'est dans ta classe où tu souscris aux évènements (avec l'annotation SubscribeEvent) c'est de souscrire à l'event LivingDamageEvent

    @SubscribeEvent
    public static void onLivingGettingHit(LivingDamageEvent event)
    {
        
    }
    

    de vérifier si l'entité affectée par l'event est le joueur et si la source est une explosion

    if(event.getEntity() instanceof EntityPlayer && event.getSource().isExplosion())
    

    et dans ce cas là, tu annules

    event.setCanceled(true);
    


  • Et quelle est cette class ? la principale , la registryHandler ?
    Merci



  • La classe où tu as mis ton

    @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
    

    ou ton

    MinecraftForge.EVENT_BUS.register(this);
    

    personnellement, je l'ai dans ma classe principale 🧐



  • D'accord, je vais voir
    Merci 😁



  • @Epharos Malheureusement, ca ne va pas.
    Il y a t il un problème dans mon code ?

    package com.drastic.mod;
    
    import com.drastic.mod.init.objects.armour.ArmourMod;
    import com.drastic.mod.proxy.CommonProxy;
    import com.drastic.mod.util.Reference;
    import com.drastic.mod.util.handlers.RegistryHandler;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraftforge.event.entity.living.LivingDamageEvent;
    import net.minecraftforge.fml.common.Mod;
    import net.minecraftforge.fml.common.Mod.EventHandler;
    import net.minecraftforge.fml.common.Mod.Instance;
    import net.minecraftforge.fml.common.SidedProxy;
    import net.minecraftforge.fml.common.event.FMLInitializationEvent;
    import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
    import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
    import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
    
    @Mod(modid = Reference.MODID, name = Reference.NAME, version = Reference.VERSION)
    public class Main
    {
        @Instance
        public static Main instance;
        
        @SidedProxy(clientSide = Reference.CLIENT, serverSide = Reference.COMMON)
        public static CommonProxy proxy;
        
        @EventHandler
        public static void preInit(FMLPreInitializationEvent e)
        {
            RegistryHandler.preInitRegistries();
        }
        
        @EventHandler
        public static void init(FMLInitializationEvent e)
        {
            RegistryHandler.initRegistries();
        }
        
        @EventHandler
        public static void postInit(FMLPostInitializationEvent e)
        {
            
        }
        
        @SubscribeEvent
        public static void noBlastDamage(LivingDamageEvent event)
        {
     
            if(event.getEntity() instanceof EntityPlayer && event.getSource().isExplosion())
            {
                event.setCanceled(true);
            }
        }
    }
    


  • This post is deleted!


  • Oui ton event n'est jamais appelé


  • Moddeurs confirmés Rédacteurs Administrateurs


Log in to reply