From f0963ef302ed2de48b126dcf2ccb0fb9bd0994ab Mon Sep 17 00:00:00 2001 From: PloVez <149976670+PloVez@users.noreply.github.com> Date: Mon, 6 Nov 2023 03:09:23 +0300 Subject: [PATCH 01/62] Update bundle_ru.properties (#9244) I've translated the settinG --- core/assets/bundles/bundle_ru.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index 10940b8be9..4485a18f9a 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -1115,7 +1115,7 @@ setting.position.name = Отображать координаты игрока setting.mouseposition.name = Показывать позицию курсора setting.musicvol.name = Громкость музыки setting.atmosphere.name = Отображать атмосферу планеты -setting.drawlight.name = Draw Darkness/Lighting +setting.drawlight.name = Отображать тени/освещение setting.ambientvol.name = Громкость окружения setting.mutemusic.name = Заглушить музыку setting.sfxvol.name = Громкость эффектов From c0ed5b48f7ba2c45c16c8014ffa612aca29e290e Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 6 Nov 2023 08:59:33 -0500 Subject: [PATCH 02/62] Fixed #9247 --- core/src/mindustry/content/Blocks.java | 2 +- core/src/mindustry/maps/generators/BasicGenerator.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index d2d9c3049d..edea297acf 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -570,7 +570,7 @@ public class Blocks{ snowWall = new StaticWall("snow-wall"); duneWall = new StaticWall("dune-wall"){{ - basalt.asFloor().wall = darksandWater.asFloor().wall = darksandTaintedWater.asFloor().wall = this; + hotrock.asFloor().wall = magmarock.asFloor().wall = basalt.asFloor().wall = darksandWater.asFloor().wall = darksandTaintedWater.asFloor().wall = this; attributes.set(Attribute.sand, 2f); }}; diff --git a/core/src/mindustry/maps/generators/BasicGenerator.java b/core/src/mindustry/maps/generators/BasicGenerator.java index e77cdde3e0..0305b1d3b0 100644 --- a/core/src/mindustry/maps/generators/BasicGenerator.java +++ b/core/src/mindustry/maps/generators/BasicGenerator.java @@ -335,7 +335,7 @@ public abstract class BasicGenerator implements WorldGenerator{ ore = tile.overlay(); r.get(tile.x, tile.y); tile.setFloor(floor.asFloor()); - tile.setBlock(block); + if(block != tile.block()) tile.setBlock(block); tile.setOverlay(ore); } } From 884482e9b645917ba6d31c6b90884415571e245f Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 6 Nov 2023 13:29:40 -0500 Subject: [PATCH 03/62] Fixed #9248 --- core/src/mindustry/ai/types/CommandAI.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/ai/types/CommandAI.java b/core/src/mindustry/ai/types/CommandAI.java index a44b5b457c..b7054442a6 100644 --- a/core/src/mindustry/ai/types/CommandAI.java +++ b/core/src/mindustry/ai/types/CommandAI.java @@ -405,8 +405,8 @@ public class CommandAI extends AIController{ } public void commandPosition(Vec2 pos, boolean stopWhenInRange){ - targetPos = pos; - lastTargetPos = pos; + //this is an allocation, but it's relatively rarely called anyway, and outside mutations must be prevented + targetPos = lastTargetPos = pos.cpy(); attackTarget = null; pathId = Vars.controlPath.nextTargetId(); this.stopWhenInRange = stopWhenInRange; From e4eadbbb7f35db3093a0a3d13272bdfbedfaead3 Mon Sep 17 00:00:00 2001 From: buthed010203 Date: Mon, 6 Nov 2023 20:54:58 -0500 Subject: [PATCH 04/62] jlfhuyksft (#9251) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c91419525c..4ad56f59ff 100644 --- a/build.gradle +++ b/build.gradle @@ -413,7 +413,7 @@ project(":annotations"){ dependencies{ implementation 'com.squareup:javapoet:1.12.1' - implementation "com.github.Anuken.Arc:arc-core:$arcHash" + implementation arcModule("arc-core") } } From d53ac76461028eed7602b6929f6a17e5880e6b18 Mon Sep 17 00:00:00 2001 From: KotMilkMeoWtwo <88706776+KotMilkMeoWtwo@users.noreply.github.com> Date: Wed, 8 Nov 2023 00:13:50 +0300 Subject: [PATCH 05/62] Update servers_v7.json (#9243) I changed the host ip. --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index c482219b76..6f2b273219 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -69,7 +69,7 @@ }, { "name": "KMWStudios", - "address": ["46.151.26.232:1024", "46.151.26.232:2000", "46.151.26.232:3000", "46.151.26.232:4000", "46.151.26.232:6000", "46.151.26.232:7000", "46.151.26.232:8000"] + "address": ["x.kmwstuios.xyz:9000", "x.kmwstuios.xyz:9002", "x.kmwstuios.xyz:9003", "x.kmwstuios.xyz:9004", "x.kmwstuios.xyz:9005", "x.kmwstuios.xyz:9006", "x.kmwstuios.xyz:9007"] }, { "name": "XCore", From 8f97625fa1544c38c500e82e5f26af4e9ac78d0f Mon Sep 17 00:00:00 2001 From: TheRadioactiveBanana <89061718+TheRadioactiveBanana@users.noreply.github.com> Date: Wed, 8 Nov 2023 08:11:13 +0530 Subject: [PATCH 06/62] Eradication Mindustry IP change (#9241) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 6f2b273219..61112f314c 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -125,7 +125,7 @@ }, { "name": "Eradication Mindustry", - "address": ["eradicationmindustry.mindustry.me:6569", "eradicationmindustry.mindustry.me:9547", "eradicationmindustry.mindustry.me:6572", "eradicationmindustry.mindustry.me:6570", "eradicationmindustry.mindustry.me:6571", "eradicationmindustry.mindustry.me:6574", "eradicationmindustry.mindustry.me:6573", "eradicationmindustry.mindustry.me:6568", "eradicationmindustry.mindustry.me:6677", "eradicationmindustry.mindustry.me:6678", "eradicationmindustry.mindustry.me:6675"] + "address": ["140.238.246.78:6569", "140.238.246.78:9547", "140.238.246.78:6572", "140.238.246.78:6570", "140.238.246.78:6571", "140.238.246.78:6574", "140.238.246.78:6573", "140.238.246.78:6568", "140.238.246.78:6677", "140.238.246.78:6678", "140.238.246.78:6675", "130.61.22.183:6573", "130.61.22.183:6599", "130.61.22.183:6774"] }, { "name": "Conservatory", From 5c50356fb226767a9b55db5402930c6dc109c348 Mon Sep 17 00:00:00 2001 From: The1Crux <134880334+The1Crux@users.noreply.github.com> Date: Tue, 7 Nov 2023 23:38:53 -0400 Subject: [PATCH 07/62] Update servers_v7.json (#9255) Crux's Revelations servers addition --- servers_v7.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/servers_v7.json b/servers_v7.json index 61112f314c..b2575ac75a 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -3,6 +3,10 @@ "name": "meiqiuMDT", "address": ["cn1.plush.run:10001","211.101.236.94:10000","bj-1.lcf.icu:10240","play.simpfun.cn:14523"] }, + { + "name": "Crux's Revelations" + "Address": ["fsn1.bbn.one:52397","fsn1.bbn.one:58375","de-free-01.hosts.optikservers.com:32212","fsn1.bbn.one:49840","de-free-01.hosts.optikservers.com:30449"] + } { "name": "CMS", "address": ["195.2.84.144"] From 498bf079ec152dae273cd1cff3acfa4a160d064b Mon Sep 17 00:00:00 2001 From: Gerald Elder-Vass <47088217+GeraldEV@users.noreply.github.com> Date: Wed, 8 Nov 2023 03:44:22 +0000 Subject: [PATCH 08/62] Move Surge Alloy in ErekirTechTree to the correct position (#9253) Surge Alloy can be first obtained on the "Ravine" map. Thorium can be first obtained on the "Caldera" map. The "Ravine" map must be unlocked and completed before the "Caldera" map can be accessed. Since Surge Alloy isn't required to produce Thorium (and vice versa), they should appear at the same level of the tech tree, under Tungsten. Signed-off-by: Gerald Elder-Vass --- core/src/mindustry/content/ErekirTechTree.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/content/ErekirTechTree.java b/core/src/mindustry/content/ErekirTechTree.java index 89f128ae72..6c4571a43a 100644 --- a/core/src/mindustry/content/ErekirTechTree.java +++ b/core/src/mindustry/content/ErekirTechTree.java @@ -447,11 +447,11 @@ public class ErekirTechTree{ //nodeProduce(Liquids.gallium, () -> {}); }); + }); - nodeProduce(Items.surgeAlloy, () -> { - nodeProduce(Items.phaseFabric, () -> { + nodeProduce(Items.surgeAlloy, () -> { + nodeProduce(Items.phaseFabric, () -> { - }); }); }); }); From e7a0d0589538b25a1fc2244837b4605565e00341 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 8 Nov 2023 08:47:40 -0500 Subject: [PATCH 09/62] Update servers_v7.json --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index b2575ac75a..48c80a69e2 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -129,7 +129,7 @@ }, { "name": "Eradication Mindustry", - "address": ["140.238.246.78:6569", "140.238.246.78:9547", "140.238.246.78:6572", "140.238.246.78:6570", "140.238.246.78:6571", "140.238.246.78:6574", "140.238.246.78:6573", "140.238.246.78:6568", "140.238.246.78:6677", "140.238.246.78:6678", "140.238.246.78:6675", "130.61.22.183:6573", "130.61.22.183:6599", "130.61.22.183:6774"] + "address": ["eradicationmindustry.mindustry.me:6569", "eradicationmindustry.mindustry.me:9547", "eradicationmindustry.mindustry.me:6572", "eradicationmindustry.mindustry.me:6570", "eradicationmindustry.mindustry.me:6571", "eradicationmindustry.mindustry.me:6574", "eradicationmindustry.mindustry.me:6573", "eradicationmindustry.mindustry.me:6568", "eradicationmindustry.mindustry.me:6677", "eradicationmindustry.mindustry.me:6678", "eradicationmindustry.mindustry.me:6675"] }, { "name": "Conservatory", From afc97ebeda954edc8371185eb93f7f71238cdd03 Mon Sep 17 00:00:00 2001 From: StalkerBaran <120944331+StalkerBaran@users.noreply.github.com> Date: Wed, 8 Nov 2023 20:56:12 +0700 Subject: [PATCH 10/62] Update servers_v7.json (#9256) Update "MeowIsland" IP servers (Dont ask about "minecraft" in IP names, I using host for minecraft and its working on mindustry(no jokes plz, I know... its stupid... but its working)) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 48c80a69e2..530f8b9510 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -222,7 +222,7 @@ }, { "name": "MeowIsland", - "address": ["n1.mindustry.me:6590", "n1.mindustry.me:6592", "n1.mindustry.me:6595"] + "address": ["nexus.minecraft.rent:25598", "nexus.minecraft.rent:25596", "jupiter.minecraft.rent:25651"] }, { "name": "3MIDustry", From 7f805f171222756c814594168ece77ab19c2bd14 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 8 Nov 2023 09:02:20 -0500 Subject: [PATCH 11/62] Fixed #9257 --- .../world/blocks/distribution/ItemBridge.java | 13 ++++++++++--- gradle.properties | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/core/src/mindustry/world/blocks/distribution/ItemBridge.java b/core/src/mindustry/world/blocks/distribution/ItemBridge.java index beb3e79d02..9bb3d5fa66 100644 --- a/core/src/mindustry/world/blocks/distribution/ItemBridge.java +++ b/core/src/mindustry/world/blocks/distribution/ItemBridge.java @@ -418,14 +418,21 @@ public class ItemBridge extends Block{ checkAccept(source, world.tile(link)); } - protected boolean checkAccept(Building source, Tile other){ + protected boolean checkAccept(Building source, Tile link){ if(tile == null || linked(source)) return true; - if(linkValid(tile, other)){ - int rel = relativeTo(other); + if(linkValid(tile, link)){ + int rel = relativeTo(link); var facing = Edges.getFacingEdge(source, this); int rel2 = facing == null ? -1 : relativeTo(facing); + for(int j = 0; j < incoming.size; j++){ + int v = incoming.items[j]; + if(relativeTo(Point2.x(v), Point2.y(v)) == rel2){ + return false; + } + } + return rel != rel2; } diff --git a/gradle.properties b/gradle.properties index a54f280cb0..090150dba9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,4 +25,4 @@ org.gradle.caching=true #used for slow jitpack builds; TODO see if this actually works org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 -archash=1906938dea +archash=e2fdbab477 From 66b8a6f93979de8ced295c2d3d91a18c6dd671c2 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 8 Nov 2023 10:12:35 -0500 Subject: [PATCH 12/62] Reverted fix for #9257 --- core/src/mindustry/world/blocks/distribution/ItemBridge.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/distribution/ItemBridge.java b/core/src/mindustry/world/blocks/distribution/ItemBridge.java index 9bb3d5fa66..8688ae7889 100644 --- a/core/src/mindustry/world/blocks/distribution/ItemBridge.java +++ b/core/src/mindustry/world/blocks/distribution/ItemBridge.java @@ -426,12 +426,14 @@ public class ItemBridge extends Block{ var facing = Edges.getFacingEdge(source, this); int rel2 = facing == null ? -1 : relativeTo(facing); + //this is a bug, but it is kept for compatibility, see: https://github.com/Anuken/Mindustry/issues/9257#issuecomment-1801998747 + /* for(int j = 0; j < incoming.size; j++){ int v = incoming.items[j]; if(relativeTo(Point2.x(v), Point2.y(v)) == rel2){ return false; } - } + }*/ return rel != rel2; } From 0da4f763b37c718706d7bc8f1082d058321e19a0 Mon Sep 17 00:00:00 2001 From: KotMilkMeoWtwo <88706776+KotMilkMeoWtwo@users.noreply.github.com> Date: Thu, 9 Nov 2023 01:18:30 +0300 Subject: [PATCH 13/62] Update servers_v7.json (#9258) I'm sorry, I made a mistake in the domain --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 530f8b9510..7fbbf964a7 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -73,7 +73,7 @@ }, { "name": "KMWStudios", - "address": ["x.kmwstuios.xyz:9000", "x.kmwstuios.xyz:9002", "x.kmwstuios.xyz:9003", "x.kmwstuios.xyz:9004", "x.kmwstuios.xyz:9005", "x.kmwstuios.xyz:9006", "x.kmwstuios.xyz:9007"] + "address": ["x.kmwstudios.xyz:9000", "x.kmwstudios.xyz:9002", "x.kmwstudios.xyz:9003", "x.kmwstudios.xyz:9004", "x.kmwstudios.xyz:9005", "x.kmwstudios.xyz:9006", "x.kmwstudios.xyz:9007"] }, { "name": "XCore", From 9bf23bfcc85ecf350ec41c4f33c7cd837e4909d4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 10 Nov 2023 02:00:15 -0500 Subject: [PATCH 14/62] Fixed #9260 --- core/src/mindustry/service/GameService.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/core/src/mindustry/service/GameService.java b/core/src/mindustry/service/GameService.java index 79d9aec342..87e2e2ee1b 100644 --- a/core/src/mindustry/service/GameService.java +++ b/core/src/mindustry/service/GameService.java @@ -111,16 +111,10 @@ public class GameService{ completeSerpulo.complete(); } - if(mods.list().size > 0){ + if(mods != null && mods.list().size > 0){ installMod.complete(); } - Events.on(ClientLoadEvent.class, e -> { - if(mods.list().size > 0){ - installMod.complete(); - } - }); - if(Core.bundle.get("yes").equals("router")){ routerLanguage.complete(); } @@ -459,7 +453,8 @@ public class GameService{ //check unlocked stuff on load as well Events.on(ResearchEvent.class, e -> checkUnlocks.run()); Events.on(UnlockEvent.class, e -> checkUnlocks.run()); - Events.on(ClientLoadEvent.class, e -> checkUnlocks.run()); + + checkUnlocks.run(); Events.on(WinEvent.class, e -> { if(state.rules.pvp){ From 71beeae32a965ca9d3301a699a13979e6dbbd380 Mon Sep 17 00:00:00 2001 From: XuwenMeimei <127962617+XuwenMeimei@users.noreply.github.com> Date: Sat, 11 Nov 2023 14:46:18 +0800 Subject: [PATCH 15/62] Update servers_v7.json (#9262) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 7fbbf964a7..0f7619dcc9 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -250,7 +250,7 @@ }, { "name": "XuwenHost", - "address": ["pi.xiyuchao.love:6567","mdt.xuwenblock.cn:6567"] + "address": ["mdt.xuwenblock.cn:6568","mdt.xuwenblock.cn:6567"] }, { "name": "MineCore", From fbd0675f750a75107609c5b334c82e95a9021b54 Mon Sep 17 00:00:00 2001 From: OSP <76648940+osp54@users.noreply.github.com> Date: Sat, 11 Nov 2023 17:36:22 +0300 Subject: [PATCH 16/62] =?UTF-8?q?someone=20forgot=20to=20place=20comma=20?= =?UTF-8?q?=F0=9F=92=80=20(#9263)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- servers_v7.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/servers_v7.json b/servers_v7.json index 0f7619dcc9..88ba677be5 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -4,9 +4,9 @@ "address": ["cn1.plush.run:10001","211.101.236.94:10000","bj-1.lcf.icu:10240","play.simpfun.cn:14523"] }, { - "name": "Crux's Revelations" + "name": "Crux's Revelations", "Address": ["fsn1.bbn.one:52397","fsn1.bbn.one:58375","de-free-01.hosts.optikservers.com:32212","fsn1.bbn.one:49840","de-free-01.hosts.optikservers.com:30449"] - } + }, { "name": "CMS", "address": ["195.2.84.144"] From c4dc095adb062d117db40041c2e33c10072366d6 Mon Sep 17 00:00:00 2001 From: ApsZoldat <128713348+ApsZoldat@users.noreply.github.com> Date: Sat, 11 Nov 2023 17:55:01 +0300 Subject: [PATCH 17/62] Minor ban/unban instruction and join dialog changes (#9249) * Make PlacementFragment update after world processor's ban/unban instructions, add buttons in community server list to add server as remote * Small world processor ban/unban optimization --- core/src/mindustry/logic/LExecutor.java | 5 +- core/src/mindustry/ui/dialogs/JoinDialog.java | 86 +++++++++++++------ .../ui/fragments/PlacementFragment.java | 2 +- 3 files changed, 62 insertions(+), 31 deletions(-) diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index bd06b9eefd..fea21b936b 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -1459,7 +1459,8 @@ public class LExecutor{ case ban -> { Object cont = exec.obj(value); if(cont instanceof Block b){ - state.rules.bannedBlocks.add(b); + // Rebuild PlacementFragment if anything has changed + if(state.rules.bannedBlocks.add(b) && !headless) ui.hudfrag.blockfrag.rebuild(); }else if(cont instanceof UnitType u){ state.rules.bannedUnits.add(u); } @@ -1467,7 +1468,7 @@ public class LExecutor{ case unban -> { Object cont = exec.obj(value); if(cont instanceof Block b){ - state.rules.bannedBlocks.remove(b); + if(state.rules.bannedBlocks.remove(b) && !headless) ui.hudfrag.blockfrag.rebuild(); }else if(cont instanceof UnitType u){ state.rules.bannedUnits.remove(u); } diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index b6b2476761..3092db179f 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -247,29 +247,12 @@ public class JoinDialog extends BaseDialog{ void setupServer(Server server, Host host){ server.lastHost = host; server.content.clear(); - buildServer(host, server.content); + buildServer(host, server.content, false); } - void buildServer(Host host, Table content){ + void buildServer(Host host, Table content, boolean inner){ content.top().left(); - String versionString; - - if(host.version == -1){ - versionString = Core.bundle.format("server.version", Core.bundle.get("server.custombuild"), ""); - }else if(host.version == 0){ - versionString = Core.bundle.get("server.outdated"); - }else if(host.version < Version.build && Version.build != -1){ - versionString = Core.bundle.get("server.outdated") + "\n" + - Core.bundle.format("server.version", host.version, ""); - }else if(host.version > Version.build && Version.build != -1){ - versionString = Core.bundle.get("server.outdated.client") + "\n" + - Core.bundle.format("server.version", host.version, ""); - }else if(host.version == Version.build && Version.type.equals(host.versionType)){ - //not important - versionString = ""; - }else{ - versionString = Core.bundle.format("server.version", host.version, host.versionType); - } + String versionString = getVersionString(host); float twidth = targetWidth() - 40f; @@ -277,12 +260,14 @@ public class JoinDialog extends BaseDialog{ Color color = Pal.gray; - content.table(Tex.whiteui, t -> { - t.left(); - t.setColor(color); + if(inner){ + content.table(Tex.whiteui, t -> { + t.left(); + t.setColor(color); - t.add(host.name + " " + versionString).style(Styles.outlineLabel).padLeft(10f).width(twidth).left().ellipsis(true); - }).growX().height(36f).row(); + t.add(host.name + " " + versionString).style(Styles.outlineLabel).padLeft(10f).width(twidth).left().ellipsis(true); + }).growX().height(36f).row(); + } content.table(Tex.whitePane, t -> { t.top().left(); @@ -485,11 +470,16 @@ public class JoinDialog extends BaseDialog{ void addCommunityHost(Host host, Table container){ global.background(null); + String versionString = getVersionString(host); float w = targetWidth(); container.left().top(); - container.button(b -> buildServer(host, b), style, () -> { + Button[] button = {null}; + + button[0] = container.button(b -> {}, style, () -> { + if(button[0].childrenPressed()) return; + Events.fire(new ClientPreConnectEvent(host)); if(!Core.settings.getBool("server-disclaimer", false)){ ui.showCustomConfirm("@warning", "@servers.disclaimer", "@ok", "@back", () -> { @@ -501,7 +491,28 @@ public class JoinDialog extends BaseDialog{ }else{ safeConnect(host.address, host.port, host.version); } - }).width(w).padBottom(7).padRight(4f).top().left().growY().uniformY(); + }).width(w).padBottom(7).padRight(4f).top().left().growY().uniformY().get(); + + Table inner = new Table(Tex.whiteui); + inner.setColor(Pal.gray); + + button[0].clearChildren(); + button[0].add(inner).growX(); + + inner.add(host.name + " " + versionString).left().padLeft(10f).wrap().style(Styles.outlineLabel).growX(); + + inner.button(Icon.add, Styles.emptyi, () -> { + Server server = new Server(); + server.setIP(host.address + ":" + host.port); + servers.add(server); + saveServers(); + setupRemote(); + refreshRemote(); + }).margin(3f).pad(8f).padRight(4f).top().right(); + + button[0].row(); + + buildServer(host, button[0].table(t -> {}).grow().get(), false); if((container.getChildren().size) % columns() == 0){ container.row(); @@ -532,7 +543,7 @@ public class JoinDialog extends BaseDialog{ local.row(); } - local.button(b -> buildServer(host, b), style, () -> { + local.button(b -> buildServer(host, b, true), style, () -> { Events.fire(new ClientPreConnectEvent(host)); safeConnect(host.address, host.port, host.version); }).width(w).top().left().growY(); @@ -641,6 +652,25 @@ public class JoinDialog extends BaseDialog{ Core.settings.putJson("servers", Server.class, servers); } + private String getVersionString(Host host){ + if(host.version == -1){ + return Core.bundle.format("server.version", Core.bundle.get("server.custombuild"), ""); + }else if(host.version == 0){ + return Core.bundle.get("server.outdated"); + }else if(host.version < Version.build && Version.build != -1){ + return Core.bundle.get("server.outdated") + "\n" + + Core.bundle.format("server.version", host.version, ""); + }else if(host.version > Version.build && Version.build != -1){ + return Core.bundle.get("server.outdated.client") + "\n" + + Core.bundle.format("server.version", host.version, ""); + }else if(host.version == Version.build && Version.type.equals(host.versionType)){ + //not important + return ""; + }else{ + return Core.bundle.format("server.version", host.version, host.versionType); + } + } + public static class Server{ public String ip; public int port; diff --git a/core/src/mindustry/ui/fragments/PlacementFragment.java b/core/src/mindustry/ui/fragments/PlacementFragment.java index ecdb326366..2c3e6ad524 100644 --- a/core/src/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/mindustry/ui/fragments/PlacementFragment.java @@ -113,7 +113,7 @@ public class PlacementFragment{ return hover; } - void rebuild(){ + public void rebuild(){ //category does not change on rebuild anymore, only on new world load Group group = toggler.parent; int index = toggler.getZIndex(); From e317a0da9e1f9152bf380fb995205790eaea6fd2 Mon Sep 17 00:00:00 2001 From: "Arksource (ShardDustry [ES]) Owner" <93954648+ArkSourcer@users.noreply.github.com> Date: Sat, 11 Nov 2023 21:48:15 -0400 Subject: [PATCH 18/62] Agua part 2 (#9266) * Funny change * Update servers_v7.json * Update bundle_es.properties Traductions for the bundle_es By ArkSource * Update servers_v7.json * Agua prt 2 --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 88ba677be5..38cb13eb85 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -17,7 +17,7 @@ }, { "name": "ShardDustry", - "address": ["94.130.132.149:35689", "78.46.39.20:5552","45.158.9.198:30529"] + "address": ["94.130.132.149:35689", "45.158.9.198:31290","45.158.9.198:30529"] }, { "name": "Tamazia", From 8282a1e1bb0783ee222089bae7279d4030298991 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 12 Nov 2023 09:49:07 -0500 Subject: [PATCH 19/62] Fixed #9269 --- core/src/mindustry/service/GameService.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/service/GameService.java b/core/src/mindustry/service/GameService.java index 87e2e2ee1b..7b31d10711 100644 --- a/core/src/mindustry/service/GameService.java +++ b/core/src/mindustry/service/GameService.java @@ -10,7 +10,6 @@ import mindustry.game.SectorInfo.*; import mindustry.gen.*; import mindustry.type.*; import mindustry.world.*; -import mindustry.world.blocks.defense.*; import mindustry.world.blocks.defense.Wall.*; import mindustry.world.blocks.defense.turrets.Turret.*; import mindustry.world.blocks.distribution.*; @@ -225,8 +224,8 @@ public class GameService{ } } - if(e.tile.block() instanceof MendProjector || e.tile.block() instanceof RegenProjector) buildMendProjector.complete(); - if(e.tile.block() instanceof OverdriveProjector) buildOverdriveProjector.complete(); + if(e.tile.block() == Blocks.mendProjector) buildMendProjector.complete(); + if(e.tile.block() == Blocks.overdriveProjector) buildOverdriveProjector.complete(); if(e.tile.block() == Blocks.waterExtractor){ if(e.tile.getLinkedTiles(tmpTiles).contains(t -> t.floor().liquidDrop == Liquids.water)){ From 4c15e0e0fccdd6a7f1f2424b5ef1e75ec81431e9 Mon Sep 17 00:00:00 2001 From: Hahaa13 <108379326+Hahaa13@users.noreply.github.com> Date: Sun, 12 Nov 2023 14:49:20 +0000 Subject: [PATCH 20/62] Good Bye VnDustry (#9268) * Update servers_v7.json * Update servers_v7.json --- servers_v7.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/servers_v7.json b/servers_v7.json index 38cb13eb85..7b1354dfcc 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -171,10 +171,6 @@ "name": "Router Pi", "address": ["a55c81b7c4d6e6d604651a93f8af5cd83.asuscomm.com", "a55c81b7c4d6e6d604651a93f8af5cd83.asuscomm.com:6568", "a55c81b7c4d6e6d604651a93f8af5cd83.asuscomm.com:6569", "a55c81b7c4d6e6d604651a93f8af5cd83.asuscomm.com:6570", "a55c81b7c4d6e6d604651a93f8af5cd83.asuscomm.com:6571", "a55c81b7c4d6e6d604651a93f8af5cd83.asuscomm.com:6572", "a55c81b7c4d6e6d604651a93f8af5cd83.asuscomm.com:6573", "a55c81b7c4d6e6d604651a93f8af5cd83.asuscomm.com:6574"] }, - { - "name": "Vndustry", - "address": ["185.128.227.11", "27.50.72.82:25334"] - }, { "name": "Anana&ShenYv", "address": ["mdtleague.top"] From d2595543f9a2dab344e13c68811e43289f4667c8 Mon Sep 17 00:00:00 2001 From: Phinner <62483793+phinner@users.noreply.github.com> Date: Mon, 13 Nov 2023 02:19:45 +0000 Subject: [PATCH 21/62] Update French translations (#9140) * chore: Synchronize lines * chore: Remove empty space in bundle.properties * chore: Translate to baguette * Fixes for baguette language translations (#3) * fix fpr translate to bagette language --------- Co-authored-by: Phinner <62483793+phinner@users.noreply.github.com> * chore: Smolchange * chore: Apply @VizardAlpha suggestions --------- Co-authored-by: ZetaMap <56844734+ZetaMap@users.noreply.github.com> --- core/assets/bundles/bundle.properties | 2 +- core/assets/bundles/bundle_fr.properties | 187 ++++++++++++----------- 2 files changed, 95 insertions(+), 94 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 044d48dcaf..f9d668db70 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1081,7 +1081,7 @@ setting.backgroundpause.name = Pause In Background setting.buildautopause.name = Auto-Pause Building setting.doubletapmine.name = Double-Tap to Mine setting.commandmodehold.name = Hold For Command Mode -setting.distinctcontrolgroups.name = Limit One Control Group Per Unit +setting.distinctcontrolgroups.name = Limit One Control Group Per Unit setting.modcrashdisable.name = Disable Mods On Startup Crash setting.animatedwater.name = Animated Surfaces setting.animatedshields.name = Animated Shields diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index 6a2f847786..6c4629d828 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -35,7 +35,7 @@ load.mod = Mods load.scripts = Scripts be.update = Une nouvelle version expérimentale est disponible: -be.update.confirm = Télécharger et Redémarrer le jeu maintenant ? +be.update.confirm = Télécharger et redémarrer le jeu maintenant ? be.updating = Mise à jour en cours... be.ignore = Ignorer be.noupdates = Aucune mise à jour trouvée. @@ -72,7 +72,7 @@ schematic.saved = Schéma enregistré. schematic.delete.confirm = Ce schéma sera supprimé définitivement ! schematic.edit = Editer Schéma schematic.info = {0}x{1}, {2} blocs -schematic.disabled = [scarlet]Schémas désactivés ![]\nVous n'êtes pas autorisés à utiliser des schémas sur cette [accent]carte[] ou dans ce [accent]serveur. +schematic.disabled = [scarlet]Schémas désactivés ![]\nVous n'êtes pas autorisé à utiliser des schémas sur cette [accent]carte[] ou dans ce [accent]serveur. schematic.tags = Étiquettes : schematic.edittags = Éditer les étiquettes schematic.addtag = Ajouter une étiquette @@ -129,7 +129,7 @@ committingchanges = Validation des modifications done = Terminé feature.unsupported = Votre appareil ne prend pas en charge cette fonctionnalité. -mods.initfailed = [red]⚠[] L'instance précédente de Mindustry n’a pas pu s’initialiser. Cela a probablement été causé par des mods.\n\nPour éviter une boucle de crash, [red]tous les mods ont été désactivés.[] +mods.initfailed = [red]⚠[] L'instance précédente de Mindustry n’a pas pu s’initialiser. Cela a probablement été causé par des mods.\n\nPour éviter une boucle de plantage, [red]tous les mods ont été désactivés.[] mods = Mods mods.none = [lightgray]Aucun Mod trouvé ! mods.guide = Guide de Modding @@ -245,7 +245,7 @@ hosts.none = [lightgray]Aucune partie en LAN trouvée ! host.invalid = [scarlet]Impossible de se connecter à l'hôte. servers.local = Serveurs locaux -servers.local.steam = Jeux Libres & Serveurs Locaux +servers.local.steam = Parties Libres & Serveurs Locaux servers.remote = Serveurs distants servers.global = Serveurs communautaires @@ -291,7 +291,7 @@ confirmunban = Êtes-vous sûr de vouloir annuler le ban de ce joueur ? confirmadmin = Êtes-vous sûr de vouloir faire de "{0}[white]" un administrateur ? confirmunadmin = Êtes-vous sûr de vouloir supprimer le statut d'administrateur de "{0}[white]" ? votekick.reason = Raison du vote d'expulsion -votekick.reason.message = Êtes-vous sûr de vouloir voter l'expulsion de "{0}[white]"?Si oui, merci d'entrer la raison : +votekick.reason.message = Êtes-vous sûr de vouloir voter l'expulsion de "{0}[white]"?\nSi oui, merci d'entrer la raison : joingame.title = Rejoindre une partie joingame.ip = Adresse IP : disconnect = Déconnecté. @@ -354,23 +354,23 @@ command.rebuild = Reconstruire command.assist = Assister command.move = Bouger command.boost = Booster -command.enterPayload = Enter Payload Block -command.loadUnits = Load Units -command.loadBlocks = Load Blocks -command.unloadPayload = Unload Payload -stance.stop = Cancel Orders -stance.shoot = Stance: Shoot -stance.holdfire = Stance: Hold Fire -stance.pursuetarget = Stance: Pursue Target -stance.patrol = Stance: Patrol Path -stance.ram = Stance: Ram\n[lightgray]Straight line movement, no pathfinding +command.enterPayload = Entrer dans Bloc de Transport +command.loadUnits = Transporter Unités +command.loadBlocks = Transporter Blocs +command.unloadPayload = Poser Chargement +stance.stop = Annuler les Ordres +stance.shoot = Ordre: Tirer +stance.holdfire = Ordre: Ne pas Tirer +stance.pursuetarget = Ordre: Poursuivre Cible +stance.patrol = Ordre: Chemins de Contrôle +stance.ram = Ordre: Charger\n[lightgray]Mouvement en ligne droite, sans détection de chemins openlink = Ouvrir le lien copylink = Copier le lien back = Retour max = Max objective = Objectif de la Carte crash.export = Exporter les rapports de bugs -crash.none = Aucun rapport de bug trouvé. +crash.none = Aucun rapport de bugs trouvé. crash.exported = Rapports de bugs exportés. data.export = Exporter les données data.import = Importer des données @@ -431,7 +431,7 @@ steam.error = Échec d'initialisation des services Steam.\nErreur : {0} editor.planet = Planète : editor.sector = Secteur : editor.seed = Graine : -editor.cliffs = Transformer murs en falaises +editor.cliffs = Transformer les murs en falaises editor.brush = Pinceau editor.openin = Ouvrir dans l'éditeur editor.oregen = Génération de minerai @@ -564,7 +564,7 @@ toolmode.fillerase = Remplir et effacer toolmode.fillerase.description = Efface les blocs\ndu même type. toolmode.drawteams = Dessiner les équipes toolmode.drawteams.description = Change les équipes\nau lieu de blocs. -#unitilisé +#inutilisé toolmode.underliquid = Sous les liquides toolmode.underliquid.description = Dessiner les sols sous les tuiles de liquides. @@ -664,7 +664,7 @@ marker.shapetext.name = Forme de Texte marker.minimap.name = Minicarte marker.shape.name = Forme marker.text.name = Texte -marker.line.name = Line +marker.line.name = Ligne marker.background = Fond marker.outline = Contour @@ -707,7 +707,7 @@ connectfail = [scarlet]Échec de la connexion au serveur : \n\n[accent]{0} error.unreachable = Serveur inaccessible.\nEst-ce que l'adresse est écrite correctement? error.invalidaddress = Adresse invalide. error.timedout = Expiration du délai!\nAssurez-vous que l'ouverture des ports est configurée chez l'hôte, que le serveur est ouvert et que l'adresse est correcte! -error.mismatch = Erreur de paquet :\nPossible incompatibilité de version client/serveur.\nAssurez-vous que l'hôte et vous disposez de la même version de Mindustry ! +error.mismatch = Erreur de paquet :\nPossible incompatibilité de version client/serveur.\nAssurez-vous que l'hôte et vous, disposez de la même version de Mindustry ! error.alreadyconnected = Déjà connecté. error.mapnotfound = Fichier de carte introuvable ! error.io = Erreur de Réseau (I/O) @@ -752,12 +752,12 @@ sector.curlost = Secteur perdu sector.missingresources = [scarlet]Ressources du Noyau insuffisantes ! sector.attacked = Secteur [accent]{0}[white] attaqué ! sector.lost = Secteur [accent]{0}[white] perdu ! -#note: the missing space in the line below is intentional +#note: l'espace manquant dans la ligne ci-dessous est intentionnel sector.captured = Secteur [accent]{0}[white]capturé ! sector.changeicon = Changer l'Icône sector.noswitch.title = Impossible de changer de Secteur sector.noswitch = Vous ne pouvez pas changer de secteur pendant qu’un autre est attaqué.\n\nSecteur: [accent]{0}[] sur [accent]{1}[] -sector.view = Voir le Secteur +sector.view = Voir le secteur threat.low = Faible threat.medium = Normale @@ -873,7 +873,7 @@ settings.graphics = Graphismes settings.cleardata = Effacer les données du jeu... settings.clear.confirm = Êtes-vous sûr de vouloir effacer ces données?\nAucun retour en arrière n'est possible ! settings.clearall.confirm = [scarlet]ATTENTION ![]\nCette action effacera toutes les données, y compris les sauvegardes, les cartes, la progression et la configuration des touches.\nUne fois que vous aurez pressé 'OK', le jeu effacera TOUTES les données et se fermera. -settings.clearsaves.confirm = Êtes-vous sûr de vouloir supprimer toutes vos sauvegardes? +settings.clearsaves.confirm = Êtes-vous sûr de vouloir supprimer toutes vos sauvegardes ? settings.clearsaves = Supprimer les Sauvegardes settings.clearresearch = Supprimer la Recherche settings.clearresearch.confirm = Êtes-vous sûr de vouloir supprimer toutes les recherches de la campagne ? @@ -938,7 +938,7 @@ stat.maxunits = Max d'Unités Actives stat.health = Santé stat.armor = Armure stat.buildtime = Durée de construction -stat.maxconsecutive = Max Consécutif +stat.maxconsecutive = Max consécutif stat.buildcost = Coût de construction stat.inaccuracy = Imprécision stat.shots = Tirs @@ -983,9 +983,9 @@ ability.movelightning = Déplacement éclair ability.shieldarc = Arc de Bouclier ability.suppressionfield = Champ de Suppression de Soins ability.energyfield = Champ d'énergie -ability.energyfield.sametypehealmultiplier = [lightgray]Same Type Healing: [white]{0}% -ability.energyfield.maxtargets = [lightgray]Max Targets: [white]{0} -ability.regen = Regeneration +ability.energyfield.sametypehealmultiplier = [lightgray]Soins des Unités du Même Type: [white]{0}% +ability.energyfield.maxtargets = [lightgray]Cibles Maximales: [white]{0} +ability.regen = Régénération bar.onlycoredeposit = Seul le dépôt de ressources dans le Noyau est autorisé bar.drilltierreq = Meilleure Foreuse Requise @@ -1025,7 +1025,7 @@ bullet.splashdamage = [stat]{0}[lightgray] dégâts de zone ~[stat] {1}[lightgra bullet.incendiary = [stat]incendiaire bullet.homing = [stat]autoguidé bullet.armorpierce = [stat]perceur d'armure -bullet.maxdamagefraction = [stat]{0}%[lightgray] damage limit +bullet.maxdamagefraction = [stat]{0}%[lightgray] limite de dégâts bullet.suppression = [stat]{0} sec[lightgray] suppression de soins ~ [stat]{1}[lightgray] blocs bullet.interval = [stat]{0}/sec[lightgray] Balle secondaire: bullet.frags = [stat]{0}[lightgray]x Balle à fragmentation: @@ -1081,12 +1081,12 @@ setting.backgroundpause.name = Pause en Arrière-plan setting.buildautopause.name = Confirmation avant construction setting.doubletapmine.name = Double-clic pour Miner setting.commandmodehold.name = Retenir pour le Mode « Commande » -setting.distinctcontrolgroups.name = Limit One Control Group Per Unit +setting.distinctcontrolgroups.name = Limiter un groupe de contrôle par unité setting.modcrashdisable.name = Désactiver les mods lors d'un crash au démarrage setting.animatedwater.name = Surfaces Animées setting.animatedshields.name = Boucliers Animés -setting.playerindicators.name = Indicateurs alliés -setting.indicators.name = Indicateurs ennemis +setting.playerindicators.name = Indicateurs d'alliés +setting.indicators.name = Indicateurs d'ennemis setting.autotarget.name = Visée automatique setting.keyboard.name = Contrôles Souris+Clavier setting.touchscreen.name = Commandes d'écran tactile @@ -1117,7 +1117,7 @@ setting.fullscreen.name = Plein Écran setting.borderlesswindow.name = Fenêtré sans bordures setting.borderlesswindow.name.windows = Plein écran sans bordure setting.borderlesswindow.description = Un redémarrage peut être nécessaire pour appliquer les changements. -setting.fps.name = Afficher FPS et Ping +setting.fps.name = Afficher les FPS et le Ping setting.console.name = Activer la Console setting.smoothcamera.name = Lissage de la Caméra setting.vsync.name = Synchronisation Verticale @@ -1127,8 +1127,8 @@ setting.coreitems.name = Afficher les objets du Noyau setting.position.name = Afficher la position du joueur setting.mouseposition.name = Afficher la Position de la Souris setting.musicvol.name = Volume de la Musique -setting.atmosphere.name = Montrer l'Atmosphère de la planète -setting.drawlight.name = Draw Darkness/Lighting +setting.atmosphere.name = Montrer l'Atmosphère des planètes +setting.drawlight.name = Dessiner les Ombres/Lumières setting.ambientvol.name = Volume Ambiant setting.mutemusic.name = Couper la Musique setting.sfxvol.name = Volume des Sons et Effets @@ -1155,7 +1155,7 @@ keybind.title = Paramètres des Touches du Clavier keybinds.mobile = [scarlet]La plupart des touches de clavier ne sont pas fonctionnelles sur mobile. Seuls les mouvements basiques sont supportés. category.general.name = Général category.view.name = Vue -category.command.name = Unit Command +category.command.name = Commandes d'Unité category.multiplayer.name = Multijoueur category.blocks.name = Sélection des blocs placement.blockselectkeys = \n[lightgray]Raccourci : [{0}, @@ -1173,23 +1173,26 @@ keybind.mouse_move.name = Suivre la souris keybind.pan.name = Vue Panoramique keybind.boost.name = Boost keybind.command_mode.name = Mode « Commande » -keybind.command_queue.name = Unit Command Queue -keybind.create_control_group.name = Create Control Group -keybind.cancel_orders.name = Cancel Orders -keybind.unit_stance_shoot.name = Unit Stance: Shoot -keybind.unit_stance_hold_fire.name = Unit Stance: Hold Fire -keybind.unit_stance_pursue_target.name = Unit Stance: Pursue Target -keybind.unit_stance_patrol.name = Unit Stance: Patrol -keybind.unit_stance_ram.name = Unit Stance: Ram -keybind.unit_command_move = Unit Command: Move -keybind.unit_command_repair = Unit Command: Repair -keybind.unit_command_rebuild = Unit Command: Rebuild -keybind.unit_command_assist = Unit Command: Assist -keybind.unit_command_mine = Unit Command: Mine -keybind.unit_command_boost = Unit Command: Boost -keybind.unit_command_load_units = Unit Command: Load Units -keybind.unit_command_load_blocks = Unit Command: Load Blocks -keybind.unit_command_unload_payload = Unit Command: Unload Payload +keybind.command_queue.name = File d'attente des Commandes d'Unités +keybind.create_control_group.name = Créer un Groupe de Contrôle +keybind.cancel_orders.name = Annuler les Ordres + +keybind.unit_stance_shoot.name = Ordre: Tirer +keybind.unit_stance_hold_fire.name = Ordre: Ne pas tirer +keybind.unit_stance_pursue_target.name = Ordre: Poursuivre la cible +keybind.unit_stance_patrol.name = Ordre: Patrouille +keybind.unit_stance_ram.name = Ordre: Charger + +keybind.unit_command_move = Commande: Bouger +keybind.unit_command_repair = Commande: Réparer +keybind.unit_command_rebuild = Commande: Reconstruire +keybind.unit_command_assist = Commande: Assister +keybind.unit_command_mine = Commande: Miner +keybind.unit_command_boost = Commande: Boost +keybind.unit_command_load_units = Commande: Transporter unités +keybind.unit_command_load_blocks = Commande: Transporter blocs +keybind.unit_command_unload_payload = Commande: Poser chargement + keybind.rebuild_select.name = Reconstruire la Zone keybind.schematic_select.name = Sélectionner une Région keybind.schematic_menu.name = Menu des schémas @@ -1222,7 +1225,7 @@ keybind.deselect.name = Désélectionner keybind.pickupCargo.name = Prendre un Chargement keybind.dropCargo.name = Lâcher un Chargement keybind.shoot.name = Tirer -keybind.zoom.name = Zoom +keybind.zoom.name = Zoomer keybind.menu.name = Menu keybind.pause.name = Pause keybind.pause_building.name = Pauser/Reprendre la Construction @@ -1240,9 +1243,9 @@ keybind.chat_history_prev.name = Remonter l'Historique du Tchat keybind.chat_history_next.name = Descendre l'Historique du Tchat keybind.chat_scroll.name = Défilement du Tchat keybind.chat_mode.name = Changer le mode du Tchat -keybind.drop_unit.name = Larguer une unité +keybind.drop_unit.name = Larguer une Unité keybind.zoom_minimap.name = Zoomer la Mini-carte -mode.help.title = Description des modes de jeu +mode.help.title = Description des modes de jeux mode.survival.name = Survie mode.survival.description = Le mode normal. Ressources limitées et vagues automatiques.\n[gray]Requiert des points d'apparition ennemis pour pouvoir jouer à ce mode. mode.sandbox.name = Bac à Sable @@ -1253,12 +1256,12 @@ mode.pvp.description = Lutter contre d'autres joueurs pour gagner !\n[gray]Requi mode.attack.name = Attaque mode.attack.description = Pas forcément de vagues, le but étant de détruire la base ennemie.\n[gray]Requiert un Noyau rouge pour jouer à ce mode. mode.custom = Règles Personnalisées -rules.invaliddata = Invalid clipboard data. -rules.hidebannedblocks = Cacher les blocs bannis. +rules.invaliddata = Données du Presse-Papier Invalides. +rules.hidebannedblocks = Cacher les blocs bannis. rules.infiniteresources = Ressources Infinies -rules.onlydepositcore = Seulement autoriser le Dépôt d'Objets dans le Noyau -rules.derelictrepair = Allow Derelict Block Repair +rules.onlydepositcore = Seulement autoriser le dépôt d'Objets dans le Noyau +rules.derelictrepair = Autoriser la réparation des structures abandonnées rules.reactorexplosions = Explosion des Réacteurs rules.coreincinerates = Incinération des surplus du Noyau rules.disableworldprocessors = Désactiver les Processeurs Globaux @@ -1275,7 +1278,7 @@ rules.rtsmaxsquadsize = Taille Maximale d'une Escouade rules.rtsminattackweight = Poids Minimum d'une Attaque rules.cleanupdeadteams = Détruire les structures des équipes vaincues (JcJ) rules.corecapture = Capture du Noyau lors de sa Destruction -rules.polygoncoreprotection = Protection Polygonale du Noyau +rules.polygoncoreprotection = Protection polygonale du Noyau rules.placerangecheck = Vérification de la Portée de Placement rules.enemyCheat = Ressources infinies pour l'IA (équipe rouge) rules.blockhealthmultiplier = Multiplicateur de Santé des Blocs @@ -1287,9 +1290,9 @@ rules.unitdamagemultiplier = Multiplicateur de Dégât des Unités rules.unitcrashdamagemultiplier = Multiplicateur de Dégât de chute des Unités rules.solarmultiplier = Multiplicateur de l'Efficacité des Panneaux Solaires rules.unitcapvariable = Les Noyaux contribuent à la limite d'Unités actives -rules.unitcap = Limite d'Unités actives de Base -rules.limitarea = Limite de la Zone de Jeu de la Carte -rules.enemycorebuildradius = Périmètre de Non-Construction autour du Noyau ennemi :[lightgray] (blocs) +rules.unitcap = Limite initiale d'Unités actives +rules.limitarea = Limite de la zone de jeu de la Carte +rules.enemycorebuildradius = Périmètre Non-Constructible autour du Noyau ennemi :[lightgray] (blocs) rules.wavespacing = Temps entre les Vagues :[lightgray] (sec) rules.initialwavespacing = Temps de Vague Initial :[lightgray] (sec) rules.buildcostmultiplier = Multiplicateur du prix de construction @@ -1297,7 +1300,7 @@ rules.buildspeedmultiplier = Multiplicateur du temps de construction rules.deconstructrefundmultiplier = Multiplicateur du remboursement lors de la déconstruction rules.waitForWaveToEnd = Les Vagues attendent la mort des ennemis rules.wavelimit = La Partie termine après la Vague -rules.dropzoneradius = Rayon d'Apparition des ennemis :[lightgray] (blocs) +rules.dropzoneradius = Rayon de la Zone d'Apparition ennemie :[lightgray] (blocs) rules.unitammo = Les Unités nécessitent des munitions rules.enemyteam = Équipe ennemie rules.playerteam = Équipe du joueur @@ -1650,9 +1653,9 @@ block.large-constructor.description = Fabrique des structures d'une taille maxim block.deconstructor.name = Déconstructeur block.deconstructor.description = Déconstruit les structures et les unités. Retourne 100% du coût de construction. block.payload-loader.name = Chargeur de charge utile -block.payload-loader.description = Chargez les liquides et les articles dans les blocs. +block.payload-loader.description = Charge les liquides et les ressources dans les blocs. block.payload-unloader.name = Déchargeur de charge utile -block.payload-unloader.description = Décharge les liquides et les articles des blocs. +block.payload-unloader.description = Décharge les liquides et les ressources des blocs. block.heat-source.name = Source de Chaleur block.heat-source.description = Produit de grandes quantités de chaleur. Bac à sable uniquement. @@ -1840,11 +1843,11 @@ hint.research = Utilisez le bouton \ue875 [accent]Recherche[] pour rechercher de hint.research.mobile = Utilisez le bouton \ue875 [accent]Recherche[] dans le \ue88c [accent]Menu[] pour rechercher de nouvelles technologies. hint.unitControl = Retenez [accent][[Ctrl-gauche][] et [accent]cliquez[] pour contrôler une tourelle ou une unité alliée. hint.unitControl.mobile = [accent][[Tapez][] 2 fois une tourelle ou une unité alliée pour la contrôler. -hint.unitSelectControl = Pour contrôler les unités, entrez en mode [accent]« Commande »[] en pressant [accent]Maj gauche.[]\nEn mode « Commande », cliquez et faites glisser la souris pour sélectionner des unités. Faites un [accent]Clic droit[] à un emplacement ou une cible pour que les unités s'y déplacent. +hint.unitSelectControl = Pour contrôler les unités, entrez en mode [accent]« Commande »[] en pressant [accent]Maj gauche[].\nEn mode « Commande », cliquez et faites glisser la souris pour sélectionner des unités. Faites un [accent]Clic droit[] à un emplacement ou une cible pour que les unités s'y déplacent. hint.unitSelectControl.mobile = Pour contrôler les unités, entrez en mode [accent]« Commande »[] en pressant le bouton de [accent]commande[] en bas à gauche de l'écran.\nEn mode « Commande », pressez longuement et faites glisser pour sélectionner des unités. Tapez un emplacement ou une cible pour que les unités s'y déplacent. hint.launch = Une fois que vous avez collecté assez de ressources, vous pouvez [accent]Lancer[] votre Noyau en sélectionnant un secteur depuis la \ue827 [accent]Carte[] en bas à droite. hint.launch.mobile = Une fois que vous avez collecté assez de ressources, vous pouvez [accent]Lancer[] votre Noyau en sélectionnant un secteur depuis la \ue827 [accent]Carte[] dans le \ue88c [accent]Menu[]. -hint.schematicSelect = Retenez [accent][[F][] pour sélectionner des blocs dans une zone afin de les copier et les coller.\n\n[accent][[Clic du milieu][] pour copier un seul type de bloc. +hint.schematicSelect = Retenez [accent][[F][] pour sélectionner des blocs dans une zone afin de les copier et les coller.\n\n[accent][[Clic molette][] pour copier un seul type de bloc. hint.rebuildSelect = Retenez [accent][[B][] et faites glissez pour selectionner les plans des blocs détruits.\nCela va automatiquement les reconstruire. hint.rebuildSelect.mobile = Selectionnez le \ue874 bouton de copie, ensuite tapez le \ue80f bouton de reconstruction et faites glisser pour sélectionner les plans des blocs détruits.\nCela va les reconstruire automatiquement. hint.conveyorPathfind = Retenez [accent][[Ctrl-gauche][] pendant que vous placez des convoyeurs, afin de générer un chemin automatiquement. @@ -1860,7 +1863,7 @@ hint.guardian = Les [accent]Gardiens[] sont protégés par un bouclier. Les muni hint.coreUpgrade = Les Noyaux peuvent être améliorés [accent]en plaçant un Noyau de plus haut niveau sur eux[].\n\nPlacez un \uf868 Noyau [accent]Fondation[] sur le \uf869 Noyau [accent]Fragment[]. Soyez sûrs que rien n'obstrue la construction. hint.presetLaunch = Les [accent]secteurs[] gris, tels que [accent]Frozen Forest[], peuvent être lancés de n'importe où. Ils ne requièrent pas la capture d'un secteur adjacent.\n\n[accent]Il y a beaucoup de secteurs[] comme celui-ci, qui sont [accent]optionnels[]. hint.presetDifficulty = Ce secteur a un niveau de menace ennemi [scarlet]élevé[].\nIl n'est [accent]pas recommandé[] de se lancer dans de tels secteurs sans la technologie et la préparation appropriées. -hint.coreIncinerate = Lorsqu'un Noyau est rempli d'une ressource en particulier, le surplus qui rentrera dans celui-ci sera [accent]incinéré[]. +hint.coreIncinerate = Lorsqu'un Noyau est rempli d'une ressource en particulier, le surplus qui y rentrera sera [accent]incinéré[]. hint.factoryControl = Pour régler la [accent]destination[] d'une usine à unités, cliquez sur l'usine en mode « Commande », puis clic-droit sur la destination souhaitée.\nLes unités produites s'y déplaceront automatiquement. hint.factoryControl.mobile = Pour régler la [accent]destination[] d'une usine à unités, tapez sur l'usine en mode « Commande », puis tapez sur la destination souhaitée.\nLes unités produites s'y déplaceront automatiquement. @@ -1877,8 +1880,8 @@ gz.turrets = Recherchez et placez 2 \uf861 [accent]Duos[] pour défendre votre n gz.duoammo = Rechargez vos Duos avec du [accent]cuivre[], en utilisant les convoyeurs. gz.walls = Les [accent]Murs[] peuvent empêcher les attaques ennemies d'atteindre vos constructions.\nPlacez des \uf8ae [accent]murs de cuivre[] autour de vos tourelles. gz.defend = Ennemis en approche, préparez-vous à défendre. -gz.aa = Les unités aériennes ne peuvent pas être facilement repoussées avec des tourelles standard.\n\uf860 Les [accent]Disperseurs[] sont d'excellentes tourelles anti-aériennes, mais requierent du \uf837 [accent]plomb[] en tant que munition. -gz.scatterammo = Approvisionnez le Disperseur avec du [accent]plomb[], en utilisant des convoyeurs. +gz.aa = Les unités aériennes ne peuvent pas être facilement repoussées avec des tourelles standard.\n\uf860 Les [accent]Disperseurs[] sont d'excellentes tourelles anti-aériennes, mais requièrent du \uf837 [accent]plomb[] en tant que munition. +gz.scatterammo = Approvisionnez le Disperseur avec du [accent]plomb[] en utilisant des convoyeurs. gz.supplyturret = [accent]Approvisionnez la tourelle gz.zone1 = Ceci est la zone d'apparition ennemie. gz.zone2 = Tout ce qui est construit dans le rayon est détruit lors du commencement de la vague. @@ -1895,22 +1898,20 @@ onset.ducts.mobile = Recherchez et placez des \uf799 [accent]conduits[] pour dé onset.moremine = Étendez vos exploitations minières.\nPlacez plus de foreuses à plasma et utilisez des transmetteurs à rayons pour les relier.\nMinez 200 minerais de béryllium. onset.graphite = Les blocs plus complexes requièrent du \uf835 [accent]graphite[].\nPlacez quelques foreuses à plasma pour miner du graphite. onset.research2 = Commencez à rechercher des [accent]usines[].\nRecherchez le \uf74d [accent]broyeur de parois[] et le \uf779 [accent]four de silicium[]. -onset.arcfurnace = le four de silicium a besoin de \uf834 [accent]sable[] et de \uf835 [accent]graphite[] pour créer du \uf82f [accent]silicium[].\nDe [accent]l'énergie[] est aussi requise. +onset.arcfurnace = Le four de silicium a besoin de \uf834 [accent]sable[] et de \uf835 [accent]graphite[] pour créer du \uf82f [accent]silicium[].\nDe [accent]l'énergie[] est aussi requise. onset.crusher = Utilisez des \uf74d [accent]broyeurs de parois[] pour miner du sable. -onset.fabricator = Utilisez des [accent]unités[] pour explorer la carte, défendre vos constructions et attaquer l'ennemi. Recherchez et placez un \uf6a2 [accent]fabricateur de tanks[]. +onset.fabricator = Utilisez des [accent]Unités[] pour explorer la carte, défendre vos constructions et attaquer l'ennemi. Recherchez et placez un \uf6a2 [accent]Fabricateur de Tanks[]. onset.makeunit = Produisez une unité.\nUtilisez le bouton "?" pour voir les ressources requises par le fabricateur. onset.turrets = Les unités sont efficaces, mais les [accent]tourelles[] ont de meilleures capacités défensives si elles sont bien utilisées.\nPlacez une tourelle \uf6eb [accent]brèche[].\nLes tourelles requièrent des [accent]munitions[] \uf748. -onset.turretammo = Approvisionnez les tourelles avec du [accent]béryllium.[] +onset.turretammo = Approvisionnez les tourelles avec du [accent]béryllium[]. onset.walls = Les [accent]murs[] peuvent encaisser les dégâts des attaques ennemies avant qu'elles atteignent vos constructions.\nPlacez quelques \uf6ee [accent]murs de béryllium[] autour de la tourelle. onset.enemies = Ennemis en approche, préparez-vous à défendre. -onset.attack = L'ennemi est vulnérable. Contre-attaquez. +onset.attack = L'ennemi est vulnérable. Contre-attaquez ! onset.cores = Les noyaux peuvent être placés sur des [accent]tuiles de noyau[].\nCes nouveaux noyaux servent à faire avancer votre base et partager vos ressources avec d'autres noyaux.\nPlacez un noyau \uf725. onset.detect = L'ennemi sera capable de vous détecter dans 2 minutes.\nAméliorez vos défenses, vos exploitations minières ainsi que votre production. - -#Ne pas traduire -onset.commandmode = Hold [accent]shift[] to enter [accent]command mode[].\n[accent]Left-click and drag[] to select units.\n[accent]Right-click[] to order selected units to move or attack. -onset.commandmode.mobile = Press the [accent]command button[] to enter [accent]command mode[].\nHold down a finger, then [accent]drag[] to select units.\n[accent]Tap[] to order selected units to move or attack. -aegis.tungsten = Tungsten can be mined using an [accent]impact drill[].\nThis structure requires [accent]water[] and [accent]power[]. +onset.commandmode = Retenez [accent]Maj-gauche[] pour entrer en [accent]Mode « Commande »[].\n[accent]Clic-gauche tout en bougeant la souris[] pour sélectionner des unités.\n[accent]Clic-droit[] pour ordonner aux unités sélectionnées de bouger ou attaquer. +onset.commandmode.mobile = Pressez le [accent]bouton de commande[] pour entrer en [accent]Mode « Commande »[].\nRetenez votre doigt, et [accent]bougez-le[] pour sélectionner des unités.\n[accent]Tapez[] pour ordonner aux unités sélectionnées de bouger ou attaquer. +aegis.tungsten = Le tungstène peut être miné en utilisant une [accent]foreuse à impact[].\nCette structure requiert de [accent]l'eau[] et de [accent]l'énergie[]. split.pickup = Certains blocs peuvent être transportés par des unités du noyau.\nTransportez ce [accent]conteneur[] et placez-le sur le [accent]chargeur de charges utiles[].\n(Les touches par défaut sont [[ pour ramasser et ] pour déposer) split.pickup.mobile = Certains blocs peuvent être transportés par des unités du noyau.\nTransportez ce [accent]conteneur[] et placez-le sur le [accent]chargeur de charges utiles[].\n(Pour ramasser ou déposer quelque chose, Pressez longuement dessus.) @@ -1926,7 +1927,7 @@ item.metaglass.description = Un composé de verre super-résistant. Utilisation item.graphite.description = Du carbone minéralisé utilisé pour les munitions et dans les composants électriques. item.sand.description = Un matériau commun, largement utilisé pour la fabrication de matériaux raffinés. item.coal.description = Un carburant commun et facile à obtenir. -item.coal.details = De la matière végétale fossilisée, formée bien avant l’ensemencement de ce monde. Utilisation très répandue pour la production de carburant et de ressources. +item.coal.details = De la matière végétale fossilisée, formée bien avant l’ensemencement de ce monde. Utilisation très répandue pour la production de carburant et de ressources. item.titanium.description = Un métal rare et super-léger, largement utilisé dans le transport de liquides, dans les foreuses de haut niveau et dans les usines. item.thorium.description = Un métal dense et radioactif, utilisé comme support structurel et comme carburant nucléaire. item.scrap.description = Il est utilisé dans les fours à fusion et les pulvériseurs, pour être raffiné en d'autres matériaux. @@ -2113,7 +2114,7 @@ block.repair-turret.description = Répare en continu l'unité endommagée la plu block.payload-propulsion-tower.description = Structure de transport de charges utiles à longue portée. Projette des charges utiles vers d'autres tours de propulsion de charges utiles reliées. #Erekir -block.core-bastion.description = Le cœur de votre base. Blindé. Une fois détruit, le secteur est perdu. +block.core-bastion.description = Le cœur de votre base. Blindé. Une fois détruit, le secteur est perdu. block.core-citadel.description = Le cœur de votre base. Très bien blindé. Stocke plus de ressources qu'un noyau Bastion. block.core-acropolis.description = Le cœur de votre base. Exceptionnellement bien blindé. Stocke plus de ressources qu'un noyau Citadelle. block.breach.description = Tire des munitions perforantes de béryllium ou de tungstène sur les cibles ennemies. @@ -2297,19 +2298,19 @@ lst.setrate = Définit la vitesse d'exécution d'un processeur en instructions/t lst.fetch = Cherche les unités, noyaux, joueurs ou constructions par index. Commence à 0 et termine par le nombre retourné. lst.packcolor = Compresse les composants RGBA [0, 1] en un seul nombre pour les opérations de dessins ou les changements de règles. lst.setrule = Change une règle du jeu. -lst.flushmessage = Affiche un message sur l'écran depuis la mémoire tampon de texte.\nLe message apparait après la fin du dernier. +lst.flushmessage = Affiche un message sur l'écran depuis la mémoire tampon de texte.\nAttendra la fin du message précédent avant l'affichage du nouveau. lst.cutscene = Manipule la caméra du joueur. -lst.setflag = Définit un drapeau global qui peut être lu par tous les processeurs. -lst.getflag = Vérifie si un drapeau global est présent. +lst.setflag = Définit une variable globale qui peut être lue par tous les processeurs. +lst.getflag = Vérifie si une variable globale est présente. lst.setprop = Change une propriété d'une unité ou d'un bâtiment. -lst.effect = Create a particle effect. -lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. -lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. -lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.effect = Crée un effet de particules. +lst.sync = Synchronise une variable dans le réseau.\nLimité à 20 fois par seconde et par variable. +lst.makemarker = Crée un marqueur dans le monde.\nUn ID pour identifier le marqueur doit être donné.\nLes marqueurs sont limités à 20,000 par monde. +lst.setmarker = Change une propriété d'un marqueur.\nL'ID utilisé doit être le même que celui de l'instruction "Make Marker". logic.nounitbuild = [red]Les unités contrôlées par des processeurs ne peuvent pas construire ici. -lenum.type = Type de bâtiment/unité.\nPar exemple, pour tout routeur, cela retournera [accent]@router[].\nPas en texte. +lenum.type = Type de bâtiment/unité.\nPar exemple, pour tout routeur, cela retournera [accent]@router[]. lenum.shoot = Tire à une position donnée. lenum.shootp = Tire à une unité/bâtiment avec la prédiction de mouvement. lenum.config = La configuration d'un bâtiment. Par exemple, l'objet sélectionné dans un trieur. @@ -2321,7 +2322,7 @@ laccess.dead = Retourne si l'Unité/Bâtiment est morte/détruit ou plus valide. laccess.controlled = Retourne:\n[accent]@ctrlProcessor[] si le contrôleur de l'Unité est un processeur\n[accent]@ctrlPlayer[] si l'Unité/Bâtiment est contrôlé par un joueur\n[accent]@ctrlFormation[] si l'Unité est en formation\nSinon, retourne 0. laccess.progress = Progression de l'action, 0 à 1.\nRenvoie la progression de la production, du rechargement de la tourelle ou de la construction. laccess.speed = La vitesse maximale d'une unité, en blocs/sec. -laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation. +laccess.id = L'ID d'une unité/bloc/ressource/liquide.\nCeci est l'inverse de l'instruction de recherche. lcategory.unknown = Inconnu lcategory.unknown.description = Instructions sans catégorie. @@ -2332,7 +2333,7 @@ lcategory.block.description = Interagit avec les blocs. lcategory.operation = Opérations lcategory.operation.description = Opérations logiques. lcategory.control = Contrôle des Flux -lcategory.control.description = Manipule le flot d'exécution. +lcategory.control.description = Manipule l'ordre d'exécution. lcategory.unit = Contrôle des Unités lcategory.unit.description = Ordonne des commandes aux unités. lcategory.world = Contrôle du Monde @@ -2443,7 +2444,7 @@ lenum.unbind = Désactive complètement le contrôle par processeur.\nL'unité r lenum.move = Bouge vers la position exacte. lenum.approach = Approche une position avec un rayon. lenum.pathfind = Détermine un itinéraire et bouge vers le point d'apparition ennemi. -lenum.autopathfind = Automatically pathfinds to the nearest enemy core or drop point.\nThis is the same as standard wave enemy pathfinding. +lenum.autopathfind = Recherche automatiquement le chemin vers le noyau ennemi ou la zone d'apparition ennemie le plus proche.\nCeci est le même que la détection de chemin de la vague ennemie. lenum.target = Tire vers la position donnée. lenum.targetp = Tire sur une cible avec la prédiction de mouvement. lenum.itemdrop = Lâche un objet. From 06bacab7102dc51bca2470cf98d75d4f943199ae Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 12 Nov 2023 21:55:16 -0500 Subject: [PATCH 22/62] Crash fix --- core/src/mindustry/ai/types/CommandAI.java | 4 ++++ core/src/mindustry/world/blocks/units/UnitAssembler.java | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/ai/types/CommandAI.java b/core/src/mindustry/ai/types/CommandAI.java index b7054442a6..120360534f 100644 --- a/core/src/mindustry/ai/types/CommandAI.java +++ b/core/src/mindustry/ai/types/CommandAI.java @@ -398,6 +398,8 @@ public class CommandAI extends AIController{ @Override public void commandPosition(Vec2 pos){ + if(pos == null) return; + commandPosition(pos, false); if(commandController != null){ commandController.commandPosition(pos); @@ -405,6 +407,8 @@ public class CommandAI extends AIController{ } public void commandPosition(Vec2 pos, boolean stopWhenInRange){ + if(pos == null) return; + //this is an allocation, but it's relatively rarely called anyway, and outside mutations must be prevented targetPos = lastTargetPos = pos.cpy(); attackTarget = null; diff --git a/core/src/mindustry/world/blocks/units/UnitAssembler.java b/core/src/mindustry/world/blocks/units/UnitAssembler.java index 44165f636f..bff1cdf800 100644 --- a/core/src/mindustry/world/blocks/units/UnitAssembler.java +++ b/core/src/mindustry/world/blocks/units/UnitAssembler.java @@ -444,7 +444,7 @@ public class UnitAssembler extends PayloadBlock{ if(!net.client()){ var unit = plan.unit.create(team); - if(unit != null && unit.isCommandable()){ + if(unit != null && unit.isCommandable() && commandPos != null){ unit.command().commandPosition(commandPos); } unit.set(spawn.x + Mathf.range(0.001f), spawn.y + Mathf.range(0.001f)); From dd9927d72dc4bdce34b637339176b6040d29846c Mon Sep 17 00:00:00 2001 From: BalaM314 <71201189+BalaM314@users.noreply.github.com> Date: Mon, 13 Nov 2023 12:40:45 +0530 Subject: [PATCH 23/62] Correctly read item capacity in linked vaults (#9273) --- core/src/mindustry/world/blocks/storage/StorageBlock.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/src/mindustry/world/blocks/storage/StorageBlock.java b/core/src/mindustry/world/blocks/storage/StorageBlock.java index d681389ca5..31d0666b14 100644 --- a/core/src/mindustry/world/blocks/storage/StorageBlock.java +++ b/core/src/mindustry/world/blocks/storage/StorageBlock.java @@ -5,6 +5,7 @@ import arc.struct.*; import arc.util.*; import mindustry.content.*; import mindustry.gen.*; +import mindustry.logic.*; import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.storage.CoreBlock.*; @@ -100,6 +101,12 @@ public class StorageBlock extends Block{ } } + @Override + public double sense(LAccess sensor){ + if(sensor == LAccess.itemCapacity && linkedCore != null) return linkedCore.sense(sensor); + return super.sense(sensor); + } + @Override public void overwrote(Seq previous){ //only add prev items when core is not linked From d780ee0434428ae6a3107fb3659007abb0893146 Mon Sep 17 00:00:00 2001 From: abcxyzDustry <138785336+abcxyzDustry@users.noreply.github.com> Date: Tue, 14 Nov 2023 00:38:07 +0700 Subject: [PATCH 24/62] Update servers_v7.json (#9276) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 7b1354dfcc..a81ae42e04 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -226,7 +226,7 @@ }, { "name": "ABCXYZ Community", - "address": ["118.127.8.162:25617", "78.108.218.117:25640", "srv3.godlike.club:27246"] + "address": ["23.88.73.88:23591", "23.88.73.88:23539", "144.76.57.59:14996"] }, { "name": "CroCraft Network", From d138aa7568f59f318d698c0f1fd54bd6929d68ff Mon Sep 17 00:00:00 2001 From: Darkness <79508138+Darkness6030@users.noreply.github.com> Date: Tue, 14 Nov 2023 18:27:51 +0300 Subject: [PATCH 25/62] Update Blocks.java (#9278) --- core/src/mindustry/content/Blocks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index edea297acf..1275b3b169 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -2408,7 +2408,7 @@ public class Blocks{ largeSolarPanel = new SolarGenerator("solar-panel-large"){{ requirements(Category.power, with(Items.lead, 80, Items.silicon, 110, Items.phaseFabric, 15)); size = 3; - powerProduction = 1.3f; + powerProduction = 1.6f; }}; thoriumReactor = new NuclearReactor("thorium-reactor"){{ From 1a763a5db3185d0a7c578902060f432280ea4eac Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 14 Nov 2023 20:08:13 -0500 Subject: [PATCH 26/62] Beam nodes now display graph status --- core/src/mindustry/world/blocks/power/BeamNode.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/world/blocks/power/BeamNode.java b/core/src/mindustry/world/blocks/power/BeamNode.java index e9c9fad6db..b99590d2be 100644 --- a/core/src/mindustry/world/blocks/power/BeamNode.java +++ b/core/src/mindustry/world/blocks/power/BeamNode.java @@ -122,9 +122,10 @@ public class BeamNode extends PowerBlock{ @Override public BlockStatus status(){ - if(Mathf.equal(power.status, 0f, 0.001f)) return BlockStatus.noInput; - if(Mathf.equal(power.status, 1f, 0.001f)) return BlockStatus.active; - return BlockStatus.noOutput; + float balance = power.graph.getPowerBalance(); + if(balance > 0f) return BlockStatus.active; + if(balance < 0f && power.graph.getLastPowerStored() > 0) return BlockStatus.noOutput; + return BlockStatus.noInput; } @Override From 0c801b5c3202f4611b0da08b1453fc26bbc61081 Mon Sep 17 00:00:00 2001 From: abcxyzDustry <138785336+abcxyzDustry@users.noreply.github.com> Date: Wed, 15 Nov 2023 09:33:36 +0700 Subject: [PATCH 27/62] Update servers_v7.json (#9280) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index a81ae42e04..50755e2a47 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -226,7 +226,7 @@ }, { "name": "ABCXYZ Community", - "address": ["23.88.73.88:23591", "23.88.73.88:23539", "144.76.57.59:14996"] + "address": ["23.88.73.88:23591", "23.88.73.88:23539", "144.76.57.59:14996", "144.76.57.59:16881"] }, { "name": "CroCraft Network", From 70132436dbcaaa215ae882bfa1695eba817d9e90 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 14 Nov 2023 21:38:26 -0500 Subject: [PATCH 28/62] arc --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 090150dba9..da998b39a0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,4 +25,4 @@ org.gradle.caching=true #used for slow jitpack builds; TODO see if this actually works org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 -archash=e2fdbab477 +archash=96dd703d5d From 1c96da3d67acfefa4c4b67f7cb957fdc7578c542 Mon Sep 17 00:00:00 2001 From: Gureumi <44261958+Kieaer@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:08:27 +0900 Subject: [PATCH 29/62] Update servers_v7.json (#9282) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 50755e2a47..8cf0e7899f 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -93,7 +93,7 @@ }, { "name": "Korea", - "address": ["mindustry.kr", "mindustry.kr:7105"] + "address": ["mindustry.kr"] }, { "name": "Phoenix Network", From 53967d4d70a4830a1c7afc3a6638a759fe5eb4de Mon Sep 17 00:00:00 2001 From: Semetrix <73433905+Semetrix@users.noreply.github.com> Date: Thu, 16 Nov 2023 16:01:42 +0000 Subject: [PATCH 30/62] Fix format, it was breaking my thing (#9283) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 8cf0e7899f..daf54062fb 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -5,7 +5,7 @@ }, { "name": "Crux's Revelations", - "Address": ["fsn1.bbn.one:52397","fsn1.bbn.one:58375","de-free-01.hosts.optikservers.com:32212","fsn1.bbn.one:49840","de-free-01.hosts.optikservers.com:30449"] + "address": ["fsn1.bbn.one:52397","fsn1.bbn.one:58375","de-free-01.hosts.optikservers.com:32212","fsn1.bbn.one:49840","de-free-01.hosts.optikservers.com:30449"] }, { "name": "CMS", From e5b3488a054946f2ed17fa060165bc22994d74fb Mon Sep 17 00:00:00 2001 From: abcxyzDustry <138785336+abcxyzDustry@users.noreply.github.com> Date: Fri, 17 Nov 2023 20:18:48 +0700 Subject: [PATCH 31/62] Update servers_v7.json (#9286) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index daf54062fb..15d32644fc 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -226,7 +226,7 @@ }, { "name": "ABCXYZ Community", - "address": ["23.88.73.88:23591", "23.88.73.88:23539", "144.76.57.59:14996", "144.76.57.59:16881"] + "address": ["23.88.73.88:23591", "23.88.73.88:23539", "144.76.57.59:14996", "144.76.57.59:16881", "144.76.57.59:13885"] }, { "name": "CroCraft Network", From 4c33eed833b4f13e3e41f2d443322dd14d43087f Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 17 Nov 2023 18:47:52 -0500 Subject: [PATCH 32/62] RailBulletType pierceCap --- core/src/mindustry/entities/bullet/RailBulletType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/entities/bullet/RailBulletType.java b/core/src/mindustry/entities/bullet/RailBulletType.java index fb5c1814a1..46f04bdb31 100644 --- a/core/src/mindustry/entities/bullet/RailBulletType.java +++ b/core/src/mindustry/entities/bullet/RailBulletType.java @@ -60,7 +60,7 @@ public class RailBulletType extends BulletType{ super.init(b); b.fdata = length; - Damage.collideLine(b, b.team, b.type.hitEffect, b.x, b.y, b.rotation(), length, false, false); + Damage.collideLine(b, b.team, b.type.hitEffect, b.x, b.y, b.rotation(), length, false, false, pierceCap); float resultLen = b.fdata; Vec2 nor = Tmp.v1.trns(b.rotation(), 1f).nor(); From 5d1ec319bcf3d91952740c440d760c096bb62348 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 17 Nov 2023 19:12:56 -0500 Subject: [PATCH 33/62] BulletType delayFrags workaround --- core/src/mindustry/entities/bullet/BulletType.java | 8 +++++++- core/src/mindustry/entities/bullet/LaserBulletType.java | 1 + core/src/mindustry/entities/bullet/RailBulletType.java | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index b4c632ab98..4ab4c929a4 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -160,6 +160,8 @@ public class BulletType extends Content implements Cloneable{ /** Bullet type that is created when this bullet expires. */ public @Nullable BulletType fragBullet = null; + /** If true, frag bullets are delayed to the next frame. Fixes obscure bugs with piercing bullet types spawning frags immediately and screwing up the Damage temporary variables. */ + public boolean delayFrags = false; /** Degree spread range of fragmentation bullets. */ public float fragRandomSpread = 360f; /** Uniform spread between each frag bullet in degrees. */ @@ -446,7 +448,11 @@ public class BulletType extends Content implements Cloneable{ Effect.shake(hitShake, hitShake, b); if(fragOnHit){ - createFrags(b, x, y); + if(delayFrags && fragBullet != null && fragBullet.delayFrags){ + Core.app.post(() -> createFrags(b, x, y)); + }else{ + createFrags(b, x, y); + } } createPuddles(b, x, y); createIncend(b, x, y); diff --git a/core/src/mindustry/entities/bullet/LaserBulletType.java b/core/src/mindustry/entities/bullet/LaserBulletType.java index 7450824c4a..c6c7c3de21 100644 --- a/core/src/mindustry/entities/bullet/LaserBulletType.java +++ b/core/src/mindustry/entities/bullet/LaserBulletType.java @@ -38,6 +38,7 @@ public class LaserBulletType extends BulletType{ hittable = false; absorbable = false; removeAfterPierce = false; + delayFrags = true; } public LaserBulletType(){ diff --git a/core/src/mindustry/entities/bullet/RailBulletType.java b/core/src/mindustry/entities/bullet/RailBulletType.java index 46f04bdb31..276a428e4e 100644 --- a/core/src/mindustry/entities/bullet/RailBulletType.java +++ b/core/src/mindustry/entities/bullet/RailBulletType.java @@ -24,6 +24,7 @@ public class RailBulletType extends BulletType{ collides = false; keepVelocity = false; lifetime = 1f; + delayFrags = true; } @Override From c3134bfb2fcfe703ce5b552372ae303015d86abf Mon Sep 17 00:00:00 2001 From: CuteMiao Xuwen <127962617+XuwenMeimei@users.noreply.github.com> Date: Sat, 18 Nov 2023 13:15:30 +0800 Subject: [PATCH 34/62] Update servers_v7.json (#9288) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 15d32644fc..b2f05d1122 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -246,7 +246,7 @@ }, { "name": "XuwenHost", - "address": ["mdt.xuwenblock.cn:6568","mdt.xuwenblock.cn:6567"] + "address": ["mdt.xuwenblock.cn:6568","mdt.xuwenblock.cn:6567","106.14.14.210"] }, { "name": "MineCore", From 533c5a8afbc9bffccc909f15544715b84d833f05 Mon Sep 17 00:00:00 2001 From: Ilya246 <57039557+Ilya246@users.noreply.github.com> Date: Sat, 18 Nov 2023 17:35:10 +0400 Subject: [PATCH 35/62] fix shield arc ability (#9290) * fix shield arc ability * Update ShieldArcAbility.java --- core/src/mindustry/entities/abilities/ShieldArcAbility.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/entities/abilities/ShieldArcAbility.java b/core/src/mindustry/entities/abilities/ShieldArcAbility.java index 632d0a58a7..b63a88bf1e 100644 --- a/core/src/mindustry/entities/abilities/ShieldArcAbility.java +++ b/core/src/mindustry/entities/abilities/ShieldArcAbility.java @@ -93,7 +93,8 @@ public class ShieldArcAbility extends Ability{ paramField = this; paramPos.set(x, y).rotate(unit.rotation - 90f).add(unit); - Groups.bullet.intersect(unit.x - radius, unit.y - radius, radius * 2f, radius * 2f, shieldConsumer); + float reach = radius + width / 2f; + Groups.bullet.intersect(paramPos.x - reach, paramPos.y - reach, reach * 2f, reach * 2f, shieldConsumer); }else{ widthScale = Mathf.lerpDelta(widthScale, 0f, 0.11f); } From 6200f08cd84b9a74563beddfe0c89106a43f6e1d Mon Sep 17 00:00:00 2001 From: Darkness <79508138+Darkness6030@users.noreply.github.com> Date: Sat, 18 Nov 2023 16:37:40 +0300 Subject: [PATCH 36/62] Remove Darkdustry from the Global Server List (#9289) The time has come. It's been more than two years since we started Mindurka, which was later renamed to Darkdustry. It was an amazing time and an amazing experience to maintain the server, to create plugins and gamemodes, to discuss mindustry with all of you. But It's enough. The server is getting constantly DDoSed, the host dies all the time and I have no motivation to develop anything related to Mindustry. Goodbye. And I hope, we'll meet again. --- servers_v7.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/servers_v7.json b/servers_v7.json index b2f05d1122..8887e2f667 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -79,10 +79,6 @@ "name": "XCore", "address": ["130.61.52.25", "130.61.52.25:6568", "130.61.52.25:6569", "130.61.52.25:6570", "130.61.52.25:6571", "130.61.52.25:6572", "130.61.52.25:6573", "130.61.52.25:6888"] }, - { - "name": "Darkdustry", - "address": ["130.61.78.82:3000", "130.61.78.82:3001", "130.61.78.82:3002", "130.61.78.82:3003", "130.61.78.82:3004", "130.61.78.82:3005", "130.61.78.82:3006", "130.61.78.82:3007", "130.61.78.82:3008", "130.61.78.82:3009", "130.61.78.82:3010"] - }, { "name": "Chaotic Neutral", "address": ["c-n.ddns.net:7012", "c-n.ddns.net:7013", "c-n.ddns.net:7014", "c-n.ddns.net:7015", "c-n.ddns.net:7016", "c-n.ddns.net:7017", "c-n.ddns.net:7003", "37.187.73.180:7021"] From bdbf168797d4d5dbb7147169dbc0a39031ef48af Mon Sep 17 00:00:00 2001 From: abcxyzDustry <138785336+abcxyzDustry@users.noreply.github.com> Date: Sat, 18 Nov 2023 23:11:21 +0700 Subject: [PATCH 37/62] Update servers_v7.json (#9293) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 8887e2f667..918ccad4a3 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -222,7 +222,7 @@ }, { "name": "ABCXYZ Community", - "address": ["23.88.73.88:23591", "23.88.73.88:23539", "144.76.57.59:14996", "144.76.57.59:16881", "144.76.57.59:13885"] + "address": ["23.88.73.88:23591", "23.88.73.88:23539", "144.76.57.59:14996", "144.76.57.59:16881", "144.76.57.59:13885", "5.9.8.124:17775"] }, { "name": "CroCraft Network", From 46b88092db3a84e3c76f53dea2be7944d972f23e Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 18 Nov 2023 11:25:31 -0500 Subject: [PATCH 38/62] Re-enabled mod unit tests --- .../java/{ModTestExotic.java => ModTestAllure.java} | 11 ++++------- tests/src/test/java/ModTestBM.java | 5 +---- 2 files changed, 5 insertions(+), 11 deletions(-) rename tests/src/test/java/{ModTestExotic.java => ModTestAllure.java} (76%) diff --git a/tests/src/test/java/ModTestExotic.java b/tests/src/test/java/ModTestAllure.java similarity index 76% rename from tests/src/test/java/ModTestExotic.java rename to tests/src/test/java/ModTestAllure.java index 88aa06a196..56dad03283 100644 --- a/tests/src/test/java/ModTestExotic.java +++ b/tests/src/test/java/ModTestAllure.java @@ -13,17 +13,14 @@ import static org.junit.jupiter.api.Assertions.*; //- it is probably the mod with the most json, and as such covers a lot of classes //- it is popular enough in the mod browser //- I am somewhat familiar with its files & the type of content it adds -public class ModTestExotic extends GenericModTest{ +public class ModTestAllure extends GenericModTest{ @Test public void begin(){ - //TODO broken as of 136+ - if(true) return; + grabMod("https://github.com/BlueWolf3682/Allure/archive/4150f74db1ea6058dc090959cf0fe5dc9d239e37.zip"); + checkExistence("allure"); - grabMod("https://github.com/BlueWolf3682/Exotic-Mod/archive/08c861398ac9c3d1292132f9a110e17e06294a90.zip"); - checkExistence("exotic-mod"); - - UnitType type = Vars.content.units().find(u -> u.name.equals("exotic-mod-luminance")); + UnitType type = Vars.content.unit("allure-0b11-exodus"); assertNotNull(type, "A mod unit must be loaded."); assertTrue(type.weapons.size > 0, "A mod unit must have a weapon."); diff --git a/tests/src/test/java/ModTestBM.java b/tests/src/test/java/ModTestBM.java index 3ba96be88e..24e817b441 100644 --- a/tests/src/test/java/ModTestBM.java +++ b/tests/src/test/java/ModTestBM.java @@ -16,10 +16,7 @@ public class ModTestBM extends GenericModTest{ @Test public void begin(){ - //TODO broken as of 136+ - if(true) return; - - grabMod("https://github.com/sk7725/BetaMindy/releases/download/v0.955/BetaMindy.jar"); + grabMod("https://github.com/sk7725/BetaMindy/releases/download/v1.11/BetaMindy.jar"); checkExistence("betamindy"); From 0787cbbb5f66daef1a43d131ed6c7f29a77bda18 Mon Sep 17 00:00:00 2001 From: "Arksource (ShardDustry [ES]) Owner" <93954648+ArkSourcer@users.noreply.github.com> Date: Sat, 18 Nov 2023 21:54:20 -0400 Subject: [PATCH 39/62] Agua 3, 20% more water (#9295) * Funny change * Update servers_v7.json * Update bundle_es.properties Traductions for the bundle_es By ArkSource * Update servers_v7.json * Agua prt 2 * Update servers_v7.json * Update servers_v7.json --- servers_v7.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/servers_v7.json b/servers_v7.json index 918ccad4a3..e7f13e6ca7 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -12,12 +12,12 @@ "address": ["195.2.84.144"] }, { - "name": "ShardDustry Events", - "address": ["194.247.42.11:27703"] + "name": "ShardDustry Eventos", + "address": ["45.158.9.198:31290"] }, { - "name": "ShardDustry", - "address": ["94.130.132.149:35689", "45.158.9.198:31290","45.158.9.198:30529"] + "name": "ShardDustry ES", + "address": ["94.130.132.149:35689","94.130.132.149:35438","45.158.9.198:31290","45.158.9.198:30529"] }, { "name": "Tamazia", From afc2e15c5108471a865decfd94924b9a02229509 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 19 Nov 2023 10:55:42 -0500 Subject: [PATCH 40/62] Fixed #9298 --- core/src/mindustry/input/InputHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index dedcf105a2..73be92ad0d 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -1569,7 +1569,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ consumed = true; if((!config.isShown() && build.shouldShowConfigure(player)) //if the config fragment is hidden, show //alternatively, the current selected block can 'agree' to switch config tiles - || (config.isShown() && config.getSelected().onConfigureBuildTapped(build))){ + || (config.isShown() && config.getSelected().onConfigureBuildTapped(build) && build.shouldShowConfigure(player))){ Sounds.click.at(build); config.showConfig(build); } From b189bfdf44b0ebd23e9fc9b317ba40929863e95b Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 19 Nov 2023 19:09:15 -0500 Subject: [PATCH 41/62] Closes Anuken/Mindustry-Suggestions/issues/4780 (dumping neoplasm from tanks) --- core/src/mindustry/content/Liquids.java | 2 +- core/src/mindustry/entities/comp/BuildingComp.java | 9 +++++++++ core/src/mindustry/world/Block.java | 2 ++ core/src/mindustry/world/Build.java | 5 ++++- .../world/blocks/payloads/PayloadDeconstructor.java | 11 +++++++++++ 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/content/Liquids.java b/core/src/mindustry/content/Liquids.java index 0f95a02685..432b4463cc 100644 --- a/core/src/mindustry/content/Liquids.java +++ b/core/src/mindustry/content/Liquids.java @@ -54,7 +54,7 @@ public class Liquids{ capPuddles = false; spreadTarget = Liquids.water; moveThroughBlocks = true; - incinerable = true; + incinerable = false; blockReactive = false; canStayOn.addAll(water, oil, cryofluid); diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 7eb9288c3b..a8d027cf1e 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1344,6 +1344,15 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, return block.itemCapacity; } + /** Called when a block begins (not finishes!) deconstruction. The building is still present at this point. */ + public void onDeconstructed(@Nullable Unit builder){ + //deposit non-incinerable liquid on ground + if(liquids != null && liquids.currentAmount() > 0 && (!liquids.current().incinerable || block.deconstructDropAllLiquid)){ + float perCell = liquids.currentAmount() / (block.size * block.size) * 2f; + tile.getLinkedTiles(other -> Puddles.deposit(other, liquids.current(), perCell)); + } + } + /** Called when the block is destroyed. The tile is still intact at this stage. */ public void onDestroyed(){ float explosiveness = block.baseExplosiveness; diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 619a9fe209..f4f50c2fc1 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -154,6 +154,8 @@ public class Block extends UnlockableContent implements Senseable{ public boolean updateInUnits = true; /** if true, this block updates in payloads in units regardless of the experimental game rule */ public boolean alwaysUpdateInUnits = false; + /** if false, only incinerable liquids are dropped when deconstructing; otherwise, all liquids are dropped. */ + public boolean deconstructDropAllLiquid = false; /** Whether to use this block's color in the minimap. Only used for overlays. */ public boolean useColor = true; /** item that drops from this block, used for drills */ diff --git a/core/src/mindustry/world/Build.java b/core/src/mindustry/world/Build.java index 95664f71f4..4377eb521a 100644 --- a/core/src/mindustry/world/Build.java +++ b/core/src/mindustry/world/Build.java @@ -47,7 +47,10 @@ public class Build{ Block sub = ConstructBlock.get(previous.size); Seq prevBuild = new Seq<>(1); - if(tile.build != null) prevBuild.add(tile.build); + if(tile.build != null){ + prevBuild.add(tile.build); + tile.build.onDeconstructed(unit); + } tile.setBlock(sub, team, rotation); var build = (ConstructBuild)tile.build; diff --git a/core/src/mindustry/world/blocks/payloads/PayloadDeconstructor.java b/core/src/mindustry/world/blocks/payloads/PayloadDeconstructor.java index ee66fcdfd4..d2586a4e22 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadDeconstructor.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadDeconstructor.java @@ -5,6 +5,7 @@ import arc.math.*; import arc.util.*; import arc.util.io.*; import mindustry.content.*; +import mindustry.entities.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.logic.*; @@ -140,6 +141,16 @@ public class PayloadDeconstructor extends PayloadBlock{ float shift = edelta() * deconstructSpeed / deconstructing.buildTime(); float realShift = Math.min(shift, 1f - progress); + //if began deconstruction... + if(progress == 0f && shift > 0f && deconstructing instanceof BuildPayload pay){ + var build = pay.build; + //dump liquid on floor (does not respect block configuration with respect to dumping liquids on floor) + if(build.liquids != null && build.liquids.currentAmount() > 0){ + float perCell = build.liquids.currentAmount() / (block.size * block.size) * 2f; + tile.getLinkedTiles(other -> Puddles.deposit(other, build.liquids.current(), perCell)); + } + } + progress += shift; time += edelta(); From 8bb6acfacbb4b5e3c0cec2110d026dbd89ff4d8b Mon Sep 17 00:00:00 2001 From: 112Hack <144626073+112Hack@users.noreply.github.com> Date: Wed, 22 Nov 2023 16:24:45 +0300 Subject: [PATCH 42/62] Update servers_v7.json (#9303) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index e7f13e6ca7..da967afbfd 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -9,7 +9,7 @@ }, { "name": "CMS", - "address": ["195.2.84.144"] + "address": ["195.2.84.144","23.88.73.88:25617"] }, { "name": "ShardDustry Eventos", From 726ba2af31dc8c11888b3ac65a563d1b0b635622 Mon Sep 17 00:00:00 2001 From: abcxyzDustry <138785336+abcxyzDustry@users.noreply.github.com> Date: Thu, 23 Nov 2023 05:06:05 +0700 Subject: [PATCH 43/62] Update servers_v7.json (#9304) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index da967afbfd..59ca9db35e 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -222,7 +222,7 @@ }, { "name": "ABCXYZ Community", - "address": ["23.88.73.88:23591", "23.88.73.88:23539", "144.76.57.59:14996", "144.76.57.59:16881", "144.76.57.59:13885", "5.9.8.124:17775"] + "address": ["23.88.73.88:23591", "23.88.73.88:23539", "144.76.57.59:14996", "144.76.57.59:16881", "144.76.57.59:13885", "23.88.73.88:32113"] }, { "name": "CroCraft Network", From 3fcaf8f916668f945e34c60963864e7af820c63e Mon Sep 17 00:00:00 2001 From: Electron <135461023+Electron215@users.noreply.github.com> Date: Thu, 23 Nov 2023 04:59:32 -0500 Subject: [PATCH 44/62] Update servers_v7.json (#9294) Co-authored-by: Electron <135461023+Electorn215@users.noreply.github.com> --- servers_v7.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/servers_v7.json b/servers_v7.json index 59ca9db35e..1c275376cf 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -51,6 +51,10 @@ "name": "SynapseOS", "address": ["0nera.ru:7777"] }, + { + "name": "Parallax Network", + "address": ["138.2.177.166","138.2.177.166:3000","138.2.177.166:3001","138.2.177.166:3002","138.2.177.166:3003","138.2.177.166:3004","138.2.177.166:3005"] + }, { "name": "Untitled Mindustry Servers", "address": ["45.144.66.250:6567", "45.144.66.250:6601", "45.144.66.250:6611"] From f4741e0e59988273df025524837bbe2c056fa4ee Mon Sep 17 00:00:00 2001 From: Hahaa13 <108379326+Hahaa13@users.noreply.github.com> Date: Thu, 23 Nov 2023 11:25:36 +0000 Subject: [PATCH 45/62] Back back vndustry (#9297) * Update servers_v7.json * Update servers_v7.json * Back :)) --- servers_v7.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/servers_v7.json b/servers_v7.json index 1c275376cf..66360e8167 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -1,4 +1,8 @@ [ + { + "name": "Vndustry", + "address": ["140.238.246.78:7000"] + }, { "name": "meiqiuMDT", "address": ["cn1.plush.run:10001","211.101.236.94:10000","bj-1.lcf.icu:10240","play.simpfun.cn:14523"] From 4076a146b1dd7ab85d68b6c135e8e78e23e17108 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 23 Nov 2023 06:28:57 -0500 Subject: [PATCH 46/62] Reject invalid tile configs --- core/src/mindustry/input/InputHandler.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 73be92ad0d..90ac947c52 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -615,7 +615,9 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ @Remote(targets = Loc.both, called = Loc.both, forward = true) public static void tileConfig(@Nullable Player player, Building build, @Nullable Object value){ + if(build == null && net.server()) throw new ValidateException(player, "building is null"); if(build == null) return; + if(net.server() && (!Units.canInteract(player, build) || !netServer.admins.allowAction(player, ActionType.configure, build.tile, action -> action.config = value))){ From 1feeef7aef9780655aaabb8ccfa2d1bde5aa5294 Mon Sep 17 00:00:00 2001 From: karlo292 <64750254+karlo292@users.noreply.github.com> Date: Thu, 23 Nov 2023 19:35:26 +0100 Subject: [PATCH 47/62] Update servers_v7.json (#9307) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 66360e8167..e91a506b66 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -234,7 +234,7 @@ }, { "name": "CroCraft Network", - "address": ["193.122.53.98:6567", "41.216.188.223:5001"] + "address": ["193.122.53.98:6567", "193.122.53.98:20130"] }, { "name": "Extra Utilities", From d2956d1f2c3496da098dea09f71111cbbef009a0 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 23 Nov 2023 14:24:59 -0500 Subject: [PATCH 48/62] ConnectFilter API now public --- core/src/mindustry/net/ArcNetProvider.java | 6 ++++++ core/src/mindustry/net/Net.java | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/core/src/mindustry/net/ArcNetProvider.java b/core/src/mindustry/net/ArcNetProvider.java index 87a16f6a52..20715ecd4c 100644 --- a/core/src/mindustry/net/ArcNetProvider.java +++ b/core/src/mindustry/net/ArcNetProvider.java @@ -5,6 +5,7 @@ import arc.func.*; import arc.math.*; import arc.net.*; import arc.net.FrameworkMessage.*; +import arc.net.Server.*; import arc.net.dns.*; import arc.struct.*; import arc.util.*; @@ -161,6 +162,11 @@ public class ArcNetProvider implements NetProvider{ server.setConnectFilter(connectFilter); } + @Override + public ServerConnectFilter getConnectFilter(){ + return server.getConnectFilter(); + } + private static boolean isLocal(InetAddress addr){ if(addr.isAnyLocalAddress() || addr.isLoopbackAddress()) return true; diff --git a/core/src/mindustry/net/Net.java b/core/src/mindustry/net/Net.java index ef69c392b0..17822d55ab 100644 --- a/core/src/mindustry/net/Net.java +++ b/core/src/mindustry/net/Net.java @@ -3,6 +3,7 @@ package mindustry.net; import arc.*; import arc.func.*; import arc.net.*; +import arc.net.Server.*; import arc.struct.*; import arc.util.*; import mindustry.game.EventType.*; @@ -325,6 +326,15 @@ public class Net{ } } + /** Sets a connection filter by IP address. If the filter returns {@code false}, the connection will be closed. Server only. */ + public void setConnectFilter(ServerConnectFilter filter){ + provider.setConnectFilter(filter); + } + + public ServerConnectFilter getConnectFilter(){ + return provider.getConnectFilter(); + } + /** * Pings a host in a pooled thread. If an error occurred, failed() should be called with the exception. * If the port is the default mindustry port, SRV records are checked too. @@ -401,5 +411,9 @@ public class Net{ /** Sets a connection filter by IP address. If the filter returns {@code false}, the connection will be closed. */ default void setConnectFilter(Server.ServerConnectFilter connectFilter){} + + default ServerConnectFilter getConnectFilter(){ + return null; + } } } From 9af7a864bdb12f2b7b9383b551be5277d7e22441 Mon Sep 17 00:00:00 2001 From: Elixias <61173114+BlueWolf3682@users.noreply.github.com> Date: Thu, 23 Nov 2023 16:59:14 -0700 Subject: [PATCH 49/62] f (#9309) --- core/assets/maps/frozenForest.msav | Bin 10538 -> 10604 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/core/assets/maps/frozenForest.msav b/core/assets/maps/frozenForest.msav index 09f7e2a54640f5851ff14c1bf02f25b30a6cc148..e29d7199cd55249d643bdb98e78c65733e43d912 100644 GIT binary patch literal 10604 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 Date: Thu, 23 Nov 2023 19:04:17 -0500 Subject: [PATCH 50/62] arc --- core/src/mindustry/net/ArcNetProvider.java | 2 +- core/src/mindustry/net/Net.java | 6 +++--- gradle.properties | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/src/mindustry/net/ArcNetProvider.java b/core/src/mindustry/net/ArcNetProvider.java index 20715ecd4c..26b160526e 100644 --- a/core/src/mindustry/net/ArcNetProvider.java +++ b/core/src/mindustry/net/ArcNetProvider.java @@ -163,7 +163,7 @@ public class ArcNetProvider implements NetProvider{ } @Override - public ServerConnectFilter getConnectFilter(){ + public @Nullable ServerConnectFilter getConnectFilter(){ return server.getConnectFilter(); } diff --git a/core/src/mindustry/net/Net.java b/core/src/mindustry/net/Net.java index 17822d55ab..145238bf88 100644 --- a/core/src/mindustry/net/Net.java +++ b/core/src/mindustry/net/Net.java @@ -327,11 +327,11 @@ public class Net{ } /** Sets a connection filter by IP address. If the filter returns {@code false}, the connection will be closed. Server only. */ - public void setConnectFilter(ServerConnectFilter filter){ + public void setConnectFilter(@Nullable ServerConnectFilter filter){ provider.setConnectFilter(filter); } - public ServerConnectFilter getConnectFilter(){ + public @Nullable ServerConnectFilter getConnectFilter(){ return provider.getConnectFilter(); } @@ -412,7 +412,7 @@ public class Net{ /** Sets a connection filter by IP address. If the filter returns {@code false}, the connection will be closed. */ default void setConnectFilter(Server.ServerConnectFilter connectFilter){} - default ServerConnectFilter getConnectFilter(){ + default @Nullable ServerConnectFilter getConnectFilter(){ return null; } } diff --git a/gradle.properties b/gradle.properties index da998b39a0..5965736f20 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,4 +25,4 @@ org.gradle.caching=true #used for slow jitpack builds; TODO see if this actually works org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 -archash=96dd703d5d +archash=34775c79250cab391499fac8f4747365984c6923 From 589b8d9d3755933b658d626c8df980bc52cda94f Mon Sep 17 00:00:00 2001 From: TheRadioactiveBanana <89061718+TheRadioactiveBanana@users.noreply.github.com> Date: Fri, 24 Nov 2023 13:16:19 +0530 Subject: [PATCH 51/62] Eradication Mindustry Merge (#9310) Anuke finally gave the go ahead --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index e91a506b66..277809e80e 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -133,7 +133,7 @@ }, { "name": "Eradication Mindustry", - "address": ["eradicationmindustry.mindustry.me:6569", "eradicationmindustry.mindustry.me:9547", "eradicationmindustry.mindustry.me:6572", "eradicationmindustry.mindustry.me:6570", "eradicationmindustry.mindustry.me:6571", "eradicationmindustry.mindustry.me:6574", "eradicationmindustry.mindustry.me:6573", "eradicationmindustry.mindustry.me:6568", "eradicationmindustry.mindustry.me:6677", "eradicationmindustry.mindustry.me:6678", "eradicationmindustry.mindustry.me:6675"] + "address": ["140.238.246.78:6569", "140.238.246.78:9547", "140.238.246.78:6572", "140.238.246.78:6570", "140.238.246.78:6571", "140.238.246.78:6574", "140.238.246.78:6573", "140.238.246.78:6568", "140.238.246.78:6677", "140.238.246.78:6678", "140.238.246.78:6675", "130.61.22.183:6573", "130.61.22.183:6599", "130.61.22.183:6774", "130.61.22.183:6777"] }, { "name": "Conservatory", From f9d39ad31a96e6ff4f2ad2c9d134f098636be0a7 Mon Sep 17 00:00:00 2001 From: abcxyzDustry <138785336+abcxyzDustry@users.noreply.github.com> Date: Sun, 26 Nov 2023 00:54:05 +0700 Subject: [PATCH 52/62] Update servers_v7.json (#9315) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 277809e80e..05fb116b2f 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -230,7 +230,7 @@ }, { "name": "ABCXYZ Community", - "address": ["23.88.73.88:23591", "23.88.73.88:23539", "144.76.57.59:14996", "144.76.57.59:16881", "144.76.57.59:13885", "23.88.73.88:32113"] + "address": ["23.88.73.88:23591", "23.88.73.88:23539", "144.76.57.59:14996", "144.76.57.59:16881", "144.76.57.59:13885", "23.88.73.88:32113", "144.76.57.59:9269"] }, { "name": "CroCraft Network", From 8d04a6820d07481f26dd5a86827b29a3b1ee9367 Mon Sep 17 00:00:00 2001 From: OSP <76648940+osp54@users.noreply.github.com> Date: Mon, 27 Nov 2023 12:51:47 +0300 Subject: [PATCH 53/62] Update servers_v7.json (#9318) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 05fb116b2f..acdd3f3b11 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -85,7 +85,7 @@ }, { "name": "XCore", - "address": ["130.61.52.25", "130.61.52.25:6568", "130.61.52.25:6569", "130.61.52.25:6570", "130.61.52.25:6571", "130.61.52.25:6572", "130.61.52.25:6573", "130.61.52.25:6888"] + "address": ["128.140.88.66", "128.140.88.66:6568", "128.140.88.66:6569", "128.140.88.66:6570", "128.140.88.66:6571", "128.140.88.66:6572", "128.140.88.66:6573", "128.140.88.66:6574", "128.140.88.66:6575"] }, { "name": "Chaotic Neutral", From 44f7c726b524e312d5e080bbfa0624ccbe0c129b Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 27 Nov 2023 06:05:57 -0500 Subject: [PATCH 54/62] Revert #9294 --- servers_v7.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/servers_v7.json b/servers_v7.json index acdd3f3b11..53d0e4d9b4 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -55,10 +55,6 @@ "name": "SynapseOS", "address": ["0nera.ru:7777"] }, - { - "name": "Parallax Network", - "address": ["138.2.177.166","138.2.177.166:3000","138.2.177.166:3001","138.2.177.166:3002","138.2.177.166:3003","138.2.177.166:3004","138.2.177.166:3005"] - }, { "name": "Untitled Mindustry Servers", "address": ["45.144.66.250:6567", "45.144.66.250:6601", "45.144.66.250:6611"] From d759e71edc9b6bc6043f157cd7dac368ae1ea3ef Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 27 Nov 2023 06:55:40 -0500 Subject: [PATCH 55/62] Fixed bombers stopping when patrolling --- core/src/mindustry/ai/types/CommandAI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/ai/types/CommandAI.java b/core/src/mindustry/ai/types/CommandAI.java index 120360534f..0cf650ccc2 100644 --- a/core/src/mindustry/ai/types/CommandAI.java +++ b/core/src/mindustry/ai/types/CommandAI.java @@ -214,7 +214,7 @@ public class CommandAI extends AIController{ } //TODO: should the unit stop when it finds a target? - if(stance == UnitStance.patrol && target != null && unit.within(target, unit.type.range - 2f)){ + if(stance == UnitStance.patrol && target != null && unit.within(target, unit.type.range - 2f) && !unit.type.circleTarget){ move = false; } From a0c4b0e4314f086269109ed0b29c5aae5e81885d Mon Sep 17 00:00:00 2001 From: alex <67626131+alexpvpmindustry@users.noreply.github.com> Date: Mon, 27 Nov 2023 22:06:29 +0800 Subject: [PATCH 56/62] Update servers_v7.json (#9319) add more servers --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 53d0e4d9b4..01f0e15fe2 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -238,7 +238,7 @@ }, { "name": "Alex Multiverse", - "address": ["alexmindustryv7.servegame.com:25588", "173.255.208.38:41962", "alexmindustrypvp.ddns.net:6767", "172.104.188.197:6768"] + "address": ["alexmindustryv7.servegame.com:25588", "173.255.208.38:41962", "alexmindustrypvp.ddns.net:6767", "172.104.188.197:6768", "172.234.80.96:6768", "139.162.41.78:6767"] }, { "name": "Open PVP", From 0469bb5ce5e660d5db1a10c78942ce4979026bd7 Mon Sep 17 00:00:00 2001 From: The1Crux <134880334+The1Crux@users.noreply.github.com> Date: Mon, 27 Nov 2023 18:40:13 -0400 Subject: [PATCH 57/62] Update servers_v7.json (#9321) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit last servers exploded 💀 --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 01f0e15fe2..c655bdd02b 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -9,7 +9,7 @@ }, { "name": "Crux's Revelations", - "address": ["fsn1.bbn.one:52397","fsn1.bbn.one:58375","de-free-01.hosts.optikservers.com:32212","fsn1.bbn.one:49840","de-free-01.hosts.optikservers.com:30449"] + "address": ["de-free-01.hosts.optikservers.com:31528","de-prem-01.hosts.optikservers.com:35160"] }, { "name": "CMS", From 8db6ca8b593c692b704f5110fab5c130969a1d53 Mon Sep 17 00:00:00 2001 From: Github Actions Date: Tue, 28 Nov 2023 01:35:56 +0000 Subject: [PATCH 58/62] Automatic bundle update --- core/assets/bundles/bundle_be.properties | 4 +--- core/assets/bundles/bundle_bg.properties | 4 +--- core/assets/bundles/bundle_ca.properties | 4 +--- core/assets/bundles/bundle_cs.properties | 4 +--- core/assets/bundles/bundle_da.properties | 4 +--- core/assets/bundles/bundle_de.properties | 4 +--- core/assets/bundles/bundle_es.properties | 4 +--- core/assets/bundles/bundle_et.properties | 4 +--- core/assets/bundles/bundle_eu.properties | 4 +--- core/assets/bundles/bundle_fi.properties | 4 +--- core/assets/bundles/bundle_fil.properties | 4 +--- core/assets/bundles/bundle_fr.properties | 4 +--- core/assets/bundles/bundle_hu.properties | 4 +--- core/assets/bundles/bundle_id_ID.properties | 4 +--- core/assets/bundles/bundle_it.properties | 4 +--- core/assets/bundles/bundle_ja.properties | 4 +--- core/assets/bundles/bundle_ko.properties | 4 +--- core/assets/bundles/bundle_lt.properties | 4 +--- core/assets/bundles/bundle_nl.properties | 4 +--- core/assets/bundles/bundle_nl_BE.properties | 4 +--- core/assets/bundles/bundle_pl.properties | 4 +--- core/assets/bundles/bundle_pt_BR.properties | 4 +--- core/assets/bundles/bundle_pt_PT.properties | 4 +--- core/assets/bundles/bundle_ro.properties | 4 +--- core/assets/bundles/bundle_ru.properties | 4 +--- core/assets/bundles/bundle_sr.properties | 4 +--- core/assets/bundles/bundle_sv.properties | 4 +--- core/assets/bundles/bundle_th.properties | 4 +--- core/assets/bundles/bundle_tk.properties | 4 +--- core/assets/bundles/bundle_tr.properties | 4 +--- core/assets/bundles/bundle_uk_UA.properties | 4 +--- core/assets/bundles/bundle_vi.properties | 4 +--- core/assets/bundles/bundle_zh_CN.properties | 4 +--- core/assets/bundles/bundle_zh_TW.properties | 4 +--- 34 files changed, 34 insertions(+), 102 deletions(-) diff --git a/core/assets/bundles/bundle_be.properties b/core/assets/bundles/bundle_be.properties index 344fadea63..bb595100d0 100644 --- a/core/assets/bundles/bundle_be.properties +++ b/core/assets/bundles/bundle_be.properties @@ -1749,7 +1749,6 @@ block.disperse.name = Разыход block.afflict.name = Пакута block.lustre.name = Блеск block.scathe.name = Паражэнне -block.fabricator.name = Фабрыкатар block.tank-refabricator.name = Рэфабрыкатар Танкаў block.mech-refabricator.name = Рэфабрыкатар Мяхоў block.ship-refabricator.name = Рэфабрыкатар Суднаў @@ -2066,7 +2065,6 @@ block.logic-display.description = Displays arbitrary graphics from a logic proce block.large-logic-display.description = Displays arbitrary graphics from a logic processor. block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. -block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2102,7 +2100,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2294,6 +2291,7 @@ graphicstype.poly = Fill a regular polygon. graphicstype.linepoly = Draw a regular polygon outline. graphicstype.triangle = Fill a triangle. graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Always true. lenum.idiv = Integer division. lenum.div = Division.\nReturns [accent]null[] on divide-by-zero. diff --git a/core/assets/bundles/bundle_bg.properties b/core/assets/bundles/bundle_bg.properties index 83acf8215c..e4c21ee198 100644 --- a/core/assets/bundles/bundle_bg.properties +++ b/core/assets/bundles/bundle_bg.properties @@ -1761,7 +1761,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricator block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator block.ship-refabricator.name = Ship Refabricator @@ -2079,7 +2078,6 @@ block.logic-display.description = Позволява изобразяванет block.large-logic-display.description = Позволява изобразяването на графика чрез процесор. block.interplanetary-accelerator.description = Масивна електромагнитна релсова кула. Ускорява ядрата до необходимата скорост за междупланетно изстрелване. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. -block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2115,7 +2113,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2313,6 +2310,7 @@ graphicstype.poly = Запълва правилен многоъгълник. graphicstype.linepoly = Очертава правилен многоъгълник. graphicstype.triangle = Запълва триъгълник. graphicstype.image = Рисува изображение.\nНапример: [accent]@router[] или [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Винаги вярно lenum.idiv = Деление с цели числа. diff --git a/core/assets/bundles/bundle_ca.properties b/core/assets/bundles/bundle_ca.properties index 98a4fc40ef..d334a07bb2 100644 --- a/core/assets/bundles/bundle_ca.properties +++ b/core/assets/bundles/bundle_ca.properties @@ -1770,7 +1770,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricadora block.tank-refabricator.name = Milloradora de tancs block.mech-refabricator.name = Milloradora de meques block.ship-refabricator.name = Milloradora de naus @@ -2089,7 +2088,6 @@ block.logic-display.description = Mostra un gràfic des d’un processador lògi block.large-logic-display.description = Mostra un gràfic des d’un processador lògic. block.interplanetary-accelerator.description = Una torreta amb un canó electromagnètic enorme. Accelera els nuclis fins aconseguir la velocitat d’escapament per a fer llançaments interplanetaris. block.repair-turret.description = Repara contínuament la unitat danyada que tingui més a prop al seu voltant. També se li pot subministrar refrigerant perquè funcioni més ràpid. -block.payload-propulsion-tower.description = Estructura de transport de recursos a distància. Dispara paquets de càrrega a altres torres de transport a distància enllaçades. block.core-bastion.description = Nucli de la base. Blindat. Quan es destrueix, es perd el sector. block.core-citadel.description = Nucli de la base. Molt ben blindat. Emmagatzema més recursos que un nucli Bastió. block.core-acropolis.description = Nucli de la base. Excepcionalment ben blindat. Emmagatzema més recursos que un nucli Ciutadella. @@ -2125,7 +2123,6 @@ block.impact-drill.description = Quan es posa a sobre de minerals, n’extrau in block.eruption-drill.description = Una perforadora d’impacte millorada. Pot extraure tori. Necessita hidrogen. block.reinforced-conduit.description = Impulsa i fa circular els fluids. No accepta entrades des dels laterals si no és a través de conductes. block.reinforced-liquid-router.description = Distribueix fluids a tots els seus costats. -block.reinforced-junction.description = Actua com a dues canonades independents que es creuen. block.reinforced-liquid-tank.description = Emmagatzema una gran quantitat de fluid. block.reinforced-liquid-container.description = Emmagatzema fluids. block.reinforced-bridge-conduit.description = Transporta fluids per sota de les estructures i del terreny. @@ -2323,6 +2320,7 @@ graphicstype.poly = Omple un polígon regular. graphicstype.linepoly = Dibuixa els costats d’un polígon regular. graphicstype.triangle = Omple un triangle. graphicstype.image = Dibuixa una imatge d’algun element del joc.\nPer exemple: [accent]@router[] o [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Sempre cert. lenum.idiv = Divisió entera. diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index b6b77cb5de..573074df31 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -1764,7 +1764,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabrikátor block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator block.ship-refabricator.name = Ship Refabricator @@ -2083,7 +2082,6 @@ block.logic-display.description = Zobrazuje libovolnou grafiku z logického proc block.large-logic-display.description = Zobrazuje libovolnou grafiku z logického procesoru. block.interplanetary-accelerator.description = Masivní elektromagnetická věž. Urychlí jádro na únikovou rychlost pro meziplanetární vyslání. block.repair-turret.description = Nepřetržitě opravuje nejblížší poškozenou jednotku v jeho blízkosti. Lze volitelně dodávat chlazení pro jeho posílení. -block.payload-propulsion-tower.description = Dálková nákladní transportní věž. Střílí náklad do dalších propojených nákladních transportních věží. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2119,7 +2117,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2317,6 +2314,7 @@ graphicstype.poly = Vyplní pravidelný mnohoúhelník. graphicstype.linepoly = Nakreslí obrys pravidelného mnohoúhelníku. graphicstype.triangle = Vyplní trojúhelník. graphicstype.image = Vykreslí obrázek nějakého obsahu.\nnapř.: [accent]@router[] nebo [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Vždy pravda. lenum.idiv = Číselné dělení. diff --git a/core/assets/bundles/bundle_da.properties b/core/assets/bundles/bundle_da.properties index 2bdc8da595..433f80e1a0 100644 --- a/core/assets/bundles/bundle_da.properties +++ b/core/assets/bundles/bundle_da.properties @@ -1751,7 +1751,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricator block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator block.ship-refabricator.name = Ship Refabricator @@ -2066,7 +2065,6 @@ block.logic-display.description = Displays arbitrary graphics from a logic proce block.large-logic-display.description = Displays arbitrary graphics from a logic processor. block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. -block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2102,7 +2100,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2294,6 +2291,7 @@ graphicstype.poly = Fill a regular polygon. graphicstype.linepoly = Draw a regular polygon outline. graphicstype.triangle = Fill a triangle. graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Always true. lenum.idiv = Integer division. lenum.div = Division.\nReturns [accent]null[] on divide-by-zero. diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index e87333434a..ec44d25f83 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -1780,7 +1780,6 @@ block.disperse.name = Streu block.afflict.name = Afflikt block.lustre.name = Lustre block.scathe.name = Skate -block.fabricator.name = Hersteller block.tank-refabricator.name = Panzerverbesserer block.mech-refabricator.name = Mechverbesserer block.ship-refabricator.name = Schiffverbesserer @@ -2110,7 +2109,6 @@ block.logic-display.description = Zeigt mithilfe eines Prozessors Beliebiges an. block.large-logic-display.description = Zeigt mithilfe eines Prozessors Beliebiges an. block.interplanetary-accelerator.description = Ein Riesen-Railgun-Turm, der mithilfe des Elektromagnetismus Kerne auf die nötige Geschwindigkeit bringt, um interplanetarisches Reisen zu ermöglichen. block.repair-turret.description = Heilt durchgehend die nächste befreundete, beschädigte Einheit in der Umgebung. Verwendet optional Kühlung. -block.payload-propulsion-tower.description = Frachttransportationsturm mit hoher Reichweite. Schießt Fracht zu verbundenen Türmen. #Erekir block.core-bastion.description = Kern der Basis. Gepanzert. Einmal zerstört, ist jeglicher Kontakt zum Sektor verloren. @@ -2148,7 +2146,6 @@ block.impact-drill.description = Baut unbefristet Erze in Schüben aus dem Boden block.eruption-drill.description = Ein verbesserter Schlagbohrer. Kann Thorium abbauen. Benötigt Wasserstoff. block.reinforced-conduit.description = Transportiert Flüssigkeiten. Nimmt von nicht-Kanälen nur von hinten an. block.reinforced-liquid-router.description = Verteilt Flüssigkeiten gleichmäßig auf bis zu drei Richtungen. -block.reinforced-junction.description = Kann als Brücke für zwei sich kreuzende Kanäle verwendet werden. block.reinforced-liquid-tank.description = Lagert eine große Menge an Flüssigkeiten. block.reinforced-liquid-container.description = Lagert eine beträchtliche Menge an Flüssigkeiten. block.reinforced-bridge-conduit.description = Transportiert Flüssigkeiten über Blöcke und Terrain. @@ -2349,6 +2346,7 @@ graphicstype.poly = Füllt ein gleichmäßiges Polygon. graphicstype.linepoly = Zeichnet den Umriss eines gleichmäßigen Polygons. graphicstype.triangle = Zeichnet ein Dreieck. graphicstype.image = Zeichnet ein Bild von einem englischen Namen.\nz.B. [accent]@router[] oder [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Immer. lenum.idiv = Division mit ganzen Zahlen. diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 4c34ddbde4..d0f31317af 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -1776,7 +1776,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricador block.tank-refabricator.name = Refabricador de tanques block.mech-refabricator.name = Refabricador de mechs block.ship-refabricator.name = Refabricador de aeronaves @@ -2102,7 +2101,6 @@ block.logic-display.description = Muestra gráficos arbitrarios dibujados desde block.large-logic-display.description = Muestra gráficos arbitrarios dibujados desde un procesador lógico. block.interplanetary-accelerator.description = Una torre de proyección electromagnética masiva. Acelera núcleos hasta la velocidad necesaria para escapar del campo gravitatorio del planeta, habilitando el despliegue interplanetario. block.repair-turret.description = Repara continuamente la unidad dañada más cercana dentro de su alcance. Opcionalmente acepta refrigerante. -block.payload-propulsion-tower.description = Estructura que permite transportar otras estructuras a largo alcance. Dispara cargas, tales como unidades o bloques hasta otras torres de propulsión elazadas. # Erekir block.core-bastion.description = Núcleo de la base. Blindado. Una vez destruido, se pierde toda comunicación con el sector. @@ -2140,7 +2138,6 @@ block.impact-drill.description = Si se coloca sobre un mineral, extraerá ráfag block.eruption-drill.description = Un taladro de impacto mejorado, capaz de extraer torio. Requiere hidrógeno. block.reinforced-conduit.description = Mueve fluidos en una dirección. Sus lados no se conectarán con otros tipos de bloques, salvo que también sean tuberías. block.reinforced-liquid-router.description = Distribuye fluidos equitativamente en todas direcciones. -block.reinforced-junction.description = Funciona como un puente para dos tuberías que se cruzan. block.reinforced-liquid-tank.description = Almacena una gran cantidad de fluidos. block.reinforced-liquid-container.description = Almacena una cantidad considerable de fluidos. block.reinforced-bridge-conduit.description = Transporta fluidos sobre el terreno o estructuras. @@ -2342,6 +2339,7 @@ graphicstype.poly = Rellena un polígono regular. graphicstype.linepoly = Dibuja las aristas de un polígono regular. graphicstype.triangle = Rellena un triángulo. graphicstype.image = Dibuja una imagen de algún contenido.\nEjemplo: [accent]@router[] o [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Siempre "true". lenum.idiv = División de un número entero. diff --git a/core/assets/bundles/bundle_et.properties b/core/assets/bundles/bundle_et.properties index 3b9c3781fb..e315dfc24d 100644 --- a/core/assets/bundles/bundle_et.properties +++ b/core/assets/bundles/bundle_et.properties @@ -1751,7 +1751,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricator block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator block.ship-refabricator.name = Ship Refabricator @@ -2068,7 +2067,6 @@ block.logic-display.description = Displays arbitrary graphics from a logic proce block.large-logic-display.description = Displays arbitrary graphics from a logic processor. block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. -block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2104,7 +2102,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2296,6 +2293,7 @@ graphicstype.poly = Fill a regular polygon. graphicstype.linepoly = Draw a regular polygon outline. graphicstype.triangle = Fill a triangle. graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Always true. lenum.idiv = Integer division. lenum.div = Division.\nReturns [accent]null[] on divide-by-zero. diff --git a/core/assets/bundles/bundle_eu.properties b/core/assets/bundles/bundle_eu.properties index e8d9787f85..2db4ff04d5 100644 --- a/core/assets/bundles/bundle_eu.properties +++ b/core/assets/bundles/bundle_eu.properties @@ -1753,7 +1753,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricator block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator block.ship-refabricator.name = Ship Refabricator @@ -2070,7 +2069,6 @@ block.logic-display.description = Displays arbitrary graphics from a logic proce block.large-logic-display.description = Displays arbitrary graphics from a logic processor. block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. -block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2106,7 +2104,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2298,6 +2295,7 @@ graphicstype.poly = Fill a regular polygon. graphicstype.linepoly = Draw a regular polygon outline. graphicstype.triangle = Fill a triangle. graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Always true. lenum.idiv = Integer division. lenum.div = Division.\nReturns [accent]null[] on divide-by-zero. diff --git a/core/assets/bundles/bundle_fi.properties b/core/assets/bundles/bundle_fi.properties index f8dc7f471d..9962837363 100644 --- a/core/assets/bundles/bundle_fi.properties +++ b/core/assets/bundles/bundle_fi.properties @@ -1753,7 +1753,6 @@ block.disperse.name = Hälvennys block.afflict.name = Aiheuttaja block.lustre.name = Kiilto block.scathe.name = Vahinko -block.fabricator.name = Valmistaja block.tank-refabricator.name = Tankkijälleenrakentaja block.mech-refabricator.name = Robottijälleenrakentaja block.ship-refabricator.name = Ilma-alusjälleenrakentaja @@ -2071,7 +2070,6 @@ block.logic-display.description = Näyttää mielivaltaista ggrafiikkaa prosesso block.large-logic-display.description = Näyttää mielivaltaista ggrafiikkaa prosessorista. block.interplanetary-accelerator.description = Massiivinen sähkömagneettinen raidetykkitorni. Kiihdyttää ytimiä pakonopeuteen interplanetaarista leviämistä varten. block.repair-turret.description = Korjaa jatkuvasti lähintä vahingoittunutta yksikköä lähellään. Käyttää vaihtoehtoisesti jäähdytysnestettä. -block.payload-propulsion-tower.description = Pitkän kantaman lastinsiirtorakennus. Ampuu lastia muihin yhdistettyihin massakiihdytystorneihin. block.core-bastion.description = Tukikohdan ydin. Panssaroitu. Mikäli tuhottu, sektori on menetetty. block.core-citadel.description = Tukikohdan ydin. Tosi hyvin panssaroitu. Varastoi enemmän tavaraa kuin Linnaydin. block.core-acropolis.description = Tukikohdan ydin. Hemmetin hyvin panssaroitu. Varastoi enemmän tavaraa kuin Sitadelliydin. @@ -2107,7 +2105,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2299,6 +2296,7 @@ graphicstype.poly = Piirrä säännöllinen monikulmio. graphicstype.linepoly = Piirrä säännöllisen monikulmion ääriviivat. graphicstype.triangle = Piirrä täytetty kolmio. graphicstype.image = Piirrä kuva jostain sisällöstä.\nEsim: [accent]@router[] tai [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Aina tosi. lenum.idiv = Kokonaislukujen osamäärä. lenum.div = Osamäärä.\nPalauttaa arvon [accent]null[] jaettaessa nollalla. diff --git a/core/assets/bundles/bundle_fil.properties b/core/assets/bundles/bundle_fil.properties index 0920a69b5e..01780b4db8 100644 --- a/core/assets/bundles/bundle_fil.properties +++ b/core/assets/bundles/bundle_fil.properties @@ -1750,7 +1750,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricator block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator block.ship-refabricator.name = Ship Refabricator @@ -2067,7 +2066,6 @@ block.logic-display.description = Displays arbitrary graphics from a logic proce block.large-logic-display.description = Displays arbitrary graphics from a logic processor. block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. -block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2103,7 +2101,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2295,6 +2292,7 @@ graphicstype.poly = Fill a regular polygon. graphicstype.linepoly = Draw a regular polygon outline. graphicstype.triangle = Fill a triangle. graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Always true. lenum.idiv = Integer division. lenum.div = Division.\nReturns [accent]null[] on divide-by-zero. diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index 6c4629d828..fb44cebe88 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -1785,7 +1785,6 @@ block.disperse.name = Propagateur block.afflict.name = Éclateur block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricateur block.tank-refabricator.name = Refabricateur de Tanks block.mech-refabricator.name = Refabricateur de Mécas block.ship-refabricator.name = Refabricateur de Vaisseaux @@ -2111,7 +2110,6 @@ block.logic-display.description = Affiche des images à partir des instructions block.large-logic-display.description = Affiche des images à partir des instructions d'un processeur logique. Possède une plus grande résolution qu'un écran. block.interplanetary-accelerator.description = Un énorme canon électromagnétique à rails. Accélère les Noyaux pour qu'ils échappent à la gravité de leur planète et leur permettent un déploiement interplanétaire. block.repair-turret.description = Répare en continu l'unité endommagée la plus proche dans son périmètre. Accepte le liquide de refroidissement en option. -block.payload-propulsion-tower.description = Structure de transport de charges utiles à longue portée. Projette des charges utiles vers d'autres tours de propulsion de charges utiles reliées. #Erekir block.core-bastion.description = Le cœur de votre base. Blindé. Une fois détruit, le secteur est perdu. @@ -2149,7 +2147,6 @@ block.impact-drill.description = Lorsqu'il est placé sur du minerai, il produit block.eruption-drill.description = Une foreuse à impact améliorée. Capable d'extraire du thorium. Requiert de l'hydrogène. block.reinforced-conduit.description = Déplace les fluides. N'accepte pas les entrées sans conduit sur les côtés. block.reinforced-liquid-router.description = Accepte les fluides depuis une direction et les distribue jusqu'à 3 directions équitablement. -block.reinforced-junction.description = Agit comme un pont entre deux conduits qui se croisent. block.reinforced-liquid-tank.description = Stocke une grande quantité de fluides. block.reinforced-liquid-container.description = Stocke une quantité importante de fluides. block.reinforced-bridge-conduit.description = Transporte les fluides par-dessus les structures et le terrain. @@ -2350,6 +2347,7 @@ graphicstype.poly = Dessine un polygone régulier. graphicstype.linepoly = Dessine le contour d'un polygone régulier. graphicstype.triangle = Dessine un triangle. graphicstype.image = Dessine une image provenant du contenu du jeu.\nexemple: [accent]@router[] ou [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Toujours [accent]true[]. lenum.idiv = Division entière. diff --git a/core/assets/bundles/bundle_hu.properties b/core/assets/bundles/bundle_hu.properties index 3aa426f974..b1af857920 100644 --- a/core/assets/bundles/bundle_hu.properties +++ b/core/assets/bundles/bundle_hu.properties @@ -1785,7 +1785,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabrikátor block.tank-refabricator.name = Tank Újratervező block.mech-refabricator.name = Mech Újratervező block.ship-refabricator.name = Repülőgép Újratervező @@ -2111,7 +2110,6 @@ block.logic-display.description = Ábrák rajzolhatók rá processzorral. block.large-logic-display.description = Ábrák rajzolhatók rá processzorral. block.interplanetary-accelerator.description = Hatalmas elektromágneses gyorsítótorony. Képes Magokat szökési sebességre gyorsítani bolygóközi bevetéshez. block.repair-turret.description = Folyamatosan javítja a környezetében lévő legközelebbi sérült egységet. Opcionálisan elfogadja a Hűtőfolyadékot. -block.payload-propulsion-tower.description = Nagy hatótávolságú rakományszállító szerkezet. Kilövi a rakományt a vele összekapcsolt tornyokba. #Erekir block.core-bastion.description = Mag. Páncélozott. Ha elpusztul, a szektor elveszett. @@ -2149,7 +2147,6 @@ block.impact-drill.description = Ha ércre helyezik, korlátlan ideig, sorozatba block.eruption-drill.description = Továbbfejlesztett ütvefúró. Képes Tóriumot bányászni. Hidrogént igényel. block.reinforced-conduit.description = Előre szállítja a folyadékokat. Nem fogadja el a nem csővezetékes bemeneteket oldalról. block.reinforced-liquid-router.description = Egyenletesen osztja el a folyadékokat minden oldalra. -block.reinforced-junction.description = Hídként működik két egymást keresztező csővezeték között. block.reinforced-liquid-tank.description = Nagy mennyiségű folyadékot tárol. block.reinforced-liquid-container.description = Jelentős mennyiségű folyadékot tárol. block.reinforced-bridge-conduit.description = Folyadékok szállítása szerkezeteken és terepen keresztül. @@ -2350,6 +2347,7 @@ graphicstype.poly = Egy szabályos sokszög kitöltése. graphicstype.linepoly = Rajzolj egy szabályos sokszög körvonalat. graphicstype.triangle = Töltsön ki egy háromszöget. graphicstype.image = Rajzolj egy képet valamilyen tartalomról.\nex: [accent]@router[] vagy [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Mindig igaz. lenum.idiv = Egész számok osztása. diff --git a/core/assets/bundles/bundle_id_ID.properties b/core/assets/bundles/bundle_id_ID.properties index e30ba5a9dd..b43bfac379 100644 --- a/core/assets/bundles/bundle_id_ID.properties +++ b/core/assets/bundles/bundle_id_ID.properties @@ -1776,7 +1776,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabrikator block.tank-refabricator.name = Refabrikator Tank block.mech-refabricator.name = Refabrikator Mech block.ship-refabricator.name = Refabrikator Kapal @@ -2101,7 +2100,6 @@ block.logic-display.description = Menampilkan grafik sembarang dari prosesor. block.large-logic-display.description = Menampilkan grafik sembarang dari prosesor. Lebih besar. block.interplanetary-accelerator.description = Sebuah menara railgun elektromagnetik raksasa. Meluncurkan Inti dengan kecepatan tinggi untuk peluncuran antarplanet. block.repair-turret.description = Memperbaiki unit terdekat yang sekarat dalam jangkauan secara terus-menerus. Dapat menerima pendingin. -block.payload-propulsion-tower.description = Bangunan transportasi muatan jarak jauh. Menembakkan muatan pada menara penggerak muatan lainnya yang terhubung. #Erekir block.core-bastion.description = Inti markas. Terlindungi. Jika hancur, sektor jatuh ke tangan musuh. @@ -2139,7 +2137,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2340,6 +2337,7 @@ graphicstype.poly = Mengisi sebuah poligon beraturan. graphicstype.linepoly = Menggambar sebuah garis poligon beraturan. graphicstype.triangle = Mengisi sebuah segitiga. graphicstype.image = Membentuk sebuah gambar dari suatu konten.\nMisal: [accent]@router[] atau [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Selalu benar. lenum.idiv = Pembagian integer. diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties index 9d2723d67b..65cc5f965c 100644 --- a/core/assets/bundles/bundle_it.properties +++ b/core/assets/bundles/bundle_it.properties @@ -1762,7 +1762,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricator block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator block.ship-refabricator.name = Ship Refabricator @@ -2080,7 +2079,6 @@ block.logic-display.description = Visualizza la grafica arbitraria elaborata da block.large-logic-display.description = Visualizza la grafica arbitraria elaborata dal processore. block.interplanetary-accelerator.description = Una massiccia torre che utilizza potenti campi elettromagnetici. Accelera nuclei fino alla velocità di fuga per un impiego interplanetario. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. -block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2116,7 +2114,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2309,6 +2306,7 @@ graphicstype.poly = Fill a regular polygon. graphicstype.linepoly = Draw a regular polygon outline. graphicstype.triangle = Fill a triangle. graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Always true. lenum.idiv = Integer division. lenum.div = Division.\nReturns [accent]null[] on divide-by-zero. diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index 8f89ae608d..47f5fa4d70 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -1765,7 +1765,6 @@ block.disperse.name = ディスパーズ block.afflict.name = アフリクト block.lustre.name = ラストル block.scathe.name = スケース -block.fabricator.name = ファブリケーター block.tank-refabricator.name = 戦車再加工工場 block.mech-refabricator.name = メカ再加工工場 block.ship-refabricator.name = 戦艦再加工工場 @@ -2084,7 +2083,6 @@ block.logic-display.description = プロセッサからの任意のグラフィ block.large-logic-display.description = プロセッサからの任意のグラフィックを表示します。 block.interplanetary-accelerator.description = 巨大な電磁レールガンタワーです。別惑星への展開のためにコアを重力圏脱出可能速度まで加速します。 block.repair-turret.description = 範囲内の損傷したブロックを近い順に継続的に修復します。オプションで冷却液を活用できます。 -block.payload-propulsion-tower.description = 長距離ペイロード輸送構造です。他の接続されたペイロード推進タワーにペイロードを発射します。 block.core-bastion.description = 基本的な堅いコアです。一度破壊されると、セクターを失います。破壊されないようにしましょう。 block.core-citadel.description = バージョンアップしたコアです。 より優れた耐久を持っています。 バスティオンコアよりも多くの資源を格納します。 block.core-acropolis.description = さらにバージョンアップしたコアです。 非常に優れた耐久を持っています。 シタデルコアよりも多くの資源を格納します。 @@ -2120,7 +2118,6 @@ block.impact-drill.description = 鉱石の上に置くと、一定の間隔で block.eruption-drill.description = 改良されたインパクトドリルです。 トリウムの採掘が可能。 電力と水素が必要です。 block.reinforced-conduit.description = 液体または気体を輸送します。 側面からの搬入を受け入れません。 block.reinforced-liquid-router.description = 液体をすべての向きに均等に分配します。 -block.reinforced-junction.description = 交差する 2 つのパイプのブリッジとして機能します。 block.reinforced-liquid-tank.description = 大量の液体を蓄えることができます。 block.reinforced-liquid-container.description = 中量の液体を蓄えることができます。 block.reinforced-bridge-conduit.description = 構造物や地形の上に液体を輸送させることができます。 @@ -2313,6 +2310,7 @@ graphicstype.poly = 塗りつぶされた多角形を描きます。 graphicstype.linepoly = 輪郭だけの多角形を描きます。 graphicstype.triangle = 塗りつぶされた三角形を描きます。 graphicstype.image = 何らかのコンテンツのイメージを描画します。\n例: [accent]@router[] や [accent]@dagger[]など。 +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = 常にtrueを返します。 lenum.idiv = 整数の割り算をします。 lenum.div = 割り算をします。\nゼロ除算で [accent]null[] を返します。 diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index ad67c57a15..9843f25f70 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -1764,7 +1764,6 @@ block.disperse.name = 디스퍼스 block.afflict.name = 어플릭트 block.lustre.name = 러스터 block.scathe.name = 스캐드 -block.fabricator.name = 조립기 block.tank-refabricator.name = 전차 재조립기 block.mech-refabricator.name = 기계 재조립기 block.ship-refabricator.name = 함선 재조립기 @@ -2082,7 +2081,6 @@ block.logic-display.description = 프로세서를 이용해 임의로 그래픽 block.large-logic-display.description = 프로세서를 이용해 임의로 그래픽을 출력할 수 있습니다. block.interplanetary-accelerator.description = 거대한 전자기 레일건 타워. 행성 간 이동을 위한 탈출 속도까지 코어를 가속합니다. block.repair-turret.description = 피해를 입은 가장 가까운 기체를 지속적으로 수리합니다. 선택적으로 냉각수를 넣을 수 있습니다. -block.payload-propulsion-tower.description = 장거리 화물 운송 구조물. 화물을 연결된 다른 화물 드라이버로 발사합니다. block.core-bastion.description = 기지의 핵심입니다. 튼튼합니다. 한번 파괴되면, 구역을 잃습니다. block.core-citadel.description = 기지의 핵심입니다. 더 튼튼합니다. 코어: 요새보다 더 많은 양의 자원을 저장합니다. block.core-acropolis.description = 기지의 핵심입니다. 매우 튼튼합니다. 코어: 성채보다 더 많은 양의 자원을 저장합니다. @@ -2118,7 +2116,6 @@ block.impact-drill.description = 광석에 배치하면 자원을 한번에 몰 block.eruption-drill.description = 개선된 충격 드릴. 토륨을 채굴할 수 있습니다. 수소가 필요합니다. block.reinforced-conduit.description = 유체를 앞으로 이동합니다. 측면에서 파이프가 아닌 입력을 허용하지 않습니다. block.reinforced-liquid-router.description = 유체를 모든 면에 균등하게 분배합니다. -block.reinforced-junction.description = 두 개의 교차 파이프를 위한 다리 역할을 합니다. block.reinforced-liquid-tank.description = 대량의 유체를 저장합니다. block.reinforced-liquid-container.description = 상당량의 유체를 저장합니다. block.reinforced-bridge-conduit.description = 구조물 및 지형 위로 유체를 운반합니다. @@ -2316,6 +2313,7 @@ graphicstype.poly = 정다각형 채우기 graphicstype.linepoly = 정다각형 외곽선 그리기 graphicstype.triangle = 삼각형 채우기 graphicstype.image = 일부 콘텐츠의 이미지 그리기\n예: [accent]@router[] 또는 [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = 항상 참 lenum.idiv = 정수 나누기 diff --git a/core/assets/bundles/bundle_lt.properties b/core/assets/bundles/bundle_lt.properties index 6a3f6578de..c419d033ef 100644 --- a/core/assets/bundles/bundle_lt.properties +++ b/core/assets/bundles/bundle_lt.properties @@ -1751,7 +1751,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricator block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator block.ship-refabricator.name = Ship Refabricator @@ -2068,7 +2067,6 @@ block.logic-display.description = Displays arbitrary graphics from a logic proce block.large-logic-display.description = Displays arbitrary graphics from a logic processor. block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. -block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2104,7 +2102,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2296,6 +2293,7 @@ graphicstype.poly = Fill a regular polygon. graphicstype.linepoly = Draw a regular polygon outline. graphicstype.triangle = Fill a triangle. graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Always true. lenum.idiv = Integer division. lenum.div = Division.\nReturns [accent]null[] on divide-by-zero. diff --git a/core/assets/bundles/bundle_nl.properties b/core/assets/bundles/bundle_nl.properties index 5907749572..096b01124c 100644 --- a/core/assets/bundles/bundle_nl.properties +++ b/core/assets/bundles/bundle_nl.properties @@ -1764,7 +1764,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricator block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator block.ship-refabricator.name = Ship Refabricator @@ -2081,7 +2080,6 @@ block.logic-display.description = Displays arbitrary graphics from a logic proce block.large-logic-display.description = Displays arbitrary graphics from a logic processor. block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. -block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2117,7 +2115,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2309,6 +2306,7 @@ graphicstype.poly = Fill a regular polygon. graphicstype.linepoly = Draw a regular polygon outline. graphicstype.triangle = Fill a triangle. graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Always true. lenum.idiv = Integer division. lenum.div = Division.\nReturns [accent]null[] on divide-by-zero. diff --git a/core/assets/bundles/bundle_nl_BE.properties b/core/assets/bundles/bundle_nl_BE.properties index 2be8645e35..74caec860a 100644 --- a/core/assets/bundles/bundle_nl_BE.properties +++ b/core/assets/bundles/bundle_nl_BE.properties @@ -1751,7 +1751,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricator block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator block.ship-refabricator.name = Ship Refabricator @@ -2068,7 +2067,6 @@ block.logic-display.description = Displays arbitrary graphics from a logic proce block.large-logic-display.description = Displays arbitrary graphics from a logic processor. block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. -block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2104,7 +2102,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2296,6 +2293,7 @@ graphicstype.poly = Fill a regular polygon. graphicstype.linepoly = Draw a regular polygon outline. graphicstype.triangle = Fill a triangle. graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Always true. lenum.idiv = Integer division. lenum.div = Division.\nReturns [accent]null[] on divide-by-zero. diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index b5623f6987..c618f1421a 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -1772,7 +1772,6 @@ block.disperse.name = Burza block.afflict.name = Cios block.lustre.name = Błysk block.scathe.name = Zamęt -block.fabricator.name = Fabrykator block.tank-refabricator.name = Konstruktor Czołgów block.mech-refabricator.name = Konstruktor Mechów block.ship-refabricator.name = Konstruktor Statków @@ -2090,7 +2089,6 @@ block.logic-display.description = Wyświetla obraz z procesora. block.large-logic-display.description = Wyświetla obraz z procesora. block.interplanetary-accelerator.description = Masywna elektromagnetyczna wieża. Przyspiesza rdzeń do prędkości ucieczki by wylądować na innych planetach. block.repair-turret.description = Na bieżąco naprawia najbliższą uszkodzoną jednostkę w jej sąsiedztwie. Opcjonalnie akceptuje chłodziwo. -block.payload-propulsion-tower.description = Konstrukcja o dużym zasięgu do transportu ładunków. Strzela ładunkami do innych podłączonych wież napędowych ładunku. block.core-bastion.description = Rdzeń bazy. Uzbrojony. Po zniszczeniu tracisz sektor. block.core-citadel.description = Rdzeń bazy. Bardzo dobrze uzbrojony. Składuje wiecej zasobów niż rdzeń Bastion. block.core-acropolis.description = Rdzeń bazy. Wyjątkowo dobrze uzbrojony. Składuje wiecej zasobów niż rdzeń Cytadela. @@ -2126,7 +2124,6 @@ block.impact-drill.description = Kiedy stoi na rudzie, wydobywa surowce seriami. block.eruption-drill.description = Ulepszona wersja wiertła wybuchowego. Zdolne do wydobycia toru. Potrzebuje wodoru do działania. block.reinforced-conduit.description = Służy do przemieszczania płynów i gazów. Od boku można podłączyć tylko inne rury. block.reinforced-liquid-router.description = Równo rozdziela płyn do wszystkich podłączonych rur. -block.reinforced-junction.description = Pozwala na przecięcie się dwóch rur, bez mieszania ich zawartości. block.reinforced-liquid-tank.description = Przechowuje duże ilości płynów. block.reinforced-liquid-container.description = Przechowuje umiarkowane ilości płynów. block.reinforced-bridge-conduit.description = Transportuje płyny nad rozmaitymi przeszkodami. @@ -2336,6 +2333,7 @@ graphicstype.poly = Wypełnia wielokąt foremny. graphicstype.linepoly = Rysuje obwód wielokąta foremnego. graphicstype.triangle = Wypełnia trójkąt. graphicstype.image = Rysuje ikonę jakiejś treści.\nnp. [accent]@router[] lub [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Zawsze prawda. lenum.idiv = Dzielenie liczb całkowitych. diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index 3ebb454423..e304212ffd 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -1771,7 +1771,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricador block.tank-refabricator.name = Refabricador de Tanque block.mech-refabricator.name = Refabricador de Mech block.ship-refabricator.name = Refrabricador de Nave @@ -2098,7 +2097,6 @@ block.logic-display.description = Exibe gráficos arbitrários de um processador block.large-logic-display.description = Exibe gráficos arbitrários de um processador lógico. block.interplanetary-accelerator.description = Uma enorme torre eletromagnética. Acelera a velocidade de fuga dos núcleos para o desdobramento interplanetário. block.repair-turret.description = Conserta continuamente a unidade danificada mais próxima a ela. Opcionalmente, aceita líquido refrigerante. -block.payload-propulsion-tower.description = Estrutura de transporte de carga de longo alcance. Atira cargas para outras torres de propulsão de carga interligadas. #Erekir block.core-bastion.description = O núcleo da base. Blindado. Uma vez destruído, o setor é perdido. @@ -2136,7 +2134,6 @@ block.impact-drill.description = Quando colocados sobre minério, os itens saem block.eruption-drill.description = Uma Broca de Impacto melhorada. Capaz de minerar Tório. Requer Hidrogênio. block.reinforced-conduit.description = Movimenta fluidos para frente. Não aceita entradas de outros blocos, a não ser canos, dos lados. block.reinforced-liquid-router.description = Distribui fluidos igualmente para todos os lados. -block.reinforced-junction.description = Funciona como uma ponte para dois canos se cruzando. block.reinforced-liquid-tank.description = Armazena uma grande quantidade de fluidos. block.reinforced-liquid-container.description = Armazena uma quantidade considerável de fluidos. block.reinforced-bridge-conduit.description = Transporta fluidos sobre estruturas e terrenos. @@ -2335,6 +2332,7 @@ graphicstype.poly = Preenche um polígono regular. graphicstype.linepoly = Desenha um contorno de polígono regular. graphicstype.triangle = Preenche um triângulo. graphicstype.image = Desenha uma imagem de algum conteúdo.\nex: [accent]@router[] ou [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Sempre verdade. lenum.idiv = Divisão inteira. diff --git a/core/assets/bundles/bundle_pt_PT.properties b/core/assets/bundles/bundle_pt_PT.properties index 39af5a41ae..9872b289e5 100644 --- a/core/assets/bundles/bundle_pt_PT.properties +++ b/core/assets/bundles/bundle_pt_PT.properties @@ -1751,7 +1751,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricator block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator block.ship-refabricator.name = Ship Refabricator @@ -2068,7 +2067,6 @@ block.logic-display.description = Displays arbitrary graphics from a logic proce block.large-logic-display.description = Displays arbitrary graphics from a logic processor. block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. -block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2104,7 +2102,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2296,6 +2293,7 @@ graphicstype.poly = Fill a regular polygon. graphicstype.linepoly = Draw a regular polygon outline. graphicstype.triangle = Fill a triangle. graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Always true. lenum.idiv = Integer division. lenum.div = Division.\nReturns [accent]null[] on divide-by-zero. diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index 4f5cdae374..7eb9475b2d 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -1765,7 +1765,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricator block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator block.ship-refabricator.name = Ship Refabricator @@ -2084,7 +2083,6 @@ block.logic-display.description = Afișează grafica transmisă de un procesor l block.large-logic-display.description = Afișează grafica transmisă de un procesor logic. block.interplanetary-accelerator.description = Un turn masiv cu o armă railgun electromagnetică. Accelerează nucleele la viteză cosmică pt lansare interplanetară. block.repair-turret.description = Repară încontinuu cea mai deteriorată unitate din vecinătate. Poate accepta răcitor. -block.payload-propulsion-tower.description = Structură de transport al încărcăturii pe distanțe mari. Lansează încărcătura către un alt turn propulsor conectat. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2120,7 +2118,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2318,6 +2315,7 @@ graphicstype.poly = Desenează un poligon regulat. graphicstype.linepoly = Desenează conturul unui poligon regulat. graphicstype.triangle = Desenează un triunghi. graphicstype.image = Desenează imaginea unui obiect din joc.\nde ex.: [accent]@router[] sau [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Mereu adevărat. lenum.idiv = Împărțirea naturală a numerelor (int). diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index 4485a18f9a..35858bc73c 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -1765,7 +1765,6 @@ block.disperse.name = Диапазон block.afflict.name = Бедствие block.lustre.name = Сияние block.scathe.name = Погибель -block.fabricator.name = Фабрикатор block.tank-refabricator.name = Рефабрикатор танков block.mech-refabricator.name = Рефабрикатор мехов block.ship-refabricator.name = Рефабрикатор кораблей @@ -2086,7 +2085,6 @@ block.logic-display.description = Отображает произвольную block.large-logic-display.description = Отображает произвольную графику из логического процессора. block.interplanetary-accelerator.description = Массивная электромагнитная башня-рельсотрон. Ускоряет ядро, позволяя преодолеть гравитацию для межпланетного развёртывания. block.repair-turret.description = Непрерывно ремонтирует ближайшую поврежденную единицу в своем радиусе. Опционально использует охлаждающую жидкость. -block.payload-propulsion-tower.description = Конструкция для транспортировки больших грузов на большое расстояние. Стреляет грузом в другие грузовые катапульты. block.core-bastion.description = Ядро базы. Бронировано. После уничтожения, весь контакт с регионом теряется. block.core-citadel.description = Ядро базы. Очень хорошо бронировано. Хранит больше ресурсов, чем ядро Бастион. block.core-acropolis.description = Ядро базы. Исключительно хорошо бронировано. Хранит больше ресурсов, чем ядро Цитадель. @@ -2122,7 +2120,6 @@ block.impact-drill.description = При размещении на соответ block.eruption-drill.description = Усовершенствованная ударная дрель. Способна добывать торий. Требует водород для работы. block.reinforced-conduit.description = Перемещает жидкости вперед. Не принимает ввод по бокам. block.reinforced-liquid-router.description = Равномерно распределяет жидкости во все стороны. -block.reinforced-junction.description = Действует как мост для двух пересекающихся трубопроводов. block.reinforced-liquid-tank.description = Хранит большое количество жидкости. block.reinforced-liquid-container.description = Хранит небольшое количество жидкости. block.reinforced-bridge-conduit.description = Перемещает жидкости над любой местностью или зданиями. @@ -2320,6 +2317,7 @@ graphicstype.poly = Отрисовка закрашенного правильн graphicstype.linepoly = Отрисовка контура правильного многоугольника. graphicstype.triangle = Отрисовка закрашенного треугольника. graphicstype.image = Отрисовка внутриигровых спрайтов.\nНапример: [accent]@router[] или [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Всегда истина. lenum.idiv = Целочисленное деление. diff --git a/core/assets/bundles/bundle_sr.properties b/core/assets/bundles/bundle_sr.properties index 06dd54f0ba..8f9dcb248c 100644 --- a/core/assets/bundles/bundle_sr.properties +++ b/core/assets/bundles/bundle_sr.properties @@ -1767,7 +1767,6 @@ block.disperse.name = Raspršivač block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabrikator block.tank-refabricator.name = Refabrikator Tenkova block.mech-refabricator.name = Refabrikator Mečana block.ship-refabricator.name = Refabrikator Brodova @@ -2087,7 +2086,6 @@ block.logic-display.description = Displays arbitrary graphics from a logic proce block.large-logic-display.description = Displays arbitrary graphics from a logic processor. block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. -block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. block.core-bastion.description = Jezgro baze. Oklopljeno. Jednom uništeno gubi se sektor. block.core-citadel.description = Jezgro baze. Izuzetno dobro oklopljeno. Skladišti više resursa od Bastilje jezgra. block.core-acropolis.description = Jezgro baze. Izvrsno dobro oklopljeno. Skladišti više resursa od Citadele jezgra. @@ -2123,7 +2121,6 @@ block.impact-drill.description = Kada je postavljeno na rudi, beskonačno ispuš block.eruption-drill.description = Poboljšana udarna drobilica. Može iskopavati torijum. Zahteva vodonik. block.reinforced-conduit.description = Usmerava tečnosti napred. Ne prihvata unos sa strane od blokova koje nisu cevi. block.reinforced-liquid-router.description = Jednako distribuiše tečnosti u svim pravcima. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Skladišti veliku količinu tečnosti. block.reinforced-liquid-container.description = Skladišti dobru količinu tečnosti. block.reinforced-bridge-conduit.description = Prenosi tečnosti preko terena i građevina. @@ -2321,6 +2318,7 @@ graphicstype.poly = Fill a regular polygon. graphicstype.linepoly = Draw a regular polygon outline. graphicstype.triangle = Fill a triangle. graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Uvek Tačno. lenum.idiv = Integer division. diff --git a/core/assets/bundles/bundle_sv.properties b/core/assets/bundles/bundle_sv.properties index 4691464208..2cad751f7d 100644 --- a/core/assets/bundles/bundle_sv.properties +++ b/core/assets/bundles/bundle_sv.properties @@ -1751,7 +1751,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricator block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator block.ship-refabricator.name = Ship Refabricator @@ -2068,7 +2067,6 @@ block.logic-display.description = Displays arbitrary graphics from a logic proce block.large-logic-display.description = Displays arbitrary graphics from a logic processor. block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. -block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2104,7 +2102,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2296,6 +2293,7 @@ graphicstype.poly = Fill a regular polygon. graphicstype.linepoly = Draw a regular polygon outline. graphicstype.triangle = Fill a triangle. graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Always true. lenum.idiv = Integer division. lenum.div = Division.\nReturns [accent]null[] on divide-by-zero. diff --git a/core/assets/bundles/bundle_th.properties b/core/assets/bundles/bundle_th.properties index 84c75c6585..44bf5b9c64 100644 --- a/core/assets/bundles/bundle_th.properties +++ b/core/assets/bundles/bundle_th.properties @@ -1772,7 +1772,6 @@ block.disperse.name = ดิสเพิร์ส block.afflict.name = อัฟฟลิกต์ block.lustre.name = ลัสเตอร์ block.scathe.name = สเกซส์ -block.fabricator.name = เครื่องสรรค์สร้าง block.tank-refabricator.name = เครื่องแปลงสภาพรถถัง block.mech-refabricator.name = เครื่องแปลงสภาพจักรกล block.ship-refabricator.name = เครื่องแปลงสภาพยานบิน @@ -2100,7 +2099,6 @@ block.logic-display.description = แสดงกราฟิกโดยคว block.large-logic-display.description = แสดงกราฟิกโดยควบคุมจากตัวประมวลผลลอจิก มีขนาดใหญ่กว่า block.interplanetary-accelerator.description = หอคอยเรลกันแม่เหล็กไฟฟ้าขนาดมหึมา เร่งความเร็วแกนกลางเพื่อบินสู่อวกาศไปยังดาวเคราะห์อื่นๆ block.repair-turret.description = ซ่อมแซมยูนิตที่อยู่ในรัศมีของมันอย่างต่อเนื่อง สามารถใช้ของเหลวมาหล่อเย็นเพื่อเพิ่มประสิทธิภาพได้ -block.payload-propulsion-tower.description = บล็อกขนส่งสิ่งบรรทุกทางไกล\nยิงสิ่งบรรทุกไปยังหอเคลื่อนย้ายสิ่งบรรทุกอีกเครื่องที่เชื่อมต่อไว้ #Erekir block.core-bastion.description = ใจกลางของฐานทัพ เสริมเกราะมาอย่างดี เมื่อถูกทำลาย การติดต่อกับพื้นที่นั้นทั้งหมดจะหายไป อย่าให้มันเกิดขึ้น @@ -2138,7 +2136,6 @@ block.impact-drill.description = เมื่อวางบนพื้นแ block.eruption-drill.description = เครื่องขุดแรงกระแทกที่ได้รับการปรับปรุง สามารถขุดทอเรี่ยมได้ จำเป็นต้องใช้ไฮโดรเจน block.reinforced-conduit.description = เคลื่อนย้ายของเหลวไปข้างหน้า ไม่รับของเหลวจากด้านข้างยกเว้นว่าจะเป็นท่อน้ำด้วยกันเอง block.reinforced-liquid-router.description = รับของเหลวจากทางเดียวแล้วส่งออกไปสามทางเท่าๆกัน สามารถเก็บของเหลวได้จำนวนหนึ่ง\nมีประโยชน์สำหรับการส่งของเหลวจากปั้มไปยังหลายที่ -block.reinforced-junction.description = มีหน้าที่เป็นสะพานสำหรับท่อสูญญากาศสองท่อข้ามกัน มีประโยชน์สำหรับเวลาท่อสูญญากาศสองท่อ\nขนไอเท็มสองชนิดไปยังสองสถานที่ block.reinforced-liquid-tank.description = เก็บของเหลวจำนวนมาก ส่งออกไปรอบด้านคล้ายกับเร้าเตอร์ของเหลว\nเหมาะในการใช้เพื่อสร้างกันชนในเวลาที่ของเหลวไม่คงที่\nหรือเวลาที่ใช้ของเหลวเป็นจำนวนมาก block.reinforced-liquid-container.description = เก็บของเหลวจำนวนปานกลาง ส่งออกไปรอบด้านคล้ายกับ\nเร้าเตอร์ของเหลว เหมาะในการใช้กับเครื่องโหลดและถ่ายสิ่งบรรทุกสำหรับ\nการขนส่งของเหลวทางไกล block.reinforced-bridge-conduit.description = เคลื่อนย้ายของเหลวข้ามสิ่งก่อสร้างหรือกำแพง @@ -2339,6 +2336,7 @@ graphicstype.poly = เติมรูปหลายเหลี่ยมปก graphicstype.linepoly = วาดโครงร่างรูปหลายเหลี่ยมปกติ graphicstype.triangle = เติมสามเหลี่ยม graphicstype.image = วาดรูปสิ่งต่างๆ \nตัวอย่างเช่น: [accent]@router[] หรือ [accent]@dagger[] +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = เป็นจริงเสมอ lenum.idiv = หารจำนวนเต็ม diff --git a/core/assets/bundles/bundle_tk.properties b/core/assets/bundles/bundle_tk.properties index cbeed1ebb2..e195095e3e 100644 --- a/core/assets/bundles/bundle_tk.properties +++ b/core/assets/bundles/bundle_tk.properties @@ -1751,7 +1751,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricator block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator block.ship-refabricator.name = Ship Refabricator @@ -2068,7 +2067,6 @@ block.logic-display.description = Displays arbitrary graphics from a logic proce block.large-logic-display.description = Displays arbitrary graphics from a logic processor. block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. -block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2104,7 +2102,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2296,6 +2293,7 @@ graphicstype.poly = Fill a regular polygon. graphicstype.linepoly = Draw a regular polygon outline. graphicstype.triangle = Fill a triangle. graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Always true. lenum.idiv = Integer division. lenum.div = Division.\nReturns [accent]null[] on divide-by-zero. diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index baa14ac99e..ad6a0cfa2f 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -1764,7 +1764,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabrikatör block.tank-refabricator.name = Tank Yeniden Yapılandırıcı block.mech-refabricator.name = Robot Yeniden Yapılandırıcı block.ship-refabricator.name = Gemi Yeniden Yapılandırıcı @@ -2084,7 +2083,6 @@ block.logic-display.description = Bir işlemciden bilgi alarak grafik gösteriri block.large-logic-display.description = Bir işlemciden bilgi alarak grafik gösteririr. block.interplanetary-accelerator.description = Gezegenler Arası ulaşım şimdi parmaklarının ucunda... block.repair-turret.description = Sürekli en yakın birimi tamir eder. Soğutucu kullanabilir. -block.payload-propulsion-tower.description = Kütle sürücü gibi bir yerden başka bir yere fırlatır, ancak malzeme yerine yük fırlatmakta kullanılır. block.core-bastion.description = Ana Merkez. Güçlendirilmiş. Yok edildiğinde sektör kaybedilir. block.core-citadel.description = Ana Merkez. Yüksek Seviyede Güçlendirilmiş. Yok edildiğinde sektör kaybedilir. Daha fazla malzeme depolar. block.core-acropolis.description = Ana Merkez. Aşırı Yüksek Seviyede Güçlendirilmiş. Yok edildiğinde sektör kaybedilir. Daha da fazla malzeme depolar. @@ -2120,7 +2118,6 @@ block.impact-drill.description = Bir madenin üstüne konduğu zaman ara ara mad block.eruption-drill.description = Gelişmiş bir Matkap. Toryum kazabilir. Hidrojen gerektirir. block.reinforced-conduit.description = Sıvıları iletir. Yandan başka borular dışında sıvı almaz. block.reinforced-liquid-router.description = Tüm sıvıları eşit dağıtır. -block.reinforced-junction.description = Kesişen iki sıvı için bir kavşak. block.reinforced-liquid-tank.description = Daha Bol miktarda sıvı depolar. block.reinforced-liquid-container.description = Bol miktarda sıvı depolar. block.reinforced-bridge-conduit.description = Sıvıları bina ve duvarların üzerinden geçirmek için bir köprü. @@ -2318,6 +2315,7 @@ graphicstype.poly = İçi Dolu Çokgen Çiz. graphicstype.linepoly = İçi Boş Çokgen Çiz. graphicstype.triangle = İçi Dolu Üçgen Çiz. graphicstype.image = Bir ikon çiz. \nörnek: [accent]@router[] veya [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Her Zaman Doğru lenum.idiv = Tamsayı Bölme diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index 9e8557f0e7..ad56f75c28 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -1778,7 +1778,6 @@ block.disperse.name = Розпорошувач block.afflict.name = Уражач block.lustre.name = Блиск block.scathe.name = Знищувач -block.fabricator.name = Виробник block.tank-refabricator.name = Танковий перебудовний завод block.mech-refabricator.name = Меховий перебудовний завод block.ship-refabricator.name = Корабельний перебудовний завод @@ -2107,7 +2106,6 @@ block.logic-display.description = Англійська назва: Logic Display block.large-logic-display.description = Англійська назва: Large Logic Display\nПоказує довільну графіку з логічного процесора. block.interplanetary-accelerator.description = Англійська назва: Interplanetary Accelerator\nВелика електромагнітна башта-рейкотрон. Прискорює ядра, щоби подолати планетне тяжіння для міжпланетного розгортання. block.repair-turret.description = Англійська назва: Repair Turret\nБезпервно ремонтує найближчу пошкоджену одиницю. Для прискорення ремонтування можна охолодити. -block.payload-propulsion-tower.description = Англійська назва: Payload Propulsion Tower\nСтруктура транспортування вантажу на великі відстані. Вистрілює вантаж в інші вантажні катапульти. #Erekir block.core-bastion.description = Англійська назва: Core Bastion\nЯдро бази. Броньоване. Після знищення сектор втрачається. @@ -2145,7 +2143,6 @@ block.impact-drill.description = Англійська назва: Impact Drill\n block.eruption-drill.description = Англійська назва: Eruption Drill\nПоліпшений імпульсний бур. Здатний видобувати торій. Потребує водню. block.reinforced-conduit.description = Англійська назва: Reinforced Conduit\nПереміщує рідини вперед. Не приймає нетрубоповідні входи з боків. block.reinforced-liquid-router.description = Англійська назва: Reinforced Liquid Router\nРівномірно розподіляє рідини на всі сторони. -block.reinforced-junction.description = Англійська назва: Reinforced Junction\nВиконує роль моста для двох пересічних водоводів. block.reinforced-liquid-tank.description = Англійська назва: Reinforced Liquid Tank\nЗберігає велику кількість рідини. block.reinforced-liquid-container.description = Англійська назва: Reinforced Liquid Container\nЗберігає значну кількість рідини. block.reinforced-bridge-conduit.description = Англійська назва: Reinforced Bridge Conduit\nТранспортує рідини над спорудами та місцевістю. @@ -2346,6 +2343,7 @@ graphicstype.poly = Залити кольором правильний бага graphicstype.linepoly = Намалювати контур правильного багатокутника. graphicstype.triangle = Залити кольором трикутник. graphicstype.image = Намалювати зображення із деяким вмістом.\nНаприклад: [accent]@router[] чи [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Завжди істинне. lenum.idiv = Ціле ділення. diff --git a/core/assets/bundles/bundle_vi.properties b/core/assets/bundles/bundle_vi.properties index 1cf937b88c..acc823c0d8 100644 --- a/core/assets/bundles/bundle_vi.properties +++ b/core/assets/bundles/bundle_vi.properties @@ -1767,7 +1767,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Máy tạo đơn vị block.tank-refabricator.name = Máy nâng cấp xe tăng block.mech-refabricator.name = Máy nâng cấp lính cơ động block.ship-refabricator.name = Máy nâng cấp phi thuyền @@ -2085,7 +2084,6 @@ block.logic-display.description = Hiển thị đồ họa tùy ý từ bộ x block.large-logic-display.description = Hiển thị đồ họa tùy ý từ bộ xử lý. block.interplanetary-accelerator.description = Tòa súng từ trường cỡ lớn. Tăng tốc vật phóng đến vận tốc thoát để di chuyển giữa các hành tinh. block.repair-turret.description = Sửa chữa những đơn vị bị hư hỏng trong khu vực nhất định. Có thể làm mát để tăng hiệu quả. -block.payload-propulsion-tower.description = Cơ cấu vận chuyển các khối hàng tầm xa. Bắn khối hàng cho các tháp đẩy khối hàng khác. block.core-bastion.description = Trung tâm của căn cứ. Bọc giáp. Khu vực sẽ mất khi bị phá hủy. block.core-citadel.description = Trung tâm của căn cứ. Bọc giáp tốt hơn. Lưu trữ nhiều vật phẩm hơn căn cứ Pháo đài. block.core-acropolis.description = Trung tâm của căn cứ. Được bọc giáp rất tốt. Lưu trữ nhiều vật phẩm hơn căn cứ Thủ Phủ. @@ -2121,7 +2119,6 @@ block.impact-drill.description = Khi được đặt lên một loại quặng, block.eruption-drill.description = Phiên bản cải tiến củ máy khoan động lực. Có thể khoan thorium. Yêu cầu hydrogen. block.reinforced-conduit.description = Di chuyển chất lỏng về phía trước. Không nhận đầu vào từ các bên. block.reinforced-liquid-router.description = Phân chia chất lỏng đều cho tất cả các bên. -block.reinforced-junction.description = Làm cầu nối cho hai ống dẫn chất lỏng giao nhau. block.reinforced-liquid-tank.description = Lưu trữ một lượng chất lỏng lớn. block.reinforced-liquid-container.description = Lưu trữ một lượng chất lỏng vừa phải. block.reinforced-bridge-conduit.description = Vận chuyển chất lỏng qua các công trình và địa hình. @@ -2319,6 +2316,7 @@ graphicstype.poly = Tô vào đa giác đều. graphicstype.linepoly = Vẽ đường viền đa giác đều. graphicstype.triangle = Tô một hình tam giác. graphicstype.image = Vẽ hình ảnh một số nội dung.\nVí dụ: [accent]@router[] hoặc [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Luôn đúng. lenum.idiv = Chia lấy phần nguyên. diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index eb6231ae48..260ada9c3d 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -1779,7 +1779,6 @@ block.disperse.name = 驱离 block.afflict.name = 劫难 block.lustre.name = 光辉 block.scathe.name = 创伤 -block.fabricator.name = 重构厂 block.tank-refabricator.name = 坦克重构厂 block.mech-refabricator.name = 机甲重构厂 block.ship-refabricator.name = 飞船重构厂 @@ -2106,7 +2105,6 @@ block.logic-display.description = 显示处理器中绘制的各种图像。 block.large-logic-display.description = 显示处理器中绘制的各种图像。 block.interplanetary-accelerator.description = 一个巨大的电磁轨道加速器。 将核心加速至逃逸速度以进行星际部署。 block.repair-turret.description = 持续修复范围内受损的单位。 可以用冷却液强化。 -block.payload-propulsion-tower.description = 远距离载荷运送建筑。 向相连的其他载荷驱动器发射载荷。 #埃里克尔 block.core-bastion.description = 基地的核心。 拥有装甲。 一旦被摧毁,此区块就会丢失。 @@ -2144,7 +2142,6 @@ block.impact-drill.description = 放置在矿物上时,以缓慢的速度无 block.eruption-drill.description = 改进过的冲击钻头。 能够开采钍。 需要氢。 block.reinforced-conduit.description = 向前传输流体。 不接受侧面的非导管输入。 block.reinforced-liquid-router.description = 将流体平均分配到所有侧面方向。 -block.reinforced-junction.description = 两条交叉物品管道的桥梁。 block.reinforced-liquid-tank.description = 储存大量的流体。 block.reinforced-liquid-container.description = 储存数量可观的流体。 block.reinforced-bridge-conduit.description = 跨越任意地形或建筑物传输流体。 @@ -2345,6 +2342,7 @@ graphicstype.poly = 绘制实心正多边形 graphicstype.linepoly = 绘制正多边形轮廓 graphicstype.triangle = 绘制实心三角形 graphicstype.image = 画出某个游戏内容的图像\n例如[accent]@router[]或者[accent]@dagger[] +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = 无条件跳转 lenum.idiv = 整数除法,返回不带小数的商 diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index 968ce5cbcc..bedb9b9313 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -1775,7 +1775,6 @@ block.disperse.name = 驅離者 block.afflict.name = 折磨 block.lustre.name = 餘光 block.scathe.name = 毀損 -block.fabricator.name = 製造廠 block.tank-refabricator.name = 戰車重塑者 block.mech-refabricator.name = 機甲重塑者 block.ship-refabricator.name = 飛船重塑者 @@ -2096,7 +2095,6 @@ block.logic-display.description = 顯示由處理器輸出的任意圖像。 block.large-logic-display.description = 顯示由處理器輸出的任意圖像。 block.interplanetary-accelerator.description = 巨大的電磁砲塔。將核心加速至脫離速度以在其他星球部署。 block.repair-turret.description = 持續修復最靠近的受損單位。能使用冷卻劑。 -block.payload-propulsion-tower.description = 遠程原料輸送建築。發射原料至另一個連接的推進塔。 block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. @@ -2132,7 +2130,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2331,6 +2328,7 @@ graphicstype.poly = 畫實心正多邊形 graphicstype.linepoly = 畫空心正多邊形 graphicstype.triangle = 畫實心三角形 graphicstype.image = 繪製內建圖畫\n如: [accent]@router[]或[accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = 永遠 true (直接跳). lenum.idiv = 整數除法,無條件捨去. From 5f06ce0bff9a9495d4ec6740914b8970cae774ba Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 27 Nov 2023 20:37:25 -0500 Subject: [PATCH 59/62] Added draw print instruction --- core/assets/bundles/bundle.properties | 4 +- core/assets/fonts/logic.ttf | Bin 0 -> 41208 bytes core/src/mindustry/logic/LExecutor.java | 49 ++++++++++++++++++ core/src/mindustry/logic/LStatements.java | 40 +++++++++++--- core/src/mindustry/ui/Fonts.java | 12 ++++- .../world/blocks/logic/LogicDisplay.java | 16 ++++-- 6 files changed, 107 insertions(+), 14 deletions(-) create mode 100644 core/assets/fonts/logic.ttf diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index f9d668db70..bb16016601 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1785,7 +1785,6 @@ block.disperse.name = Disperse block.afflict.name = Afflict block.lustre.name = Lustre block.scathe.name = Scathe -block.fabricator.name = Fabricator block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator block.ship-refabricator.name = Ship Refabricator @@ -2111,7 +2110,6 @@ block.logic-display.description = Displays arbitrary graphics from a logic proce block.large-logic-display.description = Displays arbitrary graphics from a logic processor. block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. -block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. #Erekir block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. @@ -2149,7 +2147,6 @@ block.impact-drill.description = When placed on ore, outputs items in bursts ind block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge between two crossing conduits. block.reinforced-liquid-tank.description = Stores a large amount of fluids. block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. @@ -2350,6 +2347,7 @@ graphicstype.poly = Fill a regular polygon. graphicstype.linepoly = Draw a regular polygon outline. graphicstype.triangle = Fill a triangle. graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. +graphicstype.print = Draws text from the print buffer.\nClears the print buffer. lenum.always = Always true. lenum.idiv = Integer division. diff --git a/core/assets/fonts/logic.ttf b/core/assets/fonts/logic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0270cdfe3caa811e1b252cdcc5b179989c1b8ad6 GIT binary patch literal 41208 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 b>R(G#|5~E@*AmsgmZ<) 0){ + var data = Fonts.logic.getData(); + int advance = (int)data.spaceXadvance, lineHeight = (int)data.lineHeight; + + int xOffset, yOffset; + int align = p1; //p1 is not a variable, it's a raw align value. what a massive hack + + int maxWidth = 0, lines = 1, lineWidth = 0; + for(int i = 0; i < str.length(); i++){ + char next = str.charAt(i); + if(next == '\n'){ + maxWidth = Math.max(maxWidth, lineWidth); + lineWidth = 0; + lines ++; + }else{ + lineWidth ++; + } + } + maxWidth = Math.max(maxWidth, lineWidth); + + float + width = maxWidth * advance, + height = lines * lineHeight, + ha = ((Align.isLeft(align) ? -1f : 0f) + 1f + (Align.isRight(align) ? 1f : 0f))/2f, + va = ((Align.isBottom(align) ? -1f : 0f) + 1f + (Align.isTop(align) ? 1f : 0f))/2f; + + xOffset = -(int)(width * ha); + yOffset = -(int)(height * va) + (lines - 1) * lineHeight; + + + int curX = exec.numi(x), curY = exec.numi(y); + for(int i = 0; i < str.length(); i++){ + char next = str.charAt(i); + if(next == '\n'){ + //move Y down when newline is encountered + curY -= lineHeight; + curX = exec.numi(x); //reset + continue; + } + exec.graphicsBuffer.add(DisplayCmd.get(LogicDisplay.commandPrint, packSign(curX + xOffset), packSign(curY + yOffset), next, 0, 0, 0)); + curX += advance; + } + + exec.textBuffer.setLength(0); + } }else{ //add graphics calls, cap graphics buffer size exec.graphicsBuffer.add(DisplayCmd.get(type, packSign(exec.numi(x)), packSign(exec.numi(y)), packSign(num1), packSign(exec.numi(p2)), packSign(exec.numi(p3)), packSign(exec.numi(p4)))); diff --git a/core/src/mindustry/logic/LStatements.java b/core/src/mindustry/logic/LStatements.java index 3806254550..2c0c8159c4 100644 --- a/core/src/mindustry/logic/LStatements.java +++ b/core/src/mindustry/logic/LStatements.java @@ -6,6 +6,7 @@ import arc.graphics.*; import arc.scene.style.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; +import arc.struct.*; import arc.util.*; import mindustry.*; import mindustry.annotations.Annotations.*; @@ -121,6 +122,20 @@ public class LStatements{ @RegisterStatement("draw") public static class DrawStatement extends LStatement{ + static final String[] aligns = {"center", "top", "bottom", "left", "right", "topLeft", "topRight", "bottomLeft", "bottomRight"}; + //yes, boxing Integer is gross but this is easier to construct and Integers <128 don't allocate anyway + static final ObjectMap nameToAlign = ObjectMap.of( + "center", Align.center, + "top", Align.top, + "bottom", Align.bottom, + "left", Align.left, + "right", Align.right, + "topLeft", Align.topLeft, + "topRight", Align.topRight, + "bottomLeft", Align.bottomLeft, + "bottomRight", Align.bottomRight + ); + public GraphicsType type = GraphicsType.clear; public String x = "0", y = "0", p1 = "0", p2 = "0", p3 = "0", p4 = "0"; @@ -147,6 +162,11 @@ public class LStatements{ p2 = "32"; p3 = "0"; } + + if(type == GraphicsType.print){ + p2 = "bottomLeft"; + } + rebuild(table); }, 2, cell -> cell.size(100, 50))); }, Styles.logict, () -> {}).size(90, 40).color(table.color).left().padLeft(2); @@ -221,14 +241,21 @@ public class LStatements{ row(s); fields(s, "rotation", p3, v -> p3 = v); } - //TODO - /* - case character -> { + case print -> { fields(s, "x", x, v -> x = v); fields(s, "y", y, v -> y = v); + row(s); - fields(s, "char", p1, v -> p1 = v); - }*/ + + s.add("align "); + + s.button(b -> { + b.label(() -> nameToAlign.containsKey(p1) ? p1 : "bottomLeft"); + b.clicked(() -> showSelect(b, aligns, p1, t -> { + p1 = t; + }, 2, cell -> cell.size(165, 50))); + }, Styles.logict, () -> {}).size(165, 40).color(s.color).left().padLeft(2); + } } }).expand().left(); } @@ -243,7 +270,8 @@ public class LStatements{ @Override public LInstruction build(LAssembler builder){ - return new DrawI((byte)type.ordinal(), 0, builder.var(x), builder.var(y), builder.var(p1), builder.var(p2), builder.var(p3), builder.var(p4)); + return new DrawI((byte)type.ordinal(), 0, builder.var(x), builder.var(y), + type == GraphicsType.print ? nameToAlign.get(p1, Align.bottomLeft) : builder.var(p1), builder.var(p2), builder.var(p3), builder.var(p4)); } @Override diff --git a/core/src/mindustry/ui/Fonts.java b/core/src/mindustry/ui/Fonts.java index b32847a353..6dd4ff1c24 100644 --- a/core/src/mindustry/ui/Fonts.java +++ b/core/src/mindustry/ui/Fonts.java @@ -35,7 +35,7 @@ public class Fonts{ private static TextureRegion[] iconTable; private static int lastCid; - public static Font def, outline, icon, iconLarge, tech; + public static Font def, outline, icon, iconLarge, tech, logic; public static TextureRegion logicIcon(int id){ return iconTable[id]; @@ -71,11 +71,13 @@ public class Fonts{ FreeTypeFontParameter param = fontParameter(); Core.assets.load("default", Font.class, new FreeTypeFontLoaderParameter(mainFont, param)).loaded = f -> Fonts.def = f; + Core.assets.load("icon", Font.class, new FreeTypeFontLoaderParameter("fonts/icon.ttf", new FreeTypeFontParameter(){{ size = 30; incremental = true; characters = "\0"; }})).loaded = f -> Fonts.icon = f; + Core.assets.load("iconLarge", Font.class, new FreeTypeFontLoaderParameter("fonts/icon.ttf", new FreeTypeFontParameter(){{ size = 48; incremental = false; @@ -83,6 +85,14 @@ public class Fonts{ borderWidth = 5f; borderColor = Color.darkGray; }})).loaded = f -> Fonts.iconLarge = f; + + Core.assets.load("logic", Font.class, new FreeTypeFontLoaderParameter("fonts/logic.ttf", new FreeTypeFontParameter(){{ + size = 16; + //generated all at once, it's fast enough anyway + incremental = false; + //ASCII only + characters = "\0ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890\"!`?'.,;:()[]{}<>|/@\\^$€-%+=#_&~*"; + }})).loaded = f -> Fonts.logic = f; } public static TextureRegion getLargeIcon(String name){ diff --git a/core/src/mindustry/world/blocks/logic/LogicDisplay.java b/core/src/mindustry/world/blocks/logic/LogicDisplay.java index 453a3391bd..cfd5c45be8 100644 --- a/core/src/mindustry/world/blocks/logic/LogicDisplay.java +++ b/core/src/mindustry/world/blocks/logic/LogicDisplay.java @@ -28,7 +28,8 @@ public class LogicDisplay extends Block{ commandLinePoly = 8, commandTriangle = 9, commandImage = 10, - commandCharacter = 11; + //note that this command actually only draws 1 character, unpacked in instruction + commandPrint = 11; public int maxSides = 25; @@ -103,8 +104,14 @@ public class LogicDisplay extends Block{ var icon = Fonts.logicIcon(p1); Draw.rect(Fonts.logicIcon(p1), x, y, p2, p2 / icon.ratio(), p3); } - case commandCharacter -> { - //TODO + case commandPrint -> { + var glyph = Fonts.logic.getData().getGlyph((char)p1); + if(glyph != null){ + Tmp.tr1.set(Fonts.logic.getRegion().texture); + Tmp.tr1.set(glyph.u, glyph.v2, glyph.u2, glyph.v); + + Draw.rect(Tmp.tr1, x + Tmp.tr1.width/2f + glyph.xoffset, y + Tmp.tr1.height/2f + glyph.yoffset + Fonts.logic.getData().capHeight + Fonts.logic.getData().ascent, Tmp.tr1.width, Tmp.tr1.height); + } } } } @@ -151,7 +158,8 @@ public class LogicDisplay extends Block{ linePoly, triangle, image, - ;//character; + //note that this command actually only draws 1 character, unpacked in instruction + print; public static final GraphicsType[] all = values(); } From bc308847f4cb77a2dbb6dbfe3130ea5aa9647e70 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 27 Nov 2023 20:47:24 -0500 Subject: [PATCH 60/62] Clarify that only ASCII is supported --- core/assets/bundles/bundle.properties | 2 +- core/src/mindustry/logic/LExecutor.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index bb16016601..bf88e0992b 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -2347,7 +2347,7 @@ graphicstype.poly = Fill a regular polygon. graphicstype.linepoly = Draw a regular polygon outline. graphicstype.triangle = Fill a triangle. graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. -graphicstype.print = Draws text from the print buffer.\nClears the print buffer. +graphicstype.print = Draws text from the print buffer.\nOnly ASCII characters are allowed.\nClears the print buffer. lenum.always = Always true. lenum.idiv = Integer division. diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index 6e2bf9ee4a..eaede37d20 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -1005,7 +1005,9 @@ public class LExecutor{ curX = exec.numi(x); //reset continue; } - exec.graphicsBuffer.add(DisplayCmd.get(LogicDisplay.commandPrint, packSign(curX + xOffset), packSign(curY + yOffset), next, 0, 0, 0)); + if(Fonts.logic.getData().hasGlyph(next)){ + exec.graphicsBuffer.add(DisplayCmd.get(LogicDisplay.commandPrint, packSign(curX + xOffset), packSign(curY + yOffset), next, 0, 0, 0)); + } curX += advance; } From 120860665dface6a6e769751e189fffd352ba94f Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 28 Nov 2023 05:31:14 -0500 Subject: [PATCH 61/62] Fixed #9322 --- core/src/mindustry/logic/LExecutor.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index eaede37d20..643efb387f 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -946,12 +946,6 @@ public class LExecutor{ //graphics on headless servers are useless. if(Vars.headless || exec.graphicsBuffer.size >= maxGraphicsBuffer) return; - int num1 = exec.numi(p1); - - if(type == LogicDisplay.commandImage){ - num1 = exec.obj(p1) instanceof UnlockableContent u ? u.iconId : 0; - } - //explicitly unpack colorPack, it's pre-processed here if(type == LogicDisplay.commandColorPack){ double packed = exec.num(x); @@ -1014,6 +1008,12 @@ public class LExecutor{ exec.textBuffer.setLength(0); } }else{ + int num1 = exec.numi(p1); + + if(type == LogicDisplay.commandImage){ + num1 = exec.obj(p1) instanceof UnlockableContent u ? u.iconId : 0; + } + //add graphics calls, cap graphics buffer size exec.graphicsBuffer.add(DisplayCmd.get(type, packSign(exec.numi(x)), packSign(exec.numi(y)), packSign(num1), packSign(exec.numi(p2)), packSign(exec.numi(p3)), packSign(exec.numi(p4)))); } From 6543c41bded9b4af98a3c7c6698a1a966d553cf2 Mon Sep 17 00:00:00 2001 From: "Arksource (ShardDustry [ES]) Owner" <93954648+ArkSourcer@users.noreply.github.com> Date: Tue, 28 Nov 2023 06:29:04 -0400 Subject: [PATCH 62/62] Agua en HD (#9323) * Funny change * Update servers_v7.json * Update bundle_es.properties Traductions for the bundle_es By ArkSource * Update servers_v7.json * Agua prt 2 * Update servers_v7.json * Update servers_v7.json * Agua 2-3 --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index c655bdd02b..0cd81ae316 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -17,7 +17,7 @@ }, { "name": "ShardDustry Eventos", - "address": ["45.158.9.198:31290"] + "address": ["45.158.9.198:31719"] }, { "name": "ShardDustry ES",