refactor mcbot JoinServer to allow correct handshake packet
This commit is contained in:
37
bot/mcbot.go
37
bot/mcbot.go
@ -7,6 +7,7 @@ package bot
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
mcnet "github.com/Tnze/go-mc/net"
|
mcnet "github.com/Tnze/go-mc/net"
|
||||||
pk "github.com/Tnze/go-mc/net/packet"
|
pk "github.com/Tnze/go-mc/net/packet"
|
||||||
@ -17,34 +18,34 @@ const ProtocolVersion = 736
|
|||||||
|
|
||||||
// JoinServer connect a Minecraft server for playing the game.
|
// JoinServer connect a Minecraft server for playing the game.
|
||||||
func (c *Client) JoinServer(addr string, port int) (err error) {
|
func (c *Client) JoinServer(addr string, port int) (err error) {
|
||||||
conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port))
|
return c.JoinServerWithDialer(&net.Dialer{}, fmt.Sprintf("%s:%d", addr, port))
|
||||||
if err != nil {
|
|
||||||
err = fmt.Errorf("bot: connect server fail: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
return c.join(conn)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// JoinServerWithDialer is similar to JoinServer but using a Dialer.
|
// JoinServerWithDialer is similar to JoinServer but using a Dialer.
|
||||||
func (c *Client) JoinServerWithDialer(d Dialer, addr string) (err error) {
|
func (c *Client) JoinServerWithDialer(d Dialer, addr string) (err error) {
|
||||||
|
return c.join(d, addr)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) join(d Dialer, addr string) (err error) {
|
||||||
conn, err := d.Dial("tcp", addr)
|
conn, err := d.Dial("tcp", addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("bot: connect server fail: %v", err)
|
err = fmt.Errorf("bot: connect server fail: %v", err)
|
||||||
return
|
return err
|
||||||
}
|
}
|
||||||
return c.join(conn)
|
|
||||||
}
|
|
||||||
|
|
||||||
// JoinConn join a Minecraft server through a connection for playing the game.
|
|
||||||
func (c *Client) join(conn net.Conn) (err error) {
|
|
||||||
//Set Conn
|
//Set Conn
|
||||||
c.conn = mcnet.WrapConn(conn)
|
c.conn = mcnet.WrapConn(conn)
|
||||||
|
|
||||||
//Get Addr
|
//Get Host and Port
|
||||||
strform := c.conn.Socket.RemoteAddr().String()
|
host, portStr, err := net.SplitHostPort(addr)
|
||||||
var addr string
|
if err != nil {
|
||||||
var port int
|
err = fmt.Errorf("bot: connect server fail: %v", err)
|
||||||
fmt.Sscanf(strform, "%s:%d", &addr, &port)
|
return err
|
||||||
|
}
|
||||||
|
port, err := strconv.Atoi(portStr)
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("bot: connect server fail: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
//Handshake
|
//Handshake
|
||||||
err = c.conn.WritePacket(
|
err = c.conn.WritePacket(
|
||||||
@ -52,7 +53,7 @@ func (c *Client) join(conn net.Conn) (err error) {
|
|||||||
pk.Marshal(
|
pk.Marshal(
|
||||||
0x00, //Handshake packet ID
|
0x00, //Handshake packet ID
|
||||||
pk.VarInt(ProtocolVersion), //Protocol version
|
pk.VarInt(ProtocolVersion), //Protocol version
|
||||||
pk.String(addr), //Server's address
|
pk.String(host), //Server's address
|
||||||
pk.UnsignedShort(port),
|
pk.UnsignedShort(port),
|
||||||
pk.Byte(2),
|
pk.Byte(2),
|
||||||
))
|
))
|
||||||
|
Reference in New Issue
Block a user