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