11package at.petrak.hexcasting.fabric
22
3- import at.petrak.hexcasting.api.HexAPI
43import at.petrak.hexcasting.api.HexAPI.modLoc
54import at.petrak.hexcasting.api.addldata.ADMediaHolder
65import at.petrak.hexcasting.api.advancements.HexAdvancementTriggers
6+ import at.petrak.hexcasting.api.casting.ActionRegistryEntry
77import at.petrak.hexcasting.api.casting.iota.DoubleIota
8+ import at.petrak.hexcasting.api.item.HexHolderItem
9+ import at.petrak.hexcasting.api.item.IotaHolderItem
10+ import at.petrak.hexcasting.api.item.PigmentItem
11+ import at.petrak.hexcasting.api.item.VariantItem
812import at.petrak.hexcasting.api.misc.MediaConstants
913import at.petrak.hexcasting.api.mod.HexConfig
1014import at.petrak.hexcasting.api.mod.HexStatistics
15+ import at.petrak.hexcasting.api.mod.HexTags
16+ import at.petrak.hexcasting.api.utils.isOfTag
1117import at.petrak.hexcasting.common.blocks.behavior.HexComposting
1218import at.petrak.hexcasting.common.blocks.behavior.HexStrippables
1319import at.petrak.hexcasting.common.casting.PatternRegistryManifest
@@ -16,6 +22,7 @@ import at.petrak.hexcasting.common.casting.actions.spells.great.OpAltiora
1622import at.petrak.hexcasting.common.command.PatternResKeyArgument
1723import at.petrak.hexcasting.common.entities.HexEntities
1824import at.petrak.hexcasting.common.items.ItemJewelerHammer
25+ import at.petrak.hexcasting.common.items.storage.ItemScroll
1926import at.petrak.hexcasting.common.lib.*
2027import at.petrak.hexcasting.common.lib.hex.*
2128import at.petrak.hexcasting.common.misc.AkashicTreeGrower
@@ -26,13 +33,19 @@ import at.petrak.hexcasting.common.recipe.HexRecipeStuffRegistry
2633import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredients
2734import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredients
2835import at.petrak.hexcasting.fabric.cc.HexCardinalComponents
36+ import at.petrak.hexcasting.fabric.cc.adimpl.CCHexHolder
37+ import at.petrak.hexcasting.fabric.cc.adimpl.CCIotaHolder
38+ import at.petrak.hexcasting.fabric.cc.adimpl.CCItemIotaHolder
2939import at.petrak.hexcasting.fabric.cc.adimpl.CCMediaHolder
40+ import at.petrak.hexcasting.fabric.cc.adimpl.CCPigment
41+ import at.petrak.hexcasting.fabric.cc.adimpl.CCVariantItem
3042import at.petrak.hexcasting.fabric.event.VillagerConversionCallback
3143import at.petrak.hexcasting.fabric.loot.FabricHexLootModJankery
3244import at.petrak.hexcasting.fabric.network.FabricPacketHandler
3345import at.petrak.hexcasting.fabric.recipe.FabricModConditionalIngredient
3446import at.petrak.hexcasting.fabric.recipe.FabricUnsealedIngredient
3547import at.petrak.hexcasting.fabric.storage.FabricImpetusStorage
48+ import at.petrak.hexcasting.fabric.xplat.FabricXplatImpl
3649import at.petrak.hexcasting.interop.HexInterop
3750import at.petrak.hexcasting.xplat.IXplatAbstractions
3851import net.fabricmc.api.ModInitializer
@@ -46,20 +59,26 @@ import net.fabricmc.fabric.api.event.player.UseEntityCallback
4659import net.fabricmc.fabric.api.item.v1.DefaultItemComponentEvents
4760import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents
4861import net.fabricmc.fabric.api.loot.v3.LootTableEvents
62+ import net.fabricmc.fabric.api.`object`.builder.v1.entity.FabricDefaultAttributeRegistry
4963import net.fabricmc.fabric.api.recipe.v1.ingredient.CustomIngredientSerializer
5064import net.fabricmc.fabric.api.registry.FlammableBlockRegistry
5165import net.minecraft.commands.synchronization.SingletonArgumentInfo
5266import net.minecraft.core.Registry
5367import net.minecraft.core.registries.BuiltInRegistries
68+ import net.minecraft.resources.ResourceKey
5469import net.minecraft.resources.ResourceLocation
5570import net.minecraft.world.InteractionResult
71+ import net.minecraft.world.entity.EntityType
5672import net.minecraft.world.entity.player.Player
73+ import net.minecraft.world.item.Item
74+ import net.minecraft.world.item.ItemStack
5775import net.minecraft.world.item.Items
5876import net.minecraft.world.level.block.Blocks
5977import net.minecraft.world.level.block.state.properties.BlockSetType
6078import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction
6179import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator
6280import java.util.function.BiConsumer
81+ import java.util.function.Function
6382
6483object FabricHexInitializer : ModInitializer {
6584 lateinit var CONFIG : FabricHexConfig
@@ -132,30 +151,56 @@ object FabricHexInitializer : ModInitializer {
132151 }
133152 }
134153
135- ItemGroupEvents .MODIFY_ENTRIES_ALL .register { tab, entries ->
136- HexBlocks .registerBlockCreativeTab(entries::accept, tab)
137- HexItems .registerItemCreativeTab(entries, tab)
154+ ItemGroupEvents .modifyEntriesEvent(HexCreativeTabs .SCROLLS_KEY ).register { r ->
155+ val keyList = ArrayList <ResourceKey <ActionRegistryEntry ?>? > ()
156+ val regi = FabricXplatImpl .INSTANCE .getActionRegistry()
157+ for (key in regi.registryKeySet()) if (isOfTag<ActionRegistryEntry ?>(
158+ regi,
159+ key,
160+ HexTags .Actions .PER_WORLD_PATTERN
161+ )
162+ ) keyList.add(key)
163+ keyList.sortWith(Comparator .comparing<ResourceKey <ActionRegistryEntry ?>? , ResourceLocation ? > (Function { obj: ResourceKey <ActionRegistryEntry ?>? -> obj!! .location() }))
164+ for (key in keyList) {
165+ r.accept(
166+ ItemScroll .withPerWorldPattern(
167+ ItemStack (HexItems .SCROLL_LARGE ),
168+ key
169+ )
170+ )
171+ }
172+ }
173+ ItemGroupEvents .modifyEntriesEvent(HexCreativeTabs .HEX_KEY ).register { r ->
174+ for (item in this .itemsToAddToCreativeTab) {
175+ r.accept(item)
176+ }
138177 }
139178 }
140179
141180 private fun initRegistries () {
142- fabricOnlyRegistration()
143-
144181 HexBlockSetTypes .registerBlocks(BlockSetType ::register)
145182
146183 HexCreativeTabs .registerCreativeTabs(bind(BuiltInRegistries .CREATIVE_MODE_TAB ))
147184
148185 HexSounds .registerSounds(bind(BuiltInRegistries .SOUND_EVENT ))
149186 HexBlocks .registerBlocks(bind(BuiltInRegistries .BLOCK ))
150- HexBlocks .registerBlockItems(bind( BuiltInRegistries . ITEM ) )
187+ HexBlocks .registerBlockItems(boundForItem )
151188 HexBlockEntities .registerTiles(bind(BuiltInRegistries .BLOCK_ENTITY_TYPE ))
152- HexItems .registerItems(bind( BuiltInRegistries . ITEM ) )
189+ HexItems .registerItems(boundForItem )
153190 // Registry.register(IngredientDeserializer.REGISTRY, FabricModConditionalIngredient.ID, FabricModConditionalIngredient.Deserializer.INSTANCE)
154191 CustomIngredientSerializer .register(FabricUnsealedIngredient .Serializer .INSTANCE );
155192 CustomIngredientSerializer .register(FabricModConditionalIngredient .Serializer .INSTANCE );
156193
157194 HexEntities .registerEntities(bind(BuiltInRegistries .ENTITY_TYPE ))
158195 HexAttributes .register()
196+ FabricDefaultAttributeRegistry .register(EntityType .PLAYER ,
197+ Player .createAttributes()
198+ .add(HexAttributes .GRID_ZOOM )
199+ .add(HexAttributes .SCRY_SIGHT )
200+ .add(HexAttributes .FEEBLE_MIND )
201+ .add(HexAttributes .AMBIT_RADIUS )
202+ .add(HexAttributes .MEDIA_CONSUMPTION_MODIFIER )
203+ .add(HexAttributes .SENTINEL_RADIUS ))
159204 HexMobEffects .register(bind(BuiltInRegistries .MOB_EFFECT ))
160205 HexPotions .registerPotions(bind(BuiltInRegistries .POTION ))
161206 HexDataComponents .registerDataComponents(bind(BuiltInRegistries .DATA_COMPONENT_TYPE ))
@@ -186,6 +231,8 @@ object FabricHexInitializer : ModInitializer {
186231 butYouCouldBeFire()
187232
188233 HexStatistics .register()
234+
235+ fabricOnlyRegistration()
189236 }
190237
191238 // sorry lex (not sorry)
@@ -196,6 +243,29 @@ object FabricHexInitializer : ModInitializer {
196243 })
197244 }
198245
246+ for (item in BuiltInRegistries .ITEM ) {
247+ if (item is PigmentItem ) {
248+ HexCardinalComponents .PIGMENT_ITEM_LOOKUP .registerForItems({
249+ item, _ -> CCPigment .ItemBased (item);
250+ }, item)
251+ }
252+ if (item is IotaHolderItem ) {
253+ HexCardinalComponents .IOTA_HOLDER_LOOKUP .registerForItems({
254+ item, _ -> CCItemIotaHolder .ItemBased (item);
255+ }, item)
256+ }
257+ if (item is HexHolderItem ) {
258+ HexCardinalComponents .HEX_HOLDER_LOOKUP .registerForItems({
259+ item, _ -> CCHexHolder .ItemBased (item);
260+ }, item)
261+ }
262+ if (item is VariantItem ) {
263+ HexCardinalComponents .VARIANT_ITEM_LOOKUP .registerForItems({
264+ item, _ -> CCVariantItem .ItemBased (item);
265+ }, item)
266+ }
267+ }
268+
199269 HexCardinalComponents .MEDIA_HOLDER_LOOKUP .registerForItems({
200270 stack, _ -> CCMediaHolder .Static ({ HexConfig .common().dustMediaAmount() }, ADMediaHolder .AMETHYST_DUST_PRIORITY , stack)
201271 }, HexItems .AMETHYST_DUST )
@@ -217,6 +287,14 @@ object FabricHexInitializer : ModInitializer {
217287 }, HexBlocks .QUENCHED_ALLAY .asItem())
218288 }
219289
290+ private val itemsToAddToCreativeTab : MutableSet <Item > = mutableSetOf ()
291+
292+ private val boundForItem : BiConsumer <Item , ResourceLocation > = BiConsumer {
293+ t, id -> this .itemsToAddToCreativeTab.add(t)
294+ Registry .register(BuiltInRegistries .ITEM , id, t)
295+ }
296+
297+
220298 private fun butYouCouldBeFire () {
221299 val flameOn = FlammableBlockRegistry .getDefaultInstance()
222300 for (log in listOf (
0 commit comments