profiles: replace almost all delegates with custom delegates

This commit is contained in:
Bixilon 2022-11-28 08:53:04 +01:00
parent 7d8672309e
commit 007633274c
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
42 changed files with 372 additions and 166 deletions

View File

@ -63,7 +63,7 @@ interface ProfileManager<T : Profile> {
val profiles: AbstractMutableBiMap<String, T> val profiles: AbstractMutableBiMap<String, T>
var selected: T var selected: T
@Deprecated("Should not be accessed") var currentLoadingPath: String? @Deprecated("Should not be accessed", level = DeprecationLevel.ERROR) var currentLoadingPath: String?
val baseDirectory: File val baseDirectory: File
get() = File(RunConfiguration.HOME_DIRECTORY + "config/" + namespace.namespace + "/") get() = File(RunConfiguration.HOME_DIRECTORY + "config/" + namespace.namespace + "/")
@ -92,7 +92,7 @@ interface ProfileManager<T : Profile> {
return profile return profile
} }
@Deprecated("") @Deprecated("", level = DeprecationLevel.ERROR)
fun <V> delegate(value: V, verify: ((V) -> Unit)? = null): ProfileDelegate<V> { fun <V> delegate(value: V, verify: ((V) -> Unit)? = null): ProfileDelegate<V> {
return ProfileDelegate(value, this, currentLoadingPath ?: throw IllegalAccessException("Delegate can only be created while loading or creating profiles!"), verify) return ProfileDelegate(value, this, currentLoadingPath ?: throw IllegalAccessException("Delegate can only be created while loading or creating profiles!"), verify)
} }
@ -106,17 +106,17 @@ interface ProfileManager<T : Profile> {
} }
} }
@Deprecated("") @Deprecated("", level = DeprecationLevel.ERROR)
fun <K, V> mapDelegate(default: MutableMap<K, V> = mutableMapOf(), verify: ((MapChangeListener.Change<out K, out V>) -> Unit)? = null): MapDelegateProfile<K, V> { fun <K, V> mapDelegate(default: MutableMap<K, V> = mutableMapOf(), verify: ((MapChangeListener.Change<out K, out V>) -> Unit)? = null): MapDelegateProfile<K, V> {
return MapDelegateProfile(FXCollections.synchronizedObservableMap(FXCollections.observableMap(default)), profileManager = this, profileName = currentLoadingPath ?: throw IllegalAccessException("Delegate can only be created while loading or creating profiles!"), verify = verify) return MapDelegateProfile(FXCollections.synchronizedObservableMap(FXCollections.observableMap(default)), profileManager = this, profileName = currentLoadingPath ?: throw IllegalAccessException("Delegate can only be created while loading or creating profiles!"), verify = verify)
} }
@Deprecated("") @Deprecated("", level = DeprecationLevel.ERROR)
fun <V> listDelegate(default: MutableList<V> = mutableListOf(), verify: ((ListChangeListener.Change<out V>) -> Unit)? = null): ListDelegateProfile<V> { fun <V> listDelegate(default: MutableList<V> = mutableListOf(), verify: ((ListChangeListener.Change<out V>) -> Unit)? = null): ListDelegateProfile<V> {
return ListDelegateProfile(FXCollections.synchronizedObservableList(FXCollections.observableList(default)), profileManager = this, profileName = currentLoadingPath ?: throw IllegalAccessException("Delegate can only be created while loading or creating profiles!"), verify = verify) return ListDelegateProfile(FXCollections.synchronizedObservableList(FXCollections.observableList(default)), profileManager = this, profileName = currentLoadingPath ?: throw IllegalAccessException("Delegate can only be created while loading or creating profiles!"), verify = verify)
} }
@Deprecated("") @Deprecated("", level = DeprecationLevel.ERROR)
fun <V> setDelegate(default: MutableSet<V> = mutableSetOf(), verify: ((SetChangeListener.Change<out V>) -> Unit)? = null): SetDelegateProfile<V> { fun <V> setDelegate(default: MutableSet<V> = mutableSetOf(), verify: ((SetChangeListener.Change<out V>) -> Unit)? = null): SetDelegateProfile<V> {
return SetDelegateProfile(FXCollections.synchronizedObservableSet(FXCollections.observableSet(default)), profileManager = this, profileName = currentLoadingPath ?: throw IllegalAccessException("Delegate can only be created while loading or creating profiles!"), verify = verify) return SetDelegateProfile(FXCollections.synchronizedObservableSet(FXCollections.observableSet(default)), profileManager = this, profileName = currentLoadingPath ?: throw IllegalAccessException("Delegate can only be created while loading or creating profiles!"), verify = verify)
} }

View File

