Refactor item mapping to use dragonflyMapping parameter and remove deleteDebugStick references
This commit is contained in:
@@ -4,22 +4,21 @@ import (
|
||||
"github.com/sandertv/gophertunnel/minecraft"
|
||||
)
|
||||
|
||||
// All returns a slice of all legacy protocol versions that are supported. deleteDebugStick
|
||||
// must be set to true if you're using Dragonfly. deleteDebugStick must be set to false if you're using
|
||||
// PocketMine, Nukkit, or other server software that includes the debug stick in the item registry.
|
||||
func All(deleteDebugStick bool) []minecraft.Protocol {
|
||||
// All returns a slice of all legacy protocol versions that are supported. dragonflyMapping
|
||||
// must be set to true if you're using Dragonfly.
|
||||
func All(dragonflyMapping bool) []minecraft.Protocol {
|
||||
return []minecraft.Protocol{
|
||||
New800(deleteDebugStick),
|
||||
New786(deleteDebugStick),
|
||||
New776(deleteDebugStick),
|
||||
New766(deleteDebugStick),
|
||||
New748(deleteDebugStick),
|
||||
New729(deleteDebugStick),
|
||||
New712(deleteDebugStick),
|
||||
New686(deleteDebugStick),
|
||||
New685(deleteDebugStick),
|
||||
New671(deleteDebugStick),
|
||||
New662(deleteDebugStick),
|
||||
New649(deleteDebugStick),
|
||||
New800(dragonflyMapping),
|
||||
New786(dragonflyMapping),
|
||||
New776(dragonflyMapping),
|
||||
New766(dragonflyMapping),
|
||||
New748(dragonflyMapping),
|
||||
New729(dragonflyMapping),
|
||||
New712(dragonflyMapping),
|
||||
New686(dragonflyMapping),
|
||||
New685(dragonflyMapping),
|
||||
New671(dragonflyMapping),
|
||||
New662(dragonflyMapping),
|
||||
New649(dragonflyMapping),
|
||||
}
|
||||
}
|
||||
|
||||
BIN
legacyver/data/dragonfly_latest_vanilla_items.nbt
Normal file
BIN
legacyver/data/dragonfly_latest_vanilla_items.nbt
Normal file
Binary file not shown.
@@ -22,14 +22,14 @@ var (
|
||||
)
|
||||
|
||||
// New649 ...
|
||||
func New649(deleteDebugStick bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList649, ItemVersion649, deleteDebugStick)
|
||||
func New649(dragonflyMapping bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList649, ItemVersion649)
|
||||
blockMapping := mapping.NewBlockMapping(blockStateData649)
|
||||
|
||||
return &Protocol{
|
||||
ver: "1.20.60",
|
||||
id: proto.ID649,
|
||||
blockTranslator: NewBlockTranslator(blockMapping, blockMappingLatest, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion649), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion649), false),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(deleteDebugStick), blockMapping, blockMappingLatest),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockMapping, blockMappingLatest),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,14 +22,14 @@ var (
|
||||
)
|
||||
|
||||
// New662 ...
|
||||
func New662(deleteDebugStick bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList662, ItemVersion662, deleteDebugStick)
|
||||
func New662(dragonflyMapping bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList662, ItemVersion662)
|
||||
blockMapping := mapping.NewBlockMapping(blockStateData662)
|
||||
|
||||
return &Protocol{
|
||||
ver: "1.20.70",
|
||||
id: proto.ID662,
|
||||
blockTranslator: NewBlockTranslator(blockMapping, blockMappingLatest, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion662), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion662), false),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(deleteDebugStick), blockMapping, blockMappingLatest),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockMapping, blockMappingLatest),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,14 +22,14 @@ var (
|
||||
)
|
||||
|
||||
// New671 ...
|
||||
func New671(deleteDebugStick bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList671, ItemVersion671, deleteDebugStick)
|
||||
func New671(dragonflyMapping bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList671, ItemVersion671)
|
||||
blockMapping := mapping.NewBlockMapping(blockStateData671)
|
||||
|
||||
return &Protocol{
|
||||
ver: "1.20.80",
|
||||
id: proto.ID671,
|
||||
blockTranslator: NewBlockTranslator(blockMapping, blockMappingLatest, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion671), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion671), false),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(deleteDebugStick), blockMapping, blockMappingLatest),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockMapping, blockMappingLatest),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,14 +15,14 @@ const (
|
||||
)
|
||||
|
||||
// New685 uses same data as 686
|
||||
func New685(deleteDebugStick bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList686, ItemVersion685, deleteDebugStick)
|
||||
func New685(dragonflyMapping bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList686, ItemVersion685)
|
||||
blockMapping := mapping.NewBlockMapping(blockStateData686)
|
||||
|
||||
return &Protocol{
|
||||
ver: "1.21.0",
|
||||
id: proto.ID685,
|
||||
blockTranslator: NewBlockTranslator(blockMapping, blockMappingLatest, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion685), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion685), false),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(deleteDebugStick), blockMapping, blockMappingLatest),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockMapping, blockMappingLatest),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,14 +21,14 @@ var (
|
||||
blockStateData686 []byte
|
||||
)
|
||||
|
||||
func New686(deleteDebugStick bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList686, ItemVersion686, deleteDebugStick)
|
||||
func New686(dragonflyMapping bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList686, ItemVersion686)
|
||||
blockMapping := mapping.NewBlockMapping(blockStateData686)
|
||||
|
||||
return &Protocol{
|
||||
ver: "1.21.2",
|
||||
id: proto.ID686,
|
||||
blockTranslator: NewBlockTranslator(blockMapping, blockMappingLatest, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion686), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion686), false),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(deleteDebugStick), blockMapping, blockMappingLatest),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockMapping, blockMappingLatest),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,14 +21,14 @@ var (
|
||||
blockStateData712 []byte
|
||||
)
|
||||
|
||||
func New712(deleteDebugStick bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList712, ItemVersion712, deleteDebugStick)
|
||||
func New712(dragonflyMapping bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList712, ItemVersion712)
|
||||
blockMapping := mapping.NewBlockMapping(blockStateData712)
|
||||
|
||||
return &Protocol{
|
||||
ver: "1.21.20",
|
||||
id: proto.ID712,
|
||||
blockTranslator: NewBlockTranslator(blockMapping, blockMappingLatest, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion712), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion712), false),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(deleteDebugStick), blockMapping, blockMappingLatest),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockMapping, blockMappingLatest),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,14 +21,14 @@ var (
|
||||
blockStateData729 []byte
|
||||
)
|
||||
|
||||
func New729(deleteDebugStick bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList729, ItemVersion729, deleteDebugStick)
|
||||
func New729(dragonflyMapping bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList729, ItemVersion729)
|
||||
blockMapping := mapping.NewBlockMapping(blockStateData729)
|
||||
|
||||
return &Protocol{
|
||||
ver: "1.21.30",
|
||||
id: proto.ID729,
|
||||
blockTranslator: NewBlockTranslator(blockMapping, blockMappingLatest, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion729), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion729), false),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(deleteDebugStick), blockMapping, blockMappingLatest),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockMapping, blockMappingLatest),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,14 +21,14 @@ var (
|
||||
blockStateData748 []byte
|
||||
)
|
||||
|
||||
func New748(deleteDebugStick bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList748, ItemVersion748, deleteDebugStick)
|
||||
func New748(dragonflyMapping bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList748, ItemVersion748)
|
||||
blockMapping := mapping.NewBlockMapping(blockStateData748)
|
||||
|
||||
return &Protocol{
|
||||
ver: "1.21.40",
|
||||
id: proto.ID748,
|
||||
blockTranslator: NewBlockTranslator(blockMapping, blockMappingLatest, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion748), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion748), false),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(deleteDebugStick), blockMapping, blockMappingLatest),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockMapping, blockMappingLatest),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,13 +21,13 @@ var (
|
||||
blockStateData766 []byte
|
||||
)
|
||||
|
||||
func New766(deleteDebugStick bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList766, ItemVersion766, deleteDebugStick)
|
||||
func New766(dragonflyMapping bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList766, ItemVersion766)
|
||||
blockMapping := mapping.NewBlockMapping(blockStateData766)
|
||||
return &Protocol{
|
||||
ver: "1.21.50",
|
||||
id: proto.ID766,
|
||||
blockTranslator: NewBlockTranslator(blockMapping, blockMappingLatest, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion766), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion766), false),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(deleteDebugStick), blockMapping, blockMappingLatest),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockMapping, blockMappingLatest),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,14 +21,14 @@ var (
|
||||
blockStateData776 []byte
|
||||
)
|
||||
|
||||
func New776(deleteDebugStick bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList776, ItemVersion776, deleteDebugStick)
|
||||
func New776(dragonflyMapping bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList776, ItemVersion776)
|
||||
blockMapping := mapping.NewBlockMapping(blockStateData776)
|
||||
|
||||
return &Protocol{
|
||||
ver: "1.21.60",
|
||||
id: proto.ID776,
|
||||
blockTranslator: NewBlockTranslator(blockMapping, blockMappingLatest, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion776), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion776), false),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(deleteDebugStick), blockMapping, blockMappingLatest),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockMapping, blockMappingLatest),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,13 +21,13 @@ var (
|
||||
blockStateData786 []byte
|
||||
)
|
||||
|
||||
func New786(deleteDebugStick bool) *Protocol {
|
||||
itemMapping786 := mapping.NewItemMapping(requiredItemList786, ItemVersion786, deleteDebugStick)
|
||||
func New786(dragonflyMapping bool) *Protocol {
|
||||
itemMapping786 := mapping.NewItemMapping(requiredItemList786, ItemVersion786)
|
||||
blockMapping786 := mapping.NewBlockMapping(blockStateData786)
|
||||
return &Protocol{
|
||||
ver: "1.21.70",
|
||||
id: proto.ID786,
|
||||
blockTranslator: NewBlockTranslator(blockMapping786, blockMappingLatest, chunk.NewNetworkPersistentEncoding(blockMapping786, BlockVersion786), chunk.NewBlockPaletteEncoding(blockMapping786, BlockVersion786), false),
|
||||
itemTranslator: NewItemTranslator(itemMapping786, itemMappingLatest(deleteDebugStick), blockMapping786, blockMappingLatest),
|
||||
itemTranslator: NewItemTranslator(itemMapping786, itemMappingLatest(dragonflyMapping), blockMapping786, blockMappingLatest),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,13 +21,13 @@ var (
|
||||
blockStateData800 []byte
|
||||
)
|
||||
|
||||
func New800(deleteDebugStick bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList800, ItemVersion800, deleteDebugStick)
|
||||
func New800(dragonflyMapping bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList800, ItemVersion800)
|
||||
blockMapping := mapping.NewBlockMapping(blockStateData800)
|
||||
return &Protocol{
|
||||
ver: "1.21.80",
|
||||
id: proto.ID800,
|
||||
blockTranslator: NewBlockTranslator(blockMapping, blockMappingLatest, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion800), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion800), false),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(deleteDebugStick), blockMapping, blockMappingLatest),
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockMapping, blockMappingLatest),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package legacyver
|
||||
import (
|
||||
_ "embed"
|
||||
"github.com/akmalfairuz/legacy-version/mapping"
|
||||
"github.com/sandertv/gophertunnel/minecraft/nbt"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -17,15 +18,33 @@ var (
|
||||
requiredItemList818 []byte
|
||||
//go:embed data/block_states_818.nbt
|
||||
blockStateData818 []byte
|
||||
//go:embed data/dragonfly_latest_vanilla_items.nbt
|
||||
dragonflyLatestVanillaItemsRaw []byte
|
||||
|
||||
itemMappingLatestWithDebugStick = mapping.NewItemMapping(requiredItemList818, ItemVersion818, false)
|
||||
itemMappingLatestWithoutDebugStick = mapping.NewItemMapping(requiredItemList818, ItemVersion818, true)
|
||||
blockMappingLatest = mapping.NewBlockMapping(blockStateData818)
|
||||
itemMappingLatestPocketMine = mapping.NewItemMapping(requiredItemList818, ItemVersion818)
|
||||
itemMappingLatestDragonfly = mapping.NewItemMapping(requiredItemList818, ItemVersion818)
|
||||
blockMappingLatest = mapping.NewBlockMapping(blockStateData818)
|
||||
)
|
||||
|
||||
func itemMappingLatest(deleteDebugStick bool) mapping.Item {
|
||||
if deleteDebugStick {
|
||||
return itemMappingLatestWithoutDebugStick
|
||||
func init() {
|
||||
var m map[string]struct {
|
||||
RuntimeID int32 `nbt:"runtime_id"`
|
||||
ComponentBased bool `nbt:"component_based"`
|
||||
Version int32 `nbt:"version"`
|
||||
Data map[string]any `nbt:"data,omitempty"`
|
||||
}
|
||||
if err := nbt.Unmarshal(dragonflyLatestVanillaItemsRaw, &m); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
for identifier, v := range m {
|
||||
itemMappingLatestDragonfly.SetItemRuntimeID(identifier, v.RuntimeID)
|
||||
}
|
||||
return itemMappingLatestWithDebugStick
|
||||
}
|
||||
|
||||
func itemMappingLatest(dragonflyMapping bool) mapping.Item {
|
||||
if dragonflyMapping {
|
||||
return itemMappingLatestDragonfly
|
||||
}
|
||||
return itemMappingLatestPocketMine
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ type Item interface {
|
||||
Air() int32
|
||||
ItemVersion() uint16
|
||||
ItemEntries() []ItemEntry
|
||||
SetItemRuntimeID(string, int32)
|
||||
}
|
||||
|
||||
type ItemEntry struct {
|
||||
@@ -48,14 +49,13 @@ type DefaultItemMapping struct {
|
||||
itemVersion uint16
|
||||
}
|
||||
|
||||
func NewItemMapping(requiredItemList []byte, itemVersion uint16, deleteDebugStick bool) *DefaultItemMapping {
|
||||
func NewItemMapping(requiredItemList []byte, itemVersion uint16) *DefaultItemMapping {
|
||||
itemRuntimeIDsToNames := make(map[int32]string)
|
||||
itemNamesToRuntimeIDs := make(map[string]int32)
|
||||
itemRuntimeIDToVersion := make(map[int32]uint8)
|
||||
itemRuntimeIDToData := make(map[int32]map[string]any)
|
||||
itemEntries := make([]ItemEntry, 0, 1600)
|
||||
var airRID *int32
|
||||
var debugStickRID *int32
|
||||
|
||||
var m map[string]struct {
|
||||
RuntimeID int16 `json:"runtime_id"`
|
||||
@@ -67,21 +67,6 @@ func NewItemMapping(requiredItemList []byte, itemVersion uint16, deleteDebugStic
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if v, ok := m["minecraft:debug_stick"]; ok {
|
||||
rid := int32(v.RuntimeID)
|
||||
debugStickRID = &rid
|
||||
}
|
||||
|
||||
if deleteDebugStick && debugStickRID != nil {
|
||||
delete(m, "minecraft:debug_stick")
|
||||
for name, data := range m {
|
||||
if int32(data.RuntimeID) > *debugStickRID {
|
||||
data.RuntimeID-- // Shift all runtime IDs down by 1
|
||||
}
|
||||
m[name] = data
|
||||
}
|
||||
}
|
||||
|
||||
for name, data := range m {
|
||||
rid := int32(data.RuntimeID)
|
||||
if name == "minecraft:air" {
|
||||
@@ -121,6 +106,13 @@ func NewItemMapping(requiredItemList []byte, itemVersion uint16, deleteDebugStic
|
||||
return &DefaultItemMapping{itemRuntimeIDsToNames: itemRuntimeIDsToNames, itemNamesToRuntimeIDs: itemNamesToRuntimeIDs, itemRuntimeIDToVersion: itemRuntimeIDToVersion, airRID: *airRID, itemVersion: itemVersion, itemRuntimeIDToData: itemRuntimeIDToData, itemEntries: itemEntries}
|
||||
}
|
||||
|
||||
func (m *DefaultItemMapping) SetItemRuntimeID(name string, runtimeID int32) {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
m.itemNamesToRuntimeIDs[name] = runtimeID
|
||||
m.itemRuntimeIDsToNames[runtimeID] = name
|
||||
}
|
||||
|
||||
func (m *DefaultItemMapping) ItemRuntimeIDToName(runtimeID int32) (name string, found bool) {
|
||||
defer m.mu.Unlock()
|
||||
m.mu.Lock()
|
||||
|
||||
Reference in New Issue
Block a user