Skip to content

Commit 91f414a

Browse files
committed
Creative menus work!
1 parent 7deb464 commit 91f414a

File tree

5 files changed

+77
-28
lines changed

5 files changed

+77
-28
lines changed

common/src/main/java/generations/gg/generations/core/generationscore/common/GenerationsCore.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ object GenerationsCore {
189189
GenerationsBlockEntities.init()
190190
GenerationsEntities.init()
191191
GenerationsArmorMaterials.init()
192-
GenerationsCreativeTabs.init()
192+
// GenerationsCreativeTabs.init()
193193
GenerationsContainers.init()
194194
GenerationsCoreRecipeTypes.init()
195195
GenerationsCoreRecipeSerializers.init()

common/src/main/java/generations/gg/generations/core/generationscore/common/GenerationsImplementation.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ interface GenerationsImplementation {
6161

6262
fun <T: Any> registerEntityDataSerializer(name: String, dataSerializer: EntityDataSerializer<T>)
6363
fun <T : AbstractContainerMenu> createExtendedMenu(constructor: (Int, Inventory, FriendlyByteBuf) -> T): () -> MenuType<T>
64-
fun <T: Any> register(register: () -> PlatformRegistry<T>)
6564
fun openExtendedMenu(serverPlayer: ServerPlayer, menuProvider: ExtendedMenuProvider)
6665

6766
fun <T: Any> createRegistry(key: ResourceKey<Registry<T>>, sync: Boolean): Registry<T>

common/src/main/java/generations/gg/generations/core/generationscore/common/world/item/creativetab/GenerationsCreativeTabs.kt

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
11
package 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
37
import generations.gg.generations.core.generationscore.common.GenerationsCore
8+
import generations.gg.generations.core.generationscore.common.generationsResource
49
import generations.gg.generations.core.generationscore.common.util.PlatformRegistry
510
import generations.gg.generations.core.generationscore.common.world.item.GenerationsItems
611
import generations.gg.generations.core.generationscore.common.world.level.block.*
712
import net.minecraft.core.Holder
813
import net.minecraft.core.registries.BuiltInRegistries
914
import net.minecraft.core.registries.Registries
15+
import net.minecraft.network.chat.Component
16+
import net.minecraft.resources.ResourceKey
1017
import net.minecraft.world.item.CreativeModeTab
18+
import net.minecraft.world.item.CreativeModeTab.DisplayItemsGenerator
1119
import net.minecraft.world.item.ItemStack
1220
import 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
}

fabric/src/main/java/generations/gg/generations/core/generationscore/fabric/GenerationsCoreFabric.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package generations.gg.generations.core.generationscore.fabric
22

3+
import com.cobblemon.mod.common.item.group.CobblemonItemGroups
34
import generations.gg.generations.core.generationscore.common.GenerationsCore
45
import generations.gg.generations.core.generationscore.common.GenerationsCore.init
56
import generations.gg.generations.core.generationscore.common.GenerationsCore.initBuiltinPacks
@@ -15,6 +16,7 @@ import generations.gg.generations.core.generationscore.common.util.PlatformRegis
1516
import generations.gg.generations.core.generationscore.common.world.container.ExtendedMenuProvider
1617
import generations.gg.generations.core.generationscore.common.world.feature.GenerationsConfiguredFeatures
1718
import generations.gg.generations.core.generationscore.common.world.feature.GenerationsPlacedFeatures
19+
import generations.gg.generations.core.generationscore.common.world.item.creativetab.GenerationsCreativeTabs
1820
import generations.gg.generations.core.generationscore.fabric.AnvilEvents.AnvilChange
1921
import generations.gg.generations.core.generationscore.fabric.networking.GenerationsFabricNetwork
2022
import generations.gg.generations.core.generationscore.fabric.worldgen.GenerationsFabricBiomemodifiers
@@ -121,6 +123,14 @@ object GenerationsCoreFabric : ModInitializer, GenerationsImplementation, PreLau
121123
return@register InteractionEvents.fireRightClick(player, hand, hitResult.blockPos, hitResult.direction);
122124
})
123125

