ItemWeaver Official wiki Quick start Commands Schema GitHub Docs

Fabric 1.21.8 · Server-authoritative

ItemWeaver

Create items, tools, armor, blocks, recipes, drops and animated mobs from JSON. Apply changes during maintenance without rebuilding the mod, then let the server deliver every required asset to players automatically.

No matching documentation sections.
Compatibility note

ItemWeaver is the public name. The technical namespace remains sroskus_item so existing worlds and item stacks stay compatible. Never rename that namespace inside model references.

01 · Start here

Overview

ItemWeaver turns a server-owned folder into live Minecraft content. A server administrator authors JSON and assets; players install the mod once and receive the active content automatically when they join.

Author without rebuilding

Add or update definitions, textures and models without compiling a new JAR for each content change.

Server stays authoritative

Stats, recipes, drops, block behavior and mob behavior are loaded from the server world.

Clients stay in sync

A SHA-256 content cache sends only the active, referenced assets and reloads them automatically.

Supported content

Generic items, swords, pickaxes, axes, shovels, hoes, four armor slots, simple placeable blocks, shaped and shapeless recipes, random block-break drops, 3D GeckoLib items/armor, and animated hostile mobs or bosses.

This is an administrator authoring mod.

Normal players do not create registry files in game. They use the items and recipes that the server owner publishes.

02 · Environment

Requirements & installation

ComponentRequired versionWhere
Minecraft1.21.8Server and clients
Java21Server and clients
Fabric Loader0.16.13 or newerServer and clients
Fabric API0.136.1+1.21.8 or newer compatible buildServer and clients
ItemWeaverThe exact same releaseServer and clients
GeckoLib5.2.2 or newer for 1.21.8Clients only when any 3D content or custom mob is loaded
  1. Install Fabric Loader and Fabric API for Minecraft 1.21.8.
  2. Put itemweaver-<version>.jar into the server and every player's mods/ folder.
  3. Start the server once. ItemWeaver creates its config and the world content folder.
  4. If you use a GeckoLib renderer or any custom mob, install GeckoLib on every client. The dedicated server does not need it.
Do not install the mod on only one side.

A client without ItemWeaver cannot complete the server content handshake and will be disconnected with a clear requirement message.

03 · For players

Player guide

  1. Install Fabric, Fabric API and the same ItemWeaver release as the server.
  2. Install GeckoLib if the server uses 3D items, 3D armor, mobs or bosses.
  3. Join the server. The current content archive downloads during connection and is cached by its hash.
  4. Use the content normally: crafting recipes, survival drops, equipped armor, blocks and mobs behave like server-defined Minecraft content.

In creative mode, loaded content is grouped into ItemWeaver tabs for items, weapons & tools, armor, blocks and mobs. Debug IDs are hidden by default.

No manual resource pack installation is required.

The generated pack is mounted from the local cache. A later join reuses the cache when the server hash has not changed.

04 · Five-minute workflow

Server quick start

  1. Start the world once and open <world>/ItemWeaver/.
  2. Create textures/items/ruby.png as a lowercase PNG.
  3. Create registry/items/ruby.json with the definition below.
  4. Disconnect every player, then run /itemweaver reload from the dedicated-server console or RCON. In single-player, save and reopen the world.
  5. Read the command result and server log. Invalid files are skipped with their relative path.
{
  "id": "ruby",
  "type": "item",
  "displayName": "Ruby",
  "texture": "items/ruby.png",
  "stackSize": 64
}

The stable authoring ID is ruby. ItemWeaver assigns an internal pooled Minecraft ID such as sroskus_item:hot_item_001. Use ruby in your recipes and drop definitions.

Optional sample pack:

The default is generateexamples=false. Temporarily set it to true only if you want the bundled examples and templates; some generated examples require GeckoLib.

05 · Filesystem

Folder layout

All authoring input belongs to the server world. Keep file and folder names lowercase inside asset paths.

