stuff
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
package modules
|
package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package modules
|
package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
@@ -11,7 +11,6 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/admin-else/strom/api"
|
"github.com/admin-else/strom/api"
|
||||||
"github.com/admin-else/strom/client"
|
|
||||||
"github.com/admin-else/strom/crypto"
|
"github.com/admin-else/strom/crypto"
|
||||||
"github.com/admin-else/strom/event"
|
"github.com/admin-else/strom/event"
|
||||||
"github.com/admin-else/strom/proto"
|
"github.com/admin-else/strom/proto"
|
||||||
@@ -157,7 +156,7 @@ func Login(c *proto.Conn, account *api.Account) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ConnectAndLogin(connectTo string, account *api.Account) (c *proto.Conn, err error) {
|
func ConnectAndLogin(connectTo string, account *api.Account) (c *proto.Conn, err error) {
|
||||||
c, err = client.Connect(connectTo)
|
c, err = Connect(connectTo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package modules
|
package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
package modules
|
package client
|
||||||
|
|
||||||
import "time"
|
import (
|
||||||
|
"slices"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
type IntervalTask struct {
|
type IntervalTask struct {
|
||||||
F func() error
|
F func() error
|
||||||
@@ -33,18 +36,15 @@ func (t *Timer) Tick() (err error) {
|
|||||||
}
|
}
|
||||||
t.Interval[i] = task
|
t.Interval[i] = task
|
||||||
}
|
}
|
||||||
var triggerLater []OnceTask
|
for i, task := range t.Once {
|
||||||
for _, task := range t.Once {
|
|
||||||
if task.Trigger.After(time.Now()) {
|
if task.Trigger.After(time.Now()) {
|
||||||
err = task.F()
|
err = task.F()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
slices.Delete(t.Once, i, i)
|
||||||
triggerLater = append(triggerLater, task)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
t.Once = triggerLater
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
+1
-1
Submodule data/minecraft-data updated: 9443ed0dec...3e12d39f67
@@ -0,0 +1,20 @@
|
|||||||
|
package data
|
||||||
|
|
||||||
|
import (
|
||||||
|
"embed"
|
||||||
|
|
||||||
|
"github.com/admin-else/strom/nbt"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:embed registry/*
|
||||||
|
var Registry embed.FS
|
||||||
|
|
||||||
|
func LoadRegistry(name string) (n *nbt.Tag, err error) {
|
||||||
|
r, err := Registry.Open("registry/" + name + ".nbt")
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer r.Close()
|
||||||
|
n, err = nbt.ReadFile(r)
|
||||||
|
return
|
||||||
|
}
|
||||||
Binary file not shown.
+1
-1
@@ -60,7 +60,7 @@ func UnpackSingleValuePalette(r io.Reader, numberOfEntries int) (data []int32, e
|
|||||||
}
|
}
|
||||||
data = make([]int32, numberOfEntries)
|
data = make([]int32, numberOfEntries)
|
||||||
for i := range data {
|
for i := range data {
|
||||||
data[i] = int32(entry)
|
data[i] = entry
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-6
@@ -7,21 +7,18 @@ import (
|
|||||||
|
|
||||||
func WriteFile(file io.Writer, n Tag) (err error) {
|
func WriteFile(file io.Writer, n Tag) (err error) {
|
||||||
gzw := gzip.NewWriter(file)
|
gzw := gzip.NewWriter(file)
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer gzw.Close()
|
defer gzw.Close()
|
||||||
err = n.Encode(gzw)
|
err = n.Encode(gzw)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReadFile(file io.Reader) (err error, n Tag) {
|
func ReadFile(file io.Reader) (n *Tag, err error) {
|
||||||
r, err := gzip.NewReader(file)
|
r, err := gzip.NewReader(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer r.Close()
|
defer r.Close()
|
||||||
t := &Tag{}
|
n = &Tag{}
|
||||||
err = t.Decode(r)
|
err = n.Decode(r)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -67,7 +67,7 @@ func (c *Conn) SetVersion(version string) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Conn) Send(packet proto_base.EncodeDecodeAble) (err error) {
|
func (c *Conn) Send(packet proto_base.EncodeDecodeAble) (err error) {
|
||||||
//fmt.Println("send:", packet)
|
slog.Debug("send", "actor", c.Actor, "packet", fmt.Sprintf("%#v", packet))
|
||||||
switch packet := packet.(type) {
|
switch packet := packet.(type) {
|
||||||
case *UnCodablePacket:
|
case *UnCodablePacket:
|
||||||
err = c.SendRaw(packet.Data)
|
err = c.SendRaw(packet.Data)
|
||||||
@@ -124,7 +124,7 @@ func (c *Conn) OnTick(_ event.Tick) (err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
slog.Debug("packet", "actor", c.Actor, "packet", fmt.Sprintf("%#v", packet))
|
slog.Debug("receive", "actor", c.Actor, "packet", fmt.Sprintf("%#v", packet))
|
||||||
err = c.Loop.Fire(packet)
|
err = c.Loop.Fire(packet)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
go test fuzz v1
|
||||||
|
[]byte("\x05\x000000")
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
go test fuzz v1
|
||||||
|
[]byte("0")
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
go test fuzz v1
|
||||||
|
[]byte("00")
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
go test fuzz v1
|
||||||
|
[]byte("\x040000")
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
go test fuzz v1
|
||||||
|
[]byte("\x0400000")
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
go test fuzz v1
|
||||||
|
[]byte("\x86\x00000000")
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
go test fuzz v1
|
||||||
|
[]byte("80\x00\x01\x05\x01\x010\x01\x00")
|
||||||
@@ -6,6 +6,10 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
UnimplementedErr = errors.New("unimplemented")
|
||||||
|
)
|
||||||
|
|
||||||
type Direction int
|
type Direction int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -218,6 +222,29 @@ type EncodeDecodeAble interface {
|
|||||||
Decode(r io.Reader) (err error)
|
Decode(r io.Reader) (err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type LpVec3d struct {
|
||||||
|
X, Y, Z float64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v LpVec3d) Encode(w io.Writer) (err error) {
|
||||||
|
err = UnimplementedErr
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v LpVec3d) Decode(r io.Reader) (err error) {
|
||||||
|
err = UnimplementedErr
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
type Void struct{}
|
||||||
|
|
||||||
|
func (v Void) Encode(w io.Writer) (err error) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
func (v Void) Decode(r io.Reader) (err error) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
type PacketInfo struct {
|
type PacketInfo struct {
|
||||||
Type EncodeDecodeAble
|
Type EncodeDecodeAble
|
||||||
Name string
|
Name string
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
+20240
-20382
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -15,6 +15,7 @@ type TypesInfo struct {
|
|||||||
|
|
||||||
type PacketInfo struct {
|
type PacketInfo struct {
|
||||||
TName, Name, Direction, State, PacketId, ProtocolVersion, MinecraftVersion string
|
TName, Name, Direction, State, PacketId, ProtocolVersion, MinecraftVersion string
|
||||||
|
PacketDef any
|
||||||
}
|
}
|
||||||
|
|
||||||
func GeneratePacketInfoFile(versions []string, packetInfos []PacketInfo) (err error) {
|
func GeneratePacketInfoFile(versions []string, packetInfos []PacketInfo) (err error) {
|
||||||
@@ -31,10 +32,8 @@ func GeneratePacketInfoFile(versions []string, packetInfos []PacketInfo) (err er
|
|||||||
vUnderscore := "v" + strings.ReplaceAll(p.MinecraftVersion, ".", "_")
|
vUnderscore := "v" + strings.ReplaceAll(p.MinecraftVersion, ".", "_")
|
||||||
typeName := p.TName
|
typeName := p.TName
|
||||||
var typeExpr ast.Expr
|
var typeExpr ast.Expr
|
||||||
if typeName == "struct{}" {
|
if p.PacketDef == "void" {
|
||||||
typeExpr = &ast.StructType{Fields: &ast.FieldList{}}
|
typeExpr = Selector("proto_base", "Void")
|
||||||
} else if strings.HasPrefix(typeName, "proto_base.") {
|
|
||||||
typeExpr = Selector("proto_base", strings.TrimPrefix(typeName, "proto_base."))
|
|
||||||
} else {
|
} else {
|
||||||
typeExpr = Selector(vUnderscore, typeName)
|
typeExpr = Selector(vUnderscore, typeName)
|
||||||
}
|
}
|
||||||
@@ -46,7 +45,7 @@ func GeneratePacketInfoFile(versions []string, packetInfos []PacketInfo) (err er
|
|||||||
KeyValueExpr(Ident("Type"), AddrOf(CompLit(typeExpr, nil))),
|
KeyValueExpr(Ident("Type"), AddrOf(CompLit(typeExpr, nil))),
|
||||||
KeyValueExpr(Ident("Name"), StrLit(p.Name)),
|
KeyValueExpr(Ident("Name"), StrLit(p.Name)),
|
||||||
KeyValueExpr(Ident("Direction"), Selector("proto_base", p.Direction)),
|
KeyValueExpr(Ident("Direction"), Selector("proto_base", p.Direction)),
|
||||||
KeyValueExpr(Ident("state"), Selector("proto_base", p.State)),
|
KeyValueExpr(Ident("State"), Selector("proto_base", p.State)),
|
||||||
KeyValueExpr(Ident("PacketId"), NumLit(int(packetId))),
|
KeyValueExpr(Ident("PacketId"), NumLit(int(packetId))),
|
||||||
KeyValueExpr(Ident("ProtocolVersion"), NumLit(protocolVersion)),
|
KeyValueExpr(Ident("ProtocolVersion"), NumLit(protocolVersion)),
|
||||||
}))
|
}))
|
||||||
|
|||||||
@@ -293,6 +293,7 @@ func (g *Generator) GenerateProtocol(protocol Protocol, version string) (err err
|
|||||||
v2 := v2.(string)
|
v2 := v2.(string)
|
||||||
typeName := prefix + CamelCase(v2)
|
typeName := prefix + CamelCase(v2)
|
||||||
g.packetInfos = append(g.packetInfos, PacketInfo{
|
g.packetInfos = append(g.packetInfos, PacketInfo{
|
||||||
|
PacketDef: v2,
|
||||||
TName: typeName,
|
TName: typeName,
|
||||||
Name: k2,
|
Name: k2,
|
||||||
Direction: types.Direction,
|
Direction: types.Direction,
|
||||||
@@ -378,7 +379,7 @@ func GenerateVersions(versions []string) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
err := GenerateVersions([]string{"1.21.8"})
|
err := GenerateVersions([]string{"1.21.8", "1.21.9", "1.21.11"})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -532,6 +532,7 @@ func (g *Generator) RegisterDecoderNatives() {
|
|||||||
"varlong": VarLongDecoder,
|
"varlong": VarLongDecoder,
|
||||||
"anonymousNbt": DefaultDecoder,
|
"anonymousNbt": DefaultDecoder,
|
||||||
"anonOptionalNbt": DefaultDecoder, // I have no idea what the difference is between these two
|
"anonOptionalNbt": DefaultDecoder, // I have no idea what the difference is between these two
|
||||||
|
"lpVec3": DefaultDecoder,
|
||||||
"UUID": UUIDDecoder,
|
"UUID": UUIDDecoder,
|
||||||
"restBuffer": DefaultDecoder,
|
"restBuffer": DefaultDecoder,
|
||||||
|
|
||||||
|
|||||||
@@ -359,6 +359,7 @@ func (g *Generator) RegisterEncoderNatives() {
|
|||||||
"anonOptionalNbt": DefaultEncoder, // I have no idea what the difference is between these two
|
"anonOptionalNbt": DefaultEncoder, // I have no idea what the difference is between these two
|
||||||
"UUID": UUIDEncoder,
|
"UUID": UUIDEncoder,
|
||||||
"restBuffer": DefaultEncoder,
|
"restBuffer": DefaultEncoder,
|
||||||
|
"lpVec3": DefaultEncoder,
|
||||||
"string": StringEncoder,
|
"string": StringEncoder,
|
||||||
|
|
||||||
"f32": SimpleTypeEncoder,
|
"f32": SimpleTypeEncoder,
|
||||||
|
|||||||
@@ -194,5 +194,6 @@ func (g *Generator) RegisterNatives() {
|
|||||||
"bitflags": VisitBitFlagsType,
|
"bitflags": VisitBitFlagsType,
|
||||||
"topBitSetTerminatedArray": VisitToDoType,
|
"topBitSetTerminatedArray": VisitToDoType,
|
||||||
"todo": VisitToDoType,
|
"todo": VisitToDoType,
|
||||||
|
"lpVec3": MakeSelectorVisitor("proto_base", "LpVec3d"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,80 @@
|
|||||||
|
package server
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log/slog"
|
||||||
|
|
||||||
|
"github.com/admin-else/strom/data"
|
||||||
|
"github.com/admin-else/strom/event"
|
||||||
|
"github.com/admin-else/strom/nbt"
|
||||||
|
"github.com/admin-else/strom/proto"
|
||||||
|
"github.com/admin-else/strom/proto_base"
|
||||||
|
"github.com/admin-else/strom/proto_generated/v1_21_8"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ConfigServer struct {
|
||||||
|
*proto.Conn
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ConfigServer) Default(event event.Anything) (err error) {
|
||||||
|
slog.Debug("Config server", "packet", fmt.Sprintf("%#v", event.Val))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ConfigServer) OnStart(_ event.OnStart) (err error) {
|
||||||
|
n, err := data.LoadRegistry(c.Version)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, p := range n.Value.(map[string]any)["Registries"].([]any) {
|
||||||
|
packet := &v1_21_8.ConfigurationToClientPacketRegistryData{Id: p.(map[string]any)["Id"].(string)}
|
||||||
|
for _, entry := range p.(map[string]any)["Entries"].([]any) {
|
||||||
|
entryTyped := entry.(map[string]any)
|
||||||
|
packet.Entries = append(packet.Entries, struct {
|
||||||
|
Key string
|
||||||
|
Value *nbt.Anon
|
||||||
|
}{entryTyped["TagType"].(string), &nbt.Anon{Value: entryTyped["Value"]}})
|
||||||
|
}
|
||||||
|
err = c.Send(packet)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tagsPacket := &v1_21_8.ConfigurationToClientPacketTags{}
|
||||||
|
for _, p := range n.Value.(map[string]any)["Tags"].([]any) {
|
||||||
|
p := p.(map[string]any)
|
||||||
|
tags := v1_21_8.Tags{}
|
||||||
|
for _, entry := range p["Entries"].([]any) {
|
||||||
|
entry := entry.(map[string]any)
|
||||||
|
tags.Val = append(tags.Val, struct {
|
||||||
|
TagName string
|
||||||
|
Entries []int32
|
||||||
|
}{
|
||||||
|
TagName: entry["TagName"].(string),
|
||||||
|
Entries: entry["Entries"].([]int32),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
tagsPacket.Tags = append(tagsPacket.Tags, struct {
|
||||||
|
TagType string
|
||||||
|
Tags v1_21_8.Tags
|
||||||
|
}{TagType: p["TagType"].(string), Tags: tags})
|
||||||
|
}
|
||||||
|
err = c.Send(tagsPacket)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = c.Send(&v1_21_8.ConfigurationToClientPacketFinishConfiguration{})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ConfigServer) OnFinishConfiguration(_ *v1_21_8.ConfigurationToServerPacketFinishConfiguration) (err error) {
|
||||||
|
c.SetState(proto_base.Play)
|
||||||
|
err = event.HandlerDoneErr{}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func ServeConfig(c *proto.Conn) (err error) {
|
||||||
|
cs := &ConfigServer{c}
|
||||||
|
err = cs.Start(cs)
|
||||||
|
return
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"flag"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/admin-else/strom/nbt"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
FileFlag = flag.String("file", "", "The NBT file to print")
|
||||||
|
)
|
||||||
|
|
||||||
|
func mainE() (err error) {
|
||||||
|
flag.Parse()
|
||||||
|
f, err := os.Open(*FileFlag)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
n, err := nbt.ReadFile(f)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
b, err := json.MarshalIndent(n, "", " ")
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, err = os.Stdout.Write(b)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
err := mainE()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,14 +3,14 @@ package main
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"log/slog"
|
"log/slog"
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/admin-else/strom/api"
|
"github.com/admin-else/strom/api"
|
||||||
"github.com/admin-else/strom/client"
|
"github.com/admin-else/strom/client"
|
||||||
"github.com/admin-else/strom/client/modules"
|
|
||||||
"github.com/admin-else/strom/data"
|
"github.com/admin-else/strom/data"
|
||||||
"github.com/admin-else/strom/event"
|
"github.com/admin-else/strom/event"
|
||||||
|
"github.com/admin-else/strom/nbt"
|
||||||
"github.com/admin-else/strom/proto"
|
"github.com/admin-else/strom/proto"
|
||||||
"github.com/admin-else/strom/proto_base"
|
"github.com/admin-else/strom/proto_base"
|
||||||
"github.com/admin-else/strom/proto_generated/v1_21_8"
|
"github.com/admin-else/strom/proto_generated/v1_21_8"
|
||||||
@@ -26,7 +26,12 @@ func wontFail[T any](v T, err error) T {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
CompatibleProtocolVersion = wontFail(data.LookUpVersionByName("1.21.8")).Version
|
// Edit these two
|
||||||
|
|
||||||
|
SaveAs = "1.21.8"
|
||||||
|
Version = "1.21.8"
|
||||||
|
|
||||||
|
CompatibleProtocolVersion = wontFail(data.LookUpVersionByName(Version)).Version
|
||||||
FinishedConfigErr = errors.New("finished configuration")
|
FinishedConfigErr = errors.New("finished configuration")
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -40,6 +45,7 @@ var Status = wontFail(json.Marshal(server.StatusResponse{
|
|||||||
|
|
||||||
type Proxy struct {
|
type Proxy struct {
|
||||||
Client, Servee *proto.Conn
|
Client, Servee *proto.Conn
|
||||||
|
Data nbt.Tag
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Proxy) OnAnything(e event.Anything) (err error) {
|
func (p *Proxy) OnAnything(e event.Anything) (err error) {
|
||||||
@@ -51,7 +57,6 @@ func (p *Proxy) OnAnything(e event.Anything) (err error) {
|
|||||||
if !ok {
|
if !ok {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
slog.Debug("packet", "type", packetInfo.Name, "packet", fmt.Sprintf("%#v", packet))
|
|
||||||
switch packetInfo.Direction {
|
switch packetInfo.Direction {
|
||||||
case proto_base.ToServer:
|
case proto_base.ToServer:
|
||||||
err = p.Client.Send(packet)
|
err = p.Client.Send(packet)
|
||||||
@@ -61,12 +66,32 @@ func (p *Proxy) OnAnything(e event.Anything) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Proxy) OnFinishConfiguration(_ *v1_21_8.ConfigurationToServerPacketFinishConfiguration) (err error) {
|
func (p *Proxy) OnFinishConfiguration(_ *v1_21_8.ConfigurationToClientPacketFinishConfiguration) (err error) {
|
||||||
err = FinishedConfigErr
|
err = FinishedConfigErr
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Proxy) OnData(data *v1_21_8.ConfigurationToClientPacketRegistryData) (err error) {
|
func (p *Proxy) OnData(data *v1_21_8.ConfigurationToClientPacketRegistryData) (err error) {
|
||||||
|
d := p.Data.Value.(map[string]any)["Registries"].([]any)
|
||||||
|
var entries []any
|
||||||
|
for _, entry := range data.Entries {
|
||||||
|
entries = append(entries, map[string]any{"TagType": entry.Key, "Value": entry.Value.Value})
|
||||||
|
}
|
||||||
|
d = append(d, map[string]any{"Id": data.Id, "Entries": entries})
|
||||||
|
p.Data.Value.(map[string]any)["Registries"] = d
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Proxy) OnTags(data *v1_21_8.ConfigurationToClientPacketTags) (err error) {
|
||||||
|
var tags []any
|
||||||
|
for _, tag := range data.Tags {
|
||||||
|
var entries []any
|
||||||
|
for _, entry := range tag.Tags.Val {
|
||||||
|
entries = append(entries, map[string]any{"TagName": entry.TagName, "Entries": entry.Entries})
|
||||||
|
}
|
||||||
|
tags = append(tags, map[string]any{"TagType": tag.TagType, "Entries": entries})
|
||||||
|
}
|
||||||
|
p.Data.Value.(map[string]any)["Tags"] = tags
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,7 +108,7 @@ func handleClient(c *proto.Conn) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer sockPuppet.Close()
|
defer sockPuppet.Close()
|
||||||
err = sockPuppet.Start(&modules.LoginClient{
|
err = sockPuppet.Start(&client.LoginClient{
|
||||||
Conn: sockPuppet,
|
Conn: sockPuppet,
|
||||||
Account: acc,
|
Account: acc,
|
||||||
})
|
})
|
||||||
@@ -92,6 +117,7 @@ func handleClient(c *proto.Conn) (err error) {
|
|||||||
}
|
}
|
||||||
errChan := make(chan error)
|
errChan := make(chan error)
|
||||||
p := &Proxy{Client: sockPuppet, Servee: c}
|
p := &Proxy{Client: sockPuppet, Servee: c}
|
||||||
|
p.Data.Value = map[string]any{"Registries": []any{}}
|
||||||
go func() {
|
go func() {
|
||||||
errChan <- p.Client.Start(p)
|
errChan <- p.Client.Start(p)
|
||||||
}()
|
}()
|
||||||
@@ -99,6 +125,12 @@ func handleClient(c *proto.Conn) (err error) {
|
|||||||
errChan <- p.Servee.Start(p)
|
errChan <- p.Servee.Start(p)
|
||||||
}()
|
}()
|
||||||
err = <-errChan
|
err = <-errChan
|
||||||
|
f, err := os.Create("data/registry/" + SaveAs + ".nbt")
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
err = nbt.WriteFile(f, p.Data)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,4 +1,3 @@
|
|||||||
// THIS THING IS BROKEN
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@@ -8,7 +7,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/admin-else/strom/api"
|
"github.com/admin-else/strom/api"
|
||||||
"github.com/admin-else/strom/client/modules"
|
"github.com/admin-else/strom/client"
|
||||||
"github.com/admin-else/strom/event"
|
"github.com/admin-else/strom/event"
|
||||||
"github.com/admin-else/strom/proto"
|
"github.com/admin-else/strom/proto"
|
||||||
"github.com/admin-else/strom/proto_base"
|
"github.com/admin-else/strom/proto_base"
|
||||||
@@ -39,7 +38,7 @@ func (p *ProxyClient) OnStart(_ event.OnStart) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *ProxyClient) OnUnCodeAble(packet proto.UnCodablePacket) (err error) {
|
func (p *ProxyClient) OnUnCodeAble(packet *proto.UnCodablePacket) (err error) {
|
||||||
err = p.OnDefault(event.Unhandled{Val: packet})
|
err = p.OnDefault(event.Unhandled{Val: packet})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@@ -80,7 +79,7 @@ func (p *Proxy) OnFinishConfiguration(packet *v1_21_8.ConfigurationToServerPacke
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Proxy) OnUnCodeAble(packet proto.UnCodablePacket) (err error) {
|
func (p *Proxy) OnUnCodeAble(packet *proto.UnCodablePacket) (err error) {
|
||||||
err = p.OnDefault(event.Unhandled{Val: packet})
|
err = p.OnDefault(event.Unhandled{Val: packet})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@@ -109,7 +108,7 @@ func TestFailedPacket%10X(t *testing.T) {
|
|||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
func SaveUnCodeAbleAsTest(d proto_base.Direction, packet proto.UnCodablePacket) {
|
func SaveUnCodeAbleAsTest(d proto_base.Direction, packet *proto.UnCodablePacket) {
|
||||||
hUntrimmed := sha256.Sum256(packet.Data)
|
hUntrimmed := sha256.Sum256(packet.Data)
|
||||||
h := hUntrimmed[:8]
|
h := hUntrimmed[:8]
|
||||||
f, err := os.Create(fmt.Sprintf(".failed_packets/%v_%10x_test.go", len(packet.Data), h))
|
f, err := os.Create(fmt.Sprintf(".failed_packets/%v_%10x_test.go", len(packet.Data), h))
|
||||||
@@ -145,7 +144,7 @@ func main() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c, err := modules.ConnectAndLogin("127.0.0.1:25566", acc)
|
c, err := client.ConnectAndLogin("127.0.0.1:25566", acc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user