11 Commits

Author SHA1 Message Date
e2b221eed0 Added Trowel
Fixed issue with wrench
Organised tools into folders
2025-05-15 22:24:08 +01:00
444e5071d4 Updated Model Index to 0 2025-05-14 15:58:32 +01:00
e0ec570c68 Updated naming for assets 2025-05-14 14:57:18 +01:00
9920a13f4f Prevent cycle if terracotta mode matches current rotation 2025-05-14 13:32:50 +01:00
e2eb8071f7 Updated Namespace
Integrated Resourcepack
2025-05-14 12:09:54 +01:00
4137e85850 Update LICENSE.txt 2025-05-13 09:17:45 +00:00
0d30e4d312 Updated Readme 2025-05-13 02:36:29 +01:00
48d5cf9d5e Complete rewrite
Prep for addition of optional additional tools
Removed config (for now)
Added loads of blocks
2025-05-13 02:30:39 +01:00
02a8a2ca97 Updated to 1.21.5 and added model names for resource packs. 2025-04-02 18:39:07 +01:00
af7fed5674 AddedChain 2025-03-11 02:36:02 +00:00
ade863f161 Missing Notation for Pale Oak and correction for Resin Slab 2024-12-04 13:34:10 +00:00
273 changed files with 2838 additions and 6860 deletions

View File

@@ -1,7 +1,8 @@
MIT License
Copyright (c) 2023 Mark Rapson (LZStealth)
Copyright (c) 2025 Mark Rapson (LZStealth)
Copyright (c) 2021 GoldenDelicios
Copyright (c) 2024 maybejake
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -1,41 +1,18 @@
# LZ Wrench (Block Rotator)
Minecraft datapack: Rename a carrot on a stick to "Wrench" and right click on blocks to rotate them.
# LZs Tools
## How to use:
* Drop the datapack into your world's datapacks folder.
* Type `/reload` or restart your world/server to enable the datapack.
* Use an anvil to rename a carrot on a stick to *Wrench* (case sensitive).
The wrench can currently rotate these blocks:
* Pillars and other similarly placed blocks
* All bark and logs, of all tree types, stripped or not
* Quartz and purpur pillars
* Hay bales
* Bone blocks
* The following redstone components:
* pistons
* sticky pistons
* barrel
* dispensers
* droppers
* observers
* hoppers
* repeaters
* comparators
* calibrated sculk sensor
* Glazed terracotta
* Rails
* End rods
* Stairs
* Slabs
## Tools
- Wrench - Rotates blocks
- Trowels - Places random blocks from the hotbar
Additionally, you can change the Wrench's mode by right clicking in your offhand.
Information on how the different modes work is available in `WrenchModes.md`.
Information on how the different wrench modes work is available [here](WrenchModes.md).
## Options
Settings can be changed using `/function wrench:config`
## Install
* Drop the datapack into your world's datapacks folder.
* Type `/reload` or restart your world/server to enable the datapack.
* Recepies will be given when entering the world.
*
## Uninstall
The Datapack can also be removed using `/function lzstools:uninstall`, this will remove all scoreboard components.
A debug mode is also available to view the ray casting `/scoreboard players set WrenchDebug WrenchConfig 1`<br>
The Datapack can also be removed using `/function wrench:uninstall`, this will remove all scoreboard components.
Version 1.0
Version 2.2

View File