<world>/ItemWeaver/
├─ registry/
│  ├─ items/
│  ├─ weapons_and_tools/
│  ├─ armors/
│  ├─ blocks/
│  └─ mobs/
├─ textures/
│  ├─ items/
│  ├─ weapons_and_tools/
│  ├─ armors/
│  ├─ blocks/
│  ├─ mobs/
│  └─ models/armor/
├─ models/
│  ├─ items/
│  ├─ weapons_and_tools/
│  ├─ armors/
│  └─ blocks/
├─ geo/
│  ├─ items/
│  ├─ weapons_and_tools/
│  ├─ armors/
│  └─ mobs/
├─ animations/
│  ├─ items/
│  ├─ weapons_and_tools/
│  ├─ armors/
│  └─ mobs/
└─ drops/

Generated output

<world>/datapacks/sroskus_item_generated/
.minecraft/ItemWeaver/cache/<sha256>/
.minecraft/resourcepacks/ItemWeaver Generated/

Existing worlds that already contain Sroskus_Customitems remain supported as a legacy compatibility folder. Do not maintain both folders at the same time.

06 · Core concept

Registry basics

One registry JSON file defines one content entry. The file name is used as the fallback id, but an explicit ID is recommended.

  • id accepts lowercase letters, numbers, _, -, . and /.
  • Asset paths are relative to their content folder. Absolute paths, drive letters, :, backslashes and .. are rejected.
  • Supported type values: item, block, sword, pickaxe, axe, shovel, hoe, helmet, chestplate, leggings, boots.
  • Unknown JSON fields are currently ignored; misspelled fields therefore fall back to defaults.
Keep content IDs and ItemWeaver's generated slot mapping with the world.

On the first successful load, ItemWeaver records a permanent pooled slot for every content ID in registry/.itemweaver/slot-assignments.json. Moving or reordering JSON files afterward does not remap existing content. Never edit or delete the mapping or its .bak backup. Before the first upgrade load of an existing world, keep the old files and ordering unchanged and make a backup.

07 · Registry content

Items & tools

Generic item

Uses stackSize, display name, texture/model and optional recipe.

Tools and weapons

Use durability, attack damage/speed and mining speed. Stack size defaults to 1.

Sword example

{
  "id": "ruby_sword",
  "type": "sword",
  "displayName": "Ruby Sword",
  "texture": "weapons_and_tools/ruby_sword.png",
  "durability": 1450,
  "attackDamage": 8.0,
  "attackSpeed": -2.4,
  "rarity": "rare"
}

Tool types share the same authoring fields. rarity is parsed in the current release but does not yet change the runtime rarity color or behavior; do not rely on it.

08 · Equipment

Armor

{
  "id": "ruby_chestplate",
  "type": "chestplate",
  "displayName": "Ruby Chestplate",
  "texture": "armors/ruby_chestplate.png",
  "armorTexture": "ruby",
  "durability": 640,
  "armor": 8,
  "toughness": 2.0,
  "knockbackResistance": 0.05
}

Every piece in one vanilla armor set should use the same armorTexture prefix.

textures/models/armor/ruby_layer_1.png  # helmet, chestplate, boots
textures/models/armor/ruby_layer_2.png  # leggings

The prefix must be a simple lowercase file prefix without folders. Missing layers use a fallback texture. For 3D worn armor, use "renderer": "geckolib" and follow the bone names in the GeckoLib section.

09 · World content

Blocks

{
  "id": "ruby_block",
  "type": "block",
  "displayName": "Ruby Block",
  "texture": "blocks/ruby_block.png",
  "hardness": 5.0,
  "resistance": 8.0,
  "lightLevel": 7,
  "dropSelf": true
}
  • Without model, ItemWeaver generates a simple cube_all block model.
  • lightLevel is clamped from 0 to 15.
  • dropSelf=false suppresses the additional custom-block self drop.
  • The current hot block supports one simple blockstate without properties.
  • GeckoLib block rendering is not supported in this release.

10 · Crafting

Recipes

Recipes live inside the registry JSON of the result. There is no authoring recipes/ folder.

