Update /bot/screen to support ClickWindow

This commit is contained in:
Tnze
2021-12-11 17:28:48 +08:00
parent 97b706f6eb
commit 61b99662b3
2 changed files with 48 additions and 12 deletions

1
.gitignore vendored
View File

@ -15,5 +15,6 @@
*.out
examples/test/test.go
data/packetid/generate.go
.idea/
.vscode/

View File

@ -38,17 +38,39 @@ func NewManager(c *bot.Client, e EventsListener) *Manager {
return m
}
//func (m *Manager) ContainerClick(id int, slot int16, button byte, mode int32) error {
// return m.c.Conn.WritePacket(pk.Marshal(
// packetid.ServerboundContainerClick,
// pk.UnsignedByte(id),
// pk.VarInt(m.stateID),
// pk.Short(slot),
// pk.Byte(button),
// pk.VarInt(mode),
// pk.VarInt()
// ))
//}
type ChangedSlots map[int]*Slot
func (m *Manager) ContainerClick(id int, slot int16, button byte, mode int32, slots ChangedSlots, carried *Slot) error {
return m.c.Conn.WritePacket(pk.Marshal(
packetid.ServerboundContainerClick,
pk.UnsignedByte(id),
pk.VarInt(m.stateID),
pk.Short(slot),
pk.Byte(button),
pk.VarInt(mode),
slots,
carried,
))
}
func (c ChangedSlots) WriteTo(w io.Writer) (n int64, err error) {
n, err = pk.VarInt(len(c)).WriteTo(w)
if err != nil {
return
}
for i, v := range c {
n1, err := pk.Short(i).WriteTo(w)
if err != nil {
return n + n1, err
}
n2, err := v.WriteTo(w)
if err != nil {
return n + n1 + n2, err
}
n += n1 + n2
}
return
}
func (m *Manager) onOpenScreen(p pk.Packet) error {
var (
@ -165,10 +187,23 @@ type Slot struct {
NBT nbt.RawMessage
}
func (s *Slot) WriteTo(w io.Writer) (n int64, err error) {
var present pk.Boolean = s != nil
return pk.Tuple{
present, pk.Opt{
Has: present,
Field: pk.Tuple{
&s.ID, &s.Count, pk.NBT(&s.NBT),
},
},
}.WriteTo(w)
}
func (s *Slot) ReadFrom(r io.Reader) (n int64, err error) {
var present pk.Boolean
return pk.Tuple{
&present, pk.Opt{Has: &present,
&present, pk.Opt{
Has: &present,
Field: pk.Tuple{
&s.ID, &s.Count, pk.NBT(&s.NBT),
},