add player package with key client-side player functionality, update protocol codecs, and refactor metadata definitions and slot usage

This commit is contained in:
2025-08-23 16:19:45 +08:00
parent cff9d4a809
commit 4528bdc86a
32 changed files with 2613 additions and 468 deletions

View File

@ -46,13 +46,13 @@ const (
MetadataQuaternion
)
type entityMetadata interface {
type Metadata interface {
EntityMetadataType() MetadataType
pk.Field
}
type EntityMetadata struct {
Data map[uint8]entityMetadata
Data map[uint8]Metadata
}
func (m EntityMetadata) WriteTo(w io.Writer) (int64, error) {
@ -114,44 +114,44 @@ func (m *EntityMetadata) ReadFrom(r io.Reader) (int64, error) {
return n, nil
}
type metadataCreator func() entityMetadata
type metadataCreator func() Metadata
var metadataType = map[MetadataType]metadataCreator{}
func init() {
metadataType[MetadataByte] = func() entityMetadata { return &Byte{} }
metadataType[MetadataVarInt] = func() entityMetadata { return &VarInt{} }
metadataType[MetadataVarLong] = func() entityMetadata { return &VarLong{} }
metadataType[MetadataFloat] = func() entityMetadata { return &Float{} }
metadataType[MetadataString] = func() entityMetadata { return &String{} }
metadataType[MetadataChat] = func() entityMetadata { return &Chat{} }
metadataType[MetadataOptChat] = func() entityMetadata { return &OptChat{} }
metadataType[MetadataSlot] = func() entityMetadata { return &Slot{} }
metadataType[MetadataBoolean] = func() entityMetadata { return &Boolean{} }
metadataType[MetadataRotation] = func() entityMetadata { return &Rotation{} }
metadataType[MetadataPosition] = func() entityMetadata { return &Position{} }
metadataType[MetadataOptPosition] = func() entityMetadata { return &OptPosition{} }
metadataType[MetadataDirection] = func() entityMetadata { return &Direction{} }
metadataType[MetadataOptLivingEntity] = func() entityMetadata { return &OptLivingEntity{} }
metadataType[MetadataBlockState] = func() entityMetadata { return &BlockState{} }
metadataType[MetadataOptBlockState] = func() entityMetadata { return &OptBlockState{} }
metadataType[MetadataNBT] = func() entityMetadata { return &NBT{} }
metadataType[MetadataParticle] = func() entityMetadata { return &Particle{} }
metadataType[MetadataParticles] = func() entityMetadata { return &Particles{} }
metadataType[MetadataVillagerData] = func() entityMetadata { return &VillagerData{} }
metadataType[MetadataOptVarInt] = func() entityMetadata { return &OptVarInt{} }
metadataType[MetadataPose] = func() entityMetadata { return &Pose{} }
metadataType[MetadataCatVariant] = func() entityMetadata { return &CatVariant{} }
metadataType[MetadataCowVariant] = func() entityMetadata { return &CowVariant{} }
metadataType[MetadataWolfVariant] = func() entityMetadata { return &WolfVariant{} }
metadataType[MetadataWolfSoundVariant] = func() entityMetadata { return &WolfSoundVariant{} }
metadataType[MetadataFrogVariant] = func() entityMetadata { return &FrogVariant{} }
metadataType[MetadataPigVariant] = func() entityMetadata { return &PigVariant{} }
metadataType[MetadataChickenVariant] = func() entityMetadata { return &ChickenVariant{} }
metadataType[MetadataOptGlobalPosition] = func() entityMetadata { return &OptGlobalPosition{} }
metadataType[MetadataPaintingVariant] = func() entityMetadata { return &PaintingVariant{} }
metadataType[MetadataSnifferVariant] = func() entityMetadata { return &SnifferVariant{} }
metadataType[MetadataArmadilloState] = func() entityMetadata { return &ArmadilloState{} }
metadataType[MetadataVector3] = func() entityMetadata { return &Vector3{} }
metadataType[MetadataQuaternion] = func() entityMetadata { return &Quaternion{} }
metadataType[MetadataByte] = func() Metadata { return &Byte{} }
metadataType[MetadataVarInt] = func() Metadata { return &VarInt{} }
metadataType[MetadataVarLong] = func() Metadata { return &VarLong{} }
metadataType[MetadataFloat] = func() Metadata { return &Float{} }
metadataType[MetadataString] = func() Metadata { return &String{} }
metadataType[MetadataChat] = func() Metadata { return &Chat{} }
metadataType[MetadataOptChat] = func() Metadata { return &OptChat{} }
metadataType[MetadataSlot] = func() Metadata { return &Slot{} }
metadataType[MetadataBoolean] = func() Metadata { return &Boolean{} }
metadataType[MetadataRotation] = func() Metadata { return &Rotation{} }
metadataType[MetadataPosition] = func() Metadata { return &Position{} }
metadataType[MetadataOptPosition] = func() Metadata { return &OptPosition{} }
metadataType[MetadataDirection] = func() Metadata { return &Direction{} }
metadataType[MetadataOptLivingEntity] = func() Metadata { return &OptLivingEntity{} }
metadataType[MetadataBlockState] = func() Metadata { return &BlockState{} }
metadataType[MetadataOptBlockState] = func() Metadata { return &OptBlockState{} }
metadataType[MetadataNBT] = func() Metadata { return &NBT{} }
metadataType[MetadataParticle] = func() Metadata { return &Particle{} }
metadataType[MetadataParticles] = func() Metadata { return &Particles{} }
metadataType[MetadataVillagerData] = func() Metadata { return &VillagerData{} }
metadataType[MetadataOptVarInt] = func() Metadata { return &OptVarInt{} }
metadataType[MetadataPose] = func() Metadata { return &Pose{} }
metadataType[MetadataCatVariant] = func() Metadata { return &CatVariant{} }
metadataType[MetadataCowVariant] = func() Metadata { return &CowVariant{} }
metadataType[MetadataWolfVariant] = func() Metadata { return &WolfVariant{} }
metadataType[MetadataWolfSoundVariant] = func() Metadata { return &WolfSoundVariant{} }
metadataType[MetadataFrogVariant] = func() Metadata { return &FrogVariant{} }
metadataType[MetadataPigVariant] = func() Metadata { return &PigVariant{} }
metadataType[MetadataChickenVariant] = func() Metadata { return &ChickenVariant{} }
metadataType[MetadataOptGlobalPosition] = func() Metadata { return &OptGlobalPosition{} }
metadataType[MetadataPaintingVariant] = func() Metadata { return &PaintingVariant{} }
metadataType[MetadataSnifferVariant] = func() Metadata { return &SnifferVariant{} }
metadataType[MetadataArmadilloState] = func() Metadata { return &ArmadilloState{} }
metadataType[MetadataVector3] = func() Metadata { return &Vector3{} }
metadataType[MetadataQuaternion] = func() Metadata { return &Quaternion{} }
}