From 1c566142fd9bb184a4496df082875545d54ee321 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sun, 11 Dec 2022 16:12:33 +0800 Subject: [PATCH] Support new Forge's BuildContents event, Fix #365 --- .../forge/CreativeTabRegistryImpl.java | 43 ++++++++++++------- forge/src/main/resources/META-INF/mods.toml | 2 +- gradle.properties | 2 +- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/forge/src/main/java/dev/architectury/registry/forge/CreativeTabRegistryImpl.java b/forge/src/main/java/dev/architectury/registry/forge/CreativeTabRegistryImpl.java index 1ec8191d..151e3168 100644 --- a/forge/src/main/java/dev/architectury/registry/forge/CreativeTabRegistryImpl.java +++ b/forge/src/main/java/dev/architectury/registry/forge/CreativeTabRegistryImpl.java @@ -32,6 +32,7 @@ import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.CreativeModeTabRegistry; +import net.minecraftforge.common.util.MutableHashedLinkedMap; import net.minecraftforge.event.CreativeModeTabEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -60,13 +61,17 @@ public class CreativeTabRegistryImpl { .map(Supplier::get) .toList()); if (keyEntry.getKey() instanceof TabKey.SupplierTabKey supplierTabKey) { - event.register(supplierTabKey.supplier.getName(), (arg, populator, bl) -> { - populator.acceptAll(stacks.get()); - }); + if (Objects.equals(CreativeModeTabRegistry.getName(event.getTab()), supplierTabKey.supplier().getName())) { + for (ItemStack stack : stacks.get()) { + event.getEntries().put(stack, CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); + } + } } else if (keyEntry.getKey() instanceof TabKey.DirectTabKey directTabKey) { - event.register(directTabKey.tab, (arg, populator, bl) -> { - populator.acceptAll(stacks.get()); - }); + if (event.getTab().equals(directTabKey.tab())) { + for (ItemStack stack : stacks.get()) { + event.getEntries().put(stack, CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); + } + } } } }); @@ -176,27 +181,33 @@ public class CreativeTabRegistryImpl { public static void modify(TabSupplier tab, CreativeTabRegistry.ModifyTabCallback filler) { BUILD_CONTENTS_LISTENERS.add(event -> { if (tab.isPresent()) { - event.register(tab.get(), (flags, populator, canUseGameMasterBlocks) -> { - filler.accept(flags, wrapTabOutput(populator), canUseGameMasterBlocks); - }); - } else { - event.register(tab.getName(), (flags, populator, canUseGameMasterBlocks) -> { - filler.accept(flags, wrapTabOutput(populator), canUseGameMasterBlocks); - }); + if (event.getTab().equals(tab.get())) { + filler.accept(event.getFlags(), wrapTabOutput(event.getEntries()), event.hasPermissions()); + } + } else if (Objects.equals(CreativeModeTabRegistry.getName(event.getTab()), tab.getName())) { + filler.accept(event.getFlags(), wrapTabOutput(event.getEntries()), event.hasPermissions()); } }); } - private static CreativeTabOutput wrapTabOutput(CreativeModeTabEvent.CreativeModeTabPopulator populator) { + private static CreativeTabOutput wrapTabOutput(MutableHashedLinkedMap entries) { return new CreativeTabOutput() { @Override public void acceptAfter(ItemStack after, ItemStack stack, CreativeModeTab.TabVisibility visibility) { - populator.accept(stack, visibility, ItemStack.EMPTY, after); + if (after.isEmpty()) { + entries.put(stack, visibility); + } else { + entries.putAfter(after, stack, visibility); + } } @Override public void acceptBefore(ItemStack before, ItemStack stack, CreativeModeTab.TabVisibility visibility) { - populator.accept(stack, visibility, before, ItemStack.EMPTY); + if (before.isEmpty()) { + entries.put(stack, visibility); + } else { + entries.putBefore(before, stack, visibility); + } } }; } diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 0f1666ea..d4086035 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -24,6 +24,6 @@ side = "BOTH" [[dependencies.architectury]] modId = "forge" mandatory = true -versionRange = "[44.0.0,)" +versionRange = "[44.0.6,)" ordering = "NONE" side = "BOTH" diff --git a/gradle.properties b/gradle.properties index 3cdef288..54233fc8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,7 +17,7 @@ fabric_loader_version=0.14.11 fabric_api_version=0.68.1+1.19.3 mod_menu_version=3.1.0 -forge_version=44.0.0 +forge_version=44.0.6 curseforge_id=419699 modrinth_id=lhGA9TYQ