HomeJavaModsNeo's Meshes
Neo's Meshes
ModsJava

Neo's Meshes

by NeojGaming · on Modrinth

A Mod that adds a few tools that let you create meshes using vertices and faces, then give faces collisions and textures.

⬇ Download on Modrinth

Neo's Meshes - Complete Feature Guide

Neo's Meshes is a Fabric mod for Minecraft Java Edition 26.1.2 that lets players construct persistent, textured, collidable 3D polygon meshes directly inside a world.

It can also import complete glTF 2.0 .glb and .gltf models in-game, preserve their UV-mapped base-color textures in a generated required resource pack, turn the result into a reusable Saved Mesh Template, and register the same exact triangle mesh as a command-selectable Minecraft item model.

Normal Creation Workflow

  1. Place vertices with the Vertex Tool.
  2. Select those vertices in boundary order with the Face Tool.
  3. Middle-click to turn the selection into a face on the mesh.
  4. Pick a resource-pack texture (added or vanilla) with the Render Tool.
  5. Apply that texture to the face or entire mesh.
  6. Enable collision with the Collision Tool.
  7. Optionally configure the collision behavior.
  8. Optionally capture the finished mesh as a reusable template.

Meshes are stored independently per dimension and remain after saving and reopening the world.

Included Items and Controls

Item Controls and behavior
VertexTool
Tool In-Game
Shows a live green placement preview. Right-click places a vertex. Sneak + middle-click selects the mesh belonging to the face or vertex you are looking at, or finishes the current mesh and creates a separate empty one when neither is targeted.
Mesh Delete Tool
Tool In-Game
Right-click a targeted vertex to remove that vertex and its dependent topology, or right-click a face to remove that complete polygon while keeping its other vertices. Crouch + left-click any face or vertex to permanently delete its entire mesh.
FaceTool
Tool In-Game
Right-click vertices in boundary order to select them. Left-click a selected vertex to deselect it. Middle-click with at least three selected vertices to create the face. Sneak + double-left-click a face to delete a face while keeping its vertices.
RenderTool
Tool In-Game
Middle-click, or right-click empty space, opens the texture browser. Right-click a face to apply the selected texture. Sneak + right-click applies it to every face in that mesh.
CollisionTool
Tool In-Game
Left-click a face to enable collision. Right-click removes that face's collision. Sneak + left-click a mesh face or vertex to enable collision for every face in that mesh.
Collision Settings Tool
Tool In-Game
Right-click a face to configure stair-like or slippery slopes or ice mode, with a friction slider, if the face is perfectly flat. Settings can be applied to one face or the whole mesh.
Mesh Template
Template In-Game
Right-click while looking at a mesh face or vertex to capture the entire mesh. A targeted vertex becomes the origin; a targeted face uses the exact point clicked on its surface.
Saved Mesh Template
Saved Template In-Game
The distinct item produced after capture. Right-click places a copy; sneak + right-click opens precision draft placement.
Model Import Tool
Model Import Tool
Right-click to open a responsive file-import screen. Browse for a glTF 2.0 .glb or .gltf, inspect its vertex/triangle/texture summary, and create both a Saved Mesh Template and an nmesh:<filename> item model containing the transformed full model.
Selection Tool
Tool In-Game
Right-click twice to place two temporary fill-style selection corners using the Vertex Tool placement rules. Middle-click after both corners exist to open bulk actions for enclosed vertices and faces.

The creative tab exposes all editing tools, the blank Mesh Template, and the Model Import Tool. Saved Mesh Templates are produced through capture or model import rather than directly listed.

Every item stacks to one and has no durability system.

Vertex Placement and Mesh Selection

Normal vertex placement is centered three blocks along the camera direction.

When not crouching: Example

When crouching: Example

The client preview and server placement use the same calculation.

The first vertex creates and selects a mesh automatically if one is not already selected. Mesh selection is based on the face or vertex under the camera ray, not whether the placement preview overlaps it. Looking at a face or vertex and using sneak + middle-click switches editing to that part's mesh and clears any face selection from another mesh.

Selection Tool and Fill-Style Area Actions

The Selection Tool provides a temporary, per-player rectangular editing volume for mass-editing meshes.

The available actions are:

Selection boundaries are inclusive. A logical face is considered enclosed only when every vertex belonging to all of its internal triangles is inside the box. A face that merely crosses the box boundary is therefore not unexpectedly deleted, unrendered, or retextured. Triangulated quads and larger polygons remain one atomic logical face during these operations.

Polygon Faces

Face vertices must be selected in the intended boundary order. The tool does not automatically finish after three vertices; you may select up to 256 vertices
4 Vertices selected
and then explicitly middle-click.
Face Created

