🧱 Block#
#bs.block:help
Manage blocks, including states and NBTs, while offering advanced tools for seamless transformations.
“Architecture is the thoughtful making of space.”
—Louis Kahn
🔧 Functions#
You can find below all functions available in this module.
Fill#
- #bs.block:fill_block
Fill all or parts of a region with a specific block.
- Inputs:
Storage
bs:in block.fill_block
[compound]:block
[string]Block to fill the region with.
from
[array]Starting position (absolute coordinates only).
to
[array]Ending position (absolute coordinates only).
mode
[string]Mode used to set blocks [destroy|keep|replace] (default: replace).
limit
[int]Limit how many blocks can be set in a single tick (default: 4096).
masks
[array]Determine which blocks will be replaced.
- Masks syntax:
Each entry must be a compound that respect the following format:
block
[string]Block that act as a filter.
negate
[bool]Reverse the mask filter (default: false).
[x,y,z]
[int]Mask filter offsets (default: 0).
- Outputs:
State: Blocks are placed in the world.
Replace the top layer of dirt by grass:
# Setup the input
data modify storage bs:in block.fill_block set value {block:"minecraft:grass_block",from:[-16,100,0],to:[-1,103,15],masks:[{block:"minecraft:dirt"},{block:"minecraft:air",y:1}]}
# Run the process
function #bs.block:fill_block
Fill an area with stone but only by a few blocks each tick:
# Setup the input
data modify storage bs:in block.fill_block set value {block:"minecraft:stone",from:[-16,100,0],to:[-1,103,15],limit:8}
# Run the process
function #bs.block:fill_block
- #bs.block:fill_type
Fill all or parts of a region with a specific block type while trying to conserve states and NBTs.
- Inputs:
Storage
bs:in block.fill_type
[compound]:type
[string]Block id to fill the region with.
from
[array]Starting position (absolute coordinates only).
to
[array]Ending position (absolute coordinates only).
mode
[string]Mode used to set blocks [destroy|keep|replace] (default: replace).
limit
[int]Limit how many blocks can be set in a single tick (default: 4096).
masks
[array]Determine which blocks will be replaced.
- Masks syntax:
Each entry must be a compound that respect the following format:
block
[string]Block that act as a filter.
negate
[bool]Reverse the mask filter (default: false).
[x,y,z]
[int]Mask filter offsets (default: 0).
- Outputs:
State: Blocks are placed in the world.
Replace oak_stairs by spruce_stairs while conserving states:
# Setup the input
data modify storage bs:in block.fill_type set value {type:"minecraft:spruce_stairs",from:[-16,100,0],to:[-1,103,15],masks:[{block:"minecraft:oak_stairs"}]}
# Run the process
function #bs.block:fill_type
Credits: Aksiome
Get#
- #bs.block:get_block
Get all data related to the block at the current location, including its state and NBTs.
- Inputs:
Execution
at <entity>
orpositioned <x> <y> <z>
: Position to get block data from.- Outputs:
Storage
bs:out block
[compound]:id
[int]A numeric id that represents the block type.
group
[int]Blocks within the same group share the same possible state.
block
[string]Full string representation of the block
type[state]{nbt}
.type
[string]String representation of the id (e.g.,
minecraft:stone
).item
[string]Item string id associated with the block, if it exists.
state
[string]Represent the state of a block (e.g.,
[shape=straight]
).nbt
[compound]Data tags used by block entities.
properties
[compound]Block state as properties (used by entities like falling blocks).
iterable_properties
[array]An iterable array used to manipulate the state of the block.
Get all data related to a block:
# Run the get function on a block
execute positioned ~ ~ ~ run function #bs.block:get_block
# See the result
data get storage bs:out block
- #bs.block:get_type
Get the block type at the current location. While state, NBTs, and properties will be empty, the iterable properties still enable state transformations.
- Inputs:
Execution
at <entity>
orpositioned <x> <y> <z>
: Position to get block data from.- Outputs:
Storage
bs:out block
[compound]:id
[int]A numeric id that represents the block type.
group
[int]Blocks within the same group share the same possible state.
block
[string]Full string representation of the block (only the type).
type
[string]String representation of the id (e.g.,
minecraft:stone
).item
[string]Item string id associated with the block, if it exists.
state
[string]Represent the state of a block (empty string).
nbt
[compound]Data tags used by block entities (empty string).
properties
[compound]Block state as properties (empty compound).
iterable_properties
[array]An iterable array used to manipulate the state of the block.
Get only type data related to a block (no property value is selected):
# Run the get function on a block
execute positioned ~ ~ ~ run function #bs.block:get_type
# See the result
data get storage bs:out block
Read-only output
The bs:out block
output is intended to be read-only. Modifying parts manually could lead to potential bugs. That’s why the module provides numerous functions capable of making modifications to the output while preserving its integrity.
Credits: Aksiome, theogiraudet
Manage state#
- #bs.block:keep_properties
Filter properties to keep only the desired ones.
- Inputs:
Macro var
properties
[array]: List of properties to keep. Must be compounds with thename
of the property.- Outputs:
Storage
bs:out block
[compound]: Theblock
,state
,properties
anditerable_properties
are updated to reflect this change.
Keep only the facing and shape properties:
# Once (on stairs)
execute positioned ~ ~ ~ run function #bs.block:get_block
# Run the transformation
function #bs.block:keep_properties {properties:[{name:"facing"},{name:"shape"}]}
# See the result
data get storage bs:out block.block
- #bs.block:merge_properties
Merge state properties from the current location into the output. The merge occurs if the syntax is correct, regardless of logical coherence (e.g., using ‘age’ for different plants).
- Inputs:
Execution
at <entity>
orpositioned <x> <y> <z>
: Location of the block that act as input.Macro var
properties
[array]: List of properties to merge. Must be compounds with thename
of the property.- Outputs:
Storage
bs:out block
[compound]: Theblock
,state
,properties
anditerable_properties
are updated to reflect this change.
Merge the facing of a block onto stairs:
# Once (on stairs)
execute positioned ~ ~ ~ run function #bs.block:get_block
# Run the transformation (on a block with facing)
execute positioned ~ ~ ~ run function #bs.block:merge_properties {properties:[{name:"facing"}]}
# See the result
data get storage bs:out block.block
- #bs.block:remove_properties
Filter properties by removing the undesired ones.
- Inputs:
Macro var
properties
[array]: List of properties to remove. Must be compounds with thename
of the property.- Outputs:
Storage
bs:out block
[compound]: Theblock
,state
,properties
anditerable_properties
are updated to reflect this change.
Remove the facing and shape properties:
# Once (on stairs)
execute positioned ~ ~ ~ run function #bs.block:get_block
# Run the transformation
function #bs.block:remove_properties {properties:[{name:"facing"},{name:"shape"}]}
# See the result
data get storage bs:out block.block
- #bs.block:replace_properties
Replace property values. Invalid values will not be replaced.
- Inputs:
Macro var
properties
[array]: List of properties to replace. Must be compounds with thename
of the property and thevalue
.- Outputs:
Storage
bs:out block
[compound]: Theblock
,state
,properties
anditerable_properties
are updated to reflect this change.
Replace the facing property value:
# Once (on stairs)
execute positioned ~ ~ ~ run function #bs.block:get_block
# Run the transformation
function #bs.block:replace_properties {properties:[{name:"facing",value:"east"}]}
# See the result
data get storage bs:out block.block
- #bs.block:shift_properties
Shift properties by any amount, allowing cycling through their values.
- Inputs:
Macro var
properties
[array]: List of properties to shift. Must be compounds with thename
of the property and theby
amount (defaults to 1).- Outputs:
Storage
bs:out block
[compound]: Theblock
,state
,properties
anditerable_properties
are updated to reflect this change.
Shift the facing property value by 2:
# Once (on stairs)
execute positioned ~ ~ ~ run function #bs.block:get_block
# Run the transformation
function #bs.block:shift_properties {properties:[{name:"facing",by:2}]}
# See the result
data get storage bs:out block.block
Credits: Aksiome
Manage type#
- #bs.block:replace_type
Replace the block type while trying to conserve the state. State is preserved only if the group of the output matches the input.
- Inputs:
Macro var
type
[string]: String representation of the id (e.g.,minecraft:stone
).- Outputs:
Storage
bs:out block
[compound]: Theblock
,state
,properties
anditerable_properties
are updated to reflect this change.
Replace oak stairs with spruce stairs, preserving the current state:
# Once (on oak_stairs)
execute positioned ~ ~ ~ run function #bs.block:get_block
# Get block type data
function #bs.block:replace_type {type:"minecraft:spruce_stairs"}
# See the result
data get storage bs:out block.block
- #bs.block:lookup_item
Get block data from the given item string id.
- Inputs:
Macro var
item
[string]: Item string id associated to a block.- Outputs:
Storage
bs:out block
[compound]: Equivalent to the#bs.block:get_type
function.
Get block data for the stone item:
# Get block type data
function #bs.block:lookup_item {item:"minecraft:stone"}
# See the result
data get storage bs:out block.block
- #bs.block:lookup_type
Get block data from the given type string id.
- Inputs:
Macro var
type
[string]: Type string id associated to a block.- Outputs:
Storage
bs:out block
[compound]: Equivalent to the#bs.block:get_type
function.
Get block data for the stone type:
# Get block type data
function #bs.block:lookup_type {type:"minecraft:stone"}
# See the result
data get storage bs:out block.block
Credits: Aksiome
Match#
- #bs.block:match
Determine if the block at the specified location matches the provided one.
- Inputs:
Execution
at <entity>
orpositioned <x> <y> <z>
: Location of the block to check.Storage
bs:in block.match.block
[string]: Full string representation of the block to check against.- Outputs:
Return: Whether the check is a success or a failure (1 or 0).
Check that the block at 0 0 0 matches the block at 0 1 0:
# Get block data at 0 0 0
execute positioned 0 0 0 run function #bs.block:get_block
# Setup the input
data modify storage bs:in block.match.block set from storage bs:out block.block
# Run a command if it's a match
execute positioned 0 1 0 if function #bs.block:match run say It's a match
Credits: Aksiome, theogiraudet
Set#
- #bs.block:set_block
Place a block at the current location.
- Inputs:
Execution
at <entity>
orpositioned <x> <y> <z>
: Position to set the block to.Storage
bs:in block.set_block.block
[string]: Full string representation of the block to set.Storage
bs:in block.set_block.mode
[string]: Mode used to set the block [destroy|keep|replace] (default: replace).- Outputs:
State: A block is placed in the world.
Place a block of stone at 0 0 0 by destroying the existing one:
# Setup the input
data modify storage bs:in block.set_block set value {block:"minecraft:stone",mode:"destroy"}
# Run the function
execute positioned 0 0 0 run function #bs.block:set_block
- #bs.block:set_type
Replace the block type at the current location while trying to conserve its state and NBTs.
- Inputs:
Execution
at <entity>
orpositioned <x> <y> <z>
: Position to set the block to.Storage
bs:in block.set_block.type
[string]: Type (string id) of the block to set.Storage
bs:in block.set_block.mode
[string]: Mode used to set the block [destroy|keep|replace] (default: replace).- Outputs:
State: A block is placed in the world.
Replace any stairs with oak stairs, preserving the current state:
# Setup the input
data modify storage bs:in block.set_type.type set value "minecraft:oak_stairs"
# Run the function
execute positioned 0 0 0 run function #bs.block:set_type
Credits: Aksiome, theogiraudet
Spawn#
- #bs.block:spawn_block_display
Spawn a block display representing the given block.
- Inputs:
Execution
at <entity>
orpositioned <x> <y> <z>
: Position where the entity will be summoned.Storage
bs:in block.spawn_block_display
[compound]:type
[string]Block type (similar to block output).
properties
[compound]Block properties (similar to block output).
extra_nbt
[compound]Additional NBTs to summon the entity with.
- Outputs:
State: The entity is summoned.
Summon a block display using the block at 0 0 0:
# Get block data
execute positioned 0 0 0 run function #bs.block:get_block
# Setup the input
data modify storage bs:in block.spawn_block_display set from storage bs:out block
# Summon the block display
function #bs.block:spawn_block_display
- #bs.block:spawn_falling_block
Spawn a falling block representing the given block.
- Inputs:
Execution
at <entity>
orpositioned <x> <y> <z>
: Position where the entity will be summoned.Storage
bs:in block.spawn_falling_block
[compound]:type
[string]Block type (similar to block output).
properties
[compound]Block properties (similar to block output).
extra_nbt
[compound]Additional NBTs to summon the entity with.
- Outputs:
State: The entity is summoned.
Summon a falling block using the block at 0 0 0:
# Get block data
execute positioned 0 0 0 run function #bs.block:get_block
# Setup the input
data modify storage bs:in block.spawn_falling_block set from storage bs:out block
# Summon the block display
function #bs.block:spawn_falling_block
- #bs.block:spawn_solid_block_display
Spawn a block display with a hitbox, representing the given block.
- Inputs:
Execution
at <entity>
orpositioned <x> <y> <z>
: Position where the entity will be summoned.Storage
bs:in block.spawn_solid_block_display
[compound]:type
[string]Block type (similar to block output).
properties
[compound]Block properties (similar to block output).
extra_nbt
[compound]Additional NBTs to summon the entity with.
- Outputs:
State: The entity is summoned.
Summon a block display with a hitbox using the block at 0 0 0:
# Get block data
execute positioned 0 0 0 run function #bs.block:get_block
# Setup the input
data modify storage bs:in block.spawn_solid_block_display set from storage bs:out block
# Summon the block display
function #bs.block:spawn_solid_block_display
Credits: Aksiome, theogiraudet
💬 Did it help you?
Feel free to leave your questions and feedbacks below!