diff --git a/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch b/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch index af30b642bf..4944ba0b39 100644 --- a/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch +++ b/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch @@ -60,7 +60,7 @@ return new IllegalStateException("Unregistered creative tab: " + this); }); - this.f_256824_.m_257865_(p_270156_, creativemodetab$itemdisplaybuilder); -+ net.minecraftforge.client.ForgeHooksClient.onCreativeModeTabBuildContents(this, resourcekey, this.f_256824_, p_270156_, creativemodetab$itemdisplaybuilder); ++ net.minecraftforge.common.ForgeHooks.onCreativeModeTabBuildContents(this, resourcekey, this.f_256824_, p_270156_, creativemodetab$itemdisplaybuilder); this.f_243839_ = creativemodetab$itemdisplaybuilder.f_244363_; this.f_243841_ = creativemodetab$itemdisplaybuilder.f_244585_; this.m_257466_(); diff --git a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java index a24f8f64e7..2538da64f0 100644 --- a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java +++ b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java @@ -146,6 +146,7 @@ import net.minecraftforge.client.gui.overlay.GuiOverlayManager; import net.minecraftforge.client.model.data.ModelData; import net.minecraftforge.client.textures.ForgeTextureMetadata; import net.minecraftforge.client.textures.TextureAtlasSpriteLoaderManager; +import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.ForgeI18n; import net.minecraftforge.common.ForgeMod; import net.minecraftforge.common.MinecraftForge; @@ -1201,27 +1202,13 @@ public class ForgeHooksClient return new ResourceLocation(loc.getNamespace(), normalised); } + // Use ForgeHooks.onCreativeModeTabBuildContents() + // since calling this will crash if called on server + @Deprecated(forRemoval = true, since = "1.20.1") public static void onCreativeModeTabBuildContents(CreativeModeTab tab, ResourceKey tabKey, CreativeModeTab.DisplayItemsGenerator originalGenerator, CreativeModeTab.ItemDisplayParameters params, CreativeModeTab.Output output) { - final var entries = new MutableHashedLinkedMap(ItemStackLinkedSet.TYPE_AND_TAG, - (key, left, right) -> { - //throw new IllegalStateException("Accidentally adding the same item stack twice " + key.getDisplayName().getString() + " to a Creative Mode Tab: " + tab.getDisplayName().getString()); - // Vanilla adds enchanting books twice in both visibilities. - // This is just code cleanliness for them. For us lets just increase the visibility and merge the entries. - return CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS; - } - ); - - originalGenerator.accept(params, (stack, vis) -> { - if (stack.getCount() != 1) - throw new IllegalArgumentException("The stack count must be 1"); - entries.put(stack, vis); - }); - - ModLoader.get().postEvent(new BuildCreativeModeTabContentsEvent(tab, tabKey, params, entries)); - - for (var entry : entries) - output.accept(entry.getKey(), entry.getValue()); + // Bounce to ForgeHooks.onCreativeModeBuildContents(...) + ForgeHooks.onCreativeModeTabBuildContents(tab, tabKey, originalGenerator, params, output); } // Make sure the below method is only ever called once (by forge). diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index 6d2c26f908..34dc8a9681 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -134,7 +134,9 @@ import net.minecraftforge.common.util.BlockSnapshot; import net.minecraftforge.common.util.BrainBuilder; import net.minecraftforge.common.util.Lazy; import net.minecraftforge.common.util.MavenVersionStringHelper; +import net.minecraftforge.common.util.MutableHashedLinkedMap; import net.minecraftforge.event.AnvilUpdateEvent; +import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.event.DifficultyChangeEvent; import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.event.GrindstoneEvent; @@ -1604,4 +1606,27 @@ public class ForgeHooks entity.stopRiding(); } } + + public static void onCreativeModeTabBuildContents(CreativeModeTab tab, ResourceKey tabKey, CreativeModeTab.DisplayItemsGenerator originalGenerator, CreativeModeTab.ItemDisplayParameters params, CreativeModeTab.Output output) + { + final var entries = new MutableHashedLinkedMap(ItemStackLinkedSet.TYPE_AND_TAG, + (key, left, right) -> { + //throw new IllegalStateException("Accidentally adding the same item stack twice " + key.getDisplayName().getString() + " to a Creative Mode Tab: " + tab.getDisplayName().getString()); + // Vanilla adds enchanting books twice in both visibilities. + // This is just code cleanliness for them. For us lets just increase the visibility and merge the entries. + return CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS; + } + ); + + originalGenerator.accept(params, (stack, vis) -> { + if (stack.getCount() != 1) + throw new IllegalArgumentException("The stack count must be 1"); + entries.put(stack, vis); + }); + + ModLoader.get().postEvent(new BuildCreativeModeTabContentsEvent(tab, tabKey, params, entries)); + + for (var entry : entries) + output.accept(entry.getKey(), entry.getValue()); + } } \ No newline at end of file