The polygon system supports triangles, quads, larger polygons, and valid concave polygons. Internally, polygons are ear-clipped into triangles, but all triangles share one face-group identity. Consequently:

A new face begins as topology only: it is neither rendered nor collidable until the corresponding tools are used.

A mesh supports up to 16,384 vertices and 32,768 internal face triangles.

Mesh and Part Deletion

Whole-mesh deletion removes all of the mesh's vertices, faces, rendered geometry, collision geometry, saved world data, and active editor selection. The removal is synchronized immediately to every player in that dimension.

Texture System

The RenderTool opens a responsive, searchable, scrollable texture browser. It enumerates effective PNG resources under textures/ from:

The Browser

Each texture has a preview and full resource identifier tooltip. A resource identifier can also be entered manually, such as:

minecraft:block/oak_planks
minecraft:textures/block/oak_planks.png
nmesh:item/example

Identifiers are normalized to their actual texture resource path. Missing textures make the field red and disable the Apply button. If an already-saved texture later disappears, rendering falls back to oak planks instead of making the mesh vanish.

Looking up a name

Looking up a Category

Applying a texture: Texture Applied

Each triangle is submitted separately as a degenerate quad so Minecraft cannot accidentally connect neighboring triangles into long, distorted texture wedges.

Fresh meshes render white, opaque, double-sided, and with normal world lighting. Coplanar mesh surfaces use a forward depth layer, so the mesh takes visual precedence over a block when they are exactly flush, avoiding z-fighting.

Meshes are not Minecraft entities. They are custom world geometry submitted through Fabric's world-rendering phase. The implementation borrows Minecraft's entity cutout/translucent pipelines for material rendering, but samples surrounding world-surface light so a mesh intersecting a block does not become dark like an entity inside that block.

Editor Visualization

While an editing tool is held:

Example House Mesh visualised

These markers are editing aids only and are not stored as part of the finished appearance.

Vertex markers use lightweight eight-triangle octahedra instead of high-segment spheres. Authored editor edges use a two-triangle camera-facing ribbon instead of a twelve-triangle solid prism. This reduces marker geometry by 92% and edge geometry by about 83% while keeping the same colors, through-wall visibility, target highlighting, and normal/detail sizes. Textured mesh face geometry remains revision-cached and is not rebuilt unless that mesh changes.

For dense or imported models, hold F1 to momentarily switch the editor aids into high-detail view. In this view, vertex markers become much smaller and authored mesh edges are hidden so the textured model is easier to inspect. Releasing F1 restores the current persistent view state. Press F4 once to keep high-detail view enabled, and press F4 again to return to the normal marker and edge sizes. Selection-box boundaries remain visible because they describe the active editing area rather than mesh topology.

A compact top-left HUD shows the controls for the held tool. Precision template draft mode intentionally has no HUD overlay, screen, or world darkening.

Exact Collision System

Collision is independent of rendering. A face may be visible without collision, collidable without a texture, both, or neither.

Enabled polygons are not converted into blocks or stair-stepped voxel boxes. The mod continuously sweeps an entity's real bounding box against the authored triangle planes and polygon boundaries.

The solver includes:

Collision Applied

The collision boundary is intentionally inset by at most 0.001 blocks around a polygon's outer edge. This tiny reduction prevents a vertical face underneath or beside a floor from catching an entity trying to walk off the floor. Internal triangle seams are not inset.

Because the collision mixin applies to Minecraft's base Entity collision method, mesh collision can affect players and other entities using normal movement collision.

Standing on the Mesh

Collision Movement Settings

The Collision Settings Tool provides:

Collision Settings Menu

Stair-like is the default slope mode. It preserves requested horizontal travel and calculates the necessary vertical movement along the slope. Gravity by itself does not make an idle entity slide.

Slippery mode allows gravity to project along a non-horizontal slope, causing the entity to slide downhill. The direction and rate naturally depend on the face's steepness. This setting does nothing to a perfectly horizontal face.

Flat ice mode only affects horizontal collision faces. It blends the entity's requested direction with its previous horizontal movement:

glTF and GLB Model Import

Right-clicking the Model Import Tool opens an in-game import screen with both an editable file-path field and a native Browse dialog filtered to .glb and .gltf files. Reading and validating the model happens away from the render thread so a larger model does not freeze the interface while it is parsed.

Menu (nothing imported)

The importer includes a uniform Import scale slider. It defaults to 1.00x, ranges from 0.01x to 10.00x, and is quantized in exact 0.01x increments. The selected multiplier affects both the Saved Mesh Template's world-space vertices and the generated item model's rendered size. Face topology, UV coordinates, materials, and embedded textures are unchanged, so a very small model can be enlarged without altering its texture mapping.