Shaped
"recipe": {
  "type": "shaped",
  "pattern": [" R ", " R ", " S "],
  "keys": {
    "R": "ruby",
    "S": "minecraft:stick"
  },
  "count": 1
}
Shapeless
"recipe": {
  "type": "shapeless",
  "ingredients": [
    "ruby",
    "minecraft:blaze_powder"
  ],
  "count": 1
}
  • Shaped patterns are 1–3 rows, each 1–3 characters, all with equal width.
  • Shapeless recipes accept 1–9 ingredients.
  • count must be 1–64.
  • Ingredients may be stable ItemWeaver IDs or vanilla/modded namespaced IDs.
  • Ingredient tags such as #minecraft:planks are not supported yet.

11 · Loot rules

Block drops

Each file in drops/ is one independent roll after a successful survival block break.

{
  "block": "minecraft:cobblestone",
  "drop": "ruby",
  "amount": 1,
  "chance": 5.0
}
  • chance is a percentage clamped to 0–100.
  • amount is clamped to 1–64. At most 64 rules are loaded for one block and one break can create at most 256 configured item units.
  • The custom drop is added to normal block loot; creative breaks do not trigger it.
  • Fortune, Silk Touch, held tool, dimension and biome are not checked in this release.
  • Several rules for the same block roll independently.
Vanilla, modded and ItemWeaver blocks are supported:

Use a full namespaced ID such as minecraft:cobblestone for vanilla or modded blocks. For an ItemWeaver block, use its stable content ID such as ruby_block; the live pooled registry ID is resolved automatically.

12 · Visual authoring

Textures & vanilla models

Flat items and tools

Put a PNG in the matching textures/ category. If model is omitted, ItemWeaver generates minecraft:item/generated for items or minecraft:item/handheld for tools.

Custom vanilla model

{
  "parent": "minecraft:item/handheld",
  "textures": {
    "layer0": "sroskus_item:item/weapons_and_tools/ruby_sword"
  },
  "display": {
    "thirdperson_righthand": {
      "rotation": [0, -90, 55],
      "translation": [0, 4, 0.5],
      "scale": [0.85, 0.85, 0.85]
    }
  }
}

Save it under models/weapons_and_tools/ruby_sword.json, then set that same relative path in the registry model field. Namespace references remain sroskus_item for compatibility.

Recommended workflow:

Build and UV-map the model in Blockbench, export the vanilla item/block model JSON and PNG, copy both files into the server content folder, then reload.

13 · Animated 3D

GeckoLib 3D

Set renderer to geckolib for 3D items, tools, weapons or armor. Mobs always use GeckoLib.

{
  "id": "void_sword",
  "type": "sword",
  "displayName": "Void Sword",
  "texture": "weapons_and_tools/void_sword.png",
  "renderer": "geckolib",
  "geo": {
    "model": "weapons_and_tools/void_sword.geo.json",
    "texture": "weapons_and_tools/void_sword.png",
    "animation": "weapons_and_tools/void_sword.animation.json",
    "idleAnimation": "animation.void_sword.idle"
  }
}

model is required. animation and idleAnimation are optional; item rendering currently supports one looping idle animation.

Armor bones

armorHead
armorBody
armorRightArm
armorLeftArm
armorRightLeg
armorLeftLeg
armorRightBoot
armorLeftBoot

Match the PNG aspect ratio to texture_width and texture_height in the exported .geo.json. A mismatch is logged and usually produces incorrect UVs.

14 · Entities

Mobs & bosses

{
  "id": "stone_golem",
  "displayName": "Stone Golem",
  "health": 120,
  "attackDamage": 10,
  "movementSpeed": 0.22,
  "followRange": 40,
  "knockbackResistance": 0.7,
  "spawnEggTexture": "mobs/stone_golem_egg.png",
  "geo": {
    "model": "mobs/stone_golem.geo.json",
    "texture": "mobs/stone_golem.png",
    "animation": "mobs/stone_golem.animation.json",
    "idleAnimation": "animation.stone_golem.idle",
    "walkAnimation": "animation.stone_golem.walk",
    "attackAnimation": "animation.stone_golem.attack",
    "deathAnimation": "animation.stone_golem.death"
  },
  "drops": [
    { "item": "ruby", "amount": 2, "chance": 35.0 }
  ]
}

