summaryrefslogtreecommitdiff
path: root/server/commands.go
diff options
context:
space:
mode:
Diffstat (limited to 'server/commands.go')
-rw-r--r--server/commands.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/server/commands.go b/server/commands.go
index 1bad5f6..5ec321a 100644
--- a/server/commands.go
+++ b/server/commands.go
@@ -1,6 +1,7 @@
package server
import (
+ "fmt"
"sort"
"strconv"
"strings"
@@ -128,6 +129,66 @@ var commands = map[string]commandHandler {
}
return ""
},
+ "createLevel": func(ctx commandCtx) string {
+ var (
+ ok = true
+ size = blockPos {256, 256, 256}
+ genType = "flat"
+ )
+ ctx.arg.flags["--size"] = func(arg *arguments) {
+ var coords []int
+ for i := 0; i < 3; i++ {
+ coord, k := arg.nextArg()
+ i, err := strconv.Atoi(coord)
+ ok = ok && k && err == nil
+ coords = append(coords, i)
+ }
+ if !ok {
+ return
+ }
+ size = blockPos {
+ X: blockCoord(coords[0]),
+ Y: blockCoord(coords[1]),
+ Z: blockCoord(coords[2]),
+ }
+ }
+ ctx.arg.flags["--gen"] = func(arg *arguments) {
+ var k bool
+ genType, k = arg.nextArg()
+ ok = ok && k
+ }
+ ok = ok && len(ctx.arg.allArgs()) == 0
+ if !ok {
+ return usage("createLevel")
+ }
+ switch genType {
+ case "flat", "empty":
+ default:
+ return "Unknown generation type: " + genType
+ }
+ id, lvl := ctx.server.newLevel(levelInfo {Size: size})
+ lvl.Act(nil, func() {
+ ctx.sender.OnCommandOutput(ctx.server, "Creating level...")
+ switch genType {
+ case "flat":
+ lvl.generateFlat()
+ case "empty":
+ lvl.generateEmpty()
+ }
+ ctx.sender.OnCommandOutput(ctx.server,
+ fmt.Sprintf("Generated level id %d.", id),
+ )
+ })
+ switch pl := ctx.sender.(type) {
+ case *player:
+ pl.ChangeLevel(ctx.server, id, entityPos {
+ X: entityCoord(size.X) * blockSize / 2,
+ Y: entityCoord(size.Y) * blockSize / 2 + blockSize,
+ Z: entityCoord(size.Z) * blockSize / 2,
+ })
+ }
+ return ""
+ },
"op": func(ctx commandCtx) string {
name, ok := ctx.arg.nextArg()
if !ok {
@@ -200,6 +261,7 @@ var commands = map[string]commandHandler {
var commandAuth = map[string]authLevel {
"tp": cheatAuth,
+ "createLevel": opAuth,
"op": opAuth,
"deop": opAuth,
"save": opAuth,