package WayofTime.bloodmagic.api.util.helper; import WayofTime.bloodmagic.api.altar.IBloodAltar; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; import net.minecraft.world.World; public class PlayerSacrificeHelper { public static float scalingOfSacrifice = 0.001f; public static int soulFrayDuration = 400; public static Potion soulFrayId; public static float getPlayerIncense(EntityPlayer player) { return IncenseHelper.getCurrentIncense(player); } public static void setPlayerIncense(EntityPlayer player, float amount) { IncenseHelper.setCurrentIncense(player, amount); } public static boolean incrementIncense(EntityPlayer player, float min, float max, float increment) { float amount = getPlayerIncense(player); if (amount < min || amount >= max) { return false; } amount = amount + Math.min(increment, max - amount); setPlayerIncense(player, amount); // System.out.println("Amount of incense: " + amount + ", Increment: " + // increment); return true; } public static boolean sacrificePlayerHealth(EntityPlayer player) { if (player.isPotionActive(soulFrayId)) { return false; } float amount = getPlayerIncense(player); if (amount >= 0) { float health = player.getHealth(); float maxHealth = player.getMaxHealth(); if (health > maxHealth / 10.0) { float sacrificedHealth = health - maxHealth / 10.0f; if (findAndFillAltar(player.getEntityWorld(), player, (int) (sacrificedHealth * 100f * getModifier(amount)))) { player.setHealth(maxHealth / 10.0f); setPlayerIncense(player, 0); player.addPotionEffect(new PotionEffect(soulFrayId.id, soulFrayDuration)); return true; } } } return false; } public static float getModifier(float amount) { return 1 + amount * scalingOfSacrifice; } public static boolean findAndFillAltar(World world, EntityPlayer player, int amount) { int posX = (int) Math.round(player.posX - 0.5f); int posY = (int) player.posY; int posZ = (int) Math.round(player.posZ - 0.5f); IBloodAltar altarEntity = getAltar(world, new BlockPos(posX, posY, posZ)); if (altarEntity == null) { return false; } altarEntity.sacrificialDaggerCall(amount, false); altarEntity.startCycle(); return true; } public static IBloodAltar getAltar(World world, BlockPos blockPos) { TileEntity tileEntity; for (int i = -2; i <= 2; i++) { for (int j = -2; j <= 2; j++) { for (int k = -2; k <= 1; k++) { tileEntity = world.getTileEntity(new BlockPos(i + blockPos.getX(), k + blockPos.getY(), j + blockPos.getZ())); if (tileEntity instanceof IBloodAltar) { return (IBloodAltar) tileEntity; } } } } return null; } }