package crazypants.enderio.item.darksteel.upgrade;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.potion.PotionHelper;
import net.minecraftforge.client.event.RenderPlayerEvent;
import org.lwjgl.opengl.GL11;
import com.enderio.core.client.render.RenderUtil;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.EnderIO;
import crazypants.enderio.config.Config;
import crazypants.enderio.item.darksteel.DarkSteelItems;
import static org.lwjgl.opengl.GL11.glDepthMask;
public class SolarUpgrade extends AbstractUpgrade {
private static final String KEY_LEVEL = "level";
private static final String UPGRADE_NAME = "speedBoost";
public static final SolarUpgrade SOLAR_ONE = new SolarUpgrade("enderio.darksteel.upgrade.solar_one", (byte) 1, Config.darkSteelSolarOneCost);
public static final SolarUpgrade SOLAR_TWO = new SolarUpgrade("enderio.darksteel.upgrade.solar_two", (byte) 2, Config.darkSteelSolarTwoCost);
private Render render;
public static SolarUpgrade loadFromItem(ItemStack stack) {
if(stack == null) {
return null;
}
if(stack.stackTagCompound == null) {
return null;
}
if(!stack.stackTagCompound.hasKey(KEY_UPGRADE_PREFIX + UPGRADE_NAME)) {
return null;
}
return new SolarUpgrade((NBTTagCompound) stack.stackTagCompound.getTag(KEY_UPGRADE_PREFIX + UPGRADE_NAME));
}
private static ItemStack createUpgradeItem() {
ItemStack pot = new ItemStack(Items.potionitem, 1, 0);
int res = PotionHelper.applyIngredient(0, Items.nether_wart.getPotionEffect(new ItemStack(Items.nether_wart)));
res = PotionHelper.applyIngredient(res, PotionHelper.sugarEffect);
pot.setItemDamage(res);
return pot;
}
private byte level;
public SolarUpgrade(NBTTagCompound tag) {
super(UPGRADE_NAME, tag);
level = tag.getByte(KEY_LEVEL);
}
public SolarUpgrade(String unlocName, byte level, int levelCost) {
super(UPGRADE_NAME, unlocName, createUpgradeItem(), levelCost);
this.level = (byte) level;
}
@Override
public boolean canAddToItem(ItemStack stack) {
if(stack == null || stack.getItem() != DarkSteelItems.itemDarkSteelHelmet || !EnergyUpgrade.itemHasAnyPowerUpgrade(stack)) {
return false;
}
SolarUpgrade up = loadFromItem(stack);
if(up == null) {
return level == 1;
}
return up.level == level - 1;
}
@Override
public boolean hasUpgrade(ItemStack stack) {
if(!super.hasUpgrade(stack)) {
return false;
}
SolarUpgrade up = loadFromItem(stack);
if(up == null) {
return false;
}
return up.unlocName.equals(unlocName);
}
@Override
public ItemStack getUpgradeItem() {
return new ItemStack(EnderIO.blockSolarPanel, 1, level - 1);
}
@Override
public void writeUpgradeToNBT(NBTTagCompound upgradeRoot) {
upgradeRoot.setByte(KEY_LEVEL, level);
}
public int getRFPerSec() {
return level == 1 ? Config.darkSteelSolarOneGen : Config.darkSteelSolarTwoGen;
}
@Override
@SideOnly(Side.CLIENT)
public IRenderUpgrade getRender() {
return render == null ? render = new Render() : render;
}
@SideOnly(Side.CLIENT)
private class Render implements IRenderUpgrade {
private EntityItem item = new EntityItem(Minecraft.getMinecraft().theWorld);
private ItemStack panel1 = new ItemStack(EnderIO.blockSolarPanel, 1, 0);
private ItemStack panel2 = new ItemStack(EnderIO.blockSolarPanel, 1, 1);
@Override
public void render(RenderPlayerEvent event, ItemStack stack, boolean head) {
if (head) {
RenderUtil.bindItemTexture();
glDepthMask(true);
item.hoverStart = 0;
Helper.translateToHeadLevel(event.entityPlayer);
GL11.glTranslated(0, -0.155, 0);
GL11.glRotated(180, 1, 0, 0);
GL11.glScalef(2.1f, 2.1f, 2.1f);
byte level = loadFromItem(stack).level;
item.setEntityItemStack(level == 0 ? panel1 : panel2);
RenderManager.instance.renderEntityWithPosYaw(item, 0, 0, 0, 0, 0);
}
}
}
}