- Add hook implementations for custom pickaxe tier support - Hooked_PickaxeItemGetDestroySpeed: use CustomPickaxeRegistry destroy speed for configured pickaxes when mining effective blocks - Hooked_PickaxeItemCanDestroySpecial: use CustomPickaxeRegistry effective blocks and harvest level (obsidian requires level 3) - Add TryReadItemIdFromPickaxe and TryReadTileId helpers for reading item/tile IDs from native pointers
ExampleMod Assets
Language files
Language files live in assets/lang/ with the format {locale}.lang (e.g. en-GB.lang, de-DE.lang).
Current API: Use BlockProperties.Name() and ItemProperties.Name() when registering blocks and items. These set the display name shown in-game. The ModLoader hooks into the game's string lookup so your names appear correctly.
Future: Multi-locale support may load from these .lang files. Format: key=value per line, with # for comments.
Textures
Mod textures are supported via the dynamic atlas system. Place PNG files in:
- Blocks:
assets/blocks/{name}.png→ icon{modid}:{name}(e.g.ruby_ore.png→examplemod:ruby_ore) - Items:
assets/items/{name}.png→ icon{modid}:{name}(e.g.ruby.png→examplemod:ruby)
The mod ID is derived from the mod folder name (lowercase, hyphens removed). Use the namespaced icon in BlockProperties.Icon() and ItemProperties.Icon():
.Icon("examplemod:ruby_ore") // block from assets/blocks/ruby_ore.png
.Icon("examplemod:ruby") // item from assets/items/ruby.png
Textures must be 16×16 pixels (or any size; they are scaled). For vanilla icons, use names like gold_ore, diamond, etc.