diff --git a/annotations/build.gradle b/annotations/build.gradle
index 4ee43cfcb3..4532472197 100644
--- a/annotations/build.gradle
+++ b/annotations/build.gradle
@@ -1,2 +1,2 @@
 sourceSets.main.java.srcDirs = ["src/main/java/"]
-sourceSets.main.resources.srcDirs = ["src/main/resources/"]
\ No newline at end of file
+sourceSets.main.resources.srcDirs = ["src/main/resources/"]
diff --git a/core/assets-raw/fontgen/config.json b/core/assets-raw/fontgen/config.json
index 1c25eac26c..2c3fe69cc8 100644
--- a/core/assets-raw/fontgen/config.json
+++ b/core/assets-raw/fontgen/config.json
@@ -935,4 +935,4 @@
       ]
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/core/assets/bloomshaders/alpha_bloom.frag b/core/assets/bloomshaders/alpha_bloom.frag
index a48233ded0..b3475ff259 100644
--- a/core/assets/bloomshaders/alpha_bloom.frag
+++ b/core/assets/bloomshaders/alpha_bloom.frag
@@ -10,4 +10,4 @@ void main(){
 	vec4 bloom = texture2D(u_texture1, v_texCoords) * BloomIntensity; 	
     original = original *  (vec4(1.0) - bloom);	 	
  	gl_FragColor =  original + bloom; 	
-}
\ No newline at end of file
+}
diff --git a/core/assets/bloomshaders/alpha_threshold.frag b/core/assets/bloomshaders/alpha_threshold.frag
index b2ffe580a6..fc910bed6c 100644
--- a/core/assets/bloomshaders/alpha_threshold.frag
+++ b/core/assets/bloomshaders/alpha_threshold.frag
@@ -11,4 +11,4 @@ void main(){
 		gl_FragColor = vec4(0.0);
 	}
  	//gl_FragColor = (texture2D(u_texture0, v_texCoords) - vec4(threshold.r))  * threshold.g;
-}
\ No newline at end of file
+}
diff --git a/core/assets/bloomshaders/bloom.frag b/core/assets/bloomshaders/bloom.frag
index 65abbe56d1..e6bac1f0bf 100644
--- a/core/assets/bloomshaders/bloom.frag
+++ b/core/assets/bloomshaders/bloom.frag
@@ -10,4 +10,4 @@ void main(){
     vec4 bloom = texture2D(u_texture1, v_texCoords) * BloomIntensity;
     original = original *  (vec4(1.0) - bloom);
     gl_FragColor =  original + bloom;
-}
\ No newline at end of file
+}
diff --git a/core/assets/bloomshaders/blurspace.vert b/core/assets/bloomshaders/blurspace.vert
index bc16d0b2a7..e766d21cee 100644
--- a/core/assets/bloomshaders/blurspace.vert
+++ b/core/assets/bloomshaders/blurspace.vert
@@ -23,4 +23,4 @@ void main(){
 	v_texCoords4 = a_texCoord0 + f;
 	
 	gl_Position = a_position;
-}
\ No newline at end of file
+}
diff --git a/core/assets/bloomshaders/maskedtreshold.frag b/core/assets/bloomshaders/maskedtreshold.frag
index ec09b4435a..ec2634ef3f 100644
--- a/core/assets/bloomshaders/maskedtreshold.frag
+++ b/core/assets/bloomshaders/maskedtreshold.frag
@@ -6,4 +6,4 @@ void main(){
 	vec4 tex = texture2D(u_texture0, v_texCoords);
 	vec3 colors = (tex.rgb - threshold.r)  * threshold.g * tex.a;
  	gl_FragColor = vec4(colors, tex.a);
-}
\ No newline at end of file
+}
diff --git a/core/assets/bloomshaders/screenspace.vert b/core/assets/bloomshaders/screenspace.vert
index 1c57ff8852..af368efbb4 100644
--- a/core/assets/bloomshaders/screenspace.vert
+++ b/core/assets/bloomshaders/screenspace.vert
@@ -5,4 +5,4 @@ varying vec2 v_texCoords;
 void main(){
 	v_texCoords = a_texCoord0;
 	gl_Position = a_position;
-}
\ No newline at end of file
+}
diff --git a/core/assets/bloomshaders/threshold.frag b/core/assets/bloomshaders/threshold.frag
index 932bf77c5d..705d6987d5 100644
--- a/core/assets/bloomshaders/threshold.frag
+++ b/core/assets/bloomshaders/threshold.frag
@@ -4,4 +4,4 @@ varying mediump vec2 v_texCoords;
 
 void main(){
  	gl_FragColor.rgb = (texture2D(u_texture0, v_texCoords).rgb - vec3(threshold.x))  * threshold.y;
-}
\ No newline at end of file
+}
diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties
index 4ce05d5e0f..0acb0e2401 100644
--- a/core/assets/bundles/bundle.properties
+++ b/core/assets/bundles/bundle.properties
@@ -1342,4 +1342,4 @@ block.cyclone.description = A large anti-air and anti-ground turret. Fires explo
 block.spectre.description = A massive dual-barreled cannon. Shoots large armor-piercing bullets at air and ground targets.
 block.meltdown.description = A massive laser cannon. Charges and fires a persistent laser beam at nearby enemies. Requires coolant to operate.
 block.repair-point.description = Continuously heals the closest damaged unit in its vicinity.
