User Tools

Site Tools


tutorial:shield

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
tutorial:shield [2025/06/18 05:21] cringestar_boitutorial:shield [2025/06/21 18:39] (current) – updated to 1.21.4 cringestar_boi
Line 1: Line 1:
-====== Making a Custom Shield in Minecraft [1.19-1.21.3] ======+====== Making a Custom Shield in Minecraft [1.19-1.21.4] ======
 :!: The tutorial depends on third-party libraries. :!: The tutorial depends on third-party libraries.
  
Line 16: Line 16:
 **gradle.properties** **gradle.properties**
 <file properties gradle.properties> <file properties gradle.properties>
-fabric_shield_lib_version=1.8.0-pre1-1.21.3 +fabric_shield_lib_version=1.8.0-1.21.4 
-mod_menu_version=12.0.0-beta.1 +mod_menu_version=13.0.0 
-midnightlib_version=1.6.4-fabric+midnightlib_version=1.6.6-fabric
 fabricasm_version=2.3 fabricasm_version=2.3
 </file> </file>
Line 31: Line 31:
  
 At the time of writing, these are the most up-to-date FabricShieldLib versions: At the time of writing, these are the most up-to-date FabricShieldLib versions:
 +  * **1.21.4** (''1.8.0-1.21.4'')
   * **1.21.2** - **1.21.3** (''1.8.0-pre1-1.21.3'')   * **1.21.2** - **1.21.3** (''1.8.0-pre1-1.21.3'')
   * **1.21** - **1.21.1** (''1.7.2-1.21.1'')   * **1.21** - **1.21.1** (''1.7.2-1.21.1'')
Line 70: Line 71:
 <yarncode java ExampleMod> <yarncode java ExampleMod>
 public class ExampleMod implements ModInitializer { public class ExampleMod implements ModInitializer {
 +    ...
     @Override     @Override
     public void onInitialize() {     public void onInitialize() {
 +        ...
         ItemGroupEvents.modifyEntriesEvent(ItemGroups.COMBAT).register(entries -> {         ItemGroupEvents.modifyEntriesEvent(ItemGroups.COMBAT).register(entries -> {
             entries.add(NETHERITE_SHIELD);             entries.add(NETHERITE_SHIELD);
         });         });
 +        ...
     }     }
 +    ...
 } }
 </yarncode> </yarncode>
Line 91: Line 96:
 <file javascript resources/assets/tutorial/models/item/netherite_shield.json> <file javascript resources/assets/tutorial/models/item/netherite_shield.json>
 { {
-    "parent":"fabricshieldlib:item/fabric_shield", +  "parent":"fabricshieldlib:item/fabric_shield", 
-    "textures":+  "textures":
-        "shield":"tutorial:item/netherite_shield" +    "shield":"tutorial:item/netherite_shield" 
-    }+  }
-    "overrides":+
-        { +
-            "predicate":+
-                "blocking":+
-            }, +
-            "model": "tutorial:item/netherite_shield_blocking" +
-        } +
-    ]+
 } }
 </file>  </file> 
Line 256: Line 253:
 </code> </code>
  
-Finally, we are going to register our shield with the ''BuiltinItemRendererRegistry'',+Finally, we will want to go back to our item and add a component to it to store its model information like so: 
 <code java> <code java>
