package flaxbeard.cyberware.common.item; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.resources.I18n; import net.minecraft.client.shader.ShaderGroup; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.init.MobEffects; import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import flaxbeard.cyberware.api.CyberwareAPI; import flaxbeard.cyberware.api.CyberwareUpdateEvent; import flaxbeard.cyberware.api.item.ICyberware; public class VanillaWares { public static class SpiderEyeWare implements ICyberware { public SpiderEyeWare() { FMLCommonHandler.instance().bus().register(this); MinecraftForge.EVENT_BUS.register(this); } @Override public EnumSlot getSlot(ItemStack stack) { return EnumSlot.EYES; } @Override public int installedStackSize(ItemStack stack) { return 1; } @Override public ItemStack[][] required(ItemStack stack) { return new ItemStack[0][0]; } @Override public boolean isIncompatible(ItemStack stack, ItemStack other) { return CyberwareAPI.getCyberware(other).isEssential(other); } @Override public boolean isEssential(ItemStack stack) { return true; } @SubscribeEvent public void handleSpiderNightVision(CyberwareUpdateEvent event) { EntityLivingBase e = event.getEntityLiving(); if (CyberwareAPI.isCyberwareInstalled(e, new ItemStack(Items.SPIDER_EYE))) { e.addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, Integer.MAX_VALUE, -53, true, false)); } else { PotionEffect effect = e.getActivePotionEffect(MobEffects.NIGHT_VISION); if (effect != null && effect.getAmplifier() == -53) { e.removePotionEffect(MobEffects.NIGHT_VISION); } } } @SideOnly(Side.CLIENT) @SubscribeEvent public void onDrawScreenPost(RenderGameOverlayEvent.Pre event) { if (event.getType() == ElementType.CROSSHAIRS) { EntityPlayer p = Minecraft.getMinecraft().thePlayer; if (CyberwareAPI.isCyberwareInstalled(p, new ItemStack(Items.SPIDER_EYE))) { GlStateManager.translate(0, event.getResolution().getScaledHeight() / 5, 0); } } } @SideOnly(Side.CLIENT) @SubscribeEvent public void onDrawScreenPost(RenderGameOverlayEvent.Post event) { if (event.getType() == ElementType.CROSSHAIRS) { EntityPlayer p = Minecraft.getMinecraft().thePlayer; if (CyberwareAPI.isCyberwareInstalled(p, new ItemStack(Items.SPIDER_EYE))) { GlStateManager.translate(0, -event.getResolution().getScaledHeight() / 5, 0); } } } @SubscribeEvent @SideOnly(Side.CLIENT) public void handleSpiderVision(TickEvent.ClientTickEvent event) { if (event.phase == TickEvent.Phase.START) { EntityPlayer e = Minecraft.getMinecraft().thePlayer; if (CyberwareAPI.isCyberwareInstalled(e, new ItemStack(Items.SPIDER_EYE))) { if (Minecraft.getMinecraft().entityRenderer.getShaderGroup() == null) { Minecraft.getMinecraft().entityRenderer.loadShader(new ResourceLocation("shaders/post/spider.json")); } } else if (e != null && !e.isSpectator()) { ShaderGroup sg = Minecraft.getMinecraft().entityRenderer.getShaderGroup(); if (sg != null && sg.getShaderGroupName().equals("minecraft:shaders/post/spider.json")) { Minecraft.getMinecraft().entityRenderer.stopUseShader(); } } } } @Override public List<String> getInfo(ItemStack stack) { List<String> ret = new ArrayList<String>(); String[] desc = this.getDesciption(stack); if (desc != null && desc.length > 0) { String format = desc[0]; if (format.length() > 0) { ret.addAll(Arrays.asList(desc)); } } return ret; } private String[] getDesciption(ItemStack stack) { return I18n.format("cyberware.tooltip.spiderEye").split("\\\\n"); } @Override public int getCapacity(ItemStack wareStack) { return 0; } @Override public void onAdded(EntityLivingBase entity, ItemStack stack) {} @Override public void onRemoved(EntityLivingBase entity, ItemStack stack) {} @Override public int getEssenceCost(ItemStack stack) { return 5; } @Override public Quality getQuality(ItemStack stack) { return null; } @Override public ItemStack setQuality(ItemStack stack, Quality quality) { return stack; } @Override public boolean canHoldQuality(ItemStack stack, Quality quality) { return false; } } }