-block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted.
\ No newline at end of file
+block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted.
diff --git a/core/assets/shaders/atmosphere.frag b/core/assets/shaders/atmosphere.frag
index aae3cac8f4..f5f437f298 100644
--- a/core/assets/shaders/atmosphere.frag
+++ b/core/assets/shaders/atmosphere.frag
@@ -115,4 +115,4 @@ void main(){
     vec3 result = inScatter(eye, dir, e, l);
 
     gl_FragColor = vec4(result, 1.0);
-}
\ No newline at end of file
+}
diff --git a/core/assets/shaders/atmosphere.vert b/core/assets/shaders/atmosphere.vert
index 6899e0f0f4..05081108d0 100644
--- a/core/assets/shaders/atmosphere.vert
+++ b/core/assets/shaders/atmosphere.vert
@@ -10,4 +10,4 @@ void main(){
     v_position = a_position;
     v_model = u_model;
     gl_Position = u_projection*u_model*a_position;
-}
\ No newline at end of file
+}
diff --git a/core/assets/shaders/cubemap.frag b/core/assets/shaders/cubemap.frag
index 3f9a760e94..d6567508e9 100644
--- a/core/assets/shaders/cubemap.frag
+++ b/core/assets/shaders/cubemap.frag
@@ -5,4 +5,4 @@ uniform samplerCube u_cubemap;
 
 void main(){
     gl_FragColor = textureCube(u_cubemap, v_texCoords);
-}
\ No newline at end of file
+}
diff --git a/core/assets/shaders/cubemap.vert b/core/assets/shaders/cubemap.vert
index 546cec8f46..1d5d04f518 100644
--- a/core/assets/shaders/cubemap.vert
+++ b/core/assets/shaders/cubemap.vert
@@ -9,4 +9,4 @@ const float SCALE = 50.0;
 void main(){
     v_texCoords = a_position;
     gl_Position = u_proj * vec4(a_position * SCALE, 1.0);
-}
\ No newline at end of file
+}
diff --git a/core/assets/shaders/default.frag b/core/assets/shaders/default.frag
index 93be3cffc9..1f67c593ea 100644
--- a/core/assets/shaders/default.frag
+++ b/core/assets/shaders/default.frag
@@ -6,4 +6,4 @@ uniform sampler2D u_texture;
 void main(){
     vec4 c = texture2D(u_texture, v_texCoords);
     gl_FragColor = v_color * mix(c, vec4(v_mix_color.rgb, c.a), v_mix_color.a);
-}
\ No newline at end of file
+}
diff --git a/core/assets/shaders/slag.frag b/core/assets/shaders/slag.frag
index f904d48dbf..c038baf292 100755
--- a/core/assets/shaders/slag.frag
+++ b/core/assets/shaders/slag.frag
@@ -29,4 +29,4 @@ void main(){
     }
 
     gl_FragColor = color;
