Bak
This commit is contained in:
144
playPackets.go
144
playPackets.go
@@ -3,7 +3,11 @@ package main
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"errors"
|
||||
"github.com/Tnze/go-mc/nbt"
|
||||
"github.com/google/uuid"
|
||||
"math/rand/v2"
|
||||
"time"
|
||||
)
|
||||
|
||||
func (player *Player) sendBundleDelimiter() error {
|
||||
@@ -356,6 +360,140 @@ func (player *Player) sendPlayStart() error {
|
||||
|
||||
}
|
||||
|
||||
//func (player *Player) sendMapItemData(mapId int32) error {
|
||||
// mapEntry := world.m
|
||||
//}
|
||||
func (player *Player) sendMapItemData(mapId int32) error {
|
||||
var buf bytes.Buffer
|
||||
mapEntry, found := world.Maps[mapId]
|
||||
if found {
|
||||
mapEntry.add(&buf)
|
||||
}
|
||||
return player.sendPacket(0x2C, &buf)
|
||||
}
|
||||
|
||||
func (player *Player) sendMerchantOffers(windowID int32, entity *VillagerEntity) error {
|
||||
var buf bytes.Buffer
|
||||
entity.addOffers(&buf, windowID)
|
||||
return player.sendPacket(0x2D, &buf)
|
||||
}
|
||||
|
||||
func (player *Player) sendEntityPositionUpdate(entity *Entity, deltas []int16) error {
|
||||
if len(deltas) != 3 {
|
||||
return errors.New("invalid deltas")
|
||||
}
|
||||
var buf bytes.Buffer
|
||||
addVarint(&buf, entity.ID)
|
||||
addInt16(&buf, deltas[0])
|
||||
addInt16(&buf, deltas[1])
|
||||
addInt16(&buf, deltas[2])
|
||||
addBool(&buf, entity.onGround())
|
||||
return player.sendPacket(0x2E, &buf)
|
||||
}
|
||||
|
||||
func (player *Player) sendEntityPositionRotationUpdate(entity *Entity, deltas []int16) error {
|
||||
if len(deltas) != 3 {
|
||||
return errors.New("invalid deltas")
|
||||
}
|
||||
var buf bytes.Buffer
|
||||
addVarint(&buf, entity.ID)
|
||||
addInt16(&buf, deltas[0])
|
||||
addInt16(&buf, deltas[1])
|
||||
addInt16(&buf, deltas[2])
|
||||
addByte(&buf, entity.Rotation.Yaw)
|
||||
addByte(&buf, entity.Rotation.Pitch)
|
||||
addBool(&buf, entity.onGround())
|
||||
return player.sendPacket(0x2F, &buf)
|
||||
}
|
||||
|
||||
func (player *Player) sendEntityRotationUpdate(entity *Entity) error {
|
||||
var buf bytes.Buffer
|
||||
addVarint(&buf, entity.ID)
|
||||
addByte(&buf, entity.Rotation.Yaw)
|
||||
addByte(&buf, entity.Rotation.Pitch)
|
||||
addBool(&buf, entity.onGround())
|
||||
return player.sendPacket(0x30, &buf)
|
||||
}
|
||||
|
||||
func (player *Player) sendVehicleMove() error {
|
||||
if player.Entity.Vehicle != nil {
|
||||
var buf bytes.Buffer
|
||||
player.Entity.Vehicle.Position.add(&buf)
|
||||
addFloat32(&buf, float32(player.Entity.Vehicle.Rotation.Yaw))
|
||||
addFloat32(&buf, float32(player.Entity.Vehicle.Rotation.Pitch))
|
||||
return player.sendPacket(0x31, &buf)
|
||||
}
|
||||
return errors.New("no vehicle")
|
||||
}
|
||||
|
||||
func (player *Player) sendBookOpen(isOffHand bool) error {
|
||||
var buf bytes.Buffer
|
||||
hand := int32(0)
|
||||
if isOffHand {
|
||||
hand = 1
|
||||
}
|
||||
addVarint(&buf, hand)
|
||||
return player.sendPacket(0x32, &buf)
|
||||
}
|
||||
|
||||
func (player *Player) sendOpenScreen(windowID int32, window *Window, title TextComponent) error {
|
||||
var buf bytes.Buffer
|
||||
addVarint(&buf, windowID)
|
||||
addVarint(&buf, window.ID)
|
||||
addTextComponent(&buf, title)
|
||||
return player.sendPacket(0x33, &buf)
|
||||
}
|
||||
|
||||
func (player *Player) sendOpenSignEditor(blockPosition BlockPosition, front bool) error {
|
||||
var buf bytes.Buffer
|
||||
blockPosition.add(&buf)
|
||||
addBool(&buf, front)
|
||||
return player.sendPacket(0x34, &buf)
|
||||
}
|
||||
|
||||
//0x35 is ping to client
|
||||
//0x36 is pong
|
||||
|
||||
func (player *Player) sendGhostRecipe(windowID uint8, recipe string) error {
|
||||
var buf bytes.Buffer
|
||||
addByte(&buf, windowID)
|
||||
addString(&buf, recipe)
|
||||
return player.sendPacket(0x37, &buf)
|
||||
}
|
||||
|
||||
func (player *Player) sendAbilities() error {
|
||||
var buf bytes.Buffer
|
||||
addByte(&buf, player.Abilites.export())
|
||||
addFloat32(&buf, player.FlyingSpeed)
|
||||
addFloat32(&buf, player.FOVModifier)
|
||||
return player.sendPacket(0x38, &buf)
|
||||
}
|
||||
|
||||
func (player *Player) sendChatMessage(sender *Player, message string) error {
|
||||
var buf bytes.Buffer
|
||||
//TODO IMPLEMENT
|
||||
addUUID(&buf, sender.uuid)
|
||||
addVarint(&buf, sender.MessageIndex)
|
||||
addBool(&buf, false)
|
||||
addString(&buf, message)
|
||||
addInt64(&buf, time.Now().Unix())
|
||||
addInt64(&buf, rand.Int64())
|
||||
//not implementing secure chat
|
||||
return player.sendPacket(0x39, &buf)
|
||||
}
|
||||
|
||||
func (player *Player) sendDeath(message TextComponent) error {
|
||||
var buf bytes.Buffer
|
||||
addVarint(&buf, player.Entity.ID)
|
||||
addTextComponent(&buf, message)
|
||||
return player.sendPacket(0x3C, &buf)
|
||||
}
|
||||
|
||||
func (player *Player) sendRemoveFromTab(playersToRemove []uuid.UUID) error {
|
||||
if len(playersToRemove) > 0 {
|
||||
var buf bytes.Buffer
|
||||
addVarint(&buf, int32(len(playersToRemove)))
|
||||
for _, playerToRemove := range playersToRemove {
|
||||
addUUID(&buf, playerToRemove)
|
||||
}
|
||||
return player.sendPacket(0x3D, &buf)
|
||||
}
|
||||
return errors.New("no playersToRemove")
|
||||
}
|
||||
|
Reference in New Issue
Block a user