use entity data delegate more

This commit is contained in:
Moritz Zwerger 2023-11-16 10:33:38 +01:00
parent 8e845e5212
commit e525d4c88a
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
8 changed files with 32 additions and 37 deletions

View File

@ -22,8 +22,7 @@ import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
abstract class AgeableMob(connection: PlayConnection, entityType: EntityType, data: EntityData, position: Vec3d, rotation: EntityRotation) : PathfinderMob(connection, entityType, data, position, rotation) { abstract class AgeableMob(connection: PlayConnection, entityType: EntityType, data: EntityData, position: Vec3d, rotation: EntityRotation) : PathfinderMob(connection, entityType, data, position, rotation) {
@get:SynchronizedEntityData @get:SynchronizedEntityData
open val isBaby: Boolean open val isBaby: Boolean by data(BABY, false)
get() = data.getBoolean(BABY, false)
companion object { companion object {

View File

@ -23,24 +23,20 @@ import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.data.registries.identified.ResourceLocation
import de.bixilon.minosoft.data.registries.particle.data.ParticleData import de.bixilon.minosoft.data.registries.particle.data.ParticleData
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.util.KUtil
class AreaEffectCloud(connection: PlayConnection, entityType: EntityType, data: EntityData, position: Vec3d, rotation: EntityRotation) : Entity(connection, entityType, data, position, rotation) { class AreaEffectCloud(connection: PlayConnection, entityType: EntityType, data: EntityData, position: Vec3d, rotation: EntityRotation) : Entity(connection, entityType, data, position, rotation) {
override val dimensions: Vec2 override val dimensions: Vec2
get() = Vec2(radius * 2, super.dimensions.y) get() = Vec2(radius * 2, super.dimensions.y) // TODO: observe radius
@get:SynchronizedEntityData @get:SynchronizedEntityData
val ignoreRadius: Boolean val ignoreRadius: Boolean by data(IGNORE_RADIUS_DATA, false)
get() = data.getBoolean(IGNORE_RADIUS_DATA, false)
@get:SynchronizedEntityData @get:SynchronizedEntityData
val radius: Float val radius: Float by data(RADIUS_DATA, 0.5f)
get() = data.get(RADIUS_DATA, 0.5f)
@get:SynchronizedEntityData @get:SynchronizedEntityData
val color: Int val color: Int by data(COLOR_DATA, 0)
get() = data.get(COLOR_DATA, 0)
// ignore radius??? // ignore radius???
@get:SynchronizedEntityData @get:SynchronizedEntityData
@ -48,8 +44,7 @@ class AreaEffectCloud(connection: PlayConnection, entityType: EntityType, data:
get() = data.getBoolean(WAITING_DATA, false) get() = data.getBoolean(WAITING_DATA, false)
@get:SynchronizedEntityData @get:SynchronizedEntityData
val particle: ParticleData? val particle: ParticleData? by data(PARTICLE_DATA, null)
get() = data.get(PARTICLE_DATA, null)
companion object : EntityFactory<AreaEffectCloud> { companion object : EntityFactory<AreaEffectCloud> {

View File

@ -170,9 +170,9 @@ abstract class Entity(
val isSilent: Boolean val isSilent: Boolean
get() = data.get(SILENT_DATA, false) get() = data.get(SILENT_DATA, false)
private var _hasNoGravity by data(NO_GRAVITY_DATA, false)
@get:SynchronizedEntityData @get:SynchronizedEntityData
open val hasGravity: Boolean open val hasGravity: Boolean get() = !_hasNoGravity
get() = !data.get(NO_GRAVITY_DATA, false)
@get:SynchronizedEntityData @get:SynchronizedEntityData
val ticksFrozen: Int val ticksFrozen: Int

View File

@ -14,6 +14,7 @@ package de.bixilon.minosoft.data.entities.entities
import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.kotlinglm.vec3.Vec3d
import de.bixilon.kotlinglm.vec3.Vec3i 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.nullCast
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.data.container.equipment.EntityEquipment import de.bixilon.minosoft.data.container.equipment.EntityEquipment
@ -49,8 +50,9 @@ abstract class LivingEntity(connection: PlayConnection, entityType: EntityType,
override val canRaycast: Boolean get() = super.canRaycast && health > 0.0 override val canRaycast: Boolean get() = super.canRaycast && health > 0.0
override val name: ChatComponent? get() = super.name override val name: ChatComponent? get() = super.name
private var flags by data(FLAGS_DATA, 0x00)
private fun getLivingEntityFlag(bitMask: Int): Boolean { private fun getLivingEntityFlag(bitMask: Int): Boolean {
return data.getBitMask(FLAGS_DATA, bitMask, 0x00) return flags.isBitMask(bitMask)
} }
@get:SynchronizedEntityData @get:SynchronizedEntityData
@ -83,16 +85,13 @@ abstract class LivingEntity(connection: PlayConnection, entityType: EntityType,
get() = data.getBoolean(EFFECT_AMBIENT_DATA, false) get() = data.getBoolean(EFFECT_AMBIENT_DATA, false)
@get:SynchronizedEntityData @get:SynchronizedEntityData
val arrowCount: Int val arrowCount: Int by data(ARROW_COUNT_DATA, 0)
get() = data.get(ARROW_COUNT_DATA, 0)
@get:SynchronizedEntityData @get:SynchronizedEntityData
val absorptionHearts: Int val absorptionHearts: Int by data(ABSORPTION_HEARTS_DATA, 0)
get() = data.get(ABSORPTION_HEARTS_DATA, 0)
@get:SynchronizedEntityData @get:SynchronizedEntityData
val bedPosition: Vec3i? val bedPosition: Vec3i? by data(BED_POSITION_DATA, null)
get() = data.get(BED_POSITION_DATA, null)
open val isSleeping: Boolean open val isSleeping: Boolean
get() = bedPosition != null get() = bedPosition != null

View File

@ -13,6 +13,7 @@
package de.bixilon.minosoft.data.entities.entities package de.bixilon.minosoft.data.entities.entities
import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.kotlinglm.vec3.Vec3d
import de.bixilon.kutil.bit.BitByte.isBitMask
import de.bixilon.minosoft.data.entities.EntityRotation import de.bixilon.minosoft.data.entities.EntityRotation
import de.bixilon.minosoft.data.entities.data.EntityData import de.bixilon.minosoft.data.entities.data.EntityData
import de.bixilon.minosoft.data.entities.data.EntityDataField import de.bixilon.minosoft.data.entities.data.EntityDataField
@ -20,9 +21,10 @@ import de.bixilon.minosoft.data.registries.entities.EntityType
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection 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) { 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 fun getMobFlags(bitMask: Int): Boolean { private fun getMobFlags(bitMask: Int): Boolean {
return data.getBitMask(FLAGS_DATA, bitMask, 0x00) return flags.isBitMask(bitMask)
} }
@get:SynchronizedEntityData @get:SynchronizedEntityData

View File

@ -70,28 +70,22 @@ class ArmorStand(connection: PlayConnection, entityType: EntityType, data: Entit
get() = getArmorStandFlag(0x10) get() = getArmorStandFlag(0x10)
@get:SynchronizedEntityData @get:SynchronizedEntityData
val headRotation: Vec3 val headRotation: Vec3 by data(HEAD_ROTATION_DATA, HEAD_ROTATION)
get() = data.get(HEAD_ROTATION_DATA, Vec3(0.0f, 0.0f, 0.0f))
@get:SynchronizedEntityData @get:SynchronizedEntityData
val bodyRotation: Vec3 val bodyRotation: Vec3 by data(BODY_ROTATION_DATA, BODY_ROTATION)
get() = data.get(BODY_ROTATION_DATA, Vec3(0.0f, 0.0f, 0.0f))
@get:SynchronizedEntityData @get:SynchronizedEntityData
val leftArmRotation: Vec3 val leftArmRotation: Vec3 by data(LEFT_ARM_ROTATION_DATA, LEFT_ARM_ROTATION)
get() = data.get(LEFT_ARM_ROTATION_DATA, Vec3(-10.0f, 0.0f, -10.0f))
@get:SynchronizedEntityData @get:SynchronizedEntityData
val rightArmRotation: Vec3 val rightArmRotation: Vec3 by data(RIGHT_ARM_ROTATION_DATA, RIGHT_ARM_ROTATION)
get() = data.get(RIGHT_ARM_ROTATION_DATA, Vec3(-15.0f, 0.0f, 10.0f))
@get:SynchronizedEntityData @get:SynchronizedEntityData
val leftLegRotation: Vec3 val leftLegRotation: Vec3 by data(LEFT_LEG_ROTATION_DATA, LEFT_LEG_ROTATION)
get() = data.get(LEFT_LEG_ROTATION_DATA, Vec3(-1.0f, 0.0f, -1.0f))
@get:SynchronizedEntityData @get:SynchronizedEntityData
val rightLegRotation: Vec3 val rightLegRotation: Vec3 by data(RIGHT_LEG_ROTATION_DATA, RIGHT_LEG_ROTATION)
get() = data.get(RIGHT_LEG_ROTATION_DATA, Vec3(1.0f, 0.0f, 1.0f))
override fun tick() { override fun tick() {
@ -119,6 +113,13 @@ class ArmorStand(connection: PlayConnection, entityType: EntityType, data: Entit
private val DIMENSIONS_MARKER = Vec2(0.0f) private val DIMENSIONS_MARKER = Vec2(0.0f)
private val DIMENSIONS_SMALL = DIMENSIONS * 0.5f private val DIMENSIONS_SMALL = DIMENSIONS * 0.5f
private val HEAD_ROTATION = Vec3(0.0f, 0.0f, 0.0f)
private val BODY_ROTATION = Vec3(0.0f, 0.0f, 0.0f)
private val LEFT_ARM_ROTATION = Vec3(-10.0f, 0.0f, -10.0f)
private val RIGHT_ARM_ROTATION = Vec3(-15.0f, 0.0f, 10.0f)
private val LEFT_LEG_ROTATION = Vec3(-1.0f, 0.0f, -1.0f)
private val RIGHT_LEG_ROTATION = Vec3(1.0f, 0.0f, 1.0f)
override fun build(connection: PlayConnection, entityType: EntityType, data: EntityData, position: Vec3d, rotation: EntityRotation): ArmorStand { override fun build(connection: PlayConnection, entityType: EntityType, data: EntityData, position: Vec3d, rotation: EntityRotation): ArmorStand {
return ArmorStand(connection, entityType, data, position, rotation) return ArmorStand(connection, entityType, data, position, rotation)
} }

View File

@ -30,8 +30,7 @@ import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
class PrimedTNT(connection: PlayConnection, entityType: EntityType, data: EntityData, position: Vec3d, rotation: EntityRotation) : Entity(connection, entityType, data, position, rotation) { class PrimedTNT(connection: PlayConnection, entityType: EntityType, data: EntityData, position: Vec3d, rotation: EntityRotation) : Entity(connection, entityType, data, position, rotation) {
@get:SynchronizedEntityData @get:SynchronizedEntityData
val fuseTime: Int val fuseTime: Int by data(FUSE_TIME_DATA, 80)
get() = data.get(FUSE_TIME_DATA, 80)
override fun tick() { override fun tick() {
if (fuseTime <= 0) return if (fuseTime <= 0) return

View File

@ -146,7 +146,7 @@ open class ItemFeature(
fun ItemRenderDistance.getCount(count: Int) = when (this) { fun ItemRenderDistance.getCount(count: Int) = when (this) {
CLOSE -> when { CLOSE -> when {
count <= 16 -> count count <= 12 -> count
else -> 16 else -> 16
} }