mirror of
https://github.com/CosmicStar98/bedrocktool.git
synced 2024-06-01 21:25:15 +00:00
forgot to spawn player oops
This commit is contained in:
parent
6f6cbd344c
commit
c93a360d09
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
@ -60,22 +61,32 @@ func skin_proxy_main(ctx context.Context, args []string) error {
|
||||||
return fmt.Errorf("failed to connect to %s: %s", server, err)
|
return fmt.Errorf("failed to connect to %s: %s", server, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := spawn_conn(ctx, conn, serverConn); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
println("Connected")
|
println("Connected")
|
||||||
println("Press ctrl+c to exit")
|
println("Press ctrl+c to exit")
|
||||||
|
|
||||||
os.MkdirAll(out_path, 0755)
|
os.MkdirAll(out_path, 0755)
|
||||||
|
|
||||||
errs := make(chan error)
|
errs := make(chan error, 2)
|
||||||
go func() { // server -> client
|
go func() { // server -> client
|
||||||
|
defer serverConn.Close()
|
||||||
|
defer listener.Disconnect(conn, "connection lost")
|
||||||
for {
|
for {
|
||||||
pk, err := serverConn.ReadPacket()
|
pk, err := serverConn.ReadPacket()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errs <- err
|
if disconnect, ok := errors.Unwrap(err).(minecraft.DisconnectError); ok {
|
||||||
|
_ = listener.Disconnect(conn, disconnect.Error())
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
process_packet_skins(out_path, pk)
|
process_packet_skins(out_path, pk)
|
||||||
|
|
||||||
conn.WritePacket(pk)
|
if err = conn.WritePacket(pk); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
@ -83,10 +94,15 @@ func skin_proxy_main(ctx context.Context, args []string) error {
|
||||||
for {
|
for {
|
||||||
pk, err := conn.ReadPacket()
|
pk, err := conn.ReadPacket()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errs <- err
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
serverConn.WritePacket(pk)
|
|
||||||
|
if err := serverConn.WritePacket(pk); err != nil {
|
||||||
|
if disconnect, ok := errors.Unwrap(err).(minecraft.DisconnectError); ok {
|
||||||
|
_ = listener.Disconnect(conn, disconnect.Error())
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
46
world.go
46
world.go
|
@ -241,6 +241,29 @@ func ProcessMove(player *packet.MovePlayer) {
|
||||||
world_state.PlayerPos = *player
|
world_state.PlayerPos = *player
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func spawn_conn(ctx context.Context, conn *minecraft.Conn, serverConn *minecraft.Conn) error {
|
||||||
|
errs := make(chan error, 2)
|
||||||
|
go func() {
|
||||||
|
errs <- conn.StartGame(serverConn.GameData())
|
||||||
|
}()
|
||||||
|
go func() {
|
||||||
|
errs <- serverConn.DoSpawn()
|
||||||
|
}()
|
||||||
|
|
||||||
|
// wait for both to finish
|
||||||
|
for i := 0; i < 2; i++ {
|
||||||
|
select {
|
||||||
|
case err := <-errs:
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to start game: %s", err)
|
||||||
|
}
|
||||||
|
case <-ctx.Done():
|
||||||
|
return fmt.Errorf("connection cancelled")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func handleConn(ctx context.Context, conn *minecraft.Conn, listener *minecraft.Listener, target string) {
|
func handleConn(ctx context.Context, conn *minecraft.Conn, listener *minecraft.Listener, target string) {
|
||||||
var packet_func func(header packet.Header, payload []byte, src, dst net.Addr) = nil
|
var packet_func func(header packet.Header, payload []byte, src, dst net.Addr) = nil
|
||||||
if G_debug {
|
if G_debug {
|
||||||
|
@ -258,26 +281,9 @@ func handleConn(ctx context.Context, conn *minecraft.Conn, listener *minecraft.L
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
errs := make(chan error, 2)
|
if err := spawn_conn(ctx, conn, serverConn); err != nil {
|
||||||
go func() {
|
fmt.Fprintf(os.Stderr, "Failed to spawn: %s\n", err)
|
||||||
errs <- conn.StartGame(serverConn.GameData())
|
return
|
||||||
}()
|
|
||||||
go func() {
|
|
||||||
errs <- serverConn.DoSpawn()
|
|
||||||
}()
|
|
||||||
|
|
||||||
// wait for both to finish
|
|
||||||
for i := 0; i < 2; i++ {
|
|
||||||
select {
|
|
||||||
case err := <-errs:
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintf(os.Stderr, "Failed to start game: %s\n", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
case <-ctx.Done():
|
|
||||||
fmt.Fprintf(os.Stderr, "Connection cancelled\n")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
G_exit = func() {
|
G_exit = func() {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user