1.21.60 support
This commit is contained in:
92
legacyver/proto/item.go
Normal file
92
legacyver/proto/item.go
Normal file
@@ -0,0 +1,92 @@
|
||||
package proto
|
||||
|
||||
import (
|
||||
"github.com/sandertv/gophertunnel/minecraft/nbt"
|
||||
"github.com/sandertv/gophertunnel/minecraft/protocol"
|
||||
)
|
||||
|
||||
// LegacyItemRegistryEntry is an item sent in the StartGame item table. It holds a name and a legacy ID, which is used to
|
||||
// point back to that name.
|
||||
type LegacyItemRegistryEntry struct {
|
||||
// Name if the name of the item, which is a name like 'minecraft:stick'.
|
||||
Name string
|
||||
// RuntimeID is the ID that is used to identify the item over network. After sending all items in the
|
||||
// StartGame packet, items will then be identified using these numerical IDs.
|
||||
RuntimeID int16
|
||||
// ComponentBased specifies if the item was created using components, meaning the item is a custom item.
|
||||
ComponentBased bool
|
||||
}
|
||||
|
||||
// Marshal encodes/decodes an LegacyItemRegistryEntry.
|
||||
func (x *LegacyItemRegistryEntry) Marshal(r protocol.IO) {
|
||||
r.String(&x.Name)
|
||||
r.Int16(&x.RuntimeID)
|
||||
r.Bool(&x.ComponentBased)
|
||||
}
|
||||
|
||||
// FromLatest ...
|
||||
func (x *LegacyItemRegistryEntry) FromLatest(y protocol.ItemEntry) LegacyItemRegistryEntry {
|
||||
x.Name = y.Name
|
||||
x.RuntimeID = y.RuntimeID
|
||||
x.ComponentBased = y.ComponentBased
|
||||
return *x
|
||||
}
|
||||
|
||||
// ToLatest ...
|
||||
func (x *LegacyItemRegistryEntry) ToLatest() protocol.ItemEntry {
|
||||
return protocol.ItemEntry{
|
||||
Name: x.Name,
|
||||
RuntimeID: x.RuntimeID,
|
||||
ComponentBased: x.ComponentBased,
|
||||
Version: 2,
|
||||
}
|
||||
}
|
||||
|
||||
// ItemEntry is an item sent in the StartGame item table. It holds a name and a legacy ID, which is used to
|
||||
// point back to that name.
|
||||
type ItemEntry struct {
|
||||
// Name if the name of the item, which is a name like 'minecraft:stick'.
|
||||
Name string
|
||||
// RuntimeID is the ID that is used to identify the item over network. After sending all items in the
|
||||
// StartGame packet, items will then be identified using these numerical IDs.
|
||||
RuntimeID int16
|
||||
// ComponentBased specifies if the item was created using components, meaning the item is a custom item.
|
||||
ComponentBased bool
|
||||
// Version is the version of the item entry which is used by the client to determine how to handle the
|
||||
// item entry. It is one of the constants above.
|
||||
Version int32
|
||||
// Data is a map containing the components and properties of the item, if the item is component based.
|
||||
Data map[string]any
|
||||
}
|
||||
|
||||
// ToLatest ...
|
||||
func (x *ItemEntry) ToLatest() protocol.ItemEntry {
|
||||
return protocol.ItemEntry{
|
||||
Name: x.Name,
|
||||
RuntimeID: x.RuntimeID,
|
||||
ComponentBased: x.ComponentBased,
|
||||
Version: x.Version,
|
||||
Data: x.Data,
|
||||
}
|
||||
}
|
||||
|
||||
// FromLatest ...
|
||||
func (x *ItemEntry) FromLatest(y protocol.ItemEntry) ItemEntry {
|
||||
x.Name = y.Name
|
||||
x.RuntimeID = y.RuntimeID
|
||||
x.ComponentBased = y.ComponentBased
|
||||
x.Version = y.Version
|
||||
x.Data = y.Data
|
||||
return *x
|
||||
}
|
||||
|
||||
// Marshal encodes/decodes an ItemEntry.
|
||||
func (x *ItemEntry) Marshal(r protocol.IO) {
|
||||
r.String(&x.Name)
|
||||
if IsProtoGTE(r, ID776) {
|
||||
r.Int16(&x.RuntimeID)
|
||||
r.Bool(&x.ComponentBased)
|
||||
r.Varint32(&x.Version)
|
||||
}
|
||||
r.NBT(&x.Data, nbt.NetworkLittleEndian)
|
||||
}
|
||||
Reference in New Issue
Block a user