From 9bb2b002c9d73dd5be4ad29423b062a02f0121c7 Mon Sep 17 00:00:00 2001 From: ForestOfLight Date: Thu, 10 Jul 2025 15:24:32 -0700 Subject: [PATCH] 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];