mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-13 01:16:46 -04:00
entity flags: fix class cast exception
Flags are mostly in the protocol a byte, but we will just work with ints. Fine. But observers are registered on ints, but the actual type is a byte, hence it crashes.
This commit is contained in:
parent
6d0db5fae8
commit
fa9981204b
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Minosoft
|
||||
* Copyright (C) 2020-2022 Moritz Zwerger
|
||||
* Copyright (C) 2020-2024 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.
|
||||
*
|
||||
@ -13,4 +13,7 @@
|
||||
|
||||
package de.bixilon.minosoft.data.entities.data
|
||||
|
||||
class EntityDataField(vararg val names: String)
|
||||
class EntityDataField(vararg val names: String) {
|
||||
|
||||
override fun toString() = names.contentToString()
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ import de.bixilon.kutil.bit.BitByte.isBitMask
|
||||
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
||||
import de.bixilon.kutil.cast.CastUtil.unsafeNull
|
||||
import de.bixilon.kutil.primitive.BooleanUtil.toBoolean
|
||||
import de.bixilon.kutil.primitive.IntUtil.toInt
|
||||
import de.bixilon.kutil.reflection.ReflectionUtil.field
|
||||
import de.bixilon.kutil.reflection.ReflectionUtil.getFieldOrNull
|
||||
import de.bixilon.kutil.time.TimeUtil.millis
|
||||
@ -52,7 +53,7 @@ abstract class Entity(
|
||||
private var initialPosition: Vec3d,
|
||||
private var initialRotation: EntityRotation,
|
||||
) : Initializable, EntityAttachable {
|
||||
private var flags: Int by data(FLAGS_DATA, 0x00)
|
||||
private var flags: Int by data(FLAGS_DATA, 0x00) { it.toInt() }
|
||||
protected val random = Random()
|
||||
val id: Int?
|
||||
get() = connection.world.entities.getId(this)
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Minosoft
|
||||
* Copyright (C) 2020-2023 Moritz Zwerger
|
||||
* Copyright (C) 2020-2024 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.
|
||||
*
|
||||
@ -17,6 +17,7 @@ import de.bixilon.kotlinglm.vec3.Vec3i
|
||||
import de.bixilon.kutil.bit.BitByte.isBitMask
|
||||
import de.bixilon.kutil.cast.CastUtil.nullCast
|
||||
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
||||
import de.bixilon.kutil.primitive.IntUtil.toInt
|
||||
import de.bixilon.minosoft.data.container.equipment.EntityEquipment
|
||||
import de.bixilon.minosoft.data.entities.EntityRotation
|
||||
import de.bixilon.minosoft.data.entities.Poses
|
||||
@ -50,7 +51,7 @@ abstract class LivingEntity(connection: PlayConnection, entityType: EntityType,
|
||||
override val canRaycast: Boolean get() = super.canRaycast && health > 0.0
|
||||
override val name: ChatComponent? get() = super.name
|
||||
|
||||
private var flags by data(FLAGS_DATA, 0x00)
|
||||
private var flags by data(FLAGS_DATA, 0x00) { it.toInt() }
|
||||
private fun getLivingEntityFlag(bitMask: Int): Boolean {
|
||||
return flags.isBitMask(bitMask)
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Minosoft
|
||||
* Copyright (C) 2020-2023 Moritz Zwerger
|
||||
* Copyright (C) 2020-2024 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.
|
||||
*
|
||||
@ -14,6 +14,7 @@ package de.bixilon.minosoft.data.entities.entities
|
||||
|
||||
import de.bixilon.kotlinglm.vec3.Vec3d
|
||||
import de.bixilon.kutil.bit.BitByte.isBitMask
|
||||
import de.bixilon.kutil.primitive.IntUtil.toInt
|
||||
import de.bixilon.minosoft.data.entities.EntityRotation
|
||||
import de.bixilon.minosoft.data.entities.data.EntityData
|
||||
import de.bixilon.minosoft.data.entities.data.EntityDataField
|
||||
@ -21,7 +22,7 @@ import de.bixilon.minosoft.data.registries.entities.EntityType
|
||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||
|
||||
abstract class Mob(connection: PlayConnection, entityType: EntityType, data: EntityData, position: Vec3d, rotation: EntityRotation) : LivingEntity(connection, entityType, data, position, rotation) {
|
||||
private var flags by data(FLAGS_DATA, 0x00)
|
||||
private var flags by data(FLAGS_DATA, 0x00) { it.toInt() }
|
||||
|
||||
private fun getMobFlags(bitMask: Int): Boolean {
|
||||
return flags.isBitMask(bitMask)
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Minosoft
|
||||
* Copyright (C) 2020-2023 Moritz Zwerger
|
||||
* Copyright (C) 2020-2024 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.
|
||||
*
|
||||
@ -17,6 +17,7 @@ import de.bixilon.kotlinglm.vec3.Vec3
|
||||
import de.bixilon.kotlinglm.vec3.Vec3d
|
||||
import de.bixilon.kutil.bit.BitByte.isBitMask
|
||||
import de.bixilon.kutil.observer.DataObserver.Companion.observe
|
||||
import de.bixilon.kutil.primitive.IntUtil.toInt
|
||||
import de.bixilon.minosoft.data.entities.EntityRotation
|
||||
import de.bixilon.minosoft.data.entities.data.EntityData
|
||||
import de.bixilon.minosoft.data.entities.data.EntityDataField
|
||||
@ -31,7 +32,7 @@ import de.bixilon.minosoft.data.text.formatting.color.RGBColor
|
||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||
|
||||
class ArmorStand(connection: PlayConnection, entityType: EntityType, data: EntityData, position: Vec3d, rotation: EntityRotation) : LivingEntity(connection, entityType, data, position, rotation) {
|
||||
private var flags by data(FLAGS_DATA, 0x00)
|
||||
private var flags: Int by data(FLAGS_DATA, 0x00) { it.toInt() }
|
||||
|
||||
private fun updateFlags() {
|
||||
this.dimensions = when {
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Minosoft
|
||||
* Copyright (C) 2020-2023 Moritz Zwerger
|
||||
* Copyright (C) 2020-2024 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.
|
||||
*
|
||||
@ -110,7 +110,7 @@ abstract class PlayerEntity(
|
||||
data.observe(SKIN_PARTS_DATA) { raw: Any? -> updateSkinParts(raw?.toInt() ?: 0xFF) }
|
||||
}
|
||||
|
||||
private var _mainArm by data(MAIN_ARM_DATA, 0x01)
|
||||
private var _mainArm by data(MAIN_ARM_DATA, 0x01) { it.toInt() }
|
||||
|
||||
@get:SynchronizedEntityData
|
||||
open val mainArm: Arms
|
||||
|
Loading…
x
Reference in New Issue
Block a user