2
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
3.2 KiB
Java

package com.zivilon.cinder_loe.util;
import net.minecraft.entity.*;
import net.minecraft.entity.player.*;
import net.minecraft.util.DamageSource;
import lotr.common.item.*;
import net.minecraft.item.*;
import net.minecraft.world.World;
public class DamageEvent {
public DamageSource source;
public float damage;
public EntityLivingBase defender;
public Entity attacker;
public DamageEvent(DamageSource source, float damage, EntityLivingBase defender, Entity attacker) {
this.source = source;
this.damage = damage;
this.defender = defender;
this.attacker = attacker;
}
public static Pair<DamageEvent, Boolean> run_events(DamageEvent event) {
boolean cancel = false;
World world = event.defender.worldObj;
if (event.defender instanceof EntityPlayer && !event.source.isUnblockable()) {
EntityPlayerMP player = (EntityPlayerMP) event.defender;
ItemStack sword = player.getHeldItem();
if (!(event.attacker instanceof EntityLivingBase)) return new Pair<>(event, cancel);
EntityLivingBase attacker = (EntityLivingBase)event.attacker;
float playerYaw = player.getRotationYawHead();
float attackerYaw = attacker.getRotationYawHead();
// Normalize both angles to be within 0 - 360
playerYaw = (playerYaw + 360) % 360;
attackerYaw = (attackerYaw + 360) % 360;
// Calculate the angle difference
float angleDifference = Math.abs(playerYaw - attackerYaw);
if (angleDifference > 180) {
angleDifference = 360 - angleDifference;
}
ItemStack weapon = attacker.getHeldItem();
if (weapon != null) {
if (player.isBlocking() && angleDifference >= 135 && angleDifference <=225) {
if (weapon.getItem() instanceof ItemAxe || weapon.getItem() instanceof LOTRItemAxe || weapon.getItem() instanceof LOTRItemBattleaxe) {
sword.damageItem((int) (event.damage *1.5), player); // Axes deal 150% the Durability damage
player.clearItemInUse();
world.playSoundAtEntity(player, "random.anvil_land", 1F, 2F);
event.damage *= 0.25f; // Only 25% Passes through
} else if (weapon.getItem() instanceof LOTRItemHammer) {
sword.damageItem((int) event.damage, player); // Hammers bypass the block better, but only deal 100% of the durability damage
player.clearItemInUse();
world.playSoundAtEntity(player, "random.anvil_land", 1F, 2F);
event.damage *= 0.5f; // Only 50% Passes through
} else {
sword.damageItem((int) (event.damage/2), player); //Swords only deal 50% of durability damage
player.clearItemInUse();
world.playSoundAtEntity(player, "random.anvil_land", 1F, 2F);
event.damage = 0.0f;
cancel = true;
}
}
}
}
return new Pair<>(event, cancel);
}
}