Avoid relying on GameData()
This commit is contained in:
@@ -46,6 +46,8 @@ type DefaultBlockTranslator struct {
|
|||||||
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}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user