package gr8pefish.ironbackpacks.client.gui.buttons; import gr8pefish.ironbackpacks.api.client.gui.button.ButtonNames; import gr8pefish.ironbackpacks.api.client.gui.button.IGuiButton; import gr8pefish.ironbackpacks.api.client.gui.button.ITooltipButton; import gr8pefish.ironbackpacks.config.ConfigHandler; import gr8pefish.ironbackpacks.registry.GuiButtonRegistry; import gr8pefish.ironbackpacks.util.IronBackpacksConstants; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import java.util.ArrayList; /** * Class for drawing and creating all the buttons. */ @SideOnly(Side.CLIENT) public class TooltipButton extends GuiButton implements ITooltipButton { public static final ResourceLocation widgetTextures = IronBackpacksConstants.Resources.WIDGETS; //the texture location private int buttonID; //the internal id private int iconOffsetX; //the icon x location private int iconOffsetY; //the icon y location private ArrayList<String> tooltips; //the tooltip private int hoverTime; //the hover time (for displaying tooltips) //Constructor which uses an IGuiButton public TooltipButton(IGuiButton guiButton, int xPos, int yPos){ super(guiButton.getId(), xPos, yPos, guiButton.getSizeX(), guiButton.getSizeY(), ""); //empty string displays no text on the button this.buttonID = guiButton.getId(); hoverTime = guiButton.shouldDelay() ? ConfigHandler.tooltipDelay : 0; tooltips = new ArrayList<String>(); for (String string: guiButton.getTooltip()){ tooltips.add(string); } iconOffsetX = guiButton.getIconOffsetX(); iconOffsetY = guiButton.getIconOffsetY(); } //Overloaded constructor for more flexibility when initializing (used for the clear lines buttons in the alternate gui) public TooltipButton(int id, IGuiButton guiButton, int xPos, int yPos, String... tooltipLines){ super(id, xPos, yPos, guiButton.getSizeX(), guiButton.getSizeY(), ""); this.buttonID = id; hoverTime = guiButton.shouldDelay() ? ConfigHandler.tooltipDelay : 0; tooltips = new ArrayList<String>(); for (String string: ((tooltipLines.length == 0) ? guiButton.getTooltip() : tooltipLines)){ tooltips.add(string); } iconOffsetX = guiButton.getIconOffsetX(); iconOffsetY = guiButton.getIconOffsetY(); } @Override public void drawButton(Minecraft minecraft, int mPosX, int mPosY) { if (this.visible) { minecraft.getTextureManager().bindTexture(widgetTextures); //hover is used to change the color of the button by altering the texture location when a player's mouse if over the button boolean hover = mouseInButton(mPosX, mPosY); int h = getHoverState(hover); int fromLeft = iconOffsetX + (h - 1) * (this.width + 1); this.drawTexturedModalRect(this.xPosition, this.yPosition, fromLeft, iconOffsetY, this.width, this.height); } } @Override public boolean mouseInButton(int mPosX, int mPosY) { return (mPosX >= this.xPosition && mPosY >= this.yPosition && mPosX < this.xPosition + this.width && mPosY < this.yPosition + this.height); } @Override public ArrayList<String> getTooltip() { return tooltips; } public void setTooltip(ArrayList<String> newTooltips) { tooltips = newTooltips; } @Override public int getHoverTime(){ return hoverTime; } /** * Rotates through the 4 filter type buttons by getting the next one. TODO: hardcoded * @param button - the button to increment * @return - int id of the new button */ public static int incrementType(GuiButton button){ int buttonID = ((TooltipButton)button).buttonID; if (buttonID < GuiButtonRegistry.getButton(ButtonNames.VOID).getId()){ //increment return ++buttonID; }else{ return GuiButtonRegistry.getButton(ButtonNames.EXACT).getId(); //wraparound } } }