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.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.MobEffects; import net.minecraft.util.DamageSource; 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 ent = e.getSource().getImmediateSource(); if(ent == null || !(ent instanceof EntityPlayerMP)) { return; } EntityPlayerMP p = (EntityPlayerMP) ent; 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; } } 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(e.getEntity() instanceof EntityPlayerMP) { EntityPlayerMP victim = (EntityPlayerMP) e.getEntity(); 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(e.getEntityLiving(), MobEffects.SPEED, 80, 1); } double powerAttack = data.getDouble("powerattack"); if(powerAttack != 0) { damageBonus *= powerAttack; data.removeData("powerattack"); } e.setAmount(e.getAmount() * damageBonus); } }