CCCPaste

Mirror blocks

local startPos = Vector3.new(330, 78, 468)
local endPos   = Vector3.new(288, 126, 549)

local mirrorSide = "right"

local regionWidth = math.abs(startPos.X - endPos.X)
local baseOffset = regionWidth + 3
local mirrorOffset = mirrorSide == "left" and baseOffset or -baseOffset

local regionCenter = Vector3.new(
    (startPos.X + endPos.X) / 2,
    (startPos.Y + endPos.Y) / 2,
    (startPos.Z + endPos.Z) / 2
)
local regionSize = Vector3.new(
    regionWidth + 1,
    math.abs(startPos.Y - endPos.Y) + 1,
    math.abs(startPos.Z - endPos.Z) + 1
)

local blocks = BlockService.getNearbyBlocks(regionCenter, regionSize, nil)
if not blocks then return end

local placedPositions = {}

for _, block in ipairs(blocks) do
    local pos = block.position
    if not pos then continue end

    local mirroredX = (regionCenter.X - (pos.X - regionCenter.X)) + mirrorOffset
    local mirroredPos = Vector3.new(mirroredX, pos.Y, pos.Z)

    local key = mirroredPos.X .. "," .. mirroredPos.Y .. "," .. mirroredPos.Z

    if placedPositions[key] or BlockService.getBlockAt(mirroredPos) then
        continue
    end

    BlockService.placeBlock(block.blockType, mirroredPos)
    placedPositions[key] = true
end