package pneumaticCraft.client.gui;
import java.awt.Point;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.init.Items;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import pneumaticCraft.client.gui.widget.WidgetTank;
import pneumaticCraft.common.PneumaticCraftAPIHandler;
import pneumaticCraft.common.inventory.ContainerLiquidCompressor;
import pneumaticCraft.common.tileentity.TileEntityLiquidCompressor;
import pneumaticCraft.lib.Textures;
public class GuiLiquidCompressor extends GuiPneumaticContainerBase<TileEntityLiquidCompressor>{
public GuiLiquidCompressor(InventoryPlayer player, TileEntityLiquidCompressor te){
super(new ContainerLiquidCompressor(player, te), te, Textures.GUI_LIQUID_COMPRESSOR);
}
public GuiLiquidCompressor(Container container, TileEntityLiquidCompressor te, String texture){
super(container, te, texture);
}
@Override
public void initGui(){
super.initGui();
addWidget(new WidgetTank(0, guiLeft + getFluidOffset(), guiTop + 15, te.getFluidTank()));
addAnimatedStat("gui.tab.liquidCompressor.fuel", new ItemStack(Items.lava_bucket), 0xFFFF6600, true).setTextWithoutCuttingString(getAllFuels());
}
@Override
protected void addPressureStatInfo(List<String> pressureStatText){
super.addPressureStatInfo(pressureStatText);
if(te.isProducing) {
pressureStatText.add("\u00a77Currently producing:");
pressureStatText.add("\u00a70" + (double)Math.round(te.getBaseProduction() * te.getEfficiency() * te.getSpeedMultiplierFromUpgrades(te.getUpgradeSlots()) / 100) + " mL/tick.");
}
}
protected int getFluidOffset(){
return 86;
}
@Override
protected Point getInvNameOffset(){
return new Point(0, -2);
}
@Override
protected Point getGaugeLocation(){
int xStart = (width - xSize) / 2;
int yStart = (height - ySize) / 2;
return new Point(xStart + xSize * 3 / 4 + 5, yStart + ySize * 1 / 4 + 4);
}
private List<String> getAllFuels(){
List<String> fuels = new ArrayList<String>();
fuels.add("L/Bucket | Fluid");
for(Map.Entry<String, Integer> map : sortByValue(PneumaticCraftAPIHandler.getInstance().liquidFuels).entrySet()) {
String value = map.getValue() / 1000 + "";
while(fontRendererObj.getStringWidth(value) < 25) {
value = value + " ";
}
Fluid fluid = FluidRegistry.getFluid(map.getKey());
fuels.add(value + "| " + fluid.getLocalizedName(new FluidStack(fluid, 1)));
}
return fuels;
}
private static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map){
List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<K, V>>(){
@Override
public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2){
return -o1.getValue().compareTo(o2.getValue());
}
});
Map<K, V> result = new LinkedHashMap<K, V>();
for(Map.Entry<K, V> entry : list) {
result.put(entry.getKey(), entry.getValue());
}
return result;
}
@Override
protected void drawGuiContainerForegroundLayer(int x, int y){
super.drawGuiContainerForegroundLayer(x, y);
fontRendererObj.drawString("Upgr.", 15, 19, 4210752);
}
@Override
public void addProblems(List<String> curInfo){
super.addProblems(curInfo);
if(!te.isProducing && te.getTankInfo(null)[0].fluid == null) {
curInfo.add("gui.tab.problems.liquidCompressor.noFuel");
}
}
}