mirror of
https://github.com/CosmicStar98/bedrocktool.git
synced 2024-06-16 13:09:45 +00:00
fix merge
This commit is contained in:
parent
3477b0eab5
commit
728d7f972e
1
go.mod
1
go.mod
|
@ -32,6 +32,7 @@ require (
|
|||
github.com/golang/protobuf v1.5.2 // indirect
|
||||
github.com/golang/snappy v0.0.4 // indirect
|
||||
github.com/gorilla/websocket v1.4.0 // indirect
|
||||
github.com/jinzhu/copier v0.3.5 // indirect
|
||||
github.com/klauspost/compress v1.15.9 // indirect
|
||||
github.com/muhammadmuzzammil1998/jsonc v1.0.0 // indirect
|
||||
github.com/sandertv/go-raknet v1.11.1 // indirect
|
||||
|
|
2
go.sum
2
go.sum
|
@ -33,6 +33,8 @@ github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH
|
|||
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg=
|
||||
github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
|
||||
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY=
|
||||
github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
|
||||
|
|
32
merge.go
32
merge.go
|
@ -6,10 +6,12 @@ import (
|
|||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/df-mc/dragonfly/server/world/mcdb"
|
||||
"github.com/df-mc/goleveldb/leveldb/opt"
|
||||
"github.com/google/subcommands"
|
||||
"github.com/jinzhu/copier"
|
||||
)
|
||||
|
||||
type MergeCMD struct {
|
||||
|
@ -41,6 +43,7 @@ func (c *MergeCMD) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{
|
|||
}
|
||||
|
||||
for i, world_name := range c.worlds {
|
||||
first := i == 0
|
||||
fmt.Printf("Adding %s\n", world_name)
|
||||
s, err := os.Stat(world_name)
|
||||
if errors.Is(err, os.ErrNotExist) {
|
||||
|
@ -51,11 +54,27 @@ func (c *MergeCMD) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{
|
|||
world_name += "_unpack"
|
||||
unpack_zip(f, s.Size(), world_name)
|
||||
}
|
||||
err = c.merge_worlds(prov_out, world_name, i == 0)
|
||||
err = c.merge_worlds(prov_out, world_name, first)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%s %s\n", world_name, err)
|
||||
}
|
||||
if !s.IsDir() {
|
||||
os.RemoveAll(world_name)
|
||||
}
|
||||
}
|
||||
|
||||
if err = prov_out.Close(); err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
return 1
|
||||
}
|
||||
time.Sleep(1 * time.Second)
|
||||
|
||||
if err := zip_folder(out_name+".mcworld", out_name); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "zipping: %s\n", err)
|
||||
return 1
|
||||
}
|
||||
|
||||
//os.RemoveAll(out_name)
|
||||
return 0
|
||||
}
|
||||
|
||||
|
@ -96,13 +115,16 @@ func (c *MergeCMD) merge_worlds(prov_out *mcdb.Provider, folder string, first bo
|
|||
if err := prov_out.SaveEntities(i.P, entities, i.D); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if first {
|
||||
prov_out.SaveSettings(prov_in.Settings())
|
||||
}
|
||||
count += 1
|
||||
}
|
||||
}
|
||||
|
||||
if first {
|
||||
fmt.Print("Applying Settings, level.dat\n\n")
|
||||
prov_out.SaveSettings(prov_in.Settings())
|
||||
out_ld := prov_out.LevelDat()
|
||||
copier.Copy(out_ld, prov_in.LevelDat())
|
||||
}
|
||||
fmt.Printf("Added: %d\n", count)
|
||||
return nil
|
||||
}
|
||||
|
|
25
utils.go
25
utils.go
|
@ -10,10 +10,12 @@ import (
|
|||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/fs"
|
||||
"log"
|
||||
"net"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
"time"
|
||||
|
@ -333,3 +335,26 @@ func unpack_zip(r io.ReaderAt, size int64, unpack_folder string) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func zip_folder(filename, folder string) error {
|
||||
f, err := os.Create(filename)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
zw := zip.NewWriter(f)
|
||||
err = filepath.WalkDir(folder, func(path string, d fs.DirEntry, err error) error {
|
||||
if !d.Type().IsDir() {
|
||||
rel := path[len(folder)+1:]
|
||||
zwf, _ := zw.Create(rel)
|
||||
data, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
zwf.Write(data)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
zw.Close()
|
||||
f.Close()
|
||||
return err
|
||||
}
|
||||
|
|
25
world.go
25
world.go
|
@ -1,7 +1,6 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"archive/zip"
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
|
@ -10,11 +9,9 @@ import (
|
|||
"hash/crc32"
|
||||
"image"
|
||||
"image/draw"
|
||||
"io/fs"
|
||||
"log"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
@ -416,28 +413,10 @@ func (w *WorldState) SaveAndReset() {
|
|||
|
||||
// zip it
|
||||
filename := folder + ".mcworld"
|
||||
f, err := os.Create(filename)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
zw := zip.NewWriter(f)
|
||||
err = filepath.WalkDir(folder, func(path string, d fs.DirEntry, err error) error {
|
||||
if d.Type().IsRegular() {
|
||||
rel := path[len(folder)+1:]
|
||||
zwf, _ := zw.Create(rel)
|
||||
data, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
|
||||
if err := zip_folder(filename, folder); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
zwf.Write(data)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
zw.Close()
|
||||
f.Close()
|
||||
fmt.Printf("Saved: %s\n", filename)
|
||||
os.RemoveAll(folder)
|
||||
w.Reset()
|
||||
|
|
Loading…
Reference in New Issue
Block a user