package zmaster587.advancedRocketry.atmosphere;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import zmaster587.advancedRocketry.api.AdvancedRocketryItems;
import zmaster587.advancedRocketry.api.EntityRocketBase;
import zmaster587.advancedRocketry.api.armor.IFillableArmor;
import zmaster587.advancedRocketry.api.armor.IProtectiveArmor;
import zmaster587.advancedRocketry.integration.CompatibilityMgr;
import zmaster587.advancedRocketry.network.PacketOxygenState;
import zmaster587.libVulpes.network.PacketHandler;
/**
* Atmosphere type for vaccum (No air)
* @author Zmaster
*/
public class AtmosphereVacuum extends AtmosphereType {
static Class powerSuitItem;
public static int damageValue;
public AtmosphereVacuum() {
super(true, false, "vacuum");
}
@Override
public void onTick(EntityLivingBase player) {
if(player.worldObj.getTotalWorldTime() % 10 == 0 && !isImmune(player)) {
if(!isImmune(player)) {
player.attackEntityFrom(AtmosphereHandler.vacuumDamage, damageValue);
if(player instanceof EntityPlayer)
PacketHandler.sendToPlayer(new PacketOxygenState(), (EntityPlayer)player);
}
}
}
@Override
public String getDisplayMessage() {
return "Warning: No Oxygen detected!";
}
@Override
public boolean isImmune(EntityLivingBase player) {
//Checks if player is wearing spacesuit or anything that extends ItemSpaceArmor
ItemStack feet = player.getEquipmentInSlot(1);
ItemStack leg = player.getEquipmentInSlot(2);
ItemStack chest = player.getEquipmentInSlot(3);
ItemStack helm = player.getEquipmentInSlot(4);
//TODO change over to use API #ISealedArmor
return (player instanceof EntityPlayer && ((EntityPlayer)player).capabilities.isCreativeMode)
|| player.ridingEntity instanceof EntityRocketBase ||
helm != null && (helm.getItem() instanceof IProtectiveArmor && ((IProtectiveArmor)helm.getItem()).protectsFromSubstance(this, helm, true) || protectsFrom(helm, 1)) &&
chest != null && (chest.getItem() instanceof IProtectiveArmor && ((IProtectiveArmor)chest.getItem()).protectsFromSubstance(this, chest, true) || protectsFrom(chest, 2)) &&
leg != null && (leg.getItem() instanceof IProtectiveArmor && ((IProtectiveArmor)leg.getItem()).protectsFromSubstance(this, leg, true) || protectsFrom(leg, 3)) &&
feet != null && (feet.getItem() instanceof IProtectiveArmor && ((IProtectiveArmor)feet.getItem()).protectsFromSubstance(this, feet, true) || protectsFrom(feet, 4)) &&
(protectsFrom(chest, 2) || ((chest.getItem() instanceof IFillableArmor) && ((IFillableArmor)AdvancedRocketryItems.itemSpaceSuit_Chest).decrementAir(chest, 1) > 0));
}
public static boolean protectsFrom(ItemStack stack, int slot) {
if(CompatibilityMgr.powerSuits) {
if( powerSuitItem == null)
try {
powerSuitItem = Class.forName("net.machinemuse.powersuits.item.ItemPowerArmor");
} catch (ClassNotFoundException e) {
//Silently fail to prevent spam
return false;
}
if(powerSuitItem.isInstance(stack.getItem()))
return true;
}
return false;
}
}