diff --git a/src/main/java/de/bixilon/minosoft/data/DefaultEntityFactories.kt b/src/main/java/de/bixilon/minosoft/data/DefaultEntityFactories.kt index b7ee1b13a..96a1c226c 100644 --- a/src/main/java/de/bixilon/minosoft/data/DefaultEntityFactories.kt +++ b/src/main/java/de/bixilon/minosoft/data/DefaultEntityFactories.kt @@ -157,7 +157,7 @@ object DefaultEntityFactories : DefaultFactory>( ZombiePigman, ZombifiedPiglin, RemotePlayerEntity, - FishingHook, + FishingBobber, GlowSquid, EvokerFangs, ) { diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt index 970b4d044..b407fcc03 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt @@ -320,6 +320,8 @@ abstract class Entity( return maxLevel } + open fun setObjectData(data: Int) {} + companion object { private const val HITBOX_MARGIN = 1e-5f diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.kt index ed0a1527c..b792448bb 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.kt @@ -12,6 +12,7 @@ */ package de.bixilon.minosoft.data.entities.entities.decoration +import de.bixilon.minosoft.data.Directions import de.bixilon.minosoft.data.entities.EntityMetaDataFields import de.bixilon.minosoft.data.entities.EntityRotation import de.bixilon.minosoft.data.entities.entities.EntityMetaDataFunction @@ -32,6 +33,14 @@ open class ItemFrame(connection: PlayConnection, entityType: EntityType, positio val itemRotation: Int get() = entityMetaData.sets.getInt(EntityMetaDataFields.ITEM_FRAME_ROTATION) + + @get:EntityMetaDataFunction(name = "Owner") + var facing: Directions = Directions.NORTH + + override fun setObjectData(data: Int) { + facing = Directions[data] + } + companion object : EntityFactory { override val RESOURCE_LOCATION: ResourceLocation = ResourceLocation("item_frame") diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/item/FallingBlock.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/item/FallingBlock.kt index b5e3ef66b..68dd952d5 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/item/FallingBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/item/FallingBlock.kt @@ -17,6 +17,7 @@ import de.bixilon.minosoft.data.entities.EntityRotation import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.entities.entities.EntityMetaDataFunction import de.bixilon.minosoft.data.mappings.ResourceLocation +import de.bixilon.minosoft.data.mappings.blocks.BlockState import de.bixilon.minosoft.data.mappings.entities.EntityFactory import de.bixilon.minosoft.data.mappings.entities.EntityType import de.bixilon.minosoft.protocol.network.connection.PlayConnection @@ -24,11 +25,19 @@ import glm_.vec3.Vec3d import glm_.vec3.Vec3i class FallingBlock(connection: PlayConnection, entityType: EntityType, position: Vec3d, rotation: EntityRotation) : Entity(connection, entityType, position, rotation) { + + @get:EntityMetaDataFunction(name = "Block state") + var blockState: BlockState? = null + @get:EntityMetaDataFunction(name = "Spawn position") val spawnPosition: Vec3i? get() = entityMetaData.sets.getBlockPosition(EntityMetaDataFields.FALLING_BLOCK_SPAWN_POSITION) + override fun setObjectData(data: Int) { + blockState = connection.registries.getBlockState(data) + } + companion object : EntityFactory { override val RESOURCE_LOCATION: ResourceLocation = ResourceLocation("falling_block") diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/FishingHook.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/FishingBobber.kt similarity index 85% rename from src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/FishingHook.kt rename to src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/FishingBobber.kt index 2501e021d..ab15c9748 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/FishingHook.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/FishingBobber.kt @@ -21,7 +21,7 @@ import de.bixilon.minosoft.data.mappings.entities.EntityType import de.bixilon.minosoft.protocol.network.connection.PlayConnection import glm_.vec3.Vec3d -class FishingHook(connection: PlayConnection, entityType: EntityType, position: Vec3d, rotation: EntityRotation) : Projectile(connection, entityType, position, rotation) { +class FishingBobber(connection: PlayConnection, entityType: EntityType, position: Vec3d, rotation: EntityRotation) : Projectile(connection, entityType, position, rotation) { @get:EntityMetaDataFunction(name = "Hooked entity id") val hookedEntityId: Int @@ -32,11 +32,11 @@ class FishingHook(connection: PlayConnection, entityType: EntityType, position: get() = entityMetaData.sets.getBoolean(EntityMetaDataFields.FISHING_HOOK_CATCHABLE) - companion object : EntityFactory { + companion object : EntityFactory { override val RESOURCE_LOCATION: ResourceLocation = ResourceLocation("fishing_bobber") - override fun build(connection: PlayConnection, entityType: EntityType, position: Vec3d, rotation: EntityRotation): FishingHook { - return FishingHook(connection, entityType, position, rotation) + override fun build(connection: PlayConnection, entityType: EntityType, position: Vec3d, rotation: EntityRotation): FishingBobber { + return FishingBobber(connection, entityType, position, rotation) } } } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/Projectile.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/Projectile.kt index 33ef4ae59..72b9539c3 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/Projectile.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/Projectile.kt @@ -14,8 +14,17 @@ package de.bixilon.minosoft.data.entities.entities.projectile import de.bixilon.minosoft.data.entities.EntityRotation import de.bixilon.minosoft.data.entities.entities.Entity +import de.bixilon.minosoft.data.entities.entities.EntityMetaDataFunction import de.bixilon.minosoft.data.mappings.entities.EntityType import de.bixilon.minosoft.protocol.network.connection.PlayConnection import glm_.vec3.Vec3d -abstract class Projectile(connection: PlayConnection, entityType: EntityType, position: Vec3d, rotation: EntityRotation) : Entity(connection, entityType, position, rotation) +abstract class Projectile(connection: PlayConnection, entityType: EntityType, position: Vec3d, rotation: EntityRotation) : Entity(connection, entityType, position, rotation) { + + @get:EntityMetaDataFunction(name = "Owner") + var owner: Entity? = null + + override fun setObjectData(data: Int) { + owner = connection.world.entities[data] + } +} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/EntityObjectSpawnS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/EntityObjectSpawnS2CP.kt index 8cbb307a6..1323f2942 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/EntityObjectSpawnS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/EntityObjectSpawnS2CP.kt @@ -60,6 +60,7 @@ class EntityObjectSpawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { } else { buffer.connection.registries.entityTypeRegistry[type].build(buffer.connection, position, rotation, null, buffer.versionId)!! } + entity.setObjectData(data) } override fun handle(connection: PlayConnection) {