com.kaijin.AdvPowerMan.GuiChargingBench.java Source code

Java tutorial

Introduction

Here is the source code for com.kaijin.AdvPowerMan.GuiChargingBench.java

Source

/*******************************************************************************
 * Copyright (c) 2012-2013 Yancarlo Ramsey and CJ Bowman
 * Licensed as open source with restrictions. Please see attached LICENSE.txt.
 ******************************************************************************/
package com.kaijin.AdvPowerMan;

import java.text.DecimalFormat;

import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.util.ResourceLocation;

import org.lwjgl.opengl.GL11;

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

@SideOnly(Side.CLIENT)
public class GuiChargingBench extends GuiContainer {
    IInventory playerInventory;
    public TEChargingBench tile;

    private int xLoc;
    private int yLoc;
    private int xCenter;

    private DecimalFormat fraction = new DecimalFormat("##0.00");
    private DecimalFormat time = new DecimalFormat("00");
    private DecimalFormat days = new DecimalFormat("#0");
    private DecimalFormat dayFrac = new DecimalFormat("0.#");

    private static final int GREEN = 0x55FF55;
    private static final int GREENGLOW = Utils.multiplyColorComponents(GREEN, 0.16F);

    public GuiChargingBench(InventoryPlayer player, TEChargingBench tileentity) {
        super(new ContainerChargingBench(player, tileentity));
        tile = tileentity;
        xSize = 176; // The X size of the GUI window in pixels.
        ySize = 226; // The Y size of the GUI window in pixels.
    }

    @Override
    public void initGui() {
        super.initGui(); // Don't forget this or MC will crash

        // Upper left corner of GUI panel
        xLoc = (width - xSize) / 2; // Half the difference between screen width and GUI width
        yLoc = (height - ySize) / 2; // Half the difference between screen height and GUI height
        xCenter = width / 2;
    }

    @Override
    protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) {
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        mc.renderEngine
                .func_110577_a(new ResourceLocation(Info.TITLE_PACKED.toLowerCase(), Info.GUI_TEX_CHARGING_BENCH));

        // Draw GUI background
        drawTexturedModalRect(xLoc, yLoc, 0, 0, xSize, ySize);

        // Energy bar
        if (tile.currentEnergy > 0) {
            // Make each box light up all at once like a LED instead of gradually using barLength = tile.gaugeEnergyScaled(66); 
            int barLength = 5 * tile.gaugeEnergyScaled(13);
            if (barLength > 0)
                barLength++;
            drawTexturedModalRect(xLoc + 32, yLoc + 136 - barLength, 176, 66 - barLength, 12, barLength);
        }

        // Redstone power indicator
        drawTexturedModalRect(xLoc + 129, yLoc + 48, tile.receivingRedstoneSignal() ? 188 : 206, 0, 18, 15);

        // Draw labels
        Utils.drawCenteredText(fontRenderer, I18n.func_135053_a(tile.getInvName()), xCenter, yLoc + 7, 4210752);

        Utils.drawRightAlignedText(fontRenderer, I18n.func_135053_a(Info.KEY_EU), xLoc + 25, yLoc + 23, 4210752);
        Utils.drawLeftAlignedText(fontRenderer, I18n.func_135053_a(Info.KEY_CHARGER_MAX), xLoc + 151, yLoc + 23,
                4210752);

        Utils.drawRightAlignedText(fontRenderer, I18n.func_135053_a(Info.KEY_CHARGER_REQ), xLoc + 25, yLoc + 33,
                4210752);
        Utils.drawLeftAlignedText(fontRenderer, I18n.func_135053_a(Info.KEY_CHARGER_ETC), xLoc + 151, yLoc + 33,
                4210752);

        Utils.drawRightAlignedText(fontRenderer, I18n.func_135053_a(Info.KEY_CHARGER_AVG), xLoc + 70, yLoc + 52,
                4210752);
        Utils.drawLeftAlignedText(fontRenderer, I18n.func_135053_a(Info.KEY_CHARGER_PWR), xLoc + 151, yLoc + 52,
                4210752);

        // Draw current and max storage
        Utils.drawRightAlignedGlowingText(fontRenderer, Integer.toString(tile.currentEnergy), xCenter - 7,
                yLoc + 23, GREEN, GREENGLOW);
        Utils.drawGlowingText(fontRenderer, " / " + Integer.toString(tile.adjustedStorage), xCenter - 7, yLoc + 23,
                GREEN, GREENGLOW);

        // Factor of 100 because data is in fixed point (x100)
        final float rate = (float) (((ContainerChargingBench) inventorySlots).averageInput) / 100F;
        Utils.drawRightAlignedGlowingText(fontRenderer, fraction.format(rate), xLoc + 122, yLoc + 52, GREEN,
                GREENGLOW);

        // Charging stats (only displayed while charging items)
        if (tile.energyRequired > 0) {
            final String clock;
            if (tile.ticksRequired > 0) {
                int timeScratch = tile.ticksRequired / 20;
                if (timeScratch <= 345600) // 60 * 60 * 96 or 4 days
                {
                    final int sec = timeScratch % 60;
                    timeScratch /= 60;
                    final int min = timeScratch % 60;
                    timeScratch /= 60;
                    clock = time.format(timeScratch) + ":" + time.format(min) + ":" + time.format(sec);
                } else {
                    float dayScratch = ((float) timeScratch) / 86400F; // 60 * 60 * 24 or 1 day
                    clock = (dayScratch < 10F ? dayFrac.format(dayScratch)
                            : dayScratch < 100 ? days.format((int) dayScratch) : "??")
                            + I18n.func_135053_a(Info.KEY_STATS_DISPLAY_DAYS);
                }
            } else
                clock = I18n.func_135053_a(Info.KEY_STATS_DISPLAY_UNKNOWN);
            final String energyReq = tile.energyRequired > 9999999
                    ? dayFrac.format(((float) tile.energyRequired) / 1000000F) + "M"
                    : Integer.toString(tile.energyRequired);
            Utils.drawRightAlignedGlowingText(fontRenderer, energyReq, xCenter - 7, yLoc + 33, GREEN, GREENGLOW);
            Utils.drawRightAlignedGlowingText(fontRenderer, clock, xLoc + 144, yLoc + 33, GREEN, GREENGLOW);
        }
    }
}