Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/v7' into v7
Browse files Browse the repository at this point in the history
# Conflicts:
#	core/src/mindustry/client/Commands.kt
  • Loading branch information
buthed010203 committed Oct 7, 2024
2 parents a66ccd9 + 14c9b1b commit f1118e1
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 16 deletions.
13 changes: 7 additions & 6 deletions core/assets/bundles/bundle_ja.properties
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ client.sortedplans = 距離で建設キューを正常に並べ替えました
client.freeze = 凍結
client.confirmfreeze = {0}[white]を凍結/解凍しますか?現在の凍結状態は次のとおりです:{1}
client.rollback.title = このプレイヤーの行動をロールバックしますか?
client.banreason.title = バン理由
client.banreason.body = このバンの理由を入力してください
client.banreason.title = BANの理由
client.banreason.body = このBANの理由を入力してください
client.setupcomms = 通信用に使用
client.setupcomms.confirm = このブロックを通信に使用しますか?
client.attemwarn = ({1}, {2}) に {0} によって配置されたアテム
Expand Down Expand Up @@ -252,6 +252,7 @@ client.command.scanprocs.description = マップ上のすべてのプロセッ
client.command.marker.description = 指定された名前のマーカーを (x, y) または現在の位置に追加します。x と y が指定されていない場合は現在の位置に追加されます
client.command.marker.added = ({0}, {1}) に新しいマーカーを追加しました
client.command.js.description = クライアントで JS を実行します
client.command.kt.description = クライアントで Kotlin を実行します
client.command.serverjs.description = サーバーとクライアントの両方で JS を実行します
client.command.networking.description = 現在のクライアントネットワーキングシステムの状態を確認します
client.command.fixpower.description = [accent]すべての電力グリッドを接続します(絶縁またはダイオード化されていない場合)
Expand Down Expand Up @@ -327,9 +328,9 @@ client.command.unmute.byid = [accent]プレイヤー ID {0}!
client.command.unmute.notmuted = [scarlet]そのプレイヤーはミュートされていません!
client.command.clearmutes.description = ミュートされたプレイヤーのリストをクリアします。
client.command.clearmutes.success = [accent]ミュートされたプレイヤーのリストをクリアしました!
client.command.autoohno.description = Runs the auto ohno procedure on fish servers
client.command.autoohno.running = [accent]Running auto ohno
client.command.seer.description = Clientside moderation utilities
client.command.autoohno.description = fishサーバーで自動ohno手順を実行します
client.command.autoohno.running = [accent]自動ohno実行中
client.command.seer.description = クライアント側のモデレーションユーティリティ
client.command.seer.disabled = [scarlet]設定で Seer を有効にしてください!
client.command.admin.description = モデレーションコマンドと設定にアクセスします
# End Client Commands
Expand Down Expand Up @@ -447,7 +448,7 @@ client.setting.showtoasts.name = トーストを表示
client.setting.showtoasts.description = トーストの表示を無効にします。ClashGonesのトローリングを止めるのに便利
client.setting.unloaderview.name = 搬出機の転送を表示
client.setting.customnullunloader.name = カスタムヌルアンローダー
client.setting.cursednesslevel.name = 呪い度
client.setting.cursednesslevel.name = 呪いレベル
client.setting.cursednesslevel.description = [scarlet]てんかん警告: OHNO以上の値\n(OHNOより上に対するてんかん警告)
client.setting.showcutscenes.name = カットシーンを表示
client.setting.logiclinkorder.name = リンク解除時にロジックリンク名を解放
Expand Down
10 changes: 5 additions & 5 deletions core/src/mindustry/client/Commands.kt
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ import java.time.*
import java.time.temporal.*
import java.util.concurrent.*
import java.util.regex.*
import javax.script.*
import kotlin.math.*
import kotlin.random.*

Expand Down Expand Up @@ -204,21 +203,22 @@ fun setupCommands() {
Log.debug(out)
}

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 ->
try { ScriptEngineHolder } catch (_: Throwable) { player.sendMessage("[scarlet]The current java install does not support scripting. Please install a full jvm"); return@register }

