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); } } }