@@ -3,27 +3,15 @@
The Wrench's mode can be changed by right clicking while the Wrench is held in the player's off hand.
Various modes can make this wrench easier/quicker to use.
Rotatable blocks are divided into 5 categories:
* *Terracotta*: All 16 colors of glazed terracotta
* *Rails*: All 4 types of rails
* *Redstone*: dispensers, droppers, pistons, sticky pistons, observers, hoppers, repeaters, and comparators
* *Pillars*: All logs, stripped logs, bark, stripped bark, quartz pillars, purpur pillars, hay bales, and bone blocks
* *Slabs*: All Slabs including waterlogged
* *Stairs*: All Stairs including waterlogged
* *Rods*: End rods
## Default
* Works on all rotatable blocks
* End rods can only be flipped.
* Cycles through all rotations.
## Flip
* Works on *Redstone*, *Rods*, *Slabs* and *Stairs*.
* Flips the block to the opposite rotation.
* Moves slabs between the top and bottom slab position.
## Face player
* Works on *Rails*, *Redstone*, *Pillars* and *Stairs*.
* Rotates the block based on player's rotation.
* similar to default placement of most *Redstone*.
* e.g. if player is facing "east" a piston will face "west".
@@ -31,7 +19,6 @@ Rotatable blocks are divided into 5 categories:
* If block already facing the player, Wrench will flip it instead if possible.
## Face click
* Works on *Rails*, *Redstone*, *Pillars* and *Stairs*.
* Rotates the block to face the side of the block aimed at.
* similar to default placement of *Pillars*.
* e.g. if player clicks the top surface of a piston, the piston will face "up".
@@ -40,8 +27,7 @@ Rotatable blocks are divided into 5 categories:
* Due to a quirk, clicking on the edges where faces of a block meet (see image) can rotate the block to face one of its sides.
![](https://i.imgur.com/3NYmwIe.png)
* Special cases:
* In general, if "Face click" cannot be used, the Wrench will default to "Face Player".
* Hoppers will only use "Face player" if the top full-width section is clicked. Otherwise it will default to "Face Player" mode.
* In general, if "Face click" cannot be used, the Wrench will default to "Flip".
* Repeaters and comparators will default to "Face Player" mode if the top side is clicked.
* *Rails* behave the same as if in "Face Player" mode.
@@ -59,4 +45,4 @@ Rotatable blocks are divided into 5 categories:
* e.g. clicking edges of a block with "Face Click".
* The Wrench will go with whatever rotation succeeds first.
Version 1.0
Version 2.0

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/handheld",
"textures": {
"layer0": "lzstools:item/trowel/diamond"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/handheld",
"textures": {
"layer0": "lzstools:item/trowel/iron"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/handheld",
"textures": {
"layer0": "lzstools:item/wrench/default"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/handheld",
"textures": {
"layer0": "lzstools:item/wrench/face_click"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/handheld",
"textures": {
"layer0": "lzstools:item/wrench/face_player"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/handheld",
"textures": {
"layer0": "lzstools:item/wrench/flip"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/handheld",
"textures": {
"layer0": "lzstools:item/wrench/terracotta"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,19 @@
{
"model": {
"type": "select",
"property": "custom_model_data",
"fallback": {
"type": "minecraft:model",
"model": "minecraft:item/carrot_on_a_stick"
},
"cases": [
{ "when": "lzstools:wrench_default", "model": { "type": "model", "model": "lzstools:items/wrench/default" } },
{ "when": "lzstools:wrench_flip", "model": { "type": "model", "model": "lzstools:items/wrench/flip" } },
{ "when": "lzstools:wrench_face_player", "model": { "type": "model", "model": "lzstools:items/wrench/face_player" } },
{ "when": "lzstools:wrench_face_click", "model": { "type": "model", "model": "lzstools:items/wrench/face_click" } },
{ "when": "lzstools:wrench_terracotta", "model": { "type": "model", "model": "lzstools:items/wrench/terracotta" } },
{ "when": "lzstools:trowel_iron", "model": { "type": "model", "model": "lzstools:items/trowel/iron" } },
{ "when": "lzstools:trowel_diamond", "model": { "type": "model", "model": "lzstools:items/trowel/diamond" } }
]
}
}

View File

@@ -0,0 +1,10 @@
{
"criteria": {
"requirement": {
"trigger": "minecraft:tick"
}
},
"rewards": {
"function": "lzstools:recipes"
}
}

View File

@@ -0,0 +1,26 @@
{
"display": {
"icon": {
"id": "minecraft:carrot_on_a_stick",
"components": {
"minecraft:custom_model_data": {
"strings": [
"lzstools:wrench_default"
]
}
}
},
"title": "LZ's Tools",
"description": {
"text": "Tools that you may find useful!"
},
"background": "minecraft:block/deepslate_tiles",
"show_toast": false,
"announce_to_chat": false
},
"criteria": {
"tick": {
"trigger": "minecraft:tick"
}
}
}

View File

@@ -0,0 +1,32 @@
{
"display": {
"icon": {
"id": "minecraft:carrot_on_a_stick",
"components": {
"minecraft:custom_model_data": {
"strings": [
"lzstools:trowel_diamond"
]
}
}
},
"title": {
"text": "Trowel and error"
},
"description": {
"text": "Craft a Diamond Trowel"
},
"show_toast": true,
"announce_to_chat": false,
"hidden": false
},
"parent": "lzstools:visible/trowel_iron",
"criteria": {
"": {
"trigger": "minecraft:recipe_crafted",
"conditions": {
"recipe_id": "lzstools_trowel:diamond"
}
}
}
}

View File

@@ -0,0 +1,32 @@
{
"display": {
"icon": {
"id": "minecraft:carrot_on_a_stick",
"components": {
"minecraft:custom_model_data": {
"strings": [
"lzstools:trowel_iron"
]
}
}
},
"title": {
"text": "It's a shovel for lil' you!"
},
"description": {
"text": "Craft a Trowel"
},
"show_toast": true,
"announce_to_chat": false,
"hidden": false
},
"parent": "lzstools:visible/root",
"criteria": {
"": {
"trigger": "minecraft:recipe_crafted",
"conditions": {
"recipe_id": "lzstools_trowel:iron"
}
}
}
}

View File

@@ -0,0 +1,32 @@
{
"display": {
"icon": {
"id": "minecraft:carrot_on_a_stick",
"components": {
"minecraft:custom_model_data": {
"strings": [
"lzstools:wrench_default"
]
}
}
},
"title": {
"text": "Pivot, PIVOT!"
},
"description": {
"text": "Craft a Block Wrench"
},
"show_toast": true,
"announce_to_chat": false,
"hidden": false
},
"parent": "lzstools:visible/root",
"criteria": {
"": {
"trigger": "minecraft:recipe_crafted",
"conditions": {
"recipe_id": "lzstools_wrench:wrench"
}
}
}
}

View File

@@ -0,0 +1 @@
give @s minecraft:carrot_on_a_stick[minecraft:custom_name={"text":"Diamond Trowel","color":"aqua"},minecraft:custom_model_data={strings:["lzstools:trowel_diamond"]},minecraft:custom_data={"lzstools":["trowel","trowel_diamond"]}]

View File

@@ -0,0 +1 @@
give @s minecraft:carrot_on_a_stick[minecraft:custom_name={"text":"Iron Trowel","color":"aqua"},minecraft:custom_model_data={strings:["lzstools:trowel_iron"]},minecraft:custom_data={"lzstools":["trowel","trowel_iron"]}]

View File

@@ -0,0 +1 @@
give @s minecraft:carrot_on_a_stick[minecraft:custom_name={"text":"Rotator Wrench","color":"aqua"},minecraft:lore=["Default"],minecraft:custom_model_data={strings:["lzstools:wrench_default"]},minecraft:custom_data={"lzstools":["wrench"]},minecraft:unbreakable={},minecraft:enchantment_glint_override=false,minecraft:tooltip_display={hidden_components:["minecraft:unbreakable"]}]

View File

@@ -0,0 +1,17 @@
# Click Check
scoreboard objectives add lz_click_check minecraft.used:minecraft.carrot_on_a_stick
# Wrench
scoreboard objectives add lz_wrench_success dummy
scoreboard objectives add lz_wrench_raycast dummy
# Trowel
scoreboard objectives add lz_trowel_success dummy
scoreboard objectives add lz_trowel_raycast dummy
scoreboard objectives add lz_trowel_raycast_hit dummy
scoreboard objectives add lz_trowel_block_length dummy
scoreboard objectives add lz_chosen_block_check dummy
scoreboard objectives add lz_trowel_unbreaking_check dummy
scoreboard objectives add lz_trowel_unbreaking_chance dummy
scoreboard objectives add lz_trowel_damage dummy
scoreboard objectives add lz_trowel_max_damage dummy

View File

@@ -0,0 +1,10 @@
scoreboard players set @s lz_click_check 0
# Wrench
execute if predicate lzstools:wrench/mainhand run function lzstools_wrench:wrench/rotate
execute if predicate lzstools:wrench/offhand run function lzstools_wrench:wrench/offhand
# Trowel
execute if predicate lzstools:trowel/mainhand run function lzstools_trowel:mainhand
execute if predicate lzstools:trowel/offhand run function lzstools_trowel:offhand

View File

@@ -0,0 +1,3 @@
recipe give @s lzstools_wrench:wrench
recipe give @s lzstools_trowel:iron
recipe give @s lzstools_trowel:diamond

View File

@@ -0,0 +1,2 @@
# Click Check
execute as @a if score @s lz_click_check matches 1.. run function lzstools:player

View File

@@ -0,0 +1,4 @@
# Uninstall
scoreboard objectives remove lz_click_check
scoreboard objectives remove lz_wrench_success
scoreboard objectives remove lz_wrench_raycast

View File

@@ -0,0 +1,17 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"predicates": {
"minecraft:custom_data": {
"lzstools": [
"trowel"
]
}
}
}
}
}
}

View File

@@ -0,0 +1,17 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"offhand": {
"predicates": {
"minecraft:custom_data": {
"lzstools": [
"trowel"
]
}
}
}
}
}
}

View File

@@ -0,0 +1,18 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"predicates": {
"minecraft:enchantments": [
{
"enchantment": "minecraft:unbreaking",
"levels": 1
}
]
}
}
}
}
}

View File

@@ -0,0 +1,18 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"predicates": {
"minecraft:enchantments": [
{
"enchantment": "minecraft:unbreaking",
"levels": 2
}
]
}
}
}
}
}

View File

@@ -0,0 +1,18 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"predicates": {
"minecraft:enchantments": [
{
"enchantment": "minecraft:unbreaking",
"levels": 3
}
]
}
}
}
}
}

View File

@@ -0,0 +1,21 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"predicates": {
"minecraft:enchantments": [
{
"enchantment": "minecraft:unbreaking",
"levels": {
"min": 1,
"max": 3
}
}
]
}
}
}
}
}

View File

@@ -0,0 +1,18 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"predicates": {
"minecraft:enchantments": [
{
"enchantment": "minecraft:unbreaking",
"levels": 1
}
]
}
}
}
}
}

View File

@@ -0,0 +1,18 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"predicates": {
"minecraft:enchantments": [
{
"enchantment": "minecraft:unbreaking",
"levels": 2
}
]
}
}
}
}
}

