From 30da957baadf495ab321c04003709d266e1ce83b Mon Sep 17 00:00:00 2001 From: Bixilon Date: Wed, 29 Dec 2021 19:17:33 +0100 Subject: [PATCH] remove more Util functions, bump kutil to 1.3 --- pom.xml | 2 +- src/main/java/de/bixilon/minosoft/Minosoft.kt | 7 +- .../assets/minecraft/JarAssetsManager.kt | 4 +- .../minecraft/index/IndexAssetsManager.kt | 20 ++- .../minosoft/assets/util/FileAssetsUtil.kt | 10 +- .../config/profile/GlobalProfileManager.kt | 4 +- .../minosoft/config/profile/ProfileManager.kt | 4 +- .../profiles/account/AccountProfile.kt | 5 +- .../player/properties/PlayerProperties.kt | 3 +- .../data/registries/ResourceLocation.kt | 4 +- .../registries/registries/RegistriesLoader.kt | 12 +- .../minosoft/data/text/TextComponent.kt | 3 +- .../minosoft/data/text/events/ClickEvent.kt | 5 +- .../gui/eros/crash/ErosCrashReport.kt | 4 +- .../main/play/server/card/FaviconManager.kt | 4 +- .../gui/rendering/util/ScreenshotTaker.kt | 4 +- .../s2c/play/ResourcepackRequestS2CP.kt | 5 +- .../protocol/protocol/LANServerListener.kt | 6 +- .../java/de/bixilon/minosoft/util/KUtil.kt | 15 ++ .../java/de/bixilon/minosoft/util/Util.java | 143 +----------------- 20 files changed, 72 insertions(+), 192 deletions(-) diff --git a/pom.xml b/pom.xml index 5b6d266f1..32c40afc2 100644 --- a/pom.xml +++ b/pom.xml @@ -457,7 +457,7 @@ de.bixilon kutil - 1.1 + 1.3 diff --git a/src/main/java/de/bixilon/minosoft/Minosoft.kt b/src/main/java/de/bixilon/minosoft/Minosoft.kt index 7d863670e..86b52e837 100644 --- a/src/main/java/de/bixilon/minosoft/Minosoft.kt +++ b/src/main/java/de/bixilon/minosoft/Minosoft.kt @@ -19,6 +19,7 @@ import de.bixilon.kutil.concurrent.worker.tasks.Task import de.bixilon.kutil.file.watcher.FileWatcherService import de.bixilon.kutil.latch.CountUpAndDownLatch import de.bixilon.kutil.os.OSUtil +import de.bixilon.kutil.reflection.ReflectionUtil.forceInit import de.bixilon.minosoft.assets.file.ResourcesAssetsUtil import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties import de.bixilon.minosoft.config.profile.GlobalProfileManager @@ -43,8 +44,8 @@ import de.bixilon.minosoft.terminal.CLI import de.bixilon.minosoft.terminal.CommandLineArguments import de.bixilon.minosoft.terminal.RunConfiguration import de.bixilon.minosoft.util.GitInfo +import de.bixilon.minosoft.util.KUtil import de.bixilon.minosoft.util.RenderPolling -import de.bixilon.minosoft.util.Util import de.bixilon.minosoft.util.YggdrasilUtil import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels @@ -61,7 +62,7 @@ object Minosoft { @JvmStatic fun main(args: Array) { CommandLineArguments.parse(args) - Util.initUtilClasses() + KUtil.initUtilClasses() MINOSOFT_ASSETS_MANAGER.load(CountUpAndDownLatch(0)) Log.log(LogMessageType.OTHER, LogLevels.INFO) { "Starting minosoft" } @@ -123,7 +124,7 @@ object Minosoft { taskWorker += Task(identifier = StartupTasks.STARTUP_PROGRESS, executor = { StartingDialog(START_UP_LATCH).show() }, dependencies = arrayOf(StartupTasks.LOAD_LANGUAGE_FILES, StartupTasks.INITIALIZE_JAVAFX)) - Util.forceClassInit(Eros::class.java) + Eros::class.java.forceInit() } taskWorker += Task(identifier = StartupTasks.LOAD_YGGDRASIL, executor = { YggdrasilUtil.load() }) diff --git a/src/main/java/de/bixilon/minosoft/assets/minecraft/JarAssetsManager.kt b/src/main/java/de/bixilon/minosoft/assets/minecraft/JarAssetsManager.kt index 3d8724603..9935354cc 100644 --- a/src/main/java/de/bixilon/minosoft/assets/minecraft/JarAssetsManager.kt +++ b/src/main/java/de/bixilon/minosoft/assets/minecraft/JarAssetsManager.kt @@ -15,6 +15,7 @@ package de.bixilon.minosoft.assets.minecraft import com.fasterxml.jackson.databind.JsonNode import de.bixilon.kutil.latch.CountUpAndDownLatch +import de.bixilon.kutil.string.StringUtil.format import de.bixilon.minosoft.assets.InvalidAssetException import de.bixilon.minosoft.assets.util.FileAssetsUtil import de.bixilon.minosoft.assets.util.FileUtil @@ -26,7 +27,6 @@ import de.bixilon.minosoft.data.registries.versions.Version import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.util.KUtil.generalize import de.bixilon.minosoft.util.KUtil.toResourceLocation -import de.bixilon.minosoft.util.Util import de.bixilon.minosoft.util.json.Jackson import org.kamranzafar.jtar.TarEntry import org.kamranzafar.jtar.TarHeader @@ -62,7 +62,7 @@ class JarAssetsManager( } else { var clientJar = FileUtil.safeReadFile(File(FileAssetsUtil.getPath(clientJarHash)), false)?.readZipArchive() if (clientJar == null) { - val downloaded = FileAssetsUtil.downloadAndGetAsset(Util.formatString(profile.source.launcherPackages, mapOf( + val downloaded = FileAssetsUtil.downloadAndGetAsset(profile.source.launcherPackages.format(mapOf( "fullHash" to clientJarHash, "filename" to "client.jar", )), false, FileAssetsUtil.HashTypes.SHA1) diff --git a/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt b/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt index fa3df17cd..cef3e993e 100644 --- a/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt +++ b/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt @@ -19,6 +19,7 @@ import de.bixilon.kutil.concurrent.pool.ThreadPool import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable import de.bixilon.kutil.latch.CountUpAndDownLatch import de.bixilon.kutil.primitive.LongUtil.toLong +import de.bixilon.kutil.string.StringUtil.format import de.bixilon.minosoft.assets.minecraft.MinecraftAssetsManager import de.bixilon.minosoft.assets.util.FileAssetsUtil import de.bixilon.minosoft.assets.util.FileAssetsUtil.toAssetName @@ -28,7 +29,6 @@ import de.bixilon.minosoft.config.StaticConfiguration import de.bixilon.minosoft.config.profile.profiles.resources.ResourcesProfile import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition -import de.bixilon.minosoft.util.Util import de.bixilon.minosoft.util.json.Jackson import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels @@ -55,11 +55,10 @@ class IndexAssetsManager( private set private fun downloadAssetsIndex(): Map { - return Jackson.MAPPER.readValue(FileAssetsUtil.downloadAndGetAsset(Util.formatString(profile.source.mojangPackages, - mapOf( - "fullHash" to indexHash, - "filename" to "$assetsVersion.json", - )), hashType = FileAssetsUtil.HashTypes.SHA1).second, Jackson.JSON_MAP_TYPE) + return Jackson.MAPPER.readValue(FileAssetsUtil.downloadAndGetAsset(profile.source.mojangPackages.format(mapOf( + "fullHash" to indexHash, + "filename" to "$assetsVersion.json", + )), hashType = FileAssetsUtil.HashTypes.SHA1).second, Jackson.JSON_MAP_TYPE) } fun verifyAsset(hash: String) { @@ -67,11 +66,10 @@ class IndexAssetsManager( if (FileAssetsUtil.verifyAsset(hash, file, verify, hashType = FileAssetsUtil.HashTypes.SHA1)) { return } - val url = Util.formatString(profile.source.minecraftResources, - mapOf( - "hashPrefix" to hash.substring(0, 2), - "fullHash" to hash, - )) + val url = profile.source.minecraftResources.format(mapOf( + "hashPrefix" to hash.substring(0, 2), + "fullHash" to hash, + )) Log.log(LogMessageType.ASSETS, LogLevels.VERBOSE) { "Downloading asset $url" } val downloadedHash = FileAssetsUtil.downloadAsset(url, hashType = FileAssetsUtil.HashTypes.SHA1) if (downloadedHash != hash) { diff --git a/src/main/java/de/bixilon/minosoft/assets/util/FileAssetsUtil.kt b/src/main/java/de/bixilon/minosoft/assets/util/FileAssetsUtil.kt index 154c9a170..7b9f541c4 100644 --- a/src/main/java/de/bixilon/minosoft/assets/util/FileAssetsUtil.kt +++ b/src/main/java/de/bixilon/minosoft/assets/util/FileAssetsUtil.kt @@ -15,11 +15,13 @@ package de.bixilon.minosoft.assets.util import com.github.luben.zstd.ZstdInputStream import com.github.luben.zstd.ZstdOutputStream +import de.bixilon.kutil.array.ByteArrayUtil.toHex import de.bixilon.kutil.hex.HexUtil.isHexString +import de.bixilon.kutil.random.RandomStringUtil.randomString import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.terminal.RunConfiguration -import de.bixilon.minosoft.util.Util +import de.bixilon.minosoft.util.KUtil import java.io.* import java.net.URL import java.nio.file.Files @@ -47,7 +49,7 @@ object FileAssetsUtil { fun saveAndGet(stream: InputStream, compress: Boolean = true, get: Boolean = true, hashType: HashTypes = HashTypes.SHA256): Pair { var tempFile: File do { - tempFile = File(RunConfiguration.TEMPORARY_FOLDER + Util.generateRandomString(32)) + tempFile = File(RunConfiguration.TEMPORARY_FOLDER + KUtil.RANDOM.randomString(32)) } while (tempFile.exists()) tempFile.parentFile.apply { mkdirs() @@ -80,7 +82,7 @@ object FileAssetsUtil { } } output.close() - val hash = Util.byteArrayToHexString(digest.digest()) + val hash = digest.digest().toHex() val file = File(getPath(hash)) if (file.exists()) { @@ -157,7 +159,7 @@ object FileAssetsUtil { } digest.update(buffer, 0, length) } - val equals = hash == Util.byteArrayToHexString(digest.digest()) + val equals = hash == digest.digest().toHex() if (!equals) { file.delete() } diff --git a/src/main/java/de/bixilon/minosoft/config/profile/GlobalProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/GlobalProfileManager.kt index 460359beb..98cbbcdad 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/GlobalProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/GlobalProfileManager.kt @@ -8,6 +8,7 @@ import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.concurrent.time.TimeWorker import de.bixilon.kutil.concurrent.time.TimeWorkerTask import de.bixilon.kutil.file.FileUtil +import de.bixilon.kutil.file.FileUtil.read import de.bixilon.minosoft.config.profile.profiles.Profile import de.bixilon.minosoft.config.profile.profiles.account.AccountProfileManager import de.bixilon.minosoft.config.profile.profiles.audio.AudioProfileManager @@ -24,7 +25,6 @@ import de.bixilon.minosoft.config.profile.profiles.resources.ResourcesProfileMan import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport.Companion.crash import de.bixilon.minosoft.terminal.RunConfiguration -import de.bixilon.minosoft.util.Util import de.bixilon.minosoft.util.json.Jackson import java.io.File @@ -74,7 +74,7 @@ object GlobalProfileManager { } this.selectedProfiles.original.clear() - this.selectedProfiles.original.putAll(Jackson.MAPPER.readValue(Util.readFile(file.path), SELECTED_PROFILES_TYPE)) + this.selectedProfiles.original.putAll(Jackson.MAPPER.readValue(file.read(), SELECTED_PROFILES_TYPE)) } finally { selectedProfiles.lock.unlock() } diff --git a/src/main/java/de/bixilon/minosoft/config/profile/ProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/ProfileManager.kt index 610f891ac..c7eb35ed7 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/ProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/ProfileManager.kt @@ -4,6 +4,7 @@ import com.google.common.collect.HashBiMap import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.exception.ExceptionUtil.tryCatch import de.bixilon.kutil.file.FileUtil +import de.bixilon.kutil.file.FileUtil.read import de.bixilon.kutil.file.watcher.FileWatcher import de.bixilon.kutil.file.watcher.FileWatcherService import de.bixilon.kutil.primitive.IntUtil.toInt @@ -16,7 +17,6 @@ import de.bixilon.minosoft.config.profile.profiles.Profile import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport.Companion.crash import de.bixilon.minosoft.terminal.RunConfiguration -import de.bixilon.minosoft.util.Util import de.bixilon.minosoft.util.json.Jackson import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels @@ -238,7 +238,7 @@ interface ProfileManager { fun readAndMigrate(path: String): Pair?> { var saveFile = false val json: MutableMap? - val jsonString = tryCatch(FileNotFoundException::class.java) { Util.readFile(path) } + val jsonString = tryCatch(FileNotFoundException::class.java) { File(path).read() } if (jsonString != null) { json = Jackson.MAPPER.readValue(jsonString, Jackson.JSON_MAP_TYPE)!! val version = json["version"]?.toInt() ?: throw IllegalArgumentException("Can not find version attribute in profile: $path") diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/account/AccountProfile.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/account/AccountProfile.kt index 861f312d7..189547039 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/account/AccountProfile.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/account/AccountProfile.kt @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore import com.fasterxml.jackson.annotation.JsonInclude import com.fasterxml.jackson.annotation.JsonProperty import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.random.RandomStringUtil.randomString import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.config.profile.profiles.Profile import de.bixilon.minosoft.config.profile.profiles.account.AccountProfileManager.backingDelegate @@ -11,7 +12,7 @@ import de.bixilon.minosoft.config.profile.profiles.account.AccountProfileManager import de.bixilon.minosoft.config.profile.profiles.account.AccountProfileManager.latestVersion import de.bixilon.minosoft.config.profile.profiles.account.AccountProfileManager.mapDelegate import de.bixilon.minosoft.data.accounts.Account -import de.bixilon.minosoft.util.Util +import de.bixilon.minosoft.util.KUtil /** * Profile for accounts @@ -33,7 +34,7 @@ class AccountProfile( * This 128 length long string is generated randomly while the profile was created * Will be sent to mojang when logging in/refreshing an account */ - var clientToken by delegate(Util.generateRandomString(128)) + var clientToken by delegate(KUtil.RANDOM.randomString(128)) /** * All accounts diff --git a/src/main/java/de/bixilon/minosoft/data/player/properties/PlayerProperties.kt b/src/main/java/de/bixilon/minosoft/data/player/properties/PlayerProperties.kt index 230527376..e28ac6a24 100644 --- a/src/main/java/de/bixilon/minosoft/data/player/properties/PlayerProperties.kt +++ b/src/main/java/de/bixilon/minosoft/data/player/properties/PlayerProperties.kt @@ -5,7 +5,6 @@ import de.bixilon.kutil.json.JsonUtil.toJsonList import de.bixilon.kutil.uuid.UUIDUtil.trim import de.bixilon.minosoft.assets.util.FileUtil.readJsonObject import de.bixilon.minosoft.data.player.properties.textures.PlayerTextures -import de.bixilon.minosoft.util.Util import java.net.URL import java.util.* @@ -19,7 +18,7 @@ class PlayerProperties( fun fetch(uuid: UUID): PlayerProperties { - val url = Util.formatString(URL, mapOf("uuid" to uuid.trim())) + val url = URL.format(mapOf("uuid" to uuid.trim())) val data = URL(url).openStream().readJsonObject() var textures: PlayerTextures? = null diff --git a/src/main/java/de/bixilon/minosoft/data/registries/ResourceLocation.kt b/src/main/java/de/bixilon/minosoft/data/registries/ResourceLocation.kt index 1c94c81fc..cb605ac8d 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/ResourceLocation.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/ResourceLocation.kt @@ -12,9 +12,9 @@ */ package de.bixilon.minosoft.data.registries +import de.bixilon.kutil.string.StringUtil.isLowercase import de.bixilon.minosoft.data.registries.registries.registry.Translatable import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition -import de.bixilon.minosoft.util.Util import java.util.* open class ResourceLocation( @@ -77,7 +77,7 @@ open class ResourceLocation( // if (!ProtocolDefinition.RESOURCE_LOCATION_PATTERN.matcher(resourceLocation).matches()) { // throw new IllegalArgumentException(String.format("%s in not a valid resource location!", resourceLocation)); // } - return if (Util.doesStringContainsUppercaseLetters(resourceLocation)) { + return if (!resourceLocation.isLowercase()) { // just a string but wrapped into a resourceLocation (like old plugin channels MC|BRAND or ...) LegacyResourceLocation(resourceLocation) } else ResourceLocation(resourceLocation) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/RegistriesLoader.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/RegistriesLoader.kt index f68bbfbec..31d791f7f 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/RegistriesLoader.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/RegistriesLoader.kt @@ -1,12 +1,12 @@ package de.bixilon.minosoft.data.registries.registries +import de.bixilon.kutil.string.StringUtil.format import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties import de.bixilon.minosoft.assets.util.FileAssetsUtil import de.bixilon.minosoft.assets.util.FileUtil import de.bixilon.minosoft.assets.util.FileUtil.readMBFMap import de.bixilon.minosoft.config.profile.profiles.resources.ResourcesProfile import de.bixilon.minosoft.data.registries.versions.Version -import de.bixilon.minosoft.util.Util import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import java.io.ByteArrayInputStream import java.io.File @@ -33,12 +33,10 @@ object RegistriesLoader { return FileUtil.readFile(file, false).readMBFMap().compoundCast() ?: throw IllegalStateException("Could not read pixlyzer data!") } - val savedHash = FileAssetsUtil.downloadAndGetAsset(Util.formatString( - url, - mapOf( - "hashPrefix" to hash.substring(0, 2), - "fullHash" to hash, - ) + val savedHash = FileAssetsUtil.downloadAndGetAsset(url.format(mapOf( + "hashPrefix" to hash.substring(0, 2), + "fullHash" to hash, + ) ), false, hashType = FileAssetsUtil.HashTypes.SHA1) if (savedHash.first != hash) { throw IllegalStateException("Data mismatch, expected $hash, got ${savedHash.first}") diff --git a/src/main/java/de/bixilon/minosoft/data/text/TextComponent.kt b/src/main/java/de/bixilon/minosoft/data/text/TextComponent.kt index 0fdf89bd5..18af8309c 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/TextComponent.kt +++ b/src/main/java/de/bixilon/minosoft/data/text/TextComponent.kt @@ -20,7 +20,6 @@ import de.bixilon.minosoft.gui.eros.dialog.ErosErrorReport.Companion.report import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.file import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.hyperlink import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition -import de.bixilon.minosoft.util.Util import javafx.animation.Animation import javafx.animation.KeyFrame import javafx.animation.Timeline @@ -147,7 +146,7 @@ open class TextComponent( KeyFrame(Duration.millis(50.0), { val chars = text.text.toCharArray() for (i in chars.indices) { - chars[i] = Util.getRandomChar(ProtocolDefinition.OBFUSCATED_CHARS) + chars[i] = ProtocolDefinition.OBFUSCATED_CHARS.random() } text.text = String(chars) }), diff --git a/src/main/java/de/bixilon/minosoft/data/text/events/ClickEvent.kt b/src/main/java/de/bixilon/minosoft/data/text/events/ClickEvent.kt index b9aad1e32..419768410 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/events/ClickEvent.kt +++ b/src/main/java/de/bixilon/minosoft/data/text/events/ClickEvent.kt @@ -14,7 +14,8 @@ package de.bixilon.minosoft.data.text.events import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum -import de.bixilon.minosoft.util.Util +import de.bixilon.kutil.url.URLUtil.checkWeb +import de.bixilon.kutil.url.URLUtil.toURL class ClickEvent { val action: ClickEventActions @@ -28,7 +29,7 @@ class ClickEvent { return } if (action == ClickEventActions.OPEN_URL) { - Util.checkURL(value.toString()) + value.toString().toURL().checkWeb() } check(action != ClickEventActions.OPEN_CONFIRMATION) { "Can not use OPEN_CONFIRMATION in restricted mode!" } check(action != ClickEventActions.OPEN_FILE) { "Can not use OPEN_FILE in restricted mode!" } diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/crash/ErosCrashReport.kt b/src/main/java/de/bixilon/minosoft/gui/eros/crash/ErosCrashReport.kt index f9c34ac5b..ae1f3d689 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/crash/ErosCrashReport.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/crash/ErosCrashReport.kt @@ -19,6 +19,7 @@ import de.bixilon.kutil.exception.ExceptionUtil.toStackTrace import de.bixilon.kutil.exception.ExceptionUtil.tryCatch import de.bixilon.kutil.file.FileUtil.slashPath import de.bixilon.kutil.file.watcher.FileWatcherService +import de.bixilon.kutil.hash.HashUtil.sha1 import de.bixilon.kutil.os.OSUtil import de.bixilon.kutil.time.TimeUtil import de.bixilon.kutil.unit.UnitFormatter.formatBytes @@ -33,7 +34,6 @@ import de.bixilon.minosoft.terminal.RunConfiguration import de.bixilon.minosoft.util.GitInfo import de.bixilon.minosoft.util.ShutdownManager import de.bixilon.minosoft.util.SystemInformation -import de.bixilon.minosoft.util.Util import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType @@ -225,7 +225,7 @@ ${exception?.toStackTrace() ?: ""} ${GitInfo.formatForCrashReport()} """.trimIndent() - val hash = Util.sha1(stack.toByteArray(StandardCharsets.UTF_8)) + val hash = stack.toByteArray(StandardCharsets.UTF_8).sha1() return """ $stack diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/card/FaviconManager.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/card/FaviconManager.kt index 0b576bd22..a0de04e24 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/card/FaviconManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/card/FaviconManager.kt @@ -1,10 +1,10 @@ package de.bixilon.minosoft.gui.eros.main.play.server.card import com.github.luben.zstd.ZstdOutputStream +import de.bixilon.kutil.hash.HashUtil.sha256 import de.bixilon.minosoft.assets.util.FileAssetsUtil import de.bixilon.minosoft.assets.util.FileUtil import de.bixilon.minosoft.config.profile.profiles.eros.server.entries.Server -import de.bixilon.minosoft.util.Util import javafx.scene.image.Image import java.io.File import java.io.FileOutputStream @@ -22,7 +22,7 @@ object FaviconManager { return null } - fun Server.saveFavicon(favicon: ByteArray?, faviconHash: String = Util.sha256(favicon)) { + fun Server.saveFavicon(favicon: ByteArray?, faviconHash: String = favicon!!.sha256()) { if (this.faviconHash == faviconHash) { return } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/ScreenshotTaker.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/ScreenshotTaker.kt index ba5e70fb0..1c020c4b7 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/ScreenshotTaker.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/ScreenshotTaker.kt @@ -16,6 +16,7 @@ package de.bixilon.minosoft.gui.rendering.util import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.concurrent.pool.ThreadPool import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable +import de.bixilon.kutil.file.FileUtil.createParent import de.bixilon.kutil.file.FileUtil.slashPath import de.bixilon.kutil.time.TimeUtil import de.bixilon.minosoft.data.text.BaseComponent @@ -26,7 +27,6 @@ import de.bixilon.minosoft.data.text.events.HoverEvent import de.bixilon.minosoft.gui.rendering.RenderWindow import de.bixilon.minosoft.gui.rendering.system.base.PixelTypes import de.bixilon.minosoft.terminal.RunConfiguration -import de.bixilon.minosoft.util.Util import glm_.vec2.Vec2i import java.awt.image.BufferedImage import java.io.File @@ -68,7 +68,7 @@ class ScreenshotTaker( } val file = File(path) - Util.createParentFolderIfNotExist(file) + file.createParent() ImageIO.write(bufferedImage, "png", file) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ResourcepackRequestS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ResourcepackRequestS2CP.kt index 90b4c86fa..b2d7f5117 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ResourcepackRequestS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ResourcepackRequestS2CP.kt @@ -12,6 +12,8 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.play +import de.bixilon.kutil.url.URLUtil.checkWeb +import de.bixilon.kutil.url.URLUtil.toURL import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.modding.event.events.ResourcePackRequestEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection @@ -19,13 +21,12 @@ import de.bixilon.minosoft.protocol.packets.c2s.play.ResourcePackStatusC2SP import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.protocol.protocol.ProtocolVersions -import de.bixilon.minosoft.util.Util import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType class ResourcepackRequestS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { - val url: String = Util.checkURL(buffer.readString()) + val url: String = buffer.readString().apply { toURL().checkWeb() } val hash: String = buffer.readString() val forced = if (buffer.versionId >= ProtocolVersions.V_20W45A) { buffer.readBoolean() diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/LANServerListener.kt b/src/main/java/de/bixilon/minosoft/protocol/protocol/LANServerListener.kt index ccc129ae0..d244fb1d4 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/LANServerListener.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/LANServerListener.kt @@ -14,6 +14,7 @@ package de.bixilon.minosoft.protocol.protocol import com.google.common.collect.HashBiMap import de.bixilon.kutil.latch.CountUpAndDownLatch +import de.bixilon.kutil.string.StringUtil.getBetween import de.bixilon.minosoft.config.profile.delegate.watcher.SimpleProfileDelegateWatcher.Companion.profileWatch import de.bixilon.minosoft.config.profile.profiles.eros.server.entries.Server import de.bixilon.minosoft.config.profile.profiles.other.OtherProfileManager @@ -22,7 +23,6 @@ import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.gui.eros.main.play.server.type.types.LANServerType import de.bixilon.minosoft.modding.event.events.LANServerDiscoverEvent import de.bixilon.minosoft.modding.event.master.GlobalEventMaster -import de.bixilon.minosoft.util.Util import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType @@ -120,14 +120,14 @@ object LANServerListener { for (mustContain in BROADCAST_MUST_CONTAIN) { require(broadcast.contains(mustContain)) { "Broadcast is invalid!" } } - var rawAddress = Util.getStringBetween(broadcast, PORT_START_STRING, PORT_END_STRING) + var rawAddress = broadcast.getBetween(PORT_START_STRING, PORT_END_STRING) if (rawAddress.contains(":")) { // weird, just extract the port rawAddress = rawAddress.split(":").toTypedArray()[1] } val port = rawAddress.toInt() require(!(port < 0 || port > 65535)) { "Invalid port: $port" } - val motd = Util.getStringBetween(broadcast, MOTD_START_STRING, MOTD_END_STRING) + val motd = broadcast.getBetween(MOTD_START_STRING, MOTD_END_STRING) return Server(address = address.hostAddress + ":" + rawAddress, name = BaseComponent("LAN: #${SERVERS.size}: ", ChatComponent.of(motd))) } diff --git a/src/main/java/de/bixilon/minosoft/util/KUtil.kt b/src/main/java/de/bixilon/minosoft/util/KUtil.kt index 8438cafbb..7924c6601 100644 --- a/src/main/java/de/bixilon/minosoft/util/KUtil.kt +++ b/src/main/java/de/bixilon/minosoft/util/KUtil.kt @@ -17,7 +17,9 @@ import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.collections.CollectionUtil.synchronizedListOf import de.bixilon.kutil.collections.CollectionUtil.synchronizedMapOf import de.bixilon.kutil.collections.CollectionUtil.synchronizedSetOf +import de.bixilon.kutil.concurrent.time.TimeWorker import de.bixilon.kutil.primitive.BooleanUtil.decide +import de.bixilon.kutil.reflection.ReflectionUtil.forceInit import de.bixilon.kutil.reflection.ReflectionUtil.realName import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.inventory.ItemStack @@ -29,7 +31,10 @@ import de.bixilon.minosoft.data.text.TextComponent import de.bixilon.minosoft.data.text.TextFormattable import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition +import de.bixilon.minosoft.util.account.microsoft.MicrosoftOAuthUtils import de.bixilon.minosoft.util.json.Jackson +import de.bixilon.minosoft.util.logging.Log +import de.bixilon.minosoft.util.url.URLProtocolStreamHandlers import glm_.vec2.Vec2t import glm_.vec3.Vec3t import glm_.vec4.Vec4t @@ -38,6 +43,7 @@ import java.util.* object KUtil { + val RANDOM = Random() fun bitSetOf(long: Long): BitSet { return BitSet.valueOf(longArrayOf(long)) @@ -229,4 +235,13 @@ object KUtil { userName = StringBuffer("nobody") groupName = StringBuffer("nobody") } + + + fun initUtilClasses() { + Log::class.java.forceInit() + URLProtocolStreamHandlers::class.java.forceInit() + MicrosoftOAuthUtils::class.java.forceInit() + TimeWorker::class.java.forceInit() + ShutdownManager::class.java.forceInit() + } } diff --git a/src/main/java/de/bixilon/minosoft/util/Util.java b/src/main/java/de/bixilon/minosoft/util/Util.java index a4c34c020..9fedb519f 100644 --- a/src/main/java/de/bixilon/minosoft/util/Util.java +++ b/src/main/java/de/bixilon/minosoft/util/Util.java @@ -17,25 +17,22 @@ import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.stream.JsonReader; -import de.bixilon.kutil.concurrent.time.TimeWorker; import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection; import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer; import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition; -import de.bixilon.minosoft.util.account.microsoft.MicrosoftOAuthUtils; -import de.bixilon.minosoft.util.logging.Log; -import de.bixilon.minosoft.util.url.URLProtocolStreamHandlers; import org.jetbrains.annotations.NotNull; import java.io.*; import java.lang.reflect.Field; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; import java.util.HashMap; import java.util.Map; import java.util.Random; -import java.util.zip.*; +import java.util.zip.DataFormatException; +import java.util.zip.Deflater; +import java.util.zip.GZIPInputStream; +import java.util.zip.Inflater; @Deprecated(forRemoval = true) public final class Util { @@ -115,61 +112,6 @@ public final class Util { return ret; } - public static String sha1(byte[] data) { - ByteArrayInputStream inputStream = new ByteArrayInputStream(data); - try { - return sha1(inputStream); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } - - public static String sha256(byte[] data) { - ByteArrayInputStream inputStream = new ByteArrayInputStream(data); - try { - return sha256(inputStream); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } - - public static String sha1(InputStream inputStream) throws IOException { - try { - return hash(MessageDigest.getInstance("SHA-1"), inputStream); - } catch (NoSuchAlgorithmException | FileNotFoundException e) { - e.printStackTrace(); - throw new RuntimeException(e); - } - } - - private static String hash(MessageDigest digest, InputStream inputStream) throws IOException { - byte[] buffer = new byte[ProtocolDefinition.DEFAULT_BUFFER_SIZE]; - int length; - while ((length = inputStream.read(buffer, 0, buffer.length)) != -1) { - digest.update(buffer, 0, length); - } - return byteArrayToHexString(digest.digest()); - } - - public static String sha256(InputStream inputStream) throws IOException { - try { - return hash(MessageDigest.getInstance("SHA-256"), inputStream); - } catch (NoSuchAlgorithmException | FileNotFoundException e) { - e.printStackTrace(); - throw new RuntimeException(e); - } - } - - public static String byteArrayToHexString(byte[] b) { - StringBuilder result = new StringBuilder(); - for (byte value : b) { - result.append(Integer.toString((value & 0xff) + 0x100, 16).substring(1)); - } - return result.toString(); - } - public static String readReader(BufferedReader reader, boolean closeStream) throws IOException { StringBuilder stringBuilder = new StringBuilder(); String line; @@ -186,52 +128,6 @@ public final class Util { return stringBuilder.toString(); } - public static InputStreamReader getInputSteamFromZip(String fileName, ZipFile zipFile) throws IOException { - return new InputStreamReader(zipFile.getInputStream(zipFile.getEntry(fileName))); - } - - public static String readFile(String fileName) throws IOException { - FileReader reader = new FileReader(fileName); - return readReader(new BufferedReader(reader), true); - } - - public static void copyStream(InputStream inputStream, OutputStream output) throws IOException { - byte[] buffer = new byte[ProtocolDefinition.DEFAULT_BUFFER_SIZE]; - int length; - while ((length = inputStream.read(buffer, 0, buffer.length)) != -1) { - output.write(buffer, 0, length); - } - inputStream.close(); - output.close(); - } - - - public static boolean createParentFolderIfNotExist(File file) { - return file.getParentFile().mkdirs(); - } - - @NotNull - public static String generateRandomString(int length) { - StringBuilder sb = new StringBuilder(length); - for (int i = 0; i < length; i++) { - sb.append(getRandomChar(RANDOM_STRING_CHARS)); - } - return sb.toString(); - } - - public static char getRandomChar(char[] chars) { - return chars[(RANDOM.nextInt(chars.length))]; - } - - public static String getStringBetween(String search, String first, String second) { - String result = search.substring(search.indexOf(first) + first.length()); - return result.substring(0, result.indexOf(second)); - } - - public static boolean doesStringContainsUppercaseLetters(String string) { - return !string.toLowerCase().equals(string); - } - public static int getJsonReaderPosition(JsonReader jsonReader) { try { return JSON_READER_POS_FIELD.getInt(jsonReader) - JSON_READER_LINE_START_FIELD.getInt(jsonReader) + 1; @@ -240,29 +136,6 @@ public final class Util { } } - public static String checkURL(String url) { - if (!url.startsWith("http://") && !url.startsWith("https://")) { - throw new IllegalArgumentException("Not a valid url:" + url); - } - return url; - } - - public static void forceClassInit(Class clazz) { - try { - Class.forName(clazz.getName(), true, clazz.getClassLoader()); - } catch (ClassNotFoundException exception) { - throw new RuntimeException(exception); - } - } - - public static void initUtilClasses() { - forceClassInit(Log.class); - forceClassInit(URLProtocolStreamHandlers.class); - forceClassInit(MicrosoftOAuthUtils.class); - forceClassInit(TimeWorker.class); - forceClassInit(ShutdownManager.class); - } - public static Map urlQueryToMap(String query) { Map map = new HashMap<>(); for (String parameter : query.split("&")) { @@ -289,14 +162,6 @@ public final class Util { return builder.toString(); } - public static String formatString(String string, Map format) { - String output = string; - for (Map.Entry entry : format.entrySet()) { - output = output.replace("${" + entry.getKey() + "}", entry.getValue().toString()); - } - return output; - } - @NotNull @Deprecated public static JsonObject readJsonFromStream(@NotNull InputStream stream, boolean close) throws IOException {