From 0063e32f6fac5edbccf80fbc29e357c03ee76f5e Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 3 Jan 2018 16:50:13 -0500 Subject: [PATCH] Implemented LAN refreshing and kick reasons --- core/assets/bundles/bundle.properties | 4 ++- .../io/anuke/mindustry/core/NetClient.java | 2 +- .../src/io/anuke/mindustry/core/Renderer.java | 2 +- core/src/io/anuke/mindustry/net/Packets.java | 4 +++ .../src/io/anuke/mindustry/ui/JoinDialog.java | 29 ++++++++++++------- kryonet/src/io/anuke/kryonet/KryoServer.java | 5 +++- 6 files changed, 31 insertions(+), 15 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 7f9ed21ada..38331ac07d 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -14,12 +14,14 @@ text.joingame=Join Game text.quit=Quit text.name=Name: text.players={0} players online -text.server.kicked=You have been kicked from the server! +text.server.kicked.kick=You have been kicked from the server! +text.server.kicked.invalidPassword=Invalid password! text.server.connected=A player has joined. text.server.disconnected={0} has disconnected. text.nohost=Can't host server on a custom map! text.hostserver=Host Server text.host=Host +text.hosts.refresh=Refresh text.hosts.discovering=Discovering LAN games text.hosts.none=[lightgray]No hosts found! text.joingame.byip=Join by IP... diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/io/anuke/mindustry/core/NetClient.java index 535c71c340..f24d7a75f6 100644 --- a/core/src/io/anuke/mindustry/core/NetClient.java +++ b/core/src/io/anuke/mindustry/core/NetClient.java @@ -272,7 +272,7 @@ public class NetClient extends Module { Net.handle(KickPacket.class, packet -> { kicked = true; Net.disconnect(); - Gdx.app.postRunnable(() -> Vars.ui.showError("$text.server.kicked")); + Gdx.app.postRunnable(() -> Vars.ui.showError("$text.server.kicked." + KickReason.values()[packet.reason].name())); }); } diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index 112bbf4541..33bb4adb69 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -217,7 +217,7 @@ public class Renderer extends RendererModule{ Draw.tscl(0.25f/2); for(Player player : Vars.control.playerGroup.all()){ if(!player.isLocal){ - Draw.text(player.name, player.x, player.y - 8); + Draw.text(player.name, player.x, player.y - 9); } } Draw.tscl(Vars.fontscale); diff --git a/core/src/io/anuke/mindustry/net/Packets.java b/core/src/io/anuke/mindustry/net/Packets.java index 39db45f568..a9ef34a215 100644 --- a/core/src/io/anuke/mindustry/net/Packets.java +++ b/core/src/io/anuke/mindustry/net/Packets.java @@ -115,6 +115,10 @@ public class Packets { } public static class KickPacket{ + public byte reason; + } + public enum KickReason{ + kick, invalidPassword } } diff --git a/core/src/io/anuke/mindustry/ui/JoinDialog.java b/core/src/io/anuke/mindustry/ui/JoinDialog.java index 46a7e3499a..d3b3a912f7 100644 --- a/core/src/io/anuke/mindustry/ui/JoinDialog.java +++ b/core/src/io/anuke/mindustry/ui/JoinDialog.java @@ -9,6 +9,7 @@ import io.anuke.ucore.core.Settings; import io.anuke.ucore.core.Timers; import io.anuke.ucore.scene.style.Drawable; import io.anuke.ucore.scene.ui.Dialog; +import io.anuke.ucore.scene.ui.ScrollPane; import io.anuke.ucore.scene.ui.TextButton; import io.anuke.ucore.scene.ui.TextField.TextFieldFilter.DigitsOnlyFilter; import io.anuke.ucore.scene.ui.layout.Table; @@ -48,20 +49,24 @@ public class JoinDialog extends FloatingDialog { setup(); - shown(() -> { - hosts.clear(); - hosts.background("button"); - hosts.label(() -> "[accent]" + Bundles.get("text.hosts.discovering") + new String(new char[(int)(Timers.time() / 10) % 4]).replace("\0", ".")).pad(10f); - Net.discoverServers(list -> { - addHosts(list); - }); - }); + shown(this::refresh); + } + + void refresh(){ + hosts.clear(); + hosts.background("button"); + hosts.label(() -> "[accent]" + Bundles.get("text.hosts.discovering") + new String(new char[(int)(Timers.time() / 10) % 4]).replace("\0", ".")).pad(10f); + Net.discoverServers(this::addHosts); } void setup(){ hosts.background("button"); - content().clear(); + ScrollPane pane = new ScrollPane(hosts, "clear"); + pane.setFadeScrollBars(false); + pane.setScrollingDisabled(true, false); + + content().clear(); content().table(t -> { t.add("$text.name").padRight(10); t.addField(Settings.getString("name"), text -> { @@ -72,7 +77,7 @@ public class JoinDialog extends FloatingDialog { }).grow().pad(8); }).width(w).height(70f).pad(4); content().row(); - content().add(hosts).width(w).pad(0); + content().add(pane).width(w).pad(0); content().row(); content().addButton("$text.joingame.byip", "clear", join::show).width(w).height(80f); } @@ -81,7 +86,9 @@ public class JoinDialog extends FloatingDialog { hosts.clear(); if(array.size == 0){ - hosts.add("$text.hosts.none").pad(20f); + hosts.add("$text.hosts.none").pad(10f); + hosts.add().growX(); + hosts.addIButton("icon-loading", 16*2f, this::refresh).pad(-10f).padLeft(0).padTop(-6).size(70f, 74f); }else { for (Address a : array) { TextButton button = hosts.addButton("[accent]"+a.name, "clear", () -> { diff --git a/kryonet/src/io/anuke/kryonet/KryoServer.java b/kryonet/src/io/anuke/kryonet/KryoServer.java index 73e3d6e9e3..1ce34c3e62 100644 --- a/kryonet/src/io/anuke/kryonet/KryoServer.java +++ b/kryonet/src/io/anuke/kryonet/KryoServer.java @@ -10,6 +10,7 @@ import io.anuke.mindustry.net.Net.ServerProvider; import io.anuke.mindustry.net.Packets.Connect; import io.anuke.mindustry.net.Packets.Disconnect; import io.anuke.mindustry.net.Packets.KickPacket; +import io.anuke.mindustry.net.Packets.KickReason; import io.anuke.mindustry.net.Registrator; import io.anuke.mindustry.net.Streamable; import io.anuke.mindustry.net.Streamable.StreamBegin; @@ -104,8 +105,10 @@ public class KryoServer implements ServerProvider { @Override public void kick(int connection) { Connection conn = getByID(connection); + KickPacket p = new KickPacket(); + p.reason = (byte)KickReason.kick.ordinal(); - conn.sendTCP(new KickPacket()); + conn.sendTCP(p); Timers.runTask(1f, () -> { if(conn.isConnected()){ conn.close();