-@Environment(EnvType.CLIENT+ public static final Item NETHERITE_BANNER_SHIELD = register("netherite_banner_shield", 
-public class ExampleModClient implements ClientModInitializer { + settings -> new FabricBannerShieldItem(settings,10, 13, Items.NETHERITE_INGOT), // FabricBannerShieldItem(settings.maxDamage(durability), cooldownTicks, enchantability, repairItem
- public static final EntityModelLayer netherite_banner_shield_model_layer = new EntityModelLayer(Identifier.of("tutorial""netherite_banner_shield"),"main");+ new Item.Settings().maxDamage(2500).component(FabricShieldLib.MODEL_COMPONENT, 
 + new FabricShieldModelComponent( 
 + ExampleModClient.NETHERITE_BANNER_SHIELD_BASE.getTextureId()//Your base texture, from the client initializer 
 + ExampleModClient.NETHERITE_BANNER_SHIELD_BASE_NO_PATTERN.getTextureId(), //Your no-pattern texture, from the client initializer 
 + ExampleModClient.netherite_banner_shield_model_layer.toString() // Your model layer, from the client initializer 
 + )));
  
- public static ShieldEntityModel modelNetheriteShield; 
- 
- public static final SpriteIdentifier NETHERITE_BANNER_SHIELD_BASE = new SpriteIdentifier(SpriteAtlasTexture.BLOCK_ATLAS_TEXTURE, Identifier.of("tutorial", "entity/netherite_banner_shield_base")); 
- public static final SpriteIdentifier NETHERITE_BANNER_SHIELD_BASE_NO_PATTERN = new SpriteIdentifier(SpriteAtlasTexture.BLOCK_ATLAS_TEXTURE, Identifier.of("tutorial", "entity/netherite_banner_shield_base_nopattern")); 
- 
- @Override 
- public void onInitializeClient() { 
-            EntityModelLayerRegistry.registerModelLayer(NETHERITE_SHIELD_MODEL_LAYER, ShieldEntityModel::getTexturedModelData); 
-         
-            ShieldSetModelCallback.EVENT.register((loader) -> { 
-         modelNetheriteShield = new ShieldEntityModel(loader.getModelPart(netherite_banner_shield_model_layer)); 
-         return ActionResult.PASS; 
-     }); 
-  
-            BuiltinItemRendererRegistry.INSTANCE.register(ExampleMod.NETHERITE_BANNER_SHIELD, (stack, mode, matrices, vertexConsumers, light, overlay) -> { 
- renderBanner(stack, matrices, vertexConsumers, light, overlay, modelNetheriteShield, NETHERITE_BANNER_SHIELD_BASE, NETHERITE_BANNER_SHIELD_BASE_NO_PATTERN); 
-                //The first five parameters are taken from the method, while the last 3 you provide yourself. You will provide the model, and then your 2 sprite identifiers in the order of SHIELD_NAME_BASE and then SHIELD_NAME_BASE_NOPATTERN. 
-     }); 
- } 
-} 
 </code> </code>
 +
  
 That is all of our code done, we only have a few json files to make. That is all of our code done, we only have a few json files to make.
Line 303: Line 287:
  
 Next, inside ''resources/assets/tutorial/models/item/'', create a ''netherite_banner_shield.json'' file and put this inside it: Next, inside ''resources/assets/tutorial/models/item/'', create a ''netherite_banner_shield.json'' file and put this inside it:
-<code javascript resources/assets/tutorial/models/item/etherite_banner_shield.json>+<code javascript resources/assets/tutorial/models/item/netherite_banner_shield.json>
 { {
-  "parent":"fabricshieldlib:item/fabric_banner_shield"+  "parent":"fabricshieldlib:item/fabric_banner_shield"
-  "overrides":+
-    { +
-      "predicate":+
-        "blocking":+
-      }, +
-      "model": "tutorial:item/netherite_banner_shield_blocking" +
-    } +
-  ]+
 } }
 </code> </code>
  
 In the same folder, create another file, ''netherite_banner_shield_blocking.json'', and put his inside it:  In the same folder, create another file, ''netherite_banner_shield_blocking.json'', and put his inside it: 
-<code javascript resources/assets/tutorial/models/item/etherite_banner_shield_blocking.json>+<code javascript resources/assets/tutorial/models/item/netherite_banner_shield_blocking.json>
 { {
-  "parent":"fabricshieldlib:item/fabric_banner_shield_blocking"+  "parent":"fabricshieldlib:item/fabric_banner_shield_blocking"
-  "textures":+
-    "shield":"tutorial:item/netherite_banner_shield" +
-  }+
 } }
 </code> </code>
