Community Suggested Features
Heads up!
Credit to AceTheEldritchKing for this tip.
Adding a Conditional Bone
In your armor renderer, call the createPipeline
and return a new AzArmorRendererPipeline
. In that new AzArmorRendererPipeline
override the boneContext
method you can now define your bone as below
@Overrideprotected AzArmorRendererPipeline createPipeline(AzRendererConfig config) {return new AzArmorRendererPipeline(config, this){@Overrideprotected AzRendererPipelineContext<ItemStack> createContext(AzRendererPipeline<ItemStack> rendererPipeline) {return new AzArmorRendererPipelineContext(rendererPipeline){@Overridepublic AzArmorBoneContext boneContext() {return new AzArmorBoneContext(){// Your Conditional Boneprotected AzBone armorLeggingTorsoBone;// Your Conditional Bone name from the modelpublic AzBone getArmorLeggingTorsoBone(AzBakedModel model) {return model.getBone("newArmorBone").orElse(null);}@Overridepublic void grabRelevantBones(AzBakedModel model, AzArmorBoneProvider boneProvider) {super.grabRelevantBones(model, boneProvider);this.armorLeggingTorsoBone = this.getArmorLeggingTorsoBone(model) ;}};}}}}}
Displaying Conditional Bones Only When Certain Armor Items are Equipped
Like above after you add your bone, simply override applyBoneVisibilityBySlot
like so and first hide it then unhide in the armor peice you want it to show in.boneContext
@Overrideprotected AzArmorRendererPipeline createPipeline(AzRendererConfig config) {return new AzArmorRendererPipeline(config, this){@Overrideprotected AzRendererPipelineContext<ItemStack> createContext(AzRendererPipeline<ItemStack> rendererPipeline) {return new AzArmorRendererPipelineContext(rendererPipeline){@Overridepublic AzArmorBoneContext boneContext() {return new AzArmorBoneContext(){protected AzBone armorLeggingTorsoBone;public AzBone getArmorLeggingTorsoBone(AzBakedModel model) {return model.getBone("newArmorBone").orElse(null);}@Overridepublic void grabRelevantBones(AzBakedModel model, AzArmorBoneProvider boneProvider) {super.grabRelevantBones(model, boneProvider);this.armorLeggingTorsoBone = this.getArmorLeggingTorsoBone(model) ;}@Overridepublic void applyBoneVisibilityBySlot(EquipmentSlot currentSlot) {setAllVisible(false);// Hide the legging torso bone initiallythis.setBoneVisible(this.armorLeggingTorsoBone, false);switch (currentSlot) {case HEAD -> setBoneVisible(this.head, true);case CHEST -> {setBoneVisible(this.body, true);setBoneVisible(this.rightArm, true);setBoneVisible(this.leftArm, true);}case LEGS -> {// Make the legging torso bone visible when the legging armor is equipedthis.setBoneVisible(this.armorLeggingTorsoBone, true);setBoneVisible(this.rightLeg, true);setBoneVisible(this.leftLeg, true);}case FEET -> {setBoneVisible(this.rightBoot, true);setBoneVisible(this.leftBoot, true);}case MAINHAND, OFFHAND -> { /* NO-OP */ }}}};}}}}}
Render 3D Item in GUI instead of 2D texture for Armor
To do this simply call the AzItemRendererRegistry#register()
in your onInitializeClient
for Fabric and FMLClientSetupEvent
for Neoforge/Forge for your ArmorItem
AzItemRendererRegistry.register(CustomHelmetItemRenderer::new, YourItemRegistry.YOUR_ARMOR_HELMET);