EntityDamageEffects.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package me.km.effects.passive;
  2. import me.km.KajetansMod;
  3. import me.km.api.Module;
  4. import me.km.api.ModuleListener;
  5. import me.km.api.Utils;
  6. import me.km.effects.Effect;
  7. import me.km.effects.EffectUtils;
  8. import me.km.events.PlayerHurtEvent;
  9. import me.km.playerbank.PlayerData;
  10. import net.minecraft.entity.Entity;
  11. import net.minecraft.entity.player.EntityPlayer;
  12. import net.minecraft.entity.player.EntityPlayerMP;
  13. import net.minecraft.init.MobEffects;
  14. import net.minecraft.util.DamageSource;
  15. import net.minecraftforge.event.entity.living.LivingHurtEvent;
  16. import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
  17. public class EntityDamageEffects extends ModuleListener
  18. {
  19. public EntityDamageEffects(Module m)
  20. {
  21. super(m);
  22. }
  23. @SubscribeEvent(receiveCanceled = false)
  24. public void damageHandler(PlayerHurtEvent e)
  25. {
  26. EntityPlayerMP p = e.getEntityPlayer();
  27. if(!KajetansMod.worldManager.getWorldPreferences(p.world).skills)
  28. {
  29. return;
  30. }
  31. int reducer = EffectUtils.getEffectLevel(p, Effect.LESS_DAMAGE);
  32. if(reducer > 0)
  33. {
  34. e.setAmount(e.getAmount() / (reducer + 1));
  35. }
  36. PlayerData data = KajetansMod.playerbank.getData(p);
  37. if(data.hasData("shadow"))
  38. {
  39. p.setInvisible(false);
  40. data.removeData("shadow");
  41. }
  42. DamageSource cause = e.getSource();
  43. if(cause.isMagicDamage() && EffectUtils.getEffectLevel(p, Effect.NO_POISON) >= 1)
  44. {
  45. e.setCanceled(true);
  46. }
  47. else if(cause == DamageSource.FALL)
  48. {
  49. if(data.hasData("fallimmunity"))
  50. {
  51. e.setCanceled(true);
  52. return;
  53. }
  54. int fall = EffectUtils.getEffectLevel(p, Effect.LESS_FALL_DAMAGE);
  55. if(fall >= 1)
  56. {
  57. e.setAmount(e.getAmount() / (fall * 2 + 1));
  58. }
  59. }
  60. }
  61. @SubscribeEvent(receiveCanceled = false)
  62. public void onEntityDamage(LivingHurtEvent e)
  63. {
  64. if(!KajetansMod.worldManager.getWorldPreferences(e.getEntity().world).skills)
  65. {
  66. return;
  67. }
  68. Entity ent = e.getSource().getImmediateSource();
  69. if(ent == null || !(ent instanceof EntityPlayerMP))
  70. {
  71. return;
  72. }
  73. EntityPlayerMP p = (EntityPlayerMP) ent;
  74. Utils.ToolTypes tt = Utils.getToolType(p.getHeldItemMainhand());
  75. float damageBonus = 1;
  76. if(tt != null)
  77. {
  78. switch(tt)
  79. {
  80. case AXE:
  81. damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_AXE_DAMAGE);
  82. break;
  83. case HOE:
  84. damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_HOE_DAMAGE);
  85. break;
  86. case PICKAXE:
  87. damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_PICKAXE_DAMAGE);
  88. break;
  89. case SHOVEL:
  90. damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_SHOVEL_DAMAGE);
  91. break;
  92. case SWORD:
  93. damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_SWORD_DAMAGE);
  94. break;
  95. case DAGGER:
  96. damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_DAGGER_DAMAGE);
  97. break;
  98. case HAMMER:
  99. damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_HAMMER_DAMAGE);
  100. break;
  101. case STICK:
  102. damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_STICK_DAMAGE);
  103. break;
  104. }
  105. }
  106. PlayerData data = KajetansMod.playerbank.getData(p);
  107. if(data.removeData("shadowhit"))
  108. {
  109. EffectUtils.addPotionTo(p, MobEffects.SPEED, 40, 1);
  110. EffectUtils.addPotionTo(p, MobEffects.INVISIBILITY, 40, 0);
  111. }
  112. if(e.getEntity() instanceof EntityPlayerMP)
  113. {
  114. EntityPlayerMP victim = (EntityPlayerMP) e.getEntity();
  115. EntityPlayer damager = KajetansMod.playerbank.getData(victim).getData("doomed", EntityPlayer.class);
  116. if(damager != null && damager.equals(p))
  117. {
  118. damageBonus *= 1.2f;
  119. }
  120. }
  121. if(data.hasData("poisonedblade"))
  122. {
  123. EffectUtils.addPotionTo(e.getEntityLiving(), MobEffects.SPEED, 80, 1);
  124. }
  125. double powerAttack = data.getDouble("powerattack");
  126. if(powerAttack != 0)
  127. {
  128. damageBonus *= powerAttack;
  129. data.removeData("powerattack");
  130. }
  131. e.setAmount(e.getAmount() * damageBonus);
  132. }
  133. }