Avoid relying on GameData()

This commit is contained in:
Javier León
2026-01-03 05:47:26 -03:00
parent 7a4d57fa6a
commit e88d3ad156
2 changed files with 19 additions and 13 deletions

View File

@@ -39,13 +39,15 @@ type BlockTranslator interface {
BlockMapping() mapping.Block BlockMapping() mapping.Block
} }
type DefaultBlockTranslator struct { type DefaultBlockTranslator struct {
mapping mapping.Block mapping mapping.Block
latest mapping.Block latest mapping.Block
pse chunk.Encoding pse chunk.Encoding
pe chunk.PaletteEncoding pe chunk.PaletteEncoding
oldFormat bool oldFormat bool
dimensionDefinitions []protocol.DimensionDefinition dimensionDefinitions []protocol.DimensionDefinition
currentDimension int32 currentDimension int32
UseBlockNetworkIDHashes bool
BaseGameVersion string
} }
func NewBlockTranslator(mapping mapping.Block, latestMapping mapping.Block, pse chunk.Encoding, pe chunk.PaletteEncoding, oldFormat bool) *DefaultBlockTranslator { func NewBlockTranslator(mapping mapping.Block, latestMapping mapping.Block, pse chunk.Encoding, pe chunk.PaletteEncoding, oldFormat bool) *DefaultBlockTranslator {
@@ -65,7 +67,7 @@ func (t *DefaultBlockTranslator) DowngradeLevelChunk(pk *packet.LevelChunk, conn
buf := bytes.NewBuffer(pk.RawPayload) buf := bytes.NewBuffer(pk.RawPayload)
writeBuf := bytes.NewBuffer(nil) writeBuf := bytes.NewBuffer(nil)
if !pk.CacheEnabled { if !pk.CacheEnabled {
c, err := chunk.NetworkDecode(t.latest.Air(), buf, count, false, t.getRange(conn), LatestNetworkPersistentEncoding, LatestBlockPaletteEncoding, t.latest, conn.GameData().UseBlockNetworkIDHashes) c, err := chunk.NetworkDecode(t.latest.Air(), buf, count, false, t.getRange(conn), LatestNetworkPersistentEncoding, LatestBlockPaletteEncoding, t.latest, t.UseBlockNetworkIDHashes)
if err != nil { if err != nil {
return err return err
} }
@@ -136,7 +138,7 @@ func (t *DefaultBlockTranslator) DowngradeBlockPackets(pks []packet.Packet, conn
writeBuf := bytes.NewBuffer(nil) writeBuf := bytes.NewBuffer(nil)
if !pk.CacheEnabled && !conn.ClientCacheEnabled() { if !pk.CacheEnabled && !conn.ClientCacheEnabled() {
ind := byte(i) ind := byte(i)
subChunk, err := chunk.DecodeSubChunk(t.latest.Air(), r, buf, &ind, chunk.NetworkEncoding, LatestNetworkPersistentEncoding, LatestBlockPaletteEncoding, t.latest, conn.GameData().UseBlockNetworkIDHashes) subChunk, err := chunk.DecodeSubChunk(t.latest.Air(), r, buf, &ind, chunk.NetworkEncoding, LatestNetworkPersistentEncoding, LatestBlockPaletteEncoding, t.latest, t.UseBlockNetworkIDHashes)
if err != nil { if err != nil {
//fmt.Println(err) //fmt.Println(err)
continue continue
@@ -173,7 +175,7 @@ func (t *DefaultBlockTranslator) DowngradeBlockPackets(pks []packet.Packet, conn
for i, blob := range pk.Blobs { for i, blob := range pk.Blobs {
buf := bytes.NewBuffer(blob.Payload) buf := bytes.NewBuffer(blob.Payload)
ind := byte(0) ind := byte(0)
subChunk, err := chunk.DecodeSubChunk(t.latest.Air(), r, buf, &ind, chunk.NetworkEncoding, LatestNetworkPersistentEncoding, LatestBlockPaletteEncoding, t.latest, conn.GameData().UseBlockNetworkIDHashes) subChunk, err := chunk.DecodeSubChunk(t.latest.Air(), r, buf, &ind, chunk.NetworkEncoding, LatestNetworkPersistentEncoding, LatestBlockPaletteEncoding, t.latest, t.UseBlockNetworkIDHashes)
if err != nil { if err != nil {
// Has a possibility to be a biome, ignore then // Has a possibility to be a biome, ignore then
continue continue
@@ -234,6 +236,8 @@ func (t *DefaultBlockTranslator) DowngradeBlockPackets(pks []packet.Packet, conn
case *packet.SetActorData: case *packet.SetActorData:
//pk.EntityMetadata = t.downgradeEntityMetadata(pk.EntityMetadata) //pk.EntityMetadata = t.downgradeEntityMetadata(pk.EntityMetadata)
case *packet.StartGame: case *packet.StartGame:
t.UseBlockNetworkIDHashes = pk.UseBlockNetworkIDHashes
t.BaseGameVersion = pk.BaseGameVersion
t.latest.Adjust(pk.Blocks) t.latest.Adjust(pk.Blocks)
t.mapping.Adjust(pk.Blocks) t.mapping.Adjust(pk.Blocks)
case *packet.ResourcePackStack: case *packet.ResourcePackStack:
@@ -366,7 +370,7 @@ func (t *DefaultBlockTranslator) getRange(conn *minecraft.Conn) (r cube.Range) {
case 0: case 0:
dimName = "minecraft:overworld" dimName = "minecraft:overworld"
r = world.Overworld.Range() r = world.Overworld.Range()
v, err := version.NewVersion(conn.GameData().BaseGameVersion) v, err := version.NewVersion(t.BaseGameVersion)
if err == nil && v.LessThan(cavesAndCliffsVersion) { if err == nil && v.LessThan(cavesAndCliffsVersion) {
r = cube.Range{0, 255} r = cube.Range{0, 255}
} }

View File

@@ -154,6 +154,7 @@ type Protocol struct {
blockTranslator BlockTranslator blockTranslator BlockTranslator
itemTranslator ItemTranslator itemTranslator ItemTranslator
Items []protocol.ItemEntry
} }
func (p *Protocol) Ver() string { func (p *Protocol) Ver() string {
@@ -533,8 +534,8 @@ func (p *Protocol) downgradePackets(pks []packet.Packet, conn *minecraft.Conn) [
pk.GameVersion = p.ver pk.GameVersion = p.ver
pk.BaseGameVersion = p.ver pk.BaseGameVersion = p.ver
items := make([]proto.LegacyItemRegistryEntry, len(conn.GameData().Items)) items := make([]proto.LegacyItemRegistryEntry, len(p.Items))
for i, it := range conn.GameData().Items { for i, it := range p.Items {
items[i] = (&proto.LegacyItemRegistryEntry{}).FromLatest(it) items[i] = (&proto.LegacyItemRegistryEntry{}).FromLatest(it)
} }
@@ -628,6 +629,7 @@ func (p *Protocol) downgradePackets(pks []packet.Packet, conn *minecraft.Conn) [
CodeStatus: pk.CodeStatus, CodeStatus: pk.CodeStatus,
} }
case *packet.ItemRegistry: case *packet.ItemRegistry:
p.Items = pk.Items
items := make([]proto.ItemEntry, len(pk.Items)) items := make([]proto.ItemEntry, len(pk.Items))
for i, it := range pk.Items { for i, it := range pk.Items {
items[i] = (&proto.ItemEntry{}).FromLatest(it) items[i] = (&proto.ItemEntry{}).FromLatest(it)