From 657467f49ddd99aa3c15307e94eeb1ddfed087d1 Mon Sep 17 00:00:00 2001 From: ForestOfLight Date: Wed, 2 Jul 2025 20:02:17 -0700 Subject: [PATCH 01/12] configure for regolith --- .gitignore | 4 ++- config.json | 26 ++++++++++++++++++ .../BP}/items/easy_place.json | 0 .../BP}/items/material_grabber.json | 0 {Construct[BP] => packs/BP}/items/menu.json | 0 {Construct[BP] => packs/BP}/manifest.json | 0 {Construct[BP] => packs/BP}/pack_icon.png | Bin {Construct[BP] => packs/BP}/scripts/blocks.js | 0 .../BP}/scripts/classes/BlockInfo.js | 0 .../BP}/scripts/classes/Builder/Builder.js | 0 .../scripts/classes/Builder/BuilderForm.js | 0 .../classes/Builder/BuilderFormBuilder.js | 0 .../scripts/classes/Builder/BuilderOption.js | 0 .../scripts/classes/Builder/BuilderOptions.js | 0 .../BP}/scripts/classes/Builder/Builders.js | 0 .../classes/Enums/BlockVerificationLevel.js | 0 .../scripts/classes/Enums/InstanceButtons.js | 0 .../classes/Errors/InstanceNotPlacedError.js | 0 .../classes/Errors/InvalidInstanceError.js | 0 .../classes/Errors/InvalidStructureError.js | 0 .../scripts/classes/Instance/InstanceForm.js | 0 .../classes/Instance/InstanceFormBuilder.js | 0 .../classes/Instance/InstanceOptions.js | 0 .../classes/Instance/StructureInstance.js | 0 .../classes/Materials/MaterialGrabberForm.js | 0 .../Materials/MaterialGrabberFormBuilder.js | 0 .../classes/Materials/StructureMaterials.js | 0 .../BP}/scripts/classes/MenuForm.js | 0 .../BP}/scripts/classes/MenuFormBuilder.js | 0 .../BP}/scripts/classes/Option.js | 0 .../BP}/scripts/classes/Outliner.js | 0 .../BP}/scripts/classes/Raycaster.js | 0 .../Render/BlockVerificationLevelRender.js | 0 .../classes/Render/StructureOutliner.js | 0 .../classes/Render/VerificationRenderer.js | 0 .../scripts/classes/Structure/Structure.js | 0 .../classes/Structure/StructureCollection.js | 0 .../classes/Structure/StructureStatistics.js | 0 .../scripts/classes/Verifier/BlockVerifier.js | 0 .../classes/Verifier/StructureVerifier.js | 0 .../BP}/scripts/commands/construct.js | 0 {Construct[BP] => packs/BP}/scripts/config.js | 0 {Construct[BP] => packs/BP}/scripts/data.js | 0 .../BP}/scripts/lib/Vector.js | 0 .../BP}/scripts/lib/canopy/CanopyExtension.js | 0 .../BP}/scripts/lib/canopy/Command.js | 0 .../BP}/scripts/lib/canopy/Rule.js | 0 .../BP}/scripts/lib/canopy/extension.ipc.js | 0 .../BP}/scripts/lib/ipc/ipc.d.ts | 0 .../BP}/scripts/lib/ipc/ipc.js | 0 {Construct[BP] => packs/BP}/scripts/main.js | 0 .../BP}/scripts/options/easyPlace.js | 0 .../BP}/scripts/options/fastEasyPlace.js | 0 .../BP}/scripts/options/materialGrabber.js | 0 {Construct[BP] => packs/BP}/scripts/utils.js | 0 .../BP}/structures/construct.mcstructure | Bin packs/BP/structures/german.mcstructure | Bin 0 -> 2307739 bytes {Construct[RP] => packs/RP}/font/glyph_E2.png | Bin {Construct[RP] => packs/RP}/manifest.json | 0 {Construct[RP] => packs/RP}/pack_icon.png | Bin .../particles/blockoverlay_xy.particle.json | 0 .../particles/blockoverlay_xz.particle.json | 0 .../particles/blockoverlay_yz.particle.json | 0 .../RP}/particles/outline.particle.json | 0 .../RP}/textures/item_texture.json | 0 .../RP}/textures/items/easy_place.png | Bin .../RP}/textures/items/material_grabber.png | Bin .../RP}/textures/items/menu.png | Bin .../RP}/textures/particle/white.png | Bin 69 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 config.json rename {Construct[BP] => packs/BP}/items/easy_place.json (100%) rename {Construct[BP] => packs/BP}/items/material_grabber.json (100%) rename {Construct[BP] => packs/BP}/items/menu.json (100%) rename {Construct[BP] => packs/BP}/manifest.json (100%) rename {Construct[BP] => packs/BP}/pack_icon.png (100%) rename {Construct[BP] => packs/BP}/scripts/blocks.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/BlockInfo.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Builder/Builder.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Builder/BuilderForm.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Builder/BuilderFormBuilder.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Builder/BuilderOption.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Builder/BuilderOptions.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Builder/Builders.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Enums/BlockVerificationLevel.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Enums/InstanceButtons.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Errors/InstanceNotPlacedError.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Errors/InvalidInstanceError.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Errors/InvalidStructureError.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Instance/InstanceForm.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Instance/InstanceFormBuilder.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Instance/InstanceOptions.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Instance/StructureInstance.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Materials/MaterialGrabberForm.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Materials/MaterialGrabberFormBuilder.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Materials/StructureMaterials.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/MenuForm.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/MenuFormBuilder.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Option.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Outliner.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Raycaster.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Render/BlockVerificationLevelRender.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Render/StructureOutliner.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Render/VerificationRenderer.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Structure/Structure.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Structure/StructureCollection.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Structure/StructureStatistics.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Verifier/BlockVerifier.js (100%) rename {Construct[BP] => packs/BP}/scripts/classes/Verifier/StructureVerifier.js (100%) rename {Construct[BP] => packs/BP}/scripts/commands/construct.js (100%) rename {Construct[BP] => packs/BP}/scripts/config.js (100%) rename {Construct[BP] => packs/BP}/scripts/data.js (100%) rename {Construct[BP] => packs/BP}/scripts/lib/Vector.js (100%) rename {Construct[BP] => packs/BP}/scripts/lib/canopy/CanopyExtension.js (100%) rename {Construct[BP] => packs/BP}/scripts/lib/canopy/Command.js (100%) rename {Construct[BP] => packs/BP}/scripts/lib/canopy/Rule.js (100%) rename {Construct[BP] => packs/BP}/scripts/lib/canopy/extension.ipc.js (100%) rename {Construct[BP] => packs/BP}/scripts/lib/ipc/ipc.d.ts (100%) rename {Construct[BP] => packs/BP}/scripts/lib/ipc/ipc.js (100%) rename {Construct[BP] => packs/BP}/scripts/main.js (100%) rename {Construct[BP] => packs/BP}/scripts/options/easyPlace.js (100%) rename {Construct[BP] => packs/BP}/scripts/options/fastEasyPlace.js (100%) rename {Construct[BP] => packs/BP}/scripts/options/materialGrabber.js (100%) rename {Construct[BP] => packs/BP}/scripts/utils.js (100%) rename {Construct[BP] => packs/BP}/structures/construct.mcstructure (100%) create mode 100644 packs/BP/structures/german.mcstructure rename {Construct[RP] => packs/RP}/font/glyph_E2.png (100%) rename {Construct[RP] => packs/RP}/manifest.json (100%) rename {Construct[RP] => packs/RP}/pack_icon.png (100%) rename {Construct[RP] => packs/RP}/particles/blockoverlay_xy.particle.json (100%) rename {Construct[RP] => packs/RP}/particles/blockoverlay_xz.particle.json (100%) rename {Construct[RP] => packs/RP}/particles/blockoverlay_yz.particle.json (100%) rename {Construct[RP] => packs/RP}/particles/outline.particle.json (100%) rename {Construct[RP] => packs/RP}/textures/item_texture.json (100%) rename {Construct[RP] => packs/RP}/textures/items/easy_place.png (100%) rename {Construct[RP] => packs/RP}/textures/items/material_grabber.png (100%) rename {Construct[RP] => packs/RP}/textures/items/menu.png (100%) rename {Construct[RP] => packs/RP}/textures/particle/white.png (100%) diff --git a/.gitignore b/.gitignore index 860f418..903b950 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .DS_Store -.vscode/ \ No newline at end of file +.vscode/ +/build +/.regolith \ No newline at end of file diff --git a/config.json b/config.json new file mode 100644 index 0000000..69a4ea8 --- /dev/null +++ b/config.json @@ -0,0 +1,26 @@ +{ + "$schema": "https://raw.githubusercontent.com/Bedrock-OSS/regolith-schemas/main/config/v1.4.json", + "author": "ForestOfLight", + "name": "Construct", + "packs": { + "behaviorPack": "./packs/BP", + "resourcePack": "./packs/RP" + }, + "regolith": { + "dataPath": "./packs/data", + "filterDefinitions": {}, + "formatVersion": "1.4.0", + "profiles": { + "default": { + "export": { + "build": "standard", + "readOnly": false, + "target": "development", + "rpName": "project.name+'[RP]'", + "bpName": "project.name+'[BP]'" + }, + "filters": [] + } + } + } +} \ No newline at end of file diff --git a/Construct[BP]/items/easy_place.json b/packs/BP/items/easy_place.json similarity index 100% rename from Construct[BP]/items/easy_place.json rename to packs/BP/items/easy_place.json diff --git a/Construct[BP]/items/material_grabber.json b/packs/BP/items/material_grabber.json similarity index 100% rename from Construct[BP]/items/material_grabber.json rename to packs/BP/items/material_grabber.json diff --git a/Construct[BP]/items/menu.json b/packs/BP/items/menu.json similarity index 100% rename from Construct[BP]/items/menu.json rename to packs/BP/items/menu.json diff --git a/Construct[BP]/manifest.json b/packs/BP/manifest.json similarity index 100% rename from Construct[BP]/manifest.json rename to packs/BP/manifest.json diff --git a/Construct[BP]/pack_icon.png b/packs/BP/pack_icon.png similarity index 100% rename from Construct[BP]/pack_icon.png rename to packs/BP/pack_icon.png diff --git a/Construct[BP]/scripts/blocks.js b/packs/BP/scripts/blocks.js similarity index 100% rename from Construct[BP]/scripts/blocks.js rename to packs/BP/scripts/blocks.js diff --git a/Construct[BP]/scripts/classes/BlockInfo.js b/packs/BP/scripts/classes/BlockInfo.js similarity index 100% rename from Construct[BP]/scripts/classes/BlockInfo.js rename to packs/BP/scripts/classes/BlockInfo.js diff --git a/Construct[BP]/scripts/classes/Builder/Builder.js b/packs/BP/scripts/classes/Builder/Builder.js similarity index 100% rename from Construct[BP]/scripts/classes/Builder/Builder.js rename to packs/BP/scripts/classes/Builder/Builder.js diff --git a/Construct[BP]/scripts/classes/Builder/BuilderForm.js b/packs/BP/scripts/classes/Builder/BuilderForm.js similarity index 100% rename from Construct[BP]/scripts/classes/Builder/BuilderForm.js rename to packs/BP/scripts/classes/Builder/BuilderForm.js diff --git a/Construct[BP]/scripts/classes/Builder/BuilderFormBuilder.js b/packs/BP/scripts/classes/Builder/BuilderFormBuilder.js similarity index 100% rename from Construct[BP]/scripts/classes/Builder/BuilderFormBuilder.js rename to packs/BP/scripts/classes/Builder/BuilderFormBuilder.js diff --git a/Construct[BP]/scripts/classes/Builder/BuilderOption.js b/packs/BP/scripts/classes/Builder/BuilderOption.js similarity index 100% rename from Construct[BP]/scripts/classes/Builder/BuilderOption.js rename to packs/BP/scripts/classes/Builder/BuilderOption.js diff --git a/Construct[BP]/scripts/classes/Builder/BuilderOptions.js b/packs/BP/scripts/classes/Builder/BuilderOptions.js similarity index 100% rename from Construct[BP]/scripts/classes/Builder/BuilderOptions.js rename to packs/BP/scripts/classes/Builder/BuilderOptions.js diff --git a/Construct[BP]/scripts/classes/Builder/Builders.js b/packs/BP/scripts/classes/Builder/Builders.js similarity index 100% rename from Construct[BP]/scripts/classes/Builder/Builders.js rename to packs/BP/scripts/classes/Builder/Builders.js diff --git a/Construct[BP]/scripts/classes/Enums/BlockVerificationLevel.js b/packs/BP/scripts/classes/Enums/BlockVerificationLevel.js similarity index 100% rename from Construct[BP]/scripts/classes/Enums/BlockVerificationLevel.js rename to packs/BP/scripts/classes/Enums/BlockVerificationLevel.js diff --git a/Construct[BP]/scripts/classes/Enums/InstanceButtons.js b/packs/BP/scripts/classes/Enums/InstanceButtons.js similarity index 100% rename from Construct[BP]/scripts/classes/Enums/InstanceButtons.js rename to packs/BP/scripts/classes/Enums/InstanceButtons.js diff --git a/Construct[BP]/scripts/classes/Errors/InstanceNotPlacedError.js b/packs/BP/scripts/classes/Errors/InstanceNotPlacedError.js similarity index 100% rename from Construct[BP]/scripts/classes/Errors/InstanceNotPlacedError.js rename to packs/BP/scripts/classes/Errors/InstanceNotPlacedError.js diff --git a/Construct[BP]/scripts/classes/Errors/InvalidInstanceError.js b/packs/BP/scripts/classes/Errors/InvalidInstanceError.js similarity index 100% rename from Construct[BP]/scripts/classes/Errors/InvalidInstanceError.js rename to packs/BP/scripts/classes/Errors/InvalidInstanceError.js diff --git a/Construct[BP]/scripts/classes/Errors/InvalidStructureError.js b/packs/BP/scripts/classes/Errors/InvalidStructureError.js similarity index 100% rename from Construct[BP]/scripts/classes/Errors/InvalidStructureError.js rename to packs/BP/scripts/classes/Errors/InvalidStructureError.js diff --git a/Construct[BP]/scripts/classes/Instance/InstanceForm.js b/packs/BP/scripts/classes/Instance/InstanceForm.js similarity index 100% rename from Construct[BP]/scripts/classes/Instance/InstanceForm.js rename to packs/BP/scripts/classes/Instance/InstanceForm.js diff --git a/Construct[BP]/scripts/classes/Instance/InstanceFormBuilder.js b/packs/BP/scripts/classes/Instance/InstanceFormBuilder.js similarity index 100% rename from Construct[BP]/scripts/classes/Instance/InstanceFormBuilder.js rename to packs/BP/scripts/classes/Instance/InstanceFormBuilder.js diff --git a/Construct[BP]/scripts/classes/Instance/InstanceOptions.js b/packs/BP/scripts/classes/Instance/InstanceOptions.js similarity index 100% rename from Construct[BP]/scripts/classes/Instance/InstanceOptions.js rename to packs/BP/scripts/classes/Instance/InstanceOptions.js diff --git a/Construct[BP]/scripts/classes/Instance/StructureInstance.js b/packs/BP/scripts/classes/Instance/StructureInstance.js similarity index 100% rename from Construct[BP]/scripts/classes/Instance/StructureInstance.js rename to packs/BP/scripts/classes/Instance/StructureInstance.js diff --git a/Construct[BP]/scripts/classes/Materials/MaterialGrabberForm.js b/packs/BP/scripts/classes/Materials/MaterialGrabberForm.js similarity index 100% rename from Construct[BP]/scripts/classes/Materials/MaterialGrabberForm.js rename to packs/BP/scripts/classes/Materials/MaterialGrabberForm.js diff --git a/Construct[BP]/scripts/classes/Materials/MaterialGrabberFormBuilder.js b/packs/BP/scripts/classes/Materials/MaterialGrabberFormBuilder.js similarity index 100% rename from Construct[BP]/scripts/classes/Materials/MaterialGrabberFormBuilder.js rename to packs/BP/scripts/classes/Materials/MaterialGrabberFormBuilder.js diff --git a/Construct[BP]/scripts/classes/Materials/StructureMaterials.js b/packs/BP/scripts/classes/Materials/StructureMaterials.js similarity index 100% rename from Construct[BP]/scripts/classes/Materials/StructureMaterials.js rename to packs/BP/scripts/classes/Materials/StructureMaterials.js diff --git a/Construct[BP]/scripts/classes/MenuForm.js b/packs/BP/scripts/classes/MenuForm.js similarity index 100% rename from Construct[BP]/scripts/classes/MenuForm.js rename to packs/BP/scripts/classes/MenuForm.js diff --git a/Construct[BP]/scripts/classes/MenuFormBuilder.js b/packs/BP/scripts/classes/MenuFormBuilder.js similarity index 100% rename from Construct[BP]/scripts/classes/MenuFormBuilder.js rename to packs/BP/scripts/classes/MenuFormBuilder.js diff --git a/Construct[BP]/scripts/classes/Option.js b/packs/BP/scripts/classes/Option.js similarity index 100% rename from Construct[BP]/scripts/classes/Option.js rename to packs/BP/scripts/classes/Option.js diff --git a/Construct[BP]/scripts/classes/Outliner.js b/packs/BP/scripts/classes/Outliner.js similarity index 100% rename from Construct[BP]/scripts/classes/Outliner.js rename to packs/BP/scripts/classes/Outliner.js diff --git a/Construct[BP]/scripts/classes/Raycaster.js b/packs/BP/scripts/classes/Raycaster.js similarity index 100% rename from Construct[BP]/scripts/classes/Raycaster.js rename to packs/BP/scripts/classes/Raycaster.js diff --git a/Construct[BP]/scripts/classes/Render/BlockVerificationLevelRender.js b/packs/BP/scripts/classes/Render/BlockVerificationLevelRender.js similarity index 100% rename from Construct[BP]/scripts/classes/Render/BlockVerificationLevelRender.js rename to packs/BP/scripts/classes/Render/BlockVerificationLevelRender.js diff --git a/Construct[BP]/scripts/classes/Render/StructureOutliner.js b/packs/BP/scripts/classes/Render/StructureOutliner.js similarity index 100% rename from Construct[BP]/scripts/classes/Render/StructureOutliner.js rename to packs/BP/scripts/classes/Render/StructureOutliner.js diff --git a/Construct[BP]/scripts/classes/Render/VerificationRenderer.js b/packs/BP/scripts/classes/Render/VerificationRenderer.js similarity index 100% rename from Construct[BP]/scripts/classes/Render/VerificationRenderer.js rename to packs/BP/scripts/classes/Render/VerificationRenderer.js diff --git a/Construct[BP]/scripts/classes/Structure/Structure.js b/packs/BP/scripts/classes/Structure/Structure.js similarity index 100% rename from Construct[BP]/scripts/classes/Structure/Structure.js rename to packs/BP/scripts/classes/Structure/Structure.js diff --git a/Construct[BP]/scripts/classes/Structure/StructureCollection.js b/packs/BP/scripts/classes/Structure/StructureCollection.js similarity index 100% rename from Construct[BP]/scripts/classes/Structure/StructureCollection.js rename to packs/BP/scripts/classes/Structure/StructureCollection.js diff --git a/Construct[BP]/scripts/classes/Structure/StructureStatistics.js b/packs/BP/scripts/classes/Structure/StructureStatistics.js similarity index 100% rename from Construct[BP]/scripts/classes/Structure/StructureStatistics.js rename to packs/BP/scripts/classes/Structure/StructureStatistics.js diff --git a/Construct[BP]/scripts/classes/Verifier/BlockVerifier.js b/packs/BP/scripts/classes/Verifier/BlockVerifier.js similarity index 100% rename from Construct[BP]/scripts/classes/Verifier/BlockVerifier.js rename to packs/BP/scripts/classes/Verifier/BlockVerifier.js diff --git a/Construct[BP]/scripts/classes/Verifier/StructureVerifier.js b/packs/BP/scripts/classes/Verifier/StructureVerifier.js similarity index 100% rename from Construct[BP]/scripts/classes/Verifier/StructureVerifier.js rename to packs/BP/scripts/classes/Verifier/StructureVerifier.js diff --git a/Construct[BP]/scripts/commands/construct.js b/packs/BP/scripts/commands/construct.js similarity index 100% rename from Construct[BP]/scripts/commands/construct.js rename to packs/BP/scripts/commands/construct.js diff --git a/Construct[BP]/scripts/config.js b/packs/BP/scripts/config.js similarity index 100% rename from Construct[BP]/scripts/config.js rename to packs/BP/scripts/config.js diff --git a/Construct[BP]/scripts/data.js b/packs/BP/scripts/data.js similarity index 100% rename from Construct[BP]/scripts/data.js rename to packs/BP/scripts/data.js diff --git a/Construct[BP]/scripts/lib/Vector.js b/packs/BP/scripts/lib/Vector.js similarity index 100% rename from Construct[BP]/scripts/lib/Vector.js rename to packs/BP/scripts/lib/Vector.js diff --git a/Construct[BP]/scripts/lib/canopy/CanopyExtension.js b/packs/BP/scripts/lib/canopy/CanopyExtension.js similarity index 100% rename from Construct[BP]/scripts/lib/canopy/CanopyExtension.js rename to packs/BP/scripts/lib/canopy/CanopyExtension.js diff --git a/Construct[BP]/scripts/lib/canopy/Command.js b/packs/BP/scripts/lib/canopy/Command.js similarity index 100% rename from Construct[BP]/scripts/lib/canopy/Command.js rename to packs/BP/scripts/lib/canopy/Command.js diff --git a/Construct[BP]/scripts/lib/canopy/Rule.js b/packs/BP/scripts/lib/canopy/Rule.js similarity index 100% rename from Construct[BP]/scripts/lib/canopy/Rule.js rename to packs/BP/scripts/lib/canopy/Rule.js diff --git a/Construct[BP]/scripts/lib/canopy/extension.ipc.js b/packs/BP/scripts/lib/canopy/extension.ipc.js similarity index 100% rename from Construct[BP]/scripts/lib/canopy/extension.ipc.js rename to packs/BP/scripts/lib/canopy/extension.ipc.js diff --git a/Construct[BP]/scripts/lib/ipc/ipc.d.ts b/packs/BP/scripts/lib/ipc/ipc.d.ts similarity index 100% rename from Construct[BP]/scripts/lib/ipc/ipc.d.ts rename to packs/BP/scripts/lib/ipc/ipc.d.ts diff --git a/Construct[BP]/scripts/lib/ipc/ipc.js b/packs/BP/scripts/lib/ipc/ipc.js similarity index 100% rename from Construct[BP]/scripts/lib/ipc/ipc.js rename to packs/BP/scripts/lib/ipc/ipc.js diff --git a/Construct[BP]/scripts/main.js b/packs/BP/scripts/main.js similarity index 100% rename from Construct[BP]/scripts/main.js rename to packs/BP/scripts/main.js diff --git a/Construct[BP]/scripts/options/easyPlace.js b/packs/BP/scripts/options/easyPlace.js similarity index 100% rename from Construct[BP]/scripts/options/easyPlace.js rename to packs/BP/scripts/options/easyPlace.js diff --git a/Construct[BP]/scripts/options/fastEasyPlace.js b/packs/BP/scripts/options/fastEasyPlace.js similarity index 100% rename from Construct[BP]/scripts/options/fastEasyPlace.js rename to packs/BP/scripts/options/fastEasyPlace.js diff --git a/Construct[BP]/scripts/options/materialGrabber.js b/packs/BP/scripts/options/materialGrabber.js similarity index 100% rename from Construct[BP]/scripts/options/materialGrabber.js rename to packs/BP/scripts/options/materialGrabber.js diff --git a/Construct[BP]/scripts/utils.js b/packs/BP/scripts/utils.js similarity index 100% rename from Construct[BP]/scripts/utils.js rename to packs/BP/scripts/utils.js diff --git a/Construct[BP]/structures/construct.mcstructure b/packs/BP/structures/construct.mcstructure similarity index 100% rename from Construct[BP]/structures/construct.mcstructure rename to packs/BP/structures/construct.mcstructure diff --git a/packs/BP/structures/german.mcstructure b/packs/BP/structures/german.mcstructure new file mode 100644 index 0000000000000000000000000000000000000000..a1ed9059cf06f2955a1d017909553407ac65291a GIT binary patch literal 2307739 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 zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyKwwGW*|Y!r+}VFq2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ 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 W;1;Cx%sggL6%2BFIFJUJ%>V$irdI9% literal 0 HcmV?d00001 diff --git a/Construct[RP]/font/glyph_E2.png b/packs/RP/font/glyph_E2.png similarity index 100% rename from Construct[RP]/font/glyph_E2.png rename to packs/RP/font/glyph_E2.png diff --git a/Construct[RP]/manifest.json b/packs/RP/manifest.json similarity index 100% rename from Construct[RP]/manifest.json rename to packs/RP/manifest.json diff --git a/Construct[RP]/pack_icon.png b/packs/RP/pack_icon.png similarity index 100% rename from Construct[RP]/pack_icon.png rename to packs/RP/pack_icon.png diff --git a/Construct[RP]/particles/blockoverlay_xy.particle.json b/packs/RP/particles/blockoverlay_xy.particle.json similarity index 100% rename from Construct[RP]/particles/blockoverlay_xy.particle.json rename to packs/RP/particles/blockoverlay_xy.particle.json diff --git a/Construct[RP]/particles/blockoverlay_xz.particle.json b/packs/RP/particles/blockoverlay_xz.particle.json similarity index 100% rename from Construct[RP]/particles/blockoverlay_xz.particle.json rename to packs/RP/particles/blockoverlay_xz.particle.json diff --git a/Construct[RP]/particles/blockoverlay_yz.particle.json b/packs/RP/particles/blockoverlay_yz.particle.json similarity index 100% rename from Construct[RP]/particles/blockoverlay_yz.particle.json rename to packs/RP/particles/blockoverlay_yz.particle.json diff --git a/Construct[RP]/particles/outline.particle.json b/packs/RP/particles/outline.particle.json similarity index 100% rename from Construct[RP]/particles/outline.particle.json rename to packs/RP/particles/outline.particle.json diff --git a/Construct[RP]/textures/item_texture.json b/packs/RP/textures/item_texture.json similarity index 100% rename from Construct[RP]/textures/item_texture.json rename to packs/RP/textures/item_texture.json diff --git a/Construct[RP]/textures/items/easy_place.png b/packs/RP/textures/items/easy_place.png similarity index 100% rename from Construct[RP]/textures/items/easy_place.png rename to packs/RP/textures/items/easy_place.png diff --git a/Construct[RP]/textures/items/material_grabber.png b/packs/RP/textures/items/material_grabber.png similarity index 100% rename from Construct[RP]/textures/items/material_grabber.png rename to packs/RP/textures/items/material_grabber.png diff --git a/Construct[RP]/textures/items/menu.png b/packs/RP/textures/items/menu.png similarity index 100% rename from Construct[RP]/textures/items/menu.png rename to packs/RP/textures/items/menu.png diff --git a/Construct[RP]/textures/particle/white.png b/packs/RP/textures/particle/white.png similarity index 100% rename from Construct[RP]/textures/particle/white.png rename to packs/RP/textures/particle/white.png From bff7024021c14e567e457daadf37a19d131ab988 Mon Sep 17 00:00:00 2001 From: ForestOfLight Date: Wed, 2 Jul 2025 20:29:04 -0700 Subject: [PATCH 02/12] set up regolith watch when debugging --- .gitignore | 1 - .vscode/launch.json | 15 +++++++++++++++ .vscode/tasks.json | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json diff --git a/.gitignore b/.gitignore index 903b950..d716568 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ .DS_Store -.vscode/ /build /.regolith \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..7c6fbd4 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + "version": "0.3.0", + "configurations": [ + { + "type": "minecraft-js", + "request": "attach", + "name": "Debug with Minecraft", + "mode": "listen", + "targetModuleUuid": "8bb9a1e4-0531-4b93-8ade-3880bfe1e2fc", + "localRoot": "${workspaceFolder}/packs/BP/scripts", + "port": 19144, + "preLaunchTask": "regolith: watch" + } + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..6121569 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,44 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "regolith: run", + "type": "shell", + "command": "regolith run", + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "echo": true, + "close": true + } + }, + { + "label": "regolith: watch", + "type": "shell", + "command": "regolith watch", + "isBackground": true, + "problemMatcher": { + "pattern": [ + { + "regexp": ".", + "file": 1, + "location": 2, + "message": 3 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": ".", + "endsPattern": "." + } + }, + "presentation": { + "echo": true, + "close": true + } + } + ] +} \ No newline at end of file From 357327e9b08db38ead5b9c426308e577c7078a87 Mon Sep 17 00:00:00 2001 From: ForestOfLight Date: Sat, 5 Jul 2025 13:24:51 -0700 Subject: [PATCH 03/12] add shulker boxes to banlist --- packs/BP/scripts/data.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packs/BP/scripts/data.js b/packs/BP/scripts/data.js index 33a40e5..9ba0889 100644 --- a/packs/BP/scripts/data.js +++ b/packs/BP/scripts/data.js @@ -3,7 +3,10 @@ export const bannedBlocks = [ 'wooden_door', 'spruce_door', 'birch_door', 'jungle_door', 'acacia_door', 'dark_oak_door', 'mangrove_door', 'cherry_door', 'pale_oak_door', 'bamboo_door', 'iron_door', 'crimson_door', 'warped_door', 'copper_door', 'exposed_copper_door', 'weathered_copper_door', 'oxidized_copper_door', 'waxed_copper_door', 'waxed_exposed_copper_door', 'waxed_weathered_copper_door', 'waxed_oxidized_copper_door', - 'seagrass', 'kelp', 'dried_ghast' + 'seagrass', 'kelp', 'dried_ghast', 'undyed_shulker_box', 'white_shulker_box', 'orange_shulker_box', 'magenta_shulker_box', + 'light_blue_shulker_box', 'yellow_shulker_box', 'lime_shulker_box', 'pink_shulker_box', 'gray_shulker_box', + 'light_gray_shulker_box', 'cyan_shulker_box', 'purple_shulker_box', 'blue_shulker_box', 'brown_shulker_box', + 'green_shulker_box', 'red_shulker_box', 'black_shulker_box' ]; export const bannedDimensionBlocks = { From 9bb2b002c9d73dd5be4ad29423b062a02f0121c7 Mon Sep 17 00:00:00 2001 From: ForestOfLight Date: Thu, 10 Jul 2025 15:24:32 -0700 Subject: [PATCH 04/12] waterlogging support --- packs/BP/scripts/classes/BlockInfo.js | 10 ++++++---- packs/BP/scripts/classes/Structure/Structure.js | 1 + packs/BP/scripts/classes/Verifier/BlockVerifier.js | 5 +++-- packs/BP/scripts/options/fastEasyPlace.js | 2 +- packs/BP/scripts/utils.js | 8 +++++++- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/packs/BP/scripts/classes/BlockInfo.js b/packs/BP/scripts/classes/BlockInfo.js index 75292bd..95391dd 100644 --- a/packs/BP/scripts/classes/BlockInfo.js +++ b/packs/BP/scripts/classes/BlockInfo.js @@ -32,11 +32,13 @@ class BlockInfo { static getBlockMessage(block) { if (!block) return '§7Unknown'; + let output = `§a${block.type.id}`; const states = block.getAllStates(); - if (Object.keys(states).length === 0) - return `§a${block.type.id}`; - else - return `§a${block.type.id}\n§7${this.getFormattedStates(states)}`; + if (Object.keys(states).length > 0) + output += `\n§7${this.getFormattedStates(states)}`; + if (block.isWaterlogged) + output += `\n§7isWaterlogged: §3true`; + return output; } static getFormattedStates(states) { diff --git a/packs/BP/scripts/classes/Structure/Structure.js b/packs/BP/scripts/classes/Structure/Structure.js index 933fca0..54c2559 100644 --- a/packs/BP/scripts/classes/Structure/Structure.js +++ b/packs/BP/scripts/classes/Structure/Structure.js @@ -31,6 +31,7 @@ export class Structure { if (!blockPermutation) return void 0; blockPermutation.location = structureLocation; + blockPermutation.isWaterlogged = this.#structure.getIsWaterlogged(blockPermutation.location); return blockPermutation; } diff --git a/packs/BP/scripts/classes/Verifier/BlockVerifier.js b/packs/BP/scripts/classes/Verifier/BlockVerifier.js index 2c5d593..9d9fd05 100644 --- a/packs/BP/scripts/classes/Verifier/BlockVerifier.js +++ b/packs/BP/scripts/classes/Verifier/BlockVerifier.js @@ -36,7 +36,8 @@ export class BlockVerifier { return worldPermuation.type.id === structurePermuation.type.id; } - isExactMatch(worldPermuation, structurePermuation) { - return worldPermuation.matches(structurePermuation.type.id, structurePermuation.getAllStates()); + isExactMatch(worldPermutation, structurePermutation) { + return worldPermutation.matches(structurePermutation.type.id, structurePermutation.getAllStates()) + && this.block.isWaterlogged === structurePermutation.isWaterlogged; } } \ No newline at end of file diff --git a/packs/BP/scripts/options/fastEasyPlace.js b/packs/BP/scripts/options/fastEasyPlace.js index a9a3392..a66d8ae 100644 --- a/packs/BP/scripts/options/fastEasyPlace.js +++ b/packs/BP/scripts/options/fastEasyPlace.js @@ -97,7 +97,7 @@ function tryPlaceBlock(player, worldBlock, structureBlock) { } function locationIsPlaceable(worldBlock) { - return worldBlock.isAir; + return worldBlock.isAir || worldBlock.isLiquid; } function isBannedBlock(player, structureBlock) { diff --git a/packs/BP/scripts/utils.js b/packs/BP/scripts/utils.js index c2d767e..47336b1 100644 --- a/packs/BP/scripts/utils.js +++ b/packs/BP/scripts/utils.js @@ -1,4 +1,4 @@ -import { system, EntityComponentTypes } from '@minecraft/server'; +import { system, EntityComponentTypes, LiquidType } from '@minecraft/server'; import { FormCancelationReason } from '@minecraft/server-ui'; import { specialItemPlacementConversions } from './data'; import { blocks } from './blocks'; @@ -33,6 +33,7 @@ export function placeBlock(player, placedBlock, blockToPlace, itemSlotToConsume if (itemSlotToConsume) consumeItem(itemSlotToConsume); placedBlock.setPermutation(blockToPlace); + handleWaterlogging(placedBlock, blockToPlace); playBlockPlacementSound(player, placedBlock, blockToPlace); }); } @@ -48,6 +49,11 @@ function consumeItem(itemSlot) { } } +function handleWaterlogging(block, structureBlock) { + if (block.isLiquid && structureBlock.canContainLiquid(LiquidType.Water)) + block.setWaterlogged(true); +} + function playBlockPlacementSound(player, block, structureBlock) { const blockId = structureBlock.type.id.replace('minecraft:', ''); const blockData = blocks[blockId]; From e53255acc85ad70c67c011b4a4898e1a6442ccc4 Mon Sep 17 00:00:00 2001 From: ForestOfLight Date: Thu, 10 Jul 2025 15:57:12 -0700 Subject: [PATCH 05/12] pull supply from smallest stack --- packs/BP/scripts/options/fastEasyPlace.js | 17 ++--------------- packs/BP/scripts/utils.js | 8 ++++++-- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/packs/BP/scripts/options/fastEasyPlace.js b/packs/BP/scripts/options/fastEasyPlace.js index a66d8ae..8302fb8 100644 --- a/packs/BP/scripts/options/fastEasyPlace.js +++ b/packs/BP/scripts/options/fastEasyPlace.js @@ -1,8 +1,8 @@ import { BuilderOption } from '../classes/Builder/BuilderOption'; -import { BlockPermutation, EntityComponentTypes, EquipmentSlot, GameMode, InputMode, ItemStack, system, world } from '@minecraft/server'; +import { BlockPermutation, EntityComponentTypes, EquipmentSlot, GameMode, ItemStack, system, world } from '@minecraft/server'; import { bannedBlocks, bannedToValidBlockMap, whitelistedBlockStates, resetToBlockStates, bannedDimensionBlocks, blockIdToItemStackMap } from '../data'; -import { placeBlock } from '../utils'; +import { placeBlock, fetchMatchingItemSlot } from '../utils'; import { Raycaster } from '../classes/Raycaster'; import { Builders } from '../classes/Builder/Builders'; @@ -147,17 +147,4 @@ function getPlaceableItemStack(structureBlock) { const blockId = structureBlock.type.id.replace('minecraft:', ''); const newItemId = blockIdToItemStackMap[blockId]; return newItemId ? new ItemStack(newItemId) : structureBlock.getItemStack(); -} - -function fetchMatchingItemSlot(player, itemToMatchId) { - if (!itemToMatchId) - return void 0; - const inventory = player.getComponent(EntityComponentTypes.Inventory)?.container; - if (!inventory) - return void 0; - for (let index = 0; index < inventory.size; index++) { - const itemSlot = inventory.getSlot(index); - if (itemSlot.hasItem() && itemSlot?.typeId === itemToMatchId) - return itemSlot; - } } \ No newline at end of file diff --git a/packs/BP/scripts/utils.js b/packs/BP/scripts/utils.js index 47336b1..7cabf70 100644 --- a/packs/BP/scripts/utils.js +++ b/packs/BP/scripts/utils.js @@ -21,11 +21,15 @@ export function fetchMatchingItemSlot(entity, itemToMatchId) { const inventory = entity.getComponent(EntityComponentTypes.Inventory)?.container; if (!inventory) return void 0; + let smallestItemSlot; for (let index = 0; index < inventory.size; index++) { const itemSlot = inventory.getSlot(index); - if (itemSlot.hasItem() && itemSlot?.typeId === itemToMatchId) - return itemSlot; + if (itemSlot.hasItem() && itemSlot?.typeId === itemToMatchId) { + if (!smallestItemSlot || itemSlot.amount < smallestItemSlot.amount) + smallestItemSlot = itemSlot; + } } + return smallestItemSlot; } export function placeBlock(player, placedBlock, blockToPlace, itemSlotToConsume = void 0) { From 7cc22335459a0cf7463859694875896003e252c6 Mon Sep 17 00:00:00 2001 From: ForestOfLight Date: Thu, 10 Jul 2025 16:23:29 -0700 Subject: [PATCH 06/12] fix most (or all) missing block placement sounds --- packs/BP/scripts/blocks.js | 3660 ++++++++++++++++++++++++++++++++++++ packs/BP/scripts/utils.js | 9 +- 2 files changed, 3663 insertions(+), 6 deletions(-) diff --git a/packs/BP/scripts/blocks.js b/packs/BP/scripts/blocks.js index c0424ec..eae2420 100644 --- a/packs/BP/scripts/blocks.js +++ b/packs/BP/scripts/blocks.js @@ -6350,4 +6350,3664 @@ export const blocks = { "sound" : "stone", "textures" : "skull" } +} + +export const block_sounds = { + "amethyst_block" : { + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "break.amethyst_block", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.amethyst_block", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "step.amethyst_block" + }, + "place" : { + "pitch" : 0.80, + "sound" : "place.amethyst_block", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "amethyst_cluster" : { + "events" : { + "break" : { + "sound" : "break.amethyst_cluster", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : [ 0.50, 1.20 ], + "sound" : "hit.amethyst_cluster", + "volume" : 1.0 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "step.amethyst_cluster" + }, + "place" : { + "sound" : "place.amethyst_cluster", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "ancient_debris" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.ancient_debris", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.ancient_debris", + "volume" : 0.230 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.ancient_debris" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.ancient_debris", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "anvil" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.stone", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.anvil", + "volume" : 0.350 + }, + "item.use.on" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "use.stone", + "volume" : 1.0 + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "random.anvil_land", + "volume" : 0.50 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "random.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "random.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "azalea" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.azalea", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.azalea", + "volume" : 0.350 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.azalea" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "place.azalea", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "azalea_leaves" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.azalea_leaves", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.azalea_leaves", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.azalea_leaves" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.azalea_leaves", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "bamboo" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.bamboo.break", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "block.bamboo.hit", + "volume" : 0.250 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "block.bamboo.place" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.bamboo.place", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "bamboo_sapling" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.bamboo_sapling.break", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "", + "volume" : 0.250 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "block.bamboo_sapling.place" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.bamboo_sapling.place", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "bamboo_wood" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.bamboo_wood", + "volume" : 1.0 + }, + "button.click_off" : { + "pitch" : 0.50, + "sound" : "click_off.bamboo_wood_button" + }, + "button.click_on" : { + "pitch" : 0.60, + "sound" : "click_on.bamboo_wood_button" + }, + "default" : "", + "door.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.bamboo_wood_door" + }, + "door.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.bamboo_wood_door" + }, + "fence_gate.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.bamboo_wood_fence_gate" + }, + "fence_gate.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.bamboo_wood_fence_gate" + }, + "hit" : { + "pitch" : 0.50, + "sound" : "hit.bamboo_wood", + "volume" : 0.230 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "step.bamboo_wood" + }, + "place" : { + "pitch" : [ 0.80, 0.80 ], + "sound" : "place.bamboo_wood", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "random.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "random.click" + }, + "pressure_plate.click_off" : { + "sound" : "click_off.bamboo_wood_pressure_plate" + }, + "pressure_plate.click_on" : { + "sound" : "click_on.bamboo_wood_pressure_plate" + }, + "trapdoor.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.bamboo_wood_trapdoor" + }, + "trapdoor.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.bamboo_wood_trapdoor" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "bamboo_wood_hanging_sign" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.bamboo_wood_hanging_sign", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "step.bamboo_wood_hanging_sign", + "volume" : 0.70 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "step.bamboo_wood_hanging_sign" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.bamboo_wood_hanging_sign", + "volume" : 1.0 + } + } + }, + "basalt" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.basalt", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.basalt", + "volume" : 0.230 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.basalt" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.basalt", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "big_dripleaf" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.big_dripleaf", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.big_dripleaf", + "volume" : 0.350 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.big_dripleaf" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "place.big_dripleaf", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "bone_block" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.bone_block", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.bone_block", + "volume" : 0.380 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.bone_block" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.bone_block", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "cactus_flower" : { + "base" : "sweet_berry_bush", + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "block.cactus_flower.break" + }, + "place" : { + "pitch" : 0.80, + "sound" : "block.cactus_flower.place" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "calcite" : { + "events" : { + "break" : { + "sound" : "break.calcite", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "sound" : "hit.calcite", + "volume" : 1.0 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "step.calcite" + }, + "place" : { + "sound" : "place.calcite", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "candle" : { + "events" : { + "break" : { + "pitch" : 1.0, + "sound" : "dig.candle", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 1.0, + "sound" : "hit.candle", + "volume" : 1.0 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.candle" + }, + "place" : { + "pitch" : 1.0, + "sound" : "dig.candle", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "cave_vines" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.cave_vines", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.cave_vines", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.cave_vines" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.cave_vines", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "chain" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.chain", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.chain", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.chain" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.chain", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "cherry_leaves" : { + "events" : { + "break" : { + "sound" : "break.cherry_leaves", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "sound" : "hit.cherry_leaves", + "volume" : 0.80 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "step.cherry_leaves" + }, + "place" : { + "sound" : "place.cherry_leaves", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "cherry_wood" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.cherry_wood", + "volume" : 1.0 + }, + "button.click_off" : { + "pitch" : 0.50, + "sound" : "click_off.cherry_wood_button" + }, + "button.click_on" : { + "pitch" : 0.60, + "sound" : "click_on.cherry_wood_button" + }, + "default" : "", + "door.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.cherry_wood_door" + }, + "door.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.cherry_wood_door" + }, + "fence_gate.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.cherry_wood_fence_gate" + }, + "fence_gate.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.cherry_wood_fence_gate" + }, + "hit" : { + "pitch" : 0.50, + "sound" : "hit.cherry_wood", + "volume" : 0.230 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "step.cherry_wood" + }, + "place" : { + "pitch" : [ 0.80, 0.80 ], + "sound" : "place.cherry_wood", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "random.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "random.click" + }, + "pressure_plate.click_off" : { + "sound" : "click_off.cherry_wood_pressure_plate" + }, + "pressure_plate.click_on" : { + "sound" : "click_on.cherry_wood_pressure_plate" + }, + "trapdoor.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.cherry_wood_trapdoor" + }, + "trapdoor.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.cherry_wood_trapdoor" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "cherry_wood_hanging_sign" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.cherry_wood_hanging_sign", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "step.cherry_wood_hanging_sign", + "volume" : 0.70 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "step.cherry_wood_hanging_sign" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.cherry_wood_hanging_sign", + "volume" : 1.0 + } + } + }, + "chiseled_bookshelf" : { + "events" : { + "break" : { + "pitch" : 1.0, + "sound" : "break.chiseled_bookshelf", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 1.0, + "sound" : "hit.chiseled_bookshelf", + "volume" : 1.0 + }, + "insert" : { + "pitch" : 1.0, + "sound" : "insert.chiseled_bookshelf", + "volume" : 1.0 + }, + "insert_enchanted" : { + "pitch" : 1.0, + "sound" : "insert_enchanted.chiseled_bookshelf", + "volume" : 1.0 + }, + "pickup" : { + "pitch" : 1.0, + "sound" : "pickup.chiseled_bookshelf", + "volume" : 1.0 + }, + "pickup_enchanted" : { + "pitch" : 1.0, + "sound" : "pickup_enchanted.chiseled_bookshelf", + "volume" : 1.0 + }, + "place" : { + "pitch" : 1.0, + "sound" : "place.chiseled_bookshelf", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "cloth" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.cloth", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.cloth", + "volume" : 0.350 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.cloth" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.cloth", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "comparator" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.wood", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.wood", + "volume" : 0.230 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.wood" + }, + "place" : { + "pitch" : [ 0.80, 0.80 ], + "sound" : "dig.wood", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.550, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.50, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "copper" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.copper", + "volume" : 1.0 + }, + "default" : "", + "door.close" : { + "pitch" : 1.0, + "sound" : "close_door.copper" + }, + "door.open" : { + "pitch" : [ 1.0, 1.10 ], + "sound" : "open_door.copper" + }, + "hit" : { + "pitch" : 0.50, + "sound" : "hit.copper", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.copper" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.copper", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "random.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "random.click" + }, + "trapdoor.close" : { + "pitch" : 1.0, + "sound" : "open_trapdoor.copper" + }, + "trapdoor.open" : { + "pitch" : 1.0, + "sound" : "open_trapdoor.copper" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "copper_bulb" : { + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "break.copper_bulb" + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "step.copper_bulb" + }, + "item.use.on" : { + "sound" : "step.copper_bulb" + }, + "place" : { + "pitch" : 0.80, + "sound" : "place.copper_bulb" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "copper_grate" : { + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "break.copper_grate", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "step.copper_grate", + "volume" : 1.0 + }, + "item.use.on" : { + "sound" : "step.copper_grate", + "volume" : 1.0 + }, + "place" : { + "pitch" : 0.80, + "sound" : "break.copper_grate", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "coral" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.coral", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.coral", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.coral" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.coral", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "creaking_heart" : { + "events" : { + "ambient" : "block.creaking_heart.ambient", + "break" : { + "pitch" : 0.80, + "sound" : "block.creaking_heart.break", + "volume" : 0.50 + }, + "creaking_heart_spawn" : "block.creaking_heart.spawn_mob", + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "block.creaking_heart.hit", + "volume" : 0.250 + }, + "place" : { + "pitch" : 0.80, + "sound" : "block.creaking_heart.place", + "volume" : 0.70 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "deadbush" : { + "base" : "grass", + "events" : { + "ambient" : "block.deadbush.ambient" + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "decorated_pot" : { + "events" : { + "break_pot" : { + "pitch" : 1.0, + "sound" : "break.decorated_pot", + "volume" : 1.0 + }, + "default" : "", + "fall" : { + "pitch" : 1.0, + "sound" : "step.decorated_pot", + "volume" : 1.0 + }, + "hit" : { + "pitch" : 1.0, + "sound" : "step.decorated_pot", + "volume" : 1.0 + }, + "place" : { + "pitch" : 1.0, + "sound" : "break.decorated_pot", + "volume" : 1.0 + }, + "shatter_pot" : { + "pitch" : 1.0, + "sound" : "shatter.decorated_pot", + "volume" : 1.0 + }, + "step" : { + "pitch" : 1.0, + "sound" : "step.decorated_pot", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "deepslate" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.deepslate", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.deepslate", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.deepslate" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "place.deepslate", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "deepslate_bricks" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.deepslate_bricks", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.deepslate_bricks", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.deepslate_bricks" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "place.deepslate_bricks", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "dirt_with_roots" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.hanging_roots", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.hanging_roots", + "volume" : 0.350 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.hanging_roots" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "place.hanging_roots", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "dried_ghast" : { + "events" : { + "ambient" : "block.dried_ghast.ambient", + "ambient.in.water" : "block.dried_ghast.ambient_water", + "break" : { + "pitch" : 0.960, + "sound" : "block.dried_ghast.break", + "volume" : 0.80 + }, + "default" : "", + "hit" : { + "pitch" : 0.60, + "sound" : "block.dried_ghast.hit", + "volume" : 0.20 + }, + "place" : { + "pitch" : 0.960, + "sound" : "block.dried_ghast.place", + "volume" : 0.80 + }, + "place_in_water" : { + "pitch" : 0.960, + "sound" : "block.dried_ghast.place_in_water", + "volume" : 0.80 + }, + "state_change" : { + "pitch" : 1.0, + "sound" : "block.dried_ghast.state_change", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "dripstone_block" : { + "events" : { + "break" : { + "sound" : "break.dripstone_block" + }, + "default" : "", + "hit" : { + "sound" : "hit.dripstone_block" + }, + "item.use.on" : { + "sound" : "use.dripstone_block" + }, + "place" : { + "sound" : "place.dripstone_block" + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "eyeblossom" : { + "base" : "grass", + "events" : { + "ambient" : "block.eyeblossom.ambient", + "close" : "block.eyeblossom.close", + "close_long" : "block.eyeblossom.close_long", + "default" : "", + "open" : "block.eyeblossom.open", + "open_long" : "block.eyeblossom.open_long" + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "firefly_bush" : { + "base" : "sweet_berry_bush", + "events" : { + "ambient" : "block.firefly_bush.ambient" + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "frog_spawn" : { + "events" : { + "break" : { + "pitch" : 1.20, + "sound" : "break.frog_spawn", + "volume" : 0.10 + }, + "default" : "", + "hit" : { + "pitch" : 1.30, + "sound" : "step.frog_spawn", + "volume" : 0.30 + }, + "place" : { + "pitch" : 1.50, + "sound" : "break.frog_spawn", + "volume" : 0.20 + } + } + }, + "froglight" : { + "events" : { + "break" : { + "sound" : "break.froglight", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 1.30, + "sound" : "step.froglight", + "volume" : 0.830 + }, + "item.use.on" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "place.froglight", + "volume" : 1.0 + }, + "place" : { + "sound" : "break.froglight", + "volume" : 1.0 + } + }, + "pitch" : 1.0 + }, + "fungus" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.fungus", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "dig.fungus", + "volume" : 0.250 + }, + "item.use.on" : { + "pitch" : 1.0, + "sound" : "dig.fungus" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.fungus", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.60, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 0.90, + "volume" : 0.850 + }, + "glass" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "random.glass", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.60, + "sound" : "hit.stone", + "volume" : 0.40 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.stone" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.stone", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "glow_lichen" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.grass", + "volume" : 0.70 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.grass", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.grass" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.grass", + "volume" : 0.80 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "grass" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.grass", + "volume" : 0.70 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.grass", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.grass" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.grass", + "volume" : 0.80 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "gravel" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.gravel", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.gravel", + "volume" : 0.170 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.gravel" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.gravel", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "hanging_roots" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.hanging_roots", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.hanging_roots", + "volume" : 0.350 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.hanging_roots" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "place.hanging_roots", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "hanging_sign" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.hanging_sign", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "step.hanging_sign", + "volume" : 0.70 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "step.hanging_sign" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.hanging_sign", + "volume" : 1.0 + } + } + }, + "heavy_core" : { + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "break.heavy_core", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "step.heavy_core", + "volume" : 1.0 + }, + "item.use.on" : { + "sound" : "step.heavy_core", + "volume" : 1.0 + }, + "place" : { + "pitch" : 0.80, + "sound" : "break.heavy_core", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "honey_block" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.honey_block", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.honey_block", + "volume" : 0.230 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.honey_block" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.honey_block", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "iron" : { + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "break.iron", + "volume" : 1.0 + }, + "button.click_off" : { + "pitch" : 0.50, + "sound" : "random.click" + }, + "button.click_on" : { + "pitch" : 0.60, + "sound" : "random.click" + }, + "default" : "", + "door.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.iron_door" + }, + "door.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.iron_door" + }, + "hit" : { + "pitch" : 0.50, + "sound" : "hit.iron", + "volume" : 0.30 + }, + "item.use.on" : { + "sound" : "step.iron", + "volume" : 1.0 + }, + "place" : { + "pitch" : 0.80, + "sound" : "place.iron", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "random.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "random.click" + }, + "trapdoor.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.iron_trapdoor" + }, + "trapdoor.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.iron_trapdoor" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "itemframe" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.itemframe.break", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.wood", + "volume" : 0.220 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "block.itemframe.place" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.itemframe.place", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "ladder" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.wood", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.ladder", + "volume" : 0.250 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.ladder" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.wood", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "lantern" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.lantern.break", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "block.lantern.hit", + "volume" : 0.250 + }, + "item.use.on" : { + "pitch" : 1.10, + "sound" : "block.lantern.place" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.lantern.place", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "large_amethyst_bud" : { + "events" : { + "break" : { + "sound" : "break.large_amethyst_bud" + }, + "default" : "", + "hit" : { + "pitch" : [ 0.50, 1.20 ], + "sound" : "hit.amethyst_cluster", + "volume" : 1.0 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "step.amethyst_cluster" + }, + "place" : { + "sound" : "place.large_amethyst_bud", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "leaf_litter" : { + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "block.leaf_litter.break" + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "block.leaf_litter.step", + "volume" : 0.250 + }, + "place" : { + "pitch" : 0.80, + "sound" : "block.leaf_litter.place" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "lever" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.wood", + "volume" : 1.0 + }, + "button.click_off" : { + "pitch" : 0.50, + "sound" : "random.lever_click" + }, + "button.click_on" : { + "pitch" : 0.60, + "sound" : "random.lever_click" + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.wood", + "volume" : 0.230 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.wood" + }, + "place" : { + "pitch" : [ 0.80, 0.80 ], + "sound" : "dig.wood", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "random.lever_click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "random.lever_click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "lodestone" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.stone", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.stone", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "dig.stone" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.lodestone", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "mangrove_roots" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.mangrove_roots.break", + "volume" : 0.40 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "block.mangrove_roots.hit", + "volume" : 0.10 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "block.mangrove_roots.step" + }, + "place" : { + "pitch" : [ 1.0, 1.20 ], + "sound" : "block.mangrove_roots.place", + "volume" : 0.250 + } + } + }, + "medium_amethyst_bud" : { + "events" : { + "break" : { + "sound" : "break.medium_amethyst_bud" + }, + "default" : "", + "hit" : { + "pitch" : [ 0.50, 1.20 ], + "sound" : "hit.amethyst_cluster", + "volume" : 1.0 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "step.amethyst_cluster" + }, + "place" : { + "sound" : "place.medium_amethyst_bud", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "metal" : { + "events" : { + "break" : { + "pitch" : [ 1.10, 1.20 ], + "sound" : "dig.stone", + "volume" : 1.0 + }, + "button.click_off" : { + "pitch" : 0.50, + "sound" : "random.click" + }, + "button.click_on" : { + "pitch" : 0.60, + "sound" : "random.click" + }, + "default" : "", + "door.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.iron_door" + }, + "door.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.iron_door" + }, + "hit" : { + "pitch" : 0.750, + "sound" : "hit.stone", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 1.20, + "sound" : "use.anvil" + }, + "place" : { + "pitch" : [ 1.20, 1.250 ], + "sound" : "dig.stone", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "random.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "random.click" + }, + "trapdoor.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.iron_trapdoor" + }, + "trapdoor.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.iron_trapdoor" + } + }, + "pitch" : 1.50, + "volume" : 1.0 + }, + "mob_spawner" : { + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "block.mob_spawner.break" + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "block.mob_spawner.step", + "volume" : 0.40 + }, + "item.use.on" : { + "sound" : "block.mob_spawner.step" + }, + "place" : { + "pitch" : 0.80, + "sound" : "block.mob_spawner.break" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "moss_block" : { + "events" : { + "break" : { + "sound" : "dig.moss", + "volume" : 0.930 + }, + "default" : "", + "hit" : { + "sound" : "hit.moss" + }, + "item.use.on" : { + "sound" : "use.moss" + }, + "place" : { + "sound" : "place.moss", + "volume" : 0.930 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "moss_carpet" : { + "events" : { + "break" : { + "sound" : "dig.moss", + "volume" : 0.930 + }, + "default" : "", + "hit" : { + "sound" : "hit.moss" + }, + "item.use.on" : { + "sound" : "use.moss" + }, + "place" : { + "sound" : "place.moss", + "volume" : 0.930 + } + }, + "pitch" : 1.10, + "volume" : 0.90 + }, + "mud" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.mud.break", + "volume" : 0.40 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "block.mud.hit", + "volume" : 0.10 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "block.mud.step" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.mud.place", + "volume" : 0.250 + } + } + }, + "mud_bricks" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.mud_bricks.break", + "volume" : 0.50 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "block.mud_bricks.hit", + "volume" : 0.10 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "block.mud_bricks.step", + "volume" : 1.0 + }, + "place" : { + "pitch" : [ 0.60, 0.80 ], + "sound" : "block.mud_bricks.place", + "volume" : 0.30 + } + } + }, + "muddy_mangrove_roots" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.muddy_mangrove_roots.break", + "volume" : 0.40 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "block.muddy_mangrove_roots.hit", + "volume" : 0.050 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "block.muddy_mangrove_roots.step" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.muddy_mangrove_roots.place", + "volume" : 0.250 + } + } + }, + "nether_brick" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.nether_brick", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.nether_brick", + "volume" : 0.250 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.nether_brick" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.nether_brick", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "nether_gold_ore" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.nether_gold_ore", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.nether_gold_ore", + "volume" : 0.230 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.nether_gold_ore" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.nether_gold_ore", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "nether_sprouts" : { + "events" : { + "break" : { + "pitch" : [ 1.10, 1.20 ], + "sound" : "dig.nether_sprouts", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.750, + "sound" : "hit.nether_sprouts", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 1.20, + "sound" : "use.nether_sprouts" + }, + "place" : { + "pitch" : [ 1.20, 1.250 ], + "sound" : "dig.nether_sprouts", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.50, + "volume" : 1.0 + }, + "nether_wart" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.nether_wart", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.nether_wart", + "volume" : 0.320 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.nether_wart" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.nether_wart", + "volume" : 0.70 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "nether_wood" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.nether_wood", + "volume" : 1.0 + }, + "button.click_off" : { + "pitch" : 0.50, + "sound" : "click_off.nether_wood_button" + }, + "button.click_on" : { + "pitch" : 0.60, + "sound" : "click_on.nether_wood_button" + }, + "default" : "", + "door.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.nether_wood_door" + }, + "door.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.nether_wood_door" + }, + "fence_gate.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.nether_wood_fence_gate" + }, + "fence_gate.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.nether_wood_fence_gate" + }, + "hit" : { + "pitch" : 0.50, + "sound" : "hit.nether_wood", + "volume" : 0.230 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "step.nether_wood" + }, + "place" : { + "pitch" : [ 0.80, 0.80 ], + "sound" : "place.nether_wood", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "random.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "random.click" + }, + "pressure_plate.click_off" : { + "sound" : "click_off.nether_wood_pressure_plate" + }, + "pressure_plate.click_on" : { + "sound" : "click_on.nether_wood_pressure_plate" + }, + "trapdoor.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.nether_wood_trapdoor" + }, + "trapdoor.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.nether_wood_trapdoor" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "nether_wood_hanging_sign" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.nether_wood_hanging_sign", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "step.nether_wood_hanging_sign", + "volume" : 0.70 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "step.nether_wood_hanging_sign" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.nether_wood_hanging_sign", + "volume" : 1.0 + } + } + }, + "netherite" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.netherite", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.netherite", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.netherite" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.netherite", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "netherrack" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.netherrack", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.netherrack", + "volume" : 0.220 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.netherrack" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.netherrack", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "normal" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.stone", + "volume" : 1.0 + }, + "brush" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "brush.generic", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.stone", + "volume" : 0.270 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.stone" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.stone", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "nylium" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.nylium", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.nylium", + "volume" : 0.230 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.nylium" + }, + "place" : { + "pitch" : [ 0.80, 0.80 ], + "sound" : "dig.nylium", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "packed_mud" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.packed_mud.break", + "volume" : 0.40 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "block.packed_mud.hit", + "volume" : 0.10 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "block.packed_mud.step" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.packed_mud.place", + "volume" : 0.250 + } + } + }, + "pale_hanging_moss" : { + "base" : "moss_block", + "events" : { + "ambient" : "block.pale_hanging_moss.ambient" + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "pink_petals" : { + "events" : { + "break" : { + "sound" : "break.pink_petals", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "sound" : "hit.pink_petals", + "volume" : 0.80 + }, + "item.use.on" : { + "sound" : "step.pink_petals" + }, + "place" : { + "sound" : "place.pink_petals", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "pointed_dripstone" : { + "events" : { + "break" : { + "sound" : "break.pointed_dripstone" + }, + "default" : "", + "hit" : { + "sound" : "hit.pointed_dripstone" + }, + "item.use.on" : { + "sound" : "use.pointed_dripstone" + }, + "place" : { + "sound" : "place.pointed_dripstone" + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "polished_tuff" : { + "events" : { + "break" : { + "pitch" : 0.960, + "sound" : "break.tuff", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.60, + "sound" : "hit.tuff", + "volume" : 0.50 + }, + "item.use.on" : { + "pitch" : 1.20, + "sound" : "step.tuff" + }, + "place" : { + "pitch" : 0.960, + "sound" : "place.tuff", + "volume" : 1.0 + } + }, + "pitch" : 1.20, + "volume" : 1.0 + }, + "powder_snow" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.powder_snow", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.powder_snow", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.powder_snow" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.powder_snow", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "resin" : { + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "block.resin.break", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "block.resin.hit", + "volume" : 0.250 + }, + "place" : { + "pitch" : 0.80, + "sound" : "block.resin.place", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "resin_brick" : { + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "block.resin_brick.break", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "block.resin_brick.hit", + "volume" : 0.250 + }, + "place" : { + "pitch" : 0.80, + "sound" : "block.resin_brick.place", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "roots" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.roots", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.roots", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.roots" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.roots", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "sand" : { + "events" : { + "ambient" : "block.sand.ambient", + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.sand", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.sand", + "volume" : 0.230 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.sand" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.sand", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "scaffolding" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.scaffolding.break", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "block.scaffolding.hit", + "volume" : 0.250 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "block.scaffolding.place" + }, + "place" : { + "pitch" : [ 0.80, 0.90 ], + "sound" : "block.scaffolding.place", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "sculk" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.sculk", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.sculk", + "volume" : 0.350 + }, + "item.use.on" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "place.sculk", + "volume" : 1.0 + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.sculk", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "sculk_catalyst" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.sculk_catalyst", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.sculk_catalyst", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "place.sculk_catalyst", + "volume" : 1.0 + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.sculk_catalyst", + "volume" : 1.0 + } + } + }, + "sculk_sensor" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.sculk_sensor", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.sculk_sensor", + "volume" : 0.350 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.sculk_sensor" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "place.sculk_sensor", + "volume" : 0.80 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "random.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "random.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "sculk_shrieker" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.sculk_shrieker", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "step.sculk_shrieker", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "place.sculk_shrieker", + "volume" : 1.0 + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.sculk_shrieker", + "volume" : 1.0 + } + } + }, + "sculk_vein" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.sculk_vein", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "step.sculk_vein", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "place.sculk_vein", + "volume" : 1.0 + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.sculk_vein", + "volume" : 1.0 + } + } + }, + "shroomlight" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.shroomlight", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.shroomlight", + "volume" : 0.350 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.shroomlight" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.shroomlight", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "slime" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "mob.slime.big", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.slime", + "volume" : 0.250 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.slime" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "mob.slime.big", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "small_amethyst_bud" : { + "events" : { + "break" : { + "sound" : "break.small_amethyst_bud" + }, + "default" : "", + "hit" : { + "pitch" : [ 0.50, 1.20 ], + "sound" : "hit.amethyst_cluster", + "volume" : 1.0 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "step.amethyst_cluster" + }, + "place" : { + "sound" : "place.small_amethyst_bud", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "snow" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.snow", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.snow", + "volume" : 0.350 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.snow" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.snow", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "soul_sand" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.soul_sand", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.soul_sand", + "volume" : 0.210 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.soul_sand" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.soul_sand", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "soul_soil" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.soul_soil", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.soul_soil", + "volume" : 0.170 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.soul_soil" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.soul_soil", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "sponge" : { + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "break.sponge", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.sponge", + "volume" : 0.30 + }, + "item.use.on" : { + "sound" : "step.sponge", + "volume" : 1.0 + }, + "place" : { + "pitch" : 0.80, + "sound" : "place.sponge", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "spore_blossom" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.spore_blossom", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.spore_blossom", + "volume" : 0.350 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.spore_blossom" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "place.spore_blossom", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "stem" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.stem", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.stem", + "volume" : 0.340 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.stem" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.stem", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "stone" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.stone", + "volume" : 1.0 + }, + "button.click_off" : { + "pitch" : 0.50, + "sound" : "random.stone_click" + }, + "button.click_on" : { + "pitch" : 0.60, + "sound" : "random.stone_click" + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.stone", + "volume" : 0.370 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.stone" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.stone", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "random.stone_click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "random.stone_click" + }, + "pressure_plate.click_off" : { + "sound" : "click_off.stone_pressure_plate" + }, + "pressure_plate.click_on" : { + "sound" : "click_on.stone_pressure_plate" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "suspicious_gravel" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.suspicious_gravel", + "volume" : 1.0 + }, + "brush" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "brush.suspicious_gravel", + "volume" : 1.0 + }, + "brush_completed" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "brush_completed.suspicious_gravel", + "volume" : 1.0 + }, + "fall" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "fall.suspicious_gravel", + "volume" : 1.0 + }, + "hit" : { + "pitch" : 0.50, + "sound" : "hit.suspicious_gravel", + "volume" : 0.230 + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "place.suspicious_gravel", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "suspicious_sand" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "break.suspicious_sand", + "volume" : 1.0 + }, + "brush" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "brush.suspicious_sand", + "volume" : 1.0 + }, + "brush_completed" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "brush_completed.suspicious_sand", + "volume" : 1.0 + }, + "fall" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "fall.suspicious_sand", + "volume" : 1.0 + }, + "hit" : { + "pitch" : 0.50, + "sound" : "hit.suspicious_sand", + "volume" : 0.230 + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "place.suspicious_sand", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "sweet_berry_bush" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.sweet_berry_bush.break", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.grass", + "volume" : 0.250 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "block.sweet_berry_bush.place" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.sweet_berry_bush.place", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "terracotta" : { + "base" : "stone", + "events" : { + "ambient" : "block.sand.ambient" + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "trial_spawner" : { + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "trial_spawner.break", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "trial_spawner.hit", + "volume" : 0.380 + }, + "place" : { + "pitch" : 0.80, + "sound" : "trial_spawner.place", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "tuff" : { + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "place.tuff", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "step.tuff", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "step.tuff", + "volume" : 0.220 + }, + "place" : { + "pitch" : 0.80, + "sound" : "place.tuff", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "tuff_bricks" : { + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "place.tuff_bricks", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "step.tuff_bricks", + "volume" : 0.30 + }, + "item.use.on" : { + "sound" : "step.tuff_bricks", + "volume" : 0.220 + }, + "place" : { + "pitch" : 0.80, + "sound" : "place.tuff_bricks", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "turtle_egg" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.stone", + "volume" : 0.250 + }, + "item.use.on" : { + "pitch" : 1.0, + "sound" : "use.stone" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.stone", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.60, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 0.90, + "volume" : 0.850 + }, + "vault" : { + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "vault.break", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "vault.hit", + "volume" : 1.0 + }, + "place" : { + "pitch" : 0.80, + "sound" : "vault.place", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "vines" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.vines", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.vines", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.vines" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.vines", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "block.click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "block.click" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "web" : { + "events" : { + "break" : { + "sound" : "break.web" + }, + "default" : "", + "hit" : { + "pitch" : 0.70, + "sound" : "step.web", + "volume" : 0.90 + }, + "item.use.on" : { + "sound" : "step.web" + }, + "place" : { + "sound" : "break.web" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "weeping_vines" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.weeping_vines.break", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "block.weeping_vines.hit", + "volume" : 0.30 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "block.weeping_vines.use" + }, + "place" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "block.weeping_vines.place", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "wet_sponge" : { + "events" : { + "break" : { + "pitch" : 0.80, + "sound" : "break.wet_sponge", + "volume" : 1.0 + }, + "default" : "", + "hit" : { + "pitch" : 0.50, + "sound" : "hit.wet_sponge", + "volume" : 0.30 + }, + "item.use.on" : { + "sound" : "step.wet_sponge", + "volume" : 1.0 + }, + "place" : { + "pitch" : 0.80, + "sound" : "place.wet_sponge", + "volume" : 1.0 + } + }, + "pitch" : 1.0, + "volume" : 1.0 + }, + "wood" : { + "events" : { + "break" : { + "pitch" : [ 0.80, 1.0 ], + "sound" : "dig.wood", + "volume" : 1.0 + }, + "button.click_off" : { + "pitch" : 0.50, + "sound" : "random.wood_click" + }, + "button.click_on" : { + "pitch" : 0.60, + "sound" : "random.wood_click" + }, + "default" : "", + "door.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.wooden_door" + }, + "door.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.wooden_door" + }, + "fence_gate.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.fence_gate" + }, + "fence_gate.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.fence_gate" + }, + "hit" : { + "pitch" : 0.50, + "sound" : "hit.wood", + "volume" : 0.230 + }, + "item.use.on" : { + "pitch" : 0.80, + "sound" : "use.wood" + }, + "place" : { + "pitch" : [ 0.80, 0.80 ], + "sound" : "dig.wood", + "volume" : 1.0 + }, + "power.off" : { + "pitch" : 0.50, + "sound" : "random.wood_click" + }, + "power.on" : { + "pitch" : 0.60, + "sound" : "random.wood_click" + }, + "pressure_plate.click_off" : { + "sound" : "click_off.wooden_pressure_plate" + }, + "pressure_plate.click_on" : { + "sound" : "click_on.wooden_pressure_plate" + }, + "trapdoor.close" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "close.wooden_trapdoor" + }, + "trapdoor.open" : { + "pitch" : [ 0.90, 1.0 ], + "sound" : "open.wooden_trapdoor" + } + }, + "pitch" : 1.0, + "volume" : 1.0 + } } \ No newline at end of file diff --git a/packs/BP/scripts/utils.js b/packs/BP/scripts/utils.js index 7cabf70..aa8a636 100644 --- a/packs/BP/scripts/utils.js +++ b/packs/BP/scripts/utils.js @@ -1,7 +1,7 @@ import { system, EntityComponentTypes, LiquidType } from '@minecraft/server'; import { FormCancelationReason } from '@minecraft/server-ui'; import { specialItemPlacementConversions } from './data'; -import { blocks } from './blocks'; +import { blocks, block_sounds } from './blocks'; export async function forceShow(player, form, timeout = Infinity) { const startTick = system.currentTick; @@ -62,10 +62,7 @@ function playBlockPlacementSound(player, block, structureBlock) { const blockId = structureBlock.type.id.replace('minecraft:', ''); const blockData = blocks[blockId]; let blockSound = blockData['sound'] || 'stone'; - if (['glass', 'terracotta'].includes(blockSound)) - blockSound = 'stone'; - let blockSoundId = 'dig.' + blockSound; - if (['iron', 'calcite'].includes(blockSound)) - blockSoundId = 'place.' + blockSound; + let blockSoundId = block_sounds[blockSound].events.place?.sound + || block_sounds[block_sounds[blockSound].base].events.place?.sound; player.dimension.playSound(blockSoundId, block.location); } \ No newline at end of file From 60e118dbdcb24255bf5b384ede3f7131d3917bb8 Mon Sep 17 00:00:00 2001 From: ForestOfLight Date: Thu, 10 Jul 2025 17:30:41 -0700 Subject: [PATCH 07/12] add player collision check to fastEasyPlace --- packs/BP/scripts/lib/Vector.js | 5 +++++ packs/BP/scripts/options/fastEasyPlace.js | 18 +++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packs/BP/scripts/lib/Vector.js b/packs/BP/scripts/lib/Vector.js index b0f4391..afa52c2 100644 --- a/packs/BP/scripts/lib/Vector.js +++ b/packs/BP/scripts/lib/Vector.js @@ -31,6 +31,11 @@ Vector.rejection = function rejection(a, b) { return Vector.subtract(a, Vector.p Vector.reflect = function reflect(v, n) { return Vector.subtract(v, Vector.multiply(n, 2 * Vector.dot(v, n))); } Vector.lerp = function lerp(a, b, t) { return Vector.multiply(a, 1 - t).add(Vector.multiply(b, t)); } Vector.distance = function distance(a, b) { return Vector.magnitude(Vector.subtract(a, b)); } +Vector.intersect = function intersect(maxA, minA, maxB, minB) { + return (maxA.x >= minB.x && minA.x <= maxB.x) && + (maxA.y >= minB.y && minA.y <= maxB.y) && + (maxA.z >= minB.z && minA.z <= maxB.z); +} Vector.from = function from(object) { if (Vector.isVec3(object)) return object; if (Array.isArray(object)) return new Vector(object[0], object[1], object[2]); diff --git a/packs/BP/scripts/options/fastEasyPlace.js b/packs/BP/scripts/options/fastEasyPlace.js index 8302fb8..691cc58 100644 --- a/packs/BP/scripts/options/fastEasyPlace.js +++ b/packs/BP/scripts/options/fastEasyPlace.js @@ -5,8 +5,10 @@ import { bannedBlocks, bannedToValidBlockMap, whitelistedBlockStates, resetToBlo import { placeBlock, fetchMatchingItemSlot } from '../utils'; import { Raycaster } from '../classes/Raycaster'; import { Builders } from '../classes/Builder/Builders'; +import { Vector } from '../lib/Vector'; const PROCESS_INTERVAL = 2; // Fast Easy Place will attempt to place twice when at an interval of 1. +const PLAYER_COLLISION_BOX = { width: 0.6, height: 1.8 }; const builderOption = new BuilderOption({ identifier: 'fastEasyPlace', @@ -86,7 +88,7 @@ function isHoldingActionItem(player) { } function tryPlaceBlock(player, worldBlock, structureBlock) { - if (isBannedBlock(player, structureBlock) || !locationIsPlaceable(worldBlock)) return; + if (isBannedBlock(player, structureBlock) || !locationIsPlaceable(player, worldBlock)) return; structureBlock = tryConvertBannedToValidBlock(structureBlock); if (player.getGameMode() === GameMode.Creative) { placeBlock(player, worldBlock, structureBlock); @@ -96,8 +98,8 @@ function tryPlaceBlock(player, worldBlock, structureBlock) { } } -function locationIsPlaceable(worldBlock) { - return worldBlock.isAir || worldBlock.isLiquid; +function locationIsPlaceable(player, worldBlock) { + return (worldBlock.isAir || worldBlock.isLiquid) && !isBlockInsidePlayer(player, worldBlock); } function isBannedBlock(player, structureBlock) { @@ -147,4 +149,14 @@ function getPlaceableItemStack(structureBlock) { const blockId = structureBlock.type.id.replace('minecraft:', ''); const newItemId = blockIdToItemStackMap[blockId]; return newItemId ? new ItemStack(newItemId) : structureBlock.getItemStack(); +} + +function isBlockInsidePlayer(player, worldBlock) { + const playerLocation = Vector.from(player.location); + const blockLocation = Vector.from(worldBlock.location); + const playerMin = playerLocation.subtract({ x: PLAYER_COLLISION_BOX.width / 2, y: -0.1, z: PLAYER_COLLISION_BOX.width / 2 }); + const playerMax = playerLocation.add({ x: PLAYER_COLLISION_BOX.width / 2, y: PLAYER_COLLISION_BOX.height, z: PLAYER_COLLISION_BOX.width / 2 }); + const blockMin = blockLocation; + const blockMax = blockLocation.add({ x: 1, y: 1, z: 1 }); + return Vector.intersect(playerMax, playerMin, blockMax, blockMin); } \ No newline at end of file From e672cae55d2e22a3c72661f7e58ab2e47441cdcd Mon Sep 17 00:00:00 2001 From: ForestOfLight Date: Thu, 10 Jul 2025 18:20:24 -0700 Subject: [PATCH 08/12] FastEasyPlace now processes every tick --- packs/BP/scripts/options/fastEasyPlace.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packs/BP/scripts/options/fastEasyPlace.js b/packs/BP/scripts/options/fastEasyPlace.js index 691cc58..6dc3902 100644 --- a/packs/BP/scripts/options/fastEasyPlace.js +++ b/packs/BP/scripts/options/fastEasyPlace.js @@ -7,7 +7,7 @@ import { Raycaster } from '../classes/Raycaster'; import { Builders } from '../classes/Builder/Builders'; import { Vector } from '../lib/Vector'; -const PROCESS_INTERVAL = 2; // Fast Easy Place will attempt to place twice when at an interval of 1. +const locationsPlacedLastTick = new Set(); const PLAYER_COLLISION_BOX = { width: 0.6, height: 1.8 }; const builderOption = new BuilderOption({ @@ -48,7 +48,7 @@ function removeActionItem(playerId) { } } -system.runInterval(onTick, PROCESS_INTERVAL); +system.runInterval(onTick); world.beforeEvents.playerInteractWithBlock.subscribe(onPlayerInteractWithBlock); function onTick() { @@ -70,6 +70,12 @@ function processEasyPlace(player) { if (!structureBlock) return; const worldBlock = player.dimension.getBlock(structureBlock.location); + if (locationsPlacedLastTick.has(JSON.stringify(worldBlock.location))) + return; + locationsPlacedLastTick.add(JSON.stringify(worldBlock.location)); + system.runTimeout(() => { + locationsPlacedLastTick.delete(JSON.stringify(worldBlock.location)); + }, 2); tryPlaceBlock(player, worldBlock, structureBlock.permutation); } From 6315745f55ef7b61f3261d70d86c37bed73e2275 Mon Sep 17 00:00:00 2001 From: ForestOfLight Date: Thu, 10 Jul 2025 18:28:26 -0700 Subject: [PATCH 09/12] update roadmap --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b3b8335..769134b 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ Need help, want to discuss technical Minecraft, or follow future updates? [**Joi - [x] Correct block placement checking - [x] Automatic material gathering from inventories - [x] Material list -- [ ] Structure Merging into SuperStructures +- [ ] Block texture display ## Issues & Suggestions From d3aa415d8a8ed351f2a33db1a481a3d0c696471f Mon Sep 17 00:00:00 2001 From: ForestOfLight Date: Thu, 10 Jul 2025 18:50:19 -0700 Subject: [PATCH 10/12] material grabber shows instance selection if the selected instance is missing --- packs/BP/scripts/classes/Structure/StructureCollection.js | 4 ++++ packs/BP/scripts/options/materialGrabber.js | 5 ++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packs/BP/scripts/classes/Structure/StructureCollection.js b/packs/BP/scripts/classes/Structure/StructureCollection.js index 2ae6407..52a05c0 100644 --- a/packs/BP/scripts/classes/Structure/StructureCollection.js +++ b/packs/BP/scripts/classes/Structure/StructureCollection.js @@ -40,6 +40,10 @@ class StructureCollection { return structure; } + has(instanceName) { + return Boolean(this.structures[instanceName]); + } + delete(instanceName) { const struct = this.get(instanceName); struct.delete(); diff --git a/packs/BP/scripts/options/materialGrabber.js b/packs/BP/scripts/options/materialGrabber.js index 8bae80d..28faeb3 100644 --- a/packs/BP/scripts/options/materialGrabber.js +++ b/packs/BP/scripts/options/materialGrabber.js @@ -55,11 +55,10 @@ function onPlayerInteract(event) { const player = event.player; const target = event.block || event.target; const focusedInstanceName = Builders.get(player.id).materialInstanceName; - if (!focusedInstanceName) { + if (!focusedInstanceName || !structureCollection.has(focusedInstanceName)) openInstanceSelectionForm(player, event); - } else { + else tryGrabMaterials(player, target, focusedInstanceName, event); - } } function isActionItem(itemStack) { From ec562aa4c7f6dbfbc531bfd5b5efa4a3ba5d902e Mon Sep 17 00:00:00 2001 From: ForestOfLight Date: Thu, 10 Jul 2025 19:30:29 -0700 Subject: [PATCH 11/12] don't add easy place item on option enable if it's in the offhand --- packs/BP/scripts/options/easyPlace.js | 3 ++- packs/BP/scripts/options/fastEasyPlace.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packs/BP/scripts/options/easyPlace.js b/packs/BP/scripts/options/easyPlace.js index 0c92ad4..72ad84f 100644 --- a/packs/BP/scripts/options/easyPlace.js +++ b/packs/BP/scripts/options/easyPlace.js @@ -19,7 +19,8 @@ function giveActionItem(playerId) { const player = world.getEntity(playerId); const container = player.getComponent(EntityComponentTypes.Inventory)?.container; const itemStack = new ItemStack('construct:easy_place'); - if (!container.contains(itemStack)) { + const offhandItemStack = player.getComponent(EntityComponentTypes.Equippable).getEquipment(EquipmentSlot.Offhand); + if (!container.contains(itemStack) && offhandItemStack?.typeId !== 'construct:easy_place') { const remainingItemStack = container.addItem(itemStack); if (remainingItemStack) player.dimension.spawnItem(remainingItemStack, player.location); diff --git a/packs/BP/scripts/options/fastEasyPlace.js b/packs/BP/scripts/options/fastEasyPlace.js index 6dc3902..6917a83 100644 --- a/packs/BP/scripts/options/fastEasyPlace.js +++ b/packs/BP/scripts/options/fastEasyPlace.js @@ -23,7 +23,8 @@ function giveActionItem(playerId) { const player = world.getEntity(playerId); const container = player.getComponent(EntityComponentTypes.Inventory)?.container; const itemStack = new ItemStack('construct:easy_place'); - if (!container.contains(itemStack)) { + const offhandItemStack = player.getComponent(EntityComponentTypes.Equippable).getEquipment(EquipmentSlot.Offhand); + if (!container.contains(itemStack) && offhandItemStack?.typeId !== 'construct:easy_place') { const remainingItemStack = container.addItem(itemStack); if (remainingItemStack) player.dimension.spawnItem(remainingItemStack, player.location); From c4d936b3abfcf6de54752cb36508e0b65ea83373 Mon Sep 17 00:00:00 2001 From: ForestOfLight Date: Wed, 16 Jul 2025 13:51:53 -0700 Subject: [PATCH 12/12] remove german structure --- packs/BP/structures/german.mcstructure | Bin 2307739 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packs/BP/structures/german.mcstructure diff --git a/packs/BP/structures/german.mcstructure b/packs/BP/structures/german.mcstructure deleted file mode 100644 index a1ed9059cf06f2955a1d017909553407ac65291a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2307739 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 zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyKwwGW*|Y!r+}VFq2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ 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 W;1;Cx%sggL6%2BFIFJUJ%>V$irdI9%