View File

@@ -0,0 +1,18 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"predicates": {
"minecraft:enchantments": [
{
"enchantment": "minecraft:unbreaking",
"levels": 3
}
]
}
}
}
}
}

View File

@@ -0,0 +1,21 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"predicates": {
"minecraft:enchantments": [
{
"enchantment": "minecraft:unbreaking",
"levels": {
"min": 1,
"max": 3
}
}
]
}
}
}
}
}

View File

@@ -0,0 +1,17 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"predicates": {
"minecraft:custom_data": {
"lzstools": [
"wrench"
]
}
}
}
}
}
}

View File

@@ -0,0 +1,17 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"offhand": {
"predicates": {
"minecraft:custom_data": {
"lzstools": [
"wrench"
]
}
}
}
}
}
}

View File

@@ -0,0 +1,21 @@
{
"replace": false,
"values": [
"minecraft:white_banner",
"minecraft:orange_banner",
"minecraft:magenta_banner",
"minecraft:light_blue_banner",
"minecraft:yellow_banner",
"minecraft:lime_banner",
"minecraft:pink_banner",
"minecraft:gray_banner",
"minecraft:light_gray_banner",
"minecraft:cyan_banner",
"minecraft:purple_banner",
"minecraft:blue_banner",
"minecraft:brown_banner",
"minecraft:green_banner",
"minecraft:red_banner",
"minecraft:black_banner"
]
}

View File

@@ -0,0 +1,10 @@
{
"replace": false,
"values": [
"minecraft:furnace",
"minecraft:smoker",
"minecraft:blast_furnace",
"minecraft:carved_pumpkin",
"minecraft:jack_o_lantern"
]
}

View File

@@ -0,0 +1,9 @@
{
"replace": false,
"values": [
"minecraft:barrel",
"minecraft:dispenser",
"minecraft:dropper",
"minecraft:observer"
]
}

View File

@@ -0,0 +1,27 @@
{
"replace": false,
"values": [
"#minecraft:rails",
"#minecraft:trapdoors",
"#minecraft:fence_gates",
"#minecraft:campfires",
"#minecraft:all_signs",
"#minecraft:anvil",
"minecraft:hopper",
"minecraft:repeater",
"minecraft:comparator",
"minecraft:calibrated_sculk_sensor",
"#minecraft:slabs",
"#minecraft:stairs",
"minecraft:end_rod",
"minecraft:chain",
"minecraft:piston",
"minecraft:sticky_piston",
"minecraft:decorated_pot",
"minecraft:lightning_rod",
"minecraft:stonecutter",
"minecraft:ender_chest",
"minecraft:bell",
"minecraft:grindstone"
]
}

View File

@@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"minecraft:crafter"
]
}

View File

@@ -0,0 +1,4 @@
scoreboard players set @s lz_trowel_success 0
execute if score @s lz_trowel_success matches 0 run function lzstools_trowel:block/place_normal with storage lzstools:trowel
execute if score @s lz_trowel_success matches 1 run function lzstools_trowel:block/remove_item with storage lzstools:trowel

View File

@@ -0,0 +1,2 @@
# Place Leaves
$setblock ~ ~ ~ $(chosen_block)[persistent=true] keep

View File

@@ -0,0 +1,5 @@
# Place NESW
$execute as @s[y_rotation=-45..45] store result score @s lz_trowel_raycast run setblock ~ ~ ~ $(chosen_block)[facing=north] keep
$execute as @s[y_rotation=45..135] store result score @s lz_trowel_raycast run setblock ~ ~ ~ $(chosen_block)[facing=east] keep
$execute as @s[y_rotation=135..-135] store result score @s lz_trowel_raycast run setblock ~ ~ ~ $(chosen_block)[facing=south] keep
$execute as @s[y_rotation=-135..-45] store result score @s lz_trowel_raycast run setblock ~ ~ ~ $(chosen_block)[facing=west] keep

View File

@@ -0,0 +1,7 @@
# Place NESWUD
$execute as @s[x_rotation=45..90] store result score @s lz_trowel_raycast run setblock ~ ~ ~ $(chosen_block)[facing=up] keep
$execute as @s[x_rotation=-90..-45] store result score @s lz_trowel_raycast run setblock ~ ~ ~ $(chosen_block)[facing=down] keep
$execute as @s[x_rotation=-45..45, y_rotation=-45..45] store result score @s lz_trowel_raycast run setblock ~ ~ ~ $(chosen_block)[facing=north] keep
$execute as @s[x_rotation=-45..45, y_rotation=45..135] store result score @s lz_trowel_raycast run setblock ~ ~ ~ $(chosen_block)[facing=east] keep
$execute as @s[x_rotation=-45..45, y_rotation=135..-135] store result score @s lz_trowel_raycast run setblock ~ ~ ~ $(chosen_block)[facing=south] keep
$execute as @s[x_rotation=-45..45, y_rotation=-135..-45] store result score @s lz_trowel_raycast run setblock ~ ~ ~ $(chosen_block)[facing=west] keep

View File

@@ -0,0 +1,3 @@
# Place Slabs
$execute as @s if score py lz_trowel_raycast matches 8.. store result score @s lz_wrench_success run setblock ~ ~ ~ $(chosen_block)[type=top] keep
$execute as @s if score py lz_trowel_raycast matches ..7 store result score @s lz_wrench_success run setblock ~ ~ ~ $(chosen_block)[type=bottom] keep

View File

@@ -0,0 +1,9 @@
# Place Stairs
$execute as @s[y_rotation=-45..45] if score py lz_trowel_raycast matches ..7 store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=bottom,facing=south] keep
$execute as @s[y_rotation=45..135] if score py lz_trowel_raycast matches ..7 store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=bottom,facing=west] keep
$execute as @s[y_rotation=135..-135] if score py lz_trowel_raycast matches ..7 store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=bottom,facing=north] keep
$execute as @s[y_rotation=-135..-45] if score py lz_trowel_raycast matches ..7 store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=bottom,facing=east] keep
$execute as @s[y_rotation=-45..45] if score py lz_trowel_raycast matches 8.. store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=top,facing=south] keep
$execute as @s[y_rotation=45..135] if score py lz_trowel_raycast matches 8.. store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=top,facing=west] keep
$execute as @s[y_rotation=135..-135] if score py lz_trowel_raycast matches 8.. store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=top,facing=north] keep
$execute as @s[y_rotation=-135..-45] if score py lz_trowel_raycast matches 8.. store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=top,facing=east] keep

View File

@@ -0,0 +1,10 @@
# Place Trapdoors
$execute as @s[y_rotation=-45..45] if score py lz_trowel_raycast matches ..7 store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=bottom,facing=north] keep
$execute as @s[y_rotation=45..135] if score py lz_trowel_raycast matches ..7 store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=bottom,facing=east] keep
$execute as @s[y_rotation=135..-135] if score py lz_trowel_raycast matches ..7 store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=bottom,facing=south] keep
$execute as @s[y_rotation=-135..-45] if score py lz_trowel_raycast matches ..7 store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=bottom,facing=west] keep
$execute as @s[y_rotation=-45..45] if score py lz_trowel_raycast matches 8.. store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=top,facing=north] keep
$execute as @s[y_rotation=45..135] if score py lz_trowel_raycast matches 8.. store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=top,facing=east] keep
$execute as @s[y_rotation=135..-135] if score py lz_trowel_raycast matches 8.. store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=top,facing=south] keep
$execute as @s[y_rotation=-135..-45] if score py lz_trowel_raycast matches 8.. store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[half=top,facing=west] keep