-}
\ No newline at end of file
+}
diff --git a/core/assets/shaders/space.frag b/core/assets/shaders/space.frag
index 3d669cabb7..73045aa54b 100755
--- a/core/assets/shaders/space.frag
+++ b/core/assets/shaders/space.frag
@@ -20,4 +20,4 @@ void main(){
     color.rgb = texture2D(u_stars, coords/NSCALE + vec2(-0.1, -0.1) + u_ccampos / CAMSCALE).rgb;
 
     gl_FragColor = color;
-}
\ No newline at end of file
+}
diff --git a/core/assets/shaders/tar.frag b/core/assets/shaders/tar.frag
index ea2a3b3f1d..228eb15718 100644
--- a/core/assets/shaders/tar.frag
+++ b/core/assets/shaders/tar.frag
@@ -24,4 +24,4 @@ void main(){
     }
 
     gl_FragColor = color;
-}
\ No newline at end of file
+}
diff --git a/core/assets/shaders/water.frag b/core/assets/shaders/water.frag
index f0c41ccd24..e7f4ee1016 100644
--- a/core/assets/shaders/water.frag
+++ b/core/assets/shaders/water.frag
@@ -34,4 +34,4 @@ void main(){
     }
 
 	gl_FragColor = vec4(color.rgb, 1.0);
-}
\ No newline at end of file
+}
diff --git a/core/src/mindustry/entities/Effect.java b/core/src/mindustry/entities/Effect.java
index 920729e608..df13f762ab 100644
--- a/core/src/mindustry/entities/Effect.java
+++ b/core/src/mindustry/entities/Effect.java
@@ -209,4 +209,4 @@ public class Effect{
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/core/src/mindustry/entities/comp/LaunchCoreComp.java b/core/src/mindustry/entities/comp/LaunchCoreComp.java
index 7283a9e220..4f642c8493 100644
--- a/core/src/mindustry/entities/comp/LaunchCoreComp.java
+++ b/core/src/mindustry/entities/comp/LaunchCoreComp.java
@@ -73,4 +73,4 @@ abstract class LaunchCoreComp implements Drawc, Timedc{
             Fx.rocketSmokeLarge.at(cx() + Mathf.range(r), cy() + Mathf.range(r), fin());
         }
     }
-}
\ No newline at end of file
+}
diff --git a/core/src/mindustry/graphics/InverseKinematics.java b/core/src/mindustry/graphics/InverseKinematics.java
index a920dc6527..133eae78ff 100644
--- a/core/src/mindustry/graphics/InverseKinematics.java
+++ b/core/src/mindustry/graphics/InverseKinematics.java
@@ -26,4 +26,4 @@ public class InverseKinematics{
         return dist > 0 && dist < lengthA;
     }
 
-}
\ No newline at end of file
+}
diff --git a/core/src/mindustry/graphics/LightRenderer.java b/core/src/mindustry/graphics/LightRenderer.java
index 0a05c7409b..ebf1cf9187 100644
--- a/core/src/mindustry/graphics/LightRenderer.java
+++ b/core/src/mindustry/graphics/LightRenderer.java
@@ -198,4 +198,4 @@ public class LightRenderer{
 
         lights.clear();
     }
-}
\ No newline at end of file
+}
diff --git a/core/src/mindustry/logic/DataType.java b/core/src/mindustry/logic/DataType.java
index 49090d69f6..d216313ce0 100644
--- a/core/src/mindustry/logic/DataType.java
+++ b/core/src/mindustry/logic/DataType.java
@@ -21,4 +21,4 @@ public enum DataType{
     DataType(Color color){
         this.color = color;
     }
-}
\ No newline at end of file
+}
diff --git a/core/src/mindustry/logic/LCategory.java b/core/src/mindustry/logic/LCategory.java
index 849e2f64bd..dcdd0483fe 100644
--- a/core/src/mindustry/logic/LCategory.java
+++ b/core/src/mindustry/logic/LCategory.java
@@ -15,4 +15,4 @@ public enum LCategory{
     LCategory(Color color){
         this.color = color;
     }
-}
\ No newline at end of file
+}
diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java
index aa4d9c22c8..0b046ff3c0 100644
--- a/core/src/mindustry/ui/dialogs/JoinDialog.java
+++ b/core/src/mindustry/ui/dialogs/JoinDialog.java
@@ -491,4 +491,4 @@ public class JoinDialog extends BaseDialog{
         public Server(){
         }
     }
-}
\ No newline at end of file
+}
diff --git a/core/src/mindustry/world/blocks/units/CommandCenter.java b/core/src/mindustry/world/blocks/units/CommandCenter.java
index a8ffa3c3e9..659db5e1d3 100644
--- a/core/src/mindustry/world/blocks/units/CommandCenter.java
+++ b/core/src/mindustry/world/blocks/units/CommandCenter.java
@@ -94,4 +94,4 @@ public class CommandCenter extends Block{
             team.data().command = UnitCommand.all[read.b()];
         }
     }