The importer supports glTF 2.0 features needed for ordinary authored mesh models:

After the model summary is ready, Import Mesh sends only validated mesh/template data and converted texture assets to the server. The server independently checks every coordinate, index, UV, texture size, PNG header, image dimensions, and SHA-256 content identifier before accepting it. It then gives the player a normal Saved Mesh Template and registers the same geometry in the world's imported item-model catalog. Imported triangles start rendered with their original UVs, but collision stays disabled until the Collision Tool is used. Success is reported through the same compact actionbar summary as before; importing does not add chat messages.

Model Imported Template Created

Imported model coordinates are stored relative to the glTF model origin, with one glTF unit equal to one Minecraft block. Scene and node transforms are already applied. Placing or draft-placing the resulting template therefore puts the model's authored origin on the chosen placement point.

Model Placed

Imported Item Models

The filename stem becomes a readable item-model identifier in the nmesh namespace. Uppercase letters become lowercase, while spaces and unsupported characters become underscores. Reimporting a file with the same normalized name updates that same ID. Names belonging to Neo's Meshes' own tool models receive a _model suffix so an import cannot replace an editor tool's appearance.

For example, importing Detailed Robot.glb registers nmesh:detailed_robot. It can be placed on any item stack with the standard Minecraft item-model component:

/give @s minecraft:zombie_spawn_egg[minecraft:item_model="nmesh:detailed_robot"]

The resulting stack draws the original imported triangles and UV-mapped textures in inventories, hands, dropped-item entities, item frames, head slots, and shelf displays. Neo's Meshes resolves the synchronized ID through Minecraft's normal minecraft:item_model lookup and submits the arbitrary triangle geometry through a special item renderer because vanilla cuboid model JSON cannot encode a general glTF mesh. At 1.00x, the full model is centered and uniformly fitted into normal item space. The selected import multiplier is then applied around that center, so 2.00x makes the item model twice as large and 0.50x makes it half-sized before the normal context-specific Minecraft item transforms are applied.

Zombie spawn egg with custom model

The item model contains no large custom item data: the stack stores only the ordinary small minecraft:item_model identifier. The geometry and its import-scale multiplier remain world-persistent on the server and are synchronized once as part of the imported model catalog, so any number of items can reference it without duplicating the model in NBT.

Generated Required Resource Pack

Every material image becomes an immutable resource such as:

nmesh_imported:textures/models/<sha256>.png

The SHA-256 name deduplicates identical images and prevents one import from overwriting another. These PNG bytes and the named item-model catalog are stored in the world's Neo's Meshes saved data. Joining clients receive the complete sets, and imports are broadcast to every connected player.

On the client, Neo's Meshes exposes those bytes through a real in-memory Minecraft PackResources implementation named Neo's Meshes - Imported Models. Its pack selection is always present, required, fixed, and top priority, so it is mod-side and cannot be disabled from the resource-pack menu—even when it currently contains no imported textures.

Newly synchronized PNGs are decoded and registered directly with Minecraft's texture manager. Importing a model, joining a server, or disconnecting therefore does not toggle the pack or perform a full resource-pack reload. Changed textures are replaced individually, unchanged textures are retained without another upload, and textures belonging to the previous server are released on disconnect.

Per import, source data is limited to 128 MiB, converted textures to 128 images/32 MiB, images to 4096x4096, vertices to 16,384, and triangles to 32,768. A world's synchronized generated pack is capped at 64 MiB. The item-model catalog is capped at 128 models, 131,072 total vertices, and 262,144 total triangles. Draco-compressed primitives, sparse accessors, and image encodings not decodable as PNG/JPEG are rejected with an on-screen reason instead of producing a broken template.

Mesh Templates

Using a blank Mesh Template on a targeted face or vertex captures:

When a vertex is targeted, that vertex becomes the template's exact origin. When a face is targeted, the precise ray-hit point on the face becomes the origin, allowing the copied mesh to be placed using an anchor anywhere on that surface.

Blank Mesh Template

The blank item transforms into a distinct Saved Mesh Template; the original world mesh remains editable.

The Saved Mesh Template item contains only a small UUID reference, never the full face and vertex snapshot. Each captured or imported template is written as its own compressed file at:

<world save>/nmesh_templates/<template UUID>.nbt

That file contains the relative vertices, edges, faces, UVs, textures, rendered and collision states, movement materials, render settings, source name, and placement-origin information. Writes use a temporary file followed by an atomic replacement when the filesystem supports it, preventing a partial save from becoming the referenced template. Successfully loaded templates are cached for the life of the server, so repeatedly placing the same template does not repeatedly read the disk.

