MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Enlever les dégats d'explosion pour une armure

    Planifier Épinglé Verrouillé Déplacé Résolu 1.12.x
    1.12.2
    12 Messages 5 Publieurs 579 Vues 4 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par

      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.

      1 réponse Dernière réponse Répondre Citer 1
      • KporalK Hors-ligne
        Kporal
        dernière édition par

        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 ^^

        Check out my mod : https://www.curseforge.com/minecraft/mc-mods/eygo

        1 réponse Dernière réponse Répondre Citer 1
        • D Hors-ligne
          Drastic
          dernière édition par

          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);
                      }
                  }
              }
              
          }
          
          
          
          1 réponse Dernière réponse Répondre Citer 0
          • EpharosE Hors-ligne
            Epharos
            dernière édition par

            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);
            

            Les petits mods d'Epharos : [Trading Players] -> https://www.minecraftforgefrance.fr/topic/6023/trading-players-les-petits-mods-d-epharos

            1 réponse Dernière réponse Répondre Citer 0
            • D Hors-ligne
              Drastic
              dernière édition par

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

              1 réponse Dernière réponse Répondre Citer 0
              • EpharosE Hors-ligne
                Epharos
                dernière édition par

                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 :face_with_monocle:

                Les petits mods d'Epharos : [Trading Players] -> https://www.minecraftforgefrance.fr/topic/6023/trading-players-les-petits-mods-d-epharos

                D 1 réponse Dernière réponse Répondre Citer 0
                • D Hors-ligne
                  Drastic
                  dernière édition par

                  D’accord, je vais voir
                  Merci :beaming_face_with_smiling_eyes:

                  1 réponse Dernière réponse Répondre Citer 0
                  • D Hors-ligne
                    Drastic @Epharos
                    dernière édition par

                    @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);
                            }
                        }
                    }
                    
                    1 réponse Dernière réponse Répondre Citer 0
                    • D Hors-ligne
                      Drastic
                      dernière édition par

                      Ce message a été supprimé !
                      1 réponse Dernière réponse Répondre Citer 0
                      • AmaA Hors-ligne
                        Ama
                        dernière édition par

                        Oui ton event n’est jamais appelé

                        Si je t'ai filé un coup de main n'oublie pas le + / -
                        Par contre évite les demandes d'aides en MP, tu sera sympa'

                        La JavaDoc c'est comme le PQ, ça sert à ce démerder tous seul. -Victor Hugo- 2017

                        Une superbe API pour animer vos super modèles CraftStudio dans Minecraft !

                        1 réponse Dernière réponse Répondre Citer 1
                        • robin4002R Hors-ligne
                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                          dernière édition par

                          https://www.minecraftforgefrance.fr/topic/3948/les-événements

                          1 réponse Dernière réponse Répondre Citer 1
                          • 1 / 1
                          • Premier message
                            Dernier message
                          Design by Woryk
                          ContactMentions Légales

                          MINECRAFT FORGE FRANCE © 2024

                          Powered by NodeBB