MFF

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

    Patcher la valeur des armures vanilla

    Planifier Épinglé Verrouillé Déplacé Non résolu Sans suite
    1.12.2
    2 Messages 2 Publieurs 165 Vues 2 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.
    • En0ri4nE Hors-ligne
      En0ri4n
      dernière édition par

      Bonjour à tous !
      Je viens ici pour vous demandez comment faire pour patcher la valeur des armures, j’y suis arrivé mais je n’arrive pas à appliquer l’armure quand on prend un dégat :

      @SubscribeEvent
      	public static void onDamage(LivingDamageEvent event)
      	{
      		if(!(event.getEntity() instanceof EntityPlayer)) return;
      
      		EntityPlayer player = (EntityPlayer) event.getEntityLiving();
      		
      		float damageAmount = 0;
      		DamageSource damageSrc = event.getSource();
      
      		damageAmount = event.getAmount();
              if (damageAmount <= 0) return;
              damageAmount = applyArmorCalculations(player, damageSrc, damageAmount);
              damageAmount = applyPotionDamageCalculations(player, damageSrc, damageAmount);
              float f = damageAmount;
              damageAmount = Math.max(damageAmount - player.getAbsorptionAmount(), 0.0F);
              player.setAbsorptionAmount(player.getAbsorptionAmount() - (f - damageAmount));
              
              if (damageAmount != 0.0F)
              {
                  float f1 = player.getHealth();
                  player.getCombatTracker().trackDamage(damageSrc, f1, damageAmount);
                  player.setHealth(f1 - damageAmount);
                  player.setAbsorptionAmount(player.getAbsorptionAmount() - damageAmount);
              }
      
              player.sendMessage(new TextComponentString("Damage : " + damageAmount));
      	}
      	
      	protected static float applyArmorCalculations(EntityPlayer player, DamageSource source, float damage)
          {
              if (!source.isUnblockable())
              {
                  player.inventory.damageArmor(damage);
                  damage = getDamageAfterAbsorb(damage, ArmorUtils.getTotalArmorValue(player), (float) player.getEntityAttribute(SharedMonsterAttributes.ARMOR_TOUGHNESS).getAttributeValue());
              }
      
              return damage;
          }
      	
      	protected static float applyPotionDamageCalculations(EntityPlayer player, DamageSource source, float damage)
          {
              if (source.isDamageAbsolute())
              {
                  return damage;
              }
              else
              {
                  if (player.isPotionActive(MobEffects.RESISTANCE) && source != DamageSource.OUT_OF_WORLD)
                  {
                      int i = (player.getActivePotionEffect(MobEffects.RESISTANCE).getAmplifier() + 1) * 5;
                      int j = 25 - i;
                      float f = damage * (float)j;
                      damage = f / 25.0F;
                  }
      
                  if (damage <= 0.0F)
                  {
                      return 0.0F;
                  }
                  else
                  {
                      int k = EnchantmentHelper.getEnchantmentModifierDamage(player.getArmorInventoryList(), source);
      
                      if (k > 0)
                      {
                          damage = getDamageAfterMagicAbsorb(damage, (float)k);
                      }
      
                      return damage;
                  }
              }
          }
      	
      	public static float getDamageAfterAbsorb(float damage, float totalArmor, float toughnessAttribute)
          {
              float f = 2.0F + toughnessAttribute / 4.0F;
              float f1 = totalArmor - damage / f;
              
              if(f1 < 0)
              	f1 = 0.1f;
              
              return damage * (1.0F - f1 / 25.0F);
          }
      
          public static float getDamageAfterMagicAbsorb(float damage, float enchantModifiers)
          {
              float f = enchantModifiers;
              
              if(f < 0)
              	f = 0f;
              
              return damage * (1.0F - f / 25.0F);
          }
      }
      

      ArmorUtils :

      public class ArmorUtils
      {
      	private static int armorValue = 0;
      	
      	public static int getTotalArmorValue(Entity entity)
      	{
      		armorValue = 0;
      		
      		entity.getArmorInventoryList().forEach(armorStack ->
      		{
      			if(armorStack != null || armorStack != ItemStack.EMPTY)
      			{
      				try
      				{
      					ItemArmor armorItem = (ItemArmor) armorStack.getItem();
      					armorValue += armorItem.damageReduceAmount;
      				}
      				catch(Exception e) {}
      			}
      		});		
      		return armorValue;
      	}
      }
      

      Désolé mon code c’est un peu le bordel :grinning_face_with_sweat:

      Le java c'est comme une boîte de chocolat, on sait jamais sur quoi on va tomber !

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

        Salut,
        https://www.minecraftforge.net/forum/topic/38913-189-changing-vanilla-armor-values/

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

        MINECRAFT FORGE FRANCE © 2024

        Powered by NodeBB