This keeps inventory and item synchronization small even for detailed imports. Saved Template items from earlier Neo's Meshes versions that contain embedded nmesh_template or meshmod_template data are migrated on their first use: a world file is created, the item receives its UUID reference, and the embedded geometry is removed.

Saved Mesh Template

Normal right-click places an independent copy. Every copy receives new mesh, vertex, and face-group identities, so editing one copy does not modify the source or another copy. The placement origin lands at the current snapped vertex-placement point.

Mesh Placed

A normally placed copy is named Original Name Copy. Renaming the template item provides the placed mesh's name instead.

Precision Draft Mode

Sneak + right-click a Saved Mesh Template starts a transient preview without opening a screen or darkening the world.

Editing

During draft mode:

No permanent mesh is created until confirmation.

Persistence, Syncing, and Multiplayer

The server owns and validates edits. Clients handle input, menus, previews, and rendering.

Therefore, the correct distribution classification is:

Legacy Compatibility

(At one point the namespace was meshmod, but was since then changed to nmesh for Neo's Meshes, so it does support meshmod just for compatibility on worlds that used that before.)

Compatibility includes:

Survival Recipes

(This isn't really meant for survival so that AI that coded this just added it in just in case. This is the only part that wasn't my idea.)

Item Pattern and ingredients
VertexTool A / C / S - amethyst shard, copper ingot, stick
Mesh Delete Tool FI / S - flint, iron ingot, stick
FaceTool E / C / S - echo shard, copper ingot, stick
RenderTool GL / S - glass, lapis lazuli, stick
CollisionTool IR / S - iron ingot, redstone, stick
Collision Settings Tool CR / S - copper ingot, redstone, stick
Mesh Template P / PAP / P - four paper surrounding an amethyst shard

Saved Mesh Templates have no separate crafting recipe.

Metadata and Compatibility

The JAR contains:

Current Limitations and Missing Verification

The blank item transforms into a distinct Saved Mesh Template; the original world mesh remains editable.

The Saved Mesh Template item contains only a small UUID reference, never the full face and vertex snapshot. Each captured or imported template is written as its own compressed file at:

<world save>/nmesh_templates/<template UUID>.nbt

That file contains the relative vertices, edges, faces, UVs, textures, rendered and collision states, movement materials, render settings, source name, and placement-origin information. Writes use a temporary file followed by an atomic replacement when the filesystem supports it, preventing a partial save from becoming the referenced template. Successfully loaded templates are cached for the life of the server, so repeatedly placing the same template does not repeatedly read the disk.

This keeps inventory and item synchronization small even for detailed imports. Saved Template items from earlier Neo's Meshes versions that contain embedded nmesh_template or meshmod_template data are migrated on their first use: a world file is created, the item receives its UUID reference, and the embedded geometry is removed.

Saved Mesh Template

Normal right-click places an independent copy. Every copy receives new mesh, vertex, and face-group identities, so editing one copy does not modify the source or another copy. The placement origin lands at the current snapped vertex-placement point.

Mesh Placed

A normally placed copy is named Original Name Copy. Renaming the template item provides the placed mesh's name instead.

Precision Draft Mode

Sneak + right-click a Saved Mesh Template starts a transient preview without opening a screen or darkening the world.

Editing

During draft mode:

No permanent mesh is created until confirmation.

Persistence, Syncing, and Multiplayer

The server owns and validates edits. Clients handle input, menus, previews, and rendering.

Legacy Compatibility

(At one point the namespace was meshmod, but was since then changed to nmesh for Neo's Meshes, so it does support meshmod just for compatibility on worlds that used that before.)

Compatibility includes:

Survival Recipes

(This isn't really meant for survival so that AI that coded this just added it in just in case. This is the only part that wasn't my idea.)

Item Pattern and ingredients
VertexTool A / C / S - amethyst shard, copper ingot, stick
Mesh Delete Tool FI / S - flint, iron ingot, stick
FaceTool E / C / S - echo shard, copper ingot, stick
RenderTool GL / S - glass, lapis lazuli, stick
CollisionTool IR / S - iron ingot, redstone, stick
Collision Settings Tool CR / S - copper ingot, redstone, stick
Mesh Template P / PAP / P - four paper surrounding an amethyst shard

Saved Mesh Templates have no separate crafting recipe.

Metadata and Compatibility

The JAR contains:

Current Limitations and Missing Verification

Verified by MCModsHub

These come from our own check of the pack file, not from the source page.

Explore more