summaryrefslogtreecommitdiff
path: root/server/level.go
diff options
context:
space:
mode:
authorraven <citrons@mondecitronne.com>2026-03-25 16:35:24 -0500
committerraven <citrons@mondecitronne.com>2026-03-25 16:35:24 -0500
commit31853592678b1f796f18dc1ac803c0a188ec876c (patch)
tree5107f0d29e68a0f6966412229a6c4f2070b5cd5f /server/level.go
parent68983267c60a5a3fb8a036dbe70334f11aa60790 (diff)
reject invalid block placement
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()