Merge remote-tracking branch 'origin/master'

This commit is contained in:
Anuken
2023-03-31 22:03:02 -04:00
6 changed files with 72 additions and 19 deletions

View File

@@ -25,6 +25,6 @@ For example, if your server address is `example.com:6000`, you would add a comma
"address": "example.com:6000" "address": "example.com:6000"
} }
``` ```
> Note that Mindustry also support SRV records. This allows you to use a subdomain for your server address instead of specifying the port. For example, if you want to use `play.example.com` instead of `example.com:6000`, in the dns settings of your domain, add an SRV record with `_mindustry` as the service, `tcp` as the protocol, `play` as the target and `6000` as the port. You can also setup fallback servers by modifing the weight or priority of the record. > Note that Mindustry also support SRV records. This allows you to use a subdomain for your server address instead of specifying the port. For example, if you want to use `play.example.com` instead of `example.com:6000`, in the dns settings of your domain, add an SRV record with `_mindustry` as the service, `tcp` as the protocol, `play` as the target and `6000` as the port. You can also setup fallback servers by modifying the weight or priority of the record. Although SRV records are very convenient, keep in mind they are slower than regular addresses. Avoid using them in the server list, but rather as an easy way to share your server address.
Then, press the *'submit pull request'* button and I'll take a look at your server. If I have any issues with it, I'll let you know in the PR comments. Then, press the *'submit pull request'* button and I'll take a look at your server. If I have any issues with it, I'll let you know in the PR comments.

View File

@@ -153,3 +153,4 @@ BlackDeluxeCat
zenonet zenonet
AyuKo-o AyuKo-o
JojoFR1 JojoFR1
Xasmedy

View File

@@ -75,6 +75,8 @@ public class UI implements ApplicationListener, Loadable{
public FullTextDialog fullText; public FullTextDialog fullText;
public CampaignCompleteDialog campaignComplete; public CampaignCompleteDialog campaignComplete;
public IntMap<Dialog> followUpMenus;
public Cursor drillCursor, unloadCursor, targetCursor; public Cursor drillCursor, unloadCursor, targetCursor;
private @Nullable Element lastAnnouncement; private @Nullable Element lastAnnouncement;
@@ -202,6 +204,7 @@ public class UI implements ApplicationListener, Loadable{
logic = new LogicDialog(); logic = new LogicDialog();
fullText = new FullTextDialog(); fullText = new FullTextDialog();
campaignComplete = new CampaignCompleteDialog(); campaignComplete = new CampaignCompleteDialog();
followUpMenus = new IntMap<>();
Group group = Core.scene.root; Group group = Core.scene.root;
@@ -591,9 +594,8 @@ public class UI implements ApplicationListener, Loadable{
dialog.show(); dialog.show();
} }
/** Shows a menu that fires a callback when an option is selected. If nothing is selected, -1 is returned. */ public Dialog newMenuDialog(String title, String message, String[][] options, Intc buttonListener, Runnable closeOnBack){
public void showMenu(String title, String message, String[][] options, Intc callback){ return new Dialog(title){{
new Dialog(title){{
setFillParent(true); setFillParent(true);
removeChild(titleTable); removeChild(titleTable);
cont.add(titleTable).width(400f); cont.add(titleTable).width(400f);
@@ -617,16 +619,46 @@ public class UI implements ApplicationListener, Loadable{
String optionName = optionsRow[i]; String optionName = optionsRow[i];
int finalOption = option; int finalOption = option;
buttonRow.button(optionName, () -> { buttonRow.button(optionName, () -> buttonListener.get(finalOption))
callback.get(finalOption); .size(i == optionsRow.length - 1 ? lastWidth : width, 50).pad(4);
hide();
}).size(i == optionsRow.length - 1 ? lastWidth : width, 50).pad(4);
option++; option++;
} }
} }
}).growX(); }).growX();
closeOnBack(() -> callback.get(-1)); closeOnBack(closeOnBack);
}}.show(); }};
}
/** Shows a menu that fires a callback when an option is selected. If nothing is selected, -1 is returned. */
public void showMenu(String title, String message, String[][] options, Intc callback){
newMenuDialog(title, message, options, option -> {
callback.get(option);
hide();
}, () -> callback.get(-1)).show();
}
/** Shows a menu that hides when another followUp-menu is shown or when nothing is selected.
* @see UI#showMenu(String, String, String[][], Intc) */
public void showFollowUpMenu(int menuId, String title, String message, String[][] options, Intc callback) {
Dialog dialog = newMenuDialog(title, message, options, callback, () -> {
followUpMenus.remove(menuId);
callback.get(-1);
});
Dialog oldDialog = followUpMenus.remove(menuId);
if(oldDialog != null){
dialog.show(Core.scene, null);
oldDialog.hide(null);
}else{
dialog.show();
}
followUpMenus.put(menuId, dialog);
}
public void hideFollowUpMenu(int menuId) {
if(!followUpMenus.containsKey(menuId)) return;
followUpMenus.remove(menuId).hide();
} }
/** Formats time with hours:minutes:seconds. */ /** Formats time with hours:minutes:seconds. */

View File