-}
\ No newline at end of file
+}
diff --git a/core/src/mindustry/world/draw/DrawAnimation.java b/core/src/mindustry/world/draw/DrawAnimation.java
index 1bb9d92982..6c4de1ef36 100644
--- a/core/src/mindustry/world/draw/DrawAnimation.java
+++ b/core/src/mindustry/world/draw/DrawAnimation.java
@@ -43,4 +43,4 @@ public class DrawAnimation extends DrawBlock{
     public TextureRegion[] icons(Block block){
         return new TextureRegion[]{block.region, top};
     }
-}
\ No newline at end of file
+}
diff --git a/fastlane/metadata/android/hi-IN/full_description.txt b/fastlane/metadata/android/hi-IN/full_description.txt
index 5f41ca22c8..acdb71229f 100644
--- a/fastlane/metadata/android/hi-IN/full_description.txt
+++ b/fastlane/metadata/android/hi-IN/full_description.txt
@@ -12,4 +12,4 @@
 - स्थानीय नेटवर्क या समर्पित सर्वरस के माध्यम से क्रॉस-प्लेटफॉर्म मल्टीप्लेयर
 - कस्टम खेल के नियम: ब्लॉक की लागत, दुश्मन के आँकड़े, शुरू आइटम, लहर समय और अधिक बदलें
 - एक शक्तिशाली संपादक, यादृच्छिक रूप से अयस्कों, इलाकों, सजावट को बनाने और मानचित्रों के लिए समरूपता को लागू करने के लिए उपकरण के साथ
-- अनुकूलन योग्य मानचित्र तरंग लेआउट
\ No newline at end of file
+- अनुकूलन योग्य मानचित्र तरंग लेआउट
diff --git a/fastlane/metadata/android/hi-IN/short_description.txt b/fastlane/metadata/android/hi-IN/short_description.txt
index 5a7eaf7783..8d38239525 100644
--- a/fastlane/metadata/android/hi-IN/short_description.txt
+++ b/fastlane/metadata/android/hi-IN/short_description.txt
@@ -1 +1 @@
-एक कारखाने आधारित सैंडबॉक्स टॉवर रक्षा खेल।
\ No newline at end of file
+एक कारखाने आधारित सैंडबॉक्स टॉवर रक्षा खेल।
diff --git a/fastlane/metadata/android/hi-IN/summary.txt b/fastlane/metadata/android/hi-IN/summary.txt
index 5a7eaf7783..8d38239525 100644
--- a/fastlane/metadata/android/hi-IN/summary.txt
+++ b/fastlane/metadata/android/hi-IN/summary.txt
@@ -1 +1 @@
-एक कारखाने आधारित सैंडबॉक्स टॉवर रक्षा खेल।
\ No newline at end of file
+एक कारखाने आधारित सैंडबॉक्स टॉवर रक्षा खेल।
diff --git a/fastlane/metadata/android/hi-IN/title.txt b/fastlane/metadata/android/hi-IN/title.txt
index 36df84b3d7..37ffbf60b2 100644
--- a/fastlane/metadata/android/hi-IN/title.txt
+++ b/fastlane/metadata/android/hi-IN/title.txt
@@ -1 +1 @@
-मिन्दुस्त्र्यि (Mindustry)
\ No newline at end of file
+मिन्दुस्त्र्यि (Mindustry)
diff --git a/fastlane/metadata/android/in/full_description.txt b/fastlane/metadata/android/in/full_description.txt
index 2597618097..cd5adae89b 100644
--- a/fastlane/metadata/android/in/full_description.txt
+++ b/fastlane/metadata/android/in/full_description.txt
@@ -11,4 +11,4 @@ Fitur:
 - Multipemain lintas platform melalui jaringan lokal atau server khusus
 - Aturan permainan khusus: Ubah biaya blok, statistik musuh, item awal, waktu gelombang, dan lainnya
 - Editor yang andal, dengan alat untuk menghasilkan sumber daya, medan, dekorasi, dan menerapkan simetri ke peta secara acak
