package mcjty.rftools.items.teleportprobe; import mcjty.lib.base.StyleConfig; import mcjty.lib.gui.Window; import mcjty.lib.gui.events.DefaultSelectionEvent; import mcjty.lib.gui.layout.HorizontalAlignment; import mcjty.lib.gui.layout.HorizontalLayout; import mcjty.lib.gui.widgets.Label; import mcjty.lib.gui.widgets.Panel; import mcjty.lib.gui.widgets.*; import mcjty.lib.varia.Coordinate; import mcjty.rftools.blocks.teleporter.TeleportDestinationClientInfo; import mcjty.rftools.network.RFToolsMessages; import net.minecraft.client.gui.GuiScreen; import org.lwjgl.input.Mouse; import java.awt.*; import java.util.ArrayList; import java.util.List; public class GuiTeleportProbe extends GuiScreen { /** The X size of the window in pixels. */ private int xSize = 356; /** The Y size of the window in pixels. */ private int ySize = 180; private Window window; private WidgetList list; private static List<TeleportDestinationClientInfo> serverDestinationList = null; private static List<TeleportDestinationClientInfo> destinationList = null; private int listDirty; public GuiTeleportProbe() { listDirty = 0; } @Override public boolean doesGuiPauseGame() { return false; } @Override public void initGui() { super.initGui(); int k = (this.width - this.xSize) / 2; int l = (this.height - this.ySize) / 2; list = new WidgetList(mc, this).addSelectionEvent(new DefaultSelectionEvent() { @Override public void doubleClick(Widget parent, int index) { teleport(index); } }); Slider listSlider = new Slider(mc, this).setDesiredWidth(11).setVertical().setScrollable(list); Widget toplevel = new Panel(mc, this).setFilledRectThickness(2).setLayout(new HorizontalLayout().setSpacing(1).setHorizontalMargin(3)).addChild(list).addChild(listSlider); toplevel.setBounds(new Rectangle(k, l, xSize, ySize)); window = new Window(this, toplevel); serverDestinationList = null; destinationList = null; requestReceiversFromServer(); } private void teleport(int index) { TeleportDestinationClientInfo destination = destinationList.get(index); Coordinate c = destination.getCoordinate(); RFToolsMessages.INSTANCE.sendToServer(new PacketForceTeleport(c.getX(), c.getY(), c.getZ(), destination.getDimension())); } public static void setReceivers(List<TeleportDestinationClientInfo> destinationList) { serverDestinationList = new ArrayList<TeleportDestinationClientInfo>(destinationList); } private void requestReceiversFromServer() { RFToolsMessages.INSTANCE.sendToServer(new PacketGetAllReceivers()); } private void populateList() { if (serverDestinationList == null) { return; } if (serverDestinationList.equals(destinationList)) { return; } destinationList = new ArrayList<TeleportDestinationClientInfo>(serverDestinationList); list.removeChildren(); for (TeleportDestinationClientInfo destination : destinationList) { Coordinate coordinate = destination.getCoordinate(); int dim = destination.getDimension(); Panel panel = new Panel(mc, this).setLayout(new HorizontalLayout()); panel.addChild(new Label(mc, this).setColor(StyleConfig.colorTextInListNormal).setHorizontalAlignment(HorizontalAlignment.ALIGH_LEFT).setText(destination.getName()).setDesiredWidth(100)); panel.addChild(new Label(mc, this).setColor(StyleConfig.colorTextInListNormal).setHorizontalAlignment(HorizontalAlignment.ALIGH_LEFT).setText(coordinate.toString()).setDesiredWidth(75)); panel.addChild(new Label(mc, this).setColor(StyleConfig.colorTextInListNormal).setHorizontalAlignment(HorizontalAlignment.ALIGH_LEFT).setText("Id " + dim).setDesiredWidth(75)); list.addChild(panel); } } @Override protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); window.mouseClicked(x, y, button); } @Override public void handleMouseInput() { super.handleMouseInput(); window.handleMouseInput(); } @Override protected void mouseMovedOrUp(int x, int y, int button) { super.mouseMovedOrUp(x, y, button); window.mouseMovedOrUp(x, y, button); } @Override protected void keyTyped(char typedChar, int keyCode) { super.keyTyped(typedChar, keyCode); window.keyTyped(typedChar, keyCode); } @Override public void drawScreen(int xSize_lo, int ySize_lo, float par3) { super.drawScreen(xSize_lo, ySize_lo, par3); listDirty--; if (listDirty <= 0) { populateList(); listDirty = 10; } window.draw(); java.util.List<String> tooltips = window.getTooltips(); if (tooltips != null) { int guiLeft = (this.width - this.xSize) / 2; int guiTop = (this.height - this.ySize) / 2; int x = Mouse.getEventX() * width / mc.displayWidth; int y = height - Mouse.getEventY() * height / mc.displayHeight - 1; drawHoveringText(tooltips, x-guiLeft, y-guiTop, mc.fontRenderer); } } }