Part of refactor
This commit is contained in:
30
README.md
30
README.md
@ -5,31 +5,19 @@
|
|||||||
[](https://goreportcard.com/report/github.com/Tnze/go-mc)
|
[](https://goreportcard.com/report/github.com/Tnze/go-mc)
|
||||||
[](https://travis-ci.org/Tnze/go-mc)
|
[](https://travis-ci.org/Tnze/go-mc)
|
||||||
|
|
||||||
|
Require Go version: 1.16
|
||||||
|
|
||||||
There's some library in Go support you to create your Minecraft client or server.
|
There's some library in Go support you to create your Minecraft client or server.
|
||||||
这是一些Golang库,用于帮助你编写自己的Minecraft客户端或服务器,
|
这是一些Golang库,用于帮助你编写自己的Minecraft客户端或服务器。
|
||||||
- [x] Chat
|
|
||||||
- [x] NBT
|
- [x] Chat Message (Support Json or old `§`)
|
||||||
|
- [x] NBT (Based on reflection)
|
||||||
- [x] Yggdrasil
|
- [x] Yggdrasil
|
||||||
- [x] Realms Server
|
- [x] Realms Server
|
||||||
- [x] RCON protocol
|
- [x] RCON protocol (Server & Client)
|
||||||
- [x] Saves decoding /encoding
|
- [x] Saves decoding & encoding
|
||||||
- [x] Minecraft network protocol
|
- [x] Minecraft network protocol
|
||||||
- [x] Simple MC robot lib
|
- [x] Robot player framework
|
||||||
|
|
||||||
bot:
|
|
||||||
- [x] Swing arm
|
|
||||||
- [x] Get inventory
|
|
||||||
- [x] Pick item
|
|
||||||
- [x] Drop item
|
|
||||||
- [x] Swap item in hands
|
|
||||||
- [x] Use item
|
|
||||||
- [x] Use entity
|
|
||||||
- [x] Attack entity
|
|
||||||
- [x] Use/Place block
|
|
||||||
- [x] Mine block
|
|
||||||
- [x] Custom packets
|
|
||||||
- [ ] Record entities
|
|
||||||
|
|
||||||
|
|
||||||
> 由于仍在开发中,部分API在未来版本中可能会变动
|
> 由于仍在开发中,部分API在未来版本中可能会变动
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ package basic
|
|||||||
import (
|
import (
|
||||||
"github.com/Tnze/go-mc/data/packetid"
|
"github.com/Tnze/go-mc/data/packetid"
|
||||||
pk "github.com/Tnze/go-mc/net/packet"
|
pk "github.com/Tnze/go-mc/net/packet"
|
||||||
"log"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (p Player) handleKeepAlivePacket(packet pk.Packet) error {
|
func (p Player) handleKeepAlivePacket(packet pk.Packet) error {
|
||||||
@ -54,7 +53,6 @@ func (p *Player) handlePlayerPositionAndLook(packet pk.Packet) error {
|
|||||||
return Error{err}
|
return Error{err}
|
||||||
}
|
}
|
||||||
p.isSpawn = true
|
p.isSpawn = true
|
||||||
log.Print("Position confirmed")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -8,8 +8,8 @@ type Settings struct {
|
|||||||
ChatColors bool //聊天颜色
|
ChatColors bool //聊天颜色
|
||||||
DisplayedSkinParts uint8 //皮肤显示
|
DisplayedSkinParts uint8 //皮肤显示
|
||||||
MainHand int //主手
|
MainHand int //主手
|
||||||
ReceiveMap bool //接收地图数据
|
|
||||||
Brand string // The brand string presented to the server.
|
Brand string // The brand string presented to the server.
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -33,6 +33,6 @@ var DefaultSettings = Settings{
|
|||||||
ChatMode: 0,
|
ChatMode: 0,
|
||||||
DisplayedSkinParts: Jacket | LeftSleeve | RightSleeve | LeftPantsLeg | RightPantsLeg | Hat,
|
DisplayedSkinParts: Jacket | LeftSleeve | RightSleeve | LeftPantsLeg | RightPantsLeg | Hat,
|
||||||
MainHand: 1,
|
MainHand: 1,
|
||||||
ReceiveMap: true,
|
|
||||||
Brand: "vanilla",
|
Brand: "vanilla",
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
package bot
|
package bot
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"fmt"
|
|
||||||
"github.com/Tnze/go-mc/offline"
|
"github.com/Tnze/go-mc/offline"
|
||||||
"github.com/Tnze/go-mc/yggdrasil"
|
"github.com/Tnze/go-mc/yggdrasil"
|
||||||
"log"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func ExamplePingAndList() {
|
func ExamplePingAndList() {
|
||||||
resp, delay, err := PingAndList("localhost", 25565)
|
resp, delay, err := PingAndList("localhost:25565")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("ping and list server fail: %v", err)
|
log.Fatalf("ping and list server fail: %v", err)
|
||||||
}
|
}
|
||||||
@ -54,8 +54,8 @@ func ExampleClient_JoinServer_online() {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
c.Auth.UUID, c.Name = auth.SelectedProfile()
|
c.Auth.UUID, c.Auth.Name = auth.SelectedProfile()
|
||||||
c.AsTk = auth.AccessToken()
|
c.Auth.AsTk = auth.AccessToken()
|
||||||
|
|
||||||
//Connect server
|
//Connect server
|
||||||
err = c.JoinServer("127.0.0.1")
|
err = c.JoinServer("127.0.0.1")
|
||||||
@ -76,10 +76,3 @@ func ExampleClient_JoinServer_online() {
|
|||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func ExampleOfflineUUID() {
|
|
||||||
fmt.Println(offline.NameToUUID("Tnze"))
|
|
||||||
|
|
||||||
// output:
|
|
||||||
// c7b9eece-2f2e-325c-8da8-6fc8f3d0edb0
|
|
||||||
}
|
|
||||||
|
@ -36,13 +36,7 @@ func main() {
|
|||||||
Disconnect: onDisconnect,
|
Disconnect: onDisconnect,
|
||||||
Death: onDeath,
|
Death: onDeath,
|
||||||
}.Attach(c)
|
}.Attach(c)
|
||||||
c.Events.AddListener(bot.PacketHandler{
|
c.Events.AddListener(soundListener)
|
||||||
ID: packetid.NamedSoundEffect,
|
|
||||||
Priority: 0,
|
|
||||||
F: func(p pk.Packet) error {
|
|
||||||
return onSound()
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
//Login
|
//Login
|
||||||
err := c.JoinServer("127.0.0.1")
|
err := c.JoinServer("127.0.0.1")
|
||||||
@ -70,18 +64,42 @@ func onGameStart() error {
|
|||||||
watch = make(chan time.Time)
|
watch = make(chan time.Time)
|
||||||
go watchDog()
|
go watchDog()
|
||||||
|
|
||||||
return c.UseItem(0)
|
return UseItem(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
var soundListener = bot.PacketHandler{
|
||||||
|
ID: packetid.NamedSoundEffect,
|
||||||
|
Priority: 0,
|
||||||
|
F: func(p pk.Packet) error {
|
||||||
|
var (
|
||||||
|
SoundName pk.Identifier
|
||||||
|
SoundCategory pk.VarInt
|
||||||
|
X, Y, Z pk.Int
|
||||||
|
Volume, Pitch pk.Float
|
||||||
|
)
|
||||||
|
if err := p.Scan(&SoundName, &SoundCategory, &X, &Y, &Z, &Volume, &Pitch); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return onSound(string(SoundName), int(SoundCategory), float64(X)/8, float64(Y)/8, float64(Z)/8, float32(Volume), float32(Pitch))
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func UseItem(hand int32) error {
|
||||||
|
return c.Conn.WritePacket(pk.Marshal(
|
||||||
|
packetid.UseItem,
|
||||||
|
pk.VarInt(hand),
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
//goland:noinspection SpellCheckingInspection
|
//goland:noinspection SpellCheckingInspection
|
||||||
func onSound(name string, category int, x, y, z float64, volume, pitch float32) error {
|
func onSound(name string, category int, x, y, z float64, volume, pitch float32) error {
|
||||||
if name == "entity.fishing_bobber.splash" {
|
if name == "entity.fishing_bobber.splash" {
|
||||||
if err := c.UseItem(0); err != nil { //retrieve
|
if err := UseItem(0); err != nil { //retrieve
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Println("gra~")
|
log.Println("gra~")
|
||||||
time.Sleep(time.Millisecond * 300)
|
time.Sleep(time.Millisecond * 300)
|
||||||
if err := c.UseItem(0); err != nil { //throw
|
if err := UseItem(0); err != nil { //throw
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
watch <- time.Now()
|
watch <- time.Now()
|
||||||
@ -106,7 +124,7 @@ func watchDog() {
|
|||||||
case <-watch:
|
case <-watch:
|
||||||
case <-to.C:
|
case <-to.C:
|
||||||
log.Println("rethrow")
|
log.Println("rethrow")
|
||||||
if err := c.UseItem(0); err != nil {
|
if err := UseItem(0); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
10
offline/uuid_test.go
Normal file
10
offline/uuid_test.go
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package offline
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func ExampleNameToUUID() {
|
||||||
|
fmt.Println(NameToUUID("Tnze"))
|
||||||
|
|
||||||
|
// output:
|
||||||
|
// c7b9eece-2f2e-325c-8da8-6fc8f3d0edb0
|
||||||
|
}
|
Reference in New Issue
Block a user