-- Tata letak gelombang peta yang dapat disesuaikan
\ No newline at end of file
+- Tata letak gelombang peta yang dapat disesuaikan
diff --git a/fastlane/metadata/android/in/short_description.txt b/fastlane/metadata/android/in/short_description.txt
index 2d6a63c557..19ec900c68 100644
--- a/fastlane/metadata/android/in/short_description.txt
+++ b/fastlane/metadata/android/in/short_description.txt
@@ -1 +1 @@
-Sebuah game pertahanan menara sandbox berbasis pabrik.
\ No newline at end of file
+Sebuah game pertahanan menara sandbox berbasis pabrik.
diff --git a/fastlane/metadata/android/in/summary.txt b/fastlane/metadata/android/in/summary.txt
index 2d6a63c557..19ec900c68 100644
--- a/fastlane/metadata/android/in/summary.txt
+++ b/fastlane/metadata/android/in/summary.txt
@@ -1 +1 @@
-Sebuah game pertahanan menara sandbox berbasis pabrik.
\ No newline at end of file
+Sebuah game pertahanan menara sandbox berbasis pabrik.
diff --git a/fastlane/metadata/android/in/title.txt b/fastlane/metadata/android/in/title.txt
index 2beb939017..e2842b447a 100644
--- a/fastlane/metadata/android/in/title.txt
+++ b/fastlane/metadata/android/in/title.txt
@@ -1 +1 @@
-Mindustry
\ No newline at end of file
+Mindustry
diff --git a/fastlane/metadata/android/pl-PL/changelogs/104.3.txt b/fastlane/metadata/android/pl-PL/changelogs/104.3.txt
index a6088a180f..a0c7542103 100644
--- a/fastlane/metadata/android/pl-PL/changelogs/104.3.txt
+++ b/fastlane/metadata/android/pl-PL/changelogs/104.3.txt
@@ -3,4 +3,4 @@
 - Utworzono kategorie serwerów (dodane dzięki @Quezler)
 - Dodano funckję require()  dla skryptów (dodane dzięki @DeltaNedas)
 - Dodano gradient kolorystyczny dla statusu baterii (dodane dzięki @Arkanic)
-- Zmieniono ładowanie skryptów: dla modów z więcej niż jednym plikiem skryptowym, główny plik musi nazywać się "main.js" oraz musi zawierać require() do pozostałych plików
\ No newline at end of file
+- Zmieniono ładowanie skryptów: dla modów z więcej niż jednym plikiem skryptowym, główny plik musi nazywać się "main.js" oraz musi zawierać require() do pozostałych plików
diff --git a/fastlane/metadata/android/pl-PL/changelogs/104.4.txt b/fastlane/metadata/android/pl-PL/changelogs/104.4.txt
index 7dd8cc48dc..04976a469a 100644
--- a/fastlane/metadata/android/pl-PL/changelogs/104.4.txt
+++ b/fastlane/metadata/android/pl-PL/changelogs/104.4.txt
@@ -1,4 +1,4 @@
 - Aktualizacja sugerowanych linków
 - Aktualizacja tłumaczeń
 - Poprawiono zmienianie nazwy gracza po tym jak serwer został zamknięty
-- Dodano mnożnik paneli słonecznych
\ No newline at end of file
+- Dodano mnożnik paneli słonecznych
diff --git a/fastlane/metadata/android/pl-PL/changelogs/104.5.txt b/fastlane/metadata/android/pl-PL/changelogs/104.5.txt
index 7dd8cc48dc..04976a469a 100644
--- a/fastlane/metadata/android/pl-PL/changelogs/104.5.txt
+++ b/fastlane/metadata/android/pl-PL/changelogs/104.5.txt
@@ -1,4 +1,4 @@
 - Aktualizacja sugerowanych linków
 - Aktualizacja tłumaczeń
 - Poprawiono zmienianie nazwy gracza po tym jak serwer został zamknięty
-- Dodano mnożnik paneli słonecznych
\ No newline at end of file
+- Dodano mnożnik paneli słonecznych
diff --git a/jitpack.yml b/jitpack.yml
index e1dfa83815..c06db14182 100644
--- a/jitpack.yml
+++ b/jitpack.yml
@@ -1,4 +1,4 @@
 before_install:
   - wget https://github.com/sormuras/bach/raw/master/install-jdk.sh
   - source install-jdk.sh --feature 14
-  - jshell --version
\ No newline at end of file
+  - jshell --version