fix: add some event issue

This commit is contained in:
Vaala Cat 2023-05-17 15:27:27 +08:00
parent 50191e20ef
commit b7e73e8c31
5 changed files with 82 additions and 9 deletions

View File

@ -5,6 +5,7 @@ import (
"github.com/Tnze/go-mc/bot/basic" "github.com/Tnze/go-mc/bot/basic"
"github.com/Tnze/go-mc/bot/msg" "github.com/Tnze/go-mc/bot/msg"
"github.com/Tnze/go-mc/bot/playerlist" "github.com/Tnze/go-mc/bot/playerlist"
"github.com/Tnze/go-mc/bot/screen"
) )
var ( var (
@ -12,4 +13,5 @@ var (
Player *basic.Player Player *basic.Player
ChatHandler *msg.Manager ChatHandler *msg.Manager
PlayerList *playerlist.PlayerList PlayerList *playerlist.PlayerList
ScreenManager *screen.Manager
) )

1
go.mod
View File

@ -11,5 +11,6 @@ require (
require ( require (
github.com/google/uuid v1.3.0 // indirect github.com/google/uuid v1.3.0 // indirect
github.com/iancoleman/strcase v0.2.0 // indirect
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
) )

2
go.sum
View File

@ -7,6 +7,8 @@ github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1 h1:wG8n/XJQ07TmjbITcGi
github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1/go.mod h1:A2S0CWkNylc2phvKXWBBdD3K0iGnDBGbzRpISP2zBl8= github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1/go.mod h1:A2S0CWkNylc2phvKXWBBdD3K0iGnDBGbzRpISP2zBl8=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0=
github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=

View File

@ -4,8 +4,6 @@ import (
"tg-mc/services/mc" "tg-mc/services/mc"
"tg-mc/services/tgbot" "tg-mc/services/tgbot"
"tg-mc/services/utils" "tg-mc/services/utils"
"github.com/sirupsen/logrus"
) )
func Run() { func Run() {
@ -13,7 +11,6 @@ func Run() {
for { for {
if err := mc.Run(); err != nil { if err := mc.Run(); err != nil {
utils.SendMsg("致命错误:" + err.Error()) utils.SendMsg("致命错误:" + err.Error())
logrus.Panic(err)
} }
} }
} }

View File

@ -6,12 +6,15 @@ import (
"log" "log"
"strings" "strings"
"tg-mc/conf" "tg-mc/conf"
"time"
"github.com/Tnze/go-mc/bot" "github.com/Tnze/go-mc/bot"
"github.com/Tnze/go-mc/bot/basic" "github.com/Tnze/go-mc/bot/basic"
"github.com/Tnze/go-mc/bot/msg" "github.com/Tnze/go-mc/bot/msg"
"github.com/Tnze/go-mc/bot/playerlist" "github.com/Tnze/go-mc/bot/playerlist"
"github.com/Tnze/go-mc/bot/screen"
"github.com/Tnze/go-mc/chat" "github.com/Tnze/go-mc/chat"
"github.com/Tnze/go-mc/data/item"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
) )
@ -20,13 +23,23 @@ func Run() error {
conf.Client.Auth.Name = conf.GetBotSettings().MCBotName conf.Client.Auth.Name = conf.GetBotSettings().MCBotName
client := conf.Client client := conf.Client
conf.Player = basic.NewPlayer(client, basic.DefaultSettings, basic.EventsListener{}) conf.Player = basic.NewPlayer(client, basic.DefaultSettings, basic.EventsListener{
GameStart: onGameStart,
Disconnect: onDisconnect,
HealthChange: onHealthChange,
Death: onDeath,
})
conf.PlayerList = playerlist.New(client) conf.PlayerList = playerlist.New(client)
conf.ChatHandler = msg.New(client, conf.Player, conf.PlayerList, msg.EventsHandler{ conf.ChatHandler = msg.New(client, conf.Player, conf.PlayerList, msg.EventsHandler{
SystemChat: onSystemMsg, SystemChat: onSystemMsg,
PlayerChatMessage: onPlayerMsg, PlayerChatMessage: onPlayerMsg,
DisguisedChat: onDisguisedMsg, DisguisedChat: onDisguisedMsg,
}) })
conf.ScreenManager = screen.NewManager(client, screen.EventsListener{
Open: nil,
SetSlot: onScreenSlotChange,
Close: nil,
})
err := client.JoinServer( err := client.JoinServer(
conf.GetBotSettings().MCServer, conf.GetBotSettings().MCServer,
@ -44,7 +57,7 @@ func Run() error {
return errors.New("handle game error") return errors.New("handle game error")
} }
if errors.As(err, &perr) { if errors.As(err, &perr) {
log.Print(perr) return err
} else { } else {
return err return err
} }
@ -84,3 +97,61 @@ func onDisguisedMsg(msg chat.Message) error {
return nil return nil
} }
func onDeath() error {
log.Println("Died and Respawned")
// If we exclude Respawn(...) then the player won't press the "Respawn" button upon death
go func() {
time.Sleep(time.Second * 5)
err := conf.Player.Respawn()
if err != nil {
log.Print(err)
}
}()
return nil
}
func onGameStart() error {
log.Println("Game start")
if err := conf.ChatHandler.SendMessage("Hello, world"); err != nil {
return err
}
return nil // if err isn't nil, HandleGame() will return it.
}
func onScreenSlotChange(id, index int) error {
if id == -2 {
log.Printf("Slot: inventory: %v", conf.ScreenManager.Inventory.Slots[index])
} else if id == -1 && index == -1 {
log.Printf("Slot: cursor: %v", conf.ScreenManager.Cursor)
} else {
container, ok := conf.ScreenManager.Screens[id]
if ok {
// Currently, only inventory container is supported
switch container.(type) {
case *screen.Inventory:
slot := container.(*screen.Inventory).Slots[index]
itemInfo := item.ByID[item.ID(slot.ID)]
log.Printf("Slot: Screen[%d].Slot[%d]: [%v] * %d | NBT: %v", id, index, itemInfo, slot.Count, slot.NBT)
}
}
}
return nil
}
func onHealthChange(health float32, foodLevel int32, foodSaturation float32) error {
log.Printf("Health: %.2f, FoodLevel: %d, FoodSaturation: %.2f", health, foodLevel, foodSaturation)
return nil
}
type DisconnectErr struct {
Reason chat.Message
}
func (d DisconnectErr) Error() string {
return "disconnect: " + d.Reason.String()
}
func onDisconnect(reason chat.Message) error {
// return an error value so that we can stop main loop
return DisconnectErr{Reason: reason}
}