summaryrefslogtreecommitdiff
path: root/server/level.go
diff options
context:
space:
mode:
Diffstat (limited to 'server/level.go')
-rw-r--r--server/level.go21
1 files changed, 21 insertions, 0 deletions
diff --git a/server/level.go b/server/level.go
index 17f8eb8..7b03aca 100644
--- a/server/level.go
+++ b/server/level.go
@@ -236,6 +236,27 @@ func (l *level) SetBlock(from phony.Actor, pos blockPos, block blockType) {
})
}
+func (l *level) TrySetBlock(
+ from phony.Actor, pos blockPos, block blockType, auth authLevel,
+ reject func(realBlock blockType)) {
+ l.mapM.GetBlock(from, pos, func(curBlock blockType) {
+ if blockDefinitions[curBlock].AuthLevel > auth {
+ from.Act(nil, func() {reject(curBlock)})
+ return
+ }
+ def, ok := blockDefinitions[block]
+ if !ok && block > blockStoneBricks {
+ from.Act(nil, func() {reject(curBlock)})
+ return
+ }
+ if def.AuthLevel > auth {
+ from.Act(nil, func() {reject(curBlock)})
+ return
+ }
+ l.SetBlock(nil, pos, block)
+ })
+}
+
func (l *level) OnAddPlayer(from *player, name string, pos entityPos) {
l.Act(from, func() {
l.load()