strom: add 1.12.2 protocol support and legacy login/status handlers
- Add minecraft-data for 1.12.2 (protocol 340) - Generate proto_generated/v1_12_2 - Add v1_12_2 legacy handlers to client.Login (OnDisconnect, OnCompress, OnSuccess) and client.Status (OnStatus, OnPong) - Same pattern as v1_8: RegisterUntilLatest only registers upward, so legacy versions need explicit RegisterCritical handlers
This commit is contained in:
@@ -16,6 +16,7 @@ import (
|
|||||||
"github.com/admin-else/strom/mc/proto_base"
|
"github.com/admin-else/strom/mc/proto_base"
|
||||||
"github.com/admin-else/strom/mc/proto_generated/v1_21_8"
|
"github.com/admin-else/strom/mc/proto_generated/v1_21_8"
|
||||||
"github.com/admin-else/strom/mc/proto_generated/v1_8"
|
"github.com/admin-else/strom/mc/proto_generated/v1_8"
|
||||||
|
"github.com/admin-else/strom/mc/proto_generated/v1_12_2"
|
||||||
"github.com/admin-else/strom/mc/proto_generated/v26_2"
|
"github.com/admin-else/strom/mc/proto_generated/v26_2"
|
||||||
"github.com/admin-else/strom/mc/text"
|
"github.com/admin-else/strom/mc/text"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
@@ -139,6 +140,31 @@ func (s *LoginClient) OnSuccessV1_8(success *v1_8.LoginToClientPacketSuccess) (e
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *LoginClient) OnDisconnectV1_12_2(packet *v1_12_2.LoginToClientPacketDisconnect) (err error) {
|
||||||
|
var reason text.Component
|
||||||
|
err = json.Unmarshal([]byte(packet.Reason), &reason)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = KickedDuringLoginErr{reason}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *LoginClient) OnCompressV1_12_2(packet *v1_12_2.LoginToClientPacketCompress) (err error) {
|
||||||
|
s.SetCompressionThreshold(packet.Threshold)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *LoginClient) OnSuccessV1_12_2(success *v1_12_2.LoginToClientPacketSuccess) (err error) {
|
||||||
|
s.GivenAccount = &v1_21_8.LoginToClientPacketSuccess{
|
||||||
|
Uuid: uuid.MustParse(success.Uuid),
|
||||||
|
Username: success.Username,
|
||||||
|
}
|
||||||
|
s.SetState(proto_base.Play)
|
||||||
|
err = event.HandlerDoneErr{}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func (s *LoginClient) OnSuccess(success *v1_21_8.LoginToClientPacketSuccess) (err error) {
|
func (s *LoginClient) OnSuccess(success *v1_21_8.LoginToClientPacketSuccess) (err error) {
|
||||||
s.GivenAccount = success
|
s.GivenAccount = success
|
||||||
if s.ProtocolVersion >= 764 {
|
if s.ProtocolVersion >= 764 {
|
||||||
@@ -189,6 +215,9 @@ func LoginRawAddr(c *proto.Conn, account *api.Account, hostAddr string) (err err
|
|||||||
lc.RegisterCritical(lc.OnCompressV1_8)
|
lc.RegisterCritical(lc.OnCompressV1_8)
|
||||||
lc.RegisterCritical(lc.OnDisconnectV1_8)
|
lc.RegisterCritical(lc.OnDisconnectV1_8)
|
||||||
lc.RegisterCritical(lc.OnSuccessV1_8)
|
lc.RegisterCritical(lc.OnSuccessV1_8)
|
||||||
|
lc.RegisterCritical(lc.OnCompressV1_12_2)
|
||||||
|
lc.RegisterCritical(lc.OnDisconnectV1_12_2)
|
||||||
|
lc.RegisterCritical(lc.OnSuccessV1_12_2)
|
||||||
|
|
||||||
var p proto_base.EncodeDecodeAble
|
var p proto_base.EncodeDecodeAble
|
||||||
if hostAddr != "" {
|
if hostAddr != "" {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/admin-else/strom/mc/proto_base"
|
"github.com/admin-else/strom/mc/proto_base"
|
||||||
"github.com/admin-else/strom/mc/proto_generated/v1_21_8"
|
"github.com/admin-else/strom/mc/proto_generated/v1_21_8"
|
||||||
"github.com/admin-else/strom/mc/proto_generated/v1_8"
|
"github.com/admin-else/strom/mc/proto_generated/v1_8"
|
||||||
|
"github.com/admin-else/strom/mc/proto_generated/v1_12_2"
|
||||||
"github.com/admin-else/strom/mc/server"
|
"github.com/admin-else/strom/mc/server"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -54,6 +55,23 @@ func (s *StatusClient) OnPongV1_8(p *v1_8.StatusToClientPacketPing) (err error)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *StatusClient) OnStatusV1_12_2(p *v1_12_2.StatusToClientPacketServerInfo) (err error) {
|
||||||
|
s.Status = p.Response
|
||||||
|
s.PingSendTime = time.Now()
|
||||||
|
if s.DoPingRoundTripTime {
|
||||||
|
err = s.Send(&v1_21_8.StatusToServerPacketPing{Time: s.PingSendTime.UnixMilli()})
|
||||||
|
} else {
|
||||||
|
err = event.HandlerDoneErr{}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *StatusClient) OnPongV1_12_2(p *v1_12_2.StatusToClientPacketPing) (err error) {
|
||||||
|
s.PingReceiveTime = time.Now()
|
||||||
|
err = event.HandlerDoneErr{}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// StatusRaw returns a StatusClient that is not connected to a server.
|
// StatusRaw returns a StatusClient that is not connected to a server.
|
||||||
// So ignore the resource leak warning. And maybe attach a warn ignore comment.
|
// So ignore the resource leak warning. And maybe attach a warn ignore comment.
|
||||||
// It does not resolve SRV records.
|
// It does not resolve SRV records.
|
||||||
@@ -79,6 +97,8 @@ func StatusRawWithVersion(ctx context.Context, addr, version string) (s *StatusC
|
|||||||
s.RegisterCriticalUntilLatest(s.OnPong)
|
s.RegisterCriticalUntilLatest(s.OnPong)
|
||||||
s.RegisterCritical(s.OnStatusV1_8)
|
s.RegisterCritical(s.OnStatusV1_8)
|
||||||
s.RegisterCritical(s.OnPongV1_8)
|
s.RegisterCritical(s.OnPongV1_8)
|
||||||
|
s.RegisterCritical(s.OnStatusV1_12_2)
|
||||||
|
s.RegisterCritical(s.OnPongV1_12_2)
|
||||||
|
|
||||||
p, err := MakeHandshakePacketAddr(s.Conn, proto_base.Status, addr)
|
p, err := MakeHandshakePacketAddr(s.Conn, proto_base.Status, addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"minecraftVersion": "1.12.2",
|
||||||
|
"version":340,
|
||||||
|
"majorVersion": "1.12"
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -429,7 +429,7 @@ func GenerateVersions(versions []string) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
err := GenerateVersions([]string{"1.8", "1.21.8", "1.21.9", "1.21.11", "26.1", "26.2"})
|
err := GenerateVersions([]string{"1.8", "1.12.2", "1.21.8", "1.21.9", "1.21.11", "26.1", "26.2"})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user