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 558 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.
    • 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