LockItLikeItsHot: type: world debug: false events: on player right clicks *chest|furnace|*door|hopper|*gate|dispenser|dropper|*shulker_box: - define sign_locations - foreach <[sign_locations]> as:sign: - if <[sign].sub[<[sign].block_facing>].is[==].to[]>: - if <[sign].sign_contents.get[1].contains[<&lb>Private<&rb>]>: - define lock <[sign]> - if <[sign].sign_contents.get[1].contains[<&lb>Other<&sp>Users<&rb>]>: - define lock_extra <[sign]> - if <[sign].sub[<[sign].block_facing>].is[==].to[]||false>: - if <[sign].sign_contents.get[1].contains[<&lb>Private<&rb>]>: - define lock <[sign]> - if <[sign].sign_contents.get[1].contains[<&lb>Other<&sp>Users<&rb>]>: - define lock_extra <[sign]> - if <[lock].sign_contents.contains[].not||false>: - if : - narrate "<&4>You bypass this lock!" - stop - if <[lock_extra].sign_contents.contains[]||false>: - stop - narrate "<&4>You do not have access to this!" - determine cancelled - if : - if : - stop - if <[lock].sign_contents.contains[].not||false>: - narrate "<&4>This object is already locked!" - if : - narrate "You cannot add another lock sign!" - determine cancelled - if : - sign direction:].to_list.first> type:wall_sign "<&lb>Other Users<&rb>|" - determine cancelled - sign direction:].to_list.first> type:wall_sign "<&lb>Private<&rb>|" - narrate "You successfully lock this object!" - determine cancelled on player breaks chest|furnace|*door: - define sign_locations - define lock false - foreach <[sign_locations]> as:sign: - if <[sign].sub[<[sign].block_facing>].is[==].to[]>: - if <[sign].sign_contents.get[1].contains[<&lb>Private<&rb>]>: - narrate "<&4>You may not break this locked item!" - determine cancelled - if <[sign].sub[<[sign].block_facing>].is[==].to[]||false>: - if <[sign].sign_contents.get[1].contains[<&lb>Private<&rb>]>: - narrate "<&4>You may not break this locked item!" - determine cancelled on player breaks wall_sign: - if Private<&rb>].or[Other<&sp>Users<&rb>]>]>: - if ].not||false>: - if : - narrate "<&4>You broke this lock!" - stop - narrate "<&4>You may not break this lock!" - determine cancelled on player right clicks wall_sign: - if Private<&rb>]||false.or[Other<&sp>Users<&rb>]||false>]>: - if ]||false>: - narrate "____________________________________" - narrate "<&6>/lock <&e>edit <&2>(line) <&7>(PLAYERNAME)" - narrate "<&2>This allows the lock owner to add or remove names." - narrate "<&2>Line input is either 3 or 4" - narrate "<&2>Name input is either a username or 'clear' to remove that line" EditThatLockLikeItsHot: type: command usage: /lock name: lock debug: false script: - if ].not.or[]>: - narrate "____________________________________" - narrate "<&6>/lock <&e>edit <&2>(line) <&7>(PLAYERNAME)" - narrate "<&2>This allows the lock owner to add or remove names." - narrate "<&2>Line input is either 3 or 4" - narrate "<&2>Name input is either a username or 'clear' to remove that line" - stop - if : - define local - if <[local].material.name.contains[wall_sign]>: - define sign_text <[local].sign_contents> - if <[sign_text].get[1].contains[<&lb>Private<&rb>].or[<[sign_text].get[1].contains[<&lb>Other<&sp>Users<&rb>]||false>]||false>: - if ]>: - if : - define new_name - else: - define new_name - define list <[sign_text].set[<[new_name]>].at[]> - sign <[local]> "<[list]>" - narrate "Sign Changed!" - else: - narrate "<&4>You cannot edit someone elses lock!"