package gtPlusPlus.xmod.gregtech.api.gui;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Materials;
import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.util.GT_Utility;
import gregtech.common.items.GT_MetaGenerated_Tool_01;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.minecraft.ItemUtils;
import gtPlusPlus.core.util.reflect.ReflectionUtils;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
/**
* NEVER INCLUDE THIS FILE IN YOUR MOD!!!
*
* The GUI-Container I use for all my Basic Machines
*
* As the NEI-RecipeTransferRect Handler can't handle one GUI-Class for all GUIs I needed to produce some dummy-classes which extend this class
*/
public class GUI_MultiMachine extends GT_GUIContainerMetaTile_Machine {
private final static Materials GOOD;
private final static Materials BAD;
private final String mName;
private final static ConcurrentHashMap mToolStacks = new ConcurrentHashMap();
//net.minecraft.client.gui.inventory.GuiContainer.drawItemStack(ItemStack, int, int, String)
private final static Method mDrawItemStack;
static {
GOOD = Materials.Uranium;
BAD = Materials.Plutonium;
//net.minecraft.client.gui.inventory.GuiContainer.drawItemStack(ItemStack, int, int, String)
mDrawItemStack = ReflectionUtils.getMethod(GuiContainer.class, "drawItemStack", new Class[] {ItemStack.class, int.class, int.class, String.class});
}
public GUI_MultiMachine(final InventoryPlayer aInventoryPlayer, final IGregTechTileEntity aTileEntity, final String aName, final String aTextureFile) {
super(new CONTAINER_MultiMachine_NoPlayerInventory(aInventoryPlayer, aTileEntity), CORE.RES_PATH_GUI + (aTextureFile == null ? "MultiblockDisplay" : aTextureFile));
this.mName = aName != null ? aName : "";
}
@Override
protected void drawGuiContainerForegroundLayer(final int par1, final int par2) {
if (this.mContainer != null) {
drawGuiInfoTextLayer(par1, par2);
drawGuiRepairStatusLayer(par1, par2);
}
}
protected void drawGuiInfoTextLayer(final float par1, final int par2) {
if ((((CONTAINER_MultiMachine) this.mContainer).mDisplayErrorCode & 64) != 0) {
this.fontRendererObj.drawString(mName, 6, 7, 16448255); // Move down 8px
this.fontRendererObj.drawString("Incomplete Structure.", 6, 15, 16448255); // Move down 8px
}
else {
int aTotalTickTime = ((CONTAINER_MultiMachine) this.mContainer).aTotalTickTime;
int aMaxParallel = ((CONTAINER_MultiMachine) this.mContainer).aMaxParallel;
int aPollutionTick = ((CONTAINER_MultiMachine) this.mContainer).aPollutionTick;
int aMaxInputVoltage = ((CONTAINER_MultiMachine) this.mContainer).aMaxInputVoltage;
int aInputTier = ((CONTAINER_MultiMachine) this.mContainer).aInputTier;
int aOutputTier = ((CONTAINER_MultiMachine) this.mContainer).aOutputTier;
int aRecipeDuration = ((CONTAINER_MultiMachine) this.mContainer).aRecipeDuration;
int aRecipeEU = ((CONTAINER_MultiMachine) this.mContainer).aRecipeEU;
int aRecipeSpecial = ((CONTAINER_MultiMachine) this.mContainer).aRecipeSpecial;
int aEfficiency = ((CONTAINER_MultiMachine) this.mContainer).aEfficiency;
int aPollutionReduction = ((CONTAINER_MultiMachine) this.mContainer).aPollutionReduction;
long aStoredEnergy = ((CONTAINER_MultiMachine) this.mContainer).aStoredEnergy;
long aMaxEnergy = ((CONTAINER_MultiMachine) this.mContainer).aMaxEnergy;
/*
* Logic Block
*/
long seconds = (aTotalTickTime/20);
int weeks = (int) (TimeUnit.SECONDS.toDays(seconds) / 7);
int days = (int) (TimeUnit.SECONDS.toDays(seconds) - 7 * weeks);
long hours = TimeUnit.SECONDS.toHours(seconds) - TimeUnit.DAYS.toHours(days) - TimeUnit.DAYS.toHours(7*weeks);
long minutes = TimeUnit.SECONDS.toMinutes(seconds) - (TimeUnit.SECONDS.toHours(seconds) * 60);
long second = TimeUnit.SECONDS.toSeconds(seconds) - (TimeUnit.SECONDS.toMinutes(seconds) *60);
ArrayList mInfo = new ArrayList();
String EU = StatCollector.translateToLocal("GTPP.info.eu");
//GTPP.machines.tier
mInfo.add(mName);
if (aInputTier > 0) {
mInfo.add(StatCollector.translateToLocal("GTPP.machines.input")+" "+StatCollector.translateToLocal("GTPP.machines.tier")+": "+ EnumChatFormatting.GREEN +GT_Values.VOLTAGE_NAMES[aInputTier]);
}
if (aOutputTier > 0) {
mInfo.add(StatCollector.translateToLocal("GTPP.machines.output")+" "+StatCollector.translateToLocal("GTPP.machines.tier")+": "+ EnumChatFormatting.GREEN +GT_Values.VOLTAGE_NAMES[aOutputTier]);
}
mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.progress")+": "+
EnumChatFormatting.GREEN + Integer.toString(((CONTAINER_MultiMachine) this.mContainer).mProgressTime/20) + EnumChatFormatting.RESET +" s / "+
EnumChatFormatting.YELLOW + Integer.toString(((CONTAINER_MultiMachine) this.mContainer).mMaxProgressTime/20) + EnumChatFormatting.RESET +" s");
mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.energy")+": "+
EnumChatFormatting.GREEN + Long.toString(aStoredEnergy) + EnumChatFormatting.RESET +" "+EU+" / "+
EnumChatFormatting.YELLOW + Long.toString(aMaxEnergy) + EnumChatFormatting.RESET +" "+EU+"");
if (aRecipeEU != 0 && aRecipeDuration > 0) {
mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.usage")+": "+
EnumChatFormatting.RED + Integer.toString(-aRecipeEU) + EnumChatFormatting.RESET + " "+EU+"/t");
mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.duration")+": "+
EnumChatFormatting.RED + Integer.toString(aRecipeDuration) + EnumChatFormatting.RESET + " ticks");
if (aRecipeSpecial > 0) {
mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.specialvalue")+": "+
EnumChatFormatting.RED + Integer.toString(aRecipeEU) + EnumChatFormatting.RESET + "");
}
}
mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.mei")+": "+
EnumChatFormatting.YELLOW+Long.toString(aMaxInputVoltage)+EnumChatFormatting.RESET+ " "+EU+"/t"+EnumChatFormatting.RESET);
mInfo.add(StatCollector.translateToLocal(StatCollector.translateToLocal("GTPP.machines.tier")+": "+
EnumChatFormatting.YELLOW+GT_Values.VN[GT_Utility.getTier(aMaxInputVoltage)]+ EnumChatFormatting.RESET));
mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.efficiency")+": "+ EnumChatFormatting.YELLOW+Float.toString(aEfficiency / 100.0F)+EnumChatFormatting.RESET + " %");
mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.pollution")+": "+ EnumChatFormatting.RED + (aPollutionTick*20)+ EnumChatFormatting.RESET+"/sec");
mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.pollutionreduced")+": "+ EnumChatFormatting.GREEN + aPollutionReduction + EnumChatFormatting.RESET+" %");
mInfo.add(StatCollector.translateToLocal("GTPP.CC.parallel")+": "+EnumChatFormatting.GREEN+(aMaxParallel)+EnumChatFormatting.RESET);
mInfo.add("Total Time Since Built: ");
mInfo.add("" + EnumChatFormatting.DARK_GREEN + Integer.toString(weeks)+EnumChatFormatting.RESET+" Weeks,");
mInfo.add("" + EnumChatFormatting.DARK_GREEN+ Integer.toString(days) +EnumChatFormatting.RESET+ " Days,");
mInfo.add("" + EnumChatFormatting.DARK_GREEN+ Long.toString(hours) +EnumChatFormatting.RESET+ " Hours,");
mInfo.add("" + EnumChatFormatting.DARK_GREEN+ Long.toString(minutes) +EnumChatFormatting.RESET+ " Minutes,");
mInfo.add("" + EnumChatFormatting.DARK_GREEN+ Long.toString(second) +EnumChatFormatting.RESET+ " Seconds");
// Machine Name
//fontRendererObj.drawString(this.mName, 6, 7, 16448255);
for (int i=0;i