From 0e51f44c05ba43e465df6537db868d0b4b486cfe Mon Sep 17 00:00:00 2001 From: Patbox <39821509+Patbox@users.noreply.github.com> Date: Sat, 8 Feb 2025 20:35:23 +0100 Subject: [PATCH 1/2] Add method for overriding modelId in item settings --- .../fabric/api/item/v1/FabricItem.java | 11 ++++++ .../fabric/mixin/item/ItemSettingsMixin.java | 11 ++++++ .../fabric/test/item/CustomModelIdTest.java | 36 +++++++++++++++++++ .../src/testmod/resources/fabric.mod.json | 1 + 4 files changed, 59 insertions(+) create mode 100644 fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/CustomModelIdTest.java diff --git a/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/api/item/v1/FabricItem.java b/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/api/item/v1/FabricItem.java index 94e29787aa..f8cbeb6e37 100644 --- a/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/api/item/v1/FabricItem.java +++ b/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/api/item/v1/FabricItem.java @@ -22,6 +22,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.util.Hand; +import net.minecraft.util.Identifier; import net.fabricmc.fabric.impl.item.FabricItemInternals; @@ -143,5 +144,15 @@ default Item.Settings customDamage(CustomDamageHandler handler) { FabricItemInternals.computeExtraData((Item.Settings) this).customDamage(handler); return (Item.Settings) this; } + + /** + * Sets the model of the item to static Identifier. + * + * @param modelId the model id item should use + * @return this builder + */ + default Item.Settings modelId(Identifier modelId) { + return (Item.Settings) this; + } } } diff --git a/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/mixin/item/ItemSettingsMixin.java b/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/mixin/item/ItemSettingsMixin.java index d186844bb4..56552db606 100644 --- a/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/mixin/item/ItemSettingsMixin.java +++ b/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/mixin/item/ItemSettingsMixin.java @@ -17,11 +17,22 @@ package net.fabricmc.fabric.mixin.item; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import net.minecraft.item.Item; +import net.minecraft.registry.RegistryKeyedValue; +import net.minecraft.util.Identifier; import net.fabricmc.fabric.api.item.v1.FabricItem; @Mixin(Item.Settings.class) public class ItemSettingsMixin implements FabricItem.Settings { + @Shadow + private RegistryKeyedValue modelId; + + @Override + public Item.Settings modelId(Identifier modelId) { + this.modelId = RegistryKeyedValue.fixed(modelId); + return FabricItem.Settings.super.modelId(modelId); + } } diff --git a/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/CustomModelIdTest.java b/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/CustomModelIdTest.java new file mode 100644 index 0000000000..808693f48e --- /dev/null +++ b/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/CustomModelIdTest.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.fabric.test.item; + +import net.fabricmc.api.ModInitializer; + +import net.minecraft.item.*; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.util.Identifier; + +public class CustomModelIdTest implements ModInitializer { + public static final RegistryKey NOT_A_DIAMOND_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of("fabric-item-api-v1-testmod", "not_a_diamond")); + public static final Item NOT_A_DIAMOND = new Item(new Item.Settings().registryKey(NOT_A_DIAMOND_KEY).modelId(Identifier.ofVanilla("diamond"))); + + @Override + public void onInitialize() { + Registry.register(Registries.ITEM, NOT_A_DIAMOND_KEY, NOT_A_DIAMOND); + } +} diff --git a/fabric-item-api-v1/src/testmod/resources/fabric.mod.json b/fabric-item-api-v1/src/testmod/resources/fabric.mod.json index e56615d394..77d88a1a0f 100644 --- a/fabric-item-api-v1/src/testmod/resources/fabric.mod.json +++ b/fabric-item-api-v1/src/testmod/resources/fabric.mod.json @@ -12,6 +12,7 @@ "main": [ "net.fabricmc.fabric.test.item.CustomDamageTest", "net.fabricmc.fabric.test.item.DefaultItemComponentTest", + "net.fabricmc.fabric.test.item.CustomModelIdTest", "net.fabricmc.fabric.test.item.ItemUpdateAnimationTest", "net.fabricmc.fabric.test.item.ArmorKnockbackResistanceTest", "net.fabricmc.fabric.test.item.CustomEnchantmentEffectsTest" From 66e04f70dfa6bb8bfba557a2bbd09f2a8be5bf3c Mon Sep 17 00:00:00 2001 From: Patbox <39821509+Patbox@users.noreply.github.com> Date: Sat, 8 Feb 2025 21:04:51 +0100 Subject: [PATCH 2/2] Fix checkstyle --- .../net/fabricmc/fabric/test/item/CustomModelIdTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/CustomModelIdTest.java b/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/CustomModelIdTest.java index 808693f48e..8e478ddfe1 100644 --- a/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/CustomModelIdTest.java +++ b/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/CustomModelIdTest.java @@ -16,15 +16,15 @@ package net.fabricmc.fabric.test.item; -import net.fabricmc.api.ModInitializer; - -import net.minecraft.item.*; +import net.minecraft.item.Item; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKeys; import net.minecraft.util.Identifier; +import net.fabricmc.api.ModInitializer; + public class CustomModelIdTest implements ModInitializer { public static final RegistryKey NOT_A_DIAMOND_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of("fabric-item-api-v1-testmod", "not_a_diamond")); public static final Item NOT_A_DIAMOND = new Item(new Item.Settings().registryKey(NOT_A_DIAMOND_KEY).modelId(Identifier.ofVanilla("diamond")));