源码-魔法金属伤害计算

  1. 1. 总览
    1. 1.0.1. 位置
    2. 1.0.2. 源码
    3. 1.0.3. 前言
  • 2. 解读
    1. 2.0.1. 概念
    2. 2.0.2. 逐步解释


  • 总览

    位置

    - project.studio.manametalmod
        - event
            - EventFx.class
                    - void combatAttack(LivingHurtEvent event)

    源码

    点此展开
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364

    @SubscribeEvent(priority = EventPriority.HIGHEST)
    public void combatAttack(LivingHurtEvent event) {
    try {
    if (event.source.func_76346_g() != null && event.source.func_76346_g() instanceof EntityPlayer && !(event.source.func_76346_g() instanceof net.minecraftforge.common.util.FakePlayer)) {
    int true_physical_attack, true_magic_attack;
    if (MMM.getDimensionID(event.entity.field_70170_p) == M3Config.WorldFutureID)
    return;
    Random random = event.entityLiving.field_70170_p.field_73012_v;
    EntityPlayer player = (EntityPlayer)event.source.func_76346_g();
    ItemStack item = player.func_71045_bC();
    int Crit = 0;
    int critBase = 0;
    float Attack = 1.0F;
    boolean cantrigger = true;
    boolean canInfluencesDamage = true;
    AttackEffect data = new AttackEffect();
    float hp_blood = 0.0F;
    float max_attack_damage = (float)M3Config.GlobalMaxDamage;
    int PenetrationBase = 0;
    int CritGame = random.nextInt(100);
    boolean isCritAttack = false;
    ManaMetalModRoot rootPlayer = MMM.getEntityNBT(player);
    ManaMetalModRoot rootTarget = MMM.getEntityNBT(event.entityLiving);
    int armorM = event.entityLiving.func_70658_aO();
    boolean isDarkPower = false;
    int goldPower = 0;
    ManaElements Elements = null;
    SpellType type = null;
    WeaponType attackType = MMM.getWeaponTypeSource(item, event.source);
    boolean isBoss = MMM.isEntityBoss((Entity)event.entityLiving);
    boolean isLegendEntity = event.entityLiving instanceof project.studio.manametalmod.api.ILegendEntity;
    int enchantmentLV = 0;
    int monsterPenetratingDefense = 0;
    boolean isIEntityData = event.entityLiving instanceof IEntityData;
    float toughness = 0.0F;
    EnchantmentsKeyEffect keyeffect = null;
    if (item == null) {
    event.ammount = 1.0F;
    return;
    }
    if (rootPlayer == null || rootTarget == null)
    return;
    if (!MMM.isPlayerCreativeMode(player) && PotionEffectM3.isPotion(rootPlayer, PotionM3.potionPlayerDef)) {
    event.setCanceled(true);
    return;
    }
    if (player == event.entityLiving) {
    event.setCanceled(true);
    event.ammount = 0.0F;
    return;
    }
    if (item != null &&
    ManaMetalAPI.ItemDamageBlackList.containsKey(item.func_77973_b())) {
    event.ammount = ((Integer)ManaMetalAPI.ItemDamageBlackList.get(item.func_77973_b())).intValue();
    return;
    }
    if (event.entityLiving instanceof IJobAdvEntity) {
    IJobAdvEntity IJobAdvEntitys = (IJobAdvEntity)event.entityLiving;
    if (!IJobAdvEntitys.canPlayerAttackThis(player, rootPlayer.carrer.isTransfer2())) {
    event.ammount = 1.0F;
    return;
    }
    }
    if (MMM.playerCanUseWeapon(player, rootPlayer) == UseWeaponResult.fail)
    return;
    if (event.source.field_76373_n != null &&
    event.source.field_76373_n.equals("thorns")) {
    int max_thorns_damage = 100 * rootPlayer.carrer.getLv();
    if (player.func_70032_d((Entity)event.entityLiving) > 4.0F) {
    event.ammount = 0.0F;
    event.setCanceled(true);
    return;
    }
    if (event.ammount > max_thorns_damage)
    event.ammount = max_thorns_damage;
    return;
    }
    if (item.func_77973_b() == ManaMetalMod.GodSword) {
    event.ammount = 1.0E8F;
    if (!(event.entityLiving instanceof EntityPlayer))
    addDamageFX(event, false, player, rootPlayer);
    if (event.entityLiving instanceof net.minecraft.entity.boss.IBossDisplayData) {
    rootTarget.ManaEntityData.addbossRewardName(player, rootPlayer);
    int i = rootPlayer.carrer.getDropRate() + data.drop_temp;
    List<PotionEffectM3> list = PotionEffectM3.getPotions(rootPlayer);
    i += PotionData.getDrop(list);
    if (i > rootTarget.ManaEntityData.drop)
    rootTarget.ManaEntityData.drop = i;
    }
    if (event.entityLiving instanceof IDungeonBoss) {
    IDungeonBoss boss = (IDungeonBoss)event.entityLiving;
    if (boss.isBoss()) {
    rootTarget.ManaEntityData.addbossRewardName(player, rootPlayer);
    int i = rootPlayer.carrer.getDropRate() + data.drop_temp;
    List<PotionEffectM3> list = PotionEffectM3.getPotions(rootPlayer);
    i += PotionData.getDrop(list);
    if (i > rootTarget.ManaEntityData.drop)
    rootTarget.ManaEntityData.drop = i;
    }
    }
    return;
    }
    event.source.func_151518_m();
    event.source.func_76348_h();
    if (MMM.isTinkersConstruct && TConstructCore.isTCWeapon(item))
    event.ammount *= 12.0F;
    if (ManaMetalAPI.ItemAttackBalance.containsKey(item.func_77973_b())) {
    BattleType typebattle = (BattleType)ManaMetalAPI.ItemAttackBalance.get(item.func_77973_b());
    event.ammount += typebattle.attack;
    attackType = typebattle.type;
    type = typebattle.spellTypeBase;
    }
    if (MMM.isAether)
    EventAetherM3.doEffectAttack(data, player);
    rootPlayer.carrer.lastAttackTarget = event.entityLiving;
    rootPlayer.mana.magicReliefTemp = 0.0F;
    if (rootPlayer.carrer.isTransfer2())
    max_attack_damage = (float)M3Config.GlobalMaxDamage2;
    if (event.source instanceof EntityDamageSourceElement) {
    EntityDamageSourceElement soure = (EntityDamageSourceElement)event.source;
    type = soure.spell;
    Elements = soure.Element;
    attackType = soure.weapon;
    cantrigger = soure.canTrigger;
    canInfluencesDamage = soure.canInfluencesDamage;
    }
    ArmorEffect.doEffectAttackKit(player, data, cantrigger, event, rootPlayer, rootTarget);
    WeaponEffect.doEffectAttack(data, MMM.getWeaponToolMaterial(item), player, event.entityLiving, rootPlayer, rootTarget, event.source, event.ammount, cantrigger, item);
    EventSpecialization.doEffectAttack(data, player, event.entityLiving, rootPlayer, rootTarget, event.source, event.ammount, cantrigger, attackType);
    CastingEffect.doEffectAttack(data, item, player, cantrigger, attackType);
    MagicJadeRed.getAttackEffect(data, player, event.entityLiving, event.source, rootPlayer, rootTarget, event.ammount, false, false);
    DamageSystemEvent.doDamageAttack(data, player, event.source, rootPlayer, rootTarget);
    FoodSystem.doEffect(data, player, rootPlayer);
    ArmorEffect.doArmorData(data, player, event.entityLiving, rootPlayer, rootTarget, event.source, event.ammount, true);
    QuenchingJadeCore.doEffectAttack(data, item, player, cantrigger);
    PotionData.potionEffect(player, data, cantrigger, event.entityLiving, rootPlayer, rootTarget, attackType, true);
    event.ammount += ItemStrengthenHelp.getWeaponAttackRoll(item) * ItemStrengthenHelp.getWeaponStrPower(item.func_77973_b());
    ItemStrengthenHelp.getWeaponStarEvent(item, data, player, event.entityLiving, rootPlayer, rootTarget, event.source, event.ammount, cantrigger);
    SpiritualPower.doEffectAttack(data, player, event.entityLiving, rootPlayer, rootTarget);
    isDarkPower = ItemStrengthenHelp.darkPower(item, player, rootPlayer, data);
    AttackEffect.add(data, rootPlayer.carrer.effect_hotpot);
    AttackEffect.add(data, rootPlayer.carrer.effect_poison);
    EventSpell.attack(item, data, player, event.entityLiving, rootPlayer, rootTarget, event.source, event.ammount);
    ArcheologyCore.attack(data, player, event.entityLiving, event.source, rootPlayer, rootTarget);
    TileEntitySacrificialCeremony.effect(data, player, event.entityLiving, event.source, rootPlayer, rootTarget);
    if (CareerCore.testPlayerWeapon(player, CareerCore.getPlayerCarrer(player)))
    Attack += 0.5F;
    if (rootPlayer.carrer.isTransfer2())
    event.ammount += (5 * rootPlayer.carrer.getSpellLV_2()[4]);
    if (item.field_77990_d != null && item.field_77990_d.func_150297_b("Gilded", 3)) {
    goldPower = item.field_77990_d.func_74762_e("Gilded");
    Attack += 0.1F * goldPower;
    }
    if (item.func_77973_b() instanceof IFXItem && cantrigger) {
    IFXItem fxitem = (IFXItem)item.func_77973_b();
    fxitem.eventOnHit(data, player, event.entityLiving, event.source, rootPlayer, rootTarget, event.ammount, cantrigger);
    }
    if (attackType != null)
    switch (attackType) {
    case PhysicalMelee:
    enchantmentLV = EnchantmentHelper.func_77506_a(Enchantment.field_77338_j.field_77352_x, item);
    event.ammount += rootPlayer.carrer.getPhysicalAttack();
    event.ammount += data.attack_base_physical;
    data.attack += 0.01F * rootPlayer.carrer.getPowerPoint();
    break;
    case PhysicalRange:
    enchantmentLV = EnchantmentHelper.func_77506_a(Enchantment.field_77345_t.field_77352_x, item);
    event.ammount += rootPlayer.carrer.getPhysicalAttack();
    event.ammount += rootPlayer.carrer.getArrowAttack();
    event.ammount += data.attack_base_physical;
    data.attack += 0.01F * rootPlayer.carrer.getAgilePoint();
    break;
    case Magic:
    enchantmentLV = EnchantmentHelper.func_77506_a(ItemCraft10.ManaATK.field_77352_x, item);
    event.ammount += rootPlayer.carrer.getMagicAttack();
    event.ammount += data.attack_base_magic;
    data.attack += 0.01F * rootPlayer.carrer.getIntelligencePoint();
    break;
    }
    event.ammount += rootPlayer.carrer.mixAttack;
    if (enchantmentLV > 0) {
    event.ammount += (5 * enchantmentLV);
    Attack += 0.1F * enchantmentLV;
    }
    max_attack_damage += data.max_attack_base;
    max_attack_damage += rootPlayer.carrer.getMAXdamage();
    if (event.source instanceof EntityDamageSourceElement)
    max_attack_damage += ((EntityDamageSourceElement)event.source).max_damage_effect;
    max_attack_damage *= 1.0F + data.max_attack;
    critBase += data.crit;
    Attack += data.attack;
    Attack += rootPlayer.carrer.getAttackMultiplier();
    hp_blood += data.hp_blood;
    PenetrationBase += data.penetration_base;
    event.ammount += data.attack_base;
    data.final_attack += rootPlayer.carrer.finalDamage;
    rootPlayer.carrer.extra_xpadd = data.xp;
    data.career_increase += rootPlayer.carrer.career_increase;
    if (event.entityLiving instanceof IDungeonBoss)
    keyeffect = ((IDungeonBoss)event.entityLiving).getKeyEffect();
    if (event.entityLiving instanceof net.minecraft.entity.boss.IBossDisplayData)
    rootTarget.ManaEntityData.addbossRewardName(player, rootPlayer);
    if (event.entityLiving instanceof IDungeonBoss) {
    IDungeonBoss boss = (IDungeonBoss)event.entityLiving;
    if (boss.isBoss())
    rootTarget.ManaEntityData.addbossRewardName(player, rootPlayer);
    }
    Crit = rootPlayer.crit.getCritProbability(critBase);
    if (Crit > 0) {
    if (Crit > 100)
    Crit = 100;
    if (CritGame < Crit) {
    isCritAttack = true;
    Attack += rootPlayer.carrer.getCritDamage();
    float crittemp = rootPlayer.carrer.getConPoint() * 0.003F;
    if (crittemp > 1.0F)
    crittemp = 1.0F;
    if (M3Config.UseBalancedDietSystem)
    crittemp += rootPlayer.carrer.food_data[4] * 0.01F;
    crittemp += data.critDamage;
    Attack += crittemp;
    }
    }
    if (isBoss) {
    Attack += rootPlayer.carrer.boss_attackMultiplier;
    event.ammount += rootPlayer.carrer.boss_attack;
    data.final_attack += rootPlayer.carrer.boss_final_attackMultiplier;
    }
    if (!isBoss) {
    Attack += rootPlayer.carrer.monster_attackMultiplier;
    event.ammount += rootPlayer.carrer.monster_attack;
    data.final_attack += rootPlayer.carrer.monster_final_attackMultiplier;
    }
    if (M3Config.SoloMode)
    data.career_increase += 0.5F;
    if (canInfluencesDamage) {
    event.ammount *= Attack;
    event.ammount += event.ammount * data.final_attack;
    event.ammount += event.ammount * data.career_increase;
    event.ammount += data.no_tack_damage;
    }
    if (GameDifficult.getWorldDifficult().ordinal() > 0) {
    float difficult = 0.1F * GameDifficult.getWorldDifficult().ordinal();
    event.ammount *= 1.0F - difficult;
    }
    if (M3Config.UltimateDifficultyMode)
    event.ammount *= 0.1F;
    int playerLose = rootTarget.ManaEntityData.getLV() - rootPlayer.carrer.getLv();
    if (playerLose > 0)
    if (isLegendEntity) {
    event.ammount -= event.ammount * playerLose * 0.1F;
    } else {
    event.ammount -= event.ammount * playerLose * 0.05F;
    }
    monsterPenetratingDefense = rootTarget.ManaEntityData.getPenetrationDefense();
    if (isIEntityData)
    monsterPenetratingDefense = ((IEntityData)event.entityLiving).getPenetrationDefense();
    if (keyeffect != null)
    monsterPenetratingDefense = (int)(monsterPenetratingDefense + keyeffect.getEffect(EnchantmentsKeyEffectType.enemyPenetratingDefenseBuff));
    monsterPenetratingDefense -= data.lower_penetration_defense;
    if (monsterPenetratingDefense > 0 && rootPlayer.carrer.getPenetrate() + PenetrationBase < monsterPenetratingDefense) {
    float penetrationDefense = monsterPenetratingDefense;
    float playerPenetrate = (rootPlayer.carrer.getPenetrate() + PenetrationBase);
    float damageTamp = 1.0F;
    if (isLegendEntity) {
    damageTamp = (playerPenetrate * 2.0F - penetrationDefense) / penetrationDefense;
    } else {
    damageTamp = playerPenetrate / penetrationDefense;
    }
    if (damageTamp > 1.0F)
    damageTamp = 1.0F;
    if (damageTamp < 0.3F)
    damageTamp = 0.3F;
    event.ammount *= damageTamp;
    }
    if (isIEntityData) {
    IEntityData ie = (IEntityData)event.entityLiving;
    float dark_shield = ie.getShield()[0];
    float gold_shield = ie.getShield()[1];
    if (dark_shield > 0.0F &&
    !isDarkPower)
    event.ammount -= dark_shield * event.ammount;
    if (gold_shield > 0.0F &&
    goldPower < 3)
    event.ammount -= gold_shield * (3 - goldPower) * event.ammount;
    }
    if (isIEntityData)
    toughness = ((IEntityData)event.entityLiving).getDefense() - data.lower_toughness;
    if (keyeffect != null)
    toughness += keyeffect.getEffect(EnchantmentsKeyEffectType.enemyToughnessBuff);
    toughness -= data.lower_toughness;
    if (toughness > 0.0F) {
    if (toughness > 0.95F)
    toughness = 0.95F;
    event.ammount -= event.ammount * toughness;
    }
    if (PotionEffectM3.isPotion(rootTarget, PotionM3.potionAbsoluteTenacity))
    event.ammount *= 0.1F;
    switch (attackType) {
    case PhysicalMelee:
    true_physical_attack = data.true_physical_attack + rootPlayer.carrer.true_physical_attack;
    if (true_physical_attack > 0)
    event.ammount += true_physical_attack;
    break;
    case Magic:
    true_magic_attack = data.true_magic_attack;
    if (true_magic_attack > 0)
    event.ammount += true_magic_attack;
    break;
    }
    if (Float.isInfinite(event.ammount))
    event.ammount = max_attack_damage;
    if (Float.isNaN(event.ammount))
    event.ammount = 0.0F;
    if (event.ammount > max_attack_damage)
    event.ammount = max_attack_damage;
    if (event.ammount < 0.0F)
    event.ammount = 0.0F;
    if (event.ammount > 0.0F &&
    event.entityLiving instanceof DynamicHatred) {
    DynamicHatred otboss = (DynamicHatred)event.entityLiving;
    int OTdamage = (int)event.ammount;
    OTdamage = (int)(OTdamage + OTdamage * (rootPlayer.carrer.extra_OTdamage + data.extra_OTdamage));
    otboss.addOTToList((EntityLivingBase)player, OTdamage);
    }
    if (M3Config.UseBloodSystem &&
    cantrigger && hp_blood > 0.0F && canVampire(rootPlayer) &&
    player.func_110143_aJ() < player.func_110138_aP()) {
    hp_blood = event.ammount * hp_blood;
    float max_hp_blood = player.func_110138_aP() * rootPlayer.carrer.bloodDataMax;
    float hp_addon = MMM.heal_blood(player, rootPlayer, hp_blood);
    max_hp_blood -= rootPlayer.carrer.bloodData;
    if (max_hp_blood > 0.0F) {
    if (hp_blood > hp_addon)
    hp_blood = hp_addon;
    if (hp_blood > max_hp_blood)
    hp_blood = max_hp_blood;
    rootPlayer.carrer.addBloodData((int)hp_addon);
    }
    }
    player.func_130011_c((Entity)event.entityLiving);
    if (!(event.entityLiving instanceof EntityPlayer))
    addDamageFX(event, isCritAttack, player, rootPlayer);
    if (M3Config.CanEntityBleed && !Author.useChina)
    bleed(event.entityLiving);
    int treasure = rootPlayer.carrer.getDropRate() + data.drop_temp + rootPlayer.carrer.drop_temp;
    treasure += PotionData.getDrop(PotionEffectM3.getPotions(rootPlayer));
    treasure = (int)(treasure * M3Config.BaseTreasure);
    if (treasure > rootTarget.ManaEntityData.drop)
    rootTarget.ManaEntityData.drop = treasure;
    if (event.ammount > 0.0F &&
    event.entityLiving instanceof EntityGrassMan) {
    EntityGrassMan grassman = (EntityGrassMan)event.entityLiving;
    grassman.damage((int)event.ammount, Elements, type, attackType, player, (int)data.no_tack_damage, Attack, data.final_attack);
    }
    event.entityLiving.field_70737_aN = 0;
    event.entityLiving.field_70172_ad = 0;
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    前言

    • 叠个甲先
      • 本人已有四年独立游戏开发经验,正式从事游戏开发行业已有一年半时间。
      • 然而对MC的开发仅处于脚本层面,对源码更是知之甚少。
      • 源码中会有许多隐式的方法名,只能凭游戏理解猜测,如func_76346_g()。
      • 本着对魔金的热爱和对游戏开发的学习动机,才有了这么一篇文章。
      • 翻译如果有误请多包涵。

    解读

    概念

    • player/rootPlayer : 玩家自身实体
    • event.ammount : 伤害
    • event.source : 伤害来源
    • ItemStack item = player.func_71045_bC(); : 武器/手持的物品
    • event.getEntityLiving : 获取被伤害的生物实体
    • event.setCanceled(true); : 设置伤害无效
    • field_76373_n : 外来伤害类型
    • 1.0E8F : 为1后面8个0,即100000000,F代表浮点类型
    • func_110143_aJ() : 当前血量
    • func_110138_aP() : 血量上限
    • mana.getMagicMax() : 魔力上限
    • attack : 造成的伤害
    • penetration_base : 穿透
    • critDamage : 暴击伤害
    • crit : 暴击率
    • avoid : 回避率
    • final_attack : 最终伤害
    • max_attack_base : 最大伤害
    • attack_base_physical : 物理攻击力
    • attack_base_magic : 魔法攻击力
    • hp_blood : 吸血
    • xp : 职业经验获取量
    • attack_base : 基础攻击力 百科上译为:物理/魔法攻击力
    • mana.magicReliefTemp : 魔力减免
    • no_tack_damage : 附加伤害
    • player.field_70170_p.field_73012_v.nextInt(10) == 0 : 10%概率
    • field_70170_p.field_72995_K : 为true时对象是客户端线程上的,反之在服务器线程上
    • field_70128_L : 单位是否死亡
    • func_70606_j : 设置目标单位当前生命值
      • 参考ItemToolOp.class
    • Produce : m3生产系统
    • addAllPower(AttackEffect data, int type, boolean isAttack) : 全能力提升,分伤害计算和受到伤害减免两部分,由第三参数isAttack区别,套装效果中攻击时伤害计算部分生效,受击时伤害减免部分生效,type取值范围[0, 10]
    • player.field_71071_by.func_146026_a(Items.field_151043_k) : 消耗物品(金锭)
    • func_70015_d() : setFire() 给予燃烧状态
    • func_70027_ad() : isBurning() 处于燃烧状态
    • func_70115_ae() : 处于骑乘状态
    • func_70690_d(new PotionEffect()) : 为对象添加原版药水效果
    • new PotionEffect(Potion.getPotionById(), 100, 0) : 原版药水效果,参数:药水id;持续时间,每20tick为1s,所以100代表5s;层数,如0为一层,2为三层。
    • field_70122_E() : onGround() 处于落地状态
    • func_70090_H : isInWater() 处于水下状态

    逐步解释

    • 仅解释含event.ammount的部分:
    • 代码自上而下顺序执行,后面可能会覆盖前面效果

    1
    2
    3
    4
    if (item == null) {
    event.ammount = 1.0F;
    return;
    }
    • 空手时,伤害为 1,后续代码不执行。

    1
    2
    if (rootPlayer == null || rootTarget == null)
    return;
    • 若玩家单位或攻击单位为空,后续代码不执行。

    1
    2
    3
    4
    5
    if (player == event.entityLiving) {
    event.setCanceled(true);
    event.ammount = 0.0F;
    return;
    }
    • 玩家攻击到自己时伤害无效,伤害为 0。

    1
    2
    3
    4
    5
    if (item != null && 
    ManaMetalAPI.ItemDamageBlackList.containsKey(item.func_77973_b())) {
    event.ammount = ((Integer)ManaMetalAPI.ItemDamageBlackList.get(item.func_77973_b())).intValue();
    return;
    }
    • 手持ManaMetalAPI中指定的ItemDamageBlackList里的物品时,伤害为该物品的整数伤害数值。
    • ManaMetalAPI.ItemDamageBlackList中的物品包含:
      • Items.field_151110_aK : 鸡蛋
      • Items.field_151079_bi : 末影珍珠
      • Items.field_151126_ay : 雪球
      • Decoration.baserock : 石块
      • Items.field_151112_aM : 原版鱼竿
    依据
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    // ManaMetalAPI.ItemDamageBlackList
    - project.studio.manametalmod
    - ManametalMod.class

    ManaMetalAPI.ItemDamageBlackList.put(Items.field_151110_aK, Integer.valueOf(0));
    ManaMetalAPI.ItemDamageBlackList.put(Items.field_151079_bi, Integer.valueOf(0));
    ManaMetalAPI.ItemDamageBlackList.put(Items.field_151126_ay, Integer.valueOf(0));
    ManaMetalAPI.ItemDamageBlackList.put(Decoration.baserock, Integer.valueOf(0));
    ManaMetalAPI.ItemDamageBlackList.put(Items.field_151112_aM, Integer.valueOf(0));

    // Items.field_151110_aK
    - project.studio.manametalmod
    - core
    - ItemType.class

    case egg:
    return Items.field_151110_aK;

    // Items.field_151079_bi
    - project.studio.manametalmod
    - defensive_tower
    - DefensiveTowerCore.class

    ManaMetalAPI.ManaMetalInjectionRecipeList.add(new ItemStack[] { new ItemStack(ManaMetalMod.ingotManaS, 1), new ItemStack(ManaMetalMod.ingotAncientThulium, 1), new ItemStack(ManaMetalMod.ingotAncientThulium, 1), new ItemStack(ManaMetalMod.ingotManaS, 1), qus, qus, qus, qus, new ItemStack(Items.field_151079_bi), new ItemStack(tower7) });

    // Items.field_151126_ay
    - project.studio.manametalmod
    - event
    - EventMana.class

    if (event.item.func_92059_d().func_77973_b() == Items.field_151126_ay) {
    PickItem.pickSnow(event, player);
    return;
    }

    // Decoration.baserock
    - project.studio.manametalmod
    - earlystrength
    - TileEntitySieve.class

    list_sieve_sand.add(Decoration.baserock);

    // Items.field_151112_aM
    - project.studio.manametalmod
    - produce.fishing
    - FishingCore.class

    RecipeRemover.removeAnyRecipe((Item)Items.field_151112_aM);
    Craft.addShapelessRecipe(new ItemStack((Item)Items.field_151112_aM), new Object[] { fishrod_wood });

    1
    2
    3
    4
    5
    6
    7
    if (event.entityLiving instanceof IJobAdvEntity) {
    IJobAdvEntity IJobAdvEntitys = (IJobAdvEntity)event.entityLiving;
    if (!IJobAdvEntitys.canPlayerAttackThis(player, rootPlayer.carrer.isTransfer2())) {
    event.ammount = 1.0F;
    return;
    }
    }
    • 若攻击的对象实体含IJobAdvEntity接口,触发玩家职业是否已二转的判断,若不是二转职业,伤害为 1,后续代码不执行。
    • 含该接口的对象有:
      • 阿斯翠德 (BossAstrid)
      • 赤血恶龙 (BossBloodDragon)
      • 末日黑龙 (BossDoomsDragon)
      • 镜中梦魇 (BossMirror)
      • 艾莉西亚 (BossTime)
      • 神王禁卫·艾莉西亚 (BossTimeHard)
    • 即二转BOSS。
    依据
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // IJobAdvEntity接口仅含一个方法canPlayerAttackThis
    public interface IJobAdvEntity {
    boolean canPlayerAttackThis(EntityPlayer paramEntityPlayer, boolean paramBoolean);
    }

    // 该方法的实现为返回是否二转
    public boolean canPlayerAttackThis(EntityPlayer player, boolean is2Job) {
    return is2Job;
    }

    1
    2
    if (MMM.playerCanUseWeapon(player, rootPlayer) == UseWeaponResult.fail)
    return;
    • 若无法使用武器,后续代码不执行。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (event.source.field_76373_n != null && 
    event.source.field_76373_n.equals("thorns")) {
    int max_thorns_damage = 100 * rootPlayer.carrer.getLv();
    if (player.func_70032_d((Entity)event.entityLiving) > 4.0F) {
    event.ammount = 0.0F;
    event.setCanceled(true);
    return;
    }
    if (event.ammount > max_thorns_damage)
    event.ammount = max_thorns_damage;
    return;
    }
    • 伤害来源为荆棘附魔时,荆棘伤害上限为100倍职业等级。
    • 双方距离大于4格时,取消伤害,伤害为 0,后续代码不执行。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    if (item.func_77973_b() == ManaMetalMod.GodSword) {
    event.ammount = 1.0E8F;
    if (!(event.entityLiving instanceof EntityPlayer))
    addDamageFX(event, false, player, rootPlayer);
    if (event.entityLiving instanceof net.minecraft.entity.boss.IBossDisplayData) {
    rootTarget.ManaEntityData.addbossRewardName(player, rootPlayer);
    int i = rootPlayer.carrer.getDropRate() + data.drop_temp;
    List<PotionEffectM3> list = PotionEffectM3.getPotions(rootPlayer);
    i += PotionData.getDrop(list);
    if (i > rootTarget.ManaEntityData.drop)
    rootTarget.ManaEntityData.drop = i;
    }
    if (event.entityLiving instanceof IDungeonBoss) {
    IDungeonBoss boss = (IDungeonBoss)event.entityLiving;
    if (boss.isBoss()) {
    rootTarget.ManaEntityData.addbossRewardName(player, rootPlayer);
    int i = rootPlayer.carrer.getDropRate() + data.drop_temp;
    List<PotionEffectM3> list = PotionEffectM3.getPotions(rootPlayer);
    i += PotionData.getDrop(list);
    if (i > rootTarget.ManaEntityData.drop)
    rootTarget.ManaEntityData.drop = i;
    }
    }
    return;
    }

    // addDamageFX()
    public void addDamageFX(LivingHurtEvent event, boolean isCrit, EntityPlayer player, ManaMetalModRoot root) {
    if (event.ammount <= 0.0F || PotionEffectM3.isPotion(event.entityLiving, PotionM3.potionInvincible) || (PotionEffectM3.isPotion((EntityLivingBase)player, PotionM3.potionMissed) && player.field_70170_p.field_73012_v.nextInt(10) == 0)) {
    PacketHandlerMana.INSTANCE.sendToAllAround((IMessage)new MessageDamageFX(0.0F, (float)event.entityLiving.field_70165_t, (float)event.entityLiving.field_70163_u, (float)event.entityLiving.field_70161_v, 0), new NetworkRegistry.TargetPoint(player.field_70170_p.field_73011_w.field_76574_g, player.field_70165_t, player.field_70163_u, player.field_70161_v, 64.0D));
    event.setCanceled(true);
    event.ammount = 0.0F;
    return;
    }
    PacketHandlerMana.INSTANCE.sendToAllAround((IMessage)new MessageDamageFX(event.ammount, (float)event.entityLiving.field_70165_t, (float)event.entityLiving.field_70163_u, (float)event.entityLiving.field_70161_v, isCrit ? 1 : 0, event.entityLiving.func_145782_y(), root.fashion.func_70301_a(14)), new NetworkRegistry.TargetPoint(player.field_70170_p.field_73011_w.field_76574_g, player.field_70165_t, player.field_70163_u, player.field_70161_v, 64.0D));
    }
    • 若手中武器为创造者之剑:
      • 伤害设为1.0E8F。
      • 若受击方不是玩家单位,触发addDamageFX()。
      • 若受击方是BOSS单位,将玩家添加到“可获取BOSS掉落物”列表中,并计算掉宝率。
      • 若受击方含IDungeonBoss接口(地下城怪),再判断是否为BOSS,将玩家添加到“可获取BOSS掉落物”列表中,并计算掉宝率。
      • 后续代码不执行。
    • 这部分代码有点冗余,判断BOSS单位何不直接调用MMM.isEntityBoss(),估计是迭代过,懒得改原先能跑通的代码。
    • addDamageFX()方法:
      • 猜测为发送造成伤害通知。
      • 伤害为0或有无敌药水效果等情况,会取消伤害。
      • 其他情况下发送64格范围全体通知,应用伤害字型时装,产生伤害特效。
    • 掉宝率计算方式:
      • i = 职业掉宝率+临时掉宝率
      • i加上从M3药水效果中得到的临时掉宝率
      • 若i大于对方掉宝率,对方掉宝率变为i
    • 目前该掉宝率作用未知
    依据
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    // net.minecraft.entity.boss.IBossDisplayData
    - project.studio.manametalmod
    - MMM.class

    public static final boolean isEntityBoss(Entity entity) {
    if (entity instanceof net.minecraft.entity.boss.IBossDisplayData)
    return true;
    if (entity instanceof IDungeonBoss)
    return ((IDungeonBoss)entity).isBoss();
    return false;
    }

    // MessageDamageFX
    - project.studio.manametalmod
    - network
    - MessageDamageFX.class

    public MessageDamageFX(float damge, float posX, float posY, float posZ, int type, int entity, ItemStack NumberFashion) {
    this.Damage = damge;
    this.x = posX;
    this.y = posY;
    this.z = posZ;
    this.type = type;
    this.entity = entity;
    this.hasNumberFashion = true;
    this.NumberFashion = NumberFashion;
    }

    // PotionData.getDrop
    - project.studio.manametalmod
    - potion
    - PotionData.class

    public static final int getDropBase(PotionM3 potion) {
    switch (potion) {
    case potiotMoney:
    case potionElves1:
    case potionBattleAxe:
    return 30;
    case potionGoldenDagger:
    case potionGrass:
    return 25;
    case potionCofe:
    return 10;
    }
    return 0;
    }


    1
    2
    event.source.func_151518_m();
    event.source.func_76348_h();

    1
    2
    if (MMM.isTinkersConstruct && TConstructCore.isTCWeapon(item))
    event.ammount *= 12.0F;
    • 若手中武器为匠魂的武器,伤害 × 12。

    1
    2
    3
    4
    5
    6
    if (ManaMetalAPI.ItemAttackBalance.containsKey(item.func_77973_b())) {
    BattleType typebattle = (BattleType)ManaMetalAPI.ItemAttackBalance.get(item.func_77973_b());
    event.ammount += typebattle.attack;
    attackType = typebattle.type;
    type = typebattle.spellTypeBase;
    }
    • 若手中武器属于ManaMetalAPI.ItemAttackBalance列表中的物品,伤害加上武器attack属性的值。
    ManaMetalAPI.ItemAttackBalance中的物品包含
    • Botania
      • manaGun
      • terraSword
      • thunderSword
      • crystalBow
      • starSword
      • elementiumSword
      • livingwoodBow
      • enderDagger
      • thornChakram
      • kingKey
      • missileRod
    • aether
      • notch_hammer
      • lightning_knife
      • phoenix_bow
      • dart_shooter
      • zanite_sword
      • gravitite_sword
      • flaming_sword
      • lightning_sword
      • holy_sword
      • valkyrie_lance
      • vampire_blade
    • aoa
      • HauntersStaff
    • thaumcraft
      • itemSwordElemental
      • itemSwordVoid
      • itemSwordCrimson
      • itemBowBone
      • itemWandCasting
    • ChocolateQuest
      • musket
      • revolver
      • staffPhysic
      • staffMagic
      • staffBlast
      • staffFire
      • staffLight
      • ironSwordAndShield
      • diamondSwordAndShield
      • spiderSpear
      • bullAxe
      • ironBigsword
      • diamondBigsword
      • bigSwordBull
      • monkingSword
      • ironDagger
      • diamondDagger
      • tricksterDagger
      • ninjaDagger
      • monkingDagger
      • ironSpear
      • diamondSpear
      • spearGun
      • fireSpear
    • ImmersiveEngineering
      • itemRailgun
      • itemRevolver
      • itemChemthrower
    • Metallurgy
      • GameRegistry.findItem(“Metallurgy”, item.toLowerCase() + “.sword”)
    • Techguns
      • (GenericGun)item
    • ThaumBasic
      • herobrinesScythe
      • revolver
    • ThaumicTinkerer
      • sword
      • sword2

    1
    2
    if (MMM.isAether)
    EventAetherM3.doEffectAttack(data, player);
    Aether(天境)Mod伤害计算
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static final void doEffectAttack(AttackEffect data, EntityPlayer player) {
    PlayerAether PA = PlayerAether.get(player);
    IAccessoryInventory IAI = PA.getAccessoryInventory();
    for (int s = 0; s < IAI.func_70302_i_(); s++) {
    ItemStack temp = IAI.func_70301_a(s);
    if (temp != null &&
    temp.func_77973_b() instanceof ItemAccessoryM3) {
    ItemAccessoryM3 m3data = (ItemAccessoryM3)temp.func_77973_b();
    data.attack_base += m3data.attack;
    data.crit += m3data.crit;
    data.penetration_base += m3data.penetrate;
    }
    }
    }

    1
    2
    rootPlayer.carrer.lastAttackTarget = event.entityLiving;
    rootPlayer.mana.magicReliefTemp = 0.0F;
    • 记录玩家最后攻击的对象
    • magicReliefTemp值归零,暂不明确用途

    1
    2
    if (rootPlayer.carrer.isTransfer2())
    max_attack_damage = (float)M3Config.GlobalMaxDamage2;
    • 若玩家已二转,将最大伤害设为M3配置文件中的GlobalMaxDamage2

    1
    2
    3
    4
    5
    6
    7
    8
    if (event.source instanceof EntityDamageSourceElement) {
    EntityDamageSourceElement soure = (EntityDamageSourceElement)event.source;
    type = soure.spell;
    Elements = soure.Element;
    attackType = soure.weapon;
    cantrigger = soure.canTrigger;
    canInfluencesDamage = soure.canInfluencesDamage;
    }
    • 若伤害类型是一种EntityDamageSourceElement,获取其type等属性。
    • 参考

    1
    ArmorEffect.doEffectAttackKit(player, data, cantrigger, event, rootPlayer, rootTarget);
    • 应用盔甲效果
      • 判断是否装备全套套装。
      • 判断全套盔甲是否都为装备类型。
      • 判断通过后返回盔甲材质,根据材质应用不同套装效果。
    • 套装效果详解
      • 注:伤害计算的套装效果计算时不包含百科中“受到伤害时”、“额外消耗魔力”等词条,在EventFx.entityHurtsFX()方法中计算受到伤害效果。
      • 若盔甲是ItemToolArmorSpecial,即可升级的盔甲,也即那些毕业套。
      • 获取套装中最低的等级,若不是全套ItemToolArmorSpecial或套装类别不统一,则返回-1。
      • 当最低等级大于-1,获取盔甲路线和材质进行应用效果。
      • 盔甲路线对应:0——基础 1——深渊路线 2——超越路线

    • DefendGuard_1(保卫使者):
      • 深渊路线-深渊守门人套装:
        • 强化等级 >= 5阶:防御力+75后防御力+5%。
        • 强化等级 >= 15阶:防御力+15%、伤害减免+10%。
        • 强化等级 >= 30阶:攻击时获得7s最大5层每次叠加1层的药水效果“深渊护卫的意志”,冷却时间2秒。 注:百科上原文为“持续5秒”。
        • 强化等级 >= 35阶:防御力+20%、伤害减免+15%。
        • 强化等级 >= 40阶:防御力-400,之后剩余的所有防御力若大于0,乘以0.4加到攻击力上,用于转换的防御力不会损失。
      • 基础与超越路线-神圣守护者套装:
        • 强化等级 >= 5阶:防御力+50、伤害减免+5%。
        • 强化等级 >= 15阶:防御力+10%、伤害减免+10%。
        • 强化等级 >= 30阶:攻击时获得7s最大5层每次叠加1层的药水效果“巨人守卫的意志”,冷却时间2秒。
        • 强化等级 >= 35阶:防御力+20%。
    • WraithReaper_1(亡魂死神):
      • 套装效果:攻击生命值低于50%的目标时,造成的伤害提高30%、穿透值提高4点。
      • 深渊路线-残暴梦魇套装:
        • 强化等级 >= 5阶:造伤+10%、爆伤+5%。
        • 强化等级 >= 10阶:攻击时获得10s最大100层每次叠加1层的药水效果“无尽梦魇”,无冷却时间。
        • 强化等级 >= 15阶:造伤+15%、爆伤+10%。
        • 强化等级 >= 20阶:造伤+7%、爆伤+5%,攻击时获得5s最大5层每次叠加1层的药水效果“残暴屠宰”,冷却时间2秒。
        • 强化等级 >= 25阶:造伤+20%、爆伤+15%。
        • 强化等级 >= 30阶:攻击时,所有以玩家为中心,11格半径内的单位(是EntityMob或含net.minecraft.entity.monster.IMob接口)获得5秒0级的药水效果“噩梦领域”,冷却时间5秒。
        • 强化等级 >= 35阶:攻击拥有状态“噩梦领域”的单位额外造成50%暴击伤害。
        • 强化等级 >= 40阶:最终伤害+25%、造伤+25%、暴伤+50%。
        • 强化等级 >= 45阶:攻击时,根据6格半径内拥有“噩梦领域”状态的目标数量,每个增加5%造伤、3%暴伤。
      • 基础与超越路线-审判之眼套装:
        • 强化等级 >= 5阶:基础攻击力+18。
        • 强化等级 >= 10阶:对BOSS单位造伤+10%。
        • 强化等级 >= 15阶:基础攻击力+36。
        • 强化等级 >= 20阶:攻击时10%概率获得16s最大10层每次叠加1层的药水效果“灵魂虹吸”,无冷却时间。状态>=10层时,触发叠加时对BOSS单位造伤+20%。
        • 强化等级 >= 25阶:攻击生命值低于50%的BOSS单位时,造伤+30%(该BOSS单位在服务器线程上)。
        • 强化等级 >= 30阶:攻击生命值低于50%的BOSS单位时,造伤+20%,爆伤+10%,同时目标获得7秒0级的药水效果“死神印记”,无冷却时间。
        • 强化等级 >= 35阶:攻击BOSS单位时,造伤+75%;攻击非BOSS单位时,造伤-50%。
        • 强化等级 >= 40阶:若目标单位有“死神印记”效果,使自身获得7秒0级的药水效果“审判者之眼”,无冷却时间。
        • 强化等级 >= 45阶:若目标单位有“死神印记”效果,,使目标获得6s最大10层每次叠加1层的药水效果“审判终曲”,无冷却时间。若自身拥有“审判者之眼”状态,且目标拥有“审判终曲”状态,终伤+10%。
        • 强化等级 >= 50阶:若目标单位未死亡、拥有“审判终曲”状态、没有无敌药水状态、血量低于生命上限的1%,玩家(服务端)将该目标当前生命值设置为1点。注:百科上原文为“立即杀死”
    • SecretMagic_1(秘法魔力):
      • 套装效果:魔力值高于90%时,造伤+30%、穿透+4。
      • 深渊路线-禁忌秘术套装:
        • 强化等级 >= 5阶:造伤+12%,魔力减免+1%。
        • 强化等级 >= 10阶:造伤+20%。
        • 强化等级 >= 15阶:造伤+16%,魔力减免+2%。
        • 强化等级 >= 25阶:造伤+24%,魔力减免+4%。
        • 强化等级 >= 30阶:增加等同于32%魔力上限的附加伤害。
        • 强化等级 >= 35阶:当自身“超能负荷”状态>=5层时,终伤+10%,爆伤+15%。
        • 强化等级 >= 40阶:攻击时获得15s最大(玩家魔力上限的30%)层每次叠加(基本伤害 * 0.03F + 1.0F)层的药水效果“魔力护盾”,无冷却时间。
        • 强化等级 >= 45阶:若玩家拥有“魔力护盾”状态,造伤+35%,暴击率+30,爆伤+10%,攻击时增加3%基本伤害的魔力值。
      • 基础与超越路线-符纹魔导套装:
        • 强化等级 >= 5阶:攻击时增加0.1%基本伤害的魔力值,魔力减免+1%。
        • 强化等级 >= 10阶:攻击时获得45秒(玩家魔力上限的15%)层的药水效果“魔力护盾”,冷却时间45秒。
        • 强化等级 >= 15阶:攻击时增加0.1%基本伤害的魔力值,魔力减免+2%。
        • 强化等级 >= 25阶:攻击时增加0.2%基本伤害的魔力值,魔力减免+4%。
        • 强化等级 >= 30阶:增加等同32%最大魔力值的附加伤害。
        • 强化等级 >= 35阶:若自身拥有“魔力护盾”状态,造伤+20%,爆伤+15%,暴击率+15,回避率+15。
        • 强化等级 >= 50阶:攻击时若自身未持有“魔导爆发”状态,则获得7s最大20层每次叠加1层的药水效果“魔导充能”,无冷却时间。
    • EternalSpirit_1(永生之灵)
      • 深渊路线-无尽贪欲套装:
        • 强化等级 >= 5阶:吸血+2%。
        • 强化等级 >= 10阶:攻击时获得10s最大10层每次叠加1层的药水效果“血刃切割”,冷却时间2秒。触发叠加效果时,若“血刃切割”层数>=10,吸血+5%,附加伤害+目标血量上限的1%(BOSS单位为0.1%)。
        • 强化等级 >= 15阶:吸血+4%。
        • 强化等级 >= 20阶:攻击时获得20秒0级的药水效果“血色愉悦”,无冷却时间。同时造伤+35%,爆伤+10%。
        • 强化等级 >= 25阶:攻击时获得20s最大5层每次叠加1层的药水效果“嗜血本能”,冷却时间3秒。
        • 强化等级 >= 30阶:攻击时若自身血量大于最大生命的90%,终伤+10%,爆伤+20%。
        • 强化等级 >= 40阶:攻击时若自身血量小于最大生命的70%,吸血+4%。
        • 强化等级 >= 45阶:攻击时获得5s最大10层每次叠加1层的药水效果“鲜血渴望”,无冷却时间。每层增加4%造伤。状态>=10层时,终伤+10%。
      • 基础与超越路线-永恒神灵套装:
        • 强化等级 >= 20阶:攻击时附加等同自身最大生命值16%的附加伤害。
        • 强化等级 >= 25阶:未拥有任何创伤时,攻击附加等同自身最大生命值32%的附加伤害。
        • 强化等级 >= 30阶:若自身血量大于最大生命的50%,造伤+30%,获得20秒0级的药水效果“生命之源-力量”,无冷却时间;反之,获得20秒0级的药水效果“生命之源-抵御”,无冷却时间。
        • 强化等级 >= 50阶:攻击时获得7s最大5层每次叠加1层的药水效果“神灵祝福”,冷却时间2秒。状态>=5层时,增加最大生命值64%的附加伤害。

    • 返回ArmorEffect.class的void doEffectAttack,应用其他套装效果。
    • HighlycrystalArmor_1(致命晶套装)
      • 造伤+40%,攻击目标不为空时,移除服务端玩家的“剧毒”药水效果
    • Adamantine_1(精金套装)
      • 全能力巨量提升(type=3):造伤+30%,暴击率+10,穿透+4,终伤+4%。
      • 造伤+70%,吸血+5%。
    • Mithril_1(秘银套装)
      • 全能力巨量提升(type=3):造伤+30%,暴击率+10,穿透+4,终伤+4%。
      • 造伤+60%,吸血+5%。
    • SoulSteel_1(魂钢套装)
      • 全能力巨量提升(type=3):造伤+30%,暴击率+10,穿透+4,终伤+4%。
      • 造伤+50%,吸血+5%。
    • MysteriousIron_1(玄铁套装)
      • 全能力巨量提升(type=3):造伤+30%,暴击率+10,穿透+4,终伤+4%。
      • 造伤+40%,吸血+5%。
    • HolyCopper_1(圣铜套装)
      • 全能力巨量提升(type=3):造伤+30%,暴击率+10,穿透+4,终伤+4%。
      • 造伤+30%,吸血+5%。
    • BloodDragonArmor_1(恶咒套装)
      • 血量大于最大生命的90%时,造伤+60%,全能力巨量提升(type=5):造伤+40%,暴击率+14,穿透+6,终伤+6%。
      • 注:百科上原文为“生命值高于90%时,全能力极大提升,造成的伤害增加45% ”。
    • LapudaCore.MeteoriteArmor.ArmorMaterials[0](初-远古套装)
      • 全能力中幅提升(type=1):造伤+20%,暴击率+6,穿透+2,终伤+2%。
      • 血量大于最大生命的90%时,造伤+20%。
    • LapudaCore.MeteoriteArmor.ArmorMaterials[1](极-远古套装)
      • 全能力大幅提升(type=2):造伤+25%,暴击率+8,穿透+3,终伤+3%。
      • 血量大于最大生命的90%时,造伤+20%。
    • LapudaCore.MeteoriteArmor.ArmorMaterials[2](灭-远古套装)
      • 全能力巨量提升(type=3):造伤+30%,暴击率+10,穿透+4,终伤+4%。
      • 血量大于最大生命的90%时,造伤+20%。
    • LapudaCore.MeteoriteArmor.ArmorMaterials[3](真-远古套装)
      • 全能力海量提升(type=4):造伤+35%,暴击率+12,穿透+5,终伤+5%。
      • 血量大于最大生命的90%时,造伤+20%。
    • oceanArmor_1(海洋套装)
      • 全能力小幅提升(type=0):造伤+15%,暴击率+4,穿透+1,终伤+1%。
      • 每级垂钓等级增加4%造伤。
    • farmArmor_1(丰饶套装)
      • 全能力小幅提升(type=0):造伤+15%,暴击率+4,穿透+1,终伤+1%。
      • 每级农耕等级增加4%造伤。
    • BossStartDragonArmor_1(星辰龙套装)
      • 全能力巨量提升(type=3):造伤+30%,暴击率+10,穿透+4,终伤+4%。
      • 造伤+40%。
    • TempleArmor_1(失落套装)
      • 全能力中幅提升(type=1):造伤+20%,暴击率+6,穿透+2,终伤+2%。
      • 攻击BOSS时,造伤+40%。
    • StrongholdArmor_1(红光战神套装)
      • 血量小于最大生命的50%时,造伤+80%,全能力海量提升(type=4):造伤+35%,暴击率+12,穿透+5,终伤+5%。
    • ShadowSecretGold_1(暗影秘金套装)
      • 全能力小幅提升(type=0):造伤+15%,暴击率+4,穿透+1,终伤+1%。
      • 每级采矿等级增加4%造伤。
    • FeatherSnakeArmor_1(白羽套装)
      • 全能力大幅提升(type=2):造伤+25%,暴击率+8,穿透+3,终伤+3%。
      • 攻击时服务端玩家获得10s最大0层的药水效果“羽蛇守护”,无冷却时间
    • DungeonGolden_1(神庙金套装)
      • 全能力大幅提升(type=2):造伤+25%,暴击率+8,穿透+3,终伤+3%。
      • 攻击时消耗金锭,造伤+60%,穿透+4。
    • WeaponCore.bedrock_level_1.ArmorMaterials[1](基岩魔力-全能套装)
      • 全能力中幅提升(type=1):造伤+20%,暴击率+6,穿透+2,终伤+2%。
    • WeaponCore.bedrock_level_1.ArmorMaterials[2](基岩魔力-攻击套装)
      • 造伤+25%,暴击率+8。
    • WeaponCore.bedrock_level_1.ArmorMaterials[3](基岩魔力-防御套装)
      • 吸血+5%。
    • WeaponCore.bedrock_level_2.ArmorMaterials[1](基岩勇士-全能套装)
      • 全能力巨量提升(type=3):造伤+30%,暴击率+10,穿透+4,终伤+4%。
    • WeaponCore.bedrock_level_2.ArmorMaterials[2](基岩勇士-攻击套装)
      • 造伤+35%,暴击率+8。
      • 注:百科原文为”暴击率提高12点”。
    • WeaponCore.bedrock_level_2.ArmorMaterials[3](基岩勇士-防御套装)
      • 吸血+10%。
    • LegendaryWeaponCore.Bear(野熊套装)
      • 职业经验获取量+10%。
    • LegendaryWeaponCore.Falcon(老鹰套装)
      • 暴击率+15,职业经验获取量+10%。
    • LegendaryWeaponCore.Fox(狡狐套装)
      • 穿透+5,职业经验获取量+10%。
    • LegendaryWeaponCore.Wolf(野狼套装)
      • 造伤+15%,职业经验获取量+10%。
    • UndeadGraveCore.ArmorM1(勇士套装)
      • 造伤+10%,吸血+5%。
    • UndeadGraveCore.ArmorM2(游侠套装)
      • 造伤+20%,暴击率+7。
    • UndeadGraveCore.ArmorM2(法师套装)
      • 造伤+10%,暴击率+5。
      • 攻击时,服务端玩家恢复15点魔力值。
    • WeaponCore.legend_ore.ArmorMaterials[0](地狱使者套装)
      • 全能力小幅提升(type=0):造伤+15%,暴击率+4,穿透+1,终伤+1%。
    • WeaponCore.legend_ore.ArmorMaterials[1](充能地狱使者套装)
      • 全能力中幅提升(type=1):造伤+20%,暴击率+6,穿透+2,终伤+2%。
    • WeaponCore.legend_ore.ArmorMaterials[2](觉醒地狱使者套装)
      • 全能力大幅提升(type=2):造伤+25%,暴击率+8,穿透+3,终伤+3%。
    • WeaponCore.legend_ore.ArmorMaterials[3](真。地狱使者套装)
      • 全能力巨量提升(type=3):造伤+30%,暴击率+10,穿透+4,终伤+4%。
    • WeaponCore.epic_ore.ArmorMaterials[0](传说勇士套装)
      • 造伤+10%,暴击率+3。
    • WeaponCore.epic_ore.ArmorMaterials[1](充能传说勇士套装)
      • 造伤+15%,暴击率+5。
    • WeaponCore.epic_ore.ArmorMaterials[2](觉醒传说勇士套装)
      • 造伤+20%,暴击率+7。
    • WeaponCore.epic_ore.ArmorMaterials[3](真。传说勇士套装)
      • 造伤+25%,暴击率+9。
    • ItemArmor.ArmorMaterial.GOLD(金套装)
      • 造伤+30%。
    • ItemArmor.ArmorMaterial.CHAIN(锁链套装)
      • 造伤+15%,穿透+3。
    • ManaMetalMod.ArmorKnight(骑士套装)
      • 暴击率+5,穿透+2。
    • ItemArmor.ArmorMaterial.DIAMOND(钻石套装)
      • 造伤+10%。
      • 服务端玩家攻击时对目标赋予10s最大0层的“破甲”药水效果,无冷却时间。
    • WeaponCore.BloodMetal.armorMaterial(暗红钢套装)
      • 吸血+10%。
    • WeaponCore.Dark.armorMaterial(黑暗钢套装)
      • 血量小于最大生命的30%时,造伤+35%。
    • WeaponCore.AncientThulium.armorMaterial(远古铥套装)
      • 攻击的目标为上一次攻击的目标时,造伤+20%。
    • WeaponCore.ManaS.armorMaterial(魔法钢套装)
      • 服务端玩家恢复20魔力值。
    • WeaponCore.UniverseEnergy.armorMaterial(宇宙能量套装)
      • 造伤+20%,暴击率+5。
    • WeaponCore.NeutronEnergy.armorMaterial(奥哈立尔钢套装)
      • 造伤+10%。
    • WeaponCore.Endless.armorMaterial(无限钢套装)
      • 魔力值高于50%时,造伤+25%。
    • WeaponCore.Crimson.armorMaterial(红莲金属套装)
      • 生命大于等于血量上限时,造伤+35%。
    • WeaponCore.Cobalt.armorMaterial(钴蓝套装)
      • 造伤+15%。
    • WeaponCore.Palladium.armorMaterial(钯金套装)
      • 吸血+5%。
    • WeaponCore.RuneSteel.armorMaterial(符纹钢套装)
      • 全能力小幅提升(type=0):造伤+15%,暴击率+4,穿透+1,终伤+1%。
    • WeaponCore.TrueAncientThulium.armorMaterial(觉醒远古铥战斗套装)
      • 造伤+20%,吸血+5%。
    • armor_Titanium_1(钛金套装)
      • 全能力中幅提升(type=1):造伤+20%,暴击率+6,穿透+2,终伤+2%。
    • armor_Lead_1(重铅套装)
      • 造伤+10%,爆伤+10%。
    • goldSteeleafIngotArmor_1(黄金钢叶套装)
      • 全能力中幅提升(type=1):造伤+20%,暴击率+6,穿透+2,终伤+2%。
      • 攻击Boss单位时,造伤+20%。
    • powerIronwoodIngotArmor_1(强化铁木套装)
      • 全能力中幅提升(type=1):造伤+20%,暴击率+6,穿透+2,终伤+2%。
      • 吸血+5%。
    • FIERY(炽铁套装)
      • 攻击正在燃烧的目标时,造伤+35%。
    • KNIGHTMETAL(骑士套装)
      • 骑乘时,造伤+50%。
    • KNIGHTPHANTOM(幻影骑士套装)
      • 全能力大幅提升(type=2):造伤+25%,暴击率+8,穿透+3,终伤+3%。
      • 吸血+10%。
    • YETI(雪怪套装)
      • 全能力大幅提升(type=2):造伤+25%,暴击率+8,穿透+3,终伤+3%。
      • 服务端玩家攻击目标时,目标获得10秒2级的冰缓效果,无冷却时间。
    • ARCTIC(极地套装)
      • 全能力中幅提升(type=1):造伤+20%,暴击率+6,穿透+2,终伤+2%。
    • CompressionSteelArmor_1(压缩钢套装)
      • 造伤+20%,吸血+10%。
    • MMM.isThaumcraft 神秘:
    • MisriruArmorMaterial(米斯里鲁套装)
      • 造伤+35%。
    • MisriruArmorMaterialTrue(觉醒米斯里鲁套装)
      • 造伤+50%,吸血+15%。
    • SPECIAL(揭示护目镜)
      • 造伤+20%,穿透+2。
    • VOID(虚空套)
      • 造伤+20%,穿透+4,吸血+10%。
    • FORTRESS(神秘要塞套装)
      • 造伤+30%,吸血+10%。
    • MMM.isBotania 植物魔法:
    • MANASTEEL(魔钢套装)
      • 魔力大于50%时,造伤+20%,穿透+5。
    • TERRASTEEL(泰拉钢套)
      • 造伤+30%,吸血+10%。
    • B_ELEMENTIUM(源质钢套装)
      • 魔力低于80%时,造伤+30%,穿透+5。
    • MANAWEAVE(魔源套装)
      • 造伤+10%,穿透+2
      • 攻击时恢复50魔力。
    • MMM.isMoCreatures 更多生物:
    • crocARMOR()
      • 造伤+25%。
      • 服务端玩家攻击目标时,使目标获得5秒2级的冰缓效果,无冷却时间。
    • furARMOR(毛皮套装)
      • 造伤+20%。
    • hideARMOR(兽皮套装)
      • 造伤+20%,穿透+4。
    • MMM.isAether 天境:
    • Armor_Zanite(紫晶套装)
      • 造伤+10%,穿透+2。
    • Armor_Gravitite(重力晶套装)
      • 玩家处于落地状态时,造伤+60%。
    • Armor_Neptune(海神套装)
      • 玩家处于水下状态时,造伤+65%,穿透+8。
    • Armor_Phoenix(凤凰套装)
      • 服务端玩家攻击目标时,使目标燃烧10s。若目标处于燃烧状态,造伤+90%。
    • Armor_Obsidian(黑曜套装)
      • 穿透+11,吸血+10%。
    • Armor_Valkyrie(武神套装)
      • 造伤+30%,穿透+5,吸血+10%。
    • MMM.isChocolateQuest 寻找巧克力:
    • CQ_dragon(龙之头盔)
      • 造伤+60%,穿透+9。
    • CQ_king(国王盔甲)
      • 造伤+30%,吸血+10%。
    • TURTLE(乌龟套装)
      • 吸血+10%。
      • 服务端玩家获得200秒0级的药水效果PotionM3.potionbrewing3和PotionM3.potionResistance2,无冷却时间。
    • MONSTER_FUR(未找到翻译,可能为蜘蛛套装)
      • 造伤+30%。
      • 服务端玩家攻击目标时,使目标获得5秒2级的冰缓效果,无冷却时间。
    • CQ_bull(公牛套装)
      • 增加等同于防御值的基础攻击力。
    • CQ_slime(史莱姆套装)
      • 服务端玩家攻击时消耗粘液球,造伤+70%。
      • 服务端玩家攻击时有20%概率获得一个粘液球。
    • CQ_mage(法师套装)
      • 造伤+10%。
      • 服务端玩家攻击时恢复60魔力值。
    • MMM.isMetallurgy 冶金:
    • metallurgy.tartarite(熔火石套装)
      • 造伤+50%,穿透+4,吸血+5%。
    • metallurgy.adamantine(幽冥剧毒套装)
      • 造伤+40%。
      • 服务端玩家攻击目标时,使目标获得5秒3级的冰缓效果,无冷却时间。
    • metallurgy.atlarus()

    依据
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    651
    652
    653
    654
    655
    656
    657
    658
    659
    660
    661
    662
    663
    664
    665
    666
    667
    668
    669
    670
    671
    672
    673
    674
    675
    676
    677
    678
    679
    680
    681
    682
    683
    684
    685
    686
    687
    688
    689
    690
    691
    692
    693
    694
    695
    696
    697
    698
    699
    700
    701
    702
    703
    704
    705
    706
    707
    708
    709
    710
    711
    712
    713
    714
    715
    716
    717
    718
    719
    720
    721
    722
    723
    724
    725
    726
    727
    728
    729
    730
    731
    732
    733
    734
    735
    736
    737
    738
    739

    public static final void doEffectAttackKit(EntityPlayer player, AttackEffect data, boolean cantrigger, LivingHurtEvent event, ManaMetalModRoot rootPlayer, ManaMetalModRoot rootTarget) {
    if (!cantrigger)
    return;
    ItemArmor.ArmorMaterial temp = isKit(player);
    if (temp != null)
    doEffectAttack(data, temp, player, event.entityLiving, rootPlayer, rootTarget, event.source, event.ammount);
    }

    public static ItemArmor.ArmorMaterial isKit(EntityPlayer player) {
    ItemStack[] armor = player.field_71071_by.field_70460_b;
    if (armor[0] != null && armor[1] != null && armor[2] != null && armor[3] != null &&
    armor[0].func_77973_b() instanceof ItemArmor && armor[1].func_77973_b() instanceof ItemArmor && armor[2].func_77973_b() instanceof ItemArmor && armor[3].func_77973_b() instanceof ItemArmor) {
    ItemArmor armors = (ItemArmor)armor[0].func_77973_b();
    ItemArmor.ArmorMaterial ArmorMaterial = armors.func_82812_d();
    if (armor[0].func_77973_b() instanceof ItemToolArmorLevel) {
    ItemToolArmorLevel ital = (ItemToolArmorLevel)armor[0].func_77973_b();
    ArmorMaterial = ital.getArmorMaterialID(armor[0].func_77960_j());
    if (armor[1].func_77973_b() instanceof ItemToolArmorLevel && armor[2].func_77973_b() instanceof ItemToolArmorLevel && armor[3].func_77973_b() instanceof ItemToolArmorLevel && (
    (ItemToolArmorLevel)armor[1].func_77973_b()).getArmorMaterialID(armor[1].func_77960_j()) == ArmorMaterial && ((ItemToolArmorLevel)armor[2].func_77973_b()).getArmorMaterialID(armor[2].func_77960_j()) == ArmorMaterial && ((ItemToolArmorLevel)armor[3].func_77973_b()).getArmorMaterialID(armor[3].func_77960_j()) == ArmorMaterial)
    return ArmorMaterial;
    return null;
    }
    if (((ItemArmor)armor[1].func_77973_b()).func_82812_d() == ArmorMaterial && ((ItemArmor)armor[2].func_77973_b()).func_82812_d() == ArmorMaterial && ((ItemArmor)armor[3].func_77973_b()).func_82812_d() == ArmorMaterial)
    return ArmorMaterial;
    }
    return null;
    }

    public static final void doEffectAttack(AttackEffect data, ItemArmor.ArmorMaterial Material, EntityPlayer player, EntityLivingBase target, ManaMetalModRoot root, ManaMetalModRoot rootTarget, DamageSource source, float damage) {
    if (player.field_71071_by.field_70460_b[0].func_77973_b() instanceof ItemToolArmorSpecial) {
    ArmorFXCore.doEffectAttack(data, Material, player, target, root, rootTarget, source, damage);
    return;
    }
    if (Material.toString().equals("HighlycrystalArmor_1")) {
    data.attack += 0.4F;
    if (!player.field_70170_p.field_72995_K &&
    target != null)
    PotionEffectM3.removePotion(root, PotionM3.potionPoison);
    }
    if (Material.toString().equals("Adamantine_1")) {
    addAllPower(data, 3, true);
    data.attack += 0.7F;
    data.hp_blood += 0.05F;
    }
    if (Material.toString().equals("Mithril_1")) {
    addAllPower(data, 3, true);
    data.attack += 0.6F;
    data.hp_blood += 0.05F;
    }
    if (Material.toString().equals("SoulSteel_1")) {
    addAllPower(data, 3, true);
    data.attack += 0.5F;
    data.hp_blood += 0.05F;
    }
    if (Material.toString().equals("MysteriousIron_1")) {
    addAllPower(data, 3, true);
    data.attack += 0.4F;
    data.hp_blood += 0.05F;
    }
    if (Material.toString().equals("HolyCopper_1")) {
    addAllPower(data, 3, true);
    data.attack += 0.3F;
    data.hp_blood += 0.05F;
    }
    if (Material.toString().equals("BloodDragonArmor_1")) {
    if (player.func_110143_aJ() > player.func_110138_aP() * 0.9F) {
    addAllPower(data, 5, true);
    data.attack += 0.6F;
    }
    return;
    }
    if (Material == LapudaCore.MeteoriteArmor.ArmorMaterials[0]) {
    addAllPower(data, 1, true);
    if (player.func_110143_aJ() > player.func_110138_aP() * 0.9F)
    data.attack += 0.2F;
    return;
    }
    if (Material == LapudaCore.MeteoriteArmor.ArmorMaterials[1]) {
    addAllPower(data, 2, true);
    if (player.func_110143_aJ() > player.func_110138_aP() * 0.9F)
    data.attack += 0.2F;
    return;
    }
    if (Material == LapudaCore.MeteoriteArmor.ArmorMaterials[2]) {
    addAllPower(data, 3, true);
    if (player.func_110143_aJ() > player.func_110138_aP() * 0.9F)
    data.attack += 0.2F;
    return;
    }
    if (Material == LapudaCore.MeteoriteArmor.ArmorMaterials[3]) {
    addAllPower(data, 4, true);
    if (player.func_110143_aJ() > player.func_110138_aP() * 0.9F)
    data.attack += 0.2F;
    return;
    }
    if (Material.toString().equals("oceanArmor_1")) {
    addAllPower(data, 0, true);
    float damages = 0.04F;
    data.attack += root.produce.getLV(Produce.Fishing) * damages;
    return;
    }
    if (Material.toString().equals("farmArmor_1")) {
    addAllPower(data, 0, true);
    float damages = 0.04F;
    data.attack += root.produce.getLV(Produce.Farmer) * damages;
    return;
    }
    if (Material.toString().equals("BossStartDragonArmor_1")) {
    addAllPower(data, 3, true);
    data.attack += 0.4F;
    }
    if (Material.toString().equals("TempleArmor_1")) {
    addAllPower(data, 1, true);
    if (target != null) {
    if (target instanceof net.minecraft.entity.boss.IBossDisplayData)
    data.attack += 0.4F;
    if (target instanceof IDungeonBoss) {
    IDungeonBoss boss = (IDungeonBoss)target;
    if (boss.isBoss())
    data.attack += 0.4F;
    }
    }
    return;
    }
    if (Material.toString().equals("StrongholdArmor_1")) {
    if (player.func_110143_aJ() < player.func_110138_aP() * 0.5F) {
    addAllPower(data, 4, true);
    data.attack += 0.8F;
    }
    return;
    }
    if (Material.toString().equals("ShadowSecretGold_1")) {
    addAllPower(data, 0, true);
    float damages = 0.04F;
    data.attack += root.produce.getLV(Produce.Mining) * damages;
    return;
    }
    if (Material.toString().equals("FeatherSnakeArmor_1")) {
    addAllPower(data, 2, true);
    if (!player.field_70170_p.field_72995_K)
    PotionEffectM3.addPotion((EntityLivingBase)player, PotionM3.potionWhiteSnake, 10, 0);
    return;
    }
    if (Material.toString().equals("DungeonGolden_1")) {
    addAllPower(data, 2, true);
    if (!player.field_70170_p.field_72995_K &&
    player.field_71071_by.func_146026_a(Items.field_151043_k)) {
    data.attack += 0.6F;
    data.penetration_base += 4;
    }
    return;
    }
    if (Material == WeaponCore.bedrock_level_1.ArmorMaterials[1]) {
    addAllPower(data, 1, true);
    return;
    }
    if (Material == WeaponCore.bedrock_level_1.ArmorMaterials[2]) {
    data.attack += 0.25F;
    data.crit += 8;
    return;
    }
    if (Material == WeaponCore.bedrock_level_1.ArmorMaterials[3]) {
    data.hp_blood += 0.05F;
    return;
    }
    if (Material == WeaponCore.bedrock_level_2.ArmorMaterials[1]) {
    addAllPower(data, 3, true);
    return;
    }
    if (Material == WeaponCore.bedrock_level_2.ArmorMaterials[2]) {
    data.attack += 0.35F;
    data.crit += 8;
    return;
    }
    if (Material == WeaponCore.bedrock_level_2.ArmorMaterials[3]) {
    data.hp_blood += 0.1F;
    return;
    }
    if (Material == LegendaryWeaponCore.Bear) {
    data.xp += 0.1F;
    return;
    }
    if (Material == LegendaryWeaponCore.Falcon) {
    data.crit += 15;
    data.xp += 0.1F;
    return;
    }
    if (Material == LegendaryWeaponCore.Fox) {
    data.penetration_base += 5;
    data.xp += 0.1F;
    return;
    }
    if (Material == LegendaryWeaponCore.Wolf) {
    data.attack += 0.15F;
    data.xp += 0.1F;
    return;
    }
    if (Material == UndeadGraveCore.ArmorM1) {
    data.attack += 0.1F;
    data.hp_blood += 0.05F;
    return;
    }
    if (Material == UndeadGraveCore.ArmorM2) {
    data.attack += 0.2F;
    data.crit += 7;
    return;
    }
    if (Material == UndeadGraveCore.ArmorM3) {
    data.attack += 0.1F;
    data.crit += 5;
    if (!player.field_70170_p.field_72995_K)
    root.mana.addPower(15);
    return;
    }
    if (Material == WeaponCore.legend_ore.ArmorMaterials[0]) {
    addAllPower(data, 0, true);
    return;
    }
    if (Material == WeaponCore.legend_ore.ArmorMaterials[1]) {
    addAllPower(data, 1, true);
    return;
    }
    if (Material == WeaponCore.legend_ore.ArmorMaterials[2]) {
    addAllPower(data, 2, true);
    return;
    }
    if (Material == WeaponCore.legend_ore.ArmorMaterials[3]) {
    addAllPower(data, 3, true);
    return;
    }
    if (Material == WeaponCore.epic_ore.ArmorMaterials[0]) {
    data.attack += 0.1F;
    data.crit += 3;
    return;
    }
    if (Material == WeaponCore.epic_ore.ArmorMaterials[1]) {
    data.attack += 0.15F;
    data.crit += 5;
    return;
    }
    if (Material == WeaponCore.epic_ore.ArmorMaterials[2]) {
    data.attack += 0.2F;
    data.crit += 7;
    return;
    }
    if (Material == WeaponCore.epic_ore.ArmorMaterials[3]) {
    data.attack += 0.25F;
    data.crit += 9;
    return;
    }
    if (Material == ItemArmor.ArmorMaterial.GOLD) {
    data.attack += 0.3F;
    return;
    }
    if (Material == ItemArmor.ArmorMaterial.CHAIN) {
    data.attack += 0.15F;
    data.penetration_base += 3;
    return;
    }
    if (Material == ManaMetalMod.ArmorKnight) {
    data.crit += 5;
    data.penetration_base += 2;
    }
    if (Material == ItemArmor.ArmorMaterial.DIAMOND) {
    data.attack += 0.1F;
    if (!player.field_70170_p.field_72995_K)
    PotionEffectM3.addPotion(target, PotionM3.potionBadArmor, 10, 0);
    return;
    }
    if (Material == WeaponCore.BloodMetal.armorMaterial) {
    data.hp_blood += 0.1F;
    return;
    }
    if (Material == WeaponCore.Dark.armorMaterial) {
    if (player.func_110143_aJ() < player.func_110138_aP() * 0.3F)
    data.attack += 0.35F;
    return;
    }
    if (Material == WeaponCore.AncientThulium.armorMaterial) {
    if (target == root.carrer.lastAttackTarget)
    data.attack += 0.2F;
    return;
    }
    if (Material == WeaponCore.ManaS.armorMaterial) {
    if (!player.field_70170_p.field_72995_K)
    root.mana.addPower(20);
    return;
    }
    if (Material == WeaponCore.UniverseEnergy.armorMaterial) {
    data.attack += 0.2F;
    data.crit += 5;
    return;
    }
    if (Material == WeaponCore.NeutronEnergy.armorMaterial) {
    data.attack += 0.1F;
    return;
    }
    if (Material == WeaponCore.Endless.armorMaterial) {
    if (root.mana.getMana() > root.mana.getMagicMax() * 0.5D)
    data.attack += 0.25F;
    return;
    }
    if (Material == WeaponCore.Crimson.armorMaterial) {
    if (player.func_110143_aJ() >= player.func_110138_aP())
    data.attack += 0.35F;
    return;
    }
    if (Material == WeaponCore.Cobalt.armorMaterial) {
    data.attack += 0.15F;
    return;
    }
    if (Material == WeaponCore.Palladium.armorMaterial) {
    data.hp_blood += 0.05F;
    return;
    }
    if (Material == WeaponCore.RuneSteel.armorMaterial) {
    addAllPower(data, 0, true);
    return;
    }
    if (Material == WeaponCore.TrueAncientThulium.armorMaterial) {
    data.attack += 0.2F;
    data.hp_blood += 0.05F;
    return;
    }
    if (Material.toString().equals("armor_Titanium_1")) {
    addAllPower(data, 1, true);
    return;
    }
    if (Material.toString().equals("armor_Lead_1")) {
    data.attack += 0.1F;
    data.critDamage += 0.1F;
    return;
    }
    if (Material.toString().equals("goldSteeleafIngotArmor_1")) {
    addAllPower(data, 1, true);
    if (target instanceof net.minecraft.entity.boss.IBossDisplayData)
    data.attack += 0.2F;
    return;
    }
    if (Material.toString().equals("powerIronwoodIngotArmor_1")) {
    addAllPower(data, 1, true);
    data.hp_blood += 0.05F;
    return;
    }
    if (Material.toString().equals("FIERY")) {
    if (target.func_70027_ad())
    data.attack += 0.35F;
    return;
    }
    if (Material.toString().equals("KNIGHTMETAL")) {
    if (player.func_70115_ae())
    data.attack += 0.5F;
    return;
    }
    if (Material.toString().equals("KNIGHTPHANTOM")) {
    addAllPower(data, 2, true);
    data.hp_blood += 0.1F;
    return;
    }
    if (Material.toString().equals("YETI")) {
    addAllPower(data, 2, true);
    if (!player.field_70170_p.field_72995_K &&
    target != null)
    target.func_70690_d(new PotionEffect(2, 200, 1));
    return;
    }
    if (Material.toString().equals("ARCTIC")) {
    addAllPower(data, 1, true);
    return;
    }
    if (Material.toString().equals("CompressionSteelArmor_1")) {
    data.attack += 0.2F;
    data.hp_blood += 0.1F;
    return;
    }
    if (MMM.isThaumcraft) {
    if (Material.toString().equals("MisriruArmorMaterial")) {
    data.attack += 0.35F;
    return;
    }
    if (Material.toString().equals("MisriruArmorMaterialTrue")) {
    data.attack += 0.5F;
    data.hp_blood += 0.15F;
    return;
    }
    if (Material.toString().equals("SPECIAL")) {
    data.attack += 0.2F;
    data.penetration_base += 2;
    return;
    }
    if (Material.toString().equals("VOID")) {
    data.attack += 0.2F;
    data.penetration_base += 4;
    data.hp_blood += 0.1F;
    return;
    }
    if (Material.toString().equals("FORTRESS")) {
    data.attack += 0.3F;
    data.hp_blood += 0.1F;
    return;
    }
    }
    if (MMM.isBotania) {
    if (Material.toString().equals("MANASTEEL")) {
    if (root.mana.getMana() >= root.mana.getMagicMax() * 0.5F) {
    data.attack += 0.2F;
    data.penetration_base += 5;
    }
    return;
    }
    if (Material.toString().equals("TERRASTEEL")) {
    data.attack += 0.3F;
    data.hp_blood += 0.1F;
    return;
    }
    if (Material.toString().equals("B_ELEMENTIUM")) {
    if (root.mana.getMana() < root.mana.getMagicMax() * 0.8F) {
    data.attack += 0.3F;
    data.penetration_base += 5;
    }
    return;
    }
    if (Material.toString().equals("MANAWEAVE")) {
    data.attack += 0.1F;
    data.penetration_base += 2;
    root.mana.addPower(50);
    return;
    }
    }
    if (MMM.isMoCreatures) {
    if (Material.toString().equals("crocARMOR")) {
    data.attack += 0.25F;
    if (!player.field_70170_p.field_72995_K &&
    target != null)
    target.func_70690_d(new PotionEffect(2, 100, 1));
    return;
    }
    if (Material.toString().equals("furARMOR")) {
    data.attack += 0.2F;
    return;
    }
    if (Material.toString().equals("hideARMOR")) {
    data.attack += 0.2F;
    data.penetration_base += 4;
    return;
    }
    }
    if (MMM.isAether) {
    if (Material.toString().equals("Armor_Zanite")) {
    data.attack += 0.1F;
    data.penetration_base += 2;
    return;
    }
    if (Material.toString().equals("Armor_Gravitite")) {
    if (!player.field_70122_E)
    data.attack += 0.6F;
    return;
    }
    if (Material.toString().equals("Armor_Neptune")) {
    if (player.func_70090_H()) {
    data.attack += 0.65F;
    data.penetration_base += 8;
    }
    return;
    }
    if (Material.toString().equals("Armor_Phoenix")) {
    if (!player.field_70170_p.field_72995_K &&
    target != null) {
    target.func_70015_d(10);
    if (target.func_70027_ad())
    data.attack += 0.9F;
    }
    return;
    }
    if (Material.toString().equals("Armor_Obsidian")) {
    data.penetration_base += 11;
    data.hp_blood += 0.1F;
    return;
    }
    if (Material.toString().equals("Armor_Valkyrie")) {
    data.attack += 0.3F;
    data.penetration_base += 5;
    data.hp_blood += 0.1F;
    return;
    }
    }
    if (MMM.isChocolateQuest) {
    if (Material.toString().equals("CQ_dragon")) {
    data.attack += 0.6F;
    data.penetration_base += 9;
    }
    if (Material.toString().equals("CQ_king")) {
    data.attack += 0.3F;
    data.hp_blood += 0.1F;
    }
    if (Material.toString().equals("TURTLE")) {
    data.hp_blood += 0.1F;
    if (!player.field_70170_p.field_72995_K) {
    PotionEffectM3.addPotion(root, PotionM3.potionbrewing3, 200, 0);
    PotionEffectM3.addPotion(root, PotionM3.potionResistance2, 200, 0);
    }
    }
    if (Material.toString().equals("MONSTER_FUR")) {
    data.attack += 0.3F;
    if (!player.field_70170_p.field_72995_K &&
    target != null)
    try {
    target.func_70690_d(new PotionEffect(2, 100, 1));
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    if (Material.toString().equals("CQ_bull"))
    data.attack_base += root.defe.getDefe() + ToolCore.getPlayerArmorDefense(player);
    if (Material.toString().equals("CQ_slime") &&
    !player.field_70170_p.field_72995_K) {
    if (player.field_71071_by.func_146026_a(Items.field_151123_aH))
    data.attack += 0.7F;
    if (player.field_70170_p.field_73012_v.nextInt(5) == 0)
    MMM.addItemToPlayer(Items.field_151123_aH, player);
    }
    if (Material.toString().equals("CQ_mage")) {
    data.attack += 0.1F;
    if (!player.field_70170_p.field_72995_K)
    root.mana.addPower(60);
    }
    }
    if (MMM.isMetallurgy) {
    if (Material.toString().equals("metallurgy.tartarite")) {
    data.attack += 0.5F;
    data.penetration_base += 4;
    data.hp_blood += 0.05F;
    return;
    }
    if (Material.toString().equals("metallurgy.adamantine")) {
    data.attack += 0.4F;
    if (!player.field_70170_p.field_72995_K &&
    target != null)
    try {
    target.func_70690_d(new PotionEffect(2, 100, 2));
    } catch (Exception e) {
    e.printStackTrace();
    }
    return;
    }
    if (Material.toString().equals("metallurgy.atlarus")) {
    data.attack += 0.4F;
    if (!player.field_70170_p.field_72995_K &&
    target != null &&
    target.func_70027_ad())
    data.attack += 0.2F;
    return;
    }
    if (Material.toString().equals("metallurgy.sanguinite")) {
    data.attack += 0.4F;
    data.penetration_base += 4;
    return;
    }
    if (Material.toString().equals("metallurgy.celenegil")) {
    if (!player.field_70170_p.field_72995_K &&
    player.func_82165_m(19))
    data.attack += 0.7F;
    return;
    }
    if (Material.toString().equals("metallurgy.orichalcum")) {
    if (!player.field_70170_p.field_72995_K &&
    root.mana.getMana() > root.mana.getMagicMax() * 0.5F)
    data.attack += 0.5F;
    return;
    }
    if (Material.toString().equals("metallurgy.vulcanite")) {
    if (!player.field_70170_p.field_72995_K &&
    player.func_70027_ad())
    data.attack += 0.7F;
    return;
    }
    if (Material.toString().equals("metallurgy.mithril") || Material.toString().equals("metallurgy.carmot") || Material.toString().equals("metallurgy.kalendrite")) {
    data.attack += 0.3F;
    data.penetration_base += 2;
    return;
    }
    if (Material.toString().equals("metallurgy.oureclase") || Material.toString().equals("metallurgy.midasium") || Material.toString().equals("metallurgy.vyroxeres") || Material.toString().equals("metallurgy.ceruclase")) {
    data.attack += 0.2F;
    data.penetration_base += 2;
    return;
    }
    }
    if (Material.toString().equals("candyarmormaterial")) {
    data.attack += 0.2F;
    if (!player.field_70170_p.field_72995_K &&
    target != null)
    try {
    target.func_70690_d(new PotionEffect(2, 100, 2));
    } catch (Exception e) {
    e.printStackTrace();
    }
    return;
    }
    if (Material.toString().equals("TofuMetalSuperArmorMaterial")) {
    Item item = GameRegistry.findItem("TofuCraft", "tofuKinu");
    if (item != null &&
    player.field_71071_by.func_146028_b(item)) {
    if (!player.field_70170_p.field_72995_K &&
    player.field_70170_p.field_73012_v.nextInt(10) == 0)
    player.field_71071_by.func_146026_a(item);
    data.attack += 0.4F;
    data.penetration_base += 5;
    }
    return;
    }
    if (Material.toString().equals("ICHOR")) {
    data.attack += 0.5F;
    data.penetration_base += 8;
    data.hp_blood += 0.05F;
    return;
    }
    }

    public static final void addAllPower(AttackEffect data, int type, boolean isAttack) {
    if (isAttack) {
    switch (type) {
    case 0:
    data.attack += 0.15F;
    data.crit += 4;
    data.penetration_base++;
    data.final_attack += 0.01F;
    return;
    case 1:
    data.attack += 0.2F;
    data.crit += 6;
    data.penetration_base += 2;
    data.final_attack += 0.02F;
    return;
    case 2:
    data.attack += 0.25F;
    data.crit += 8;
    data.penetration_base += 3;
    data.final_attack += 0.03F;
    return;
    case 3:
    data.attack += 0.3F;
    data.crit += 10;
    data.penetration_base += 4;
    data.final_attack += 0.04F;
    return;
    case 4:
    data.attack += 0.35F;
    data.crit += 12;
    data.penetration_base += 5;
    data.final_attack += 0.05F;
    return;
    case 5:
    data.attack += 0.4F;
    data.crit += 14;
    data.penetration_base += 6;
    data.final_attack += 0.06F;
    return;
    case 6:
    data.attack += 0.45F;
    data.crit += 16;
    data.penetration_base += 7;
    data.final_attack += 0.07F;
    return;
    case 7:
    data.attack += 0.5F;
    data.crit += 18;
    data.penetration_base += 8;
    data.final_attack += 0.08F;
    return;
    case 8:
    data.attack += 0.55F;
    data.crit += 20;
    data.penetration_base += 9;
    data.final_attack += 0.09F;
    return;
    case 9:
    data.attack += 0.6F;
    data.crit += 22;
    data.penetration_base += 10;
    data.final_attack += 0.01F;
    return;
    case 10:
    data.attack += 0.65F;
    data.crit += 24;
    data.penetration_base += 11;
    data.final_attack += 0.11F;
    return;
    }
    } else {
    switch (type) {
    case 0:
    data.avoid += 4;
    data.defense += 8;
    return;
    case 1:
    data.avoid += 6;
    data.defense += 12;
    return;
    case 2:
    data.avoid += 8;
    data.defense += 16;
    return;
    case 3:
    data.avoid += 10;
    data.defense += 20;
    return;
    case 4:
    data.avoid += 12;
    data.defense += 24;
    return;
    case 5:
    data.avoid += 14;
    data.defense += 32;
    return;
    case 6:
    data.avoid += 16;
    data.defense += 36;
    return;
    case 7:
    data.avoid += 18;
    data.defense += 40;
    return;
    case 8:
    data.avoid += 20;
    data.defense += 44;
    return;
    case 9:
    data.avoid += 22;
    data.defense += 48;
    return;
    case 10:
    data.avoid += 24;
    data.defense += 52;
    return;
    }
    }
    }

    依据-毕业套效果
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    public static final int isArmorFullLV(EntityPlayer player) {
    ItemStack[] armor = player.field_71071_by.field_70460_b;
    if (armor[0].func_77973_b() instanceof ItemToolArmorSpecial && armor[1].func_77973_b() instanceof ItemToolArmorSpecial && armor[2].func_77973_b() instanceof ItemToolArmorSpecial && armor[3].func_77973_b() instanceof ItemToolArmorSpecial &&
    getType(armor[0]) == getType(armor[1]) && getType(armor[0]) == getType(armor[2]) && getType(armor[0]) == getType(armor[3]))
    return findMin(new int[] { getLV(armor[0]), getLV(armor[1]), getLV(armor[2]), getLV(armor[3]) });
    return -1;
    }


    public static final void doEffectAttack(AttackEffect data, ItemArmor.ArmorMaterial Material, EntityPlayer player, EntityLivingBase target, ManaMetalModRoot root, ManaMetalModRoot rootTarget, DamageSource source, float damage) {
    if (player.field_71071_by.field_70460_b[0].func_77973_b() instanceof ItemToolArmorSpecial) {
    int LV = ItemToolArmorSpecial.isArmorFullLV(player);
    if (LV > -1) {
    int type = ItemToolArmorSpecial.getType(player.field_71071_by.field_70460_b[0]);
    if (Material.toString().equals("DefendGuard_1")) {
    if (type == 1) {
    if (LV >= 5) {
    data.defense += 75;
    data.defense = (int)(data.defense + root.defe.getDefe() * 0.05D);
    }
    if (LV >= 15) {
    data.defense = (int)(data.defense + root.defe.getDefe() * 0.15D);
    data.damage_reduce += 0.1F;
    }
    if (LV >= 30 &&
    root.carrer.armorCD_3 == 0) {
    PotionEffectM3.addPotionUpLV(root, PotionM3.potionASP_d2, 7, 5);
    root.carrer.armorCD_3 = 2;
    }
    if (LV >= 35) {
    data.defense = (int)(data.defense + root.defe.getDefe() * 0.2D);
    data.damage_reduce += 0.15F;
    }
    if (LV >= 40) {
    data.defense -= 400;
    int temp = data.defense + root.defe.getDefe() + ToolCore.getPlayerArmorDefense(player);
    if (temp > 0) {
    int attack = (int)(0.4D * temp);
    data.attack_base += attack;
    }
    }
    }
    if (type == 2 || type == 0) {
    if (LV >= 5) {
    data.defense += 50;
    data.damage_reduce += 0.05F;
    }
    if (LV >= 15) {
    data.defense = (int)(data.defense + root.defe.getDefe() * 0.1D);
    data.damage_reduce += 0.1F;
    }
    if (LV >= 30 &&
    root.carrer.armorCD_3 == 0) {
    root.carrer.armorCD_3 = 2;
    PotionEffectM3.addPotionUpLV(root, PotionM3.potionASP_d6, 7, 5);
    }
    if (LV >= 35)
    data.defense = (int)(data.defense + root.defe.getDefe() * 0.2D);
    }
    return;
    }
    if (Material.toString().equals("WraithReaper_1")) {
    if (target != null &&
    target.func_110143_aJ() < target.func_110138_aP() * 0.5F) {
    data.attack += 0.3F;
    data.penetration_base += 4;
    }
    if (type == 1) {
    if (LV >= 5) {
    data.attack += 0.1F;
    data.critDamage += 0.05F;
    }
    if (LV >= 10)
    PotionEffectM3.addPotionUpLV(rootTarget, PotionM3.potionASP_r1, 10, 100);
    if (LV >= 15) {
    data.attack += 0.15F;
    data.critDamage += 0.1F;
    }
    if (LV >= 20) {
    data.attack += 0.07F;
    data.critDamage += 0.05F;
    if (root.carrer.armorCD_1 == 0) {
    PotionEffectM3.addPotionUpLV(root, PotionM3.potionASP_r2, 5, 5);
    root.carrer.armorCD_1 = 2;
    }
    }
    if (LV >= 25) {
    data.attack += 0.2F;
    data.critDamage += 0.15F;
    }
    if (LV >= 30 &&
    root.carrer.armorCD_2 == 0) {
    PotionEffectM3.addPotionList(MMM.findMobs((Entity)player, 11.0D), PotionM3.potionASP_r3, 5, 0);
    root.carrer.armorCD_2 = 5;
    }
    if (LV >= 35 &&
    PotionEffectM3.isPotion(rootTarget, PotionM3.potionASP_r3))
    data.critDamage += 0.5F;
    if (LV >= 40) {
    data.final_attack += 0.25F;
    data.attack += 0.25F;
    data.critDamage += 0.5F;
    }
    if (LV >= 45) {
    int datacount = PotionEffectM3.isPotion(MMM.findMobs((Entity)player, 6.0D), new PotionM3[] { PotionM3.potionASP_r3 });
    if (datacount > 0) {
    data.attack += datacount * 0.05F;
    data.critDamage += datacount * 0.03F;
    }
    }
    }
    if (type == 2 || type == 0) {
    if (LV >= 5)
    data.attack_base += 18;
    if (LV >= 10 &&
    MMM.isEntityBoss((Entity)target))
    data.attack += 0.1F;
    if (LV >= 15)
    data.attack_base += 36;
    if (LV >= 20 &&
    player.field_70170_p.field_73012_v.nextInt(10) == 0) {
    int LVpp = PotionEffectM3.addPotionUpLV(root, PotionM3.potionASP_r7, 16, 10);
    if (LVpp >= 10 &&
    MMM.isEntityBoss((Entity)target))
    data.attack += 0.2F;
    }
    if (LV >= 25 &&
    !target.field_70170_p.field_72995_K &&
    target.func_110143_aJ() < target.func_110138_aP() * 0.5F &&
    MMM.isEntityBoss((Entity)target))
    data.attack += 0.3F;
    if (LV >= 30 &&
    MMM.isEntityBoss((Entity)target) &&
    target.func_110143_aJ() < target.func_110138_aP() * 0.5F) {
    PotionEffectM3.addPotion(rootTarget, PotionM3.potionASP_r8, 7, 0);
    data.attack += 0.2F;
    data.critDamage += 0.1F;
    }
    if (LV >= 35)
    if (MMM.isEntityBoss((Entity)target)) {
    data.attack += 0.75F;
    } else {
    data.attack -= 0.5F;
    }
    if (LV >= 40 &&
    PotionEffectM3.isPotion(rootTarget, PotionM3.potionASP_r8))
    PotionEffectM3.addPotion(root, PotionM3.potionASP_r9, 7, 0);
    if (LV >= 45) {
    if (PotionEffectM3.isPotion(rootTarget, PotionM3.potionASP_r8))
    PotionEffectM3.addPotionUpLV(rootTarget, PotionM3.potionASP_r10, 6, 10);
    if (PotionEffectM3.isPotion(root, PotionM3.potionASP_r9) &&
    PotionEffectM3.isPotion(rootTarget, PotionM3.potionASP_r10))
    data.final_attack += 0.1F;
    }
    if (LV >= 50 &&
    !player.field_70170_p.field_72995_K &&
    !target.field_70128_L && PotionEffectM3.isPotion(rootTarget, PotionM3.potionASP_r10) && !PotionEffectM3.isPotion(rootTarget, PotionM3.potionInvincible)) {
    float hpdata = 0.01F;
    if (target.func_110143_aJ() < target.func_110138_aP() * hpdata)
    target.func_70606_j(1.0F);
    }
    }
    return;
    }
    if (Material.toString().equals("SecretMagic_1")) {
    if (root.mana.getMana() > root.mana.getMagicMax() * 0.9F) {
    data.attack += 0.3F;
    data.penetration_base += 4;
    }
    if (type == 1) {
    if (LV >= 5) {
    data.attack += 0.12F;
    root.mana.magicReliefTemp += 0.01F;
    }
    if (LV >= 10)
    data.attack += 0.2F;
    if (LV >= 15) {
    data.attack += 0.16F;
    root.mana.magicReliefTemp += 0.02F;
    }
    if (LV >= 25) {
    data.attack += 0.24F;
    root.mana.magicReliefTemp += 0.04F;
    }
    if (LV >= 30)
    data.no_tack_damage += (int)(root.mana.getMagicMax() * 0.32F);
    if (LV >= 35 &&
    PotionEffectM3.getPotionLV(root, PotionM3.potionASP_m1) >= 5) {
    data.final_attack += 0.1F;
    data.critDamage += 0.15F;
    }
    if (LV >= 40) {
    int max = (int)(root.mana.getMagicMax() * 0.3F);
    PotionEffectM3.addPotionUpLVData(root, PotionM3.potionASP_m4, 15, (int)(damage * 0.03F + 1.0F), max);
    }
    if (LV >= 45) {
    int max = (int)(root.mana.getMagicMax() * 0.3F);
    if (PotionEffectM3.isPotion(root, PotionM3.potionASP_m4)) {
    data.attack += 0.35F;
    data.crit += 30;
    data.critDamage += 0.1F;
    root.mana.addPower((int)(damage * 0.03F));
    }
    }
    }
    if (type == 2 || type == 0) {
    if (LV >= 5) {
    root.mana.addPower((int)(damage * 0.001F));
    root.mana.magicReliefTemp += 0.01F;
    }
    if (LV >= 10 &&
    root.carrer.armorCD_1 == 0) {
    root.carrer.armorCD_1 = 45;
    int max = (int)(root.mana.getMagicMax() * 0.15F);
    PotionEffectM3.addPotion(root, PotionM3.potionASP_m4, 45, max);
    }
    if (LV >= 15) {
    root.mana.addPower((int)(damage * 0.001F));
    root.mana.magicReliefTemp += 0.02F;
    }
    if (LV >= 25) {
    root.mana.addPower((int)(damage * 0.002F));
    root.mana.magicReliefTemp += 0.04F;
    }
    if (LV >= 30)
    data.no_tack_damage += (int)(root.mana.getMagicMax() * 0.32F);
    if (LV >= 35 &&
    PotionEffectM3.isPotion(root, PotionM3.potionASP_m4)) {
    data.attack += 0.2F;
    data.critDamage += 0.15F;
    data.crit += 15;
    data.avoid += 15;
    }
    if (LV >= 50 &&
    !PotionEffectM3.isPotion(root, PotionM3.potionASP_m9))
    PotionEffectM3.addPotionUpLV(root, PotionM3.potionASP_m8, 7, 20);
    }
    }
    if (Material.toString().equals("EternalSpirit_1")) {
    if (type == 1) {
    if (LV >= 5)
    data.hp_blood += 0.02F;
    if (LV >= 10 &&
    root.carrer.armorCD_3 == 0) {
    root.carrer.armorCD_3 = 2;
    int ppLV = PotionEffectM3.addPotionUpLV(target, PotionM3.potionASP_f2, 10, 10);
    if (ppLV >= 10) {
    data.hp_blood += 0.05F;
    float hpdata = 0.01F;
    if (MMM.isEntityBoss((Entity)target)) {
    hpdata = 0.001F;
    } else if (target instanceof IDungeonBoss) {
    IDungeonBoss IDungeonBoss = (IDungeonBoss)target;
    if (IDungeonBoss.isBoss())
    hpdata = 0.001F;
    }
    data.no_tack_damage += target.func_110138_aP() * hpdata;
    }
    }
    if (LV >= 15)
    data.hp_blood += 0.04F;
    if (LV >= 20) {
    PotionEffectM3.addPotion(root, PotionM3.potionASP_f0, 20, 0);
    data.attack += 0.35F;
    data.critDamage += 0.1F;
    }
    if (LV >= 25 &&
    root.carrer.armorCD_1 == 0) {
    root.carrer.armorCD_1 = 3;
    PotionEffectM3.addPotionUpLV(root, PotionM3.potionASP_f1, 20, 5);
    if (M3Config.UseBloodSystem &&
    root.carrer.bloodData > 0) {
    int reblood = (int)(player.func_110138_aP() * 0.05F);
    root.carrer.addBloodData(reblood);
    }
    }
    if (LV >= 30 &&
    player.func_110143_aJ() > player.func_110138_aP() * 0.9F) {
    data.final_attack += 0.1F;
    data.critDamage += 0.2F;
    }
    if (LV >= 40 &&
    player.func_110143_aJ() < player.func_110138_aP() * 0.7F)
    data.hp_blood += 0.04F;
    if (LV >= 45) {
    int ppLV = PotionEffectM3.addPotionUpLV(root, PotionM3.potionASP_f5, 5, 10);
    if (ppLV >= 10)
    data.final_attack += 0.1F;
    data.attack = (float)(data.attack + 0.04D * ppLV);
    }
    }
    if (type == 2 || type == 0) {
    if (LV >= 20)
    data.no_tack_damage += player.func_110138_aP() * 0.16F;
    if (LV >= 25 &&
    !root.carrer.hasDamage())
    data.no_tack_damage += player.func_110138_aP() * 0.32F;
    if (LV >= 30)
    if (player.func_110143_aJ() >= player.func_110138_aP() * 0.5F) {
    data.attack += 0.3F;
    PotionEffectM3.addPotion(root, PotionM3.potionASP_f7, 20, 0);
    } else {
    PotionEffectM3.addPotion(root, PotionM3.potionASP_f8, 20, 0);
    }
    if (LV >= 50 &&
    root.carrer.armorCD_1 == 0) {
    root.carrer.armorCD_1 = 2;
    int ppLV = PotionEffectM3.addPotionUpLV(root, PotionM3.potionASP_f9, 7, 5);
    if (ppLV >= 5)
    data.no_tack_damage += player.func_110138_aP() * 0.64F;
    }
    }
    }
    }
    }
    }

    1

    未完待续……