Compare commits

..

12 Commits
v124 ... v124.1

Author SHA1 Message Date
Anuken
3d8479355c Fixed random key 2021-02-08 10:45:08 -05:00
MEEP of Faith
86c702861e Remove NullPointerExeption error (#4624) 2021-02-08 10:44:08 -05:00
CxZxRainzz
47ec13eef4 Update servers_v6.json (#4628)
Add CxZx
2021-02-08 10:39:41 -05:00
Anuken
d8cd0d867c Merge remote-tracking branch 'origin/master' 2021-02-08 10:37:09 -05:00
Anuken
d5ede6b1bb Un-blacklisted arc.net 2021-02-08 10:37:06 -05:00
키에르
fd931564aa Add sources jar (#4612)
* Add sources jar

* Update build.gradle

* Fix classes not found

* :core

* formatting

Co-authored-by: Anuken <arnukren@gmail.com>
2021-02-08 09:59:11 -05:00
Anuken
6b19178a13 Fixed #4620 2021-02-08 09:52:41 -05:00
Anuken
64acd6c1e4 Merge remote-tracking branch 'origin/master' 2021-02-08 09:42:57 -05:00
Anuken
560914bebe Added more unit stats to database 2021-02-08 09:42:49 -05:00
Anuken
2edec90dfb Cleanup 2021-02-08 09:25:46 -05:00
Catchears
10c1305eae update german translation for build 124 (#4618)
* update german translation for build 124

* shorten text to fit on the button without newline
2021-02-07 17:16:56 -05:00
Joshua Fan
852c98f004 "[E] to enable building" hint while building is paused (#3857)
* Show building hints while building is paused

* Add hint: [E] to enable building

* Remove .left()

* Fix build enable hint display inconsistencies when changing build auto-pause setting

* Combine building hint tables

* Fix indentation
2021-02-07 16:58:42 -05:00
18 changed files with 105 additions and 73 deletions

View File

@@ -318,6 +318,11 @@ project(":core"){
} }
} }
task sourcesJar(type: Jar, dependsOn: classes){
classifier = 'sources'
from sourceSets.main.allSource
}
dependencies{ dependencies{
compileJava.dependsOn(preGen) compileJava.dependsOn(preGen)

View File

@@ -312,6 +312,7 @@ cancelbuilding = [accent][[{0}][] to clear plan
selectschematic = [accent][[{0}][] to select+copy selectschematic = [accent][[{0}][] to select+copy
pausebuilding = [accent][[{0}][] to pause building pausebuilding = [accent][[{0}][] to pause building
resumebuilding = [scarlet][[{0}][] to resume building resumebuilding = [scarlet][[{0}][] to resume building
enablebuilding = [scarlet][[{0}][] to enable building
showui = UI hidden.\nPress [accent][[{0}][] to show UI. showui = UI hidden.\nPress [accent][[{0}][] to show UI.
wave = [accent]Wave {0} wave = [accent]Wave {0}
wave.cap = [accent]Wave {0}/{1} wave.cap = [accent]Wave {0}/{1}
@@ -683,6 +684,7 @@ stat.drillspeed = Base Drill Speed
stat.boosteffect = Boost Effect stat.boosteffect = Boost Effect
stat.maxunits = Max Active Units stat.maxunits = Max Active Units
stat.health = Health stat.health = Health
stat.armor = Armor
stat.buildtime = Build Time stat.buildtime = Build Time
stat.maxconsecutive = Max Consecutive stat.maxconsecutive = Max Consecutive
stat.buildcost = Build Cost stat.buildcost = Build Cost

View File

@@ -41,10 +41,13 @@ be.ignore = Ignorieren
be.noupdates = Keine Aktualisierungen gefunden. be.noupdates = Keine Aktualisierungen gefunden.
be.check = Auf Aktualisierungen prüfen be.check = Auf Aktualisierungen prüfen
mod.featured.dialog.title = Mod Browser (unfertig) mod.featured.dialog.title = Mod Browser
mods.browser.selected = Ausgewählter Mod mods.browser.selected = Ausgewählter Mod
mods.browser.add = Installieren mods.browser.add = Installieren
mods.github.open = Ansehen mods.browser.reinstall = Neu Installieren
mods.github.open = Github
mods.browser.sortdate = Nach neusten sortieren
mods.browser.sortstars = Nach Sternen sortieren
schematic = Entwurf schematic = Entwurf
schematic.add = Entwurf speichern... schematic.add = Entwurf speichern...
@@ -116,8 +119,10 @@ mods.none = [lightgray]Keine Mods gefunden!
mods.guide = Modding-Anleitung mods.guide = Modding-Anleitung
mods.report = Problem melden mods.report = Problem melden
mods.openfolder = Mod-Verzeichnis öffnen mods.openfolder = Mod-Verzeichnis öffnen
mods.viewcontent = Inhalt ansehen
mods.reload = Neu laden mods.reload = Neu laden
mods.reloadexit = Das Spiel wird jetzt beendet, um die Mod-Änderungen anzuwenden. mods.reloadexit = Das Spiel wird jetzt beendet, um die Mod-Änderungen anzuwenden.
mod.installed = [[Installiert]
mod.display = [gray]Mod:[orange] {0} mod.display = [gray]Mod:[orange] {0}
mod.enabled = [lightgray]Aktiviert mod.enabled = [lightgray]Aktiviert
mod.disabled = [scarlet]Deaktiviert mod.disabled = [scarlet]Deaktiviert
@@ -287,6 +292,7 @@ cancel = Abbruch
openlink = Link öffnen openlink = Link öffnen
copylink = Link kopieren copylink = Link kopieren
back = Zurück back = Zurück
max = Max
crash.export = Crash-Logs exportieren crash.export = Crash-Logs exportieren
crash.none = Keine Crash-Logs gefunden. crash.none = Keine Crash-Logs gefunden.
crash.exported = Crash-Logs wurden erfolgreich exportiert. crash.exported = Crash-Logs wurden erfolgreich exportiert.
@@ -361,7 +367,6 @@ editor.center = Zur Mitte
workshop = Workshop workshop = Workshop
waves.title = Wellen waves.title = Wellen
waves.remove = Entfernen waves.remove = Entfernen
waves.never = <nie>
waves.every = alle waves.every = alle
waves.waves = Welle(n) waves.waves = Welle(n)
waves.perspawn = pro Spawn waves.perspawn = pro Spawn
@@ -390,7 +395,7 @@ editor.removeunit = Bereich entfernen
editor.teams = Teams editor.teams = Teams
editor.errorload = Fehler beim Laden der Datei:\n[accent]{0} editor.errorload = Fehler beim Laden der Datei:\n[accent]{0}
editor.errorsave = Fehler beim Speichern der Datei:\n[accent]{0} editor.errorsave = Fehler beim Speichern der Datei:\n[accent]{0}
editor.errorimage = Das ist ein Bild, keine Karte. Wechsle nicht den Dateityp und erwarte, dass es funktioniert.\n\nWenn du eine 'v3.5/build 40'-Karte importieren möchtest, benutze den 'Importiere Terrainbild'-Knopf im Editor. editor.errorimage = Das ist ein Bild, keine Karte.
editor.errorlegacy = Diese Karte ist zu alt und benutzt ein veraltetes Kartenformat, das nicht mehr unterstützt wird. editor.errorlegacy = Diese Karte ist zu alt und benutzt ein veraltetes Kartenformat, das nicht mehr unterstützt wird.
editor.errornot = Dies ist keine Kartendatei. editor.errornot = Dies ist keine Kartendatei.
editor.errorheader = Diese Karte ist entweder nicht gültig oder beschädigt. editor.errorheader = Diese Karte ist entweder nicht gültig oder beschädigt.
@@ -693,6 +698,7 @@ stat.lightningchance = Blitzwahr­schein­lich­keit
stat.lightningdamage = Blitzschaden stat.lightningdamage = Blitzschaden
stat.flammability = Brennbarkeit stat.flammability = Brennbarkeit
stat.radioactivity = Radioaktivität stat.radioactivity = Radioaktivität
stat.charge = Ladung
stat.heatcapacity = Hitzekapazität stat.heatcapacity = Hitzekapazität
stat.viscosity = Viskosität stat.viscosity = Viskosität
stat.temperature = Temperatur stat.temperature = Temperatur
@@ -720,6 +726,7 @@ bar.corereq = Kern-Basis erforderlich
bar.drillspeed = Bohrgeschwindigkeit: {0}/s bar.drillspeed = Bohrgeschwindigkeit: {0}/s
bar.pumpspeed = Pumpengeschwindigkeit: {0}/s bar.pumpspeed = Pumpengeschwindigkeit: {0}/s
bar.efficiency = Effizienz: {0}% bar.efficiency = Effizienz: {0}%
bar.boost = Beschleunigung: {0}%
bar.powerbalance = Strom: {0}/s bar.powerbalance = Strom: {0}/s
bar.powerstored = Gespeichert: {0}/{1} bar.powerstored = Gespeichert: {0}/{1}
bar.poweramount = Strom: {0} bar.poweramount = Strom: {0}
@@ -935,6 +942,7 @@ mode.custom = Angepasste Regeln
rules.infiniteresources = Unbegrenzte Ressourcen rules.infiniteresources = Unbegrenzte Ressourcen
rules.reactorexplosions = Reaktor-Explosionen rules.reactorexplosions = Reaktor-Explosionen
rules.coreincinerates = Kern verbrennt überflüssige Materialien
rules.schematic = Entwürfe erlaubt rules.schematic = Entwürfe erlaubt
rules.wavetimer = Wellen-Timer rules.wavetimer = Wellen-Timer
rules.waves = Wellen rules.waves = Wellen
@@ -1381,8 +1389,8 @@ block.inverted-sorter.description = Wie ein normaler Sortierer, aber gibt das au
block.router.description = Verteilt Materialien auf bis zu drei Richtungen. block.router.description = Verteilt Materialien auf bis zu drei Richtungen.
block.router.details = Ein nötiges Übel. Es ist nicht empfehlenswert, ihn neben Fabriken zu setzen, da er sich dort verstopfen kann. block.router.details = Ein nötiges Übel. Es ist nicht empfehlenswert, ihn neben Fabriken zu setzen, da er sich dort verstopfen kann.
block.distributor.description = Verteilt Materialien auf bis zu sieben Richtungen. block.distributor.description = Verteilt Materialien auf bis zu sieben Richtungen.
block.overflow-gate.description = Gibt Materialien nur zu den Seiten heraus, wenn der fordere Ausgang blockiert ist. Kann nicht neben anderen Überlauf- oder Unterlauftoren verwendet werden. block.overflow-gate.description = Gibt Materialien nur zu den Seiten heraus, wenn der fordere Ausgang blockiert ist.
block.underflow-gate.description = Das Gegenteil eines Überlauftors. Gibt Materialien nur nach vorne heraus, wenn die Seiten blockiert sind. Kann nicht neben anderen Überlauf- oder Unterlauftoren verwendet werden. block.underflow-gate.description = Das Gegenteil eines Überlauftors. Gibt Materialien nur nach vorne heraus, wenn die Seiten blockiert sind.
block.mass-driver.description = Ein Transportblock mit sehr hoher Reichweite. Sammelt mehrere Materialien und schießt sie zu einem verbundenen Massenbeschleuniger. block.mass-driver.description = Ein Transportblock mit sehr hoher Reichweite. Sammelt mehrere Materialien und schießt sie zu einem verbundenen Massenbeschleuniger.
block.mechanical-pump.description = Eine Pumpe, die keinen Strom benötigt. block.mechanical-pump.description = Eine Pumpe, die keinen Strom benötigt.
block.rotary-pump.description = Eine Pumpe, die Strom verbraucht. block.rotary-pump.description = Eine Pumpe, die Strom verbraucht.

View File

@@ -1590,7 +1590,7 @@ public class UnitTypes implements ContentList{
}}; }};
sei = new UnitType("sei"){{ sei = new UnitType("sei"){{
health = 10200; health = 10500;
armor = 12f; armor = 12f;
speed = 0.73f; speed = 0.73f;

View File

@@ -558,7 +558,6 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
if(ofract < fract) transferLiquid(other, (fract - ofract) * block.liquidCapacity / scaling, liquid); if(ofract < fract) transferLiquid(other, (fract - ofract) * block.liquidCapacity / scaling, liquid);
} }
} }
} }
public boolean canDumpLiquid(Building to, Liquid liquid){ public boolean canDumpLiquid(Building to, Liquid liquid){

View File

@@ -42,7 +42,7 @@ public class DesktopInput extends InputHandler{
/** Selected build request for movement. */ /** Selected build request for movement. */
public @Nullable BuildPlan sreq; public @Nullable BuildPlan sreq;
/** Whether player is currently deleting removal requests. */ /** Whether player is currently deleting removal requests. */
public boolean deleting = false, shouldShoot = false, panning = false; public boolean deleting = false, wasBuilding = true, shouldShoot = false, panning = false;
/** Mouse pan speed. */ /** Mouse pan speed. */
public float panScale = 0.005f, panSpeed = 4.5f, panBoostSpeed = 11f; public float panScale = 0.005f, panSpeed = 4.5f, panBoostSpeed = 11f;
@@ -62,18 +62,19 @@ public class DesktopInput extends InputHandler{
group.fill(t -> { group.fill(t -> {
t.bottom(); t.bottom();
t.visible(() -> { t.visible(() -> {
t.color.a = Mathf.lerpDelta(t.color.a, player.unit().isBuilding() ? 1f : 0f, 0.15f); t.color.a = Mathf.lerpDelta(t.color.a, !isBuilding && !Core.settings.getBool("buildautopause") || player.unit().isBuilding() ? 1f : 0f, 0.15f);
return ui.hudfrag.shown && Core.settings.getBool("hints") && selectRequests.isEmpty() && t.color.a > 0.01f; return ui.hudfrag.shown && Core.settings.getBool("hints") && selectRequests.isEmpty() && t.color.a > 0.01f;
}); });
t.touchable(() -> t.color.a < 0.1f ? Touchable.disabled : Touchable.childrenOnly); t.touchable(() -> t.color.a < 0.1f ? Touchable.disabled : Touchable.childrenOnly);
t.table(Styles.black6, b -> { t.table(Styles.black6, b -> {
b.defaults().left(); b.defaults().left();
b.label(() -> Core.bundle.format(!isBuilding ? "resumebuilding" : "pausebuilding", Core.keybinds.get(Binding.pause_building).key.toString())).style(Styles.outlineLabel); b.label(() -> ((!isBuilding || !wasBuilding) && !Core.settings.getBool("buildautopause") && !player.unit().isBuilding() ?
b.row(); Core.bundle.format("enablebuilding", Core.keybinds.get(Binding.pause_building).key.toString()) :
b.label(() -> Core.bundle.format("cancelbuilding", Core.keybinds.get(Binding.clear_building).key.toString())).style(Styles.outlineLabel); Core.bundle.format(isBuilding ? "pausebuilding" : "resumebuilding", Core.keybinds.get(Binding.pause_building).key.toString()) +
b.row(); "\n" + Core.bundle.format("cancelbuilding", Core.keybinds.get(Binding.clear_building).key.toString()) +
b.label(() -> Core.bundle.format("selectschematic", Core.keybinds.get(Binding.schematic_select).key.toString())).style(Styles.outlineLabel); "\n" + Core.bundle.format("selectschematic", Core.keybinds.get(Binding.schematic_select).key.toString())
)).style(Styles.outlineLabel);
}).margin(10f); }).margin(10f);
}); });
@@ -454,6 +455,7 @@ public class DesktopInput extends InputHandler{
buildWasAutoPaused = false; buildWasAutoPaused = false;
if(isBuilding){ if(isBuilding){
wasBuilding = player.unit().isBuilding();
player.shooting = false; player.shooting = false;
} }
} }
@@ -561,6 +563,7 @@ public class DesktopInput extends InputHandler{
} }
mode = none; mode = none;
wasBuilding = true;
} }
if(Core.input.keyTap(Binding.toggle_block_status)){ if(Core.input.keyTap(Binding.toggle_block_status)){

View File

@@ -23,7 +23,7 @@ import java.util.regex.*;
public class Scripts implements Disposable{ public class Scripts implements Disposable{
private final Seq<String> blacklist = Seq.with(".net.", "java.net", "files", "reflect", "javax", "rhino", "file", "channels", "jdk", private final Seq<String> blacklist = Seq.with(".net.", "java.net", "files", "reflect", "javax", "rhino", "file", "channels", "jdk",
"runtime", "util.os", "rmi", "security", "org.", "sun.", "beans", "sql", "http", "exec", "compiler", "process", "system", "runtime", "util.os", "rmi", "security", "org.", "sun.", "beans", "sql", "http", "exec", "compiler", "process", "system",
".awt", "socket", "classloader", "oracle", "invoke", "java.util.function", "java.util.stream", "org.", "arc.net"); ".awt", "socket", "classloader", "oracle", "invoke", "java.util.function", "java.util.stream", "org.");
private final Seq<String> whitelist = Seq.with("mindustry.net", "netserver", "netclient", "com.sun.proxy.$proxy", "mindustry.gen.", "mindustry.logic.", "mindustry.async.", "saveio", "systemcursor"); private final Seq<String> whitelist = Seq.with("mindustry.net", "netserver", "netclient", "com.sun.proxy.$proxy", "mindustry.gen.", "mindustry.logic.", "mindustry.async.", "saveio", "systemcursor");
private final Context context; private final Context context;
private final Scriptable scope; private final Scriptable scope;
@@ -57,7 +57,7 @@ public class Scripts implements Disposable{
public String runConsole(String text){ public String runConsole(String text){
try{ try{
Object o = context.evaluateString(scope, text, "console.js", 1, null); Object o = context.evaluateString(scope, text, "console.js", 1, null);
if(o instanceof NativeJavaObject) o = ((NativeJavaObject)o).unwrap(); if(o instanceof NativeJavaObject n) o = n.unwrap();
if(o instanceof Undefined) o = "undefined"; if(o instanceof Undefined) o = "undefined";
return String.valueOf(o); return String.valueOf(o);
}catch(Throwable t){ }catch(Throwable t){

View File

@@ -225,6 +225,7 @@ public class UnitType extends UnlockableContent{
Unit inst = constructor.get(); Unit inst = constructor.get();
stats.add(Stat.health, health); stats.add(Stat.health, health);
stats.add(Stat.armor, armor);
stats.add(Stat.speed, speed); stats.add(Stat.speed, speed);
stats.add(Stat.itemCapacity, itemCapacity); stats.add(Stat.itemCapacity, itemCapacity);
stats.add(Stat.range, (int)(maxRange / tilesize), StatUnit.blocks); stats.add(Stat.range, (int)(maxRange / tilesize), StatUnit.blocks);

View File

@@ -77,7 +77,6 @@ public class ModsDialog extends BaseDialog{
browser.cont.pane(tablebrow -> { browser.cont.pane(tablebrow -> {
tablebrow.margin(10f).top(); tablebrow.margin(10f).top();
browserTable = tablebrow; browserTable = tablebrow;
rebuildBrowser();
}).get().setScrollingDisabled(true, false); }).get().setScrollingDisabled(true, false);
browser.addCloseButton(); browser.addCloseButton();
@@ -155,7 +154,7 @@ public class ModsDialog extends BaseDialog{
} }
}); });
}, error -> Core.app.post(() -> ui.showException(error))); }, error -> Core.app.post(() -> modError(error)));
}else{ }else{
listener.get(modList); listener.get(modList);
} }
@@ -508,6 +507,7 @@ public class ModsDialog extends BaseDialog{
} }
private String trimText(String text){ private String trimText(String text){
if(text == null) return "";
if(text.contains("\n")){ if(text.contains("\n")){
return text.substring(0, text.indexOf("\n")); return text.substring(0, text.indexOf("\n"));
} }

View File

@@ -428,7 +428,7 @@ public class Block extends UnlockableContent{
TextureRegion reg = getRequestRegion(req, list); TextureRegion reg = getRequestRegion(req, list);
Draw.rect(reg, req.drawx(), req.drawy(), !rotate ? 0 : req.rotation * 90); Draw.rect(reg, req.drawx(), req.drawy(), !rotate ? 0 : req.rotation * 90);
if(req.worldContext && player != null && teamRegion.found()){ if(req.worldContext && player != null && teamRegion != null && teamRegion.found()){
if(teamRegions[player.team().id] == teamRegion) Draw.color(player.team().color); if(teamRegions[player.team().id] == teamRegion) Draw.color(player.team().color);
Draw.rect(teamRegions[player.team().id], req.drawx(), req.drawy()); Draw.rect(teamRegions[player.team().id], req.drawx(), req.drawy());
Draw.color(); Draw.color();

View File

@@ -100,6 +100,7 @@ public class UnitFactory extends UnitBlock{
if(plan.unit.unlockedNow()){ if(plan.unit.unlockedNow()){
table.image(plan.unit.icon(Cicon.small)).size(8 * 3).padRight(2).right(); table.image(plan.unit.icon(Cicon.small)).size(8 * 3).padRight(2).right();
table.add(plan.unit.localizedName).left(); table.add(plan.unit.localizedName).left();
table.add(Strings.autoFixed(plan.time / 60f, 1) + " " + Core.bundle.get("unit.seconds")).color(Color.lightGray).padLeft(12).left();
table.row(); table.row();
} }
} }

View File

@@ -7,6 +7,7 @@ import java.util.*;
/** Describes one type of stat for content. */ /** Describes one type of stat for content. */
public enum Stat{ public enum Stat{
health, health,
armor,
size, size,
displaySize, displaySize,
buildTime, buildTime,

View File

@@ -0,0 +1,8 @@
[This is a truncated changelog, see Github for full notes]
- Fixed logic blocks resetting state on map load or connection changes
- Fixed "#" in any logic string breaking instructions
- Fixed crawlers not exploding next to cores
- Fixed certain status effect combinations not triggering damage
- Fixed waves being infinitely skippable when game is paused
- Fixed constructed blocks sometimes having low health on servers'
- Fixed enemy core items not syncing

View File

@@ -1,3 +1,3 @@
org.gradle.daemon=true org.gradle.daemon=true
org.gradle.jvmargs=-Xms256m -Xmx1024m org.gradle.jvmargs=-Xms256m -Xmx1024m
archash=9e22aca9d446e07d5b89e41415ad2d42ad6b249e archash=6cf4a11de0770c3789face7fd32e3adee2b6792d

View File

@@ -27,7 +27,7 @@ import java.util.zip.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
import static org.robovm.apple.foundation.NSPathUtilities.getDocumentsDirectory; import static org.robovm.apple.foundation.NSPathUtilities.getDocumentsDirectory;
//warnings for deprecated functions related to multi-scene windows are not applicable here //warnings for deprecated functions related to multi-window applications are not applicable here
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public class IOSLauncher extends IOSApplication.Delegate{ public class IOSLauncher extends IOSApplication.Delegate{
private boolean forced; private boolean forced;

View File

@@ -59,6 +59,10 @@
"name": "Minty [subzero]", "name": "Minty [subzero]",
"address": ["minty-server.ddns.net"] "address": ["minty-server.ddns.net"]
}, },
{
"name": "CxZx",
"address": ["frfr1.quackhost.uk:20060", "frfr1.quackhost.uk:20185"]
},
{ {
"name": "Korea", "name": "Korea",
"address": ["mindustry.kr"] "address": ["mindustry.kr"]