mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-16 10:55:01 -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,
|
ZombiePigman,
|
||||||
ZombifiedPiglin,
|
ZombifiedPiglin,
|
||||||
RemotePlayerEntity,
|
RemotePlayerEntity,
|
||||||
FishingHook,
|
FishingBobber,
|
||||||
GlowSquid,
|
GlowSquid,
|
||||||
EvokerFangs,
|
EvokerFangs,
|
||||||
) {
|
) {
|
||||||
|
@ -320,6 +320,8 @@ abstract class Entity(
|
|||||||
return maxLevel
|
return maxLevel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun setObjectData(data: Int) {}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val HITBOX_MARGIN = 1e-5f
|
private const val HITBOX_MARGIN = 1e-5f
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
*/
|
*/
|
||||||
package de.bixilon.minosoft.data.entities.entities.decoration
|
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.EntityMetaDataFields
|
||||||
import de.bixilon.minosoft.data.entities.EntityRotation
|
import de.bixilon.minosoft.data.entities.EntityRotation
|
||||||
import de.bixilon.minosoft.data.entities.entities.EntityMetaDataFunction
|
import de.bixilon.minosoft.data.entities.entities.EntityMetaDataFunction
|
||||||
@ -32,6 +33,14 @@ open class ItemFrame(connection: PlayConnection, entityType: EntityType, positio
|
|||||||
val itemRotation: Int
|
val itemRotation: Int
|
||||||
get() = entityMetaData.sets.getInt(EntityMetaDataFields.ITEM_FRAME_ROTATION)
|
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> {
|
companion object : EntityFactory<ItemFrame> {
|
||||||
override val RESOURCE_LOCATION: ResourceLocation = ResourceLocation("item_frame")
|
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.Entity
|
||||||
import de.bixilon.minosoft.data.entities.entities.EntityMetaDataFunction
|
import de.bixilon.minosoft.data.entities.entities.EntityMetaDataFunction
|
||||||
import de.bixilon.minosoft.data.mappings.ResourceLocation
|
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.EntityFactory
|
||||||
import de.bixilon.minosoft.data.mappings.entities.EntityType
|
import de.bixilon.minosoft.data.mappings.entities.EntityType
|
||||||
import de.bixilon.minosoft.protocol.network.connection.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.PlayConnection
|
||||||
@ -24,11 +25,19 @@ import glm_.vec3.Vec3d
|
|||||||
import glm_.vec3.Vec3i
|
import glm_.vec3.Vec3i
|
||||||
|
|
||||||
class FallingBlock(connection: PlayConnection, entityType: EntityType, position: Vec3d, rotation: EntityRotation) : Entity(connection, entityType, position, rotation) {
|
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")
|
@get:EntityMetaDataFunction(name = "Spawn position")
|
||||||
val spawnPosition: Vec3i?
|
val spawnPosition: Vec3i?
|
||||||
get() = entityMetaData.sets.getBlockPosition(EntityMetaDataFields.FALLING_BLOCK_SPAWN_POSITION)
|
get() = entityMetaData.sets.getBlockPosition(EntityMetaDataFields.FALLING_BLOCK_SPAWN_POSITION)
|
||||||
|
|
||||||
|
|
||||||
|
override fun setObjectData(data: Int) {
|
||||||
|
blockState = connection.registries.getBlockState(data)
|
||||||
|
}
|
||||||
|
|
||||||
companion object : EntityFactory<FallingBlock> {
|
companion object : EntityFactory<FallingBlock> {
|
||||||
override val RESOURCE_LOCATION: ResourceLocation = ResourceLocation("falling_block")
|
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 de.bixilon.minosoft.protocol.network.connection.PlayConnection
|
||||||
import glm_.vec3.Vec3d
|
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")
|
@get:EntityMetaDataFunction(name = "Hooked entity id")
|
||||||
val hookedEntityId: Int
|
val hookedEntityId: Int
|
||||||
@ -32,11 +32,11 @@ class FishingHook(connection: PlayConnection, entityType: EntityType, position:
|
|||||||
get() = entityMetaData.sets.getBoolean(EntityMetaDataFields.FISHING_HOOK_CATCHABLE)
|
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 val RESOURCE_LOCATION: ResourceLocation = ResourceLocation("fishing_bobber")
|
||||||
|
|
||||||
override fun build(connection: PlayConnection, entityType: EntityType, position: Vec3d, rotation: EntityRotation): FishingHook {
|
override fun build(connection: PlayConnection, entityType: EntityType, position: Vec3d, rotation: EntityRotation): FishingBobber {
|
||||||
return FishingHook(connection, entityType, position, rotation)
|
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.EntityRotation
|
||||||
import de.bixilon.minosoft.data.entities.entities.Entity
|
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.data.mappings.entities.EntityType
|
||||||
import de.bixilon.minosoft.protocol.network.connection.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.PlayConnection
|
||||||
import glm_.vec3.Vec3d
|
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 {
|
} else {
|
||||||
buffer.connection.registries.entityTypeRegistry[type].build(buffer.connection, position, rotation, null, buffer.versionId)!!
|
buffer.connection.registries.entityTypeRegistry[type].build(buffer.connection, position, rotation, null, buffer.versionId)!!
|
||||||
}
|
}
|
||||||
|
entity.setObjectData(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handle(connection: PlayConnection) {
|
override fun handle(connection: PlayConnection) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user