Initialize Commit

This commit is contained in:
2025-06-19 15:01:07 +08:00
commit e40ed2e534
164 changed files with 19741 additions and 0 deletions

22
codec/slot/component.go Normal file
View File

@ -0,0 +1,22 @@
package slot
import pk "github.com/Tnze/go-mc/net/packet"
type Component interface {
Type() ComponentID
ID() string
pk.Field
}
type ComponentID int32
var components = make(map[ComponentID]Component)
func ComponentFromID(id ComponentID) Component {
return components[id]
}
func RegisterComponent(c Component) {
components[c.Type()] = c
}

111
codec/slot/itemstack.go Normal file
View File

@ -0,0 +1,111 @@
package slot
import (
"io"
pk "github.com/Tnze/go-mc/net/packet"
)
type Slot struct {
Count int32
ItemID int32
AddComponent []Component
RemoveComponent []ComponentID
}
func (s *Slot) WriteTo(w io.Writer) (n int64, err error) {
temp, err := pk.VarInt(s.Count).WriteTo(w)
if s.Count <= 0 || err != nil {
return temp, err
}
n += temp
temp, err = pk.VarInt(s.ItemID).WriteTo(w)
n += temp
if err != nil {
return temp, err
}
temp, err = pk.VarInt(len(s.AddComponent)).WriteTo(w)
n += temp
if err != nil {
return temp, err
}
for _, c := range s.AddComponent {
temp, err = pk.VarInt(c.Type()).WriteTo(w)
n += temp
if err != nil {
return temp, err
}
temp, err = c.WriteTo(w)
n += temp
if err != nil {
return 0, err
}
}
temp, err = pk.VarInt(len(s.RemoveComponent)).WriteTo(w)
n += temp
if err != nil {
return temp, err
}
for _, id := range s.RemoveComponent {
temp, err = pk.VarInt(id).WriteTo(w)
n += temp
if err != nil {
return temp, err
}
}
return temp, nil
}
func (s *Slot) ReadFrom(r io.Reader) (n int64, err error) {
temp, err := (*pk.VarInt)(&s.Count).ReadFrom(r)
if s.Count <= 0 || err != nil {
return temp, err
}
n += temp
temp, err = (*pk.VarInt)(&s.ItemID).ReadFrom(r)
n += temp
if err != nil {
return temp, err
}
addLens := int32(0)
temp, err = (*pk.VarInt)(&addLens).ReadFrom(r)
n += temp
if err != nil {
return temp, err
}
var id int32
for i := int32(0); i < addLens; i++ {
temp, err = (*pk.VarInt)(&id).ReadFrom(r)
n += temp
if err != nil {
return temp, err
}
c := ComponentFromID(ComponentID(id))
temp, err = c.ReadFrom(r)
n += temp
if err != nil {
return temp, err
}
}
removeLens := int32(0)
temp, err = (*pk.VarInt)(&removeLens).ReadFrom(r)
n += temp
if err != nil {
return temp, err
}
for i := int32(0); i < removeLens; i++ {
temp, err = (*pk.VarInt)(&id).ReadFrom(r)
n += temp
if err != nil {
return temp, err
}
}
return n, nil
}