go-mc

module
v1.16.5-pre2-vacpp Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 26, 2021 License: MIT

README

Go-MC

Version Protocol Go Reference Go Report Card Build Status

Require Go version: 1.16

There's some library in Go support you to create your Minecraft client or server.
这是一些Golang库,用于帮助你编写自己的Minecraft客户端或服务器。

  • Chat Message (Support Json or old §)
  • NBT (Based on reflection)
  • Yggdrasil
  • Realms Server
  • RCON protocol (Server & Client)
  • Saves decoding & encoding
  • Minecraft network protocol
  • Robot player framework

由于仍在开发中,部分API在未来版本中可能会变动

1.13.2 version is at gomcbot.

Getting start

After you install golang:
To get the latest version: go get github.com/VacPlusPlus/go-mc@master
To get old versions (e.g. 1.14.3): go get github.com/VacPlusPlus/go-mc@v1.14.3

First, you might have a try of the simple examples. It's a good start.

Run Examples
  • Run go run github.com/VacPlusPlus/go-mc/cmd/mcping localhost to ping and list the localhost mc server.
  • Run go run github.com/VacPlusPlus/go-mc/cmd/daze to join the local server at localhost:25565 as Steve on the offline mode.
Basic Usage

One of the most useful functions of this lib is that it implements the network communication protocol of minecraft. It allows you to construct, send, receive, and parse network packets. All of them are encapsulated in go-mc/net and go-mc/net/packet.

这个库最核心的便是实现了Minecraft底层的网络通信协议,可以用与构造、发送、接收和解读MC数据包。这是靠 go-mc/netgo-mc/net/packet这两个包实现的。

import "github.com/VacPlusPlus/go-mc/net"
import pk "github.com/VacPlusPlus/go-mc/net/packet"

It's very easy to create a packet. For example, after any client connected the server, it sends a Handshake Packet. You can create this package with the following code:

构造一个数据包很简单,例如客户端连接时会发送一个握手包,你就可以用下面这段代码来生成这个包:

p := pk.Marshal(
    0x00,                       // Handshake packet ID
    pk.VarInt(ProtocolVersion), // Protocol version
    pk.String("localhost"),     // Server's address
    pk.UnsignedShort(25565),    // Server's port
    pk.Byte(1),                 // 1 for status ping, 2 for login
)

Then you can send it to server using conn.WritePacket(p). The conn is a net.Conn which is returned by net.Dial(). And don't forget to handle the error.^_^

然后就可以调用conn.WritePacket(p)来发送这个p了,其中conn是连接对象。发数据包的时候记得不要忘记处理错误噢!

Receiving packet is quite easy too. To read a packet, call p.Scan() like this:

接收包也非常简单,只要调用conn.ReadPacket(&p)即可。而要读取包内数据则需要使用p.Scan()函数,就像这样:

var (
    x, y, z    pk.Double
    yaw, pitch pk.Float
    flags      pk.Byte
    TeleportID pk.VarInt
)

err := p.Scan(&x, &y, &z, &yaw, &pitch, &flags, &TeleportID)
if err != nil {
    return err
}
Advanced usage

Sometimes you are handling packet like this:

Field Name Field Type Notes
World Count VarInt Size of the following array.
World Names Array of Identifier Identifiers for all worlds on the server.

That is, the first field is an integer type and the second field is an array (a []string in this case). The integer represents the length of array.

Traditionally, you can use the following method to read such a field:

r := bytes.Reader(p.Data)
// Read WorldCount
var WorldCount pk.VarInt
if err := WorldCount.ReadFrom(r); err != nil {
    return err
}
// Read WorldNames
WorldNames := make([]pk.Identifier, WorldCount)
for i := 0; i < int(WorldCount); i++ {
    if err := WorldNames[i].ReadFrom(r); err != nil {
        return err
    }
}

But this is tediously long an not compatible with p.Scan() method.

In the latest version, two new types is added: pk.Ary and pk.Opt. Dedicated to handling "Array of ...." and "Optional ...." fields.

var WorldCount pk.VarInt
var WorldNames = []pk.Identifier{}
if err := p.Scan(&WorldCount, pk.Ary{&WorldCount, &WorldNames}); err != nil {
    return err
}

As the go-mc/net package implements the minecraft network protocol, there is no update between the versions at this level. So net package actually supports any version. It's just that the ID and content of the package are different between different versions.

由于go-mc/net实现的是MC底层的网络协议,而这个协议在MC更新时其实并不会有改动,MC更新时其实只是包的ID和内容的定义发生了变化,所以net包本身是跨版本的。