View File

@@ -0,0 +1,7 @@
# Place XYZ
$execute as @s if score py lz_trowel_raycast matches 0 store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[axis=y] keep
$execute as @s if score py lz_trowel_raycast matches 15 store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[axis=y] keep
$execute as @s if score px lz_trowel_raycast matches 0 store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[axis=x] keep
$execute as @s if score px lz_trowel_raycast matches 15 store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[axis=x] keep
$execute as @s if score pz lz_trowel_raycast matches 0 store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[axis=z] keep
$execute as @s if score pz lz_trowel_raycast matches 15 store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block)[axis=z] keep

View File

@@ -0,0 +1,16 @@
# Get Raycast Target Coords
function lzstools_trowel:block/target_coords
$setblock ~ -64 ~ $(chosen_block)
execute if score @s lz_trowel_success matches 0 if block ~ -64 ~ #lzstools:xyz run function lzstools_trowel:block/place/xyz with storage lzstools:trowel
execute if score @s lz_trowel_success matches 0 if block ~ -64 ~ #lzstools:neswud run function lzstools_trowel:block/place/neswud with storage lzstools:trowel
execute if score @s lz_trowel_success matches 0 if block ~ -64 ~ #lzstools:nesw run function lzstools_trowel:block/place/nesw with storage lzstools:trowel
execute if score @s lz_trowel_success matches 0 if block ~ -64 ~ #lzstools:glazed_terracotta run function lzstools_trowel:block/place/nesw with storage lzstools:trowel
execute if score @s lz_trowel_success matches 0 if block ~ -64 ~ #minecraft:leaves run function lzstools_trowel:block/place/leaves with storage lzstools:trowel
execute if score @s lz_trowel_success matches 0 if block ~ -64 ~ #minecraft:trapdoors run function lzstools_trowel:block/place/trapdoors with storage lzstools:trowel
execute if score @s lz_trowel_success matches 0 if block ~ -64 ~ #minecraft:stairs run function lzstools_trowel:block/place/stairs with storage lzstools:trowel
execute if score @s lz_trowel_success matches 0 if block ~ -64 ~ #minecraft:slabs run function lzstools_trowel:block/place/slabs with storage lzstools:trowel
$execute if score @s lz_trowel_success matches 0 store result score @s lz_trowel_success run setblock ~ ~ ~ $(chosen_block) keep
setblock ~ -64 ~ bedrock

View File

@@ -0,0 +1 @@
$execute if entity @s[gamemode=!creative] run clear @s $(chosen_block) 1

View File

@@ -0,0 +1,22 @@
## Get Raycast Target Coords
# Stored Value for Calc
scoreboard players set c16 lz_trowel_raycast 16
# Summon Invisible Entity
summon area_effect_cloud ~ ~ ~ {Radius:0.01,Duration:1,Tags:["RaycastMark"]}
# Pixel Calculations
execute store result score px lz_trowel_raycast run data get entity @e[tag=RaycastMark,sort=nearest,limit=1] Pos[0] 16
scoreboard players operation px lz_trowel_raycast %= c16 lz_trowel_raycast
execute if score px lz_trowel_raycast matches ..-1 run scoreboard players add px lz_trowel_raycast 16
execute store result score py lz_trowel_raycast run data get entity @e[tag=RaycastMark,sort=nearest,limit=1] Pos[1] 16
scoreboard players operation py lz_trowel_raycast %= c16 lz_trowel_raycast
execute if score py lz_trowel_raycast matches ..-1 run scoreboard players add py lz_trowel_raycast 16
execute store result score pz lz_trowel_raycast run data get entity @e[tag=RaycastMark,sort=nearest,limit=1] Pos[2] 16
scoreboard players operation pz lz_trowel_raycast %= c16 lz_trowel_raycast
execute if score pz lz_trowel_raycast matches ..-1 run scoreboard players add pz lz_trowel_raycast 16
# Remove Entity
kill @e[tag=RaycastMark,sort=nearest,limit=1]

View File

@@ -0,0 +1 @@
$item modify entity @s weapon.mainhand {"function":"minecraft:set_components","components":{"minecraft:damage":$(damage)}}

View File

@@ -0,0 +1,4 @@
execute if entity @s[predicate=lzstools_trowel:mainhand/iron] at @s anchored eyes run particle minecraft:item{item:"minecraft:iron_sword"} ^ ^-0.35 ^0.65 0.1 0.1 0.1 0.06 10 force
execute if entity @s[predicate=lzstools_trowel:mainhand/diamond] at @s anchored eyes run particle minecraft:item{item:"minecraft:diamond_sword"} ^ ^-0.35 ^0.65 0.1 0.1 0.1 0.06 10 force
item replace entity @s weapon.mainhand with minecraft:air
playsound minecraft:entity.item.break master @a ~ ~ ~ 1 1

View File

@@ -0,0 +1,13 @@
scoreboard players reset @s lz_trowel_unbreaking_check
execute if entity @s[predicate=lzstools:unbreaking/mainhand/all] run function lzstools_trowel:durability/mainhand/unbreaking
execute if score @s lz_trowel_unbreaking_check matches 1 run return fail
# Handle Damage
data modify storage lzstools:trowel components set from entity @s SelectedItem.components
execute store result score @s lz_trowel_damage run data get storage lzstools:trowel components."minecraft:damage"
execute store result score @s lz_trowel_max_damage run data get storage lzstools:trowel components."minecraft:max_damage"
scoreboard players add @s lz_trowel_damage 1
execute store result storage lzstools:trowel damage int 1 run scoreboard players get @s lz_trowel_damage
function lzstools_trowel:durability/mainhand/apply with storage lzstools:trowel
execute if score @s lz_trowel_damage >= @s lz_trowel_max_damage run function lzstools_trowel:durability/mainhand/break

View File

@@ -0,0 +1,4 @@
execute store result score @s lz_trowel_unbreaking_chance run random value 1..100
execute if entity @s[predicate=lzstools:unbreaking/mainhand/3] if score @s lz_trowel_unbreaking_chance matches ..75 run return run scoreboard players set @s lz_trowel_unbreaking_check 1
execute if entity @s[predicate=lzstools:unbreaking/mainhand/2] if score @s lz_trowel_unbreaking_chance matches ..66 run return run scoreboard players set @s lz_trowel_unbreaking_check 1
execute if entity @s[predicate=lzstools:unbreaking/mainhand/1] if score @s lz_trowel_unbreaking_chance matches ..50 run return run scoreboard players set @s lz_trowel_unbreaking_check 1

View File

@@ -0,0 +1 @@
$item modify entity @s weapon.offhand {"function":"minecraft:set_components","components":{"minecraft:damage":$(damage)}}

View File

@@ -0,0 +1,4 @@
execute if entity @s[predicate=lzstools_trowel:offhand/iron] at @s anchored eyes run particle minecraft:item{item:"minecraft:iron_sword"} ^ ^-0.35 ^0.65 0.1 0.1 0.1 0.06 10 force
execute if entity @s[predicate=lzstools_trowel:offhand/diamond] at @s anchored eyes run particle minecraft:item{item:"minecraft:diamond_sword"} ^ ^-0.35 ^0.65 0.1 0.1 0.1 0.06 10 force
item replace entity @s weapon.offhand with minecraft:air
playsound minecraft:entity.item.break master @a ~ ~ ~ 1 1