Line 376: Line 349:
  
 And now your shield is fully completed and supports banner decoration! And now your shield is fully completed and supports banner decoration!
 +===== Changes for 1.21.3 =====
 +If you are working in 1.21.3, **follow the changes for all higher versions first**, then change the FabricShieldLib and FAPI versions accordingly and change your other dependencies to these versions:\\
 +
 +<file properties gradle.properties>
 +mod_menu_version=12.0.0-beta.1
 +midnightlib_version=1.6.4-fabric
 +</file>
 +
 +Next, remove the ''FabricShieldLib.MODEL_COMPONENT'' from your shields. Then, you will want to register your shield with the ''BuiltinItemRendererRegistry'':
 +
 +<code java>
 +...
 +import static com.github.crimsondawn45.fabricshieldlib.initializers.FabricShieldLibClient.renderBanner;
 +...
 +public class ExampleModClient implements ClientModInitializer {
 + ...
 + @Override
 + public void onInitializeClient() {
 +                ...
 + BuiltinItemRendererRegistry.INSTANCE.register(ExampleMod.NETHERITE_BANNER_SHIELD, (stack, mode, matrices, vertexConsumers, light, overlay) -> {
 + renderBanner(stack, matrices, vertexConsumers, light, overlay, modelNetheriteShield, NETHERITE_BANNER_SHIELD_BASE, NETHERITE_BANNER_SHIELD_BASE_NO_PATTERN);
 + //The first five parameters are taken from the method, while the last 3 you provide yourself. 
 + //You will provide the model, and then your 2 sprite identifiers in the order of SHIELD_NAME_BASE and then SHIELD_NAME_BASE_NOPATTERN.
 + });
 + ...
 + }
 +        ...
 +}
 +</code>
 +
 +Finally, change the following models to these formats: (netherite_shield_blocking.json will be unchanged)
 +
 +<file javascript resources/assets/tutorial/models/item/netherite_shield.json>
 +{
 +    "parent":"fabricshieldlib:item/fabric_shield",
 +    "textures":{
 +        "shield":"tutorial:item/netherite_shield"
 +    },
 +    "overrides": [
 +        {
 +            "predicate": {
 +                "blocking": 1
 +            },
 +            "model": "tutorial:item/netherite_shield_blocking"
 +        }
 +    ]
 +}
 +</file> 
 +
 +<code javascript resources/assets/tutorial/models/item/etherite_banner_shield.json>
 +{
 +  "parent":"fabricshieldlib:item/fabric_banner_shield",
 +  "overrides": [
 +    {
 +      "predicate": {
 +        "blocking": 1
 +      },
 +      "model": "tutorial:item/netherite_banner_shield_blocking"
 +    }
 +  ]
 +}
 +</code>
 +
 +<code javascript resources/assets/tutorial/models/item/etherite_banner_shield_blocking.json>
 +{
 +  "parent":"fabricshieldlib:item/fabric_banner_shield_blocking",
 +  "textures":{
 +    "shield":"tutorial:item/netherite_banner_shield"
 +  }
 +}
 +</code>
  
 ===== Changes for 1.21.1 ===== ===== Changes for 1.21.1 =====
-If you are working in 1.21.1, first change the FabricShieldLib and FAPI versions accordingly and change your other dependencies to these versions:\\+If you are working in 1.21.1, **follow the changes for all higher versions first**, then change the FabricShieldLib and FAPI versions accordingly and change your other dependencies to these versions:\\
  
 <file properties gradle.properties> <file properties gradle.properties>
-midnightlib_version=1.5.8-fabric 
 mod_menu_version=11.0.1 mod_menu_version=11.0.1
 +midnightlib_version=1.5.8-fabric
 </file> </file>
  
Line 396: Line 440:
  
 ===== Changes for 1.20.6 ===== ===== Changes for 1.20.6 =====
-If you are working in 1.20.6, first change the FabricShieldLib and FAPI versions accordingly and change your other dependencies to these versions:\\+If you are working in 1.20.6, **follow the changes for all higher versions first**, then change the FabricShieldLib and FAPI versions accordingly and change your other dependencies to these versions:\\
  
 <file properties gradle.properties> <file properties gradle.properties>
Line 410: Line 454:
  
 ===== Changes for 1.20.4 ===== ===== Changes for 1.20.4 =====
-If you are working in 1.20.4, **follow the changes for 1.20.6 first**, then change the FabricShieldLib and FAPI versions accordingly and change your other dependencies to these versions:\\+If you are working in 1.20.4, **follow the changes for all higher versions first**, then change the FabricShieldLib and FAPI versions accordingly and change your other dependencies to these versions:\\
  
 **gradle.properties** **gradle.properties**
Line 419: Line 463:
  
 Additionally, **remove the** ''durability.json'' **file** completely. Additionally, **remove the** ''durability.json'' **file** completely.
 +
 +===== Changes for 1.20.1 =====
 +If you are working in 1.20.1, **follow the changes for all higher versions first**, then change the FabricShieldLib and FAPI versions accordingly and change your other dependencies to these versions:\\
 +
 +**gradle.properties**
 +<file properties gradle.properties>
 +midnightlib_version=1.4.1-fabric
 +mod_menu_version=7.1.0
 +</file>
  
 ===== Changes for 1.19 ===== ===== Changes for 1.19 =====
-If you are working in 1.19, **follow the changes for 1.20.6 and 1.20.4 first**, then change the FabricShieldLib and FAPI versions accordingly and change your other dependencies to these versions:\\+If you are working in 1.19, **follow the changes for all higher versions first**, then change the FabricShieldLib and FAPI versions accordingly and change your other dependencies to these versions:\\
  
 **gradle.properties** **gradle.properties**
Line 428: Line 481:
 mod_menu_version=4.2.0-beta.2 mod_menu_version=4.2.0-beta.2
 </file> </file>
 +
tutorial/shield.1750224086.txt.gz · Last modified: 2025/06/18 05:21 by cringestar_boi