bump kutil

kutil 1.24.1 actually speeds up reflection a lot. Those improvements make joining servers in minosoft a lot faster. It also contains a bunch of other improvements.
This commit is contained in:
Moritz Zwerger 2023-11-11 21:42:09 +01:00
parent fd5c3f5aa9
commit bfd1ed44f7
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
40 changed files with 81 additions and 390 deletions

View File

@ -17,5 +17,5 @@ lwjgl.version=3.3.3
ikonli.version=12.3.1 ikonli.version=12.3.1
netty.version=4.1.100.Final netty.version=4.1.100.Final
jackson.version=2.15.3 jackson.version=2.15.3
kutil.version=1.24.0 kutil.version=1.24.2
glm.version=0.9.9.1-12 glm.version=0.9.9.1-12

View File

@ -40,7 +40,6 @@ import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.protocol.versions.Versions import de.bixilon.minosoft.protocol.versions.Versions
import org.objenesis.ObjenesisStd import org.objenesis.ObjenesisStd
import org.testng.annotations.Test import org.testng.annotations.Test
import kotlin.reflect.jvm.javaField
const val SECTIONS = 16 const val SECTIONS = 16
@ -50,7 +49,7 @@ object LightTestingUtil {
fun createConnection(): PlayConnection { fun createConnection(): PlayConnection {
val connection = ObjenesisStd().newInstance(PlayConnection::class.java) val connection = ObjenesisStd().newInstance(PlayConnection::class.java)
Connection::events.javaField!!.forceSet(connection, EventMaster()) Connection::events.jvmField.forceSet(connection, EventMaster())
return connection return connection
} }

View File

@ -19,6 +19,7 @@ import de.bixilon.kutil.primitive.DoubleUtil.matches
import de.bixilon.kutil.primitive.FloatUtil import de.bixilon.kutil.primitive.FloatUtil
import de.bixilon.kutil.primitive.FloatUtil.matches import de.bixilon.kutil.primitive.FloatUtil.matches
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.minosoft.camera.ConnectionCamera import de.bixilon.minosoft.camera.ConnectionCamera
import de.bixilon.minosoft.data.entities.StatusEffectInstance import de.bixilon.minosoft.data.entities.StatusEffectInstance
import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.entities.entities.Entity
@ -36,15 +37,14 @@ import de.bixilon.minosoft.util.KUtil.matches
import de.bixilon.minosoft.util.KUtil.startInit import de.bixilon.minosoft.util.KUtil.startInit
import org.testng.Assert import org.testng.Assert
import java.util.* import java.util.*
import kotlin.reflect.jvm.javaField
object PhysicsTestUtil { object PhysicsTestUtil {
const val MATCH_EXACTLY = true const val MATCH_EXACTLY = true
val VALUE_MARGIN = if (MATCH_EXACTLY) 0.0 else DoubleUtil.DEFAULT_MARGIN val VALUE_MARGIN = if (MATCH_EXACTLY) 0.0 else DoubleUtil.DEFAULT_MARGIN
private val PLAYER_ATTRIBUTES = LocalPlayerEntity::attributes.javaField!! private val PLAYER_ATTRIBUTES = LocalPlayerEntity::attributes.jvmField
private val CONNECTION_PLAYER = PlayConnection::player.javaField!! private val CONNECTION_PLAYER = PlayConnection::player.jvmField
private val CONNECTION_CAMERA = PlayConnection::camera.javaField!! private val CONNECTION_CAMERA = PlayConnection::camera.jvmField
fun createPlayer(connection: PlayConnection = createConnection(light = false)): LocalPlayerEntity { fun createPlayer(connection: PlayConnection = createConnection(light = false)): LocalPlayerEntity {

View File

@ -17,6 +17,7 @@ import de.bixilon.kotlinglm.vec2.Vec2i
import de.bixilon.kutil.concurrent.lock.thread.ThreadLock import de.bixilon.kutil.concurrent.lock.thread.ThreadLock
import de.bixilon.kutil.observer.DataObserver import de.bixilon.kutil.observer.DataObserver
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.minosoft.data.registries.blocks.state.BlockState import de.bixilon.minosoft.data.registries.blocks.state.BlockState
import de.bixilon.minosoft.data.registries.dimension.DimensionProperties import de.bixilon.minosoft.data.registries.dimension.DimensionProperties
import de.bixilon.minosoft.data.world.World import de.bixilon.minosoft.data.world.World
@ -29,7 +30,6 @@ import de.bixilon.minosoft.modding.event.master.EventMaster
import de.bixilon.minosoft.protocol.network.connection.Connection import de.bixilon.minosoft.protocol.network.connection.Connection
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import org.objenesis.ObjenesisStd import org.objenesis.ObjenesisStd
import kotlin.reflect.jvm.javaField
const val SECTIONS = 16 const val SECTIONS = 16
@ -39,7 +39,7 @@ object LightTestingUtil {
fun createConnection(): PlayConnection { fun createConnection(): PlayConnection {
val connection = ObjenesisStd().newInstance(PlayConnection::class.java) val connection = ObjenesisStd().newInstance(PlayConnection::class.java)
Connection::events.javaField!!.forceSet(connection, EventMaster()) Connection::events.jvmField.forceSet(connection, EventMaster())
return connection return connection
} }

View File

@ -27,7 +27,6 @@ import de.bixilon.minosoft.gui.rendering.input.key.manager.binding.actions.keysP
import de.bixilon.minosoft.gui.rendering.system.window.KeyChangeTypes import de.bixilon.minosoft.gui.rendering.system.window.KeyChangeTypes
import de.bixilon.minosoft.gui.rendering.system.window.dummy.DummyWindow import de.bixilon.minosoft.gui.rendering.system.window.dummy.DummyWindow
import de.bixilon.minosoft.test.IT import de.bixilon.minosoft.test.IT
import de.bixilon.minosoft.util.KUtil.set
import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap
object InputTestUtil { object InputTestUtil {

View File

@ -25,7 +25,6 @@ import de.bixilon.minosoft.gui.rendering.input.key.manager.binding.BindingsManag
import de.bixilon.minosoft.gui.rendering.input.key.manager.binding.KeyBindingFilterState import de.bixilon.minosoft.gui.rendering.input.key.manager.binding.KeyBindingFilterState
import de.bixilon.minosoft.gui.rendering.input.key.manager.binding.KeyBindingState import de.bixilon.minosoft.gui.rendering.input.key.manager.binding.KeyBindingState
import de.bixilon.minosoft.test.IT.OBJENESIS import de.bixilon.minosoft.test.IT.OBJENESIS
import de.bixilon.minosoft.util.KUtil.set
import it.unimi.dsi.fastutil.objects.Object2LongMap import it.unimi.dsi.fastutil.objects.Object2LongMap
import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap
import org.testng.Assert.assertFalse import org.testng.Assert.assertFalse

View File

@ -13,6 +13,7 @@
package de.bixilon.minosoft.gui.rendering.models.baked package de.bixilon.minosoft.gui.rendering.models.baked
import de.bixilon.kutil.collections.primitive.floats.HeapArrayFloatList
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
import de.bixilon.minosoft.gui.rendering.chunk.mesh.ChunkMesh import de.bixilon.minosoft.gui.rendering.chunk.mesh.ChunkMesh
import de.bixilon.minosoft.gui.rendering.chunk.mesh.ChunkMeshes import de.bixilon.minosoft.gui.rendering.chunk.mesh.ChunkMeshes
@ -24,7 +25,6 @@ import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.Texture
import de.bixilon.minosoft.gui.rendering.util.mesh.MeshOrder import de.bixilon.minosoft.gui.rendering.util.mesh.MeshOrder
import de.bixilon.minosoft.test.IT.OBJENESIS import de.bixilon.minosoft.test.IT.OBJENESIS
import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.KUtil.toResourceLocation
import de.bixilon.minosoft.util.collections.floats.FragmentedArrayFloatList
import org.testng.Assert.assertEquals import org.testng.Assert.assertEquals
import org.testng.annotations.Test import org.testng.annotations.Test
@ -42,7 +42,7 @@ class BakedFaceTest {
mesh::quadType.forceSet(PrimitiveTypes.QUAD) mesh::quadType.forceSet(PrimitiveTypes.QUAD)
mesh::order.forceSet(MeshOrder.QUAD) mesh::order.forceSet(MeshOrder.QUAD)
mesh.data = FragmentedArrayFloatList(1000) // TODO: kutil 1.24 mesh.data = HeapArrayFloatList(1000)
mesh::initialCacheSize.forceSet(1000) mesh::initialCacheSize.forceSet(1000)

View File

@ -16,6 +16,7 @@ package de.bixilon.minosoft.protocol.network.connection.play
import de.bixilon.kotlinglm.pow import de.bixilon.kotlinglm.pow
import de.bixilon.kutil.observer.DataObserver import de.bixilon.kutil.observer.DataObserver
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.minosoft.assets.connection.ConnectionAssetsManager import de.bixilon.minosoft.assets.connection.ConnectionAssetsManager
import de.bixilon.minosoft.assets.minecraft.MinecraftPackFormat.packFormat import de.bixilon.minosoft.assets.minecraft.MinecraftPackFormat.packFormat
import de.bixilon.minosoft.assets.properties.manager.AssetsManagerProperties import de.bixilon.minosoft.assets.properties.manager.AssetsManagerProperties
@ -40,7 +41,6 @@ import de.bixilon.minosoft.test.IT.reference
import de.bixilon.minosoft.test.ITUtil import de.bixilon.minosoft.test.ITUtil
import de.bixilon.minosoft.util.KUtil.startInit import de.bixilon.minosoft.util.KUtil.startInit
import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicInteger
import kotlin.reflect.jvm.javaField
object ConnectionTestUtil { object ConnectionTestUtil {
@ -50,21 +50,21 @@ object ConnectionTestUtil {
reference() reference()
} }
private val LANGUAGE = PlayConnection::language.javaField!! private val LANGUAGE = PlayConnection::language.jvmField
private val SEQUENCE = PlayConnection::sequence.javaField!! private val SEQUENCE = PlayConnection::sequence.jvmField
private val ACCOUNT = PlayConnection::account.javaField!! private val ACCOUNT = PlayConnection::account.jvmField
private val VERSION = PlayConnection::version.javaField!! private val VERSION = PlayConnection::version.jvmField
private val REGISTRIES = PlayConnection::registries.javaField!! private val REGISTRIES = PlayConnection::registries.jvmField
private val WORLD = PlayConnection::world.javaField!! private val WORLD = PlayConnection::world.jvmField
private val PLAYER = PlayConnection::player.javaField!! private val PLAYER = PlayConnection::player.jvmField
private val NETWORK = PlayConnection::network.javaField!! private val NETWORK = PlayConnection::network.jvmField
private val EVENTS = PlayConnection::events.javaField!! private val EVENTS = PlayConnection::events.jvmField
private val PROFILES = PlayConnection::profiles.javaField!! private val PROFILES = PlayConnection::profiles.jvmField
private val ASSETS_MANAGER = PlayConnection::assetsManager.javaField!! private val ASSETS_MANAGER = PlayConnection::assetsManager.jvmField
private val STATE = PlayConnection::state.javaField!! private val STATE = PlayConnection::state.jvmField
private val TAGS = PlayConnection::tags.javaField!! private val TAGS = PlayConnection::tags.jvmField
private val LEGACY_TAGS = PlayConnection::legacyTags.javaField!! private val LEGACY_TAGS = PlayConnection::legacyTags.jvmField
private val CAMERA = PlayConnection::camera.javaField!! private val CAMERA = PlayConnection::camera.jvmField
private val language = LanguageList(mutableListOf()) private val language = LanguageList(mutableListOf())
private val signature = OBJENESIS.newInstance(SignatureKeyManagement::class.java) private val signature = OBJENESIS.newInstance(SignatureKeyManagement::class.java)

View File

@ -17,11 +17,11 @@ import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.kutil.observer.DataObserver import de.bixilon.kutil.observer.DataObserver
import de.bixilon.kutil.observer.DataObserver.Companion.observed import de.bixilon.kutil.observer.DataObserver.Companion.observed
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.minosoft.camera.target.TargetHandler import de.bixilon.minosoft.camera.target.TargetHandler
import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.entities.entities.Entity
import de.bixilon.minosoft.input.interaction.InteractionManager import de.bixilon.minosoft.input.interaction.InteractionManager
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import kotlin.reflect.jvm.javaField
class ConnectionCamera( class ConnectionCamera(
val connection: PlayConnection, val connection: PlayConnection,
@ -32,12 +32,12 @@ class ConnectionCamera(
fun init() { fun init() {
entity = connection.player entity = connection.player
Companion.interactions[this] = InteractionManager(this) INTERACTIONS[this] = InteractionManager(this)
interactions.init() interactions.init()
} }
companion object { companion object {
private val interactions = ConnectionCamera::interactions.javaField!!.apply { isAccessible = true } private val INTERACTIONS = ConnectionCamera::interactions.jvmField
} }
} }

View File

@ -23,7 +23,7 @@ interface AbstractDelegate<T> : TextFormattable {
val description: ResourceLocation val description: ResourceLocation
fun get(): T fun get(): T
fun set(value: T) fun set(value: T): T
fun validate(value: T) = Unit fun validate(value: T) = Unit

View File

@ -27,10 +27,9 @@ open class SimpleDelegate<T>(
override val name = minosoft(name) override val name = minosoft(name)
override val description = minosoft("$name.description") override val description = minosoft("$name.description")
override fun get() = value override fun set(value: T): T {
override fun set(value: T) {
validate(value) validate(value)
this.value = value return super.set(value)
} }
override fun setValue(thisRef: Any, property: KProperty<*>, value: T) { override fun setValue(thisRef: Any, property: KProperty<*>, value: T) {

View File

@ -32,9 +32,11 @@ class ListDelegate<V>(
} }
override fun get() = value override fun get() = value
override fun set(value: MutableList<V>) { override fun set(value: MutableList<V>): MutableList<V> {
validate(value) validate(value)
val previous = this.value.unsafe
this.value.unsafe = value this.value.unsafe = value
return previous
} }
override fun setValue(thisRef: Any, property: KProperty<*>, value: MutableList<V>) { override fun setValue(thisRef: Any, property: KProperty<*>, value: MutableList<V>) {

View File

@ -32,9 +32,11 @@ open class MapDelegate<K, V>(
} }
override fun get() = value override fun get() = value
override fun set(value: MutableMap<K, V>) { override fun set(value: MutableMap<K, V>): MutableMap<K, V> {
validate(value) validate(value)
val previous = this.value.unsafe
this.value.unsafe = value this.value.unsafe = value
return previous
} }
override fun setValue(thisRef: Any, property: KProperty<*>, value: MutableMap<K, V>) { override fun setValue(thisRef: Any, property: KProperty<*>, value: MutableMap<K, V>) {

View File

@ -32,9 +32,11 @@ class SetDelegate<V>(
} }
override fun get() = value override fun get() = value
override fun set(value: MutableSet<V>) { override fun set(value: MutableSet<V>): MutableSet<V> {
validate(value) validate(value)
val previous = this.value.unsafe
this.value.unsafe = value this.value.unsafe = value
return previous
} }
override fun setValue(thisRef: Any, property: KProperty<*>, value: MutableSet<V>) { override fun setValue(thisRef: Any, property: KProperty<*>, value: MutableSet<V>) {

View File

@ -20,12 +20,12 @@ import de.bixilon.kutil.cast.CastUtil.unsafeNull
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.kutil.reflection.ReflectionUtil.forceSet import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.minosoft.data.Axes import de.bixilon.minosoft.data.Axes
import de.bixilon.minosoft.data.registries.blocks.state.BlockState import de.bixilon.minosoft.data.registries.blocks.state.BlockState
import de.bixilon.minosoft.data.world.chunk.ChunkSection import de.bixilon.minosoft.data.world.chunk.ChunkSection
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.get import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.get
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import kotlin.reflect.jvm.javaField
enum class Directions( enum class Directions(
val vector: Vec3i, val vector: Vec3i,
@ -156,8 +156,8 @@ enum class Directions(
} }
init { init {
val inverted = Directions::inverted.javaField!! val inverted = Directions::inverted.jvmField
val axis = Directions::axis.javaField!! val axis = Directions::axis.jvmField
for (direction in VALUES) { for (direction in VALUES) {
inverted.forceSet(direction, direction.invert()) inverted.forceSet(direction, direction.invert())
axis.forceSet(direction, Axes[direction]) axis.forceSet(direction, Axes[direction])

View File

@ -14,8 +14,6 @@
package de.bixilon.minosoft.data.entities.data package de.bixilon.minosoft.data.entities.data
import de.bixilon.kutil.observer.DataObserver import de.bixilon.kutil.observer.DataObserver
import de.bixilon.kutil.observer.ObserveUtil.invalid
import de.bixilon.kutil.observer.RemoveObserver
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
class EntityDataDelegate<V>( class EntityDataDelegate<V>(
@ -28,14 +26,6 @@ class EntityDataDelegate<V>(
data.observe<V>(field) { set(it ?: default) } data.observe<V>(field) { set(it ?: default) }
} }
@Deprecated("kutil 1.25")
private fun set(value: V) {
if (this.value == value) return
lock.lock()
unsafeSet(value)
lock.unlock()
}
override fun setValue(thisRef: Any, property: KProperty<*>, value: V) { override fun setValue(thisRef: Any, property: KProperty<*>, value: V) {
this.value = value this.value = value
data[field] = value data[field] = value
@ -43,24 +33,4 @@ class EntityDataDelegate<V>(
unsafeSet(value) unsafeSet(value)
lock.unlock() lock.unlock()
} }
private fun unsafeSet(value: V) {
this.value = value
val iterator = observers.iterator()
for ((reference, _, observer) in iterator) {
if (reference.invalid) {
iterator.remove()
continue
}
try {
observer.invoke(value)
} catch (_: RemoveObserver) {
iterator.remove()
continue
} catch (exception: Throwable) {
exception.printStackTrace()
}
}
}
} }

View File

@ -19,6 +19,7 @@ import de.bixilon.kutil.bit.BitByte.isBitMask
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.kutil.time.TimeUtil.millis import de.bixilon.kutil.time.TimeUtil.millis
import de.bixilon.minosoft.data.abilities.Gamemodes import de.bixilon.minosoft.data.abilities.Gamemodes
import de.bixilon.minosoft.data.entities.EntityAnimations import de.bixilon.minosoft.data.entities.EntityAnimations
@ -42,7 +43,6 @@ import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.terminal.RunConfiguration import de.bixilon.minosoft.terminal.RunConfiguration
import de.bixilon.minosoft.util.Initializable import de.bixilon.minosoft.util.Initializable
import java.util.* import java.util.*
import kotlin.reflect.jvm.javaField
abstract class Entity( abstract class Entity(
val connection: PlayConnection, val connection: PlayConnection,
@ -260,8 +260,8 @@ abstract class Entity(
companion object { companion object {
private val RENDER_INFO = Entity::renderInfo.javaField!!.apply { isAccessible = true } private val RENDER_INFO = Entity::renderInfo.jvmField
private val DEFAULT_AABB = Entity::defaultAABB.javaField!!.apply { isAccessible = true } private val DEFAULT_AABB = Entity::defaultAABB.jvmField
private val PHYSICS = Entity::class.java.getDeclaredField("physics").apply { isAccessible = true } private val PHYSICS = Entity::class.java.getDeclaredField("physics").apply { isAccessible = true }
val FLAGS_DATA = EntityDataField("ENTITY_FLAGS") val FLAGS_DATA = EntityDataField("ENTITY_FLAGS")

View File

@ -13,6 +13,7 @@
package de.bixilon.minosoft.data.registries.blocks.types package de.bixilon.minosoft.data.registries.blocks.types
import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.minosoft.data.language.LanguageUtil.translation import de.bixilon.minosoft.data.language.LanguageUtil.translation
import de.bixilon.minosoft.data.language.translate.Translatable import de.bixilon.minosoft.data.language.translate.Translatable
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
@ -30,7 +31,6 @@ import de.bixilon.minosoft.data.registries.blocks.types.properties.physics.Pushi
import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.data.registries.identified.ResourceLocation
import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem
import de.bixilon.minosoft.gui.rendering.models.block.state.render.BlockRender import de.bixilon.minosoft.gui.rendering.models.block.state.render.BlockRender
import kotlin.reflect.jvm.javaField
abstract class Block( abstract class Block(
override val identifier: ResourceLocation, override val identifier: ResourceLocation,
@ -58,6 +58,6 @@ abstract class Block(
} }
private companion object { private companion object {
val STATES = Block::states.javaField!!.apply { isAccessible = true } val STATES = Block::states.jvmField
} }
} }

View File

@ -21,6 +21,7 @@ import de.bixilon.kutil.json.JsonUtil.asJsonObject
import de.bixilon.kutil.primitive.BooleanUtil.toBoolean import de.bixilon.kutil.primitive.BooleanUtil.toBoolean
import de.bixilon.kutil.primitive.FloatUtil.toFloat import de.bixilon.kutil.primitive.FloatUtil.toFloat
import de.bixilon.kutil.primitive.IntUtil.toInt import de.bixilon.kutil.primitive.IntUtil.toInt
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.minosoft.data.registries.blocks.factory.PixLyzerBlockFactories import de.bixilon.minosoft.data.registries.blocks.factory.PixLyzerBlockFactories
import de.bixilon.minosoft.data.registries.blocks.factory.PixLyzerBlockFactory import de.bixilon.minosoft.data.registries.blocks.factory.PixLyzerBlockFactory
import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings
@ -55,7 +56,6 @@ import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.protocol.versions.Version import de.bixilon.minosoft.protocol.versions.Version
import de.bixilon.minosoft.protocol.versions.Versions import de.bixilon.minosoft.protocol.versions.Versions
import kotlin.reflect.jvm.javaField
open class PixLyzerBlock( open class PixLyzerBlock(
identifier: ResourceLocation, identifier: ResourceLocation,
@ -119,7 +119,7 @@ open class PixLyzerBlock(
companion object : ResourceLocationCodec<Block>, PixLyzerBlockFactory<Block>, MultiClassFactory<Block> { companion object : ResourceLocationCodec<Block>, PixLyzerBlockFactory<Block>, MultiClassFactory<Block> {
private val NULL_OFFSET_XYZ = Vec3i(0, 0, 0).getWorldOffset(RandomOffsetTypes.XYZ) private val NULL_OFFSET_XYZ = Vec3i(0, 0, 0).getWorldOffset(RandomOffsetTypes.XYZ)
private val NULL_OFFSET_XZ = Vec3i(0, 0, 0).getWorldOffset(RandomOffsetTypes.XZ) private val NULL_OFFSET_XZ = Vec3i(0, 0, 0).getWorldOffset(RandomOffsetTypes.XZ)
private val ITEM_FIELD = PixLyzerBlock::item.javaField!! private val ITEM_FIELD = PixLyzerBlock::item.jvmField
override val ALIASES: Set<String> = setOf("Block") override val ALIASES: Set<String> = setOf("Block")
override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map<String, Any>): Block { override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map<String, Any>): Block {

View File

@ -14,6 +14,7 @@
package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity
import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.minosoft.data.entities.block.BlockEntity import de.bixilon.minosoft.data.entities.block.BlockEntity
import de.bixilon.minosoft.data.registries.blocks.entites.BlockEntityType import de.bixilon.minosoft.data.registries.blocks.entites.BlockEntityType
import de.bixilon.minosoft.data.registries.blocks.types.entity.BlockWithEntity import de.bixilon.minosoft.data.registries.blocks.types.entity.BlockWithEntity
@ -22,7 +23,6 @@ import de.bixilon.minosoft.data.registries.identified.ResourceLocation
import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import kotlin.reflect.jvm.javaField
abstract class PixLyzerBlockWithEntity<T : BlockEntity>(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : PixLyzerBlock(resourceLocation, registries, data), BlockWithEntity<BlockEntity> { abstract class PixLyzerBlockWithEntity<T : BlockEntity>(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : PixLyzerBlock(resourceLocation, registries, data), BlockWithEntity<BlockEntity> {
private val blockEntity: BlockEntityType<BlockEntity>? = unsafeNull() private val blockEntity: BlockEntityType<BlockEntity>? = unsafeNull()
@ -35,6 +35,6 @@ abstract class PixLyzerBlockWithEntity<T : BlockEntity>(resourceLocation: Resour
override fun createBlockEntity(connection: PlayConnection) = blockEntity?.factory?.build(connection) override fun createBlockEntity(connection: PlayConnection) = blockEntity?.factory?.build(connection)
private companion object { private companion object {
val FACTORY_FIELD = PixLyzerBlockWithEntity<*>::blockEntity.javaField!! val FACTORY_FIELD = PixLyzerBlockWithEntity<*>::blockEntity.jvmField
} }
} }

View File

@ -14,6 +14,7 @@
package de.bixilon.minosoft.data.registries.item.items.block package de.bixilon.minosoft.data.registries.item.items.block
import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.minosoft.camera.target.targets.BlockTarget import de.bixilon.minosoft.camera.target.targets.BlockTarget
import de.bixilon.minosoft.data.container.stack.ItemStack import de.bixilon.minosoft.data.container.stack.ItemStack
import de.bixilon.minosoft.data.registries.blocks.types.Block import de.bixilon.minosoft.data.registries.blocks.types.Block
@ -24,7 +25,6 @@ import de.bixilon.minosoft.data.registries.item.stack.StackableItem
import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem
import de.bixilon.minosoft.gui.rendering.models.item.ItemRender import de.bixilon.minosoft.gui.rendering.models.item.ItemRender
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import kotlin.reflect.jvm.javaField
abstract class BlockItem<T : Block>(identifier: ResourceLocation) : Item(identifier), StackableItem, PlaceableItem { abstract class BlockItem<T : Block>(identifier: ResourceLocation) : Item(identifier), StackableItem, PlaceableItem {
val block: T = unsafeNull() val block: T = unsafeNull()
@ -44,6 +44,6 @@ abstract class BlockItem<T : Block>(identifier: ResourceLocation) : Item(identif
private companion object { private companion object {
private val BLOCK_FIELD = BlockItem<*>::block.javaField!! private val BLOCK_FIELD = BlockItem<*>::block.jvmField
} }
} }

View File

@ -14,6 +14,7 @@
package de.bixilon.minosoft.data.registries.item.items.block.legacy package de.bixilon.minosoft.data.registries.item.items.block.legacy
import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.minosoft.camera.target.targets.BlockTarget import de.bixilon.minosoft.camera.target.targets.BlockTarget
import de.bixilon.minosoft.data.container.stack.ItemStack import de.bixilon.minosoft.data.container.stack.ItemStack
import de.bixilon.minosoft.data.registries.blocks.state.BlockState import de.bixilon.minosoft.data.registries.blocks.state.BlockState
@ -27,7 +28,6 @@ import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem
import de.bixilon.minosoft.gui.rendering.models.item.ItemRender import de.bixilon.minosoft.gui.rendering.models.item.ItemRender
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import kotlin.reflect.jvm.javaField
open class PixLyzerBlockItem( open class PixLyzerBlockItem(
resourceLocation: ResourceLocation, resourceLocation: ResourceLocation,
@ -52,7 +52,7 @@ open class PixLyzerBlockItem(
companion object : PixLyzerItemFactory<PixLyzerBlockItem>, MultiClassFactory<PixLyzerBlockItem> { companion object : PixLyzerItemFactory<PixLyzerBlockItem>, MultiClassFactory<PixLyzerBlockItem> {
override val ALIASES = setOf("BlockItem", "AliasedBlockItem") override val ALIASES = setOf("BlockItem", "AliasedBlockItem")
private val BLOCK_FIELD = PixLyzerBlockItem::block.javaField!! private val BLOCK_FIELD = PixLyzerBlockItem::block.jvmField
override fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): PixLyzerBlockItem { override fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): PixLyzerBlockItem {
return PixLyzerBlockItem(resourceLocation, registries, data) return PixLyzerBlockItem(resourceLocation, registries, data)

View File

@ -15,19 +15,19 @@ package de.bixilon.minosoft.data.registries.registries.registry
import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.minosoft.data.registries.identified.Identified import de.bixilon.minosoft.data.registries.identified.Identified
import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.data.registries.identified.ResourceLocation
import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.data.registries.registries.Registries
import java.lang.reflect.Field import java.lang.reflect.Field
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
import kotlin.reflect.jvm.javaField
abstract class RegistryItem : Identified { abstract class RegistryItem : Identified {
open val injectable: Boolean get() = true open val injectable: Boolean get() = true
private val injects: MutableMap<Field, List<Any>> = if (injectable) hashMapOf() else unsafeNull() private val injects: MutableMap<Field, List<Any>> = if (injectable) hashMapOf() else unsafeNull()
fun <T : RegistryItem> KProperty<T?>.inject(vararg keys: Any?): T { fun <T : RegistryItem> KProperty<T?>.inject(vararg keys: Any?): T {
return this.javaField!!.inject(*keys) return this.jvmField.inject(*keys)
} }
fun <T : RegistryItem> Field.inject(vararg keys: Any?): T { fun <T : RegistryItem> Field.inject(vararg keys: Any?): T {
@ -79,6 +79,6 @@ abstract class RegistryItem : Identified {
} }
companion object { companion object {
private val INJECTS_FIELD = RegistryItem::injects.javaField!!.apply { isAccessible = true } private val INJECTS_FIELD = RegistryItem::injects.jvmField
} }
} }

View File

@ -23,7 +23,6 @@ import de.bixilon.minosoft.data.language.translate.Translator
import de.bixilon.minosoft.data.text.events.click.ClickEvents import de.bixilon.minosoft.data.text.events.click.ClickEvents
import de.bixilon.minosoft.data.text.events.hover.HoverEvents import de.bixilon.minosoft.data.text.events.hover.HoverEvents
import de.bixilon.minosoft.data.text.formatting.FormattingCodes import de.bixilon.minosoft.data.text.formatting.FormattingCodes
import de.bixilon.minosoft.data.text.formatting.TextFormatting
import de.bixilon.minosoft.data.text.formatting.color.ChatColors.toColor import de.bixilon.minosoft.data.text.formatting.color.ChatColors.toColor
import de.bixilon.minosoft.data.text.formatting.color.RGBColor import de.bixilon.minosoft.data.text.formatting.color.RGBColor
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
@ -49,7 +48,7 @@ class BaseComponent : ChatComponent {
constructor(translator: Translator? = null, parent: TextComponent? = null, json: Map<String, Any>, restricted: Boolean = false) { constructor(translator: Translator? = null, parent: TextComponent? = null, json: Map<String, Any>, restricted: Boolean = false) {
val color = json["color"]?.nullCast<String>()?.toColor() ?: parent?.color val color = json["color"]?.nullCast<String>()?.toColor() ?: parent?.color
val formatting = parent?.formatting?.copy() ?: TextFormatting() val formatting = parent?.formatting?.copy() ?: FormattingCodes.set()
json["bold"]?.toBoolean()?.let { formatting[FormattingCodes.BOLD] = it } json["bold"]?.toBoolean()?.let { formatting[FormattingCodes.BOLD] = it }
json["italic"]?.toBoolean()?.let { formatting[FormattingCodes.ITALIC] = it } json["italic"]?.toBoolean()?.let { formatting[FormattingCodes.ITALIC] = it }

View File

@ -13,12 +13,12 @@
package de.bixilon.minosoft.data.text package de.bixilon.minosoft.data.text
import de.bixilon.kutil.enums.BitEnumSet
import de.bixilon.kutil.url.URLUtil.toURL import de.bixilon.kutil.url.URLUtil.toURL
import de.bixilon.minosoft.data.text.events.click.ClickEvent import de.bixilon.minosoft.data.text.events.click.ClickEvent
import de.bixilon.minosoft.data.text.events.click.OpenFileClickEvent import de.bixilon.minosoft.data.text.events.click.OpenFileClickEvent
import de.bixilon.minosoft.data.text.events.click.OpenURLClickEvent import de.bixilon.minosoft.data.text.events.click.OpenURLClickEvent
import de.bixilon.minosoft.data.text.formatting.FormattingCodes import de.bixilon.minosoft.data.text.formatting.FormattingCodes
import de.bixilon.minosoft.data.text.formatting.TextFormatting
import de.bixilon.minosoft.data.text.formatting.color.ChatColors import de.bixilon.minosoft.data.text.formatting.color.ChatColors
import de.bixilon.minosoft.data.text.formatting.color.RGBColor import de.bixilon.minosoft.data.text.formatting.color.RGBColor
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
@ -81,7 +81,7 @@ object LegacyComponentReader {
fun parse(parent: TextComponent? = null, legacy: String = "", restricted: Boolean = false): ChatComponent { fun parse(parent: TextComponent? = null, legacy: String = "", restricted: Boolean = false): ChatComponent {
val parts: PartList = mutableListOf() val parts: PartList = mutableListOf()
val sequence = SequenceBuilder(color = parent?.color, formatting = parent?.formatting?.copy() ?: TextFormatting()) val sequence = SequenceBuilder(color = parent?.color, formatting = parent?.formatting?.copy() ?: FormattingCodes.set())
val iterator = StringCharacterIterator(legacy) val iterator = StringCharacterIterator(legacy)
@ -133,7 +133,7 @@ object LegacyComponentReader {
private data class SequenceBuilder( private data class SequenceBuilder(
var text: StringBuilder = StringBuilder(), var text: StringBuilder = StringBuilder(),
var color: RGBColor? = null, var color: RGBColor? = null,
var formatting: TextFormatting = TextFormatting(), var formatting: BitEnumSet<FormattingCodes> = FormattingCodes.set(),
) { ) {
fun reset() { fun reset() {

View File

@ -12,13 +12,13 @@
*/ */
package de.bixilon.minosoft.data.text package de.bixilon.minosoft.data.text
import de.bixilon.kutil.enums.BitEnumSet
import de.bixilon.kutil.json.MutableJsonObject import de.bixilon.kutil.json.MutableJsonObject
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager
import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.data.registries.identified.ResourceLocation
import de.bixilon.minosoft.data.text.events.click.ClickEvent import de.bixilon.minosoft.data.text.events.click.ClickEvent
import de.bixilon.minosoft.data.text.events.hover.HoverEvent import de.bixilon.minosoft.data.text.events.hover.HoverEvent
import de.bixilon.minosoft.data.text.formatting.FormattingCodes import de.bixilon.minosoft.data.text.formatting.FormattingCodes
import de.bixilon.minosoft.data.text.formatting.TextFormatting
import de.bixilon.minosoft.data.text.formatting.TextStyle import de.bixilon.minosoft.data.text.formatting.TextStyle
import de.bixilon.minosoft.data.text.formatting.color.ChatColors import de.bixilon.minosoft.data.text.formatting.color.ChatColors
import de.bixilon.minosoft.data.text.formatting.color.RGBColor import de.bixilon.minosoft.data.text.formatting.color.RGBColor
@ -37,7 +37,7 @@ import java.util.concurrent.atomic.AtomicInteger
open class TextComponent( open class TextComponent(
message: Any? = "", message: Any? = "",
override var color: RGBColor? = null, override var color: RGBColor? = null,
override val formatting: TextFormatting = TextFormatting(), override val formatting: BitEnumSet<FormattingCodes> = FormattingCodes.set(),
var font: ResourceLocation? = null, var font: ResourceLocation? = null,
var clickEvent: ClickEvent? = null, var clickEvent: ClickEvent? = null,
var hoverEvent: HoverEvent? = null, var hoverEvent: HoverEvent? = null,
@ -194,7 +194,7 @@ open class TextComponent(
return json return json
} }
fun copy(message: Any? = this.message, color: RGBColor? = this.color, formatting: TextFormatting = this.formatting, clickEvent: ClickEvent? = this.clickEvent, hoverEvent: HoverEvent? = this.hoverEvent): TextComponent { fun copy(message: Any? = this.message, color: RGBColor? = this.color, formatting: BitEnumSet<FormattingCodes> = this.formatting, clickEvent: ClickEvent? = this.clickEvent, hoverEvent: HoverEvent? = this.hoverEvent): TextComponent {
return TextComponent( return TextComponent(
message = message, message = message,
color = color, color = color,

View File

@ -1,84 +0,0 @@
/*
* Minosoft
* Copyright (C) 2020-2023 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.data.text.formatting
import de.bixilon.minosoft.util.set.IntBitSet
@Deprecated("BitEnumSet kutil 1.25")
class TextFormatting(
val bits: IntBitSet = IntBitSet(),
) : Iterable<FormattingCodes> {
operator fun minusAssign(code: FormattingCodes) {
this[code] = false
}
operator fun plusAssign(code: FormattingCodes) {
this[code] = true
}
operator fun set(code: FormattingCodes, value: Boolean) {
bits[code.ordinal] = value
}
fun clear() {
bits.clear()
}
operator fun contains(code: FormattingCodes): Boolean {
return bits[code.ordinal]
}
fun copy(): TextFormatting {
return TextFormatting(bits.clone())
}
fun collect(): Set<FormattingCodes> {
val set: MutableSet<FormattingCodes> = mutableSetOf()
for (code in FormattingCodes.VALUES) {
if (code !in this) continue
set += code
}
return set
}
override fun hashCode(): Int {
return bits.hashCode()
}
override fun equals(other: Any?): Boolean {
if (other !is TextFormatting) return false
return bits == other.bits
}
override fun iterator(): Iterator<FormattingCodes> {
return TextFormattingIterator()
}
private inner class TextFormattingIterator : Iterator<FormattingCodes> {
private val length = bits.length()
private var index = 0
override fun hasNext(): Boolean {
return length > index
// TODO: fairly broken!!! use kutil 1.25
}
override fun next(): FormattingCodes {
return FormattingCodes.VALUES[index++]
}
}
}

View File

@ -13,10 +13,11 @@
package de.bixilon.minosoft.data.text.formatting package de.bixilon.minosoft.data.text.formatting
import de.bixilon.kutil.enums.BitEnumSet
import de.bixilon.minosoft.data.text.formatting.color.RGBColor import de.bixilon.minosoft.data.text.formatting.color.RGBColor
interface TextStyle { interface TextStyle {
var color: RGBColor? var color: RGBColor?
val formatting: TextFormatting val formatting: BitEnumSet<FormattingCodes>
} }

View File

@ -16,6 +16,7 @@ import de.bixilon.kotlinglm.vec2.Vec2i
import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.kotlinglm.vec3.Vec3i
import de.bixilon.kutil.array.ArrayUtil.cast import de.bixilon.kutil.array.ArrayUtil.cast
import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.minosoft.data.entities.block.BlockEntity import de.bixilon.minosoft.data.entities.block.BlockEntity
import de.bixilon.minosoft.data.registries.biomes.Biome import de.bixilon.minosoft.data.registries.biomes.Biome
import de.bixilon.minosoft.data.world.biome.accessor.NoiseBiomeAccessor import de.bixilon.minosoft.data.world.biome.accessor.NoiseBiomeAccessor
@ -27,7 +28,6 @@ import de.bixilon.minosoft.gui.rendering.util.VecUtil.of
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 java.util.* import java.util.*
import kotlin.reflect.jvm.javaField
/** /**
* Collection of 16x16x16 blocks * Collection of 16x16x16 blocks
@ -96,7 +96,7 @@ class ChunkSection(
} }
companion object { companion object {
private val CHUNK = ChunkSection::chunk.javaField!!.apply { isAccessible = true } private val CHUNK = ChunkSection::chunk.jvmField
inline val Vec3i.index: Int inline val Vec3i.index: Int
get() = getIndex(x, y, z) get() = getIndex(x, y, z)

View File

@ -16,6 +16,7 @@ package de.bixilon.minosoft.data.world.chunk.chunk
import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.kotlinglm.vec3.Vec3i
import de.bixilon.kutil.json.JsonObject import de.bixilon.kutil.json.JsonObject
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.minosoft.config.StaticConfiguration import de.bixilon.minosoft.config.StaticConfiguration
import de.bixilon.minosoft.data.registries.blocks.types.entity.BlockWithEntity import de.bixilon.minosoft.data.registries.blocks.types.entity.BlockWithEntity
import de.bixilon.minosoft.data.world.biome.source.BiomeSource import de.bixilon.minosoft.data.world.biome.source.BiomeSource
@ -25,7 +26,6 @@ import de.bixilon.minosoft.data.world.positions.ChunkPosition
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 it.unimi.dsi.fastutil.ints.IntOpenHashSet import it.unimi.dsi.fastutil.ints.IntOpenHashSet
import kotlin.reflect.jvm.javaField
class ChunkPrototype( class ChunkPrototype(
var blocks: Array<BlockSectionDataProvider?>? = null, var blocks: Array<BlockSectionDataProvider?>? = null,
@ -157,6 +157,6 @@ class ChunkPrototype(
} }
private companion object { private companion object {
private val SECTION = BlockSectionDataProvider::section.javaField!!.apply { isAccessible = true } private val SECTION = BlockSectionDataProvider::section.jvmField
} }
} }

View File

@ -15,13 +15,13 @@ package de.bixilon.minosoft.data.world.container.block
import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.kutil.concurrent.lock.Lock import de.bixilon.kutil.concurrent.lock.Lock
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.minosoft.data.registries.blocks.state.BlockState import de.bixilon.minosoft.data.registries.blocks.state.BlockState
import de.bixilon.minosoft.data.registries.blocks.types.fluid.FluidHolder import de.bixilon.minosoft.data.registries.blocks.types.fluid.FluidHolder
import de.bixilon.minosoft.data.registries.fluid.fluids.WaterFluid.Companion.isWaterlogged import de.bixilon.minosoft.data.registries.fluid.fluids.WaterFluid.Companion.isWaterlogged
import de.bixilon.minosoft.data.world.chunk.ChunkSection import de.bixilon.minosoft.data.world.chunk.ChunkSection
import de.bixilon.minosoft.data.world.chunk.ChunkSection.Companion.getIndex import de.bixilon.minosoft.data.world.chunk.ChunkSection.Companion.getIndex
import de.bixilon.minosoft.data.world.container.SectionDataProvider import de.bixilon.minosoft.data.world.container.SectionDataProvider
import kotlin.reflect.jvm.javaField
class BlockSectionDataProvider( class BlockSectionDataProvider(
lock: Lock? = null, lock: Lock? = null,
@ -91,7 +91,7 @@ class BlockSectionDataProvider(
} }
companion object { companion object {
private val sections = BlockSectionDataProvider::section.javaField!!.apply { isAccessible = true } private val sections = BlockSectionDataProvider::section.jvmField
@Deprecated("properly integrate in constructor") @Deprecated("properly integrate in constructor")
fun BlockSectionDataProvider.unsafeSetSection(section: ChunkSection) { fun BlockSectionDataProvider.unsafeSetSection(section: ChunkSection) {

View File

@ -16,6 +16,7 @@ package de.bixilon.minosoft.gui.eros.util
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.concurrent.pool.DefaultThreadPool
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
import de.bixilon.kutil.reflection.ReflectionUtil.jvmField
import de.bixilon.kutil.url.URLUtil.toURL import de.bixilon.kutil.url.URLUtil.toURL
import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager
@ -47,7 +48,6 @@ import javafx.stage.Modality
import javafx.stage.Stage import javafx.stage.Stage
import javafx.stage.Window import javafx.stage.Window
import java.io.File import java.io.File
import kotlin.reflect.jvm.javaField
object JavaFXUtil { object JavaFXUtil {
private const val DEFAULT_STYLE = "resource:minosoft:eros/style.css" private const val DEFAULT_STYLE = "resource:minosoft:eros/style.css"
@ -135,7 +135,7 @@ object JavaFXUtil {
val controller = fxmlLoader.getController<T>() val controller = fxmlLoader.getController<T>()
controller::root.javaField!!.forceSet(controller, pane) controller::root.jvmField.forceSet(controller, pane)
controller.postInit() controller.postInit()
return controller return controller

View File

@ -14,8 +14,8 @@
package de.bixilon.minosoft.gui.rendering.font.renderer.code package de.bixilon.minosoft.gui.rendering.font.renderer.code
import de.bixilon.kotlinglm.vec2.Vec2 import de.bixilon.kotlinglm.vec2.Vec2
import de.bixilon.kutil.enums.BitEnumSet
import de.bixilon.minosoft.data.text.formatting.FormattingCodes import de.bixilon.minosoft.data.text.formatting.FormattingCodes
import de.bixilon.minosoft.data.text.formatting.TextFormatting
import de.bixilon.minosoft.data.text.formatting.color.RGBColor import de.bixilon.minosoft.data.text.formatting.color.RGBColor
import de.bixilon.minosoft.gui.rendering.font.renderer.CodePointAddResult import de.bixilon.minosoft.gui.rendering.font.renderer.CodePointAddResult
import de.bixilon.minosoft.gui.rendering.font.renderer.element.TextOffset import de.bixilon.minosoft.gui.rendering.font.renderer.element.TextOffset
@ -48,7 +48,7 @@ interface CodePointRenderer {
} }
fun render(offset: TextOffset, color: RGBColor, properties: TextRenderProperties, info: TextRenderInfo, formatting: TextFormatting, codePoint: Int, consumer: GUIVertexConsumer?, options: GUIVertexOptions?): CodePointAddResult { fun render(offset: TextOffset, color: RGBColor, properties: TextRenderProperties, info: TextRenderInfo, formatting: BitEnumSet<FormattingCodes>, codePoint: Int, consumer: GUIVertexConsumer?, options: GUIVertexOptions?): CodePointAddResult {
val width = calculateWidth(properties.scale, properties.shadow) val width = calculateWidth(properties.scale, properties.shadow)
var spacing = getVerticalSpacing(offset, properties, info, consumer != null) var spacing = getVerticalSpacing(offset, properties, info, consumer != null)
val height = offset.getNextLineHeight(properties) val height = offset.getNextLineHeight(properties)

View File

@ -15,6 +15,7 @@ package de.bixilon.minosoft.gui.rendering.input.key.manager
import de.bixilon.kotlinglm.vec2.Vec2 import de.bixilon.kotlinglm.vec2.Vec2
import de.bixilon.kotlinglm.vec2.Vec2d import de.bixilon.kotlinglm.vec2.Vec2d
import de.bixilon.kutil.enums.BitEnumSet
import de.bixilon.kutil.time.TimeUtil.millis import de.bixilon.kutil.time.TimeUtil.millis
import de.bixilon.minosoft.config.key.KeyCodes import de.bixilon.minosoft.config.key.KeyCodes
import de.bixilon.minosoft.gui.rendering.RenderContext import de.bixilon.minosoft.gui.rendering.RenderContext
@ -31,10 +32,8 @@ import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2dUtil.EMPTY
import de.bixilon.minosoft.modding.EventPriorities import de.bixilon.minosoft.modding.EventPriorities
import de.bixilon.minosoft.modding.event.listener.CallbackEventListener.Companion.listen import de.bixilon.minosoft.modding.event.listener.CallbackEventListener.Companion.listen
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.util.KUtil.set
import it.unimi.dsi.fastutil.objects.Object2LongMap import it.unimi.dsi.fastutil.objects.Object2LongMap
import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap
import java.util.*
class InputManager( class InputManager(
val context: RenderContext, val context: RenderContext,
@ -46,7 +45,7 @@ class InputManager(
val interaction = InteractionManagerKeys(this, connection.camera.interactions) val interaction = InteractionManagerKeys(this, connection.camera.interactions)
private val pressed: EnumSet<KeyCodes> = KeyCodes.set() private val pressed: BitEnumSet<KeyCodes> = KeyCodes.set()
private val times: Object2LongMap<KeyCodes> = Object2LongOpenHashMap<KeyCodes>().apply { defaultReturnValue(-1L) } private val times: Object2LongMap<KeyCodes> = Object2LongOpenHashMap<KeyCodes>().apply { defaultReturnValue(-1L) }
var mousePosition: Vec2d = Vec2d.EMPTY var mousePosition: Vec2d = Vec2d.EMPTY

View File

@ -51,7 +51,6 @@ import de.bixilon.minosoft.protocol.protocol.buffers.InByteBuffer
import de.bixilon.minosoft.protocol.protocol.encryption.CryptManager import de.bixilon.minosoft.protocol.protocol.encryption.CryptManager
import de.bixilon.minosoft.recipes.Ingredient import de.bixilon.minosoft.recipes.Ingredient
import de.bixilon.minosoft.util.KUtil import de.bixilon.minosoft.util.KUtil
import de.bixilon.minosoft.util.KUtil.set
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

View File

@ -1,68 +0,0 @@
/*
* Minosoft
* Copyright (C) 2020-2023 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.util
import de.bixilon.kutil.concurrent.lock.Lock
import de.bixilon.kutil.concurrent.lock.NobodyIsReadingException
import de.bixilon.kutil.concurrent.lock.NobodyIsWritingException
@Deprecated("kutil 1.25")
class DebugLock : Lock {
private val lock = Object()
override var readers = 0
private set
override var locked = false
private set
override fun acquire() {
synchronized(lock) {
while (locked) {
lock.wait()
}
readers++
// Exception("acquire").printStackTrace()
lock.notifyAll()
}
}
override fun release() {
synchronized(lock) {
if (readers <= 0) throw NobodyIsReadingException()
readers--
// Exception("release").printStackTrace()
lock.notifyAll()
}
}
override fun lock() {
synchronized(lock) {
while (locked || readers > 0) {
lock.wait()
}
locked = true
Exception("lock").printStackTrace()
lock.notifyAll()
}
}
override fun unlock() {
synchronized(lock) {
if (!locked) throw NobodyIsWritingException()
locked = false
Exception("unlock").printStackTrace()
lock.notifyAll()
}
}
}

View File

@ -1,25 +0,0 @@
/*
* Minosoft
* Copyright (C) 2020-2023 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.util
import java.util.*
@Deprecated("kutil 1.24")
object EnumSetUtil {
fun <T : Enum<T>> create(clazz: Class<T>, universe: Array<T>): EnumSet<T> {
return EnumSet.noneOf(clazz) // TODO: optimize and use universe
}
}

View File

@ -28,7 +28,6 @@ import de.bixilon.kutil.collections.CollectionUtil.synchronizedSetOf
import de.bixilon.kutil.collections.CollectionUtil.toSynchronizedSet import de.bixilon.kutil.collections.CollectionUtil.toSynchronizedSet
import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.concurrent.pool.DefaultThreadPool
import de.bixilon.kutil.concurrent.schedule.TaskScheduler import de.bixilon.kutil.concurrent.schedule.TaskScheduler
import de.bixilon.kutil.enums.ValuesEnum
import de.bixilon.kutil.primitive.BooleanUtil.decide import de.bixilon.kutil.primitive.BooleanUtil.decide
import de.bixilon.kutil.primitive.DoubleUtil import de.bixilon.kutil.primitive.DoubleUtil
import de.bixilon.kutil.primitive.DoubleUtil.matches import de.bixilon.kutil.primitive.DoubleUtil.matches
@ -337,12 +336,6 @@ object KUtil {
return table return table
} }
@Deprecated("kutil 1.24")
@JvmStatic
inline fun <reified T : Enum<T>> ValuesEnum<T>.set(): EnumSet<T> {
return EnumSetUtil.create(T::class.java, VALUES)
}
fun PlayInByteBuffer.dump(name: String) { fun PlayInByteBuffer.dump(name: String) {
val pointer = pointer val pointer = pointer
this.pointer = 0 this.pointer = 0

View File

@ -1,26 +0,0 @@
/*
* Minosoft
* Copyright (C) 2020-2023 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.util.set
@Deprecated("kutil 1.25")
interface AbstractBitSet : Cloneable {
operator fun get(index: Int): Boolean
operator fun set(index: Int, value: Boolean)
fun clear()
fun capacity(): Int
fun length(): Int
}

View File

@ -1,69 +0,0 @@
/*
* Minosoft
* Copyright (C) 2020-2023 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.util.set
@Deprecated("kutil 1.25")
class IntBitSet(private var data: Int = 0) : AbstractBitSet {
override operator fun get(index: Int): Boolean {
checkIndex(index)
val mask = 1 shl index
return (data and mask) != 0
}
override operator fun set(index: Int, value: Boolean) {
checkIndex(index)
val mask = 1 shl index
data = if (value) {
data or mask
} else {
data and mask.inv()
}
}
override fun clear() {
this.data = 0
}
override fun capacity() = Int.SIZE_BITS
override fun length(): Int {
var data = data
var bit = 0
while (data != 0) {
data = data ushr 1
bit++
}
return bit
}
public override fun clone(): IntBitSet {
return IntBitSet(data)
}
override fun hashCode(): Int {
return data
}
override fun equals(other: Any?): Boolean {
if (other !is IntBitSet) return false
return data == other.data
}
private inline fun checkIndex(index: Int) {
if (index < 0 || index >= Int.SIZE_BITS) throw IndexOutOfBoundsException("Index out of bounds $index")
}
}