Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions plugins.json
Original file line number Diff line number Diff line change
Expand Up @@ -1649,6 +1649,21 @@
"bug_tracker": "https://github.com/hrmcngs/sb-worn-display-blockbench/issues",
"creation_date": "2026-05-31"
},
"true_mirror": {
"title": "True Mirror",
"author": "Kegoscho",
"icon": "icon.svg",
"description": "Mirrors only the change you actually made, instead of symmetrizing the whole element. Asymmetric detail survives unrelated mirrored edits. Move, rotate, scale and extrude, across any axis and around either world zero or the element's own pivot.",
"tags": ["Edit", "Meshes", "Mirror"],
"version": "1.0.0",
"min_version": "5.1.0",
"variant": "both",
"new_repository_format": true,
"has_changelog": true,
"repository": "https://github.com/Kegoscho/true-mirror",
"bug_tracker": "https://github.com/Kegoscho/true-mirror/issues",
"creation_date": "2026-08-04"
},
"structure_to_model": {
"title": "Structure to Model",
"author": "Mester",
Expand Down
21 changes: 21 additions & 0 deletions plugins/true_mirror/LICENSE.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2026 Kegoscho

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
39 changes: 39 additions & 0 deletions plugins/true_mirror/about.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
Blockbench's built-in Mirror Modeling re-symmetrizes the whole element after every edit, using
your edit only as a trigger. Put an off-centre detail on one side, edit something unrelated, and
the detail gets duplicated across or deleted.

True Mirror mirrors the edit itself. Move a vertex, its counterpart moves the same way. Anything
you did not touch is left alone, symmetric or not.

## What it does

- Move, rotate and scale in vertex, edge and face selection modes
- Extrude. The new geometry and its side walls are mirrored across
- Mirror across X, Y or Z, set from a dropdown in the toolbar
- Two mirror planes. Global uses world zero. Local uses the element's own pivot, so a part
sitting off to one side can still mirror around itself
- Rotated elements work under Local, where the plane rotates with the element
- A translucent guide shows where the mirror plane actually is

## When it will not mirror, it says so

Some edits cannot be mirrored safely. The plugin skips those and puts a message on screen naming
the cause, and the fix where there is one. An off-centre pivot reports how far off it is.

## What it does not do

- Loop cut, knife and deletion are not mirrored. Those edits pass through untouched
- Nothing is welded at the seam. An extrusion landing on or across the mirror plane is skipped
rather than half-applied
- Mirroring happens inside one element. It will not pair one mesh with a separate mirrored mesh,
so rigged limb pairs are out
- New faces get a copy of the source face's UVs. The UVs themselves are not mirrored
- Moving a whole element as a body does nothing. Sub-selections only
- Mesh elements only, and Blockbench's own Mirror Modeling has to be off

I built this for my own use while working on a personal project. It is my first Blockbench
plugin, and I am publishing it because people asked for it and because the problem it solves
has several open issues against Blockbench. It works and it is tested, though that testing was
done by hand on one setup. Support is not guaranteed.

Full documentation and the reasoning behind the limits is in the README.
32 changes: 32 additions & 0 deletions plugins/true_mirror/changelog.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"1.0.0": {
"title": "1.0.0",
"date": "2026-08-04",
"author": "Kegoscho",
"categories": [
{
"title": "Features",
"list": [
"Mirrors only the edit you made, so asymmetric detail elsewhere on the model is left alone",
"Move, rotate and scale in vertex, edge and face selection modes",
"Extrude, including the new side walls and the matching face on the other side",
"Mirror across X, Y or Z, set from a dropdown in the toolbar",
"Two mirror planes: Global uses world zero, Local uses the element's own pivot",
"Rotated elements work under Local, where the plane rotates with the element",
"A translucent guide shows where the mirror plane actually is",
"Edits that cannot be mirrored safely are skipped with a message naming the cause"
]
},
{
"title": "Known limits",
"list": [
"Loop cut, knife and deletion are not mirrored",
"Extrusions landing on or across the mirror plane are skipped, since nothing is welded at the seam",
"Mirroring happens inside one element, so rigged limb pairs are not paired up",
"New faces copy the source face's UVs; the UVs themselves are not mirrored",
"Mesh elements only, and Blockbench's built-in Mirror Modeling has to be off"
]
}
]
}
}
28 changes: 28 additions & 0 deletions plugins/true_mirror/icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading