forgot to spawn player oops
This commit is contained in:
parent
6f6cbd344c
commit
c93a360d09
|
@ -2,6 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"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)
|
||||
}
|
||||
|
||||
if err := spawn_conn(ctx, conn, serverConn); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
println("Connected")
|
||||
println("Press ctrl+c to exit")
|
||||
|
||||
os.MkdirAll(out_path, 0755)
|
||||
|
||||
errs := make(chan error)
|
||||
errs := make(chan error, 2)
|
||||
go func() { // server -> client
|
||||
defer serverConn.Close()
|
||||
defer listener.Disconnect(conn, "connection lost")
|
||||
for {
|
||||
pk, err := serverConn.ReadPacket()
|
||||
if err != nil {
|
||||
errs <- err
|
||||
if disconnect, ok := errors.Unwrap(err).(minecraft.DisconnectError); ok {
|
||||
_ = listener.Disconnect(conn, disconnect.Error())
|
||||
}
|
||||
return
|
||||
}
|
||||
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 {
|
||||
pk, err := conn.ReadPacket()
|
||||
if err != nil {
|
||||
errs <- err
|
||||
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
|
||||
}
|
||||
|
||||
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) {
|
||||
var packet_func func(header packet.Header, payload []byte, src, dst net.Addr) = nil
|
||||
if G_debug {
|
||||
|
@ -258,26 +281,9 @@ func handleConn(ctx context.Context, conn *minecraft.Conn, listener *minecraft.L
|
|||
return
|
||||
}
|
||||
|
||||
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 {
|
||||
fmt.Fprintf(os.Stderr, "Failed to start game: %s\n", err)
|
||||
return
|
||||
}
|
||||
case <-ctx.Done():
|
||||
fmt.Fprintf(os.Stderr, "Connection cancelled\n")
|
||||
return
|
||||
}
|
||||
if err := spawn_conn(ctx, conn, serverConn); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Failed to spawn: %s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
G_exit = func() {
|
||||
|
|
Loading…
Reference in New Issue