View File

@@ -0,0 +1,13 @@
scoreboard players reset @s lz_trowel_unbreaking_check
execute if entity @s[predicate=lzstools:unbreaking/offhand/all] run function lzstools_trowel:durability/offhand/unbreaking
execute if score @s lz_trowel_unbreaking_check matches 1 run return fail
# Handle Damage
data modify storage lzstools:trowel components set from entity @s SelectedItem.components
execute store result score @s lz_trowel_damage run data get storage lzstools:trowel components."minecraft:damage"
execute store result score @s lz_trowel_max_damage run data get storage lzstools:trowel components."minecraft:max_damage"
scoreboard players add @s lz_trowel_damage 1
execute store result storage lzstools:trowel damage int 1 run scoreboard players get @s lz_trowel_damage
function lzstools_trowel:durability/offhand/apply with storage lzstools:trowel
execute if score @s lz_trowel_damage >= @s lz_trowel_max_damage run function lzstools_trowel:durability/offhand/break

View File

@@ -0,0 +1,4 @@
execute store result score @s lz_trowel_unbreaking_chance run random value 1..100
execute if entity @s[predicate=lzstools:unbreaking/offhand/3] if score @s lz_trowel_unbreaking_chance matches ..75 run return run scoreboard players set @s lz_trowel_unbreaking_check 1
execute if entity @s[predicate=lzstools:unbreaking/offhand/2] if score @s lz_trowel_unbreaking_chance matches ..66 run return run scoreboard players set @s lz_trowel_unbreaking_check 1
execute if entity @s[predicate=lzstools:unbreaking/offhand/1] if score @s lz_trowel_unbreaking_chance matches ..50 run return run scoreboard players set @s lz_trowel_unbreaking_check 1

View File

@@ -0,0 +1,3 @@
tag @s add lzstools_trowel_mainhand
# Raycast from player's position
function lzstools_trowel:raycast/start

View File

@@ -0,0 +1,3 @@
tag @s add lzstools_trowel_offhand
# Raycast from player's position
function lzstools_trowel:raycast/start

View File

@@ -0,0 +1,7 @@
# No Shulkers
$execute if items entity @s hotbar.$(temp_slot) #minecraft:shulker_boxes run return fail
$setblock ~ -64 ~ $(temp_id)
setblock ~ -64 ~ bedrock
$data modify storage lzstools:trowel blocks append value "$(temp_id)"
$data modify storage lzstools:trowel slots append value "$(temp_slot)"

View File

@@ -0,0 +1,3 @@
function lzstools_trowel:random/block_macro with storage lzstools:trowel
data remove storage lzstools:trowel temp_id
data remove storage lzstools:trowel temp_slot

View File

@@ -0,0 +1,35 @@
data modify storage lzstools:trowel temp_id set from storage lzstools:trowel inventory[{Slot:0b}].id
data modify storage lzstools:trowel temp_slot set from storage lzstools:trowel inventory[{Slot:0b}].Slot
function lzstools_trowel:random/check_block
data modify storage lzstools:trowel temp_id set from storage lzstools:trowel inventory[{Slot:1b}].id
data modify storage lzstools:trowel temp_slot set from storage lzstools:trowel inventory[{Slot:1b}].Slot
function lzstools_trowel:random/check_block
data modify storage lzstools:trowel temp_id set from storage lzstools:trowel inventory[{Slot:2b}].id
data modify storage lzstools:trowel temp_slot set from storage lzstools:trowel inventory[{Slot:2b}].Slot
function lzstools_trowel:random/check_block
data modify storage lzstools:trowel temp_id set from storage lzstools:trowel inventory[{Slot:3b}].id
data modify storage lzstools:trowel temp_slot set from storage lzstools:trowel inventory[{Slot:3b}].Slot
function lzstools_trowel:random/check_block
data modify storage lzstools:trowel temp_id set from storage lzstools:trowel inventory[{Slot:4b}].id
data modify storage lzstools:trowel temp_slot set from storage lzstools:trowel inventory[{Slot:4b}].Slot
function lzstools_trowel:random/check_block
data modify storage lzstools:trowel temp_id set from storage lzstools:trowel inventory[{Slot:5b}].id
data modify storage lzstools:trowel temp_slot set from storage lzstools:trowel inventory[{Slot:5b}].Slot
function lzstools_trowel:random/check_block
data modify storage lzstools:trowel temp_id set from storage lzstools:trowel inventory[{Slot:6b}].id
data modify storage lzstools:trowel temp_slot set from storage lzstools:trowel inventory[{Slot:6b}].Slot
function lzstools_trowel:random/check_block
data modify storage lzstools:trowel temp_id set from storage lzstools:trowel inventory[{Slot:7b}].id
data modify storage lzstools:trowel temp_slot set from storage lzstools:trowel inventory[{Slot:7b}].Slot
function lzstools_trowel:random/check_block
data modify storage lzstools:trowel temp_id set from storage lzstools:trowel inventory[{Slot:8b}].id
data modify storage lzstools:trowel temp_slot set from storage lzstools:trowel inventory[{Slot:8b}].Slot
function lzstools_trowel:random/check_block

View File

@@ -0,0 +1,2 @@
$data modify storage lzstools:trowel chosen_block set from storage lzstools:trowel blocks[$(chosen_index)]
$data modify storage lzstools:trowel chosen_slot set from storage lzstools:trowel slots[$(chosen_index)]

View File

@@ -0,0 +1 @@
$return run random value 0..$(length)

View File

@@ -0,0 +1,30 @@
# Clear Storage
data remove storage lzstools:trowel slots
data remove storage lzstools:trowel blocks
data remove storage lzstools:trowel length
data remove storage lzstools:trowel temp_slot
data remove storage lzstools:trowel temp_id
data remove storage lzstools:trowel chosen_index
data remove storage lzstools:trowel chosen_block
data remove storage lzstools:trowel chosen_slot
data modify storage lzstools:trowel inventory set from entity @s Inventory
#store valid blocks
function lzstools_trowel:random/check_hotbar with storage lzstools:trowel
# Get blocks length
execute store result score @s lz_trowel_block_length run data get storage lzstools:trowel blocks
scoreboard players remove @s lz_trowel_block_length 1
# Stop if no blocks
execute if score @s lz_trowel_block_length matches ..-1 run return fail
# Store result
execute store result storage lzstools:trowel length int 1 run scoreboard players get @s lz_trowel_block_length
# Pick Block
execute store result storage lzstools:trowel chosen_index int 1 run function lzstools_trowel:random/random with storage lzstools:trowel
# Get Block
function lzstools_trowel:random/get_block with storage lzstools:trowel

View File

@@ -0,0 +1,16 @@
# Cancel if intercepting entity
execute if entity @n[distance=..1] run return fail
# Choose Block
function lzstools_trowel:random/start
# No block, don't place and end
execute store result score @s lz_chosen_block_check run data get storage lzstools:trowel chosen_block
execute if score @s lz_chosen_block_check matches 0 run return fail
# Place block
function lzstools_trowel:block/place
# Durability
execute if entity @s[tag=lztools_trowel_mainhand,gamemode=!creative] run function lzstools_trowel:durability/mainhand/handle
execute if entity @s[tag=lztools_trowel_offhand,gamemode=!creative] run function lzstools_trowel:durability/offhand/handle

