Creating your Renderer
This renderer is responsible for how your custom item is displayed in the game.
It connects the item with the following:
- Geometry file (
geo.json): Defines the 3D model of the item. - Texture file (
.png): The visual appearance of the item (applies over the geometry).
Warning
There is currently a bug in the plugin which exports the displays with an offset applied, please use useNewOffset(true) in your AzItemRendererConfig builder to fix this.
public class ExampleItemRenderer extends AzItemRenderer {private static final ResourceLocation GEO = ResourceLocation.fromNamespaceAndPath(YOUR_MOD_ID,"geo/item/exampleitem.geo.json");private static final ResourceLocation TEX = ResourceLocation.fromNamespaceAndPath(YOUR_MOD_ID,"textures/item/exampleitem.png");public ExampleItemRenderer() {super(AzItemRendererConfig.builder(GEO, TEX).build());}}
Registering your Renderer
Call AzItemRendererRegistry#register() in your onInitializeClient for Fabric, or inside event.enqueueWork(...) in your FMLClientSetupEvent handler for NeoForge.
Warning
On NeoForge, setup events fire for every mod at the same time on parallel worker threads. Always register inside event.enqueueWork(...), which runs your code on the main thread after every mod's handler has finished, so your registrations can't race another mod's. Registering directly in the event handler can cause renderers to go missing at random between launches. Fabric runs its initializers one after another on a single thread, so no wrapper is needed there.
Fabric:
@Overridepublic void onInitializeClient() {AzItemRendererRegistry.register(ExampleItemRenderer::new, YourItemRegistry.YOUR_ITEM);}
NeoForge:
private void onClientSetup(FMLClientSetupEvent event) {event.enqueueWork(() -> {AzItemRendererRegistry.register(ExampleItemRenderer::new, YourItemRegistry.YOUR_ITEM);});}