package shedar.mods.ic2.nuclearcontrol.gui; import java.util.Iterator; import java.util.List; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; import shedar.mods.ic2.nuclearcontrol.IC2NuclearControl; import shedar.mods.ic2.nuclearcontrol.api.IAdvancedCardSettings; import shedar.mods.ic2.nuclearcontrol.api.ICardGui; import shedar.mods.ic2.nuclearcontrol.api.ICardSettingsWrapper; import shedar.mods.ic2.nuclearcontrol.api.ICardWrapper; import shedar.mods.ic2.nuclearcontrol.api.IPanelDataSource; import shedar.mods.ic2.nuclearcontrol.api.IPanelMultiCard; import shedar.mods.ic2.nuclearcontrol.api.PanelSetting; import shedar.mods.ic2.nuclearcontrol.containers.ContainerInfoPanel; import shedar.mods.ic2.nuclearcontrol.gui.controls.CompactButton; import shedar.mods.ic2.nuclearcontrol.gui.controls.GuiInfoPanelCheckBox; import shedar.mods.ic2.nuclearcontrol.gui.controls.GuiInfoPanelShowLabels; import shedar.mods.ic2.nuclearcontrol.panel.CardSettingsWrapperImpl; import shedar.mods.ic2.nuclearcontrol.panel.CardWrapperImpl; import shedar.mods.ic2.nuclearcontrol.utils.NuclearNetworkHelper; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class GuiInfoPanel extends GuiContainer { private static final String TEXTURE_FILE = "nuclearcontrol:textures/gui/GUIInfoPanel.png"; private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation(TEXTURE_FILE); protected String name; protected ContainerInfoPanel container; public ItemStack prevCard; protected GuiTextField textboxTitle; protected boolean modified; public boolean isColored; public GuiInfoPanel(Container container) { super(container); ySize = 190; this.container = (ContainerInfoPanel) container; name = StatCollector.translateToLocal("tile.blockInfoPanel.name"); modified = false; // inverted value on start to force initControls isColored = !this.container.panel.getColored(); } /* * @SuppressWarnings("unchecked") protected void drawItemStack(ItemStack * itemStack, int par2, int par3){ * * @SuppressWarnings("rawtypes") List list = * itemStack.getTooltip(this.mc.thePlayer, * this.mc.gameSettings.advancedItemTooltips); * * if(container.panel.getIsWeb() && itemStack.hasTagCompound()) { * NBTTagCompound tags = itemStack.getTagCompound(); * if(tags.hasKey("_webSensorId")){ long id = tags.getLong("_webSensorId"); * if(id>0) list.add("Web Id: "+id); } } * * for (int k = 0; k < list.size(); ++k){ if (k == 0){ list.set(k, "\u00a7" * + Integer.toHexString(itemStack.getRarity().rarityColor) + * (String)list.get(k)); }else{ list.set(k, EnumChatFormatting.GRAY + * (String)list.get(k)); } } * * FontRenderer font = itemStack.getItem().getFontRenderer(itemStack); * drawHoveringText(list, par2, par3, (font == null ? fontRendererObj : * font)); } */ @Override protected void drawHoveringText(List par1List, int par2, int par3, FontRenderer font) { if (!par1List.isEmpty()) { GL11.glDisable(GL12.GL_RESCALE_NORMAL); RenderHelper.disableStandardItemLighting(); GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_DEPTH_TEST); int k = 0; Iterator iterator = par1List.iterator(); while (iterator.hasNext()) { String s = (String) iterator.next(); int l = font.getStringWidth(s); if (l > k) { k = l; } } int i1 = par2 + 12; int j1 = par3 - 12; int k1 = 8; if (par1List.size() > 1) { k1 += 2 + (par1List.size() - 1) * 10; } if (i1 + k > this.width) { i1 -= 28 + k; } if (j1 + k1 + 6 > this.height) { j1 = this.height - k1 - 6; } this.zLevel = 300.0F; itemRender.zLevel = 300.0F; int l1 = -267386864; this.drawGradientRect(i1 - 3, j1 - 4, i1 + k + 3, j1 - 3, l1, l1); this.drawGradientRect(i1 - 3, j1 + k1 + 3, i1 + k + 3, j1 + k1 + 4, l1, l1); this.drawGradientRect(i1 - 3, j1 - 3, i1 + k + 3, j1 + k1 + 3, l1, l1); this.drawGradientRect(i1 - 4, j1 - 3, i1 - 3, j1 + k1 + 3, l1, l1); this.drawGradientRect(i1 + k + 3, j1 - 3, i1 + k + 4, j1 + k1 + 3, l1, l1); int i2 = 1347420415; int j2 = (i2 & 16711422) >> 1 | i2 & -16777216; this.drawGradientRect(i1 - 3, j1 - 3 + 1, i1 - 3 + 1, j1 + k1 + 3 - 1, i2, j2); this.drawGradientRect(i1 + k + 2, j1 - 3 + 1, i1 + k + 3, j1 + k1 + 3 - 1, i2, j2); this.drawGradientRect(i1 - 3, j1 - 3, i1 + k + 3, j1 - 3 + 1, i2, i2); this.drawGradientRect(i1 - 3, j1 + k1 + 2, i1 + k + 3, j1 + k1 + 3, j2, j2); for (int k2 = 0; k2 < par1List.size(); ++k2) { String s1 = (String) par1List.get(k2); font.drawStringWithShadow(s1, i1, j1, -1); if (k2 == 0) j1 += 2; j1 += 10; } this.zLevel = 0.0F; itemRender.zLevel = 0.0F; GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_DEPTH_TEST); RenderHelper.enableStandardItemLighting(); GL11.glEnable(GL12.GL_RESCALE_NORMAL); } } @SuppressWarnings("unchecked") protected void initControls() { ItemStack card = container.panel.getCards().get(0); if (((card == null && prevCard == null) || (card != null && card.equals(prevCard))) && this.container.panel.getColored() == isColored) return; int h = fontRendererObj.FONT_HEIGHT + 1; buttonList.clear(); prevCard = card; isColored = container.panel.getColored(); buttonList.add(new GuiInfoPanelShowLabels(0, guiLeft + xSize - 25, guiTop + 42, container.panel)); int delta = 0; if (isColored) { buttonList.add(new CompactButton(112, guiLeft + xSize - 25, guiTop + 55, 18, 12, "T")); delta = 15; } if (card != null && card.getItem() instanceof IPanelDataSource) { byte slot = container.panel.getIndexOfCard(card); IPanelDataSource source = (IPanelDataSource) card.getItem(); if (source instanceof IAdvancedCardSettings) { buttonList.add(new CompactButton(111, guiLeft + xSize - 25, guiTop + 55 + delta, 18, 12, "...")); } int row = 0; List<PanelSetting> settingsList = null; if (card.getItem() instanceof IPanelMultiCard) { settingsList = ((IPanelMultiCard) source).getSettingsList(new CardWrapperImpl(card, (byte) 0)); } else { settingsList = source.getSettingsList(); } if (settingsList != null) for (PanelSetting panelSetting : settingsList) { buttonList.add(new GuiInfoPanelCheckBox(0, guiLeft + 32, guiTop + 40 + h * row, panelSetting, container.panel, slot, fontRendererObj)); row++; } if (!modified) { textboxTitle = new GuiTextField(fontRendererObj, 7, 16, 162, 18); textboxTitle.setFocused(true); textboxTitle.setText(new CardWrapperImpl(card, 0).getTitle()); } } else { modified = false; textboxTitle = null; } } @Override public void initGui() { super.initGui(); initControls(); }; @Override protected void drawGuiContainerForegroundLayer(int par1, int par2) { fontRendererObj.drawString(name,(xSize - fontRendererObj.getStringWidth(name)) / 2, 6, 0x404040); fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, (ySize - 96) + 2, 0x404040); if (textboxTitle != null) textboxTitle.drawTextBox(); } @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); mc.renderEngine.bindTexture(TEXTURE_LOCATION); int left = (width - xSize) / 2; int top = (height - ySize) / 2; drawTexturedModalRect(left, top, 0, 0, xSize, ySize); } @Override protected void mouseClicked(int x, int y, int par3) { super.mouseClicked(x, y, par3); if (textboxTitle != null) textboxTitle.mouseClicked(x - guiLeft, y - guiTop, par3); } @Override protected void mouseMovedOrUp(int mouseX, int mouseY, int which) { super.mouseMovedOrUp(mouseX, mouseY, which); } @Override public void updateScreen() { super.updateScreen(); if (textboxTitle != null) textboxTitle.updateCursorCounter(); initControls(); } protected ItemStack getActiveCard() { return container.panel.getCards().get(0); } protected void updateTitle() { if (textboxTitle == null) return; ItemStack card = getActiveCard(); if (container.panel.getWorldObj().isRemote) { NuclearNetworkHelper.setNewAlarmSound(container.panel.xCoord, container.panel.yCoord, container.panel.zCoord, container.panel.getIndexOfCard(card), textboxTitle.getText()); } if (card != null && card.getItem() instanceof IPanelDataSource) { new CardWrapperImpl(card, 0).setTitle(textboxTitle.getText()); } } @Override public void onGuiClosed() { updateTitle(); super.onGuiClosed(); } @Override protected void actionPerformed(GuiButton button) { if (button.id == 112) { // color upgrade GuiScreen colorGui = new GuiScreenColor(this, container.panel); mc.displayGuiScreen(colorGui); } else if (button.id == 111) { ItemStack card = getActiveCard(); if (card == null) return; if (card != null && card.getItem() instanceof IAdvancedCardSettings) { ICardWrapper helper = new CardWrapperImpl(card, 0); Object guiObject = ((IAdvancedCardSettings) card.getItem()).getSettingsScreen(helper); if (!(guiObject instanceof GuiScreen)) { IC2NuclearControl.logger.warn("Invalid card, getSettingsScreen method should return GuiScreen object"); return; } GuiScreen gui = (GuiScreen) guiObject; ICardSettingsWrapper wrapper = new CardSettingsWrapperImpl(card, container.panel, this, 0); ((ICardGui) gui).setCardSettingsHelper(wrapper); mc.displayGuiScreen(gui); } } } @Override protected void keyTyped(char par1, int par2) { if (textboxTitle != null && textboxTitle.isFocused()) if (par2 == 1) mc.thePlayer.closeScreen(); else if (par1 == 13) updateTitle(); else{ modified = true; textboxTitle.textboxKeyTyped(par1, par2); } else super.keyTyped(par1, par2); } }