diff --git a/.run/Mindustry-moreLogicMod [jar].run.xml b/.run/Mindustry-moreLogicMod [jar].run.xml
new file mode 100644
index 0000000..b9832a2
--- /dev/null
+++ b/.run/Mindustry-moreLogicMod [jar].run.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 9844352..dada7b2 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,43 +1,55 @@
-version '1.0'
+apply plugin: "java"
-buildscript {
- repositories {
- mavenCentral()
- }
+version '1.0'
- ext {
- //the build number that this mod is made for
- mindustryVersion = 'v136'
- kotlinVersion = "1.7.10"
- sdkRoot = System.getenv("ANDROID_HOME") ?: System.getenv("ANDROID_SDK_ROOT")
- gameData = System.getenv("TEMP") ?: System.getenv("TMP")
- }
+sourceSets.main.java.srcDirs = ["src"]
- dependencies {
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
- }
+repositories {
+ mavenCentral()
+ maven { url "https://raw.githubusercontent.com/Zelaux/MindustryRepo/master/repository" }
+ maven { url 'https://www.jitpack.io' }
}
-apply plugin: "kotlin"
+java {
+ targetCompatibility = 8
+ sourceCompatibility = JavaVersion.VERSION_17
+}
-sourceSets.main.kotlin.srcDirs = ["src"]
+ext {
+ //the build number that this mod is made for
+ mindustryVersion = 'v146'
+ jabelVersion = "93fde537c7"
+ //windows sucks
+ isWindows = System.getProperty("os.name").toLowerCase().contains("windows")
+ sdkRoot = System.getenv("ANDROID_HOME") ?: System.getenv("ANDROID_SDK_ROOT")
+}
-repositories {
- mavenCentral()
- maven { url 'https://www.jitpack.io' }
+//java 8 backwards compatibility flag
+allprojects {
+ tasks.withType(JavaCompile).tap {
+ configureEach {
+ options.compilerArgs.addAll(['--release', '8'])
+ }
+ }
}
dependencies {
compileOnly "com.github.Anuken.Arc:arc-core:$mindustryVersion"
compileOnly "com.github.Anuken.Mindustry:core:$mindustryVersion"
+
+ annotationProcessor "com.github.Anuken:jabel:$jabelVersion"
}
-compileKotlin {
- sourceCompatibility = JavaVersion.VERSION_17
- targetCompatibility = JavaVersion.VERSION_1_8
+//force arc version
+configurations.configureEach {
+ resolutionStrategy.eachDependency { details ->
+ if (details.requested.group == 'com.github.Anuken.Arc') {
+ details.useVersion "$mindustryVersion"
+ }
+ }
}
-task jarAndroid {
+tasks.register('jarAndroid') {
dependsOn "jar"
doLast {
@@ -50,15 +62,16 @@ task jarAndroid {
//collect dependencies needed for desugaring
def dependencies = (configurations.compileClasspath.asList() + configurations.runtimeClasspath.asList() + [new File(platformRoot, "android.jar")]).collect { "--classpath $it.path" }.join(" ")
+ def d8 = isWindows ? "d8.bat" : "d8"
+
//dex and desugar files - this requires d8 in your PATH
- "d8 $dependencies --min-api 14 --output ${project.archivesBaseName}Android.jar ${project.archivesBaseName}Desktop.jar"
+ "$d8 $dependencies --min-api 14 --output ${base.archivesBaseName}Android.jar ${base.archivesBaseName}Desktop.jar"
.execute(null, new File("$buildDir/libs")).waitForProcessOutput(System.out, System.err)
}
}
jar {
- duplicatesStrategy = DuplicatesStrategy.EXCLUDE
- archiveFileName = "${project.archivesBaseName}Desktop.jar"
+ archiveFileName = "${base.archivesBaseName}Desktop.jar"
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
@@ -73,28 +86,17 @@ jar {
}
}
-task deploy(type: Jar) {
+tasks.register('deploy', Jar) {
dependsOn jarAndroid
dependsOn jar
- duplicatesStrategy = DuplicatesStrategy.EXCLUDE
- archiveFileName = "${project.archivesBaseName}.jar"
+ archiveFileName = "${base.archivesBaseName}.jar"
- from { [zipTree("$buildDir/libs/${project.archivesBaseName}Desktop.jar"), zipTree("$buildDir/libs/${project.archivesBaseName}Android.jar")] }
+ from { [zipTree("$buildDir/libs/${base.archivesBaseName}Desktop.jar"), zipTree("$buildDir/libs/${base.archivesBaseName}Android.jar")] }
doLast {
delete {
- delete "$buildDir/libs/${project.archivesBaseName}Desktop.jar"
- delete "$buildDir/libs/${project.archivesBaseName}Android.jar"
+ delete "$buildDir/libs/${base.archivesBaseName}Desktop.jar"
+ delete "$buildDir/libs/${base.archivesBaseName}Android.jar"
}
}
}
-
-task copy2game(type: Copy) {
- dependsOn jar
- from file("$buildDir/libs/")
- include("${project.archivesBaseName}Desktop.jar")
- into "$gameData/../../Roaming/Mindustry/mods"
- doLast {
- println "copy jar"
- }
-}
diff --git a/mod.hjson b/mod.hjson
index ef15c79..2facd06 100644
--- a/mod.hjson
+++ b/mod.hjson
@@ -17,7 +17,7 @@ description: "添加更多逻辑条:打印缓存处理逻辑"
version: 1.2
#the minimum game build required to run this mod
-minGameVersion: 136
+minGameVersion: 146
#this is a java mod
java: true
diff --git a/src/bin/morelogic/MoreStringLogicJavaPlugin.java b/src/bin/morelogic/MoreStringLogicJavaPlugin.java
new file mode 100644
index 0000000..2c47a12
--- /dev/null
+++ b/src/bin/morelogic/MoreStringLogicJavaPlugin.java
@@ -0,0 +1,22 @@
+package bin.morelogic;
+
+import arc.util.Log;
+import mindustry.gen.LogicIO;
+import mindustry.logic.LAssembler;
+import mindustry.mod.Plugin;
+
+/**
+ * @author bin
+ * @version 1.0.0
+ * @since 2024/2/14
+ */
+@SuppressWarnings("unused")
+public class MoreStringLogicJavaPlugin extends Plugin {
+ @Override
+ public void init() {
+ Log.info("Loading MoreStringLogicJavaPlugin.");
+ LAssembler.customParsers.put(PrintBufferStatement.ID, PrintBufferStatement::read);
+ LogicIO.allStatements.add(PrintBufferStatement::new);
+ Log.info("End Loaded MoreStringLogicJavaPlugin.");
+ }
+}
diff --git a/src/bin/morelogic/MoreStringLogicJavaPlugin.kt b/src/bin/morelogic/MoreStringLogicJavaPlugin.kt
deleted file mode 100644
index 37c4028..0000000
--- a/src/bin/morelogic/MoreStringLogicJavaPlugin.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package bin.morelogic
-
-import arc.util.Log
-import mindustry.gen.LogicIO
-import mindustry.logic.LAssembler
-import mindustry.mod.Plugin
-
-/**
- * @author bin
- */
-class MoreStringLogicJavaPlugin : Plugin() {
- override fun init() {
- Log.info("Loading MoreStringLogicJavaPlugin.")
- LAssembler.customParsers.put(PrintBufferStatement.ID, PrintBufferStatement::read)
- LogicIO.allStatements.add(::PrintBufferStatement)
- Log.info("End Loaded MoreStringLogicJavaPlugin.")
- }
-}
diff --git a/src/bin/morelogic/PrintBufferStatement.java b/src/bin/morelogic/PrintBufferStatement.java
new file mode 100644
index 0000000..5e58ae0
--- /dev/null
+++ b/src/bin/morelogic/PrintBufferStatement.java
@@ -0,0 +1,88 @@
+package bin.morelogic;
+
+import arc.func.Cons;
+import arc.scene.ui.Button;
+import arc.scene.ui.TextField;
+import arc.scene.ui.layout.Cell;
+import arc.scene.ui.layout.Table;
+import arc.util.Strings;
+import bin.morelogic.statement.StringOp;
+import mindustry.logic.LAssembler;
+import mindustry.logic.LCategory;
+import mindustry.logic.LExecutor;
+import mindustry.logic.LStatement;
+
+/**
+ * @author bin
+ * @version 1.0.0
+ * @since 2024/2/14
+ */
+public class PrintBufferStatement extends LStatement {
+ public static final String ID = "bin_String";
+
+ public StringOp op = StringOp.GetLength;
+ public String[] args = {"dest", "a", "b", "c"};
+
+ @Override
+ public Cell field(Table table, String value, Cons setter) {
+ return super.field(table, value, setter);
+ }
+
+ @Override
+ public void build(Table table) {
+ op.invoke(this, table);
+ }
+
+ @Override
+ public void showSelect(Button b, T[] values, T current, Cons getter) {
+ super.showSelect(b, values, current, getter, 4, it -> it.size(144f, 40f));
+ }
+
+ @Override
+ public LExecutor.LInstruction build(LAssembler builder) {
+ return op.invoke(vars(builder, args));
+ }
+
+ @Override
+ public LCategory category() {
+ return LCategory.operation;
+ }
+
+ @Override
+ public void write(StringBuilder builder) {
+ builder.append(ID);
+ builder.append(" ").append(op.name());
+ for (var s : args) {
+ builder.append(" ").append(s);
+ }
+ }
+
+ @Override
+ public String name() {
+ return Strings.insertSpaces("PrintBuffer");
+ }
+
+ public static LStatement read(String[] tokens) {
+ var statement = new PrintBufferStatement();
+ var length = tokens.length;
+ if (length > 1) {
+ statement.op = StringOp.value(tokens[1]);
+ }
+ var args = statement.args;
+ for (int it = 0, size = Math.min(args.length, length - 2); it < size; it++) {
+ String token = tokens[it + 2];
+ if (token != null) {
+ args[it] = token;
+ }
+ }
+ return statement;
+ }
+
+ public static int[] vars(LAssembler builder, String[] symbols) {
+ var arr = new int[symbols.length];
+ for (int it = 0, size = symbols.length; it < size; it++) {
+ arr[it] = builder.var(symbols[it]);
+ }
+ return arr;
+ }
+}
diff --git a/src/bin/morelogic/PrintBufferStatement.kt b/src/bin/morelogic/PrintBufferStatement.kt
deleted file mode 100644
index ef8b7e9..0000000
--- a/src/bin/morelogic/PrintBufferStatement.kt
+++ /dev/null
@@ -1,71 +0,0 @@
-package bin.morelogic
-
-import arc.func.Cons
-import arc.scene.ui.Button
-import arc.scene.ui.TextField
-import arc.scene.ui.layout.Cell
-import arc.scene.ui.layout.Table
-import arc.util.Strings
-import bin.morelogic.statement.StringOp
-import mindustry.logic.LAssembler
-import mindustry.logic.LCategory
-import mindustry.logic.LExecutor.LInstruction
-import mindustry.logic.LStatement
-import kotlin.math.min
-
-/**
- * 字符串拼接
- * TODO: 字符串的切片,插入,拆除,判断
- * @author bin
- */
-class PrintBufferStatement : LStatement() {
- var op = StringOp.GetLength
- var args = arrayOf("dest", "a", "b", "c")
-
- override fun build(table: Table) = op.run { invoke(table) }
-
- public override fun field(table: Table?, value: String?, setter: Cons?): Cell =
- super.field(table, value, setter)
-
- public override fun row(table: Table?) = super.row(table)
- public override fun showSelect(b: Button?, values: Array?, current: T, getter: Cons?) =
- super.showSelect(b, values, current, getter, 4) { it.size(144f, 40f) }
-
- override fun build(builder: LAssembler): LInstruction = op(builder.vars(args))
-
- override fun category(): LCategory = LCategory.operation
-
- override fun write(builder: StringBuilder) {
- builder.append(ID)
- builder.append(" ").append(op.name)
- for (s in args) {
- builder.append(" ").append(s)
- }
- }
-
- override fun name(): String {
- return Strings.insertSpaces(javaClass.simpleName.replace("Statement", ""))
- }
-
- companion object {
- const val ID = "bin_String"
- fun read(tokens: Array): LStatement {
- return PrintBufferStatement().apply {
- val length = tokens.size
- if (length > 1) op = StringOp.value(tokens[1])
- repeat(min(args.size, length - 2)) {
- args[it] = tokens[it + 2] ?: args[it]
- }
- }
- }
-
- @JvmStatic
- fun LAssembler.vars(symbols: Array): IntArray {
- return IntArray(symbols.size) {
- `var`(symbols[it])
- }
- }
-
- }
-}
-
diff --git a/src/bin/morelogic/statement/StringOp.java b/src/bin/morelogic/statement/StringOp.java
new file mode 100644
index 0000000..1886eba
--- /dev/null
+++ b/src/bin/morelogic/statement/StringOp.java
@@ -0,0 +1,383 @@
+package bin.morelogic.statement;
+
+import arc.scene.ui.Button;
+import arc.scene.ui.layout.Cell;
+import arc.scene.ui.layout.Table;
+import bin.morelogic.PrintBufferStatement;
+import mindustry.content.Blocks;
+import mindustry.ctype.Content;
+import mindustry.ctype.MappableContent;
+import mindustry.game.Team;
+import mindustry.gen.Building;
+import mindustry.gen.Unit;
+import mindustry.logic.LExecutor;
+import mindustry.ui.Styles;
+import mindustry.world.blocks.logic.MessageBlock;
+
+/**
+ * @author bin
+ * @version 1.0.0
+ * @since 2024/2/14
+ */
+public enum StringOp {
+ ReadFrom {
+ @Override
+ public LExecutor.LInstruction invoke(int[] args) {
+ return new OpI(args);
+ }
+
+ @Override
+ public void buttonTooltip(Cell