@@ -36,6 +36,19 @@ public class Menus{
ui.showMenu(title, message, options, (option) -> Call.menuChoose(player, menuId, option)); ui.showMenu(title, message, options, (option) -> Call.menuChoose(player, menuId, option));
} }
@Remote(variants = Variant.both)
public static void followUpMenu(int menuId, String title, String message, String[][] options){
if(title == null) title = "";
if(options == null) options = new String[0][0];
ui.showFollowUpMenu(menuId, title, message, options, (option) -> Call.menuChoose(player, menuId, option));
}
@Remote(variants = Variant.both)
public static void hideFollowUpMenu(int menuId) {
ui.hideFollowUpMenu(menuId);
}
@Remote(targets = Loc.both, called = Loc.both) @Remote(targets = Loc.both, called = Loc.both)
public static void menuChoose(@Nullable Player player, int menuId, int option){ public static void menuChoose(@Nullable Player player, int menuId, int option){
if(player != null){ if(player != null){

View File

@@ -30,6 +30,8 @@ public class Duct extends Block implements Autotiler{
public @Load(value = "@-top-#", length = 5) TextureRegion[] topRegions; public @Load(value = "@-top-#", length = 5) TextureRegion[] topRegions;
public @Load(value = "@-bottom-#", length = 5, fallback = "duct-bottom-#") TextureRegion[] botRegions; public @Load(value = "@-bottom-#", length = 5, fallback = "duct-bottom-#") TextureRegion[] botRegions;
public @Nullable Block bridgeReplacement;
public Duct(String name){ public Duct(String name){
super(name); super(name);
@@ -56,6 +58,13 @@ public class Duct extends Block implements Autotiler{
stats.add(Stat.itemsMoved, 60f / speed, StatUnit.itemsSecond); stats.add(Stat.itemsMoved, 60f / speed, StatUnit.itemsSecond);
} }
@Override
public void init(){
super.init();
if(bridgeReplacement == null || !(bridgeReplacement instanceof DuctBridge)) bridgeReplacement = Blocks.ductBridge;
}
@Override @Override
public void drawPlanRegion(BuildPlan plan, Eachable<BuildPlan> list){ public void drawPlanRegion(BuildPlan plan, Eachable<BuildPlan> list){
int[] bits = getTiling(plan, list); int[] bits = getTiling(plan, list);
@@ -96,7 +105,9 @@ public class Duct extends Block implements Autotiler{
@Override @Override
public void handlePlacementLine(Seq<BuildPlan> plans){ public void handlePlacementLine(Seq<BuildPlan> plans){
Placement.calculateBridges(plans, (DuctBridge)Blocks.ductBridge, false, b -> b instanceof Duct || b instanceof StackConveyor || b instanceof Conveyor); if(bridgeReplacement == null) return;
Placement.calculateBridges(plans, (DuctBridge)bridgeReplacement, false, b -> b instanceof Duct || b instanceof StackConveyor || b instanceof Conveyor);
} }
public class DuctBuild extends Building{ public class DuctBuild extends Building{

View File

@@ -19,10 +19,6 @@
"name": "ECAN", "name": "ECAN",
"address": ["mindustry.ecansol.com:6597", "mindustry.ecansol.com:6499", "mindustry.ecansol.com:6599"] "address": ["mindustry.ecansol.com:6597", "mindustry.ecansol.com:6499", "mindustry.ecansol.com:6599"]
}, },
{
"name": "Mindustry Español",
"address": ["mes.xpdustry.fr"]
},
{ {
"name": "SMoke of Anarchy", "name": "SMoke of Anarchy",
"address": ["smokeofanarchy.ru", "backup.smokeofanarchy.ru"] "address": ["smokeofanarchy.ru", "backup.smokeofanarchy.ru"]
@@ -53,7 +49,7 @@
}, },
{ {
"name": "Omega Hub", "name": "Omega Hub",
"address": ["n1.mindustry.me:6608", "n7.mindustry.me:6567", "n7.mindustry.me:6570", "n1.mindustry.me:6568", "n1.mindustry.me:6671", "n1.mindustry.me:6570", "n1.mindustry.me:6573", "n1.mindustry.me:6610", "n1.mindustry.me:6567", "n1.mindustry.me:6599", "n1.mindustry.me:6774", "n1.mindustry.me:6571", "n1.mindustry.me:6589"] "address": ["n1.mindustry.me:6608", "n7.mindustry.me:6767", "n7.mindustry.me:6768", "n1.mindustry.me:6568", "n1.mindustry.me:6671", "n1.mindustry.me:6570", "n1.mindustry.me:6573", "n1.mindustry.me:6610", "n1.mindustry.me:6567", "n1.mindustry.me:6599", "n1.mindustry.me:6774", "n1.mindustry.me:6571", "n1.mindustry.me:6589"]
}, },
{ {
"name": "KMWStudios", "name": "KMWStudios",
@@ -85,11 +81,11 @@
}, },
{ {
"name": "Xpdustry", "name": "Xpdustry",
"address": ["lobby.md.xpdustry.fr", "survival.md.xpdustry.fr", "router.md.xpdustry.fr", "pvp.md.xpdustry.fr", "sandbox.md.xpdustry.fr", "attack.md.xpdustry.fr", "event.md.xpdustry.fr"] "address": ["37.187.73.180", "37.187.73.180:7000", "37.187.73.180:7001", "37.187.73.180:7002", "37.187.73.180:7003", "37.187.73.180:7004", "37.187.73.180:7005"]
}, },
{ {
"name": "LatamDustry", "name": "LatamDustry",
"address": ["n1.xpdustry.fr:7003", "n1.xpdustry.fr:7004", "n1.xpdustry.fr:7005", "n1.xpdustry.fr:7006", "n1.xpdustry.fr:7007", "uk-prem-01.optik.host:5894"] "address": ["uk-prem-01.optik.host:5894"]
}, },
{ {
"name": "Pandorum", "name": "Pandorum",
@@ -174,6 +170,6 @@
}, },
{ {
"name": "Exploding Cowards", "name": "Exploding Cowards",
"address": ["193.31.31.165:25778"] "address": ["193.31.31.165:25778", "193.31.31.165:25790"]
} }
] ]