Mobs use fixed hostile behavior: swim, melee chase, wander, look at and target players. Ranged attacks, configurable goals, boss phases and boss bars are not available yet.

width and height are optional. ItemWeaver estimates them from cubes in the first Blockbench geometry (16 model units = 1 block); explicit values override the estimate and are clamped to 0.5–8 blocks.

A mob may define at most 64 drop rules. Each amount is clamped to 1–64; one death emits at most 128 configured item units and 32 ItemEntity stacks.

15 · Population

Natural spawning

"spawn": {
  "biomes": ["minecraft:dark_forest", "mirkwood", "me:fangorn"],
  "chance": 8.0,
  "groupMin": 1,
  "groupMax": 2,
  "maxNearby": 3
}
  • A full namespace:path matches one biome ID. A path without namespace matches that path in any namespace.
  • Spawn checks happen near live, non-spectator players on the terrain surface and only in loaded chunks.
  • Peaceful difficulty and doMobSpawning=false disable attempts.
  • groupMax is capped at 8. maxNearby is capped at 32, but production servers should keep it far lower.
  • Vanilla light and biome spawn-list rules are not consulted.
Performance advice for large servers:

Use low chance, group size and nearby limits for expensive animated mobs. Test AI cost with the same view distance and player spread as production.

16 · Administration

Commands & reload

Commands require Minecraft permission level 2. The legacy aliases remain available for compatibility.

reload cannot be run by a connected player because its safety guard requires an empty server. Use the dedicated-server console or RCON. In single-player, save and reopen the world so content is applied at integrated-server startup.

/itemweaver reloadTransactional maintenance command that validates registry JSON, updates recipes and prepares the join archive. The recipe datapack reloads only when changed or inactive. A critical failure restores the last working state. It refuses to run while any player is connected.
/itemweaver summon <id>Summon a loaded custom mob at the command source position.
/itemweaver summon <id> <x> <y> <z>Summon at exact or vanilla relative coordinates such as ~ ~ ~5.
/sroskus_ce …Legacy alias for old command blocks and administrator notes.
/sroskus_CE …Legacy case-sensitive alias.

Safe reload workflow

  1. Back up the content folder, world and generated slot mapping before changing stable IDs or performing a migration.
  2. Edit and validate files outside the live server where possible.
  3. Disconnect every player, run reload once from the console, wait for completion and read every reported error.
  4. Test crafting, stats, model rendering and drops before inviting players back.

17 · Networking

Client sync & cache

  1. The server builds a deterministic archive from registry files and only the assets referenced by valid loaded definitions.
  2. The client receives a manifest with the SHA-256 hash and checks .minecraft/ItemWeaver/cache/.
  3. On a cache miss, the archive is transferred in bounded chunks, verified, extracted safely and marked complete.
  4. Extracted caches and generated packs are reused only when their bounded per-file SHA-256 manifest matches exactly; missing, added or changed files invalidate them.
  5. The client generates and mounts a local resource pack, then completes the connection.

Block-drop files, server config, templates and unused PNGs are not sent to players. A maintenance /itemweaver reload prepares the new manifest for subsequent joins; unchanged hashes reuse cached content.

A matching cache in the legacy .minecraft/Sroskus_Customitems/cache/ location is reused only when it also has the current integrity manifest. Older cache formats are downloaded once into .minecraft/ItemWeaver/cache/ instead of being trusted blindly.

Reset a stale cache

Close Minecraft and delete only the failing hash folder, or the whole .minecraft/ItemWeaver/cache/ directory. If models are still missing, also delete .minecraft/resourcepacks/ItemWeaver Generated/. The next join recreates both safely.

18 · Settings

Configuration

The compatibility config file remains config/sroskus_item.properties.

generateexamples=false
showdebugtooltips=false
KeyDefaultActual behavior
generateexamplesfalseWhen enabled, creates missing sample files and templates during content load. Existing files are never overwritten or deleted.
showdebugtooltipsfalseShows stable content ID and type in local client tooltips. A player can change their own local setting.
Sample content can require GeckoLib.

