buildcraftAdditions.client.gui.GuiBase.java Source code

Java tutorial

Introduction

Here is the source code for buildcraftAdditions.client.gui.GuiBase.java

Source

package buildcraftAdditions.client.gui;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.apache.commons.lang3.text.WordUtils;
import org.lwjgl.opengl.GL11;

import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.SoundHandler;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.inventory.Container;
import net.minecraft.util.ResourceLocation;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

import buildcraftAdditions.client.gui.widgets.WidgetBase;
import buildcraftAdditions.utils.RenderUtils;
import buildcraftAdditions.utils.Utils;

/**
 * Copyright (c) 2014-2015, AEnterprise
 * http://buildcraftadditions.wordpress.com/
 * Buildcraft Additions is distributed under the terms of GNU GPL v3.0
 * Please check the contents of the license located in
 * http://buildcraftadditions.wordpress.com/wiki/licensing-stuff/
 */
@SideOnly(Side.CLIENT)
public abstract class GuiBase extends GuiContainer {

    public static final ResourceLocation PLAYER_INV_TEXTURE = new ResourceLocation(
            "bcadditions:textures/gui/guiPlayerInv.png");
    public final List<WidgetBase> widgets = new ArrayList<WidgetBase>();
    public final int xSizePlayerInv = 176;
    public final int ySizePlayerInv = 100;
    private final ResourceLocation texture;
    public int titleXoffset = 5;
    public int titleYoffset = 8;
    public boolean shouldDrawWidgets = true;
    public int textColor = 0xFFCC00;
    public boolean centerTitle = true;
    public int tileGuiYSize = 0;
    private boolean drawPlayerInv = false;

    public GuiBase(Container container) {
        super(container);
        texture = texture();
        xSize = getXSize();
        ySize = getYSize();
        tileGuiYSize = getYSize();
    }

    public GuiBase setDrawPlayerInv(boolean draw) {
        drawPlayerInv = draw;
        if (draw)
            ySize = getYSize() + ySizePlayerInv;
        return this;
    }

    public GuiBase setTitleXOffset(int offset) {
        titleXoffset = offset;
        return this;
    }

    public GuiBase setTitleYOffset(int offset) {
        titleYoffset = offset;
        return this;
    }

    public GuiBase setTextColor(int color) {
        textColor = color;
        return this;
    }

    public GuiBase setCenterTitle(boolean value) {
        centerTitle = value;
        return this;
    }

    public GuiBase setDrawWidgets(boolean value) {
        shouldDrawWidgets = value;
        return this;
    }

    public abstract ResourceLocation texture();

    public abstract int getXSize();

    public abstract int getYSize();

    public abstract String getInventoryName();

    public abstract void initialize();

    public SoundHandler soundHandler() {
        return Minecraft.getMinecraft().getSoundHandler();
    }

    public void bindTexture(ResourceLocation texture) {
        RenderUtils.bindTexture(texture);
    }

    public void drawString(String text, int x, int y) {
        drawString(text, x, y, textColor);
    }

    public void drawString(String text, int x, int y, int color) {
        fontRendererObj.drawString(text, x, y, color);
    }

    public void widgetActionPerformed(WidgetBase widget) {

    }

    public boolean hasCustomName() {
        return false;
    }

    public String getCustomName() {
        return null;
    }

    public void addWidget(WidgetBase widget) {
        widgets.add(widget);
    }

    @Override
    public void initGui() {
        super.initGui();
        if (drawPlayerInv)
            guiTop = (height - ySize) / 2;
        initialize();
    }

    @Override
    protected void drawGuiContainerBackgroundLayer(float f, int x, int y) {
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        bindTexture(texture());
        drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, tileGuiYSize);

        if (drawPlayerInv) {
            bindTexture(PLAYER_INV_TEXTURE);
            drawTexturedModalRect(guiLeft, guiTop + tileGuiYSize, 0, 0, xSizePlayerInv, ySizePlayerInv);
        }
        bindTexture(texture());
        drawBackgroundPreWidgets(f, x, y);

        if (shouldDrawWidgets)
            drawWidgets(x, y);
        bindTexture(texture());

        drawBackgroundPostWidgets(f, x, y);
    }

    public void drawBackgroundPreWidgets(float f, int x, int y) {

    }

    public void drawBackgroundPostWidgets(float f, int x, int y) {

    }

    protected void drawWidgets(int x, int y) {
        for (WidgetBase widget : widgets) {
            widget.render(x, y);
            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        }
    }

    @Override
    protected void drawGuiContainerForegroundLayer(int x, int y) {
        if (drawPlayerInv)
            drawString(Utils.localize("container.inventory"), 8, tileGuiYSize + 6, textColor);
        String name = hasCustomName() && getCustomName() != null ? getCustomName()
                : Utils.localize(String.format("gui.%s.name", getInventoryName()));
        drawString(name, centerTitle ? (int) (getXSize() / 2 - name.length() * 2.5) : titleXoffset, titleYoffset,
                textColor);
        drawForegroundExtra(x, y);
    }

    public void drawForegroundExtra(int x, int y) {

    }

    @Override
    public void setWorldAndResolution(Minecraft minecraft, int width, int height) {
        widgets.clear();
        super.setWorldAndResolution(minecraft, width, height);
    }

    @Override
    protected void mouseClicked(int x, int y, int button) {
        super.mouseClicked(x, y, button);
        for (WidgetBase widget : widgets) {
            if (widget.getBounds().contains(x, y) && widget.enabled)
                widget.onWidgetClicked(x, y, button);
        }
    }

    @Override
    public void drawScreen(int x, int y, float f) {
        super.drawScreen(x, y, f);
        List<String> tooltips = new ArrayList<String>();

        for (WidgetBase widget : widgets)
            if (widget.getBounds().contains(x, y))
                widget.addTooltip(x, y, tooltips, isShiftKeyDown());

        if (!tooltips.isEmpty()) {
            List<String> finalLines = new ArrayList<String>();
            for (String line : tooltips) {
                String[] lines = WordUtils.wrap(line, 30).split(System.getProperty("line.separator"));
                Collections.addAll(finalLines, lines);
            }
            drawHoveringText(finalLines, x, y, fontRendererObj);
        }
    }

    public void redraw() {
        widgets.clear();
        buttonList.clear();
        initialize();
    }

    public int guiLeft() {
        return guiLeft;
    }

    public int guiTop() {
        return guiTop;
    }
}