package blusunrize.immersiveengineering.client.gui; import blusunrize.immersiveengineering.ImmersiveEngineering; import blusunrize.immersiveengineering.api.Lib; import blusunrize.immersiveengineering.client.ClientUtils; import blusunrize.immersiveengineering.client.gui.GuiSorter.ButtonSorter; import blusunrize.immersiveengineering.common.blocks.wooden.TileEntityFluidSorter; import blusunrize.immersiveengineering.common.gui.ContainerFluidSorter; import blusunrize.immersiveengineering.common.util.network.MessageTileSync; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidUtil; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.relauncher.Side; import org.lwjgl.opengl.GL11; import java.io.IOException; import java.util.ArrayList; public class GuiFluidSorter extends GuiContainer { TileEntityFluidSorter tile; InventoryPlayer playerInventory; public GuiFluidSorter(InventoryPlayer inventoryPlayer, TileEntityFluidSorter tile) { super(new ContainerFluidSorter(inventoryPlayer, tile)); this.tile = tile; this.playerInventory = inventoryPlayer; this.ySize = 244; } @Override public void drawScreen(int mx, int my, float partial) { super.drawScreen(mx, my, partial); ArrayList<String> tooltip = new ArrayList<String>(); for(GuiButton button : this.buttonList) { if(button instanceof ButtonSorter) if(mx>button.xPosition&&mx<button.xPosition+18 && my>button.yPosition&&my<button.yPosition+18) { int type = ((ButtonSorter)button).type; String[] split = I18n.format(Lib.DESC_INFO+"filter.nbt").split("<br>"); for(int i = 0; i < split.length; i++) tooltip.add((i==0?TextFormatting.WHITE: TextFormatting.GRAY)+split[i]); } } for(int side = 0; side < 6; side++) for(int i = 0; i < 8; i++) if(tile.filters[side][i]!=null) { int x = guiLeft+4+(side/2)*58 +(i<3?i*18: i>4?(i-5)*18: i==3?0: 36); int y = guiTop+22+(side%2)*76 +(i<3?0: i>4?36: 18); if(mx>x&&mx<x+16 && my>y&&my<y+16) ClientUtils.addFluidTooltip(tile.filters[side][i], tooltip, 0); } if(!tooltip.isEmpty()) { ClientUtils.drawHoveringText(tooltip, mx, my, fontRendererObj, guiLeft+xSize, -1); RenderHelper.enableGUIStandardItemLighting(); } } @Override protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { super.mouseClicked(mouseX, mouseY, mouseButton); for(int side = 0; side < 6; side++) for(int i = 0; i < 8; i++) { int x = guiLeft+4+(side/2)*58 +(i<3?i*18: i>4?(i-5)*18: i==3?0: 36); int y = guiTop+22+(side%2)*76 +(i<3?0: i>4?36: 18); if(mouseX>x&&mouseX<x+16 && mouseY>y&&mouseY<y+16) { FluidStack fs = FluidUtil.getFluidContained(playerInventory.getItemStack()); tile.filters[side][i] = fs; NBTTagCompound tag = new NBTTagCompound(); tag.setInteger("filter_side", side); tag.setInteger("filter_slot", i); if(fs!=null) tag.setTag("filter", fs.writeToNBT(new NBTTagCompound())); ImmersiveEngineering.packetHandler.sendToServer(new MessageTileSync(tile, tag)); } } } @Override protected void drawGuiContainerBackgroundLayer(float f, int mx, int my) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); ClientUtils.bindTexture("immersiveengineering:textures/gui/sorter.png"); this.drawTexturedModalRect(guiLeft,guiTop, 0, 0, xSize, ySize); for(int side=0; side<6; side++) { ClientUtils.bindAtlas(); for(int i=0; i<8; i++) if(tile.filters[side][i]!=null) { TextureAtlasSprite sprite = ClientUtils.getSprite(tile.filters[side][i].getFluid().getStill(tile.filters[side][i])); if(sprite!=null) { int x = guiLeft+4+(side/2)*58 +(i<3?i*18: i>4?(i-5)*18: i==3?0: 36); int y = guiTop+22+(side%2)*76 +(i<3?0: i>4?36: 18); int col = tile.filters[side][i].getFluid().getColor(tile.filters[side][i]); GlStateManager.color((col>>16&255)/255.0f, (col>>8&255)/255.0f, (col&255)/255.0f, 1); ClientUtils.drawTexturedRect(x,y, 16,16, sprite.getMinU(),sprite.getMaxU(),sprite.getMinV(),sprite.getMaxV()); } } int x = guiLeft+30+(side/2)*58; int y = guiTop+44+(side%2)*76; String s = I18n.format("desc.immersiveengineering.info.blockSide."+EnumFacing.getFront(side).toString()).substring(0, 1); GL11.glEnable(3042); ClientUtils.font().drawString(s, x-(ClientUtils.font().getStringWidth(s)/2), y, 0xaacccccc, true); } ClientUtils.bindTexture("immersiveengineering:textures/gui/sorter.png"); } @Override public void initGui() { super.initGui(); this.buttonList.clear(); for(int side=0; side<6; side++) { int x = guiLeft+21+ (side/2)*58; int y = guiTop+3+ (side%2)*76; ButtonSorter b = new ButtonSorter(side, x,y, 1); b.active = this.tile.doNBT(side); this.buttonList.add(b); } } @Override protected void actionPerformed(GuiButton button) { if(button instanceof ButtonSorter && FMLCommonHandler.instance().getEffectiveSide()==Side.CLIENT) { int side = button.id; this.tile.sortWithNBT[side] = (byte)(this.tile.sortWithNBT[side]==1?0:1); NBTTagCompound tag = new NBTTagCompound(); tag.setByteArray("sideConfig", this.tile.sortWithNBT); ImmersiveEngineering.packetHandler.sendToServer(new MessageTileSync(tile, tag)); this.initGui(); } } }