mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-14 09:56:37 -04:00
entity object data: item frame rotation, falling block state, projectile owner
This commit is contained in:
parent
5871e553f5
commit
08099c981d
@ -157,7 +157,7 @@ object DefaultEntityFactories : DefaultFactory<EntityFactory<out Entity>>(
|
||||
ZombiePigman,
|
||||
ZombifiedPiglin,
|
||||
RemotePlayerEntity,
|
||||
FishingHook,
|
||||
FishingBobber,
|
||||
GlowSquid,
|
||||
EvokerFangs,
|
||||
) {
|
||||
|
@ -320,6 +320,8 @@ abstract class Entity(
|
||||
return maxLevel
|
||||
}
|
||||
|
||||
open fun setObjectData(data: Int) {}
|
||||
|
||||
companion object {
|
||||
private const val HITBOX_MARGIN = 1e-5f
|
||||
|
||||
|
@ -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<ItemFrame> {
|
||||
override val RESOURCE_LOCATION: ResourceLocation = ResourceLocation("item_frame")
|
||||
|
||||
|
@ -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<FallingBlock> {
|
||||
override val RESOURCE_LOCATION: ResourceLocation = ResourceLocation("falling_block")
|
||||
|
||||
|
@ -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<FishingHook> {
|
||||
companion object : EntityFactory<FishingBobber> {
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
@ -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]
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user