123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- package me.km.effects.passive;
- import me.km.KajetansMod;
- import me.km.api.Module;
- import me.km.api.ModuleListener;
- import me.km.api.Utils;
- import me.km.effects.Effect;
- import me.km.effects.EffectUtils;
- import me.km.events.PlayerHurtEvent;
- import me.km.playerbank.PlayerData;
- import net.minecraft.entity.Entity;
- import net.minecraft.entity.EntityLivingBase;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.entity.player.EntityPlayerMP;
- import net.minecraft.init.MobEffects;
- import net.minecraft.util.DamageSource;
- import net.minecraftforge.event.entity.living.LivingHealEvent;
- import net.minecraftforge.event.entity.living.LivingHurtEvent;
- import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
- public class EntityDamageEffects extends ModuleListener
- {
- public EntityDamageEffects(Module m)
- {
- super(m);
- }
-
- @SubscribeEvent(receiveCanceled = false)
- public void damageHandler(PlayerHurtEvent e)
- {
- EntityPlayerMP p = e.getEntityPlayer();
- if(!KajetansMod.worldManager.getWorldPreferences(p.world).skills)
- {
- return;
- }
-
- int reducer = EffectUtils.getEffectLevel(p, Effect.LESS_DAMAGE);
- if(reducer > 0)
- {
- e.setAmount(e.getAmount() / (reducer + 1));
- }
-
- PlayerData data = KajetansMod.playerbank.getData(p);
- if(data.hasData("shadow"))
- {
- p.setInvisible(false);
- data.removeData("shadow");
- }
-
- DamageSource cause = e.getSource();
-
- if(cause.isMagicDamage() && EffectUtils.getEffectLevel(p, Effect.NO_POISON) >= 1)
- {
- e.setCanceled(true);
- }
- else if(cause == DamageSource.FALL)
- {
- if(data.hasData("fallimmunity"))
- {
- e.setCanceled(true);
- return;
- }
- int fall = EffectUtils.getEffectLevel(p, Effect.LESS_FALL_DAMAGE);
- if(fall >= 1)
- {
- e.setAmount(e.getAmount() / (fall * 2 + 1));
- }
- }
- }
-
- @SubscribeEvent(receiveCanceled = false)
- public void onEntityDamage(LivingHurtEvent e)
- {
- if(!KajetansMod.worldManager.getWorldPreferences(e.getEntity().world).skills)
- {
- return;
- }
- Entity pEnt = e.getSource().getImmediateSource();
- if(pEnt == null || !(pEnt instanceof EntityPlayerMP))
- {
- return;
- }
- EntityPlayerMP p = (EntityPlayerMP) pEnt;
- Utils.ToolTypes tt = Utils.getToolType(p.getHeldItemMainhand());
- float damageBonus = 1;
- if(tt != null)
- {
- switch(tt)
- {
- case AXE:
- damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_AXE_DAMAGE);
- break;
- case HOE:
- damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_HOE_DAMAGE);
- break;
- case PICKAXE:
- damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_PICKAXE_DAMAGE);
- break;
- case SHOVEL:
- damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_SHOVEL_DAMAGE);
- break;
- case SWORD:
- damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_SWORD_DAMAGE);
- break;
- case DAGGER:
- damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_DAGGER_DAMAGE);
- break;
- case HAMMER:
- damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_HAMMER_DAMAGE);
- break;
- case STICK:
- damageBonus += 0.1f * EffectUtils.getEffectLevel(p, Effect.MORE_STICK_DAMAGE);
- break;
- }
- }
-
- EntityLivingBase ent = e.getEntityLiving();
- PlayerData data = KajetansMod.playerbank.getData(p);
- if(data.removeData("shadowhit"))
- {
- EffectUtils.addPotionTo(p, MobEffects.SPEED, 40, 1);
- EffectUtils.addPotionTo(p, MobEffects.INVISIBILITY, 40, 0);
- }
-
- if(ent instanceof EntityPlayerMP)
- {
- EntityPlayerMP victim = (EntityPlayerMP) ent;
- EntityPlayer damager = KajetansMod.playerbank.getData(victim).getData("doomed", EntityPlayer.class);
- if(damager != null && damager.equals(p))
- {
- damageBonus *= 1.2f;
- }
- }
-
- if(data.hasData("poisonedblade"))
- {
- EffectUtils.addPotionTo(ent, MobEffects.POISON, 80, 1);
- }
-
- if(data.hasData("armorpasser"))
- {
- float reduced = e.getAmount() - Utils.getDamagerAfterArmor(ent, e.getSource(), e.getAmount());
- e.setAmount(e.getAmount() + reduced * 0.35f);
- }
-
- double powerAttack = data.getDouble("powerattack");
- if(powerAttack != 0)
- {
- damageBonus *= powerAttack;
- data.removeData("powerattack");
- }
- powerAttack = data.getDouble("cpower");
- if(powerAttack != 0)
- {
- damageBonus *= powerAttack;
- }
- powerAttack = data.getDouble("impactpunch");
- if(powerAttack != 0)
- {
- damageBonus *= powerAttack;
- EffectUtils.addPotionTo(ent, MobEffects.SLOWNESS, (int) (powerAttack * 20), 1);
- data.removeData("impactpunch");
- }
-
- e.setAmount(e.getAmount() * damageBonus);
- }
-
- @SubscribeEvent(receiveCanceled = false)
- public void onEntityHeal(LivingHealEvent e)
- {
- if(!KajetansMod.worldManager.getWorldPreferences(e.getEntity().world).skills)
- {
- return;
- }
- Entity ent = e.getEntityLiving();
- if(!(ent instanceof EntityPlayerMP))
- {
- return;
- }
- EntityPlayerMP p = (EntityPlayerMP) ent;
- PlayerData data = KajetansMod.playerbank.getData(p);
- if(data.hasData("lessheal"))
- {
- e.setAmount(e.getAmount() / 2);
- }
- }
- }
|