Skip to content

Commit

Permalink
Improve kotlin scripting support
Browse files Browse the repository at this point in the history
  • Loading branch information
buthed010203 committed Oct 7, 2024
1 parent b75f01d commit 33e8cee
Show file tree
Hide file tree
Showing 6 changed files with 6 additions and 8 deletions.
1 change: 0 additions & 1 deletion core/assets/scripts/global.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ importPackage(Packages.arc.scene.ui.layout)
importPackage(Packages.arc.scene.utils)
importPackage(Packages.arc.struct)
importPackage(Packages.arc.util)
importPackage(Packages.arc.util.async)
importPackage(Packages.arc.util.io)
importPackage(Packages.arc.util.noise)
importPackage(Packages.arc.util.pooling)
Expand Down
1 change: 0 additions & 1 deletion core/src/mindustry/client/Client.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ object Client {
val tilesNaval = Seq<Tile>()
val timer = Interval(4)
val autoTransfer by lazy(::AutoTransfer) // FINISHME: Awful
// val kts by lazy { ScriptEngineManager().getEngineByExtension("kts") }

private val massDriverGreen: Color = Color.green.cpy().a(.7f)
private val massDriverYellow: Color = Color.yellow.cpy().a(.7f)
Expand Down
4 changes: 2 additions & 2 deletions core/src/mindustry/client/Commands.kt
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ fun setupCommands() {
Log.debug(out)
}

val kts by lazy { ScriptEngineManager().getEngineByExtension("kts") }
val kts by lazy { ScriptEngineManager().getEngineByExtension("kts")?.apply { eval("import arc.*;import arc.audio.*;import arc.files.*;import arc.func.*;import arc.flabel.*;import arc.graphics.*;import arc.graphics.g2d.*;import arc.graphics.gl.*;import arc.input.*;import arc.math.*;import arc.math.geom.*;import arc.scene.*;import arc.scene.actions.*;import arc.scene.event.*;import arc.scene.style.*;import arc.scene.ui.*;import arc.scene.ui.layout.*;import arc.scene.utils.*;import arc.struct.*;import arc.util.*;import arc.util.io.*;import arc.util.noise.*;import arc.util.pooling.*;import arc.util.serialization.*;import arc.util.viewport.*;import mindustry.*;import mindustry.ai.*;import mindustry.ai.types.*;import mindustry.async.*;import mindustry.audio.*;import mindustry.content.*;import mindustry.core.*;import mindustry.ctype.*;import mindustry.editor.*;import mindustry.entities.*;import mindustry.entities.abilities.*;import mindustry.entities.bullet.*;import mindustry.entities.effect.*;import mindustry.entities.part.*;import mindustry.entities.pattern.*;import mindustry.entities.units.*;import mindustry.game.*;import mindustry.gen.*;import mindustry.graphics.*;import mindustry.graphics.g3d.*;import mindustry.input.*;import mindustry.io.*;import mindustry.logic.*;import mindustry.maps.*;import mindustry.maps.filters.*;import mindustry.maps.generators.*;import mindustry.maps.planet.*;import mindustry.net.*;import mindustry.service.*;import mindustry.type.*;import mindustry.type.ammo.*;import mindustry.type.unit.*;import mindustry.type.weapons.*;import mindustry.type.weather.*;import mindustry.ui.*;import mindustry.ui.dialogs.*;import mindustry.ui.fragments.*;import mindustry.ui.layout.*;import mindustry.world.*;import mindustry.world.blocks.*;import mindustry.world.blocks.campaign.*;import mindustry.world.blocks.defense.*;import mindustry.world.blocks.defense.turrets.*;import mindustry.world.blocks.distribution.*;import mindustry.world.blocks.environment.*;import mindustry.world.blocks.heat.*;import mindustry.world.blocks.legacy.*;import mindustry.world.blocks.liquid.*;import mindustry.world.blocks.logic.*;import mindustry.world.blocks.payloads.*;import mindustry.world.blocks.power.*;import mindustry.world.blocks.production.*;import mindustry.world.blocks.sandbox.*;import mindustry.world.blocks.storage.*;import mindustry.world.blocks.units.*;import mindustry.world.consumers.*;import mindustry.world.draw.*;import mindustry.world.meta.*;import mindustry.world.modules.*;import mindustry.client.*;import mindustry.client.antigrief.*;import mindustry.client.communication.*;import mindustry.client.crypto.*;import mindustry.client.navigation.*;import mindustry.client.navigation.waypoints.*;import mindustry.client.ui.*;import mindustry.client.utils.*;") } }
var installingKt = false
// This command doesn't work unless the supporting jar file is on the class path
register("kt <code...>", Core.bundle.get("client.command.kts.description")) { args, player: Player ->
Expand Down Expand Up @@ -767,7 +767,7 @@ fun setupCommands() {
val current = ui.join.lastHost ?: return@register
if (current.group == null) current.group = ui.join.communityHosts.find { it == current } ?.group ?: return@register
switchTo = ui.join.communityHosts.filterTo(arrayListOf<Any>()) { it.group == current.group && it != current && (it.version == Version.build || Version.build == -1) }.apply { add(current); add(u) }
val first = switchTo!!.removeFirst() as Host
val first = switchTo!!.removeAt(0) as Host
NetClient.connect(first.address, first.port)
}

Expand Down
6 changes: 3 additions & 3 deletions core/src/mindustry/ui/fragments/ChatFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ private void setup(){
}
@Override
public void paste(String content, boolean fireChangeEvent) {
if (content != null && content.startsWith("!js ") &&
if (content != null && (content.startsWith("!js ") || content.startsWith("!kt ")) &&
Math.min(hasSelection ? selectionStart : Integer.MAX_VALUE, cursor) == 0) // Only increase length if pasting into front of text
chatfield.setMaxLength(0);
super.paste(content, fireChangeEvent);
Expand All @@ -157,7 +157,7 @@ public void paste(String content, boolean fireChangeEvent) {
chatfield.setProgrammaticChangeEvents(true);
chatfield.setFilter((f, c) -> c != '\t'); // Using .changed(...) and allowing tabs causes problems for tab completion and cursor position, .typed(...) doesn't do what I need
chatfield.changed(() -> {
chatfield.setMaxLength(chatfield.getText().startsWith("!js ") ? 0 : maxTextLength - 2); // Scuffed way to allow long js
chatfield.setMaxLength(chatfield.getText().startsWith("!js ") || chatfield.getText().startsWith("!kt ") ? 0 : maxTextLength - 2); // Scuffed way to allow long js

// FINISHME: Implement proper replacement & string interpolation system
var replacement = switch (chatfield.getText().replaceFirst("^" + mode.normalizedPrefix(), "")) {
Expand Down Expand Up @@ -526,7 +526,7 @@ public void hide(){
}

public void updateChat(){
chatfield.setMaxLength(history.get(historyPos).startsWith("!js ") ? 0 : maxTextLength - 2);
chatfield.setMaxLength(history.get(historyPos).startsWith("!js ") || history.get(historyPos).startsWith("!kt ") ? 0 : maxTextLength - 2);
chatfield.setText(mode.normalizedPrefix() + history.get(historyPos));
updateCursor();
}
Expand Down
2 changes: 1 addition & 1 deletion desktop/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def platforms = ["Linux64", "Windows64", "Windows32", "MacOS"]

task run(dependsOn: classes, type: JavaExec){
mainClass = project.mainClassName
classpath = sourceSets.main.runtimeClasspath + files("../bouncycastle/bcprov-jdk15on.jar", "../bouncycastle/bcpkix-jdk15on.jar", "../bouncycastle/bctls-jdk15on.jar", "../bouncycastle/bcutil-jdk15on.jar")
classpath = sourceSets.main.runtimeClasspath + files("../bouncycastle/bcprov-jdk15on.jar", "../bouncycastle/bcpkix-jdk15on.jar", "../bouncycastle/bctls-jdk15on.jar", "../bouncycastle/bcutil-jdk15on.jar", "../fooKotlinScriptSupport.jar")
standardInput = System.in
workingDir = project.assetsDir
ignoreExitValue = true
Expand Down
Binary file added fooKotlinScriptSupport.jar
Binary file not shown.

0 comments on commit 33e8cee

Please sign in to comment.