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