View File

@@ -0,0 +1,14 @@
## Raycast
# Set block data
execute as @s store result score @s lz_trowel_raycast_hit run loot spawn ~ -65 ~ mine ~ ~ ~ minecraft:netherite_pickaxe[minecraft:enchantments={"minecraft:silk_touch":1}]
execute as @s run kill @n[type=minecraft:item,distance=..0.5,y=-65]
execute as @s if score @s lz_trowel_raycast_hit matches 1 positioned ^ ^ ^-0.01 run function lzstools_trowel:raycast/hit
execute if score @s lz_trowel_raycast_hit matches 1 run tag @s remove lzstools_trowel_mainhand
execute if score @s lz_trowel_raycast_hit matches 1 run tag @s remove lzstools_trowel_offhand
# Advance forward and if nothing found
scoreboard players add #distance lz_trowel_raycast 1
execute if score @s lz_trowel_raycast_hit matches 0 if score #distance lz_trowel_raycast matches ..451 positioned ^ ^ ^0.01 run function lzstools_trowel:raycast/rayloop

View File

@@ -0,0 +1,9 @@
#Setting up the raycasting data.
scoreboard players set #distance lz_trowel_raycast 0
tag @s add lz_trowel_raycast
#Activating the raycast. This function will call itself until it is done.
execute as @e[tag=lz_trowel_raycast] at @s anchored eyes positioned ^ ^ ^ run function lzstools_trowel:raycast/rayloop
#Raycasting finished, removing tag from the raycaster.
tag @s remove lz_trowel_raycast

View File

@@ -0,0 +1,17 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"predicates": {
"minecraft:custom_data": {
"lzstools": [
"trowel_diamond"
]
}
}
}
}
}
}

View File

@@ -0,0 +1,17 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"predicates": {
"minecraft:custom_data": {
"lzstools": [
"trowel_diamond"
]
}
}
}
}
}
}

View File

@@ -0,0 +1,17 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"offhand": {
"predicates": {
"minecraft:custom_data": {
"lzstools": [
"trowel_diamond"
]
}
}
}
}
}
}

View File

@@ -0,0 +1,17 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"offhand": {
"predicates": {
"minecraft:custom_data": {
"lzstools": [
"trowel_diamond"
]
}
}
}
}
}
}

View File

@@ -0,0 +1,36 @@
{
"type": "minecraft:crafting_shaped",
"category": "equipment",
"pattern": [
" ",
"s ",
" dd"
],
"key": {
"s": "minecraft:stick",
"d": "minecraft:diamond"
},
"result": {
"id": "minecraft:carrot_on_a_stick",
"count": 1,
"components": {
"minecraft:max_damage": 4500,
"minecraft:custom_name": {
"text": "Diamond Trowel",
"color": "aqua",
"italic": false
},
"minecraft:custom_model_data": {
"strings": [
"lzstools:trowel_diamond"
]
},
"minecraft:custom_data": {
"lzstools": [
"trowel",
"trowel_diamond"
]
}
}
}
}

View File

@@ -0,0 +1,36 @@
{
"type": "minecraft:crafting_shaped",
"category": "equipment",
"pattern": [
" ",
"s ",
" ii"
],
"key": {
"s": "minecraft:stick",
"i": "minecraft:iron_ingot"
},
"result": {
"id": "minecraft:carrot_on_a_stick",
"count": 1,
"components": {
"minecraft:max_damage": 750,
"minecraft:custom_name": {
"text": "Iron Trowel",
"color": "aqua",
"italic": false
},
"minecraft:custom_model_data": {
"strings": [
"lzstools:trowel_iron"
]
},
"minecraft:custom_data": {
"lzstools": [
"trowel",
"trowel_iron"
]
}
}
}
}

View File

@@ -0,0 +1,29 @@
## Raycast Partial-box
# Get Raycast Target Coords
function lzstools_wrench:raycast/target_coords
# Partial Boxes
execute if block ~ ~ ~ #lzstools:banners run function lzstools_wrench:raycast/partialbox/banners
execute if block ~ ~ ~ #minecraft:rails run function lzstools_wrench:raycast/partialbox/rails
execute if block ~ ~ ~ #minecraft:trapdoors run function lzstools_wrench:raycast/partialbox/trapdoors
execute if block ~ ~ ~ #minecraft:slabs run function lzstools_wrench:raycast/partialbox/slabs
execute if block ~ ~ ~ #minecraft:stairs run function lzstools_wrench:raycast/partialbox/stairs
execute if block ~ ~ ~ #minecraft:fence_gates run function lzstools_wrench:raycast/partialbox/fence_gates
execute if block ~ ~ ~ #minecraft:campfires run function lzstools_wrench:raycast/partialbox/campfires
execute if block ~ ~ ~ #minecraft:all_signs run function lzstools_wrench:raycast/partialbox/signs
execute if block ~ ~ ~ #minecraft:anvil run function lzstools_wrench:raycast/partialbox/anvils
execute if block ~ ~ ~ minecraft:repeater run function lzstools_wrench:raycast/partialbox/repeater
execute if block ~ ~ ~ minecraft:comparator run function lzstools_wrench:raycast/partialbox/comparator
execute if block ~ ~ ~ minecraft:calibrated_sculk_sensor run function lzstools_wrench:raycast/partialbox/calibrated_sculk_sensor
execute if block ~ ~ ~ minecraft:piston run function lzstools_wrench:raycast/partialbox/pistons
execute if block ~ ~ ~ minecraft:sticky_piston run function lzstools_wrench:raycast/partialbox/pistons
execute if block ~ ~ ~ minecraft:hopper run function lzstools_wrench:raycast/partialbox/hopper
execute if block ~ ~ ~ minecraft:end_rod run function lzstools_wrench:raycast/partialbox/end_rod
execute if block ~ ~ ~ minecraft:lightning_rod run function lzstools_wrench:raycast/partialbox/lightning_rod
execute if block ~ ~ ~ minecraft:chain run function lzstools_wrench:raycast/partialbox/chain
execute if block ~ ~ ~ minecraft:decorated_pot run function lzstools_wrench:raycast/partialbox/decorated_pot
execute if block ~ ~ ~ minecraft:stonecutter run function lzstools_wrench:raycast/partialbox/stonecutter
execute if block ~ ~ ~ minecraft:ender_chest run function lzstools_wrench:raycast/partialbox/ender_chest
execute if block ~ ~ ~ minecraft:bell run function lzstools_wrench:raycast/partialbox/bell
execute if block ~ ~ ~ minecraft:grindstone run function lzstools_wrench:raycast/partialbox/grindstone

View File

