-Door_Closer:
- type: world
- debug: false
- events:
- after player right clicks *door|*_gate priority:2:
- - if !<context.location.material.switched>:
- - stop
- - wait 2s
- - waituntil <context.location.find.entities[player].within[3].size.is[==].to[0]>
- - if <context.location.material.switched>:
- - switch <context.location> state:off
- - choose <context.location.material.name.after_last[_]>:
- - case door:
- - playsound <context.location> BLOCK_WOODEN_DOOR_CLOSE
- - case trapdoor:
- - playsound <context.location> BLOCK_WOODEN_TRAPDOOR_CLOSE
- - case gate:
- - playsound <context.location> BLOCK_FENCE_GATE_CLOSE
-
Decorator_Tool:
type: item
material: stick
display name: <blue>Decorator Tool
lore:
- Right-click to mark location as decorative.
- Left-click to unmark location.
- Shift-right-click to toggle block state.
Decorate_Command:
type: command
name: decorate
usage: /decorate
permission: beruscripts.decorator
description: Gives the player a Decorator Tool.
script:
- if !<player.inventory.contains[decorator_tool]>:
- give decorator_tool
- narrate "<aqua>You received a <blue>[Decorator Tool]<aqua>."
- narrate "<gray>Right-click to decorate, left-click to un-decorate."
- narrate "<gray>Right-click while sneaking to toggle open/closed."
- else:
- take scriptname:decorator_tool
- narrate "<red>Removed your <blue>[Decorator Tool]<red>."
Decorative_Blocks:
type: world
debug: false
misc_blocks:
- loom
- crafting_table
- cartography_table
- anvil
- chipped_anvil
- damaged_anvil
- enchanting_table
- grindstone
- smithing_table
- stonecutter
- fletching_table
events:
on player right clicks block priority:1:
- if <server.has_flag[decorative_block.<context.location.simple>]>:
- determine cancelled
on player stands on material:
- if <server.has_flag[decorative_block.<context.location.simple>]>:
- determine cancelled
# Decorator tool functionality.
on player clicks block with decorator_tool:
- determine passively cancelled
- if <player.is_sneaking> && <context.click_type> == right_click_block:
- switch <context.location>
- stop
- choose <context.click_type>:
- case right_click_block:
- if !<context.location.material.is_switchable> && !<context.location.has_inventory> && !<script.yaml_key[misc_blocks].contains[<context.location.material.name>]> && !<context.location.material.name.ends_with[_bed]>:
- narrate "<dark_gray>You cannot make <context.location.material.item.formatted> decorative."
- stop
- if <server.has_flag[decorative_block.<context.location.simple>]>:
- narrate "<dark_gray>This <gray><context.location.material.translated_name> <dark_gray>is already decorative!"
- stop
- narrate "<aqua>Made this <gray><context.location.material.translated_name> <aqua>decorative."
- flag server decorative_block.<context.location.simple>
- if <context.location.material.is_bisected> && !<context.location.material.name.ends_with[_trapdoor]>:
- narrate "<aqua>(Also added adjacent block.)"
- flag server decorative_block.<context.location.other_block.simple>
- case left_click_block:
- if !<server.has_flag[decorative_block.<context.location.simple>]>:
- narrate "<dark_gray>This <gray><context.location.material.translated_name> <dark_gray>is not decorative!"
- stop
- narrate "<red>This <gray><context.location.material.translated_name> <red>is no longer decorative."
- flag server decorative_block.<context.location.simple>:!
- if <context.location.material.is_bisected> && !<context.location.material.name.ends_with[_trapdoor]>:
- narrate "<red>(Also removed adjacent block.)"
- flag server decorative_block.<context.location.other_block.simple>:!
# Item protection. (Prevents decorator tool from being transfered to another inventory.)
on player drops decorator_tool:
- determine cancelled
on player clicks in inventory with decorator_tool:
- if <context.clicked_inventory.inventory_type> != PLAYER:
- determine cancelled
on player clicks decorator_tool in inventory:
- if <context.is_shift_click> && <context.inventory.inventory_type> != PLAYER:
- determine cancelled
on player drags decorator_tool in inventory:
- if <context.clicked_inventory.inventory_type> != PLAYER:
- determine cancelled
# If any player breaks a decorative block, alerts them and removes decoration flag.
on player breaks block priority:1:
- if <server.has_flag[decorative_block.<context.location.simple>]>:
- narrate "<red>You broke a decorative <context.location.material.translated_name.to_lowercase>."
- flag server decorative_block.<context.location.simple>:!
- if <context.location.material.is_bisected> && !<context.location.material.name.ends_with[_trapdoor]>:
- narrate "<red>(Also removed adjacent block.)"
- flag server decorative_block.<context.location.other_block.simple>:!