package blusunrize.immersiveengineering.client.manual; import blusunrize.immersiveengineering.ImmersiveEngineering; import blusunrize.immersiveengineering.api.ApiUtils; import blusunrize.immersiveengineering.api.Lib; import blusunrize.immersiveengineering.api.crafting.IngredientStack; import blusunrize.immersiveengineering.api.shader.CapabilityShader; import blusunrize.immersiveengineering.api.shader.CapabilityShader.ShaderWrapper; import blusunrize.immersiveengineering.api.shader.ShaderRegistry; import blusunrize.immersiveengineering.common.util.network.MessageShaderManual; import blusunrize.immersiveengineering.common.util.network.MessageShaderManual.MessageType; import blusunrize.lib.manual.ManualInstance; import blusunrize.lib.manual.ManualPages; import blusunrize.lib.manual.ManualUtils; import blusunrize.lib.manual.gui.GuiButtonManual; import blusunrize.lib.manual.gui.GuiButtonManualNavigation; import blusunrize.lib.manual.gui.GuiManual; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.text.TextFormatting; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; import java.util.ArrayList; import java.util.List; /** * @author BluSunrize - 11.11.2016 */ public class ManualPageShader extends ManualPages { final ShaderRegistry.ShaderRegistryEntry shader; ItemStack shaderItem; ItemStack[] exampleItems; IngredientStack replicationCost; int example = 0; boolean unlocked; public ManualPageShader(ManualInstance manual, ShaderRegistry.ShaderRegistryEntry shader) { super(manual, ""); this.shader = shader; } @Override public void initPage(GuiManual gui, int x, int y, List<GuiButton> pageButtons) { EntityPlayer player = ManualUtils.mc().thePlayer; String username = player.getName(); unlocked = ShaderRegistry.receivedShaders.get(username).contains(shader.getName()); shaderItem = new ItemStack(ShaderRegistry.itemShader); shaderItem.setTagCompound(new NBTTagCompound()); shaderItem.getTagCompound().setString("shader_name", shader.getName()); replicationCost = shader.replicationCost; if(unlocked) { ArrayList<ItemStack> list = new ArrayList<ItemStack>(); for(ItemStack is : ShaderRegistry.itemExamples) if(is!=null && is.hasCapability(CapabilityShader.SHADER_CAPABILITY,null)) { ItemStack s = is.copy(); ShaderWrapper wrapper = s.getCapability(CapabilityShader.SHADER_CAPABILITY,null); if(wrapper!=null) { wrapper.setShaderItem(shaderItem); list.add(s); } } exampleItems = list.toArray(new ItemStack[list.size()]); example = 0; if(exampleItems.length>1) { pageButtons.add(new GuiButtonManualNavigation(gui, 100, x+50, y, 10,16, 0)); pageButtons.add(new GuiButtonManualNavigation(gui, 101, x+100, y, 10,16, 1)); } } else exampleItems = null; this.text = "§lRarity: §r"+" "+shader.rarity.rarityName; if(unlocked) { String set = shader.info_set==null||shader.info_set.isEmpty()?null: ManualUtils.attemptStringTranslation(Lib.DESC_INFO+"shader.set.%s", shader.info_set); String reference = shader.info_reference==null||shader.info_reference.isEmpty()?null: ManualUtils.attemptStringTranslation(Lib.DESC_INFO+"shader.reference.%s", shader.info_reference); String details = shader.info_details==null||shader.info_details.isEmpty()?null: ManualUtils.attemptStringTranslation(Lib.DESC_INFO+"shader.details.%s", shader.info_details); if(set != null) this.text += "<br><br>" + I18n.format("desc.immersiveengineering.info.shader.set") + " " + set; if(reference != null) this.text += "<br><br>" + I18n.format("desc.immersiveengineering.info.shader.reference") + "<br>" + reference; if(details != null) this.text += "<br><br>" + I18n.format("desc.immersiveengineering.info.shader.details") + "<br>" + details; String cost = Integer.toString(replicationCost.inputSize); if(!ApiUtils.hasPlayerIngredient(gui.mc.thePlayer,replicationCost) && !gui.mc.thePlayer.capabilities.isCreativeMode) cost = TextFormatting.RED+cost; pageButtons.add(new GuiButtonManual(gui, 102, x+50, y+138, 70,12, TextFormatting.BOLD+I18n.format("ie.manual.entry.shaderList.order")+" "+cost+"x ").setTextColour(gui.getManual().getTextColour(),gui.getManual().getHighlightColour())); } else { this.text += "<br><br>" + I18n.format("ie.manual.entry.shaderList.noInfo"); if(player.capabilities.isCreativeMode) pageButtons.add(new GuiButtonManual(gui, 103, x+10, y+80, 100,16, I18n.format("ie.manual.entry.shaderList.unlock")).setTextColour(gui.getManual().getTextColour(),gui.getManual().getHighlightColour())); } super.initPage(gui, x, y, pageButtons); } @Override public void renderPage(GuiManual gui, int x, int y, int mx, int my) { GL11.glEnable(GL12.GL_RESCALE_NORMAL); RenderHelper.enableGUIStandardItemLighting(); float scale = 2; GL11.glScalef(scale,scale,scale); boolean examples = exampleItems!=null && exampleItems.length>0; ManualUtils.renderItem().renderItemAndEffectIntoGUI(shaderItem, (int)((x+10+(examples?0:34))/scale),(int)((y-8)/scale)); if(examples && example>=0&&example<exampleItems.length) ManualUtils.renderItem().renderItemAndEffectIntoGUI(exampleItems[example], (int)((x+63)/scale),(int)((y-8)/scale)); GL11.glScalef(1/scale,1/scale,1/scale); if(unlocked) ManualUtils.renderItem().renderItemAndEffectIntoGUI(replicationCost.getRandomizedExampleStack(gui.mc.thePlayer.ticksExisted), x+102, y + 136); RenderHelper.disableStandardItemLighting(); GL11.glDisable(GL12.GL_RESCALE_NORMAL); manual.fontRenderer.setUnicodeFlag(true); String name = "§l"+shader.getName(); int w = manual.fontRenderer.getStringWidth(name); manual.fontRenderer.drawString(name,x+60-w/2,y+24,manual.getTextColour(),false); if(localizedText != null && !localizedText.isEmpty()) manual.fontRenderer.drawSplitString(localizedText, x, y+38, 120, manual.getTextColour()); } @Override public void mouseDragged(int x, int y, int clickX, int clickY, int mx, int my, int lastX, int lastY, int button) { } @Override public void buttonPressed(GuiManual gui, GuiButton button) { if(button.id==100) { example--; if(example<0) example=this.exampleItems.length-1; } else if(button.id==101) example = (example+1)%exampleItems.length; else if(button.id==102) { if(ApiUtils.hasPlayerIngredient(gui.mc.thePlayer,replicationCost) || gui.mc.thePlayer.capabilities.isCreativeMode) ImmersiveEngineering.packetHandler.sendToServer(new MessageShaderManual(MessageType.SPAWN,gui.mc.thePlayer.getName(),shader.getName())); gui.initGui(); } else if(button.id==103) { String player = ManualUtils.mc().thePlayer.getName(); ImmersiveEngineering.packetHandler.sendToServer(new MessageShaderManual(MessageType.UNLOCK,player,shader.getName())); ShaderRegistry.receivedShaders.put(player,shader.getName()); gui.initGui(); } super.buttonPressed(gui, button); } @Override public boolean listForSearch(String searchTag) { return false; } }