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.
Add or update definitions, textures and models without compiling a new JAR for each content change.
Stats, recipes, drops, block behavior and mob behavior are loaded from the server world.
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.
Normal players do not create registry files in game. They use the items and recipes that the server owner publishes.
02 · Environment
Requirements & installation
| Component | Required version | Where |
|---|---|---|
| Minecraft | 1.21.8 | Server and clients |
| Java | 21 | Server and clients |
| Fabric Loader | 0.16.13 or newer | Server and clients |
| Fabric API | 0.136.1+1.21.8 or newer compatible build | Server and clients |
| ItemWeaver | The exact same release | Server and clients |
| GeckoLib | 5.2.2 or newer for 1.21.8 | Clients only when any 3D content or custom mob is loaded |
- Install Fabric Loader and Fabric API for Minecraft 1.21.8.
- Put
itemweaver-<version>.jarinto the server and every player'smods/folder. - Start the server once. ItemWeaver creates its config and the world content folder.
- If you use a GeckoLib renderer or any custom mob, install GeckoLib on every client. The dedicated server does not need it.
A client without ItemWeaver cannot complete the server content handshake and will be disconnected with a clear requirement message.
03 · For players
Player guide
- Install Fabric, Fabric API and the same ItemWeaver release as the server.
- Install GeckoLib if the server uses 3D items, 3D armor, mobs or bosses.
- Join the server. The current content archive downloads during connection and is cached by its hash.
- 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.
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
- Start the world once and open
<world>/ItemWeaver/. - Create
textures/items/ruby.pngas a lowercase PNG. - Create
registry/items/ruby.jsonwith the definition below. - Disconnect every player, then run
/itemweaver reloadfrom the dedicated-server console or RCON. In single-player, save and reopen the world. - 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.
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.
idaccepts lowercase letters, numbers,_,-,.and/.- Asset paths are relative to their content folder. Absolute paths, drive letters,
:, backslashes and..are rejected. - Supported
typevalues:item,block,sword,pickaxe,axe,shovel,hoe,helmet,chestplate,leggings,boots. - Unknown JSON fields are currently ignored; misspelled fields therefore fall back to defaults.
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
Uses stackSize, display name, texture/model and optional recipe.
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 # leggingsThe 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 simplecube_allblock model. lightLevelis clamped from 0 to 15.dropSelf=falsesuppresses 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.
"recipe": {
"type": "shaped",
"pattern": [" R ", " R ", " S "],
"keys": {
"R": "ruby",
"S": "minecraft:stick"
},
"count": 1
}"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.
countmust be 1–64.- Ingredients may be stable ItemWeaver IDs or vanilla/modded namespaced IDs.
- Ingredient tags such as
#minecraft:planksare 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
}chanceis a percentage clamped to 0–100.amountis 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.
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.
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
armorLeftBootMatch 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:pathmatches 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=falsedisable attempts. groupMaxis capped at 8.maxNearbyis capped at 32, but production servers should keep it far lower.- Vanilla light and biome spawn-list rules are not consulted.
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
- Back up the content folder, world and generated slot mapping before changing stable IDs or performing a migration.
- Edit and validate files outside the live server where possible.
- Disconnect every player, run reload once from the console, wait for completion and read every reported error.
- Test crafting, stats, model rendering and drops before inviting players back.
17 · Networking
Client sync & cache
- The server builds a deterministic archive from registry files and only the assets referenced by valid loaded definitions.
- The client receives a manifest with the SHA-256 hash and checks
.minecraft/ItemWeaver/cache/. - On a cache miss, the archive is transferred in bounded chunks, verified, extracted safely and marked complete.
- 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.
- 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| Key | Default | Actual behavior |
|---|---|---|
generateexamples | false | When enabled, creates missing sample files and templates during content load. Existing files are never overwritten or deleted. |
showdebugtooltips | false | Shows stable content ID and type in local client tooltips. A player can change their own local setting. |
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
| Area | Current boundary |
|---|---|
| Technical namespace | sroskus_item (kept intentionally for world compatibility) |
| Generic vanilla items | 2,048 pooled slots |
| Vanilla tools/armor | 512 slots per type |
| GeckoLib generic items | 512 slots |
| GeckoLib tools/armor | 512 slots per type |
| Blocks | 1,024 pooled slots |
| Custom mobs | 64 pooled entity slots |
| Natural custom mobs | Natural 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 rules | 64 per target block; amount 1–64; 256 item units and 32 ItemEntity stacks per break |
| Mob-drop rules | 64 per mob; amount 1–64; 128 item units and 32 ItemEntity stacks per death |
| One synced asset | 32 MiB |
| One PNG | 8,192 px per dimension and 16,777,216 decoded pixels |
| Total synced archive | 64 MiB compressed, 128 MiB extracted, 16,384 entries |
| Transfer budget | 16 × 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.
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
| Field | Default | Validation / use |
|---|---|---|
id | File name | [a-z0-9_./-]+; stable authoring ID |
type | item | One of the 11 supported content types; case-insensitive |
displayName | id | Visible plain-text name |
texture | <id>.png | Required lowercase relative PNG path |
model | Empty | Optional relative .json path |
stackSize | 1 for tool/armor, otherwise 64 | Clamped to 1–64 |
durability | 250 for tool/armor, otherwise 0 | Negative becomes 0 |
attackDamage | 4 sword, otherwise 1 | Tool attribute |
attackSpeed | -2.4 sword, otherwise -2.8 | Tool attribute |
miningSpeed | 4 tool, otherwise 1 | Negative becomes 1 |
armor | 0 | Armor points; minimum 0 |
toughness | 0 | Minimum 0 |
knockbackResistance | 0 | Minimum 0 |
armorTexture | ID with / changed to _ | Simple lowercase prefix, no folder |
hardness | 1.5 | Block only; minimum 0 |
resistance | 6.0 | Block only; minimum 0 |
lightLevel | 0 | Block only; clamped 0–15 |
dropSelf | true | Block only |
rarity | common | Read but not applied at runtime yet |
renderer | vanilla | vanilla or geckolib |
geo | None | Required when renderer is GeckoLib |
recipe | None | Inline shaped or shapeless recipe |
Mob fields
| Field | Default | Validation / use |
|---|---|---|
id, displayName | File name / ID | Same ID rules as items |
health | 20 | Values below 1 fall back to 20 |
attackDamage | 3 | Negative falls back to 3 |
movementSpeed | 0.23 | Negative falls back to 0.23 |
followRange | 32 | Positive finite value, clamped to 128 |
knockbackResistance | 0 | Minimum 0 |
width, height | Auto from geometry | Fallback 1.4 × 2.9; clamped 0.5–8 |
spawnEggTexture | Generated icon | Optional relative PNG |
geo | Required | Model and texture required; animations optional |
drops | Empty | Independent item, amount and chance entries |
spawn | None | Optional natural spawn rule |