Originally it's all right to write a bot with only go-mc/net package, but considering that the process of handshake, login and encryption is not difficult but complicated, I have implemented it in go-mc/bot package, which is not cross-versions. You may use it directly or as a reference for your own implementation.

理论上讲,只用go-mc/net包实现一个bot是完全可行的,但是为了节省大家从头去理解MC握手、登录、加密等协议的过程,在go-mc/bot中我已经把这些都实现了,只不过它不是跨版本的。你可以直接使用,或者作为自己实现的参考。

Now, go and have a look at the examples!

Directories

Path Synopsis
bot
Package bot implements a simple Minecraft client that can join a server or just ping it for getting information.
Package bot implements a simple Minecraft client that can join a server or just ping it for getting information.
Package chat implements Minecraft's chat message encoding system.
Package chat implements Minecraft's chat message encoding system.
data
block
Package block stores information about blocks in Minecraft.
Package block stores information about blocks in Minecraft.
entity
Package entity stores information about entities in Minecraft.
Package entity stores information about entities in Minecraft.
inv
Package inv maps window types to inventory slot information.
Package inv maps window types to inventory slot information.
item
Package item stores information about items in Minecraft.
Package item stores information about items in Minecraft.
lang
This program can automatic download language.json file and convert into .go
This program can automatic download language.json file and convert into .go
lang/af-za
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/ar-sa
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/ast-es
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/az-az
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/ba-ru
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/bar
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/be-by
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/bg-bg
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/br-fr
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/brb
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/bs-ba
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/ca-es
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/cs-cz
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/cy-gb
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/da-dk
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/de-at
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/de-ch
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/de-de
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/el-gr
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/en-au
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/en-ca
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/en-gb
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/en-nz
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/en-pt
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/en-ud
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/en-us
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/enp
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/enws
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/eo-uy
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/es-ar
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/es-cl
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/es-ec
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/es-es
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/es-mx
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/es-uy
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/es-ve
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/esan
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/et-ee
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/eu-es
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/fa-ir
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/fi-fi
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/fil-ph
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/fo-fo
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/fr-ca
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/fr-fr
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/fra-de
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/fy-nl
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/ga-ie
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/gd-gb
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/gl-es
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/got-de
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/gv-im
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/haw-us
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/he-il
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/hi-in
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/hr-hr
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/hu-hu
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/hy-am
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/id-id
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/ig-ng
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/io-en
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/is-is
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/isv
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/it-it
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/ja-jp
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/jbo-en
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/ka-ge
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/kab-kab
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/kk-kz
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/kn-in
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/ko-kr
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/ksh
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/kw-gb
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/la-la
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/lb-lu
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/li-li
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/lol-us
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/lt-lt
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/lv-lv
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/mi-nz
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/mk-mk
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/mn-mn
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/moh-ca
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/ms-my
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/mt-mt
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/nds-de
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/nl-be
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/nl-nl
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/nn-no
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/no-no
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/nuk
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/oc-fr
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/oj-ca
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/ovd
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/pl-pl
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/pt-br
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/pt-pt
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/qya-aa
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/ro-ro
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/ru-ru
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/scn
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/se-no
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/sk-sk
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/sl-si
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/so-so
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/sq-al
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/sr-sp
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/sv-se
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/swg
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/sxu
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/szl
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/ta-in
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/th-th
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/tl-ph
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/tlh-aa
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/tr-tr
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/tt-ru
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/tzl-tzl
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/uk-ua
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/val-es
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/vec-it
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/vi-vn
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/yi-de
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/yo-ng
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/zh-cn
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
lang/zh-tw
Code generated by downloader.go; DO NOT EDIT.
Code generated by downloader.go; DO NOT EDIT.
packetid/gen
gen_packetIDs.go generates the enumeration of packet IDs used on the wire.
gen_packetIDs.go generates the enumeration of packet IDs used on the wire.
examples
daze
Daze could join an offline-mode server as client.
Daze could join an offline-mode server as client.
mcping
Usage: go run examples/ping/ping.go localhost
Usage: go run examples/ping/ping.go localhost
simpleServer
Example minecraft 1.15.2 server
Example minecraft 1.15.2 server
Package nbt implement the Named Binary Tag format of Minecraft.
Package nbt implement the Named Binary Tag format of Minecraft.
net
Package net pack network connection for Minecraft.
Package net pack network connection for Minecraft.
Package yggdrasil implement Yggdrasil protocol.
Package yggdrasil implement Yggdrasil protocol.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL