update 1.21.111
This commit is contained in:
@@ -1,13 +1,27 @@
|
||||
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 = make(map[int32]BlockTranslator)
|
||||
)
|
||||
|
||||
// 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{
|
||||
New827(dragonflyMapping),
|
||||
New819(dragonflyMapping),
|
||||
New818(dragonflyMapping),
|
||||
New800(dragonflyMapping),
|
||||
@@ -24,3 +38,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)
|
||||
}
|
||||
|
||||
@@ -31,6 +31,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,63 +49,79 @@ func NewBlockTranslator(mapping mapping.Block, latestMapping mapping.Block, pse
|
||||
return &DefaultBlockTranslator{mapping: mapping, latest: latestMapping, pse: pse, pe: pe, oldFormat: oldFormat}
|
||||
}
|
||||
|
||||
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 := bytes.NewBuffer(nil)
|
||||
if !pk.CacheEnabled {
|
||||
c, err := chunk.NetworkDecode(t.latest.Air(), buf, count, false, world.Overworld.Range(), LatestNetworkPersistentEncoding, LatestBlockPaletteEncoding)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c = t.DowngradeChunk(c)
|
||||
|
||||
payload, err := chunk.NetworkEncode(t.mapping.Air(), c, t.oldFormat, t.pe)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
writeBuf.Write(payload)
|
||||
pk.SubChunkCount = uint32(len(c.Sub()))
|
||||
}
|
||||
safeBytes := buf.Bytes()
|
||||
|
||||
countBorder, err := buf.ReadByte()
|
||||
if err != nil {
|
||||
pk.RawPayload = append(writeBuf.Bytes(), safeBytes...)
|
||||
return err
|
||||
}
|
||||
borderBytes := make([]byte, countBorder)
|
||||
if _, err = buf.Read(borderBytes); err != nil {
|
||||
pk.RawPayload = append(writeBuf.Bytes(), safeBytes...)
|
||||
return err
|
||||
}
|
||||
writeBuf.WriteByte(countBorder)
|
||||
writeBuf.Write(borderBytes)
|
||||
|
||||
enc := nbt.NewEncoderWithEncoding(writeBuf, nbt.NetworkLittleEndian)
|
||||
dec := nbt.NewDecoderWithEncoding(buf, nbt.NetworkLittleEndian)
|
||||
for {
|
||||
var decNbt map[string]any
|
||||
if err = dec.Decode(&decNbt); err != nil {
|
||||
break
|
||||
}
|
||||
t.mapping.DowngradeBlockActorData(decNbt)
|
||||
|
||||
if err = enc.Encode(decNbt); err != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
pk.RawPayload = append(writeBuf.Bytes(), buf.Bytes()...)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t *DefaultBlockTranslator) DowngradeBlockPackets(pks []packet.Packet, conn *minecraft.Conn) (result []packet.Packet) {
|
||||
for _, pk := range pks {
|
||||
switch pk := pk.(type) {
|
||||
case *packet.LevelChunk:
|
||||
count := int(pk.SubChunkCount)
|
||||
if count == protocol.SubChunkRequestModeLimitless || count == protocol.SubChunkRequestModeLimited {
|
||||
if !EnableChunkTranslation {
|
||||
break
|
||||
}
|
||||
|
||||
buf := bytes.NewBuffer(pk.RawPayload)
|
||||
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 {
|
||||
//fmt.Println(err)
|
||||
break
|
||||
}
|
||||
c = t.DowngradeChunk(c)
|
||||
|
||||
payload, err := chunk.NetworkEncode(t.mapping.Air(), c, t.oldFormat, t.pe)
|
||||
if err != nil {
|
||||
//fmt.Println(err)
|
||||
break
|
||||
}
|
||||
writeBuf.Write(payload)
|
||||
pk.SubChunkCount = uint32(len(c.Sub()))
|
||||
}
|
||||
safeBytes := buf.Bytes()
|
||||
|
||||
countBorder, err := buf.ReadByte()
|
||||
if err != nil {
|
||||
pk.RawPayload = append(writeBuf.Bytes(), safeBytes...)
|
||||
if err := t.DowngradeLevelChunk(pk); err != nil {
|
||||
//fmt.Println(err)
|
||||
break
|
||||
}
|
||||
borderBytes := make([]byte, countBorder)
|
||||
if _, err = buf.Read(borderBytes); err != nil {
|
||||
pk.RawPayload = append(writeBuf.Bytes(), safeBytes...)
|
||||
break
|
||||
}
|
||||
writeBuf.WriteByte(countBorder)
|
||||
writeBuf.Write(borderBytes)
|
||||
|
||||
enc := nbt.NewEncoderWithEncoding(writeBuf, nbt.NetworkLittleEndian)
|
||||
dec := nbt.NewDecoderWithEncoding(buf, nbt.NetworkLittleEndian)
|
||||
for {
|
||||
var decNbt map[string]any
|
||||
if err = dec.Decode(&decNbt); err != nil {
|
||||
break
|
||||
}
|
||||
t.mapping.DowngradeBlockActorData(decNbt)
|
||||
|
||||
if err = enc.Encode(decNbt); err != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
pk.RawPayload = append(writeBuf.Bytes(), buf.Bytes()...)
|
||||
case *packet.SubChunk:
|
||||
if !EnableChunkTranslation {
|
||||
break
|
||||
}
|
||||
r := world.Overworld.Range()
|
||||
if t.oldFormat {
|
||||
r = cube.Range{0, 255}
|
||||
@@ -251,11 +271,11 @@ func (t *DefaultBlockTranslator) DowngradeBlockRuntimeID(input uint32) uint32 {
|
||||
}
|
||||
state, ok := t.latest.RuntimeIDToState(input)
|
||||
if !ok {
|
||||
return t.mapping.Air()
|
||||
return t.mapping.InfoUpdate()
|
||||
}
|
||||
runtimeID, ok := t.mapping.StateToRuntimeID(state)
|
||||
if !ok {
|
||||
return t.mapping.Air()
|
||||
return t.mapping.InfoUpdate()
|
||||
}
|
||||
return runtimeID
|
||||
}
|
||||
@@ -319,11 +339,11 @@ func (t *DefaultBlockTranslator) UpgradeBlockRuntimeID(input uint32) uint32 {
|
||||
}
|
||||
state, ok := t.mapping.RuntimeIDToState(input)
|
||||
if !ok {
|
||||
return t.latest.Air()
|
||||
return t.latest.InfoUpdate()
|
||||
}
|
||||
runtimeID, ok := t.latest.StateToRuntimeID(state)
|
||||
if !ok {
|
||||
return t.latest.Air()
|
||||
return t.latest.InfoUpdate()
|
||||
}
|
||||
return runtimeID
|
||||
}
|
||||
|
||||
BIN
legacyver/data/block_states_844.nbt
Normal file
BIN
legacyver/data/block_states_844.nbt
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
9511
legacyver/data/required_item_list_844.json
Normal file
9511
legacyver/data/required_item_list_844.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -2,6 +2,7 @@ package legacyver
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/akmalfairuz/legacy-version/internal/item"
|
||||
"github.com/akmalfairuz/legacy-version/legacyver/proto"
|
||||
"github.com/akmalfairuz/legacy-version/mapping"
|
||||
|
||||
@@ -50,6 +50,10 @@ func (pk *CorrectPlayerMovePrediction) Marshal(io protocol.IO) {
|
||||
protocol.OptionalFunc(io, &pk.VehicleAngularVelocity, io.Float32)
|
||||
}
|
||||
}
|
||||
if proto.IsProtoGTE(io, proto.ID827) {
|
||||
io.Vec2(&pk.Rotation)
|
||||
protocol.OptionalFunc(io, &pk.VehicleAngularVelocity, io.Float32)
|
||||
}
|
||||
io.Bool(&pk.OnGround)
|
||||
io.Varuint64(&pk.Tick)
|
||||
}
|
||||
|
||||
31
legacyver/legacypacket/game_rules_changed.go
Normal file
31
legacyver/legacypacket/game_rules_changed.go
Normal file
@@ -0,0 +1,31 @@
|
||||
package legacypacket
|
||||
|
||||
import (
|
||||
"github.com/akmalfairuz/legacy-version/legacyver/proto"
|
||||
"github.com/sandertv/gophertunnel/minecraft/protocol"
|
||||
"github.com/sandertv/gophertunnel/minecraft/protocol/packet"
|
||||
)
|
||||
|
||||
// GameRulesChanged is sent by the server to the client to update client-side game rules, such as game rules
|
||||
// like the 'showCoordinates' game rule.
|
||||
type GameRulesChanged struct {
|
||||
// GameRules defines game rules changed with their respective values. The value of these game rules may be
|
||||
// either 'bool', 'int32' or 'float32'.
|
||||
// Note that some game rules are server side only, and don't necessarily need to be sent to the client.
|
||||
// Only changed game rules need to be sent in this packet. Game rules that were not changed do not need to
|
||||
// be sent if the client is already updated on them.
|
||||
GameRules []protocol.GameRule
|
||||
}
|
||||
|
||||
// ID ...
|
||||
func (*GameRulesChanged) ID() uint32 {
|
||||
return packet.IDGameRulesChanged
|
||||
}
|
||||
|
||||
func (pk *GameRulesChanged) Marshal(io protocol.IO) {
|
||||
if proto.IsProtoGTE(io, proto.ID844) {
|
||||
protocol.FuncSlice(io, &pk.GameRules, io.GameRule)
|
||||
} else {
|
||||
protocol.FuncSlice(io, &pk.GameRules, io.GameRuleLegacy)
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
package legacypacket
|
||||
@@ -9,20 +9,8 @@ import (
|
||||
// PlayerArmourDamage is sent by the server to damage the armour of a player. It is a very efficient packet,
|
||||
// but generally it's much easier to just send a slot update for the damaged armour.
|
||||
type PlayerArmourDamage struct {
|
||||
// Bitset holds a bitset of 4 bits that indicate which pieces of armour need to have damage dealt to them.
|
||||
// The first bit, when toggled, is for a helmet, the second for the chestplate, the third for the leggings
|
||||
// and the fourth for boots.
|
||||
Bitset uint8
|
||||
// HelmetDamage is the amount of damage that should be dealt to the helmet.
|
||||
HelmetDamage int32
|
||||
// ChestplateDamage is the amount of damage that should be dealt to the chestplate.
|
||||
ChestplateDamage int32
|
||||
// LeggingsDamage is the amount of damage that should be dealt to the leggings.
|
||||
LeggingsDamage int32
|
||||
// BootsDamage is the amount of damage that should be dealt to the boots.
|
||||
BootsDamage int32
|
||||
// BodyDamage is the amount of damage that should be dealt to the body.
|
||||
BodyDamage int32
|
||||
// List ...
|
||||
List []protocol.PlayerArmourDamageEntry
|
||||
}
|
||||
|
||||
// ID ...
|
||||
@@ -31,33 +19,49 @@ func (pk *PlayerArmourDamage) ID() uint32 {
|
||||
}
|
||||
|
||||
func (pk *PlayerArmourDamage) Marshal(io protocol.IO) {
|
||||
io.Uint8(&pk.Bitset)
|
||||
if pk.Bitset&packet.PlayerArmourDamageFlagHelmet != 0 {
|
||||
io.Varint32(&pk.HelmetDamage)
|
||||
} else {
|
||||
pk.HelmetDamage = 0
|
||||
}
|
||||
if pk.Bitset&packet.PlayerArmourDamageFlagChestplate != 0 {
|
||||
io.Varint32(&pk.ChestplateDamage)
|
||||
} else {
|
||||
pk.ChestplateDamage = 0
|
||||
}
|
||||
if pk.Bitset&packet.PlayerArmourDamageFlagLeggings != 0 {
|
||||
io.Varint32(&pk.LeggingsDamage)
|
||||
} else {
|
||||
pk.LeggingsDamage = 0
|
||||
}
|
||||
if pk.Bitset&packet.PlayerArmourDamageFlagBoots != 0 {
|
||||
io.Varint32(&pk.BootsDamage)
|
||||
} else {
|
||||
pk.BootsDamage = 0
|
||||
}
|
||||
|
||||
if proto.IsProtoGTE(io, proto.ID712) {
|
||||
if pk.Bitset&packet.PlayerArmourDamageFlagBody != 0 {
|
||||
io.Varint32(&pk.BodyDamage)
|
||||
} else {
|
||||
pk.BodyDamage = 0
|
||||
if proto.IsProtoLT(io, proto.ID844) {
|
||||
var bitset uint8
|
||||
flags := []uint8{packet.PlayerArmourDamageFlagHelmet, packet.PlayerArmourDamageFlagChestplate, packet.PlayerArmourDamageFlagLeggings, packet.PlayerArmourDamageFlagBoots}
|
||||
if proto.IsProtoGTE(io, proto.ID712) {
|
||||
flags = append(flags, packet.PlayerArmourDamageFlagBody)
|
||||
}
|
||||
if proto.IsReader(io) {
|
||||
io.Uint8(&bitset)
|
||||
pk.List = make([]protocol.PlayerArmourDamageEntry, 0, len(flags))
|
||||
for _, flag := range flags {
|
||||
if bitset&flag != 0 {
|
||||
v := protocol.PlayerArmourDamageEntry{
|
||||
ArmourSlot: flag,
|
||||
}
|
||||
v2 := int32(0)
|
||||
io.Varint32(&v2)
|
||||
v.Damage = int16(v2)
|
||||
pk.List = append(pk.List, v)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
for _, entry := range pk.List {
|
||||
if entry.ArmourSlot == packet.PlayerArmourDamageFlagBody && !proto.IsProtoGTE(io, proto.ID712) {
|
||||
continue
|
||||
}
|
||||
bitset |= 1 << entry.ArmourSlot
|
||||
}
|
||||
io.Uint8(&bitset)
|
||||
for _, flag := range flags {
|
||||
if bitset&flag != 0 {
|
||||
damage := int32(0)
|
||||
for _, entry := range pk.List {
|
||||
if entry.ArmourSlot == flag {
|
||||
damage = int32(entry.Damage)
|
||||
break
|
||||
}
|
||||
}
|
||||
io.Varint32(&damage)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
protocol.SliceVarint32Length(io, &pk.List)
|
||||
}
|
||||
|
||||
@@ -284,7 +284,7 @@ func (pk *StartGame) Marshal(io protocol.IO) {
|
||||
io.Varint32(&pk.PlatformBroadcastMode)
|
||||
io.Bool(&pk.CommandsEnabled)
|
||||
io.Bool(&pk.TexturePackRequired)
|
||||
protocol.FuncSlice(io, &pk.GameRules, io.GameRule)
|
||||
protocol.FuncSlice(io, &pk.GameRules, io.GameRuleLegacy)
|
||||
protocol.SliceUint32Length(io, &pk.Experiments)
|
||||
io.Bool(&pk.ExperimentsPreviouslyToggled)
|
||||
io.Bool(&pk.BonusChestEnabled)
|
||||
|
||||
@@ -1,18 +1,13 @@
|
||||
package proto
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
_ "unsafe"
|
||||
|
||||
"github.com/sandertv/gophertunnel/minecraft/protocol"
|
||||
)
|
||||
import "github.com/sandertv/gophertunnel/minecraft/protocol"
|
||||
|
||||
// BiomeDefinition represents a biome definition in the game. This can be a vanilla biome or a completely
|
||||
// custom biome.
|
||||
type BiomeDefinition struct {
|
||||
// NameIndex represents the index of the biome name in the string list.
|
||||
NameIndex int16
|
||||
// BiomeID is the biome ID.
|
||||
// BiomeID is the biome ID. This is optional and can be empty.
|
||||
BiomeID int16
|
||||
// Temperature is the temperature of the biome, used for weather, biome behaviours and sky colour.
|
||||
Temperature float32
|
||||
@@ -26,6 +21,8 @@ type BiomeDefinition struct {
|
||||
AshDensity float32
|
||||
// WhiteAshDensity is the density of white ash precipitation visuals.
|
||||
WhiteAshDensity float32
|
||||
// FoliageSnow ...
|
||||
FoliageSnow float32
|
||||
// Depth ...
|
||||
Depth float32
|
||||
// Scale ...
|
||||
@@ -43,45 +40,29 @@ type BiomeDefinition struct {
|
||||
ChunkGeneration protocol.Optional[protocol.BiomeChunkGeneration]
|
||||
}
|
||||
|
||||
// TODO: This will be required to be changed when the structs are modified in future MC updates.
|
||||
func DowngradeBiomeDefinitions(bd []protocol.BiomeDefinition) []BiomeDefinition {
|
||||
converted := make([]BiomeDefinition, len(bd))
|
||||
for i, b := range bd {
|
||||
ptr := unsafe.Pointer(&b)
|
||||
converted[i] = *(*BiomeDefinition)(ptr)
|
||||
}
|
||||
return converted
|
||||
}
|
||||
|
||||
// TODO: This will be required to be changed when the structs are modified in future MC updates.
|
||||
func UpgradeBiomeDefinitions(bd []BiomeDefinition) []protocol.BiomeDefinition {
|
||||
converted := make([]protocol.BiomeDefinition, len(bd))
|
||||
for i, b := range bd {
|
||||
ptr := unsafe.Pointer(&b)
|
||||
converted[i] = *(*protocol.BiomeDefinition)(ptr)
|
||||
}
|
||||
return converted
|
||||
}
|
||||
|
||||
func (x *BiomeDefinition) Marshal(r protocol.IO) {
|
||||
r.Int16(&x.NameIndex)
|
||||
if IsProtoGTE(r, ID827) {
|
||||
r.Int16(&x.BiomeID)
|
||||
} else {
|
||||
var opt protocol.Optional[uint16]
|
||||
if IsProtoLT(r, ID827) {
|
||||
var opt protocol.Optional[int16]
|
||||
if x.BiomeID != -1 {
|
||||
opt = protocol.Option(uint16(x.BiomeID))
|
||||
opt = protocol.Option(x.BiomeID)
|
||||
}
|
||||
protocol.OptionalFunc(r, &opt, r.Uint16)
|
||||
b, _ := opt.Value()
|
||||
x.BiomeID = int16(b)
|
||||
protocol.OptionalFunc(r, &opt, r.Int16)
|
||||
x.BiomeID, _ = opt.Value()
|
||||
} else {
|
||||
r.Int16(&x.BiomeID)
|
||||
}
|
||||
r.Float32(&x.Temperature)
|
||||
r.Float32(&x.Downfall)
|
||||
r.Float32(&x.RedSporeDensity)
|
||||
r.Float32(&x.BlueSporeDensity)
|
||||
r.Float32(&x.AshDensity)
|
||||
r.Float32(&x.WhiteAshDensity)
|
||||
if IsProtoLT(r, ID844) {
|
||||
r.Float32(&x.RedSporeDensity)
|
||||
r.Float32(&x.BlueSporeDensity)
|
||||
r.Float32(&x.AshDensity)
|
||||
r.Float32(&x.WhiteAshDensity)
|
||||
}
|
||||
if IsProtoGTE(r, ID844) {
|
||||
r.Float32(&x.FoliageSnow)
|
||||
}
|
||||
r.Float32(&x.Depth)
|
||||
r.Float32(&x.Scale)
|
||||
r.Int32(&x.MapWaterColour)
|
||||
@@ -91,3 +72,42 @@ func (x *BiomeDefinition) Marshal(r protocol.IO) {
|
||||
})
|
||||
protocol.OptionalMarshaler(r, &x.ChunkGeneration)
|
||||
}
|
||||
|
||||
func (x *BiomeDefinition) FromLatest(bd protocol.BiomeDefinition) BiomeDefinition {
|
||||
x.NameIndex = bd.NameIndex
|
||||
x.BiomeID = bd.BiomeID
|
||||
x.Temperature = bd.Temperature
|
||||
x.Downfall = bd.Downfall
|
||||
//x.RedSporeDensity = bd.RedSporeDensity
|
||||
//x.BlueSporeDensity = bd.BlueSporeDensity
|
||||
//x.AshDensity = bd.AshDensity
|
||||
//x.WhiteAshDensity = bd.WhiteAshDensity
|
||||
x.FoliageSnow = bd.FoliageSnow
|
||||
x.Depth = bd.Depth
|
||||
x.Scale = bd.Scale
|
||||
x.MapWaterColour = bd.MapWaterColour
|
||||
x.Rain = bd.Rain
|
||||
x.Tags = bd.Tags
|
||||
x.ChunkGeneration = bd.ChunkGeneration
|
||||
return *x
|
||||
}
|
||||
|
||||
func (x *BiomeDefinition) ToLatest() protocol.BiomeDefinition {
|
||||
return protocol.BiomeDefinition{
|
||||
NameIndex: x.NameIndex,
|
||||
BiomeID: x.BiomeID,
|
||||
Temperature: x.Temperature,
|
||||
Downfall: x.Downfall,
|
||||
//RedSporeDensity: x.RedSporeDensity,
|
||||
//BlueSporeDensity: x.BlueSporeDensity,
|
||||
//AshDensity: x.AshDensity,
|
||||
//WhiteAshDensity: x.WhiteAshDensity,
|
||||
FoliageSnow: x.FoliageSnow,
|
||||
Depth: x.Depth,
|
||||
Scale: x.Scale,
|
||||
MapWaterColour: x.MapWaterColour,
|
||||
Rain: x.Rain,
|
||||
Tags: x.Tags,
|
||||
ChunkGeneration: x.ChunkGeneration,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package proto
|
||||
import "github.com/sandertv/gophertunnel/minecraft/protocol"
|
||||
|
||||
const (
|
||||
ID844 = 844 // v1.21.110
|
||||
ID827 = 827 // v1.21.100
|
||||
ID819 = 819 // v1.21.93
|
||||
ID818 = 818 // v1.21.90
|
||||
|
||||
@@ -2,6 +2,7 @@ package proto
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/sandertv/gophertunnel/minecraft/protocol"
|
||||
)
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
package proto
|
||||
|
||||
import (
|
||||
"image/color"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/sandertv/gophertunnel/minecraft/protocol"
|
||||
"image/color"
|
||||
)
|
||||
|
||||
// PlayerListEntry is an entry found in the PlayerList packet. It represents a single player using the UUID
|
||||
|
||||
@@ -127,6 +127,8 @@ func convertPacketFunc(pid uint32, cur func() packet.Packet) func() packet.Packe
|
||||
return func() packet.Packet { return &legacypacket.PlayerList{} }
|
||||
case packet.IDSubChunk:
|
||||
return func() packet.Packet { return &legacypacket.SubChunk{} }
|
||||
case packet.IDGameRulesChanged:
|
||||
return func() packet.Packet { return &legacypacket.GameRulesChanged{} }
|
||||
default:
|
||||
return cur
|
||||
}
|
||||
@@ -295,11 +297,12 @@ func (p *Protocol) downgradePackets(pks []packet.Packet, conn *minecraft.Conn) [
|
||||
}
|
||||
case *packet.CameraAimAssist:
|
||||
pks[pkIndex] = &legacypacket.CameraAimAssist{
|
||||
Preset: pk.Preset,
|
||||
Angle: pk.Angle,
|
||||
Distance: pk.Distance,
|
||||
TargetMode: pk.TargetMode,
|
||||
Action: pk.Action,
|
||||
Preset: pk.Preset,
|
||||
Angle: pk.Angle,
|
||||
Distance: pk.Distance,
|
||||
TargetMode: pk.TargetMode,
|
||||
Action: pk.Action,
|
||||
ShowDebugRender: pk.ShowDebugRender,
|
||||
}
|
||||
case *packet.UpdateAttributes:
|
||||
attributes := make([]proto.Attribute, len(pk.Attributes))
|
||||
@@ -393,6 +396,7 @@ func (p *Protocol) downgradePackets(pks []packet.Packet, conn *minecraft.Conn) [
|
||||
Fade: pk.Fade,
|
||||
Target: pk.Target,
|
||||
RemoveTarget: pk.RemoveTarget,
|
||||
FieldOfView: pk.FieldOfView,
|
||||
}
|
||||
case *packet.ChangeDimension:
|
||||
pks[pkIndex] = &legacypacket.ChangeDimension{
|
||||
@@ -434,12 +438,7 @@ func (p *Protocol) downgradePackets(pks []packet.Packet, conn *minecraft.Conn) [
|
||||
}
|
||||
case *packet.PlayerArmourDamage:
|
||||
pks[pkIndex] = &legacypacket.PlayerArmourDamage{
|
||||
Bitset: pk.Bitset,
|
||||
HelmetDamage: pk.HelmetDamage,
|
||||
ChestplateDamage: pk.ChestplateDamage,
|
||||
LeggingsDamage: pk.LeggingsDamage,
|
||||
BootsDamage: pk.BootsDamage,
|
||||
BodyDamage: pk.BodyDamage,
|
||||
List: pk.List,
|
||||
}
|
||||
case *packet.SetTitle:
|
||||
pks[pkIndex] = &legacypacket.SetTitle{
|
||||
@@ -595,6 +594,7 @@ func (p *Protocol) downgradePackets(pks []packet.Packet, conn *minecraft.Conn) [
|
||||
ScenarioID: pk.ScenarioID,
|
||||
OwnerID: pk.OwnerID,
|
||||
UseBlockNetworkIDHashes: pk.UseBlockNetworkIDHashes,
|
||||
TickDeathSystemsEnabled: pk.TickDeathSystemsEnabled,
|
||||
ServerAuthoritativeSound: pk.ServerAuthoritativeSound,
|
||||
}
|
||||
case *packet.CodeBuilderSource:
|
||||
@@ -722,8 +722,12 @@ func (p *Protocol) downgradePackets(pks []packet.Packet, conn *minecraft.Conn) [
|
||||
Visibility: pk.Visibility,
|
||||
}
|
||||
case *packet.BiomeDefinitionList:
|
||||
biomeDefinitions := make([]proto.BiomeDefinition, len(pk.BiomeDefinitions))
|
||||
for i, bd := range pk.BiomeDefinitions {
|
||||
biomeDefinitions[i] = (&proto.BiomeDefinition{}).FromLatest(bd)
|
||||
}
|
||||
pks[pkIndex] = &legacypacket.BiomeDefinitionList{
|
||||
BiomeDefinitions: proto.DowngradeBiomeDefinitions(pk.BiomeDefinitions),
|
||||
BiomeDefinitions: biomeDefinitions,
|
||||
StringList: pk.StringList,
|
||||
}
|
||||
case *packet.PlayerList:
|
||||
@@ -746,6 +750,10 @@ func (p *Protocol) downgradePackets(pks []packet.Packet, conn *minecraft.Conn) [
|
||||
Position: pk.Position,
|
||||
SubChunkEntries: entries,
|
||||
}
|
||||
case *packet.GameRulesChanged:
|
||||
pks[pkIndex] = &legacypacket.GameRulesChanged{
|
||||
GameRules: pk.GameRules,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -869,11 +877,12 @@ func (p *Protocol) upgradePackets(pks []packet.Packet, conn *minecraft.Conn) []p
|
||||
}
|
||||
case *legacypacket.CameraAimAssist:
|
||||
pks[pkIndex] = &packet.CameraAimAssist{
|
||||
Preset: pk.Preset,
|
||||
Angle: pk.Angle,
|
||||
Distance: pk.Distance,
|
||||
TargetMode: pk.TargetMode,
|
||||
Action: pk.Action,
|
||||
Preset: pk.Preset,
|
||||
Angle: pk.Angle,
|
||||
Distance: pk.Distance,
|
||||
TargetMode: pk.TargetMode,
|
||||
Action: pk.Action,
|
||||
ShowDebugRender: pk.ShowDebugRender,
|
||||
}
|
||||
case *legacypacket.UpdateAttributes:
|
||||
attributes := make([]protocol.Attribute, len(pk.Attributes))
|
||||
@@ -967,6 +976,7 @@ func (p *Protocol) upgradePackets(pks []packet.Packet, conn *minecraft.Conn) []p
|
||||
Fade: pk.Fade,
|
||||
Target: pk.Target,
|
||||
RemoveTarget: pk.RemoveTarget,
|
||||
FieldOfView: pk.FieldOfView,
|
||||
}
|
||||
case *legacypacket.ChangeDimension:
|
||||
pks[pkIndex] = &packet.ChangeDimension{
|
||||
@@ -1008,12 +1018,7 @@ func (p *Protocol) upgradePackets(pks []packet.Packet, conn *minecraft.Conn) []p
|
||||
}
|
||||
case *legacypacket.PlayerArmourDamage:
|
||||
pks[pkIndex] = &packet.PlayerArmourDamage{
|
||||
Bitset: pk.Bitset,
|
||||
HelmetDamage: pk.HelmetDamage,
|
||||
ChestplateDamage: pk.ChestplateDamage,
|
||||
LeggingsDamage: pk.LeggingsDamage,
|
||||
BootsDamage: pk.BootsDamage,
|
||||
BodyDamage: pk.BodyDamage,
|
||||
List: pk.List,
|
||||
}
|
||||
case *legacypacket.SetTitle:
|
||||
pks[pkIndex] = &packet.SetTitle{
|
||||
@@ -1157,6 +1162,7 @@ func (p *Protocol) upgradePackets(pks []packet.Packet, conn *minecraft.Conn) []p
|
||||
ScenarioID: pk.ScenarioID,
|
||||
OwnerID: pk.OwnerID,
|
||||
UseBlockNetworkIDHashes: pk.UseBlockNetworkIDHashes,
|
||||
TickDeathSystemsEnabled: pk.TickDeathSystemsEnabled,
|
||||
ServerAuthoritativeSound: pk.ServerAuthoritativeSound,
|
||||
}
|
||||
case *legacypacket.CodeBuilderSource:
|
||||
@@ -1258,8 +1264,12 @@ func (p *Protocol) upgradePackets(pks []packet.Packet, conn *minecraft.Conn) []p
|
||||
Visibility: pk.Visibility,
|
||||
}
|
||||
case *legacypacket.BiomeDefinitionList:
|
||||
biomeDefinitions := make([]protocol.BiomeDefinition, len(pk.BiomeDefinitions))
|
||||
for i, bd := range pk.BiomeDefinitions {
|
||||
biomeDefinitions[i] = bd.ToLatest()
|
||||
}
|
||||
pks[pkIndex] = &packet.BiomeDefinitionList{
|
||||
BiomeDefinitions: proto.UpgradeBiomeDefinitions(pk.BiomeDefinitions),
|
||||
BiomeDefinitions: biomeDefinitions,
|
||||
StringList: pk.StringList,
|
||||
}
|
||||
case *legacypacket.PlayerList:
|
||||
@@ -1282,6 +1292,10 @@ func (p *Protocol) upgradePackets(pks []packet.Packet, conn *minecraft.Conn) []p
|
||||
Position: pk.Position,
|
||||
SubChunkEntries: entries,
|
||||
}
|
||||
case *legacypacket.GameRulesChanged:
|
||||
pks[pkIndex] = &packet.GameRulesChanged{
|
||||
GameRules: pk.GameRules,
|
||||
}
|
||||
}
|
||||
}
|
||||
return pks
|
||||
|
||||
@@ -2,7 +2,7 @@ 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 +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),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ 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 +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),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ 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 +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),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ package legacyver
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"github.com/akmalfairuz/legacy-version/internal/chunk"
|
||||
|
||||
"github.com/akmalfairuz/legacy-version/legacyver/proto"
|
||||
"github.com/akmalfairuz/legacy-version/mapping"
|
||||
)
|
||||
@@ -17,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),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ 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 +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),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ 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 +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),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ 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 +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),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ 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 +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),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,14 +2,14 @@ package legacyver
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"github.com/akmalfairuz/legacy-version/internal/chunk"
|
||||
|
||||
"github.com/akmalfairuz/legacy-version/legacyver/proto"
|
||||
"github.com/akmalfairuz/legacy-version/mapping"
|
||||
)
|
||||
|
||||
const (
|
||||
// ItemVersion766 ...
|
||||
ItemVersion766 = 221
|
||||
ItemVersion766 = 231
|
||||
// BlockVersion766 ...
|
||||
BlockVersion766 int32 = (1 << 24) | (21 << 16) | (50 << 8)
|
||||
)
|
||||
@@ -23,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),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,14 +2,14 @@ package legacyver
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"github.com/akmalfairuz/legacy-version/internal/chunk"
|
||||
|
||||
"github.com/akmalfairuz/legacy-version/legacyver/proto"
|
||||
"github.com/akmalfairuz/legacy-version/mapping"
|
||||
)
|
||||
|
||||
const (
|
||||
// ItemVersion776 ...
|
||||
ItemVersion776 = 241
|
||||
ItemVersion776 = 231
|
||||
// BlockVersion776 ...
|
||||
BlockVersion776 int32 = (1 << 24) | (21 << 16) | (60 << 8)
|
||||
)
|
||||
@@ -23,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),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,14 +2,14 @@ package legacyver
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"github.com/akmalfairuz/legacy-version/internal/chunk"
|
||||
|
||||
"github.com/akmalfairuz/legacy-version/legacyver/proto"
|
||||
"github.com/akmalfairuz/legacy-version/mapping"
|
||||
)
|
||||
|
||||
const (
|
||||
// ItemVersion786 ...
|
||||
ItemVersion786 = 241
|
||||
ItemVersion786 = 231
|
||||
// BlockVersion786 ...
|
||||
BlockVersion786 int32 = (1 << 24) | (21 << 16) | (70 << 8)
|
||||
)
|
||||
@@ -22,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),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,14 +2,14 @@ package legacyver
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"github.com/akmalfairuz/legacy-version/internal/chunk"
|
||||
|
||||
"github.com/akmalfairuz/legacy-version/legacyver/proto"
|
||||
"github.com/akmalfairuz/legacy-version/mapping"
|
||||
)
|
||||
|
||||
const (
|
||||
// ItemVersion800 ...
|
||||
ItemVersion800 = 251
|
||||
ItemVersion800 = 231
|
||||
// BlockVersion800 ...
|
||||
BlockVersion800 int32 = (1 << 24) | (21 << 16) | (80 << 8)
|
||||
)
|
||||
@@ -23,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),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,14 +2,14 @@ package legacyver
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"github.com/akmalfairuz/legacy-version/internal/chunk"
|
||||
|
||||
"github.com/akmalfairuz/legacy-version/legacyver/proto"
|
||||
"github.com/akmalfairuz/legacy-version/mapping"
|
||||
)
|
||||
|
||||
const (
|
||||
// ItemVersion818 ...
|
||||
ItemVersion818 = 261
|
||||
ItemVersion818 = 231
|
||||
// BlockVersion818 ...
|
||||
BlockVersion818 int32 = (1 << 24) | (21 << 16) | (90 << 8)
|
||||
)
|
||||
@@ -23,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),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,14 +3,13 @@ package legacyver
|
||||
import (
|
||||
_ "embed"
|
||||
|
||||
"github.com/akmalfairuz/legacy-version/internal/chunk"
|
||||
"github.com/akmalfairuz/legacy-version/legacyver/proto"
|
||||
"github.com/akmalfairuz/legacy-version/mapping"
|
||||
)
|
||||
|
||||
const (
|
||||
// ItemVersion819 ...
|
||||
ItemVersion819 = 271
|
||||
ItemVersion819 = 231
|
||||
// BlockVersion819 ...
|
||||
BlockVersion819 int32 = (1 << 24) | (21 << 16) | (93 << 8)
|
||||
)
|
||||
@@ -24,12 +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.93",
|
||||
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),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,33 +3,31 @@ package legacyver
|
||||
import (
|
||||
_ "embed"
|
||||
|
||||
"github.com/akmalfairuz/legacy-version/legacyver/proto"
|
||||
"github.com/akmalfairuz/legacy-version/mapping"
|
||||
)
|
||||
|
||||
const (
|
||||
// ItemVersion827 ...
|
||||
ItemVersion827 = 271
|
||||
ItemVersion827 = 241
|
||||
// BlockVersion827 ...
|
||||
BlockVersion827 int32 = (1 << 24) | (21 << 16) | (100 << 8)
|
||||
)
|
||||
|
||||
var (
|
||||
//go:embed data/dragonfly_items.json
|
||||
dragonflyLatestItemList []byte
|
||||
|
||||
//go:embed data/required_item_list_827.json
|
||||
requiredItemList827 []byte
|
||||
//go:embed data/block_states_827.nbt
|
||||
blockStateData827 []byte
|
||||
|
||||
itemMappingLatestPocketMine = mapping.NewItemMapping(requiredItemList827, ItemVersion827)
|
||||
itemMappingLatestDragonfly = mapping.NewItemMapping(dragonflyLatestItemList, ItemVersion827)
|
||||
blockMappingLatest = mapping.NewBlockMapping(blockStateData827)
|
||||
)
|
||||
|
||||
func itemMappingLatest(dragonflyMapping bool) mapping.Item {
|
||||
if dragonflyMapping {
|
||||
return itemMappingLatestDragonfly
|
||||
func New827(dragonflyMapping bool) *Protocol {
|
||||
itemMapping := mapping.NewItemMapping(requiredItemList827, ItemVersion827)
|
||||
blockTranslator := lookupOrCreateBlockTranslator(827, BlockVersion827, blockStateData827)
|
||||
return &Protocol{
|
||||
ver: "1.21.100",
|
||||
id: proto.ID827,
|
||||
blockTranslator: blockTranslator,
|
||||
itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest(dragonflyMapping), blockTranslator.BlockMapping(), blockMappingLatest),
|
||||
}
|
||||
return itemMappingLatestPocketMine
|
||||
}
|
||||
|
||||
34
legacyver/v844.go
Normal file
34
legacyver/v844.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package legacyver
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
|
||||
"github.com/akmalfairuz/legacy-version/mapping"
|
||||
)
|
||||
|
||||
const (
|
||||
// ItemVersion844 ...
|
||||
ItemVersion844 = 241
|
||||
// BlockVersion844 ...
|
||||
BlockVersion844 int32 = (1 << 24) | (21 << 16) | (110 << 8)
|
||||
)
|
||||
|
||||
var (
|
||||
//go:embed data/dragonfly_items.json
|
||||
dragonflyLatestItemList []byte
|
||||
//go:embed data/required_item_list_844.json
|
||||
requiredItemList844 []byte
|
||||
//go:embed data/block_states_844.nbt
|
||||
blockStateData844 []byte
|
||||
|
||||
itemMappingLatestPocketMine = mapping.NewItemMapping(requiredItemList844, ItemVersion844)
|
||||
itemMappingLatestDragonfly = mapping.NewItemMapping(dragonflyLatestItemList, ItemVersion844)
|
||||
blockMappingLatest = mapping.NewBlockMapping(blockStateData844)
|
||||
)
|
||||
|
||||
func itemMappingLatest(dragonflyMapping bool) mapping.Item {
|
||||
if dragonflyMapping {
|
||||
return itemMappingLatestDragonfly
|
||||
}
|
||||
return itemMappingLatestPocketMine
|
||||
}
|
||||
Reference in New Issue
Block a user