From 2bb1292e0325274a3807ed6b7de1f9ec5b83679a Mon Sep 17 00:00:00 2001 From: AkmalFairuz Date: Sat, 23 Aug 2025 08:41:20 +0700 Subject: [PATCH] Add DowngradeLevelChunkPacket --- go.mod | 11 +++--- go.sum | 6 +++ legacyver/all.go | 47 +++++++++++++++++++++++ legacyver/block_translator.go | 72 +++++++++++++++++++++-------------- legacyver/v649.go | 8 ++-- legacyver/v662.go | 8 ++-- legacyver/v671.go | 8 ++-- legacyver/v685.go | 8 ++-- legacyver/v686.go | 8 ++-- legacyver/v712.go | 8 ++-- legacyver/v729.go | 8 ++-- legacyver/v748.go | 8 ++-- legacyver/v766.go | 7 ++-- legacyver/v776.go | 8 ++-- legacyver/v786.go | 9 ++--- legacyver/v800.go | 7 ++-- legacyver/v818.go | 7 ++-- legacyver/v819.go | 7 ++-- 18 files changed, 144 insertions(+), 101 deletions(-) diff --git a/go.mod b/go.mod index 2fe76fb..031a6f1 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,9 @@ module github.com/akmalfairuz/legacy-version -go 1.24 - -toolchain go1.24.0 +go 1.24.0 require ( - github.com/df-mc/dragonfly v0.10.5 + github.com/df-mc/dragonfly v0.10.6-0.20250817203556-60bcf6b7432b github.com/df-mc/worldupgrader v1.0.19 github.com/go-gl/mathgl v1.2.0 github.com/google/uuid v1.6.0 @@ -14,13 +12,14 @@ require ( github.com/samber/lo v1.49.1 github.com/sandertv/gophertunnel v1.49.0 github.com/segmentio/fasthash v1.0.3 - golang.org/x/exp v0.0.0-20250718183923-645b1fa84792 + golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b golang.org/x/image v0.25.0 golang.org/x/oauth2 v0.30.0 ) require ( github.com/brentp/intintmap v0.0.0-20190211203843-30dc0ade9af9 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/df-mc/goleveldb v1.1.9 // indirect github.com/go-jose/go-jose/v4 v4.1.2 // indirect github.com/golang/snappy v1.0.0 // indirect @@ -28,7 +27,7 @@ require ( github.com/muhammadmuzzammil1998/jsonc v1.0.0 // indirect github.com/sandertv/go-raknet v1.14.3-0.20250305181847-6af3e95113d6 // indirect golang.org/x/crypto v0.41.0 // indirect - golang.org/x/mod v0.26.0 // indirect + golang.org/x/mod v0.27.0 // indirect golang.org/x/net v0.43.0 // indirect golang.org/x/text v0.28.0 // indirect ) diff --git a/go.sum b/go.sum index 79970fc..1e1e577 100644 --- a/go.sum +++ b/go.sum @@ -14,6 +14,8 @@ github.com/df-mc/dragonfly v0.10.3 h1:t0mxRvjjgG8uBevqqzejJVL2M6obi6RYePMTPDlXo7 github.com/df-mc/dragonfly v0.10.3/go.mod h1:pO7nuyRKV50ZVZzB7AhTMU/0p4cvk1/yCu43vFqAzcI= github.com/df-mc/dragonfly v0.10.5 h1:vn3Mwh7vWPDtIdss4QEOP8vSZGHRAjyLvrOEM5mEUI0= github.com/df-mc/dragonfly v0.10.5/go.mod h1:/KjoqvIe5+ZxuFUPSRey9UzQS3GkTgAyTH0jTYFMs/g= +github.com/df-mc/dragonfly v0.10.6-0.20250817203556-60bcf6b7432b h1:i3nfD4EFsuIZJfod6W9/lovMw8rzwCjGHRVKOBu1nXo= +github.com/df-mc/dragonfly v0.10.6-0.20250817203556-60bcf6b7432b/go.mod h1:1B3NiEGWj0S9U4QlsL58HPvnmgPlaFCm/pCVWdnrMH0= github.com/df-mc/goleveldb v1.1.9 h1:ihdosZyy5jkQKrxucTQmN90jq/2lUwQnJZjIYIC/9YU= github.com/df-mc/goleveldb v1.1.9/go.mod h1:+NHCup03Sci5q84APIA21z3iPZCuk6m6ABtg4nANCSk= github.com/df-mc/worldupgrader v1.0.18 h1:Q34X9ID/hGuDyj9oiq+dpyjOaJdNxhVmVUepf/EPYDA= @@ -96,6 +98,8 @@ golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= golang.org/x/exp v0.0.0-20250718183923-645b1fa84792 h1:R9PFI6EUdfVKgwKjZef7QIwGcBKu86OEFpJ9nUEP2l4= golang.org/x/exp v0.0.0-20250718183923-645b1fa84792/go.mod h1:A+z0yzpGtvnG90cToK5n2tu8UJVP2XUATh+r+sfOOOc= +golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b h1:DXr+pvt3nC887026GRP39Ej11UATqWDmWuS99x26cD0= +golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b/go.mod h1:4QTo5u+SEIbbKW1RacMZq1YEfOBqeXa19JeshGi+zc4= golang.org/x/image v0.21.0 h1:c5qV36ajHpdj4Qi0GnE0jUc/yuo33OLFaa0d+crTD5s= golang.org/x/image v0.21.0/go.mod h1:vUbsLavqK/W303ZroQQVKQ+Af3Yl6Uz1Ppu5J/cLz78= golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ= @@ -108,6 +112,8 @@ golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= diff --git a/legacyver/all.go b/legacyver/all.go index fbcc035..2e6d5c4 100644 --- a/legacyver/all.go +++ b/legacyver/all.go @@ -1,7 +1,20 @@ package legacyver import ( + "fmt" + "sync" + + "github.com/akmalfairuz/legacy-version/internal/chunk" + "github.com/akmalfairuz/legacy-version/mapping" "github.com/sandertv/gophertunnel/minecraft" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +var ( + EnableChunkTranslation = true + + blockTranslatorsMu sync.RWMutex + blockTranslators map[int32]BlockTranslator ) // All returns a slice of all legacy protocol versions that are supported. dragonflyMapping @@ -24,3 +37,37 @@ func All(dragonflyMapping bool) []minecraft.Protocol { New649(dragonflyMapping), } } + +// lookupOrCreateBlockTranslator looks up a block translator for the given protocol version. +func lookupOrCreateBlockTranslator(protocolVersion, blockVersion int32, blockStateData []byte) BlockTranslator { + blockTranslatorsMu.RLock() + if translator, ok := blockTranslators[protocolVersion]; ok { + blockTranslatorsMu.RUnlock() + return translator + } + blockTranslatorsMu.RUnlock() + + blockTranslatorsMu.Lock() + defer blockTranslatorsMu.Unlock() + + if translator, ok := blockTranslators[protocolVersion]; ok { + return translator + } + + blockMapping := mapping.NewBlockMapping(blockStateData) + ret := NewBlockTranslator(blockMapping, blockMappingLatest, chunk.NewNetworkPersistentEncoding(blockMapping, blockVersion), chunk.NewBlockPaletteEncoding(blockMapping, blockVersion), false) + blockTranslators[protocolVersion] = ret + return ret +} + +// DowngradeLevelChunkPacket downgrades the given level chunk packet to the specified protocol version. +func DowngradeLevelChunkPacket(protocolVersion int32, pk *packet.LevelChunk) error { + blockTranslatorsMu.RLock() + translator, ok := blockTranslators[protocolVersion] + blockTranslatorsMu.RUnlock() + if !ok { + return fmt.Errorf("no block translator found for protocol version %d", protocolVersion) + } + + return translator.DowngradeLevelChunk(pk) +} diff --git a/legacyver/block_translator.go b/legacyver/block_translator.go index 95dd5c3..b7c2a38 100644 --- a/legacyver/block_translator.go +++ b/legacyver/block_translator.go @@ -4,7 +4,6 @@ import ( "bytes" _ "embed" - "github.com/akmalfairuz/legacy-version/internal" "github.com/akmalfairuz/legacy-version/internal/chunk" "github.com/akmalfairuz/legacy-version/mapping" "github.com/df-mc/dragonfly/server/block/cube" @@ -31,6 +30,10 @@ type BlockTranslator interface { DowngradeBlockPackets([]packet.Packet, *minecraft.Conn) (result []packet.Packet) // UpgradeBlockPackets upgrades the input block packets to the latest block packets. UpgradeBlockPackets([]packet.Packet, *minecraft.Conn) (result []packet.Packet) + // DowngradeLevelChunk downgrades the given LevelChunk packet to a legacy format. + DowngradeLevelChunk(*packet.LevelChunk) error + // BlockMapping returns the block mapping used by this translator. + BlockMapping() mapping.Block } type DefaultBlockTranslator struct { @@ -45,18 +48,18 @@ func NewBlockTranslator(mapping mapping.Block, latestMapping mapping.Block, pse return &DefaultBlockTranslator{mapping: mapping, latest: latestMapping, pse: pse, pe: pe, oldFormat: oldFormat} } -func (t *DefaultBlockTranslator) downgradeLevelChunkPacket(pk *packet.LevelChunk) error { +func (t *DefaultBlockTranslator) BlockMapping() mapping.Block { + return t.mapping +} + +func (t *DefaultBlockTranslator) DowngradeLevelChunk(pk *packet.LevelChunk) error { count := int(pk.SubChunkCount) if count == protocol.SubChunkRequestModeLimitless || count == protocol.SubChunkRequestModeLimited { return nil } buf := bytes.NewBuffer(pk.RawPayload) - writeBuf := internal.BufferPool.Get().(*bytes.Buffer) - defer func() { - writeBuf.Reset() - internal.BufferPool.Put(writeBuf) - }() + writeBuf := bytes.NewBuffer(nil) if !pk.CacheEnabled { c, err := chunk.NetworkDecode(t.latest.Air(), buf, count, false, world.Overworld.Range(), LatestNetworkPersistentEncoding, LatestBlockPaletteEncoding) if err != nil { @@ -76,12 +79,12 @@ func (t *DefaultBlockTranslator) downgradeLevelChunkPacket(pk *packet.LevelChunk countBorder, err := buf.ReadByte() if err != nil { pk.RawPayload = append(writeBuf.Bytes(), safeBytes...) - return nil + return err } borderBytes := make([]byte, countBorder) if _, err = buf.Read(borderBytes); err != nil { pk.RawPayload = append(writeBuf.Bytes(), safeBytes...) - return nil + return err } writeBuf.WriteByte(countBorder) writeBuf.Write(borderBytes) @@ -107,8 +110,17 @@ func (t *DefaultBlockTranslator) DowngradeBlockPackets(pks []packet.Packet, conn for _, pk := range pks { switch pk := pk.(type) { case *packet.LevelChunk: - _ = t.downgradeLevelChunkPacket(pk) + if !EnableChunkTranslation { + break + } + if err := t.DowngradeLevelChunk(pk); err != nil { + //fmt.Println(err) + break + } case *packet.SubChunk: + if !EnableChunkTranslation { + break + } r := world.Overworld.Range() if t.oldFormat { r = cube.Range{0, 255} @@ -147,25 +159,27 @@ func (t *DefaultBlockTranslator) DowngradeBlockPackets(pks []packet.Packet, conn pk.SubChunkEntries[i] = entry } } - case *packet.ClientCacheMissResponse: - r := world.Overworld.Range() - if t.oldFormat { - r = cube.Range{0, 255} - } - - for i, blob := range pk.Blobs { - buf := bytes.NewBuffer(blob.Payload) - ind := byte(0) - subChunk, err := chunk.DecodeSubChunk(t.latest.Air(), r, buf, &ind, chunk.NetworkEncoding, LatestNetworkPersistentEncoding, LatestBlockPaletteEncoding) - if err != nil { - // Has a possibility to be a biome, ignore then - continue - } - t.DowngradeSubChunk(subChunk) - - blob.Payload = append(chunk.EncodeSubChunk(subChunk, chunk.NetworkEncoding, t.pe, chunk.SubChunkVersion9, r, int(ind)), buf.Bytes()...) - pk.Blobs[i] = blob - } + //case *packet.ClientCacheMissResponse: + // if EnableChunkTranslation { + // r := world.Overworld.Range() + // if t.oldFormat { + // r = cube.Range{0, 255} + // } + // + // for i, blob := range pk.Blobs { + // buf := bytes.NewBuffer(blob.Payload) + // ind := byte(0) + // subChunk, err := chunk.DecodeSubChunk(t.latest.Air(), r, buf, &ind, chunk.NetworkEncoding, LatestNetworkPersistentEncoding, LatestBlockPaletteEncoding) + // if err != nil { + // // Has a possibility to be a biome, ignore then + // continue + // } + // t.DowngradeSubChunk(subChunk) + // + // blob.Payload = append(chunk.EncodeSubChunk(subChunk, chunk.NetworkEncoding, t.pe, chunk.SubChunkVersion9, r, int(ind)), buf.Bytes()...) + // pk.Blobs[i] = blob + // } + // } case *packet.UpdateSubChunkBlocks: for i, block := range pk.Blocks { block.BlockRuntimeID = t.DowngradeBlockRuntimeID(block.BlockRuntimeID) diff --git a/legacyver/v649.go b/legacyver/v649.go index 52b4bb2..20539e8 100644 --- a/legacyver/v649.go +++ b/legacyver/v649.go @@ -3,7 +3,6 @@ package legacyver import ( _ "embed" - "github.com/akmalfairuz/legacy-version/internal/chunk" "github.com/akmalfairuz/legacy-version/legacyver/proto" "github.com/akmalfairuz/legacy-version/mapping" ) @@ -25,12 +24,11 @@ var ( // New649 ... func New649(dragonflyMapping bool) *Protocol { itemMapping := mapping.NewItemMapping(requiredItemList649, ItemVersion649) - blockMapping := mapping.NewBlockMapping(blockStateData649) - + blockTranslator := lookupOrCreateBlockTranslator(649, BlockVersion649, 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(dragonflyMapping), blockMapping, blockMappingLatest), + blockTranslator: blockTranslator, + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockTranslator.BlockMapping(), blockMappingLatest), } } diff --git a/legacyver/v662.go b/legacyver/v662.go index 258d7d5..fa083e9 100644 --- a/legacyver/v662.go +++ b/legacyver/v662.go @@ -3,7 +3,6 @@ package legacyver import ( _ "embed" - "github.com/akmalfairuz/legacy-version/internal/chunk" "github.com/akmalfairuz/legacy-version/legacyver/proto" "github.com/akmalfairuz/legacy-version/mapping" ) @@ -25,12 +24,11 @@ var ( // New662 ... func New662(dragonflyMapping bool) *Protocol { itemMapping := mapping.NewItemMapping(requiredItemList662, ItemVersion662) - blockMapping := mapping.NewBlockMapping(blockStateData662) - + blockTranslator := lookupOrCreateBlockTranslator(662, BlockVersion662, 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(dragonflyMapping), blockMapping, blockMappingLatest), + blockTranslator: blockTranslator, + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockTranslator.BlockMapping(), blockMappingLatest), } } diff --git a/legacyver/v671.go b/legacyver/v671.go index cb51048..bd83485 100644 --- a/legacyver/v671.go +++ b/legacyver/v671.go @@ -3,7 +3,6 @@ package legacyver import ( _ "embed" - "github.com/akmalfairuz/legacy-version/internal/chunk" "github.com/akmalfairuz/legacy-version/legacyver/proto" "github.com/akmalfairuz/legacy-version/mapping" ) @@ -25,12 +24,11 @@ var ( // New671 ... func New671(dragonflyMapping bool) *Protocol { itemMapping := mapping.NewItemMapping(requiredItemList671, ItemVersion671) - blockMapping := mapping.NewBlockMapping(blockStateData671) - + blockTranslator := lookupOrCreateBlockTranslator(671, BlockVersion671, 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(dragonflyMapping), blockMapping, blockMappingLatest), + blockTranslator: blockTranslator, + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockTranslator.BlockMapping(), blockMappingLatest), } } diff --git a/legacyver/v685.go b/legacyver/v685.go index b8062dc..61061f0 100644 --- a/legacyver/v685.go +++ b/legacyver/v685.go @@ -3,7 +3,6 @@ package legacyver import ( _ "embed" - "github.com/akmalfairuz/legacy-version/internal/chunk" "github.com/akmalfairuz/legacy-version/legacyver/proto" "github.com/akmalfairuz/legacy-version/mapping" ) @@ -18,12 +17,11 @@ const ( // New685 uses same data as 686 func New685(dragonflyMapping bool) *Protocol { itemMapping := mapping.NewItemMapping(requiredItemList686, ItemVersion685) - blockMapping := mapping.NewBlockMapping(blockStateData686) - + blockTranslator := lookupOrCreateBlockTranslator(685, BlockVersion685, 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(dragonflyMapping), blockMapping, blockMappingLatest), + blockTranslator: blockTranslator, + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockTranslator.BlockMapping(), blockMappingLatest), } } diff --git a/legacyver/v686.go b/legacyver/v686.go index 9713b7e..25307e2 100644 --- a/legacyver/v686.go +++ b/legacyver/v686.go @@ -3,7 +3,6 @@ package legacyver import ( _ "embed" - "github.com/akmalfairuz/legacy-version/internal/chunk" "github.com/akmalfairuz/legacy-version/legacyver/proto" "github.com/akmalfairuz/legacy-version/mapping" ) @@ -24,12 +23,11 @@ var ( func New686(dragonflyMapping bool) *Protocol { itemMapping := mapping.NewItemMapping(requiredItemList686, ItemVersion686) - blockMapping := mapping.NewBlockMapping(blockStateData686) - + blockTranslator := lookupOrCreateBlockTranslator(686, BlockVersion686, 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(dragonflyMapping), blockMapping, blockMappingLatest), + blockTranslator: blockTranslator, + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockTranslator.BlockMapping(), blockMappingLatest), } } diff --git a/legacyver/v712.go b/legacyver/v712.go index e7ab4ae..7618324 100644 --- a/legacyver/v712.go +++ b/legacyver/v712.go @@ -3,7 +3,6 @@ package legacyver import ( _ "embed" - "github.com/akmalfairuz/legacy-version/internal/chunk" "github.com/akmalfairuz/legacy-version/legacyver/proto" "github.com/akmalfairuz/legacy-version/mapping" ) @@ -24,12 +23,11 @@ var ( func New712(dragonflyMapping bool) *Protocol { itemMapping := mapping.NewItemMapping(requiredItemList712, ItemVersion712) - blockMapping := mapping.NewBlockMapping(blockStateData712) - + blockTranslator := lookupOrCreateBlockTranslator(712, BlockVersion712, 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(dragonflyMapping), blockMapping, blockMappingLatest), + blockTranslator: blockTranslator, + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockTranslator.BlockMapping(), blockMappingLatest), } } diff --git a/legacyver/v729.go b/legacyver/v729.go index 322e09d..9f33734 100644 --- a/legacyver/v729.go +++ b/legacyver/v729.go @@ -3,7 +3,6 @@ package legacyver import ( _ "embed" - "github.com/akmalfairuz/legacy-version/internal/chunk" "github.com/akmalfairuz/legacy-version/legacyver/proto" "github.com/akmalfairuz/legacy-version/mapping" ) @@ -24,12 +23,11 @@ var ( func New729(dragonflyMapping bool) *Protocol { itemMapping := mapping.NewItemMapping(requiredItemList729, ItemVersion729) - blockMapping := mapping.NewBlockMapping(blockStateData729) - + blockTranslator := lookupOrCreateBlockTranslator(729, BlockVersion729, 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(dragonflyMapping), blockMapping, blockMappingLatest), + blockTranslator: blockTranslator, + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockTranslator.BlockMapping(), blockMappingLatest), } } diff --git a/legacyver/v748.go b/legacyver/v748.go index fd503df..0bb3afd 100644 --- a/legacyver/v748.go +++ b/legacyver/v748.go @@ -3,7 +3,6 @@ package legacyver import ( _ "embed" - "github.com/akmalfairuz/legacy-version/internal/chunk" "github.com/akmalfairuz/legacy-version/legacyver/proto" "github.com/akmalfairuz/legacy-version/mapping" ) @@ -24,12 +23,11 @@ var ( func New748(dragonflyMapping bool) *Protocol { itemMapping := mapping.NewItemMapping(requiredItemList748, ItemVersion748) - blockMapping := mapping.NewBlockMapping(blockStateData748) - + blockTranslator := lookupOrCreateBlockTranslator(748, BlockVersion748, 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(dragonflyMapping), blockMapping, blockMappingLatest), + blockTranslator: blockTranslator, + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockTranslator.BlockMapping(), blockMappingLatest), } } diff --git a/legacyver/v766.go b/legacyver/v766.go index 7d73daa..c9d49a8 100644 --- a/legacyver/v766.go +++ b/legacyver/v766.go @@ -3,7 +3,6 @@ package legacyver import ( _ "embed" - "github.com/akmalfairuz/legacy-version/internal/chunk" "github.com/akmalfairuz/legacy-version/legacyver/proto" "github.com/akmalfairuz/legacy-version/mapping" ) @@ -24,11 +23,11 @@ var ( func New766(dragonflyMapping bool) *Protocol { itemMapping := mapping.NewItemMapping(requiredItemList766, ItemVersion766) - blockMapping := mapping.NewBlockMapping(blockStateData766) + blockTranslator := lookupOrCreateBlockTranslator(766, BlockVersion766, 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(dragonflyMapping), blockMapping, blockMappingLatest), + blockTranslator: blockTranslator, + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockTranslator.BlockMapping(), blockMappingLatest), } } diff --git a/legacyver/v776.go b/legacyver/v776.go index 9c82f48..47b6ea6 100644 --- a/legacyver/v776.go +++ b/legacyver/v776.go @@ -3,7 +3,6 @@ package legacyver import ( _ "embed" - "github.com/akmalfairuz/legacy-version/internal/chunk" "github.com/akmalfairuz/legacy-version/legacyver/proto" "github.com/akmalfairuz/legacy-version/mapping" ) @@ -24,12 +23,11 @@ var ( func New776(dragonflyMapping bool) *Protocol { itemMapping := mapping.NewItemMapping(requiredItemList776, ItemVersion776) - blockMapping := mapping.NewBlockMapping(blockStateData776) - + blockTranslator := lookupOrCreateBlockTranslator(776, BlockVersion776, 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(dragonflyMapping), blockMapping, blockMappingLatest), + blockTranslator: blockTranslator, + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockTranslator.BlockMapping(), blockMappingLatest), } } diff --git a/legacyver/v786.go b/legacyver/v786.go index a963d99..ee7968d 100644 --- a/legacyver/v786.go +++ b/legacyver/v786.go @@ -3,7 +3,6 @@ package legacyver import ( _ "embed" - "github.com/akmalfairuz/legacy-version/internal/chunk" "github.com/akmalfairuz/legacy-version/legacyver/proto" "github.com/akmalfairuz/legacy-version/mapping" ) @@ -23,12 +22,12 @@ var ( ) func New786(dragonflyMapping bool) *Protocol { - itemMapping786 := mapping.NewItemMapping(requiredItemList786, ItemVersion786) - blockMapping786 := mapping.NewBlockMapping(blockStateData786) + itemMapping := mapping.NewItemMapping(requiredItemList786, ItemVersion786) + blockTranslator := lookupOrCreateBlockTranslator(786, BlockVersion786, 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(dragonflyMapping), blockMapping786, blockMappingLatest), + blockTranslator: blockTranslator, + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockTranslator.BlockMapping(), blockMappingLatest), } } diff --git a/legacyver/v800.go b/legacyver/v800.go index a31df6c..79f8dcf 100644 --- a/legacyver/v800.go +++ b/legacyver/v800.go @@ -3,7 +3,6 @@ package legacyver import ( _ "embed" - "github.com/akmalfairuz/legacy-version/internal/chunk" "github.com/akmalfairuz/legacy-version/legacyver/proto" "github.com/akmalfairuz/legacy-version/mapping" ) @@ -24,11 +23,11 @@ var ( func New800(dragonflyMapping bool) *Protocol { itemMapping := mapping.NewItemMapping(requiredItemList800, ItemVersion800) - blockMapping := mapping.NewBlockMapping(blockStateData800) + blockTranslator := lookupOrCreateBlockTranslator(800, BlockVersion800, 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(dragonflyMapping), blockMapping, blockMappingLatest), + blockTranslator: blockTranslator, + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockTranslator.BlockMapping(), blockMappingLatest), } } diff --git a/legacyver/v818.go b/legacyver/v818.go index 10f79ee..f61aca5 100644 --- a/legacyver/v818.go +++ b/legacyver/v818.go @@ -3,7 +3,6 @@ package legacyver import ( _ "embed" - "github.com/akmalfairuz/legacy-version/internal/chunk" "github.com/akmalfairuz/legacy-version/legacyver/proto" "github.com/akmalfairuz/legacy-version/mapping" ) @@ -24,11 +23,11 @@ var ( func New818(dragonflyMapping bool) *Protocol { itemMapping := mapping.NewItemMapping(requiredItemList818, ItemVersion818) - blockMapping := mapping.NewBlockMapping(blockStateData818) + blockTranslator := lookupOrCreateBlockTranslator(818, BlockVersion818, blockStateData818) return &Protocol{ ver: "1.21.90", id: proto.ID818, - blockTranslator: NewBlockTranslator(blockMapping, blockMappingLatest, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion818), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion818), false), - itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockMapping, blockMappingLatest), + blockTranslator: blockTranslator, + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockTranslator.BlockMapping(), blockMappingLatest), } } diff --git a/legacyver/v819.go b/legacyver/v819.go index ff6a53f..34a1369 100644 --- a/legacyver/v819.go +++ b/legacyver/v819.go @@ -3,7 +3,6 @@ package legacyver import ( _ "embed" - "github.com/akmalfairuz/legacy-version/internal/chunk" "github.com/akmalfairuz/legacy-version/legacyver/proto" "github.com/akmalfairuz/legacy-version/mapping" ) @@ -24,11 +23,11 @@ var ( func New819(dragonflyMapping bool) *Protocol { itemMapping := mapping.NewItemMapping(requiredItemList819, ItemVersion819) - blockMapping := mapping.NewBlockMapping(blockStateData819) + blockTranslator := lookupOrCreateBlockTranslator(819, BlockVersion819, blockStateData819) return &Protocol{ ver: "1.21.90", id: proto.ID819, - blockTranslator: NewBlockTranslator(blockMapping, blockMappingLatest, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion819), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion819), false), - itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockMapping, blockMappingLatest), + blockTranslator: blockTranslator, + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockTranslator.BlockMapping(), blockMappingLatest), } }