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