if (installingKt) player.sendMessage("[scarlet]Already installing kotlin script support")
if (kts == null) ui.showConfirm("It seems that you do not have kotlin script support installed. Would you like to download it? (~60MB)") { // FINISHME: Bundle
if (ScriptEngineHolder.kts == null) ui.showConfirm("It seems that you do not have kotlin script support installed. Would you like to download it? (~60MB)") { // FINISHME: Bundle
installingKt = true
becontrol.downloadJar(
"https://github.com/mindustry-antigrief/kotlinScriptSupport/releases/latest/download/fooKotlinScriptSupport.jar",
Fi("fooKotlinScriptSupport.jar", Files.FileType.local),
Fi(ScriptEngineHolder::class.java.protectionDomain.codeSource.location.toURI().path).sibling("fooKotlinScriptSupport.jar"),
{ ui.showConfirm("Finished downloading kotlin script support. You must restart the game to use it. Restart now?") { restartGame() } },
{ player.sendMessage("[scarlet]Problem downloading kotlin script support ${it.printStackTrace()}") }
)
}
player.sendMessage("[accent]${try{ kts?.eval(args[0]) ?: return@register }catch(e: ScriptException){ e.message }}")
player.sendMessage("[accent]${try { ScriptEngineHolder.kts?.eval(args[0]) ?: return@register } catch (e: Throwable /* ScriptException */) { e.message }}")
}

register("/js <code...>", Core.bundle.get("client.command.serverjs.description")) { args, player ->
Expand Down
8 changes: 8 additions & 0 deletions core/src/mindustry/client/ScriptEngineHolder.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package mindustry.client

import javax.script.ScriptEngine
import javax.script.ScriptEngineManager

object ScriptEngineHolder {
val kts: ScriptEngine? by lazy { ScriptEngineManager().getEngineByExtension("kts") }
}
13 changes: 9 additions & 4 deletions core/src/mindustry/client/antigrief/Moderation.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package mindustry.client.antigrief

import arc.*
import arc.struct.*
import arc.util.*
import arc.util.serialization.*
import mindustry.*
Expand Down Expand Up @@ -101,15 +102,19 @@ class Moderation {
// Dont send in admin chat as it can get spammy
// if (info.timesJoined > 10 && info.timesKicked < 3) Vars.player.sendMessage("[accent]${player.name}[accent] has joined ${info.timesJoined-1} times before, they have been kicked ${info.timesKicked} times")
// else sendMessage("/a [scarlet]${player.name}[scarlet] has joined ${info.timesJoined-1} times before, they have been kicked ${info.timesKicked} times")
Vars.player.sendMessage("[scarlet]${player.name}[scarlet] has joined ${info.timesJoined-1} times before, they have been kicked ${info.timesKicked} times")
Vars.player.sendMessage("[scarlet]${player.name} [scarlet]has joined ${info.timesJoined-1} times before, they have been kicked ${info.timesKicked} times")
}

// These next three lines are the laziest way of deduplicating the messages but it works so we don't really care.
val ids = ObjectSet<String>()
val ips = ObjectSet<String>()
val names = ObjectSet<String>()
for (n in traces.size - 1 downTo 0) {
val i = traces[n]
if (i.trace.ip == info.uuid || i.trace.ip == info.ip) { // Update info
if (i.trace.uuid != info.uuid) Vars.player.sendMessage("[scarlet]${player.name}[scarlet] has changed UUID: ${i.trace.uuid} -> ${info.uuid}")
if (i.trace.ip != info.ip) Vars.player.sendMessage("[scarlet]${player.name}[scarlet] has changed IP: ${i.trace.ip} -> ${info.ip}")
if (i.name != player.name) Vars.player.sendMessage("[scarlet]${player.name}[scarlet] has changed name, was previously: ${i.name}")
if (i.trace.uuid != info.uuid && ids.add(i.trace.uuid)) Vars.player.sendMessage("[scarlet]${player.name} [scarlet]has changed UUID: ${i.trace.uuid} -> ${info.uuid}")
if (i.trace.ip != info.ip && ips.add(i.trace.ip)) Vars.player.sendMessage("[scarlet]${player.name} [scarlet]has changed IP: ${i.trace.ip} -> ${info.ip}")
if (i.name != player.name && names.add(i.name)) Vars.player.sendMessage("[scarlet]${player.name} [scarlet]has changed name, was previously: ${i.name}")
}
}

Expand Down
1 change: 1 addition & 0 deletions core/src/mindustry/client/ui/FindDialog.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ object FindDialog : BaseDialog("@client.find") {
init {
for ((i, img) in images.withIndex()) {
img.clicked { // When image clicked, select it
if (guesses.size <= i) return@clicked
val gi = guesses[i]
guesses[i] = guesses[0]
guesses[0] = gi
Expand Down
2 changes: 1 addition & 1 deletion core/src/mindustry/client/utils/AutoTransfer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ class AutoTransfer {

/** Transfers outputs from blocks into core/containers */
private fun drain(): Boolean { // FINISHME: Until this class is refactored to have a more generic input output system I'm just gonna copy a lot of code into this function
core = player.closestCore()
core = player.closestCore() ?: return@drain false
val nearCore = player.within(core, itemTransferRange)
if (!nearCore) core = null

Expand Down

0 comments on commit f1118e1

Please sign in to comment.