package joshie.progression.gui.buttons; import joshie.progression.api.criteria.ICriteria; import joshie.progression.api.criteria.ITab; import joshie.progression.api.gui.Position; import joshie.progression.gui.editors.IItemSelectable; import joshie.progression.gui.editors.ITextEditable; import joshie.progression.gui.filters.FilterTypeItem; import joshie.progression.handlers.APICache; import joshie.progression.handlers.RuleHandler; import joshie.progression.handlers.TemplateHandler; import joshie.progression.helpers.AchievementHelper; import joshie.progression.helpers.FileHelper; import joshie.progression.json.JSONLoader; import joshie.progression.json.Options; import joshie.progression.lib.PInfo; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.item.ItemStack; import org.lwjgl.input.Keyboard; import java.util.ArrayList; import static joshie.progression.Progression.translate; import static joshie.progression.api.special.DisplayMode.EDIT; import static joshie.progression.gui.core.GuiList.*; import static net.minecraft.util.text.TextFormatting.GRAY; import static net.minecraft.util.text.TextFormatting.RED; public class ButtonTab extends ButtonBase implements ITextEditable, IItemSelectable { private ITab tab; private boolean isBottom; public ButtonTab(ITab tab, int x, int y) { super(0, x, y, 25, 25, ""); this.tab = tab; } public ButtonTab setBottom() { this.isBottom = true; return this; } public void drawTexture(Minecraft mc) { mc.getTextureManager().bindTexture(PInfo.textures); if (isSideways) { int yTexture = isBottom ? 234: 206; RenderHelper.disableStandardItemLighting(); int xTexture = TREE_EDITOR.currentTab == tab ? 206 : 231;; if (xPosition == 0) xTexture = 206; CORE.drawTexture(PInfo.textures, xPosition + CORE.getOffsetX(), yPosition, xTexture, yTexture, 25, 22); int stackY = isBottom ? -3: 0; if (xPosition == 0) { CORE.drawStack(tab.getIcon(), xPosition + CORE.getOffsetX(), yPosition + 5 + stackY, 1F); } else CORE.drawStack(tab.getIcon(), xPosition + 4 + CORE.getOffsetX(), yPosition + 5 + stackY, 1F); } else { int yTexture = TREE_EDITOR.currentTab == tab ? 25 : 0; RenderHelper.disableStandardItemLighting(); int xTexture = 206; if (xPosition == 0) xTexture = 231; CORE.drawTexture(PInfo.textures, xPosition, yPosition, xTexture, yTexture, 25, 25); if (xPosition == 0) { CORE.drawStack(tab.getIcon(), xPosition + 2, yPosition + 5, 1F); } else CORE.drawStack(tab.getIcon(), xPosition + 7, yPosition + 6, 1F); } } @Override public void drawButton(Minecraft mc, int x, int y) { int xtra = isSideways ? CORE.getOffsetX() : 0; boolean hovering = hovered = x >= xPosition + xtra && y >= yPosition && x < xPosition + xtra + width && y < yPosition + height; int k = getHoverState(hovering); GlStateManager.enableBlend(); GlStateManager.enableLighting(); GlStateManager.color(1F, 1F, 1F, 1F); drawTexture(mc); boolean displayTooltip = false; if (MODE == EDIT) { //displayTooltip = TextEditor.GROUP_EDITOR.getEditable() == this; } if (k == 2 || displayTooltip) { ArrayList<String> name = new ArrayList(); String hidden = tab.isVisible() ? "" : "(" + translate("tab.hidden") + ")"; name.add(TEXT_EDITOR_SIMPLE.getText(this) + hidden); if (MODE == EDIT) { name.add(GRAY + "(" + translate("tab.sort") + ") " + tab.getSortIndex()); if (!Options.hideTooltips) { name.add(GRAY + translate("tab.shift")); name.add(GRAY + translate("tab.ctrl")); name.add(GRAY + translate("tab.alt")); name.add(GRAY + translate("tab.i")); name.add(GRAY + translate("tab.s")); name.add(GRAY + translate("tab.arrow")); name.add(GRAY + translate("tab.delete")); name.add(RED + " " + translate("tab.warning")); } } TOOLTIP.clear(); TOOLTIP.add(name); } } @Override public void onClicked() { CORE.clickedButton = true; //MCClientHelper.getPlayer().closeScreen(); //Close everything first //If the tab is already selected, then we should edit it instead boolean donestuff = false; if (MODE == EDIT) { if (Keyboard.isKeyDown(Keyboard.KEY_DELETE)) { ITab newTab = TREE_EDITOR.currentTab; if (tab == TREE_EDITOR.currentTab) { newTab = TREE_EDITOR.previousTab; } if (newTab != null) { if (!APICache.getClientCache().getTabIDs().contains(newTab.getUniqueID())) { for (ITab tab : APICache.getClientCache().getTabSet()) { newTab = tab; break; } } } TREE_EDITOR.selected = null; TREE_EDITOR.previous = null; TREE_EDITOR.lastClicked = null; TREE_EDITOR.currentTab = newTab; for (ICriteria c : tab.getCriteria()) { RuleHandler.removeCriteria(c.getUniqueID(), true); } APICache.getClientCache().removeTab(tab); //Reopen after removing# TREE_EDITOR.onClientSetup(); CORE.setEditor(TREE_EDITOR); return; } if (GuiScreen.isShiftKeyDown()) { TEXT_EDITOR_SIMPLE.setEditable(this); donestuff = true; } else if (GuiScreen.isCtrlKeyDown() || ITEM_EDITOR.isVisible()) { ITEM_EDITOR.select(FilterTypeItem.INSTANCE, this, Position.TOP); } else if (Keyboard.isKeyDown(Keyboard.KEY_I)) { boolean current = tab.isVisible(); tab.setVisibility(!current); donestuff = true; } else if (Keyboard.isKeyDown(Keyboard.KEY_S)) { if(TemplateHandler.registerTab(JSONLoader.getDataTabFromTab(tab))) { JSONLoader.saveJSON(FileHelper.getTemplatesFolder("tab", tab.getLocalisedName() + "_" + tab.getUniqueID()), JSONLoader.getDataTabFromTab(tab), true, false); AchievementHelper.display(tab.getIcon(), "Saved " + tab.getLocalisedName()); } } else if (GuiScreen.isAltKeyDown()) { Options.getSettings().defaultTabID = tab.getUniqueID(); } } if (!donestuff) { TREE_EDITOR.previousTab = TREE_EDITOR.currentTab; TREE_EDITOR.currentTab = tab; TREE_EDITOR.currentTabID = tab.getUniqueID(); //Reopen the gui } //Rebuild TREE_EDITOR.rebuildCriteria(); } @Override public void onNotClicked() { } @Override public String getTextField() { return tab.getLocalisedName(); } @Override public void setTextField(String str) { tab.setDisplayName(str); } @Override public void setObject(Object stack) { if (stack instanceof ItemStack) { tab.setStack(((ItemStack) stack).copy()); } } }