@@ -0,0 +1,20 @@
# Anvils
execute if score px lz_wrench_raycast matches 3..12 if score pz lz_wrench_raycast matches 0..15 if score py lz_wrench_raycast matches 10..15 if block ~ ~ ~ #minecraft:anvil[facing=north] run function lzstools_wrench:rotate/nesw/rotate
execute if score px lz_wrench_raycast matches 2..13 if score pz lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 0..3 if block ~ ~ ~ #minecraft:anvil[facing=north] run function lzstools_wrench:rotate/nesw/rotate
execute if score px lz_wrench_raycast matches 4..11 if score pz lz_wrench_raycast matches 3..12 if score py lz_wrench_raycast matches 4 if block ~ ~ ~ #minecraft:anvil[facing=north] run function lzstools_wrench:rotate/nesw/rotate
execute if score px lz_wrench_raycast matches 6..9 if score pz lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 5..9 if block ~ ~ ~ #minecraft:anvil[facing=north] run function lzstools_wrench:rotate/nesw/rotate
execute if score px lz_wrench_raycast matches 3..12 if score pz lz_wrench_raycast matches 0..15 if score py lz_wrench_raycast matches 10..15 if block ~ ~ ~ #minecraft:anvil[facing=south] run function lzstools_wrench:rotate/nesw/rotate
execute if score px lz_wrench_raycast matches 2..13 if score pz lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 0..3 if block ~ ~ ~ #minecraft:anvil[facing=south] run function lzstools_wrench:rotate/nesw/rotate
execute if score px lz_wrench_raycast matches 4..11 if score pz lz_wrench_raycast matches 3..12 if score py lz_wrench_raycast matches 4 if block ~ ~ ~ #minecraft:anvil[facing=south] run function lzstools_wrench:rotate/nesw/rotate
execute if score px lz_wrench_raycast matches 6..9 if score pz lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 5..9 if block ~ ~ ~ #minecraft:anvil[facing=south] run function lzstools_wrench:rotate/nesw/rotate
execute if score pz lz_wrench_raycast matches 3..12 if score px lz_wrench_raycast matches 0..15 if score py lz_wrench_raycast matches 10..15 if block ~ ~ ~ #minecraft:anvil[facing=east] run function lzstools_wrench:rotate/nesw/rotate
execute if score pz lz_wrench_raycast matches 2..13 if score px lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 0..3 if block ~ ~ ~ #minecraft:anvil[facing=east] run function lzstools_wrench:rotate/nesw/rotate
execute if score pz lz_wrench_raycast matches 4..11 if score px lz_wrench_raycast matches 3..12 if score py lz_wrench_raycast matches 4 if block ~ ~ ~ #minecraft:anvil[facing=east] run function lzstools_wrench:rotate/nesw/rotate
execute if score pz lz_wrench_raycast matches 6..9 if score px lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 5..9 if block ~ ~ ~ #minecraft:anvil[facing=east] run function lzstools_wrench:rotate/nesw/rotate
execute if score pz lz_wrench_raycast matches 3..12 if score px lz_wrench_raycast matches 0..15 if score py lz_wrench_raycast matches 10..15 if block ~ ~ ~ #minecraft:anvil[facing=west] run function lzstools_wrench:rotate/nesw/rotate
execute if score pz lz_wrench_raycast matches 2..13 if score px lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 0..3 if block ~ ~ ~ #minecraft:anvil[facing=west] run function lzstools_wrench:rotate/nesw/rotate
execute if score pz lz_wrench_raycast matches 4..11 if score px lz_wrench_raycast matches 3..12 if score py lz_wrench_raycast matches 4 if block ~ ~ ~ #minecraft:anvil[facing=west] run function lzstools_wrench:rotate/nesw/rotate
execute if score pz lz_wrench_raycast matches 6..9 if score px lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 5..9 if block ~ ~ ~ #minecraft:anvil[facing=west] run function lzstools_wrench:rotate/nesw/rotate

View File

@@ -0,0 +1,2 @@
# Banners
execute if score px lz_wrench_raycast matches 4..11 if score pz lz_wrench_raycast matches 4..11 if block ~ ~ ~ #lzstools:banners run function lzstools_wrench:rotate/banners/rotate

View File

@@ -0,0 +1,5 @@
# Bell
execute if score px lz_wrench_raycast matches 5..12 if block ~ ~ ~ minecraft:bell[attachment=floor,facing=north] run function lzstools_wrench:rotate/nesw/rotate
execute if score pz lz_wrench_raycast matches 5..12 if block ~ ~ ~ minecraft:bell[attachment=floor,facing=east] run function lzstools_wrench:rotate/nesw/rotate
execute if score px lz_wrench_raycast matches 5..12 if block ~ ~ ~ minecraft:bell[attachment=floor,facing=south] run function lzstools_wrench:rotate/nesw/rotate
execute if score pz lz_wrench_raycast matches 5..12 if block ~ ~ ~ minecraft:bell[attachment=floor,facing=west] run function lzstools_wrench:rotate/nesw/rotate

View File

@@ -0,0 +1,2 @@
# Calibrated Sculk Sensor
execute if block ~ ~ ~ minecraft:calibrated_sculk_sensor if score py lz_wrench_raycast matches ..7 run function lzstools_wrench:rotate/unique_blocks/calibrated_sculk_sensor/rotate

View File

@@ -0,0 +1,2 @@
# Campfires
execute if block ~ ~ ~ #minecraft:campfires if score py lz_wrench_raycast matches ..7 run function lzstools_wrench:rotate/unique_blocks/campfires/rotate

View File

@@ -0,0 +1,4 @@
# Chain
execute if block ~ ~ ~ minecraft:chain[axis=x] if score py lz_wrench_raycast matches 7..8 if score pz lz_wrench_raycast matches 7..8 run function lzstools_wrench:rotate/xyz/rotate
execute if block ~ ~ ~ minecraft:chain[axis=y] if score px lz_wrench_raycast matches 7..8 if score pz lz_wrench_raycast matches 7..8 run function lzstools_wrench:rotate/xyz/rotate
execute if block ~ ~ ~ minecraft:chain[axis=z] if score px lz_wrench_raycast matches 7..8 if score py lz_wrench_raycast matches 7..8 run function lzstools_wrench:rotate/xyz/rotate

View File

@@ -0,0 +1,2 @@
# Redstone Comprator
execute if block ~ ~ ~ minecraft:comparator if score py lz_wrench_raycast matches ..1 run function lzstools_wrench:rotate/unique_blocks/comparator/rotate

View File

@@ -0,0 +1,2 @@
# Decorated Pot
execute if score px lz_wrench_raycast matches 1..14 if score pz lz_wrench_raycast matches 1..14 if block ~ ~ ~ minecraft:decorated_pot run function lzstools_wrench:rotate/nesw/rotate

View File

@@ -0,0 +1,7 @@
# End Rod
execute if block ~ ~ ~ minecraft:end_rod[facing=up] if score px lz_wrench_raycast matches 6..9 if score pz lz_wrench_raycast matches 6..9 run function lzstools_wrench:rotate/neswud/rotate
execute if block ~ ~ ~ minecraft:end_rod[facing=down] if score px lz_wrench_raycast matches 6..9 if score pz lz_wrench_raycast matches 6..9 run function lzstools_wrench:rotate/neswud/rotate
execute if block ~ ~ ~ minecraft:end_rod[facing=south] if score px lz_wrench_raycast matches 6..9 if score py lz_wrench_raycast matches 6..9 run function lzstools_wrench:rotate/neswud/rotate
execute if block ~ ~ ~ minecraft:end_rod[facing=north] if score px lz_wrench_raycast matches 6..9 if score py lz_wrench_raycast matches 6..9 run function lzstools_wrench:rotate/neswud/rotate
execute if block ~ ~ ~ minecraft:end_rod[facing=east] if score py lz_wrench_raycast matches 6..9 if score pz lz_wrench_raycast matches 6..9 run function lzstools_wrench:rotate/neswud/rotate
execute if block ~ ~ ~ minecraft:end_rod[facing=west] if score py lz_wrench_raycast matches 6..9 if score pz lz_wrench_raycast matches 6..9 run function lzstools_wrench:rotate/neswud/rotate

