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 556 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.
    • D Hors-ligne
      Drastic
      dernière édition par

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

      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

          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