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.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; 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.config.Config; import crazypants.enderio.item.darksteel.DarkSteelController; import crazypants.enderio.item.darksteel.DarkSteelItems; import static org.lwjgl.opengl.GL11.glDepthMask; public class GliderUpgrade extends AbstractUpgrade { private static String UPGRADE_NAME = "glide"; public static final GliderUpgrade INSTANCE = new GliderUpgrade(); @SideOnly(Side.CLIENT) private Render render; public static GliderUpgrade 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 GliderUpgrade((NBTTagCompound) stack.stackTagCompound.getTag(KEY_UPGRADE_PREFIX + UPGRADE_NAME)); } public GliderUpgrade(NBTTagCompound tag) { super(UPGRADE_NAME, tag); } public GliderUpgrade() { super(UPGRADE_NAME, "enderio.darksteel.upgrade.glider", new ItemStack(DarkSteelItems.itemGliderWing,1,1), Config.darkSteelGliderCost); } @Override public boolean canAddToItem(ItemStack stack) { if(stack == null || stack.getItem() != DarkSteelItems.itemDarkSteelChestplate) { return false; } GliderUpgrade up = loadFromItem(stack); if(up == null) { return true; } return false; } @Override @SideOnly(Side.CLIENT) public IRenderUpgrade getRender() { return render == null ? render = new Render() : render; } @Override public void writeUpgradeToNBT(NBTTagCompound upgradeRoot) { } @SideOnly(Side.CLIENT) private class Render implements IRenderUpgrade { private EntityItem item = new EntityItem(Minecraft.getMinecraft().theWorld); private ItemStack glider = new ItemStack(DarkSteelItems.itemGliderWing, 1, 1); private Render() { item.setEntityItemStack(glider); } @Override public void render(RenderPlayerEvent event, ItemStack stack, boolean head) { if (!head && DarkSteelController.instance.isGlideActive(event.entityPlayer)) { RenderUtil.bindItemTexture(); glDepthMask(true); item.hoverStart = 0; Helper.rotateIfSneaking(event.entityPlayer); GL11.glTranslatef(-0, 1, 0.25f); GL11.glRotatef(180, 1, 0, 0); GL11.glScalef(3, 3, 3); RenderManager.instance.renderEntityWithPosYaw(item, 0, 0, 0, 0, 0); } } } }