View File

@@ -0,0 +1,2 @@
# Ender Chest
execute if score px lz_wrench_raycast matches 1..14 if score pz lz_wrench_raycast matches 1..14 if score py lz_wrench_raycast matches ..14 if block ~ ~ ~ minecraft:ender_chest run function lzstools_wrench:rotate/nesw/rotate

View File

@@ -0,0 +1,9 @@
# Fence Gates
execute if block ~ ~ ~ #minecraft:fence_gates[facing=north] if score px lz_wrench_raycast matches 6..9 run function lzstools_wrench:rotate/nesw/rotate
execute if block ~ ~ ~ #minecraft:fence_gates[facing=east] if score pz lz_wrench_raycast matches 6..9 run function lzstools_wrench:rotate/nesw/rotate
execute if block ~ ~ ~ #minecraft:fence_gates[facing=south] if score px lz_wrench_raycast matches 6..9 run function lzstools_wrench:rotate/nesw/rotate
execute if block ~ ~ ~ #minecraft:fence_gates[facing=west] if score pz lz_wrench_raycast matches 6..9 run function lzstools_wrench:rotate/nesw/rotate
execute if block ~ ~ ~ #minecraft:fence_gates[facing=north,in_wall=true] if score px lz_wrench_raycast matches 6..9 if score py lz_wrench_raycast matches ..12 run function lzstools_wrench:rotate/nesw/rotate
execute if block ~ ~ ~ #minecraft:fence_gates[facing=east,in_wall=true] if score pz lz_wrench_raycast matches 6..9 if score py lz_wrench_raycast matches ..12 run function lzstools_wrench:rotate/nesw/rotate
execute if block ~ ~ ~ #minecraft:fence_gates[facing=south,in_wall=true] if score px lz_wrench_raycast matches 6..9 if score py lz_wrench_raycast matches ..12 run function lzstools_wrench:rotate/nesw/rotate
execute if block ~ ~ ~ #minecraft:fence_gates[facing=west,in_wall=true] if score pz lz_wrench_raycast matches 6..9 if score py lz_wrench_raycast matches ..12 run function lzstools_wrench:rotate/nesw/rotate

View File

@@ -0,0 +1,64 @@
# Grindstone
# Floor
execute if score px lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 4..15 if score pz lz_wrench_raycast matches 2..13 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=north] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 4..15 if score px lz_wrench_raycast matches 2..13 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=east] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 4..15 if score pz lz_wrench_raycast matches 2..13 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=south] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 4..15 if score px lz_wrench_raycast matches 2..13 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=west] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 7..12 if score pz lz_wrench_raycast matches 5..10 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=north] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 7..12 if score px lz_wrench_raycast matches 5..10 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=east] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 7..12 if score pz lz_wrench_raycast matches 5..10 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=south] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 7..12 if score px lz_wrench_raycast matches 5..10 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=west] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 2..3 if score py lz_wrench_raycast matches 0..6 if score pz lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=north] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 2..3 if score py lz_wrench_raycast matches 0..6 if score px lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=east] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 2..3 if score py lz_wrench_raycast matches 0..6 if score pz lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=south] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 2..3 if score py lz_wrench_raycast matches 0..6 if score px lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=west] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 12..13 if score py lz_wrench_raycast matches 0..6 if score pz lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=north] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 12..13 if score py lz_wrench_raycast matches 0..6 if score px lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=east] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 12..13 if score py lz_wrench_raycast matches 0..6 if score pz lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=south] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 12..13 if score py lz_wrench_raycast matches 0..6 if score px lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=floor,facing=west] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
# Wall
execute if score px lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 2..13 if score pz lz_wrench_raycast matches 0..11 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=north] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 2..13 if score px lz_wrench_raycast matches 4..15 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=east] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 2..13 if score pz lz_wrench_raycast matches 4..15 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=south] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 2..13 if score px lz_wrench_raycast matches 0..11 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=west] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 5..10 if score pz lz_wrench_raycast matches 3..8 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=north] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 5..10 if score px lz_wrench_raycast matches 7..12 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=east] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 5..10 if score pz lz_wrench_raycast matches 7..12 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=south] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 5..10 if score px lz_wrench_raycast matches 3..8 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=west] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 2..3 if score py lz_wrench_raycast matches 0..6 if score pz lz_wrench_raycast matches 9..15 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=north] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 2..3 if score py lz_wrench_raycast matches 0..6 if score px lz_wrench_raycast matches 0..6 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=east] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 2..3 if score py lz_wrench_raycast matches 0..6 if score pz lz_wrench_raycast matches 0..6 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=south] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 2..3 if score py lz_wrench_raycast matches 0..6 if score px lz_wrench_raycast matches 6..15 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=west] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 12..13 if score py lz_wrench_raycast matches 0..6 if score pz lz_wrench_raycast matches 9..15 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=north] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 12..13 if score py lz_wrench_raycast matches 0..6 if score px lz_wrench_raycast matches 0..6 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=east] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 12..13 if score py lz_wrench_raycast matches 0..6 if score pz lz_wrench_raycast matches 0..6 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=south] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 12..13 if score py lz_wrench_raycast matches 0..6 if score px lz_wrench_raycast matches 9..15 if block ~ ~ ~ minecraft:grindstone[face=wall,facing=west] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
# Ceiling
execute if score px lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 0..11 if score pz lz_wrench_raycast matches 2..13 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=north] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 0..11 if score px lz_wrench_raycast matches 2..13 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=east] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 0..11 if score pz lz_wrench_raycast matches 2..13 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=south] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 4..11 if score py lz_wrench_raycast matches 0..11 if score px lz_wrench_raycast matches 2..13 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=west] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 3..8 if score pz lz_wrench_raycast matches 5..10 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=north] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 3..8 if score px lz_wrench_raycast matches 5..10 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=east] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 3..8 if score pz lz_wrench_raycast matches 5..10 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=south] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 2..13 if score py lz_wrench_raycast matches 3..8 if score px lz_wrench_raycast matches 5..10 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=west] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 2..3 if score py lz_wrench_raycast matches 9..15 if score pz lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=north] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 2..3 if score py lz_wrench_raycast matches 9..15 if score px lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=east] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 2..3 if score py lz_wrench_raycast matches 9..15 if score pz lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=south] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 2..3 if score py lz_wrench_raycast matches 9..15 if score px lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=west] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 12..13 if score py lz_wrench_raycast matches 9..15 if score pz lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=north] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 12..13 if score py lz_wrench_raycast matches 9..15 if score px lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=east] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score px lz_wrench_raycast matches 12..13 if score py lz_wrench_raycast matches 9..15 if score pz lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=south] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate
execute if score pz lz_wrench_raycast matches 12..13 if score py lz_wrench_raycast matches 9..15 if score px lz_wrench_raycast matches 6..9 if block ~ ~ ~ minecraft:grindstone[face=ceiling,facing=west] run function lzstools_wrench:rotate/unique_blocks/grindstone/rotate

Some files were not shown because too many files have changed in this diff Show More