From f474eab92625c84299b079c8b8231563652cc07b Mon Sep 17 00:00:00 2001 From: NiTiSon <60577131+NiTiSon@users.noreply.github.com> Date: Tue, 15 Sep 2026 07:03:02 +0300 Subject: [PATCH 1/9] fix: Renderer update cause blocks to lose their extra and floor data (#12664) Co-authored-by: NiTiSon --- core/src/mindustry/editor/MapEditor.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/editor/MapEditor.java b/core/src/mindustry/editor/MapEditor.java index 2187b57045..e97bfbaadc 100644 --- a/core/src/mindustry/editor/MapEditor.java +++ b/core/src/mindustry/editor/MapEditor.java @@ -78,7 +78,11 @@ public class MapEditor{ if(build != null && tile.isCenter()){ builds.add(build); } - tiles.seti(i, new EditorTile(tile.x, tile.y, tile.floorID(), tile.overlayID(), build == null ? tile.blockID() : 0)); + + var newTile = new EditorTile(tile.x, tile.y, tile.floorID(), tile.overlayID(), build == null ? tile.blockID() : 0); + newTile.floorData = tile.floorData; + newTile.extraData = tile.extraData; + tiles.seti(i, newTile); } for(var build : builds){ From 73d586590827e117950bfac624e234b3f08a03c3 Mon Sep 17 00:00:00 2001 From: Cardillan <122014763+cardillan@users.noreply.github.com> Date: Tue, 15 Sep 2026 06:03:16 +0200 Subject: [PATCH 2/9] Fix processor text/graphics buffer holding old content on restart (#12663) --- core/src/mindustry/logic/LExecutor.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index d44c123a39..099249c446 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -122,6 +122,8 @@ public class LExecutor{ /** Loads with a specified assembler. Resets all variables. */ public void load(LAssembler builder){ stop = false; + textBuffer.setLength(0); + graphicsBuffer.clear(); nameMap = null; //retain constants that are links, which, by convention, don't start with @ (builtin) or _ (numeric constant) vars = builder.vars.values().toSeq().retainAll(var -> !var.constant || var.name.charAt(0) != '_' && var.name.charAt(0) != '@').toArray(LVar.class); From ca9876544e657d0feb7341b1987d97e0455135ed Mon Sep 17 00:00:00 2001 From: summoner Date: Tue, 15 Sep 2026 06:03:23 +0200 Subject: [PATCH 3/9] Translation: Update bundle_hu.properties (#12661) * Translation: Update bundle_hu.properties Fixing sentences Fixing wording * Translation: Update bundle_hu.properties More fixes --- core/assets/bundles/bundle_hu.properties | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core/assets/bundles/bundle_hu.properties b/core/assets/bundles/bundle_hu.properties index 6904c9885c..7673840976 100644 --- a/core/assets/bundles/bundle_hu.properties +++ b/core/assets/bundles/bundle_hu.properties @@ -1414,8 +1414,8 @@ category.function = Funkció category.optional = Lehetséges fejlesztések setting.alwaysmusic.name = Folyamatos zenelejátszás setting.alwaysmusic.description = Amikor engedélyezve van, akkor a zene folyamatosan szól a játékban.\nHa ki van kapcsolva, akkor csak véletlenszerű időközönként szólal meg. -setting.skipcoreanimation.name = Támaszpont animációjának kihagyása kilövéskor és leszálláskor -setting.skipcoreanimation.description = Ha engedélyezve van, akkor a támaszpont fel- és leszállásának\nanimációja nem lesz megjelenítve. +setting.skipcoreanimation.name = Támaszpont animációinak kihagyása +setting.skipcoreanimation.description = Ha engedélyezve van, akkor a támaszpont fel- és leszállási\nanimációja nem lesz megjelenítve. setting.landscape.name = Fekvő mód zárolása setting.landscape.description = Ha engedélyezve van, akkor a képernyő tájolása fekvő módban lesz rögzítve. setting.blockreplace.name = Automatikus blokkjavaslatok @@ -1468,8 +1468,8 @@ setting.destroyedblocks.name = Lerombolt építmények megjelenítése setting.destroyedblocks.description = Ha engedélyezve van, akkor a megsemmisített blokkok\ntörmeléket hagynak maguk után. setting.blockstatus.name = Blokkok állapotának megjelenítése setting.blockstatus.description = A blokkok felett színes állapotikonok jelennek meg. -setting.conveyorpathfinding.name = Szállítószalag nyomvonalkeresése építéskor -setting.conveyorpathfinding.description = Ha engedélyezve van, akkor a szállítószalagok elhelyezésekor a rendszer\nautomatikusan megpróbálja megtalálni az útvonalat a célállomásig. +setting.conveyorpathfinding.name = Nyomvonalkeresés szállítószalag-építéskor +setting.conveyorpathfinding.description = Ha engedélyezve van, akkor a szállítószalagok elhelyezésekor a rendszer\nautomatikusan megpróbálja megtalálni azok nyomvonalát a célállomásig. setting.sensitivity.name = Játékvezérlők érzékenysége setting.sensitivity.description = A játékvezérlők (joystick) érzékenységét lehet vele finomhangolni. setting.saveinterval.name = Mentési időköz @@ -1478,7 +1478,7 @@ setting.seconds = {0} másodperc setting.milliseconds = {0} ezredmásodperc setting.fullscreen.name = Teljes képernyő setting.fps.name = FPS, memóriahasználat és ping megjelenítése -setting.fps.description = Megjeleníti a jelenlegi képkockasebességet (FPS), a memóriahasználatot MB/GB-ban\nés a hálózati pinget a képernyő sarkában. +setting.fps.description = Megjeleníti a jelenlegi képkockasebességet, a memóriahasználatot MB/GB-ban\nés a hálózati pinget a képernyő sarkában. setting.console.name = Konzol engedélyezése setting.console.description = Engedélyezi a játékon belüli JavaScript-konzolt. setting.drawhitboxes.name = Ütközési dobozok megjelenítése From 42ec5c9685be54df241c2428b09a9da255cdb321 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Tue, 15 Sep 2026 06:03:44 +0200 Subject: [PATCH 4/9] Bugfix: cap lightning distance (#12659) --- core/src/mindustry/entities/Lightning.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/entities/Lightning.java b/core/src/mindustry/entities/Lightning.java index 1f5b3193d3..43c18ca0ba 100644 --- a/core/src/mindustry/entities/Lightning.java +++ b/core/src/mindustry/entities/Lightning.java @@ -84,7 +84,7 @@ public class Lightning{ Unit furthest = Geometry.findFurthest(x, y, entities); - if(furthest != null){ + if(furthest != null && furthest.dst(x, y) < length * 1.5f){ hit.add(furthest.id()); x = furthest.x(); y = furthest.y(); From 4eed142ccc0e63dbbab80e15ee7eed1330b3b784 Mon Sep 17 00:00:00 2001 From: sora54 <422605722@qq.com> Date: Tue, 15 Sep 2026 12:19:59 +0800 Subject: [PATCH 5/9] Fix cluster array dimension to use costTypes size (#12658) --- core/src/mindustry/ai/ControlPathfinder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/ai/ControlPathfinder.java b/core/src/mindustry/ai/ControlPathfinder.java index 60def58dd4..c9784d3ff6 100644 --- a/core/src/mindustry/ai/ControlPathfinder.java +++ b/core/src/mindustry/ai/ControlPathfinder.java @@ -457,7 +457,7 @@ public class ControlPathfinder implements Runnable{ Cluster[][] dim1 = clusters[team]; if(dim1 == null){ - dim1 = clusters[team] = new Cluster[Team.all.length][]; + dim1 = clusters[team] = new Cluster[costTypes.size][]; } Cluster[] dim2 = dim1[pathCost]; From 0bbc4c677792f233dbbde84b94ca882ea1aef48e Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 15 Sep 2026 00:39:46 -0400 Subject: [PATCH 6/9] Fixed #12660 --- core/src/mindustry/entities/comp/TargetDummyComp.java | 7 +++++++ core/src/mindustry/entities/comp/UnitComp.java | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/entities/comp/TargetDummyComp.java b/core/src/mindustry/entities/comp/TargetDummyComp.java index c0e12ffb72..5167680d41 100644 --- a/core/src/mindustry/entities/comp/TargetDummyComp.java +++ b/core/src/mindustry/entities/comp/TargetDummyComp.java @@ -22,4 +22,11 @@ abstract class TargetDummyComp implements Unitc, Healthc{ td.dummyHit(amount); } } + + @Override + @Replace + public boolean canLand(){ + //dummies should always respect the boost config even when the landing area is obstructed (usually by other dummies) + return true; + } } \ No newline at end of file diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 9d1067a8d5..0b6ce3aca8 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -174,7 +174,8 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I /** @return whether there is solid, un-occupied ground under this unit. */ public boolean canLand(){ - return !onSolid() && Units.count(x, y, physicSize(), f -> f != self() && f.isGrounded()) == 0; + float psize = physicSize(); + return !onSolid() && !Units.any(x - psize/2f, y - psize/2f, psize, psize, f -> f != self() && f.isGrounded()); } public boolean inRange(Position other){ From b3be63437e7ba6b2e9116790542de29bd286b6ad Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 15 Sep 2026 12:13:12 -0400 Subject: [PATCH 7/9] Better player name wrapping in player list --- core/src/mindustry/ui/fragments/PlayerListFragment.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/ui/fragments/PlayerListFragment.java b/core/src/mindustry/ui/fragments/PlayerListFragment.java index 30379f944e..65dbc91870 100644 --- a/core/src/mindustry/ui/fragments/PlayerListFragment.java +++ b/core/src/mindustry/ui/fragments/PlayerListFragment.java @@ -132,8 +132,7 @@ public class PlayerListFragment{ }); button.add(iconTable).size(h); - button.labelWrap("[#" + user.color().toString().toUpperCase() + "]" + user.name()).style(Styles.outlineLabel).width(170f).pad(10); - button.add().grow(); + button.add("[#" + user.color().toString().toUpperCase() + "]" + user.name()).style(Styles.outlineLabel).growX().wrap(true).pad(10); button.background(Tex.underline); @@ -249,7 +248,7 @@ public class PlayerListFragment{ .size(h); } - content.add(button).width(350f).height(h + 14); + content.add(button).width(mobile ? 350f : 470f).height(h + 14); content.row(); } From b513d92456e9c5ca55be0c30033a3ade3c453bf3 Mon Sep 17 00:00:00 2001 From: Acts1631 <69813585+acts-1631@users.noreply.github.com> Date: Tue, 15 Sep 2026 20:34:09 -0400 Subject: [PATCH 8/9] Deduplicate requested assets during handshake (#12667) * Deduplicate requested assets during handshake * Use Bits for asset request deduplication --- core/src/mindustry/core/NetServer.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java index 5a6af323bc..cbc089ebbf 100644 --- a/core/src/mindustry/core/NetServer.java +++ b/core/src/mindustry/core/NetServer.java @@ -972,8 +972,10 @@ public class NetServer implements ApplicationListener{ }else{ Seq res = new Seq<>(); Seq allAssets = state.data.getAllExternalAssets(); + Bits requestedIds = new Bits(allAssets.size); for(short id : ids){ - if(id >= allAssets.size || id < 0) continue; + if(id >= allAssets.size || id < 0 || requestedIds.get(id)) continue; + requestedIds.set(id); res.add(allAssets.get(id)); } From 22cf4311700fe25164cfac62533c138806ec33f9 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 16 Sep 2026 10:17:59 -0400 Subject: [PATCH 9/9] Fixed incorrect texture removal --- core/src/mindustry/mod/DataImagePacker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/mod/DataImagePacker.java b/core/src/mindustry/mod/DataImagePacker.java index 52a70a76d7..551b2c9b88 100644 --- a/core/src/mindustry/mod/DataImagePacker.java +++ b/core/src/mindustry/mod/DataImagePacker.java @@ -181,7 +181,7 @@ public class DataImagePacker{ public void unload(){ if(patchAtlas != null){ for(var texture : patchAtlas.getTextures()){ - if(texture != null) patchAtlas.getTextures().remove(texture); + if(texture != null) Core.atlas.getTextures().remove(texture); } for(var region : patchAtlas.getRegions()){ if(region != null){