package dev.zxq5.items import dev.zxq5.Fantasysmp import dev.zxq5.items.core.GenericGearSet import dev.zxq5.items.core.GenericItemSet import net.fabricmc.fabric.api.creativetab.v1.FabricCreativeModeTab import net.minecraft.core.Registry import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.core.registries.Registries import net.minecraft.network.chat.Component import net.minecraft.resources.Identifier import net.minecraft.resources.ResourceKey import net.minecraft.world.item.CreativeModeTab import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack object ModItems { fun register( name: String, itemFactory: (Item.Properties) -> T, settings: Item.Properties ): T { val itemKey = ResourceKey.create(Registries.ITEM, Identifier.fromNamespaceAndPath(Fantasysmp.MOD_ID, name)) val item = itemFactory(settings.setId(itemKey)) Registry.register(BuiltInRegistries.ITEM, itemKey, item) return item } val CUSTOM_CREATIVE_TAB_KEY: ResourceKey = ResourceKey.create( BuiltInRegistries.CREATIVE_MODE_TAB.key(), Identifier.fromNamespaceAndPath(Fantasysmp.MOD_ID, "creative_tab") ) val CUSTOM_CREATIVE_TAB: CreativeModeTab = FabricCreativeModeTab.builder() .icon { ItemStack(Witherite.SWORD) } .title(Component.translatable("Fantasysmp")) .displayItems { _, output -> GenericItemSet.all.forEach { it.items.forEach(output::accept) } } .build() private val eagerLoad = listOf( Witherite, Dragonite, ) fun onLoad() { // ensure that implementations such as creative tab are loaded and initialised eagerLoad GenericItemSet.all.forEach { it.onLoad() } Registry.register(BuiltInRegistries.CREATIVE_MODE_TAB, CUSTOM_CREATIVE_TAB_KEY, CUSTOM_CREATIVE_TAB); } }