mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-17 11:24:56 -04:00
remove more Util functions, bump kutil to 1.3
This commit is contained in:
parent
e3ee113b2b
commit
30da957baa
2
pom.xml
2
pom.xml
@ -457,7 +457,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>de.bixilon</groupId>
|
<groupId>de.bixilon</groupId>
|
||||||
<artifactId>kutil</artifactId>
|
<artifactId>kutil</artifactId>
|
||||||
<version>1.1</version>
|
<version>1.3</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
@ -19,6 +19,7 @@ import de.bixilon.kutil.concurrent.worker.tasks.Task
|
|||||||
import de.bixilon.kutil.file.watcher.FileWatcherService
|
import de.bixilon.kutil.file.watcher.FileWatcherService
|
||||||
import de.bixilon.kutil.latch.CountUpAndDownLatch
|
import de.bixilon.kutil.latch.CountUpAndDownLatch
|
||||||
import de.bixilon.kutil.os.OSUtil
|
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.file.ResourcesAssetsUtil
|
||||||
import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties
|
import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties
|
||||||
import de.bixilon.minosoft.config.profile.GlobalProfileManager
|
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.CommandLineArguments
|
||||||
import de.bixilon.minosoft.terminal.RunConfiguration
|
import de.bixilon.minosoft.terminal.RunConfiguration
|
||||||
import de.bixilon.minosoft.util.GitInfo
|
import de.bixilon.minosoft.util.GitInfo
|
||||||
|
import de.bixilon.minosoft.util.KUtil
|
||||||
import de.bixilon.minosoft.util.RenderPolling
|
import de.bixilon.minosoft.util.RenderPolling
|
||||||
import de.bixilon.minosoft.util.Util
|
|
||||||
import de.bixilon.minosoft.util.YggdrasilUtil
|
import de.bixilon.minosoft.util.YggdrasilUtil
|
||||||
import de.bixilon.minosoft.util.logging.Log
|
import de.bixilon.minosoft.util.logging.Log
|
||||||
import de.bixilon.minosoft.util.logging.LogLevels
|
import de.bixilon.minosoft.util.logging.LogLevels
|
||||||
@ -61,7 +62,7 @@ object Minosoft {
|
|||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
CommandLineArguments.parse(args)
|
CommandLineArguments.parse(args)
|
||||||
Util.initUtilClasses()
|
KUtil.initUtilClasses()
|
||||||
MINOSOFT_ASSETS_MANAGER.load(CountUpAndDownLatch(0))
|
MINOSOFT_ASSETS_MANAGER.load(CountUpAndDownLatch(0))
|
||||||
|
|
||||||
Log.log(LogMessageType.OTHER, LogLevels.INFO) { "Starting minosoft" }
|
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))
|
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() })
|
taskWorker += Task(identifier = StartupTasks.LOAD_YGGDRASIL, executor = { YggdrasilUtil.load() })
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ package de.bixilon.minosoft.assets.minecraft
|
|||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode
|
import com.fasterxml.jackson.databind.JsonNode
|
||||||
import de.bixilon.kutil.latch.CountUpAndDownLatch
|
import de.bixilon.kutil.latch.CountUpAndDownLatch
|
||||||
|
import de.bixilon.kutil.string.StringUtil.format
|
||||||
import de.bixilon.minosoft.assets.InvalidAssetException
|
import de.bixilon.minosoft.assets.InvalidAssetException
|
||||||
import de.bixilon.minosoft.assets.util.FileAssetsUtil
|
import de.bixilon.minosoft.assets.util.FileAssetsUtil
|
||||||
import de.bixilon.minosoft.assets.util.FileUtil
|
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.protocol.protocol.ProtocolDefinition
|
||||||
import de.bixilon.minosoft.util.KUtil.generalize
|
import de.bixilon.minosoft.util.KUtil.generalize
|
||||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||||
import de.bixilon.minosoft.util.Util
|
|
||||||
import de.bixilon.minosoft.util.json.Jackson
|
import de.bixilon.minosoft.util.json.Jackson
|
||||||
import org.kamranzafar.jtar.TarEntry
|
import org.kamranzafar.jtar.TarEntry
|
||||||
import org.kamranzafar.jtar.TarHeader
|
import org.kamranzafar.jtar.TarHeader
|
||||||
@ -62,7 +62,7 @@ class JarAssetsManager(
|
|||||||
} else {
|
} else {
|
||||||
var clientJar = FileUtil.safeReadFile(File(FileAssetsUtil.getPath(clientJarHash)), false)?.readZipArchive()
|
var clientJar = FileUtil.safeReadFile(File(FileAssetsUtil.getPath(clientJarHash)), false)?.readZipArchive()
|
||||||
if (clientJar == null) {
|
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,
|
"fullHash" to clientJarHash,
|
||||||
"filename" to "client.jar",
|
"filename" to "client.jar",
|
||||||
)), false, FileAssetsUtil.HashTypes.SHA1)
|
)), false, FileAssetsUtil.HashTypes.SHA1)
|
||||||
|
@ -19,6 +19,7 @@ import de.bixilon.kutil.concurrent.pool.ThreadPool
|
|||||||
import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable
|
import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable
|
||||||
import de.bixilon.kutil.latch.CountUpAndDownLatch
|
import de.bixilon.kutil.latch.CountUpAndDownLatch
|
||||||
import de.bixilon.kutil.primitive.LongUtil.toLong
|
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.minecraft.MinecraftAssetsManager
|
||||||
import de.bixilon.minosoft.assets.util.FileAssetsUtil
|
import de.bixilon.minosoft.assets.util.FileAssetsUtil
|
||||||
import de.bixilon.minosoft.assets.util.FileAssetsUtil.toAssetName
|
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.config.profile.profiles.resources.ResourcesProfile
|
||||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
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.json.Jackson
|
||||||
import de.bixilon.minosoft.util.logging.Log
|
import de.bixilon.minosoft.util.logging.Log
|
||||||
import de.bixilon.minosoft.util.logging.LogLevels
|
import de.bixilon.minosoft.util.logging.LogLevels
|
||||||
@ -55,11 +55,10 @@ class IndexAssetsManager(
|
|||||||
private set
|
private set
|
||||||
|
|
||||||
private fun downloadAssetsIndex(): Map<String, Any> {
|
private fun downloadAssetsIndex(): Map<String, Any> {
|
||||||
return Jackson.MAPPER.readValue(FileAssetsUtil.downloadAndGetAsset(Util.formatString(profile.source.mojangPackages,
|
return Jackson.MAPPER.readValue(FileAssetsUtil.downloadAndGetAsset(profile.source.mojangPackages.format(mapOf(
|
||||||
mapOf(
|
"fullHash" to indexHash,
|
||||||
"fullHash" to indexHash,
|
"filename" to "$assetsVersion.json",
|
||||||
"filename" to "$assetsVersion.json",
|
)), hashType = FileAssetsUtil.HashTypes.SHA1).second, Jackson.JSON_MAP_TYPE)
|
||||||
)), hashType = FileAssetsUtil.HashTypes.SHA1).second, Jackson.JSON_MAP_TYPE)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun verifyAsset(hash: String) {
|
fun verifyAsset(hash: String) {
|
||||||
@ -67,11 +66,10 @@ class IndexAssetsManager(
|
|||||||
if (FileAssetsUtil.verifyAsset(hash, file, verify, hashType = FileAssetsUtil.HashTypes.SHA1)) {
|
if (FileAssetsUtil.verifyAsset(hash, file, verify, hashType = FileAssetsUtil.HashTypes.SHA1)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val url = Util.formatString(profile.source.minecraftResources,
|
val url = profile.source.minecraftResources.format(mapOf(
|
||||||
mapOf(
|
"hashPrefix" to hash.substring(0, 2),
|
||||||
"hashPrefix" to hash.substring(0, 2),
|
"fullHash" to hash,
|
||||||
"fullHash" to hash,
|
))
|
||||||
))
|
|
||||||
Log.log(LogMessageType.ASSETS, LogLevels.VERBOSE) { "Downloading asset $url" }
|
Log.log(LogMessageType.ASSETS, LogLevels.VERBOSE) { "Downloading asset $url" }
|
||||||
val downloadedHash = FileAssetsUtil.downloadAsset(url, hashType = FileAssetsUtil.HashTypes.SHA1)
|
val downloadedHash = FileAssetsUtil.downloadAsset(url, hashType = FileAssetsUtil.HashTypes.SHA1)
|
||||||
if (downloadedHash != hash) {
|
if (downloadedHash != hash) {
|
||||||
|
@ -15,11 +15,13 @@ package de.bixilon.minosoft.assets.util
|
|||||||
|
|
||||||
import com.github.luben.zstd.ZstdInputStream
|
import com.github.luben.zstd.ZstdInputStream
|
||||||
import com.github.luben.zstd.ZstdOutputStream
|
import com.github.luben.zstd.ZstdOutputStream
|
||||||
|
import de.bixilon.kutil.array.ByteArrayUtil.toHex
|
||||||
import de.bixilon.kutil.hex.HexUtil.isHexString
|
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.data.registries.ResourceLocation
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||||
import de.bixilon.minosoft.terminal.RunConfiguration
|
import de.bixilon.minosoft.terminal.RunConfiguration
|
||||||
import de.bixilon.minosoft.util.Util
|
import de.bixilon.minosoft.util.KUtil
|
||||||
import java.io.*
|
import java.io.*
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
import java.nio.file.Files
|
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<String, ByteArray> {
|
fun saveAndGet(stream: InputStream, compress: Boolean = true, get: Boolean = true, hashType: HashTypes = HashTypes.SHA256): Pair<String, ByteArray> {
|
||||||
var tempFile: File
|
var tempFile: File
|
||||||
do {
|
do {
|
||||||
tempFile = File(RunConfiguration.TEMPORARY_FOLDER + Util.generateRandomString(32))
|
tempFile = File(RunConfiguration.TEMPORARY_FOLDER + KUtil.RANDOM.randomString(32))
|
||||||
} while (tempFile.exists())
|
} while (tempFile.exists())
|
||||||
tempFile.parentFile.apply {
|
tempFile.parentFile.apply {
|
||||||
mkdirs()
|
mkdirs()
|
||||||
@ -80,7 +82,7 @@ object FileAssetsUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
output.close()
|
output.close()
|
||||||
val hash = Util.byteArrayToHexString(digest.digest())
|
val hash = digest.digest().toHex()
|
||||||
|
|
||||||
val file = File(getPath(hash))
|
val file = File(getPath(hash))
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
@ -157,7 +159,7 @@ object FileAssetsUtil {
|
|||||||
}
|
}
|
||||||
digest.update(buffer, 0, length)
|
digest.update(buffer, 0, length)
|
||||||
}
|
}
|
||||||
val equals = hash == Util.byteArrayToHexString(digest.digest())
|
val equals = hash == digest.digest().toHex()
|
||||||
if (!equals) {
|
if (!equals) {
|
||||||
file.delete()
|
file.delete()
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import de.bixilon.kutil.concurrent.pool.DefaultThreadPool
|
|||||||
import de.bixilon.kutil.concurrent.time.TimeWorker
|
import de.bixilon.kutil.concurrent.time.TimeWorker
|
||||||
import de.bixilon.kutil.concurrent.time.TimeWorkerTask
|
import de.bixilon.kutil.concurrent.time.TimeWorkerTask
|
||||||
import de.bixilon.kutil.file.FileUtil
|
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.Profile
|
||||||
import de.bixilon.minosoft.config.profile.profiles.account.AccountProfileManager
|
import de.bixilon.minosoft.config.profile.profiles.account.AccountProfileManager
|
||||||
import de.bixilon.minosoft.config.profile.profiles.audio.AudioProfileManager
|
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.data.registries.ResourceLocation
|
||||||
import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport.Companion.crash
|
import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport.Companion.crash
|
||||||
import de.bixilon.minosoft.terminal.RunConfiguration
|
import de.bixilon.minosoft.terminal.RunConfiguration
|
||||||
import de.bixilon.minosoft.util.Util
|
|
||||||
import de.bixilon.minosoft.util.json.Jackson
|
import de.bixilon.minosoft.util.json.Jackson
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ object GlobalProfileManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.selectedProfiles.original.clear()
|
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 {
|
} finally {
|
||||||
selectedProfiles.lock.unlock()
|
selectedProfiles.lock.unlock()
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import com.google.common.collect.HashBiMap
|
|||||||
import de.bixilon.kutil.concurrent.pool.DefaultThreadPool
|
import de.bixilon.kutil.concurrent.pool.DefaultThreadPool
|
||||||
import de.bixilon.kutil.exception.ExceptionUtil.tryCatch
|
import de.bixilon.kutil.exception.ExceptionUtil.tryCatch
|
||||||
import de.bixilon.kutil.file.FileUtil
|
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.FileWatcher
|
||||||
import de.bixilon.kutil.file.watcher.FileWatcherService
|
import de.bixilon.kutil.file.watcher.FileWatcherService
|
||||||
import de.bixilon.kutil.primitive.IntUtil.toInt
|
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.data.registries.ResourceLocation
|
||||||
import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport.Companion.crash
|
import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport.Companion.crash
|
||||||
import de.bixilon.minosoft.terminal.RunConfiguration
|
import de.bixilon.minosoft.terminal.RunConfiguration
|
||||||
import de.bixilon.minosoft.util.Util
|
|
||||||
import de.bixilon.minosoft.util.json.Jackson
|
import de.bixilon.minosoft.util.json.Jackson
|
||||||
import de.bixilon.minosoft.util.logging.Log
|
import de.bixilon.minosoft.util.logging.Log
|
||||||
import de.bixilon.minosoft.util.logging.LogLevels
|
import de.bixilon.minosoft.util.logging.LogLevels
|
||||||
@ -238,7 +238,7 @@ interface ProfileManager<T : Profile> {
|
|||||||
fun readAndMigrate(path: String): Pair<Boolean, MutableMap<String, Any?>?> {
|
fun readAndMigrate(path: String): Pair<Boolean, MutableMap<String, Any?>?> {
|
||||||
var saveFile = false
|
var saveFile = false
|
||||||
val json: MutableMap<String, Any?>?
|
val json: MutableMap<String, Any?>?
|
||||||
val jsonString = tryCatch(FileNotFoundException::class.java) { Util.readFile(path) }
|
val jsonString = tryCatch(FileNotFoundException::class.java) { File(path).read() }
|
||||||
if (jsonString != null) {
|
if (jsonString != null) {
|
||||||
json = Jackson.MAPPER.readValue(jsonString, Jackson.JSON_MAP_TYPE)!!
|
json = Jackson.MAPPER.readValue(jsonString, Jackson.JSON_MAP_TYPE)!!
|
||||||
val version = json["version"]?.toInt() ?: throw IllegalArgumentException("Can not find version attribute in profile: $path")
|
val version = json["version"]?.toInt() ?: throw IllegalArgumentException("Can not find version attribute in profile: $path")
|
||||||
|
@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore
|
|||||||
import com.fasterxml.jackson.annotation.JsonInclude
|
import com.fasterxml.jackson.annotation.JsonInclude
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
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.ProfileManager
|
||||||
import de.bixilon.minosoft.config.profile.profiles.Profile
|
import de.bixilon.minosoft.config.profile.profiles.Profile
|
||||||
import de.bixilon.minosoft.config.profile.profiles.account.AccountProfileManager.backingDelegate
|
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.latestVersion
|
||||||
import de.bixilon.minosoft.config.profile.profiles.account.AccountProfileManager.mapDelegate
|
import de.bixilon.minosoft.config.profile.profiles.account.AccountProfileManager.mapDelegate
|
||||||
import de.bixilon.minosoft.data.accounts.Account
|
import de.bixilon.minosoft.data.accounts.Account
|
||||||
import de.bixilon.minosoft.util.Util
|
import de.bixilon.minosoft.util.KUtil
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Profile for accounts
|
* Profile for accounts
|
||||||
@ -33,7 +34,7 @@ class AccountProfile(
|
|||||||
* This 128 length long string is generated randomly while the profile was created
|
* This 128 length long string is generated randomly while the profile was created
|
||||||
* Will be sent to mojang when logging in/refreshing an account
|
* 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
|
* All accounts
|
||||||
|
@ -5,7 +5,6 @@ import de.bixilon.kutil.json.JsonUtil.toJsonList
|
|||||||
import de.bixilon.kutil.uuid.UUIDUtil.trim
|
import de.bixilon.kutil.uuid.UUIDUtil.trim
|
||||||
import de.bixilon.minosoft.assets.util.FileUtil.readJsonObject
|
import de.bixilon.minosoft.assets.util.FileUtil.readJsonObject
|
||||||
import de.bixilon.minosoft.data.player.properties.textures.PlayerTextures
|
import de.bixilon.minosoft.data.player.properties.textures.PlayerTextures
|
||||||
import de.bixilon.minosoft.util.Util
|
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@ -19,7 +18,7 @@ class PlayerProperties(
|
|||||||
|
|
||||||
|
|
||||||
fun fetch(uuid: UUID): 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()
|
val data = URL(url).openStream().readJsonObject()
|
||||||
|
|
||||||
var textures: PlayerTextures? = null
|
var textures: PlayerTextures? = null
|
||||||
|
@ -12,9 +12,9 @@
|
|||||||
*/
|
*/
|
||||||
package de.bixilon.minosoft.data.registries
|
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.data.registries.registries.registry.Translatable
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||||
import de.bixilon.minosoft.util.Util
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
open class ResourceLocation(
|
open class ResourceLocation(
|
||||||
@ -77,7 +77,7 @@ open class ResourceLocation(
|
|||||||
// if (!ProtocolDefinition.RESOURCE_LOCATION_PATTERN.matcher(resourceLocation).matches()) {
|
// if (!ProtocolDefinition.RESOURCE_LOCATION_PATTERN.matcher(resourceLocation).matches()) {
|
||||||
// throw new IllegalArgumentException(String.format("%s in not a valid resource location!", resourceLocation));
|
// 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 ...)
|
// just a string but wrapped into a resourceLocation (like old plugin channels MC|BRAND or ...)
|
||||||
LegacyResourceLocation(resourceLocation)
|
LegacyResourceLocation(resourceLocation)
|
||||||
} else ResourceLocation(resourceLocation)
|
} else ResourceLocation(resourceLocation)
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
package de.bixilon.minosoft.data.registries.registries
|
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.properties.version.AssetsVersionProperties
|
||||||
import de.bixilon.minosoft.assets.util.FileAssetsUtil
|
import de.bixilon.minosoft.assets.util.FileAssetsUtil
|
||||||
import de.bixilon.minosoft.assets.util.FileUtil
|
import de.bixilon.minosoft.assets.util.FileUtil
|
||||||
import de.bixilon.minosoft.assets.util.FileUtil.readMBFMap
|
import de.bixilon.minosoft.assets.util.FileUtil.readMBFMap
|
||||||
import de.bixilon.minosoft.config.profile.profiles.resources.ResourcesProfile
|
import de.bixilon.minosoft.config.profile.profiles.resources.ResourcesProfile
|
||||||
import de.bixilon.minosoft.data.registries.versions.Version
|
import de.bixilon.minosoft.data.registries.versions.Version
|
||||||
import de.bixilon.minosoft.util.Util
|
|
||||||
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast
|
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast
|
||||||
import java.io.ByteArrayInputStream
|
import java.io.ByteArrayInputStream
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@ -33,12 +33,10 @@ object RegistriesLoader {
|
|||||||
return FileUtil.readFile(file, false).readMBFMap().compoundCast() ?: throw IllegalStateException("Could not read pixlyzer data!")
|
return FileUtil.readFile(file, false).readMBFMap().compoundCast() ?: throw IllegalStateException("Could not read pixlyzer data!")
|
||||||
}
|
}
|
||||||
|
|
||||||
val savedHash = FileAssetsUtil.downloadAndGetAsset(Util.formatString(
|
val savedHash = FileAssetsUtil.downloadAndGetAsset(url.format(mapOf(
|
||||||
url,
|
"hashPrefix" to hash.substring(0, 2),
|
||||||
mapOf(
|
"fullHash" to hash,
|
||||||
"hashPrefix" to hash.substring(0, 2),
|
)
|
||||||
"fullHash" to hash,
|
|
||||||
)
|
|
||||||
), false, hashType = FileAssetsUtil.HashTypes.SHA1)
|
), false, hashType = FileAssetsUtil.HashTypes.SHA1)
|
||||||
if (savedHash.first != hash) {
|
if (savedHash.first != hash) {
|
||||||
throw IllegalStateException("Data mismatch, expected $hash, got ${savedHash.first}")
|
throw IllegalStateException("Data mismatch, expected $hash, got ${savedHash.first}")
|
||||||
|
@ -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.file
|
||||||
import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.hyperlink
|
import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.hyperlink
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||||
import de.bixilon.minosoft.util.Util
|
|
||||||
import javafx.animation.Animation
|
import javafx.animation.Animation
|
||||||
import javafx.animation.KeyFrame
|
import javafx.animation.KeyFrame
|
||||||
import javafx.animation.Timeline
|
import javafx.animation.Timeline
|
||||||
@ -147,7 +146,7 @@ open class TextComponent(
|
|||||||
KeyFrame(Duration.millis(50.0), {
|
KeyFrame(Duration.millis(50.0), {
|
||||||
val chars = text.text.toCharArray()
|
val chars = text.text.toCharArray()
|
||||||
for (i in chars.indices) {
|
for (i in chars.indices) {
|
||||||
chars[i] = Util.getRandomChar(ProtocolDefinition.OBFUSCATED_CHARS)
|
chars[i] = ProtocolDefinition.OBFUSCATED_CHARS.random()
|
||||||
}
|
}
|
||||||
text.text = String(chars)
|
text.text = String(chars)
|
||||||
}),
|
}),
|
||||||
|
@ -14,7 +14,8 @@ package de.bixilon.minosoft.data.text.events
|
|||||||
|
|
||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
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 {
|
class ClickEvent {
|
||||||
val action: ClickEventActions
|
val action: ClickEventActions
|
||||||
@ -28,7 +29,7 @@ class ClickEvent {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (action == ClickEventActions.OPEN_URL) {
|
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_CONFIRMATION) { "Can not use OPEN_CONFIRMATION in restricted mode!" }
|
||||||
check(action != ClickEventActions.OPEN_FILE) { "Can not use OPEN_FILE in restricted mode!" }
|
check(action != ClickEventActions.OPEN_FILE) { "Can not use OPEN_FILE in restricted mode!" }
|
||||||
|
@ -19,6 +19,7 @@ import de.bixilon.kutil.exception.ExceptionUtil.toStackTrace
|
|||||||
import de.bixilon.kutil.exception.ExceptionUtil.tryCatch
|
import de.bixilon.kutil.exception.ExceptionUtil.tryCatch
|
||||||
import de.bixilon.kutil.file.FileUtil.slashPath
|
import de.bixilon.kutil.file.FileUtil.slashPath
|
||||||
import de.bixilon.kutil.file.watcher.FileWatcherService
|
import de.bixilon.kutil.file.watcher.FileWatcherService
|
||||||
|
import de.bixilon.kutil.hash.HashUtil.sha1
|
||||||
import de.bixilon.kutil.os.OSUtil
|
import de.bixilon.kutil.os.OSUtil
|
||||||
import de.bixilon.kutil.time.TimeUtil
|
import de.bixilon.kutil.time.TimeUtil
|
||||||
import de.bixilon.kutil.unit.UnitFormatter.formatBytes
|
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.GitInfo
|
||||||
import de.bixilon.minosoft.util.ShutdownManager
|
import de.bixilon.minosoft.util.ShutdownManager
|
||||||
import de.bixilon.minosoft.util.SystemInformation
|
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.Log
|
||||||
import de.bixilon.minosoft.util.logging.LogLevels
|
import de.bixilon.minosoft.util.logging.LogLevels
|
||||||
import de.bixilon.minosoft.util.logging.LogMessageType
|
import de.bixilon.minosoft.util.logging.LogMessageType
|
||||||
@ -225,7 +225,7 @@ ${exception?.toStackTrace() ?: ""}
|
|||||||
${GitInfo.formatForCrashReport()}
|
${GitInfo.formatForCrashReport()}
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
|
|
||||||
val hash = Util.sha1(stack.toByteArray(StandardCharsets.UTF_8))
|
val hash = stack.toByteArray(StandardCharsets.UTF_8).sha1()
|
||||||
|
|
||||||
return """
|
return """
|
||||||
$stack
|
$stack
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package de.bixilon.minosoft.gui.eros.main.play.server.card
|
package de.bixilon.minosoft.gui.eros.main.play.server.card
|
||||||
|
|
||||||
import com.github.luben.zstd.ZstdOutputStream
|
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.FileAssetsUtil
|
||||||
import de.bixilon.minosoft.assets.util.FileUtil
|
import de.bixilon.minosoft.assets.util.FileUtil
|
||||||
import de.bixilon.minosoft.config.profile.profiles.eros.server.entries.Server
|
import de.bixilon.minosoft.config.profile.profiles.eros.server.entries.Server
|
||||||
import de.bixilon.minosoft.util.Util
|
|
||||||
import javafx.scene.image.Image
|
import javafx.scene.image.Image
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
@ -22,7 +22,7 @@ object FaviconManager {
|
|||||||
return null
|
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) {
|
if (this.faviconHash == faviconHash) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@ package de.bixilon.minosoft.gui.rendering.util
|
|||||||
import de.bixilon.kutil.concurrent.pool.DefaultThreadPool
|
import de.bixilon.kutil.concurrent.pool.DefaultThreadPool
|
||||||
import de.bixilon.kutil.concurrent.pool.ThreadPool
|
import de.bixilon.kutil.concurrent.pool.ThreadPool
|
||||||
import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable
|
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.file.FileUtil.slashPath
|
||||||
import de.bixilon.kutil.time.TimeUtil
|
import de.bixilon.kutil.time.TimeUtil
|
||||||
import de.bixilon.minosoft.data.text.BaseComponent
|
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.RenderWindow
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.PixelTypes
|
import de.bixilon.minosoft.gui.rendering.system.base.PixelTypes
|
||||||
import de.bixilon.minosoft.terminal.RunConfiguration
|
import de.bixilon.minosoft.terminal.RunConfiguration
|
||||||
import de.bixilon.minosoft.util.Util
|
|
||||||
import glm_.vec2.Vec2i
|
import glm_.vec2.Vec2i
|
||||||
import java.awt.image.BufferedImage
|
import java.awt.image.BufferedImage
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@ -68,7 +68,7 @@ class ScreenshotTaker(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val file = File(path)
|
val file = File(path)
|
||||||
Util.createParentFolderIfNotExist(file)
|
file.createParent()
|
||||||
|
|
||||||
ImageIO.write(bufferedImage, "png", file)
|
ImageIO.write(bufferedImage, "png", file)
|
||||||
|
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
*/
|
*/
|
||||||
package de.bixilon.minosoft.protocol.packets.s2c.play
|
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.data.text.ChatComponent
|
||||||
import de.bixilon.minosoft.modding.event.events.ResourcePackRequestEvent
|
import de.bixilon.minosoft.modding.event.events.ResourcePackRequestEvent
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
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.packets.s2c.PlayS2CPacket
|
||||||
import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer
|
import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolVersions
|
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.Log
|
||||||
import de.bixilon.minosoft.util.logging.LogLevels
|
import de.bixilon.minosoft.util.logging.LogLevels
|
||||||
import de.bixilon.minosoft.util.logging.LogMessageType
|
import de.bixilon.minosoft.util.logging.LogMessageType
|
||||||
|
|
||||||
class ResourcepackRequestS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
|
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 hash: String = buffer.readString()
|
||||||
val forced = if (buffer.versionId >= ProtocolVersions.V_20W45A) {
|
val forced = if (buffer.versionId >= ProtocolVersions.V_20W45A) {
|
||||||
buffer.readBoolean()
|
buffer.readBoolean()
|
||||||
|
@ -14,6 +14,7 @@ package de.bixilon.minosoft.protocol.protocol
|
|||||||
|
|
||||||
import com.google.common.collect.HashBiMap
|
import com.google.common.collect.HashBiMap
|
||||||
import de.bixilon.kutil.latch.CountUpAndDownLatch
|
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.delegate.watcher.SimpleProfileDelegateWatcher.Companion.profileWatch
|
||||||
import de.bixilon.minosoft.config.profile.profiles.eros.server.entries.Server
|
import de.bixilon.minosoft.config.profile.profiles.eros.server.entries.Server
|
||||||
import de.bixilon.minosoft.config.profile.profiles.other.OtherProfileManager
|
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.gui.eros.main.play.server.type.types.LANServerType
|
||||||
import de.bixilon.minosoft.modding.event.events.LANServerDiscoverEvent
|
import de.bixilon.minosoft.modding.event.events.LANServerDiscoverEvent
|
||||||
import de.bixilon.minosoft.modding.event.master.GlobalEventMaster
|
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.Log
|
||||||
import de.bixilon.minosoft.util.logging.LogLevels
|
import de.bixilon.minosoft.util.logging.LogLevels
|
||||||
import de.bixilon.minosoft.util.logging.LogMessageType
|
import de.bixilon.minosoft.util.logging.LogMessageType
|
||||||
@ -120,14 +120,14 @@ object LANServerListener {
|
|||||||
for (mustContain in BROADCAST_MUST_CONTAIN) {
|
for (mustContain in BROADCAST_MUST_CONTAIN) {
|
||||||
require(broadcast.contains(mustContain)) { "Broadcast is invalid!" }
|
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(":")) {
|
if (rawAddress.contains(":")) {
|
||||||
// weird, just extract the port
|
// weird, just extract the port
|
||||||
rawAddress = rawAddress.split(":").toTypedArray()[1]
|
rawAddress = rawAddress.split(":").toTypedArray()[1]
|
||||||
}
|
}
|
||||||
val port = rawAddress.toInt()
|
val port = rawAddress.toInt()
|
||||||
require(!(port < 0 || port > 65535)) { "Invalid port: $port" }
|
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)))
|
return Server(address = address.hostAddress + ":" + rawAddress, name = BaseComponent("LAN: #${SERVERS.size}: ", ChatComponent.of(motd)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,9 @@ import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
|||||||
import de.bixilon.kutil.collections.CollectionUtil.synchronizedListOf
|
import de.bixilon.kutil.collections.CollectionUtil.synchronizedListOf
|
||||||
import de.bixilon.kutil.collections.CollectionUtil.synchronizedMapOf
|
import de.bixilon.kutil.collections.CollectionUtil.synchronizedMapOf
|
||||||
import de.bixilon.kutil.collections.CollectionUtil.synchronizedSetOf
|
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.primitive.BooleanUtil.decide
|
||||||
|
import de.bixilon.kutil.reflection.ReflectionUtil.forceInit
|
||||||
import de.bixilon.kutil.reflection.ReflectionUtil.realName
|
import de.bixilon.kutil.reflection.ReflectionUtil.realName
|
||||||
import de.bixilon.minosoft.data.entities.entities.Entity
|
import de.bixilon.minosoft.data.entities.entities.Entity
|
||||||
import de.bixilon.minosoft.data.inventory.ItemStack
|
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.data.text.TextFormattable
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
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.json.Jackson
|
||||||
|
import de.bixilon.minosoft.util.logging.Log
|
||||||
|
import de.bixilon.minosoft.util.url.URLProtocolStreamHandlers
|
||||||
import glm_.vec2.Vec2t
|
import glm_.vec2.Vec2t
|
||||||
import glm_.vec3.Vec3t
|
import glm_.vec3.Vec3t
|
||||||
import glm_.vec4.Vec4t
|
import glm_.vec4.Vec4t
|
||||||
@ -38,6 +43,7 @@ import java.util.*
|
|||||||
|
|
||||||
|
|
||||||
object KUtil {
|
object KUtil {
|
||||||
|
val RANDOM = Random()
|
||||||
|
|
||||||
fun bitSetOf(long: Long): BitSet {
|
fun bitSetOf(long: Long): BitSet {
|
||||||
return BitSet.valueOf(longArrayOf(long))
|
return BitSet.valueOf(longArrayOf(long))
|
||||||
@ -229,4 +235,13 @@ object KUtil {
|
|||||||
userName = StringBuffer("nobody")
|
userName = StringBuffer("nobody")
|
||||||
groupName = 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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,25 +17,22 @@ import com.google.gson.Gson;
|
|||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
import com.google.gson.stream.JsonReader;
|
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.network.connection.play.PlayConnection;
|
||||||
import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer;
|
import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer;
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition;
|
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 org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.security.MessageDigest;
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
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)
|
@Deprecated(forRemoval = true)
|
||||||
public final class Util {
|
public final class Util {
|
||||||
@ -115,61 +112,6 @@ public final class Util {
|
|||||||
return ret;
|
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 {
|
public static String readReader(BufferedReader reader, boolean closeStream) throws IOException {
|
||||||
StringBuilder stringBuilder = new StringBuilder();
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
String line;
|
String line;
|
||||||
@ -186,52 +128,6 @@ public final class Util {
|
|||||||
return stringBuilder.toString();
|
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) {
|
public static int getJsonReaderPosition(JsonReader jsonReader) {
|
||||||
try {
|
try {
|
||||||
return JSON_READER_POS_FIELD.getInt(jsonReader) - JSON_READER_LINE_START_FIELD.getInt(jsonReader) + 1;
|
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 <T> void forceClassInit(Class<T> 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<String, String> urlQueryToMap(String query) {
|
public static Map<String, String> urlQueryToMap(String query) {
|
||||||
Map<String, String> map = new HashMap<>();
|
Map<String, String> map = new HashMap<>();
|
||||||
for (String parameter : query.split("&")) {
|
for (String parameter : query.split("&")) {
|
||||||
@ -289,14 +162,6 @@ public final class Util {
|
|||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String formatString(String string, Map<String, Object> format) {
|
|
||||||
String output = string;
|
|
||||||
for (Map.Entry<String, Object> entry : format.entrySet()) {
|
|
||||||
output = output.replace("${" + entry.getKey() + "}", entry.getValue().toString());
|
|
||||||
}
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public static JsonObject readJsonFromStream(@NotNull InputStream stream, boolean close) throws IOException {
|
public static JsonObject readJsonFromStream(@NotNull InputStream stream, boolean close) throws IOException {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user