11package generations.gg.generations.core.generationscore.common.world.item.creativetab
22
3+ import com.cobblemon.mod.common.item.group.CobblemonItemGroups
4+ import com.cobblemon.mod.common.item.group.CobblemonItemGroups.Injector
5+ import com.cobblemon.mod.common.item.group.CobblemonItemGroups.ItemGroupHolder
6+ import com.cobblemon.mod.common.util.cobblemonResource
37import generations.gg.generations.core.generationscore.common.GenerationsCore
8+ import generations.gg.generations.core.generationscore.common.generationsResource
49import generations.gg.generations.core.generationscore.common.util.PlatformRegistry
510import generations.gg.generations.core.generationscore.common.world.item.GenerationsItems
611import generations.gg.generations.core.generationscore.common.world.level.block.*
712import net.minecraft.core.Holder
813import net.minecraft.core.registries.BuiltInRegistries
914import net.minecraft.core.registries.Registries
15+ import net.minecraft.network.chat.Component
16+ import net.minecraft.resources.ResourceKey
1017import net.minecraft.world.item.CreativeModeTab
18+ import net.minecraft.world.item.CreativeModeTab.DisplayItemsGenerator
1119import net.minecraft.world.item.ItemStack
1220import net.minecraft.world.level.ItemLike
1321
@@ -17,7 +25,11 @@ import net.minecraft.world.level.ItemLike
1725 * @author WaterPicker
1826 * @see CreativeModeTab
1927 */
20- object GenerationsCreativeTabs: PlatformRegistry<CreativeModeTab>(Registries .CREATIVE_MODE_TAB , BuiltInRegistries .CREATIVE_MODE_TAB ) {
28+
29+ // Design Pattern from Cobblemon.
30+ object GenerationsCreativeTabs {
31+ private val ALL = mutableListOf<ItemGroupHolder >()
32+ private val INJECTORS = mutableMapOf<ResourceKey <CreativeModeTab >, (injector: Injector ) -> Unit > ()
2133
2234 val BUILDING_BLOCKS = createTab(" building_blocks" , { GenerationsBlocks .LIGHT_BLUE_POKE_BRICK_SET .baseBlock.asItem().defaultInstance }, GenerationsWood .WOOD_BLOCKS , GenerationsItems .BLOCK_ITEMS , GenerationsOres , GenerationsItems .BUILDING_BLOCKS )
2335 val RESTORATION = createTab(" restoration" , { GenerationsItems .LEMONADE .value().defaultInstance }, GenerationsItems .RESTORATION )
@@ -35,11 +47,41 @@ object GenerationsCreativeTabs: PlatformRegistry<CreativeModeTab>(Registries.CRE
3547 val UNIMPLEMENTED = createTab(" unimplemented" , { GenerationsItems .ABILITY_URGE .value().defaultInstance }, GenerationsItems .UNIMPLEMENTED )
3648 val SHRINES = createTab(" shrines" , { GenerationsShrines .FROZEN_SHRINE .value().asItem().defaultInstance }, GenerationsShrines )
3749
38- override fun init () {
39- GenerationsCore .LOGGER .info(" Registering Generations Creative Tabs..." )
40- super .init ()
41- GenerationsCore .LOGGER .info(" Registered Generations Creative Tabs!" )
50+ // override fun init() {
51+ // GenerationsCore.LOGGER.info("Registering Generations Creative Tabs...")
52+ // super.init()
53+ // GenerationsCore.LOGGER.info("Registered Generations Creative Tabs!")
54+ // }
55+
56+ fun register (consumer : (holder: ItemGroupHolder ) -> CreativeModeTab ) {
57+ ALL .forEach(consumer::invoke)
4258 }
4359
44- private fun createTab (name : String , suppler : () -> ItemStack , vararg items : PlatformRegistry <out ItemLike >): Holder <CreativeModeTab > = create(name, { GenerationsCore .implementation.create(name, suppler, items) })
60+ fun inject (tabKey : ResourceKey <CreativeModeTab >, injector : Injector ) {
61+ INJECTORS [tabKey]?.invoke(injector)
62+ }
63+
64+ fun injectorKeys (): Collection <ResourceKey <CreativeModeTab >> = this .INJECTORS .keys
65+
66+
67+ data class ItemGroupHolder (
68+ val key : ResourceKey <CreativeModeTab >,
69+ val displayIconProvider : () -> ItemStack ,
70+ val entryCollector : DisplayItemsGenerator ,
71+ val displayName : Component = Component .translatable("itemGroup.${key.location().namespace}.${key.location().path}")
72+ )
73+
74+ private fun createTab (name : String , suppler : () -> ItemStack , vararg items : PlatformRegistry <out ItemLike >): ResourceKey <CreativeModeTab > = create(name, { params, output -> items.flatMap { it.all() }.forEach(output::accept)
75+
76+ }, suppler)
77+
78+ private fun create (name : String , entryCollector : DisplayItemsGenerator , displayIconProvider : () -> ItemStack ): ResourceKey <CreativeModeTab > {
79+ val key = ResourceKey .create(BuiltInRegistries .CREATIVE_MODE_TAB .key(), name.generationsResource())
80+ this .ALL + = ItemGroupHolder (
81+ key,
82+ displayIconProvider,
83+ entryCollector
84+ )
85+ return key
86+ }
4587}
0 commit comments