diff --git a/core/src/mindustry/net/ServerGroup.java b/core/src/mindustry/net/ServerGroup.java index 15bd8fa4d3..694058f050 100644 --- a/core/src/mindustry/net/ServerGroup.java +++ b/core/src/mindustry/net/ServerGroup.java @@ -5,10 +5,16 @@ import arc.*; public class ServerGroup{ public String name; public String[] addresses; + public boolean prioritized = false; - public ServerGroup(String name, String[] addresses){ + public ServerGroup(String name, String[] addresses, boolean prioritized){ this.name = name; this.addresses = addresses; + this.prioritized = prioritized; + } + + public ServerGroup(String name, String[] addresses){ + this(name, addresses, false); } public ServerGroup(){ diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index 5db313a075..b6b2476761 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -417,6 +417,9 @@ public class JoinDialog extends BaseDialog{ Table[] groupTable = {null, null}; + if(group.prioritized){ + addHeader(groupTable, group, hidden, false); + } //table containing all groups for(String address : group.addresses){ String resaddress = address.contains(":") ? address.split(":")[0] : address; @@ -430,29 +433,10 @@ public class JoinDialog extends BaseDialog{ || res.mapname.toLowerCase().contains(serverSearch) || (res.modeName != null && res.modeName.toLowerCase().contains(serverSearch)))) return; - //add header if(groupTable[0] == null){ - global.table(t -> groupTable[0] = t).fillX().left().row(); - - groupTable[0].table(head -> { - if(!group.name.isEmpty()){ - head.add(group.name).color(Color.lightGray).padRight(4); - } - head.image().height(3f).growX().color(Color.lightGray); - - //button for showing/hiding servers - ImageButton[] image = {null}; - image[0] = head.button(hidden ? Icon.eyeOffSmall : Icon.eyeSmall, Styles.grayi, () -> { - group.setHidden(!group.hidden()); - image[0].getStyle().imageUp = group.hidden() ? Icon.eyeOffSmall : Icon.eyeSmall; - if(group.hidden() && !showHidden){ - groupTable[0].remove(); - } - }).size(40f).get(); - image[0].addListener(new Tooltip(t -> t.background(Styles.black6).margin(4).label(() -> !group.hidden() ? "@server.shown" : "@server.hidden"))); - }).width(targetWidth() * columns()).padBottom(-2).row(); - - groupTable[1] = groupTable[0].row().table().top().left().grow().get(); + addHeader(groupTable, group, hidden, true); + }else if(!groupTable[0].visible){ + addHeader(groupTable, group, hidden, true); } addCommunityHost(res, groupTable[1]); @@ -464,6 +448,37 @@ public class JoinDialog extends BaseDialog{ } } + void addHeader(Table[] groupTable, ServerGroup group, boolean hidden, boolean doInit){ // outlined separately + if(groupTable[0] == null){ + global.table(t -> groupTable[0] = t).fillX().left().row(); + } + groupTable[0].visible(() -> doInit); + if(!doInit){ + return; + } + + groupTable[0].table(head -> { + Color col = group.prioritized ? Pal.accent : Color.lightGray; + if(!group.name.isEmpty()){ + head.add(group.name).color(col).padRight(4); + } + head.image().height(3f).growX().color(col); + + //button for showing/hiding servers + ImageButton[] image = {null}; + image[0] = head.button(hidden ? Icon.eyeOffSmall : Icon.eyeSmall, Styles.grayi, () -> { + group.setHidden(!group.hidden()); + image[0].getStyle().imageUp = group.hidden() ? Icon.eyeOffSmall : Icon.eyeSmall; + if(group.hidden() && !showHidden){ + groupTable[0].remove(); + } + }).size(40f).get(); + image[0].addListener(new Tooltip(t -> t.background(Styles.black6).margin(4).label(() -> !group.hidden() ? "@server.shown" : "@server.hidden"))); + }).width(targetWidth() * columns()).padBottom(-2).row(); + + groupTable[1] = groupTable[0].row().table().top().left().grow().get(); + } + int columns(){ return Mathf.clamp((int)((Core.graphics.getWidth() / Scl.scl() * 0.9f) / targetWidth()), 1, 4); } @@ -604,13 +619,14 @@ public class JoinDialog extends BaseDialog{ Seq servers = new Seq<>(); val.asArray().each(child -> { String name = child.getString("name", ""); + boolean prioritized = child.getBool("prioritized", false); String[] addresses; if(child.has("addresses") || (child.has("address") && child.get("address").isArray())){ addresses = (child.has("addresses") ? child.get("addresses") : child.get("address")).asArray().map(Jval::asString).toArray(String.class); }else{ addresses = new String[]{child.getString("address", "")}; } - servers.add(new ServerGroup(name, addresses)); + servers.add(new ServerGroup(name, addresses, prioritized)); }); //modify default servers on main thread Core.app.post(() -> { diff --git a/servers_v7.json b/servers_v7.json index d8d83c800e..2209def01a 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -174,5 +174,10 @@ { "name": "CreateDustry", "address": ["95.216.68.161:55639"] + }, + { + "name": "Official Mindustry Events", + "address": ["event.baseduser.eu.org"], + "prioritized": true } ]