Generated examples include GeckoLib content and a mob. Enabling samples can therefore require GeckoLib on joining clients until those definitions are removed.

19 · Boundaries

Limits & compatibility

AreaCurrent boundary
Technical namespacesroskus_item (kept intentionally for world compatibility)
Generic vanilla items2,048 pooled slots
Vanilla tools/armor512 slots per type
GeckoLib generic items512 slots
GeckoLib tools/armor512 slots per type
Blocks1,024 pooled slots
Custom mobs64 pooled entity slots
Natural custom mobsNatural spawning pauses at 256 loaded custom mobs per world or 16 in the nearby 96×96×96 area; manual mobs count toward the thresholds; at most 2 definition attempts per world tick
Block-drop rules64 per target block; amount 1–64; 256 item units and 32 ItemEntity stacks per break
Mob-drop rules64 per mob; amount 1–64; 128 item units and 32 ItemEntity stacks per death
One synced asset32 MiB
One PNG8,192 px per dimension and 16,777,216 decoded pixels
Total synced archive64 MiB compressed, 128 MiB extracted, 16,384 entries
Transfer budget16 × 24 KiB chunks per server tick globally; 2 chunks per client per tick

Large slot pools are registered when the game starts so definitions can change without adding new registry entries at runtime. The public release applies global transfer and spawn budgets; content authors must still test large packs on staging.

20 · Fixes

Troubleshooting

Missing texture

Check lowercase paths, the .png suffix and that texture is relative to textures/. Reload and read the client log.

Custom model ignored

Confirm model points to a JSON under models/ and texture references use the sroskus_item namespace.

Recipe rejected

Check pattern size, equal row width, every used key, ingredient IDs and output count. Tags are unsupported.

GeckoLib gray/fallback model

Verify model, texture, animation paths, exact animation names and matching texture dimensions. GeckoLib must be installed on the client.

Mob does not spawn

Test with /itemweaver summon <id>, then check difficulty, gamerule, biome ID, chance and loaded chunk rules.

Join/download fails

Use matching mod versions, install required GeckoLib, close Minecraft, clear the ItemWeaver cache and rejoin.

Best diagnostic source:

ItemWeaver logs invalid files with relative paths. Fix the first error, reload once, then continue; one malformed file can cause dependent recipes or assets to fail later.

21 · Exact fields

Full schema reference

Item, tool, armor and block fields

FieldDefaultValidation / use
idFile name[a-z0-9_./-]+; stable authoring ID
typeitemOne of the 11 supported content types; case-insensitive
displayNameidVisible plain-text name
texture<id>.pngRequired lowercase relative PNG path
modelEmptyOptional relative .json path
stackSize1 for tool/armor, otherwise 64Clamped to 1–64
durability250 for tool/armor, otherwise 0Negative becomes 0
attackDamage4 sword, otherwise 1Tool attribute
attackSpeed-2.4 sword, otherwise -2.8Tool attribute
miningSpeed4 tool, otherwise 1Negative becomes 1
armor0Armor points; minimum 0
toughness0Minimum 0
knockbackResistance0Minimum 0
armorTextureID with / changed to _Simple lowercase prefix, no folder
hardness1.5Block only; minimum 0
resistance6.0Block only; minimum 0
lightLevel0Block only; clamped 0–15
dropSelftrueBlock only
raritycommonRead but not applied at runtime yet
renderervanillavanilla or geckolib
geoNoneRequired when renderer is GeckoLib
recipeNoneInline shaped or shapeless recipe

Mob fields

FieldDefaultValidation / use
id, displayNameFile name / IDSame ID rules as items
health20Values below 1 fall back to 20
attackDamage3Negative falls back to 3
movementSpeed0.23Negative falls back to 0.23
followRange32Positive finite value, clamped to 128
knockbackResistance0Minimum 0
width, heightAuto from geometryFallback 1.4 × 2.9; clamped 0.5–8
spawnEggTextureGenerated iconOptional relative PNG
geoRequiredModel and texture required; animations optional
dropsEmptyIndependent item, amount and chance entries
spawnNoneOptional natural spawn rule