126+
GenerationsCreativeTabs.register { provider ->
127+
Registry.register(BuiltInRegistries.CREATIVE_MODE_TAB, provider.key, FabricItemGroup.builder()
128+
.title(provider.displayName)
129+
.icon(provider.displayIconProvider)
130+
.displayItems(provider.entryCollector)
131+
.build())
132+
}
133+
124134
AnvilEvents.ANVIL_CHANGE.register(AnvilChange { result, left, right, name, baseCost, player ->
125135
onAnvilChange(
126136
left, right, player,
@@ -157,8 +167,6 @@ object GenerationsCoreFabric : ModInitializer, GenerationsImplementation, PreLau
157167
CompostingChanceRegistry.INSTANCE.add(block, chance)
158168
}
159169

160-
override fun <T : Any> register(register: () -> PlatformRegistry<T>) = register.invoke().init()
161-
162170
@SafeVarargs
163171
override fun create(
164172
name: String,

neoforge/src/main/java/generations/gg/generations/core/generationscore/forge/GenerationsCoreForge.kt

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package generations.gg.generations.core.generationscore.forge
22

33
import com.cobblemon.mod.common.NetworkManager
4+
import com.cobblemon.mod.common.item.group.CobblemonItemGroups
45
import com.google.common.collect.ImmutableMap
56
import com.mojang.datafixers.util.Pair
67
import generations.gg.generations.core.generationscore.common.GenerationsCore
@@ -17,10 +18,12 @@ import generations.gg.generations.core.generationscore.common.util.EntryRegister
1718
import generations.gg.generations.core.generationscore.common.util.PlatformRegistry
1819
import generations.gg.generations.core.generationscore.common.util.extensions.supplier
1920
import generations.gg.generations.core.generationscore.common.world.container.ExtendedMenuProvider
21+
import generations.gg.generations.core.generationscore.common.world.item.creativetab.GenerationsCreativeTabs
2022
import generations.gg.generations.core.generationscore.forge.networking.GenerationsNeoForgeNetworkManager
2123
import net.minecraft.client.Minecraft
2224
import net.minecraft.core.Holder
2325
import net.minecraft.core.Registry
26+
import net.minecraft.core.registries.Registries
2427
import net.minecraft.network.FriendlyByteBuf
2528
import net.minecraft.network.chat.Component
2629
import net.minecraft.network.syncher.EntityDataSerializer
@@ -52,10 +55,7 @@ import net.neoforged.neoforge.event.*
5255
import net.neoforged.neoforge.event.entity.living.LivingEvent.LivingJumpEvent
5356
import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent
5457
import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent.EntityInteract
55-
import net.neoforged.neoforge.registries.DeferredRegister
56-
import net.neoforged.neoforge.registries.NeoForgeRegistries
57-
import net.neoforged.neoforge.registries.NewRegistryEvent
58-
import net.neoforged.neoforge.registries.RegistryBuilder
58+
import net.neoforged.neoforge.registries.*
5959
import thedarkcolour.kotlinforforge.neoforge.forge.MOD_BUS
6060
import java.util.*
6161
import java.util.function.Consumer
@@ -101,6 +101,20 @@ class GenerationsCoreForge(bus: IEventBus) : GenerationsImplementation {
101101
addListener<NewRegistryEvent> { event ->
102102
registries.forEach { event.register(it) }
103103
}
104+
105+
addListener<RegisterEvent> { event ->
106+
event.register(Registries.CREATIVE_MODE_TAB) { helper ->
107+
GenerationsCreativeTabs.register { holder ->
108+
val itemGroup = CreativeModeTab.builder()
109+
.title(holder.displayName)
110+
.icon(holder.displayIconProvider)
111+
.displayItems(holder.entryCollector)
112+
.build()
113+
helper.register(holder.key, itemGroup)
114+
itemGroup
115+
}
116+
}
117+
}
104118
}
105119

106120
init(this)
@@ -147,20 +161,6 @@ class GenerationsCoreForge(bus: IEventBus) : GenerationsImplementation {
147161
if (ModList.get().isLoaded("impactor")) ImpactorCompat.init()
148162
}
149163

150-
override fun <T: Any> register(register: () -> PlatformRegistry<T>) {
151-
// with(MOD_BUS) {
152-
// this.addListener<RegisterEvent> { event ->
153-
// val platform = register.invoke()
154-
//
155-
// if(event.registryKey.equals(platform.resourceKey)) {
156-
// event.register(platform.resourceKey) { helper ->
157-
// platform.init()
158-
// }
159-
// }
160-
// }
161-
// }
162-
}
163-
164164
override fun registerStrippable(log: Holder<out Block>, stripped: Holder<out Block>) {
165165
require(
166166
log.value().defaultBlockState().hasProperty(RotatedPillarBlock.AXIS)

0 commit comments

Comments
 (0)