diff options
Diffstat (limited to 'server/level.go')
| -rw-r--r-- | server/level.go | 21 |
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() |