@ -19,7 +19,7 @@ import de.bixilon.minosoft.config.profile.profiles.Profile
open class BooleanDelegate( open class BooleanDelegate(
override val profile: Profile, override val profile: Profile,
default: Boolean, default: Boolean,
name: String, name: String = "",
) : SimpleDelegate<Boolean>(profile, default, name) { ) : SimpleDelegate<Boolean>(profile, default, name) {
override fun validate(value: Boolean) = Unit override fun validate(value: Boolean) = Unit

View File

@ -11,8 +11,9 @@
* This software is not affiliated with Mojang AB, the original developer of Minecraft. * This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/ */
package de.bixilon.minosoft.config.profile.delegate package de.bixilon.minosoft.config.profile.delegate.types
import de.bixilon.minosoft.config.profile.delegate.SimpleDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile import de.bixilon.minosoft.config.profile.profiles.Profile
import de.bixilon.minosoft.data.text.formatting.color.RGBColor import de.bixilon.minosoft.data.text.formatting.color.RGBColor

View File

@ -0,0 +1,28 @@
/*
* Minosoft
* Copyright (C) 2020-2022 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.config.profile.delegate.types
import de.bixilon.kutil.enums.ValuesEnum
import de.bixilon.minosoft.config.profile.delegate.SimpleDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile
open class EnumDelegate<T : Enum<*>>(
override val profile: Profile,
default: T,
values: ValuesEnum<T>,
name: String = "",
) : SimpleDelegate<T>(profile, default, name) {
override fun validate(value: T) = Unit
}

View File

@ -0,0 +1,26 @@
/*
* Minosoft
* Copyright (C) 2020-2022 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.config.profile.delegate.types
import de.bixilon.minosoft.config.profile.delegate.SimpleDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile
open class LanguageDelegate(
override val profile: Profile,
default: String?,
name: String = "",
) : SimpleDelegate<String?>(profile, default, name) {
override fun validate(value: String?) = Unit
}

View File

@ -0,0 +1,26 @@
/*
* Minosoft
* Copyright (C) 2020-2022 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.config.profile.delegate.types
import de.bixilon.minosoft.config.profile.delegate.SimpleDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile
open class NullableStringDelegate(
override val profile: Profile,
default: String?,
name: String = "",
) : SimpleDelegate<String?>(profile, default, name) {
override fun validate(value: String?) = Unit
}

View File

@ -0,0 +1,26 @@
/*
* Minosoft
* Copyright (C) 2020-2022 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.config.profile.delegate.types
import de.bixilon.minosoft.config.profile.delegate.SimpleDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile
open class StringDelegate(
override val profile: Profile,
default: String,
name: String = "",
) : SimpleDelegate<String>(profile, default, name) {
override fun validate(value: String) = Unit
}

View File

@ -0,0 +1,24 @@
/*
* Minosoft
* Copyright (C) 2020-2022 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.config.profile.delegate.types.map
import de.bixilon.minosoft.config.profile.profiles.Profile
import de.bixilon.minosoft.util.logging.LogLevels
import de.bixilon.minosoft.util.logging.LogMessageType
class LogDelegate(
override val profile: Profile,
default: MutableMap<LogMessageType, LogLevels>,
name: String = "",
) : MapDelegate<LogMessageType, LogLevels>(profile, default, name)

View File

@ -0,0 +1,36 @@
/*
* Minosoft
* Copyright (C) 2020-2022 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.config.profile.delegate.types.map
import de.bixilon.kutil.observer.map.MapObserver
import de.bixilon.minosoft.config.profile.delegate.AbstractDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile
import de.bixilon.minosoft.util.KUtil.minosoft
abstract class MapDelegate<K, V>(
override val profile: Profile,
default: MutableMap<K, V>,
name: String,
) : MapObserver<K, V>(default), AbstractDelegate<MutableMap<K, V>> {
override val name = minosoft(name)
override val description = minosoft("$name.description")
override fun get() = value
override fun set(value: MutableMap<K, V>) {
validate(value)
this.value.unsafe = value
}
override fun validate(value: MutableMap<K, V>) = Unit
}

View File

@ -19,9 +19,11 @@ 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.kutil.random.RandomStringUtil.randomString
import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.config.profile.ProfileManager
import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.delegate.types.NullableStringDelegate
import de.bixilon.minosoft.config.profile.delegate.types.StringDelegate
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
import de.bixilon.minosoft.config.profile.profiles.account.AccountProfileManager.delegate
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
@ -40,20 +42,20 @@ class AccountProfile(
override var saved: Boolean = true override var saved: Boolean = true
override var ignoreNextReload: Boolean = false override var ignoreNextReload: Boolean = false
override val version: Int = latestVersion override val version: Int = latestVersion
override var description by delegate(description ?: "") override var description by StringDelegate(this, description ?: "")
/** /**
* The client token. * The client token.
* 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(KUtil.RANDOM.randomString(128)) var clientToken by StringDelegate(this, KUtil.RANDOM.randomString(128))
/** /**
* Before using an account, it always tries to fetch the profile. * Before using an account, it always tries to fetch the profile.
* If the fetch is successful, we can be sure that the account is working. * If the fetch is successful, we can be sure that the account is working.
*/ */
var alwaysFetchProfile by delegate(true) var alwaysFetchProfile by BooleanDelegate(this, true)
/** /**
* All accounts * All accounts
@ -66,7 +68,7 @@ class AccountProfile(
* The current id of the selected account * The current id of the selected account
*/ */
@get:JsonInclude(JsonInclude.Include.NON_NULL) @get:JsonInclude(JsonInclude.Include.NON_NULL)
@get:JsonProperty("selected") private var _selected: String? by delegate(null) @get:JsonProperty("selected") private var _selected: String? by NullableStringDelegate(this, null)
@get:JsonIgnore var selected: Account? by backingDelegate(getter = { entries[_selected] }, setter = { _selected = it?.id }) @get:JsonIgnore var selected: Account? by backingDelegate(getter = { entries[_selected] }, setter = { _selected = it?.id })

View File

@ -16,8 +16,8 @@ package de.bixilon.minosoft.config.profile.profiles.audio
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.config.profile.ProfileManager
import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.delegate.types.StringDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile import de.bixilon.minosoft.config.profile.profiles.Profile
import de.bixilon.minosoft.config.profile.profiles.audio.AudioProfileManager.delegate
import de.bixilon.minosoft.config.profile.profiles.audio.AudioProfileManager.latestVersion import de.bixilon.minosoft.config.profile.profiles.audio.AudioProfileManager.latestVersion
import de.bixilon.minosoft.config.profile.profiles.audio.gui.GuiC import de.bixilon.minosoft.config.profile.profiles.audio.gui.GuiC
import de.bixilon.minosoft.config.profile.profiles.audio.types.TypesC import de.bixilon.minosoft.config.profile.profiles.audio.types.TypesC
@ -36,7 +36,7 @@ class AudioProfile(
override var saved: Boolean = true override var saved: Boolean = true
override var ignoreNextReload: Boolean = false override var ignoreNextReload: Boolean = false
override val version: Int = latestVersion override val version: Int = latestVersion
override var description by delegate(description ?: "") override var description by StringDelegate(this, description ?: "")
/** /**
* Skips the loading od the AudioPlayer * Skips the loading od the AudioPlayer

View File

@ -16,8 +16,8 @@ package de.bixilon.minosoft.config.profile.profiles.block
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.config.profile.ProfileManager
import de.bixilon.minosoft.config.profile.delegate.primitive.IntDelegate import de.bixilon.minosoft.config.profile.delegate.primitive.IntDelegate
import de.bixilon.minosoft.config.profile.delegate.types.StringDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile import de.bixilon.minosoft.config.profile.profiles.Profile
import de.bixilon.minosoft.config.profile.profiles.block.BlockProfileManager.delegate
import de.bixilon.minosoft.config.profile.profiles.block.BlockProfileManager.latestVersion import de.bixilon.minosoft.config.profile.profiles.block.BlockProfileManager.latestVersion
import de.bixilon.minosoft.config.profile.profiles.block.outline.OutlineC import de.bixilon.minosoft.config.profile.profiles.block.outline.OutlineC
import de.bixilon.minosoft.config.profile.profiles.block.rendering.RenderingC import de.bixilon.minosoft.config.profile.profiles.block.rendering.RenderingC
@ -36,7 +36,7 @@ class BlockProfile(
override var saved: Boolean = true override var saved: Boolean = true
override var ignoreNextReload: Boolean = false override var ignoreNextReload: Boolean = false
override val version: Int = latestVersion override val version: Int = latestVersion
override var description by delegate(description ?: "") override var description by StringDelegate(this, description ?: "")
/** /**
* The block view distance in chunks. * The block view distance in chunks.

View File

@ -13,8 +13,8 @@
package de.bixilon.minosoft.config.profile.profiles.block.outline package de.bixilon.minosoft.config.profile.profiles.block.outline
import de.bixilon.minosoft.config.profile.delegate.ColorDelegate
import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.delegate.types.ColorDelegate
import de.bixilon.minosoft.config.profile.profiles.block.BlockProfile import de.bixilon.minosoft.config.profile.profiles.block.BlockProfile
import de.bixilon.minosoft.data.text.formatting.color.ChatColors import de.bixilon.minosoft.data.text.formatting.color.ChatColors

View File

@ -15,8 +15,11 @@ package de.bixilon.minosoft.config.profile.profiles.connection
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.config.profile.ProfileManager
import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.delegate.types.EnumDelegate
import de.bixilon.minosoft.config.profile.delegate.types.LanguageDelegate
import de.bixilon.minosoft.config.profile.delegate.types.StringDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile import de.bixilon.minosoft.config.profile.profiles.Profile
import de.bixilon.minosoft.config.profile.profiles.connection.ConnectionProfileManager.delegate
import de.bixilon.minosoft.config.profile.profiles.connection.ConnectionProfileManager.latestVersion import de.bixilon.minosoft.config.profile.profiles.connection.ConnectionProfileManager.latestVersion
import de.bixilon.minosoft.config.profile.profiles.connection.signature.SignatureC import de.bixilon.minosoft.config.profile.profiles.connection.signature.SignatureC
import de.bixilon.minosoft.config.profile.profiles.connection.skin.SkinC import de.bixilon.minosoft.config.profile.profiles.connection.skin.SkinC
@ -35,35 +38,35 @@ class ConnectionProfile(
override var saved: Boolean = true override var saved: Boolean = true
override var ignoreNextReload: Boolean = false override var ignoreNextReload: Boolean = false
override val version: Int = latestVersion override val version: Int = latestVersion
override var description by delegate(description ?: "") override var description by StringDelegate(this, description ?: "")
/** /**
* Language for language files. * Language for language files.
* Will be sent to the server * Will be sent to the server
* If unset (null), uses eros language * If unset (null), uses eros language
*/ */
var language: String? by delegate(null) var language: String? by LanguageDelegate(this, null)
/** /**
* If false, the server should not list us the ping player list * If false, the server should not list us the ping player list
* Will be sent to the server * Will be sent to the server
*/ */
var playerListing by delegate(true) var playerListing by BooleanDelegate(this, true)
/** /**
* Main arm to use * Main arm to use
*/ */
var mainArm by delegate(Arms.RIGHT) var mainArm by EnumDelegate(this, Arms.RIGHT)
val skin = SkinC() val skin = SkinC(this)
val signature = SignatureC() val signature = SignatureC(this)
var autoRespawn by delegate(false) var autoRespawn by BooleanDelegate(this, false)
/** /**
* If set, the client will respond with "vanilla" as brand and not "minosoft" * If set, the client will respond with "vanilla" as brand and not "minosoft"
*/ */
var fakeBrand by delegate(false) var fakeBrand by BooleanDelegate(this, false)
override fun toString(): String { override fun toString(): String {
return ConnectionProfileManager.getName(this) return ConnectionProfileManager.getName(this)

View File

@ -13,27 +13,28 @@
package de.bixilon.minosoft.config.profile.profiles.connection.signature package de.bixilon.minosoft.config.profile.profiles.connection.signature
import de.bixilon.minosoft.config.profile.profiles.connection.ConnectionProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.profiles.connection.ConnectionProfile
class SignatureC { class SignatureC(profile: ConnectionProfile) {
/** /**
* Hides all bad signed messages * Hides all bad signed messages
*/ */
val ignoreBadSignedMessages by delegate(false) val ignoreBadSignedMessages by BooleanDelegate(profile, false)
/** /**
* Does not fetch/load the private key, thus forcing the unsigned mode * Does not fetch/load the private key, thus forcing the unsigned mode
*/ */
val disableKeys by delegate(false) val disableKeys by BooleanDelegate(profile, false)
/** /**
* Send commands as message * Send commands as message
*/ */
val sendCommandAsMessage by delegate(false) val sendCommandAsMessage by BooleanDelegate(profile, false)
/** /**
* Signs commands * Signs commands
*/ */
val signCommands by delegate(true) val signCommands by BooleanDelegate(profile, true)
} }

View File

@ -14,51 +14,52 @@
package de.bixilon.minosoft.config.profile.profiles.connection.skin package de.bixilon.minosoft.config.profile.profiles.connection.skin
import com.fasterxml.jackson.annotation.JsonIgnore import com.fasterxml.jackson.annotation.JsonIgnore
import de.bixilon.minosoft.config.profile.profiles.connection.ConnectionProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.profiles.connection.ConnectionProfile
import de.bixilon.minosoft.data.entities.entities.player.SkinParts import de.bixilon.minosoft.data.entities.entities.player.SkinParts
class SkinC { class SkinC(profile: ConnectionProfile) {
/** /**
* The cape of use will be hidden * The cape of use will be hidden
* Will be sent to the server * Will be sent to the server
*/ */
var cape by delegate(true) var cape by BooleanDelegate(profile, true)
/** /**
* The jacket of use will be hidden * The jacket of use will be hidden
* Will be sent to the server * Will be sent to the server
*/ */
var jacket by delegate(true) var jacket by BooleanDelegate(profile, true)
/** /**
* The left sleeve of use will be hidden * The left sleeve of use will be hidden
* Will be sent to the server * Will be sent to the server
*/ */
var leftSleeve by delegate(true) var leftSleeve by BooleanDelegate(profile, true)
/** /**
* The right sleeve of use will be hidden * The right sleeve of use will be hidden
* Will be sent to the server * Will be sent to the server
*/ */
var rightSleeve by delegate(true) var rightSleeve by BooleanDelegate(profile, true)
/** /**
* The left pants of use will be hidden * The left pants of use will be hidden
* Will be sent to the server * Will be sent to the server
*/ */
var leftPants by delegate(true) var leftPants by BooleanDelegate(profile, true)
/** /**
* The right pants of use will be hidden * The right pants of use will be hidden
* Will be sent to the server * Will be sent to the server
*/ */
var rightPants by delegate(true) var rightPants by BooleanDelegate(profile, true)
/** /**
* The hat of use will be hidden * The hat of use will be hidden
* Will be sent to the server * Will be sent to the server
*/ */
var hat by delegate(true) var hat by BooleanDelegate(profile, true)
@get:JsonIgnore val skinParts: Array<SkinParts> @get:JsonIgnore val skinParts: Array<SkinParts>

View File

@ -16,8 +16,8 @@ package de.bixilon.minosoft.config.profile.profiles.controls
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.config.key.KeyBinding import de.bixilon.minosoft.config.key.KeyBinding
import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.config.profile.ProfileManager
import de.bixilon.minosoft.config.profile.delegate.types.StringDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile import de.bixilon.minosoft.config.profile.profiles.Profile
import de.bixilon.minosoft.config.profile.profiles.controls.ControlsProfileManager.delegate
import de.bixilon.minosoft.config.profile.profiles.controls.ControlsProfileManager.latestVersion import de.bixilon.minosoft.config.profile.profiles.controls.ControlsProfileManager.latestVersion
import de.bixilon.minosoft.config.profile.profiles.controls.ControlsProfileManager.mapDelegate import de.bixilon.minosoft.config.profile.profiles.controls.ControlsProfileManager.mapDelegate
import de.bixilon.minosoft.config.profile.profiles.controls.interaction.InteractionC import de.bixilon.minosoft.config.profile.profiles.controls.interaction.InteractionC
@ -37,13 +37,13 @@ class ControlsProfile(
override var saved: Boolean = true override var saved: Boolean = true
override var ignoreNextReload: Boolean = false override var ignoreNextReload: Boolean = false
override val version: Int = latestVersion override val version: Int = latestVersion
override var description by delegate(description ?: "") override var description by StringDelegate(this, description ?: "")
var keyBindings: MutableMap<ResourceLocation, KeyBinding> by mapDelegate() var keyBindings: MutableMap<ResourceLocation, KeyBinding> by mapDelegate()
private set private set
val mouse = MouseC() val mouse = MouseC(this)
val interaction = InteractionC() val interaction = InteractionC(this)
override fun toString(): String { override fun toString(): String {

View File

@ -13,22 +13,23 @@
package de.bixilon.minosoft.config.profile.profiles.controls.interaction package de.bixilon.minosoft.config.profile.profiles.controls.interaction
import de.bixilon.minosoft.config.profile.profiles.controls.ControlsProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.profiles.controls.ControlsProfile
class InteractionC { class InteractionC(profile: ControlsProfile) {
/** /**
* Enables or disables right-clicking with a shovel on grass () to create grass paths * Enables or disables right-clicking with a shovel on grass () to create grass paths
*/ */
var flattening by delegate(true) var flattening by BooleanDelegate(profile, true)
/** /**
* Enables right-clicking with an axe on any logs to create stripped logs * Enables right-clicking with an axe on any logs to create stripped logs
*/ */
var stripping by delegate(true) var stripping by BooleanDelegate(profile, true)
/** /**
* Enables right-clicking with a hoe on grass () to create farmland * Enables right-clicking with a hoe on grass () to create farmland
*/ */
var tilling by delegate(true) var tilling by BooleanDelegate(profile, true)
} }

View File

@ -13,20 +13,21 @@
package de.bixilon.minosoft.config.profile.profiles.controls.mouse package de.bixilon.minosoft.config.profile.profiles.controls.mouse
import de.bixilon.minosoft.config.profile.profiles.controls.ControlsProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.FloatDelegate
import de.bixilon.minosoft.config.profile.profiles.controls.ControlsProfile
class MouseC { class MouseC(profile: ControlsProfile) {
/** /**
* Mouse sensitivity in percent * Mouse sensitivity in percent
* Controls how fast the mouse rotates the player around * Controls how fast the mouse rotates the player around
* Must be non-negative * Must be non-negative
*/ */
var sensitivity by delegate(1.0f) { check(it > 0.0f) { "Must be non-negative!" } } var sensitivity by FloatDelegate(profile, 1.0f, "", arrayOf(0.01f..10.0f))
/** /**
* Controls how fast you scroll (e.g. in the hotbar) * Controls how fast you scroll (e.g. in the hotbar)
* Must be non-negative * Must be non-negative
*/ */
var scrollSensitivity by delegate(1.0) { check(it > 0.0) { "Must be non-negative!" } } var scrollSensitivity by FloatDelegate(profile, 1.0f, "", arrayOf(0.01f..10.0f))
} }

View File

@ -15,8 +15,8 @@ package de.bixilon.minosoft.config.profile.profiles.entity
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.config.profile.ProfileManager
import de.bixilon.minosoft.config.profile.delegate.types.StringDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile import de.bixilon.minosoft.config.profile.profiles.Profile
import de.bixilon.minosoft.config.profile.profiles.entity.EntityProfileManager.delegate
import de.bixilon.minosoft.config.profile.profiles.entity.EntityProfileManager.latestVersion import de.bixilon.minosoft.config.profile.profiles.entity.EntityProfileManager.latestVersion
import de.bixilon.minosoft.config.profile.profiles.entity.hitbox.HitboxC import de.bixilon.minosoft.config.profile.profiles.entity.hitbox.HitboxC
@ -33,10 +33,10 @@ class EntityProfile(
override var saved: Boolean = true override var saved: Boolean = true
override var ignoreNextReload: Boolean = false override var ignoreNextReload: Boolean = false
override val version: Int = latestVersion override val version: Int = latestVersion
override var description by delegate(description ?: "") override var description by StringDelegate(this, description ?: "")
val hitbox = HitboxC() val hitbox = HitboxC(this)
override fun toString(): String { override fun toString(): String {
return EntityProfileManager.getName(this) return EntityProfileManager.getName(this)

View File

@ -13,33 +13,34 @@
package de.bixilon.minosoft.config.profile.profiles.entity.hitbox package de.bixilon.minosoft.config.profile.profiles.entity.hitbox
import de.bixilon.minosoft.config.profile.profiles.entity.EntityProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.profiles.entity.EntityProfile
class HitboxC { class HitboxC(profile: EntityProfile) {
/** /**
* Enables or disables hit-boxes for all entities * Enables or disables hit-boxes for all entities
*/ */
var enabled by delegate(true) var enabled by BooleanDelegate(profile, true)
/** /**
* Shows your own hit-box when in first person view * Shows your own hit-box when in first person view
*/ */
var showLocal by delegate(false) var showLocal by BooleanDelegate(profile, false)
/** /**
* Shows hit-boxes from invisible entities * Shows hit-boxes from invisible entities
*/ */
var showInvisible by delegate(false) var showInvisible by BooleanDelegate(profile, false)
/** /**
* If true: Shows full colored hit-boxes (aka. lazy boxes). * If true: Shows full colored hit-boxes (aka. lazy boxes).
* If false: Shows just the outline of the hit-box * If false: Shows just the outline of the hit-box
*/ */
var lazy by delegate(false) var lazy by BooleanDelegate(profile, false)
/** /**
* Disables the z-buffer when rendering * Disables the z-buffer when rendering
* => Shows the boxes through walls * => Shows the boxes through walls
*/ */
var showThroughWalls by delegate(false) var showThroughWalls by BooleanDelegate(profile, false)
} }

View File

@ -15,8 +15,8 @@ package de.bixilon.minosoft.config.profile.profiles.eros
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.config.profile.ProfileManager
import de.bixilon.minosoft.config.profile.delegate.types.StringDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile import de.bixilon.minosoft.config.profile.profiles.Profile
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager.delegate
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager.latestVersion import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager.latestVersion
import de.bixilon.minosoft.config.profile.profiles.eros.general.GeneralC import de.bixilon.minosoft.config.profile.profiles.eros.general.GeneralC
import de.bixilon.minosoft.config.profile.profiles.eros.server.ServerC import de.bixilon.minosoft.config.profile.profiles.eros.server.ServerC
@ -36,13 +36,13 @@ class ErosProfile(
override var saved: Boolean = true override var saved: Boolean = true
override var ignoreNextReload: Boolean = false override var ignoreNextReload: Boolean = false
override val version: Int = latestVersion override val version: Int = latestVersion
override var description by delegate(description ?: "") override var description by StringDelegate(this, description ?: "")
val general = GeneralC() val general = GeneralC(this)
val theme = ThemeC() val theme = ThemeC(this)
val server = ServerC() val server = ServerC(this)
val text = TextC() val text = TextC(this)
override fun toString(): String { override fun toString(): String {
return ErosProfileManager.getName(this) return ErosProfileManager.getName(this)

View File

@ -16,21 +16,24 @@ package de.bixilon.minosoft.config.profile.profiles.eros.general
import com.fasterxml.jackson.annotation.JsonIgnore import com.fasterxml.jackson.annotation.JsonIgnore
import com.fasterxml.jackson.annotation.JsonProperty import com.fasterxml.jackson.annotation.JsonProperty
import de.bixilon.kutil.locale.LanguageUtil.fullName import de.bixilon.kutil.locale.LanguageUtil.fullName
import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.delegate.types.NullableStringDelegate
import de.bixilon.minosoft.config.profile.delegate.types.StringDelegate
import de.bixilon.minosoft.config.profile.profiles.account.AccountProfile import de.bixilon.minosoft.config.profile.profiles.account.AccountProfile
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.eros.ErosProfileManager.delegate import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfile
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager.mapDelegate import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager.mapDelegate
import de.bixilon.minosoft.data.language.LanguageUtil import de.bixilon.minosoft.data.language.LanguageUtil
import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.ResourceLocation
import java.util.* import java.util.*
class GeneralC { class GeneralC(profile: ErosProfile) {
/** /**
* Language to use for eros. This is also the fallback language for other profiles * Language to use for eros. This is also the fallback language for other profiles
*/ */
var language: String by delegate(Locale.getDefault()?.fullName ?: LanguageUtil.FALLBACK_LANGUAGE) var language: String by StringDelegate(profile, Locale.getDefault()?.fullName ?: LanguageUtil.FALLBACK_LANGUAGE)
@get:JsonProperty("account_profile") private var _accountProfile: String? by delegate(null) @get:JsonProperty("account_profile") private var _accountProfile: String? by NullableStringDelegate(profile, null)
@get:JsonIgnore var accountProfile: AccountProfile @get:JsonIgnore var accountProfile: AccountProfile
get() = AccountProfileManager.profiles[_accountProfile] ?: AccountProfileManager.selected get() = AccountProfileManager.profiles[_accountProfile] ?: AccountProfileManager.selected
@ -48,11 +51,11 @@ class GeneralC {
/** /**
* Renders the skin overlay (hat) above the head (used for avatars) * Renders the skin overlay (hat) above the head (used for avatars)
*/ */
var renderSkinOverlay by delegate(true) var renderSkinOverlay by BooleanDelegate(profile, true)
/** /**
* Hides eros (all eros windows) once a connection with a server is successfully established. * Hides eros (all eros windows) once a connection with a server is successfully established.
* Will also show it again, once it got disconnected * Will also show it again, once it got disconnected
*/ */
var hideErosOnceConnected by delegate(false) var hideErosOnceConnected by BooleanDelegate(profile, false)
} }

View File

@ -14,14 +14,15 @@
package de.bixilon.minosoft.config.profile.profiles.eros.server package de.bixilon.minosoft.config.profile.profiles.eros.server
import com.fasterxml.jackson.annotation.JsonInclude import com.fasterxml.jackson.annotation.JsonInclude
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfile
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager.listDelegate import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager.listDelegate
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.eros.server.list.ListC import de.bixilon.minosoft.config.profile.profiles.eros.server.list.ListC
import de.bixilon.minosoft.config.profile.profiles.eros.server.modify.ModifyC import de.bixilon.minosoft.config.profile.profiles.eros.server.modify.ModifyC
class ServerC { class ServerC(profile: ErosProfile) {
val modify = ModifyC() val modify = ModifyC(profile)
val list = ListC() val list = ListC(profile)
@get:JsonInclude(JsonInclude.Include.NON_EMPTY) @get:JsonInclude(JsonInclude.Include.NON_EMPTY)
var entries: MutableList<Server> by listDelegate() var entries: MutableList<Server> by listDelegate()

View File

@ -13,21 +13,26 @@
package de.bixilon.minosoft.config.profile.profiles.eros.server.list package de.bixilon.minosoft.config.profile.profiles.eros.server.list
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfile
class ListC { class ListC(profile: ErosProfile) {
/** /**
* Hides all servers in the server list that can not be pinged * Hides all servers in the server list that can not be pinged
*/ */
var hideOffline by delegate(false) var hideOffline by BooleanDelegate(profile, false)
/** /**
* Hides all servers in the server list, when the amount of online players exceeds the slots * Hides all servers in the server list, when the amount of online players exceeds the slots
*/ */
var hideFull by delegate(false)
/**
* Hides all servers in the server list, when the amount of online players exceeds the slots
*/
var hideFull by BooleanDelegate(profile, false)
/** /**
* Hides all servers in the server list when <= 0 players are online * Hides all servers in the server list when <= 0 players are online
*/ */
var hideEmpty by delegate(false) var hideEmpty by BooleanDelegate(profile, false)
} }

View File

@ -13,19 +13,20 @@
package de.bixilon.minosoft.config.profile.profiles.eros.server.modify package de.bixilon.minosoft.config.profile.profiles.eros.server.modify
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfile
/** /**
* Configuration for the add or edit server dialog * Configuration for the add or edit server dialog
*/ */
class ModifyC { class ModifyC(profile: ErosProfile) {
/** /**
* Shows releases in the version select dropdown * Shows releases in the version select dropdown
*/ */
var showReleases by delegate(true) var showReleases by BooleanDelegate(profile, true)
/** /**
* Shows snapshots in the version select dropdown * Shows snapshots in the version select dropdown
*/ */
var showSnapshots by delegate(false) var showSnapshots by BooleanDelegate(profile, false)
} }

View File

@ -1,6 +1,6 @@
/* /*
* Minosoft * Minosoft
* Copyright (C) 2021 Moritz Zwerger * Copyright (C) 2020-2022 Moritz Zwerger
* *
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
* *
@ -13,19 +13,20 @@
package de.bixilon.minosoft.config.profile.profiles.eros.text package de.bixilon.minosoft.config.profile.profiles.eros.text
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfile
class TextC { class TextC(profile: ErosProfile) {
/** /**
* Displays colored text * Displays colored text
* If disables it displays the css defined language (defaults to white) * If disables it displays the css defined language (defaults to white)
*/ */
var colored by delegate(true) var colored by BooleanDelegate(profile, true)
/** /**
* Enables the obfuscated formatting style * Enables the obfuscated formatting style
* If false, the text will just blink * If false, the text will just blink
*/ */
var obfuscated by delegate(true) var obfuscated by BooleanDelegate(profile, true)
} }

View File

@ -13,13 +13,14 @@
package de.bixilon.minosoft.config.profile.profiles.eros.theme package de.bixilon.minosoft.config.profile.profiles.eros.theme
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.types.StringDelegate
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfile
class ThemeC { class ThemeC(profile: ErosProfile) {
/** /**
* Name of the theme css file * Name of the theme css file
* Located in minosoft:eros/themes/<name>.css * Located in minosoft:eros/themes/<name>.css
*/ */
var theme by delegate("default") var theme by StringDelegate(profile, "default")
} }

View File

@ -15,8 +15,9 @@ package de.bixilon.minosoft.config.profile.profiles.gui
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.config.profile.ProfileManager
import de.bixilon.minosoft.config.profile.delegate.primitive.FloatDelegate
import de.bixilon.minosoft.config.profile.delegate.types.StringDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile import de.bixilon.minosoft.config.profile.profiles.Profile
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfileManager.delegate
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfileManager.latestVersion import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfileManager.latestVersion
import de.bixilon.minosoft.config.profile.profiles.gui.chat.ChatC import de.bixilon.minosoft.config.profile.profiles.gui.chat.ChatC
import de.bixilon.minosoft.config.profile.profiles.gui.confirmation.ConfirmationC import de.bixilon.minosoft.config.profile.profiles.gui.confirmation.ConfirmationC
@ -36,18 +37,18 @@ class GUIProfile(
override var saved: Boolean = true override var saved: Boolean = true
override var ignoreNextReload: Boolean = false override var ignoreNextReload: Boolean = false
override val version: Int = latestVersion override val version: Int = latestVersion
override var description by delegate(description ?: "") override var description by StringDelegate(this, description ?: "")
/** /**
* The scale of the hud * The scale of the hud
* Must be non-negative * Must be non-negative
*/ */
var scale by delegate(2.0f) { check(it >= 0.0f) { "GUI scale must be non-negative" } } var scale by FloatDelegate(this, 2.0f, "", arrayOf(1.0f..10.0f))
val chat = ChatC() val chat = ChatC(this)
val hud = HudC() val hud = HudC(this)
val confirmation = ConfirmationC() val confirmation = ConfirmationC(this)
val sign = SignC() val sign = SignC(this)
override fun toString(): String { override fun toString(): String {
return GUIProfileManager.getName(this) return GUIProfileManager.getName(this)

View File

@ -13,44 +13,47 @@
package de.bixilon.minosoft.config.profile.profiles.gui.chat package de.bixilon.minosoft.config.profile.profiles.gui.chat
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.delegate.primitive.IntDelegate
import de.bixilon.minosoft.config.profile.delegate.types.EnumDelegate
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfile
import de.bixilon.minosoft.config.profile.profiles.gui.chat.internal.InternalC import de.bixilon.minosoft.config.profile.profiles.gui.chat.internal.InternalC
import de.bixilon.minosoft.protocol.packets.c2s.play.SettingsC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.SettingsC2SP
class ChatC { class ChatC(profile: GUIProfile) {
val internal = InternalC() val internal = InternalC(profile)
/** /**
* Hides the chat * Hides the chat
*/ */
var hidden by delegate(false) var hidden by BooleanDelegate(profile, false)
/** /**
* The width of the chat in scaled pixels * The width of the chat in scaled pixels
*/ */
var width by delegate(320) var width by IntDelegate(profile, 320, "", arrayOf(100..500))
/** /**
* The height of the chat in scaled pixels * The height of the chat in scaled pixels
*/ */
var height by delegate(180) var height by IntDelegate(profile, 180, "", arrayOf(40..500))
/** /**
* ToDo: Unknown purpose * ToDo: Unknown purpose
* Will be sent to the server * Will be sent to the server
*/ */
var textFiltering by delegate(false) // ToDo: Implement in the client var textFiltering by BooleanDelegate(profile, false) // ToDo: Implement in the client
/** /**
* If false, the chat will appear in white * If false, the chat will appear in white
* Will be sent to the server * Will be sent to the server
*/ */
var chatColors by delegate(true) // ToDo: Implement in the client var chatColors by BooleanDelegate(profile, true) // ToDo: Implement in the client
/** /**
* Chat mode * Chat mode
* Will be sent to the server * Will be sent to the server
*/ */
var chatMode by delegate(SettingsC2SP.ChatModes.EVERYTHING) var chatMode by EnumDelegate(profile, SettingsC2SP.ChatModes.EVERYTHING, SettingsC2SP.ChatModes)
} }

View File

@ -1,6 +1,6 @@
/* /*
* Minosoft * Minosoft
* Copyright (C) 2021 Moritz Zwerger * Copyright (C) 2020-2022 Moritz Zwerger
* *
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
* *
@ -13,22 +13,24 @@
package de.bixilon.minosoft.config.profile.profiles.gui.chat.internal package de.bixilon.minosoft.config.profile.profiles.gui.chat.internal
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.delegate.primitive.IntDelegate
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfile
class InternalC { class InternalC(profile: GUIProfile) {
/** /**
* Hides the internal chat * Hides the internal chat
*/ */
var hidden by delegate(false) var hidden by BooleanDelegate(profile, false)
/** /**
* The width of the internal chat in scaled pixels * The width of the internal chat in scaled pixels
*/ */
var width by delegate(320) var width by IntDelegate(profile, 320, "", arrayOf(100..500))
/** /**
* The height of the internal chat in scaled pixels * The height of the internal chat in scaled pixels
*/ */
var height by delegate(180) var height by IntDelegate(profile, 180, "", arrayOf(40..500))
} }

View File

@ -13,11 +13,12 @@
package de.bixilon.minosoft.config.profile.profiles.gui.confirmation package de.bixilon.minosoft.config.profile.profiles.gui.confirmation
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfile
class ConfirmationC { class ConfirmationC(profile: GUIProfile) {
var copyToClipboard by delegate(true) var copyToClipboard by BooleanDelegate(profile, true)
var openFile by delegate(true) var openFile by BooleanDelegate(profile, true)
var openURL by delegate(true) var openURL by BooleanDelegate(profile, true)
var sendMessage by delegate(true) var sendMessage by BooleanDelegate(profile, true)
} }

View File

@ -1,6 +1,6 @@
/* /*
* Minosoft * Minosoft
* Copyright (C) 2022 Moritz Zwerger * Copyright (C) 2020-2022 Moritz Zwerger
* *
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
* *
@ -13,10 +13,11 @@
package de.bixilon.minosoft.config.profile.profiles.gui.hud package de.bixilon.minosoft.config.profile.profiles.gui.hud
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfile
import de.bixilon.minosoft.config.profile.profiles.gui.hud.crosshair.CrosshairC import de.bixilon.minosoft.config.profile.profiles.gui.hud.crosshair.CrosshairC
import de.bixilon.minosoft.config.profile.profiles.gui.hud.hotbar.HotbarC import de.bixilon.minosoft.config.profile.profiles.gui.hud.hotbar.HotbarC
class HudC { class HudC(profile: GUIProfile) {
val crosshair = CrosshairC() val crosshair = CrosshairC(profile)
val hotbar = HotbarC() val hotbar = HotbarC(profile)
} }

View File

@ -13,17 +13,19 @@
package de.bixilon.minosoft.config.profile.profiles.gui.hud.crosshair package de.bixilon.minosoft.config.profile.profiles.gui.hud.crosshair
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.delegate.types.ColorDelegate
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfile
import de.bixilon.minosoft.data.text.formatting.color.ChatColors import de.bixilon.minosoft.data.text.formatting.color.ChatColors
class CrosshairC { class CrosshairC(profile: GUIProfile) {
/** /**
* Inverts the color of the crosshair according to the background color * Inverts the color of the crosshair according to the background color
*/ */
var complementaryColor by delegate(true) var complementaryColor by BooleanDelegate(profile, true)
/** /**
* The color of the crosshair * The color of the crosshair
*/ */
var color by delegate(ChatColors.WHITE) var color by ColorDelegate(profile, ChatColors.WHITE, "")
} }

View File

@ -1,6 +1,6 @@
/* /*
* Minosoft * Minosoft
* Copyright (C) 2022 Moritz Zwerger * Copyright (C) 2020-2022 Moritz Zwerger
* *
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
* *
@ -13,8 +13,9 @@
package de.bixilon.minosoft.config.profile.profiles.gui.hud.hotbar package de.bixilon.minosoft.config.profile.profiles.gui.hud.hotbar
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfile
import de.bixilon.minosoft.config.profile.profiles.gui.hud.hotbar.hunger.HungerC import de.bixilon.minosoft.config.profile.profiles.gui.hud.hotbar.hunger.HungerC
class HotbarC { class HotbarC(profile: GUIProfile) {
val hunger = HungerC() val hunger = HungerC(profile)
} }

View File

@ -1,6 +1,6 @@
/* /*
* Minosoft * Minosoft
* Copyright (C) 2022 Moritz Zwerger * Copyright (C) 2020-2022 Moritz Zwerger
* *
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
* *
@ -13,13 +13,14 @@
package de.bixilon.minosoft.config.profile.profiles.gui.hud.hotbar.hunger package de.bixilon.minosoft.config.profile.profiles.gui.hud.hotbar.hunger
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfile
class HungerC { class HungerC(profile: GUIProfile) {
/** /**
* Minecraft does not show the saturation by default. * Minecraft does not show the saturation by default.
* Enabling this option will show how much saturation you have * Enabling this option will show how much saturation you have
* Enabled by default, might break texture packs * Enabled by default, might break texture packs
*/ */
val saturationBar by delegate(true) val saturationBar by BooleanDelegate(profile, true)
} }

View File

@ -13,8 +13,9 @@
package de.bixilon.minosoft.config.profile.profiles.gui.sign package de.bixilon.minosoft.config.profile.profiles.gui.sign
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.profiles.gui.GUIProfile
class SignC { class SignC(profile: GUIProfile) {
var limitLength by delegate(true) var limitLength by BooleanDelegate(profile, true)
} }

View File

@ -15,8 +15,9 @@ package de.bixilon.minosoft.config.profile.profiles.other
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.config.profile.ProfileManager
import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.delegate.types.StringDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile import de.bixilon.minosoft.config.profile.profiles.Profile
import de.bixilon.minosoft.config.profile.profiles.other.OtherProfileManager.delegate
import de.bixilon.minosoft.config.profile.profiles.other.OtherProfileManager.latestVersion import de.bixilon.minosoft.config.profile.profiles.other.OtherProfileManager.latestVersion
import de.bixilon.minosoft.config.profile.profiles.other.log.LogC import de.bixilon.minosoft.config.profile.profiles.other.log.LogC
@ -33,19 +34,19 @@ class OtherProfile(
override var saved: Boolean = true override var saved: Boolean = true
override var ignoreNextReload: Boolean = false override var ignoreNextReload: Boolean = false
override val version: Int = latestVersion override val version: Int = latestVersion
override var description by delegate(description ?: "") override var description by StringDelegate(this, description ?: "")
/** /**
* Use native network transport if available * Use native network transport if available
*/ */
var nativeNetwork by delegate(true) var nativeNetwork by BooleanDelegate(this, true)
/** /**
* Listens for servers on your LAN network * Listens for servers on your LAN network
*/ */
var listenLAN by delegate(true) var listenLAN by BooleanDelegate(this, true)
val log = LogC() val log = LogC(this)
override fun toString(): String { override fun toString(): String {
return OtherProfileManager.getName(this) return OtherProfileManager.getName(this)

View File

@ -13,23 +13,24 @@
package de.bixilon.minosoft.config.profile.profiles.other.log package de.bixilon.minosoft.config.profile.profiles.other.log
import de.bixilon.minosoft.config.profile.profiles.other.OtherProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.profiles.other.OtherProfileManager.mapDelegate import de.bixilon.minosoft.config.profile.delegate.types.map.LogDelegate
import de.bixilon.minosoft.config.profile.profiles.other.OtherProfile
import de.bixilon.minosoft.util.logging.LogMessageType import de.bixilon.minosoft.util.logging.LogMessageType
class LogC { class LogC(profile: OtherProfile) {
/** /**
* Hides various messages (e.g. chunk receiving, entity position updates, ...) * Hides various messages (e.g. chunk receiving, entity position updates, ...)
* Only relevant if packet logging is on VERBOSE * Only relevant if packet logging is on VERBOSE
*/ */
var reducedProtocolLog by delegate(true) var reducedProtocolLog by BooleanDelegate(profile, true)
/** /**
* All log message types mapped to its log level * All log message types mapped to its log level
* @see de.bixilon.minosoft.util.logging.LogLevels * @see de.bixilon.minosoft.util.logging.LogLevels
* @see de.bixilon.minosoft.util.logging.LogMessageType * @see de.bixilon.minosoft.util.logging.LogMessageType
*/ */
var levels by mapDelegate(LogMessageType.DEFAULT_LOG_MAP.toMutableMap()) var levels by LogDelegate(profile, LogMessageType.DEFAULT_LOG_MAP.toMutableMap())
private set private set
} }

View File

@ -15,8 +15,10 @@ package de.bixilon.minosoft.config.profile.profiles.particle
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.config.profile.ProfileManager
import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.delegate.primitive.IntDelegate
import de.bixilon.minosoft.config.profile.delegate.types.StringDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile import de.bixilon.minosoft.config.profile.profiles.Profile
import de.bixilon.minosoft.config.profile.profiles.particle.ParticleProfileManager.delegate
import de.bixilon.minosoft.config.profile.profiles.particle.ParticleProfileManager.latestVersion import de.bixilon.minosoft.config.profile.profiles.particle.ParticleProfileManager.latestVersion
import de.bixilon.minosoft.config.profile.profiles.particle.types.TypesC import de.bixilon.minosoft.config.profile.profiles.particle.types.TypesC
import de.bixilon.minosoft.gui.rendering.RenderConstants import de.bixilon.minosoft.gui.rendering.RenderConstants
@ -34,18 +36,18 @@ class ParticleProfile(
override var saved: Boolean = true override var saved: Boolean = true
override var ignoreNextReload: Boolean = false override var ignoreNextReload: Boolean = false
override val version: Int = latestVersion override val version: Int = latestVersion
override var description by delegate(description ?: "") override var description by StringDelegate(this, description ?: "")
/** /**
* Skips the loading of the particle render. Requires to reload the renderer! * Skips the loading of the particle render. Requires to reload the renderer!
*/ */
var skipLoading by delegate(false) var skipLoading by BooleanDelegate(this, false)
/** /**
* Enabled or disables particle renderer * Enabled or disables particle renderer
* Does not skip loading of particles * Does not skip loading of particles
*/ */
var enabled by delegate(true) var enabled by BooleanDelegate(this, true)
/** /**
* View distance for particles * View distance for particles
@ -53,7 +55,7 @@ class ParticleProfile(
* *
* @see de.bixilon.minosoft.config.profile.profiles.block.BlockProfile.viewDistance * @see de.bixilon.minosoft.config.profile.profiles.block.BlockProfile.viewDistance
*/ */
var viewDistance by delegate(10) { check(it in 0..128) { "Distance must be non-negative and must not exceed 128" } } var viewDistance by IntDelegate(this, 10, "", arrayOf(0..128))
/** /**
* Limits the number of particles. * Limits the number of particles.
@ -61,9 +63,8 @@ class ParticleProfile(
* Must not be negative or exceed $RenderConstants.MAXIMUM_PARTICLE_AMOUNT * Must not be negative or exceed $RenderConstants.MAXIMUM_PARTICLE_AMOUNT
* @see RenderConstants.MAXIMUM_PARTICLE_AMOUNT * @see RenderConstants.MAXIMUM_PARTICLE_AMOUNT
*/ */
var maxAmount by delegate(RenderConstants.MAXIMUM_PARTICLE_AMOUNT) { check(it in 0..RenderConstants.MAXIMUM_PARTICLE_AMOUNT) { "Particle amount must be non-negative and may not exceed ${RenderConstants.MAXIMUM_PARTICLE_AMOUNT}" } } var maxAmount by IntDelegate(this, RenderConstants.MAXIMUM_PARTICLE_AMOUNT, "", arrayOf(0..RenderConstants.MAXIMUM_PARTICLE_AMOUNT))
val types = TypesC(this)
val types = TypesC()
override fun toString(): String { override fun toString(): String {
return ParticleProfileManager.getName(this) return ParticleProfileManager.getName(this)

View File

@ -13,16 +13,17 @@
package de.bixilon.minosoft.config.profile.profiles.particle.types package de.bixilon.minosoft.config.profile.profiles.particle.types
import de.bixilon.minosoft.config.profile.profiles.particle.ParticleProfileManager.delegate import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
import de.bixilon.minosoft.config.profile.profiles.particle.ParticleProfile
class TypesC { class TypesC(profile: ParticleProfile) {
/** /**
* Shows particles from explosions * Shows particles from explosions
*/ */
var explosions by delegate(true) var explosions by BooleanDelegate(profile, true)
/** /**
* Shows custom particles * Shows custom particles
*/ */
var packet by delegate(true) var packet by BooleanDelegate(profile, true)
} }

View File

@ -15,8 +15,8 @@ package de.bixilon.minosoft.config.profile.profiles.rendering
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.config.profile.ProfileManager
import de.bixilon.minosoft.config.profile.delegate.types.StringDelegate
import de.bixilon.minosoft.config.profile.profiles.Profile import de.bixilon.minosoft.config.profile.profiles.Profile
import de.bixilon.minosoft.config.profile.profiles.rendering.RenderingProfileManager.delegate
import de.bixilon.minosoft.config.profile.profiles.rendering.RenderingProfileManager.latestVersion import de.bixilon.minosoft.config.profile.profiles.rendering.RenderingProfileManager.latestVersion
import de.bixilon.minosoft.config.profile.profiles.rendering.advanced.AdvancedC import de.bixilon.minosoft.config.profile.profiles.rendering.advanced.AdvancedC
import de.bixilon.minosoft.config.profile.profiles.rendering.animations.AnimationsC import de.bixilon.minosoft.config.profile.profiles.rendering.animations.AnimationsC
@ -43,7 +43,7 @@ class RenderingProfile(
override var saved: Boolean = true override var saved: Boolean = true
override var ignoreNextReload: Boolean = false override var ignoreNextReload: Boolean = false
override val version: Int = latestVersion override val version: Int = latestVersion
override var description by delegate(description ?: "") override var description by StringDelegate(this, description ?: "")
val advanced = AdvancedC(this) val advanced = AdvancedC(this)
val animations = AnimationsC(this) val animations = AnimationsC(this)