package net.minecraft.world.item;

import com.mojang.datafixers.util.Pair;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import javax.annotation.Nullable;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.Registry;
import net.minecraft.core.component.DataComponents;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.nbt.NbtOps;
import net.minecraft.nbt.Tag;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.RegistryOps;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.InstrumentTags;
import net.minecraft.tags.PaintingVariantTags;
import net.minecraft.tags.TagKey;
import net.minecraft.world.entity.decoration.PaintingVariant;
import net.minecraft.world.entity.raid.Raid;
import net.minecraft.world.flag.FeatureFlagSet;
import net.minecraft.world.item.alchemy.Potion;
import net.minecraft.world.item.alchemy.PotionContents;
import net.minecraft.world.item.component.Fireworks;
import net.minecraft.world.item.component.OminousBottleAmplifier;
import net.minecraft.world.item.enchantment.Enchantment;
import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.item.enchantment.EnchantmentInstance;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.LightBlock;
import net.minecraft.world.level.block.SuspiciousEffectHolder;
import net.minecraft.world.level.block.TestBlock;
import net.minecraft.world.level.block.state.properties.TestBlockMode;

public class CreativeModeTabs {
    private static final ResourceLocation INVENTORY_BACKGROUND = CreativeModeTab.createTextureLocation("inventory");
    private static final ResourceLocation SEARCH_BACKGROUND = CreativeModeTab.createTextureLocation("item_search");
    private static final ResourceKey<CreativeModeTab> BUILDING_BLOCKS = createKey("building_blocks");
    private static final ResourceKey<CreativeModeTab> COLORED_BLOCKS = createKey("colored_blocks");
    private static final ResourceKey<CreativeModeTab> NATURAL_BLOCKS = createKey("natural_blocks");
    private static final ResourceKey<CreativeModeTab> FUNCTIONAL_BLOCKS = createKey("functional_blocks");
    private static final ResourceKey<CreativeModeTab> REDSTONE_BLOCKS = createKey("redstone_blocks");
    private static final ResourceKey<CreativeModeTab> HOTBAR = createKey("hotbar");
    private static final ResourceKey<CreativeModeTab> SEARCH = createKey("search");
    private static final ResourceKey<CreativeModeTab> TOOLS_AND_UTILITIES = createKey("tools_and_utilities");
    private static final ResourceKey<CreativeModeTab> COMBAT = createKey("combat");
    private static final ResourceKey<CreativeModeTab> FOOD_AND_DRINKS = createKey("food_and_drinks");
    private static final ResourceKey<CreativeModeTab> INGREDIENTS = createKey("ingredients");
    private static final ResourceKey<CreativeModeTab> SPAWN_EGGS = createKey("spawn_eggs");
    private static final ResourceKey<CreativeModeTab> OP_BLOCKS = createKey("op_blocks");
    private static final ResourceKey<CreativeModeTab> INVENTORY = createKey("inventory");
    private static final Comparator<Holder<PaintingVariant>> PAINTING_COMPARATOR = Comparator.comparing(
        Holder::value, Comparator.comparingInt(PaintingVariant::area).thenComparing(PaintingVariant::width)
    );
    @Nullable
    private static CreativeModeTab.ItemDisplayParameters CACHED_PARAMETERS;

    private static ResourceKey<CreativeModeTab> createKey(String name) {
        return ResourceKey.create(Registries.CREATIVE_MODE_TAB, ResourceLocation.withDefaultNamespace(name));
    }

    public static CreativeModeTab bootstrap(Registry<CreativeModeTab> registry) {
        Registry.register(
            registry,
            BUILDING_BLOCKS,
            CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0)
                .title(Component.translatable("itemGroup.buildingBlocks"))
                .icon(() -> new ItemStack(Blocks.BRICKS))
                .displayItems((parameters, output) -> {
                    output.accept(Items.OAK_LOG);
                    output.accept(Items.OAK_WOOD);
                    output.accept(Items.STRIPPED_OAK_LOG);
                    output.accept(Items.STRIPPED_OAK_WOOD);
                    output.accept(Items.OAK_PLANKS);
                    output.accept(Items.OAK_STAIRS);
                    output.accept(Items.OAK_SLAB);
                    output.accept(Items.OAK_FENCE);
                    output.accept(Items.OAK_FENCE_GATE);
                    output.accept(Items.OAK_DOOR);
                    output.accept(Items.OAK_TRAPDOOR);
                    output.accept(Items.OAK_PRESSURE_PLATE);
                    output.accept(Items.OAK_BUTTON);
                    output.accept(Items.SPRUCE_LOG);
                    output.accept(Items.SPRUCE_WOOD);
                    output.accept(Items.STRIPPED_SPRUCE_LOG);
                    output.accept(Items.STRIPPED_SPRUCE_WOOD);
                    output.accept(Items.SPRUCE_PLANKS);
                    output.accept(Items.SPRUCE_STAIRS);
                    output.accept(Items.SPRUCE_SLAB);
                    output.accept(Items.SPRUCE_FENCE);
                    output.accept(Items.SPRUCE_FENCE_GATE);
                    output.accept(Items.SPRUCE_DOOR);
                    output.accept(Items.SPRUCE_TRAPDOOR);
                    output.accept(Items.SPRUCE_PRESSURE_PLATE);
                    output.accept(Items.SPRUCE_BUTTON);
                    output.accept(Items.BIRCH_LOG);
                    output.accept(Items.BIRCH_WOOD);
                    output.accept(Items.STRIPPED_BIRCH_LOG);
                    output.accept(Items.STRIPPED_BIRCH_WOOD);
                    output.accept(Items.BIRCH_PLANKS);
                    output.accept(Items.BIRCH_STAIRS);
                    output.accept(Items.BIRCH_SLAB);
                    output.accept(Items.BIRCH_FENCE);
                    output.accept(Items.BIRCH_FENCE_GATE);
                    output.accept(Items.BIRCH_DOOR);
                    output.accept(Items.BIRCH_TRAPDOOR);
                    output.accept(Items.BIRCH_PRESSURE_PLATE);
                    output.accept(Items.BIRCH_BUTTON);
                    output.accept(Items.JUNGLE_LOG);
                    output.accept(Items.JUNGLE_WOOD);
                    output.accept(Items.STRIPPED_JUNGLE_LOG);
                    output.accept(Items.STRIPPED_JUNGLE_WOOD);
                    output.accept(Items.JUNGLE_PLANKS);
                    output.accept(Items.JUNGLE_STAIRS);
                    output.accept(Items.JUNGLE_SLAB);
                    output.accept(Items.JUNGLE_FENCE);
                    output.accept(Items.JUNGLE_FENCE_GATE);
                    output.accept(Items.JUNGLE_DOOR);
                    output.accept(Items.JUNGLE_TRAPDOOR);
                    output.accept(Items.JUNGLE_PRESSURE_PLATE);
                    output.accept(Items.JUNGLE_BUTTON);
                    output.accept(Items.ACACIA_LOG);
                    output.accept(Items.ACACIA_WOOD);
                    output.accept(Items.STRIPPED_ACACIA_LOG);
                    output.accept(Items.STRIPPED_ACACIA_WOOD);
                    output.accept(Items.ACACIA_PLANKS);
                    output.accept(Items.ACACIA_STAIRS);
                    output.accept(Items.ACACIA_SLAB);
                    output.accept(Items.ACACIA_FENCE);
                    output.accept(Items.ACACIA_FENCE_GATE);
                    output.accept(Items.ACACIA_DOOR);
                    output.accept(Items.ACACIA_TRAPDOOR);
                    output.accept(Items.ACACIA_PRESSURE_PLATE);
                    output.accept(Items.ACACIA_BUTTON);
                    output.accept(Items.DARK_OAK_LOG);
                    output.accept(Items.DARK_OAK_WOOD);
                    output.accept(Items.STRIPPED_DARK_OAK_LOG);
                    output.accept(Items.STRIPPED_DARK_OAK_WOOD);
                    output.accept(Items.DARK_OAK_PLANKS);
                    output.accept(Items.DARK_OAK_STAIRS);
                    output.accept(Items.DARK_OAK_SLAB);
                    output.accept(Items.DARK_OAK_FENCE);
                    output.accept(Items.DARK_OAK_FENCE_GATE);
                    output.accept(Items.DARK_OAK_DOOR);
                    output.accept(Items.DARK_OAK_TRAPDOOR);
                    output.accept(Items.DARK_OAK_PRESSURE_PLATE);
                    output.accept(Items.DARK_OAK_BUTTON);
                    output.accept(Items.MANGROVE_LOG);
                    output.accept(Items.MANGROVE_WOOD);
                    output.accept(Items.STRIPPED_MANGROVE_LOG);
                    output.accept(Items.STRIPPED_MANGROVE_WOOD);
                    output.accept(Items.MANGROVE_PLANKS);
                    output.accept(Items.MANGROVE_STAIRS);
                    output.accept(Items.MANGROVE_SLAB);
                    output.accept(Items.MANGROVE_FENCE);
                    output.accept(Items.MANGROVE_FENCE_GATE);
                    output.accept(Items.MANGROVE_DOOR);
                    output.accept(Items.MANGROVE_TRAPDOOR);
                    output.accept(Items.MANGROVE_PRESSURE_PLATE);
                    output.accept(Items.MANGROVE_BUTTON);
                    output.accept(Items.CHERRY_LOG);
                    output.accept(Items.CHERRY_WOOD);
                    output.accept(Items.STRIPPED_CHERRY_LOG);
                    output.accept(Items.STRIPPED_CHERRY_WOOD);
                    output.accept(Items.CHERRY_PLANKS);
                    output.accept(Items.CHERRY_STAIRS);
                    output.accept(Items.CHERRY_SLAB);
                    output.accept(Items.CHERRY_FENCE);
                    output.accept(Items.CHERRY_FENCE_GATE);
                    output.accept(Items.CHERRY_DOOR);
                    output.accept(Items.CHERRY_TRAPDOOR);
                    output.accept(Items.CHERRY_PRESSURE_PLATE);
                    output.accept(Items.CHERRY_BUTTON);
                    output.accept(Items.PALE_OAK_LOG);
                    output.accept(Items.PALE_OAK_WOOD);
                    output.accept(Items.STRIPPED_PALE_OAK_LOG);
                    output.accept(Items.STRIPPED_PALE_OAK_WOOD);
                    output.accept(Items.PALE_OAK_PLANKS);
                    output.accept(Items.PALE_OAK_STAIRS);
                    output.accept(Items.PALE_OAK_SLAB);
                    output.accept(Items.PALE_OAK_FENCE);
                    output.accept(Items.PALE_OAK_FENCE_GATE);
                    output.accept(Items.PALE_OAK_DOOR);
                    output.accept(Items.PALE_OAK_TRAPDOOR);
                    output.accept(Items.PALE_OAK_PRESSURE_PLATE);
                    output.accept(Items.PALE_OAK_BUTTON);
                    output.accept(Items.BAMBOO_BLOCK);
                    output.accept(Items.STRIPPED_BAMBOO_BLOCK);
                    output.accept(Items.BAMBOO_PLANKS);
                    output.accept(Items.BAMBOO_MOSAIC);
                    output.accept(Items.BAMBOO_STAIRS);
                    output.accept(Items.BAMBOO_MOSAIC_STAIRS);
                    output.accept(Items.BAMBOO_SLAB);
                    output.accept(Items.BAMBOO_MOSAIC_SLAB);
                    output.accept(Items.BAMBOO_FENCE);
                    output.accept(Items.BAMBOO_FENCE_GATE);
                    output.accept(Items.BAMBOO_DOOR);
                    output.accept(Items.BAMBOO_TRAPDOOR);
                    output.accept(Items.BAMBOO_PRESSURE_PLATE);
                    output.accept(Items.BAMBOO_BUTTON);
                    output.accept(Items.CRIMSON_STEM);
                    output.accept(Items.CRIMSON_HYPHAE);
                    output.accept(Items.STRIPPED_CRIMSON_STEM);
                    output.accept(Items.STRIPPED_CRIMSON_HYPHAE);
                    output.accept(Items.CRIMSON_PLANKS);
                    output.accept(Items.CRIMSON_STAIRS);
                    output.accept(Items.CRIMSON_SLAB);
                    output.accept(Items.CRIMSON_FENCE);
                    output.accept(Items.CRIMSON_FENCE_GATE);
                    output.accept(Items.CRIMSON_DOOR);
                    output.accept(Items.CRIMSON_TRAPDOOR);
                    output.accept(Items.CRIMSON_PRESSURE_PLATE);
                    output.accept(Items.CRIMSON_BUTTON);
                    output.accept(Items.WARPED_STEM);
                    output.accept(Items.WARPED_HYPHAE);
                    output.accept(Items.STRIPPED_WARPED_STEM);
                    output.accept(Items.STRIPPED_WARPED_HYPHAE);
                    output.accept(Items.WARPED_PLANKS);
                    output.accept(Items.WARPED_STAIRS);
                    output.accept(Items.WARPED_SLAB);
                    output.accept(Items.WARPED_FENCE);
                    output.accept(Items.WARPED_FENCE_GATE);
                    output.accept(Items.WARPED_DOOR);
                    output.accept(Items.WARPED_TRAPDOOR);
                    output.accept(Items.WARPED_PRESSURE_PLATE);
                    output.accept(Items.WARPED_BUTTON);
                    output.accept(Items.STONE);
                    output.accept(Items.STONE_STAIRS);
                    output.accept(Items.STONE_SLAB);
                    output.accept(Items.STONE_PRESSURE_PLATE);
                    output.accept(Items.STONE_BUTTON);
                    output.accept(Items.COBBLESTONE);
                    output.accept(Items.COBBLESTONE_STAIRS);
                    output.accept(Items.COBBLESTONE_SLAB);
                    output.accept(Items.COBBLESTONE_WALL);
                    output.accept(Items.MOSSY_COBBLESTONE);
                    output.accept(Items.MOSSY_COBBLESTONE_STAIRS);
                    output.accept(Items.MOSSY_COBBLESTONE_SLAB);
                    output.accept(Items.MOSSY_COBBLESTONE_WALL);
                    output.accept(Items.SMOOTH_STONE);
                    output.accept(Items.SMOOTH_STONE_SLAB);
                    output.accept(Items.STONE_BRICKS);
                    output.accept(Items.CRACKED_STONE_BRICKS);
                    output.accept(Items.STONE_BRICK_STAIRS);
                    output.accept(Items.STONE_BRICK_SLAB);
                    output.accept(Items.STONE_BRICK_WALL);
                    output.accept(Items.CHISELED_STONE_BRICKS);
                    output.accept(Items.MOSSY_STONE_BRICKS);
                    output.accept(Items.MOSSY_STONE_BRICK_STAIRS);
                    output.accept(Items.MOSSY_STONE_BRICK_SLAB);
                    output.accept(Items.MOSSY_STONE_BRICK_WALL);
                    output.accept(Items.GRANITE);
                    output.accept(Items.GRANITE_STAIRS);
                    output.accept(Items.GRANITE_SLAB);
                    output.accept(Items.GRANITE_WALL);
                    output.accept(Items.POLISHED_GRANITE);
                    output.accept(Items.POLISHED_GRANITE_STAIRS);
                    output.accept(Items.POLISHED_GRANITE_SLAB);
                    output.accept(Items.DIORITE);
                    output.accept(Items.DIORITE_STAIRS);
                    output.accept(Items.DIORITE_SLAB);
                    output.accept(Items.DIORITE_WALL);
                    output.accept(Items.POLISHED_DIORITE);
                    output.accept(Items.POLISHED_DIORITE_STAIRS);
                    output.accept(Items.POLISHED_DIORITE_SLAB);
                    output.accept(Items.ANDESITE);
                    output.accept(Items.ANDESITE_STAIRS);
                    output.accept(Items.ANDESITE_SLAB);
                    output.accept(Items.ANDESITE_WALL);
                    output.accept(Items.POLISHED_ANDESITE);
                    output.accept(Items.POLISHED_ANDESITE_STAIRS);
                    output.accept(Items.POLISHED_ANDESITE_SLAB);
                    output.accept(Items.DEEPSLATE);
                    output.accept(Items.COBBLED_DEEPSLATE);
                    output.accept(Items.COBBLED_DEEPSLATE_STAIRS);
                    output.accept(Items.COBBLED_DEEPSLATE_SLAB);
                    output.accept(Items.COBBLED_DEEPSLATE_WALL);
                    output.accept(Items.CHISELED_DEEPSLATE);
                    output.accept(Items.POLISHED_DEEPSLATE);
                    output.accept(Items.POLISHED_DEEPSLATE_STAIRS);
                    output.accept(Items.POLISHED_DEEPSLATE_SLAB);
                    output.accept(Items.POLISHED_DEEPSLATE_WALL);
                    output.accept(Items.DEEPSLATE_BRICKS);
                    output.accept(Items.CRACKED_DEEPSLATE_BRICKS);
                    output.accept(Items.DEEPSLATE_BRICK_STAIRS);
                    output.accept(Items.DEEPSLATE_BRICK_SLAB);
                    output.accept(Items.DEEPSLATE_BRICK_WALL);
                    output.accept(Items.DEEPSLATE_TILES);
                    output.accept(Items.CRACKED_DEEPSLATE_TILES);
                    output.accept(Items.DEEPSLATE_TILE_STAIRS);
                    output.accept(Items.DEEPSLATE_TILE_SLAB);
                    output.accept(Items.DEEPSLATE_TILE_WALL);
                    output.accept(Items.REINFORCED_DEEPSLATE);
                    output.accept(Items.TUFF);
                    output.accept(Items.TUFF_STAIRS);
                    output.accept(Items.TUFF_SLAB);
                    output.accept(Items.TUFF_WALL);
                    output.accept(Items.CHISELED_TUFF);
                    output.accept(Items.POLISHED_TUFF);
                    output.accept(Items.POLISHED_TUFF_STAIRS);
                    output.accept(Items.POLISHED_TUFF_SLAB);
                    output.accept(Items.POLISHED_TUFF_WALL);
                    output.accept(Items.TUFF_BRICKS);
                    output.accept(Items.TUFF_BRICK_STAIRS);
                    output.accept(Items.TUFF_BRICK_SLAB);
                    output.accept(Items.TUFF_BRICK_WALL);
                    output.accept(Items.CHISELED_TUFF_BRICKS);
                    output.accept(Items.BRICKS);
                    output.accept(Items.BRICK_STAIRS);
                    output.accept(Items.BRICK_SLAB);
                    output.accept(Items.BRICK_WALL);
                    output.accept(Items.PACKED_MUD);
                    output.accept(Items.MUD_BRICKS);
                    output.accept(Items.MUD_BRICK_STAIRS);
                    output.accept(Items.MUD_BRICK_SLAB);
                    output.accept(Items.MUD_BRICK_WALL);
                    output.accept(Items.RESIN_BRICKS);
                    output.accept(Items.RESIN_BRICK_STAIRS);
                    output.accept(Items.RESIN_BRICK_SLAB);
                    output.accept(Items.RESIN_BRICK_WALL);
                    output.accept(Items.CHISELED_RESIN_BRICKS);
                    output.accept(Items.SANDSTONE);
                    output.accept(Items.SANDSTONE_STAIRS);
                    output.accept(Items.SANDSTONE_SLAB);
                    output.accept(Items.SANDSTONE_WALL);
                    output.accept(Items.CHISELED_SANDSTONE);
                    output.accept(Items.SMOOTH_SANDSTONE);
                    output.accept(Items.SMOOTH_SANDSTONE_STAIRS);
                    output.accept(Items.SMOOTH_SANDSTONE_SLAB);
                    output.accept(Items.CUT_SANDSTONE);
                    output.accept(Items.CUT_STANDSTONE_SLAB);
                    output.accept(Items.RED_SANDSTONE);
                    output.accept(Items.RED_SANDSTONE_STAIRS);
                    output.accept(Items.RED_SANDSTONE_SLAB);
                    output.accept(Items.RED_SANDSTONE_WALL);
                    output.accept(Items.CHISELED_RED_SANDSTONE);
                    output.accept(Items.SMOOTH_RED_SANDSTONE);
                    output.accept(Items.SMOOTH_RED_SANDSTONE_STAIRS);
                    output.accept(Items.SMOOTH_RED_SANDSTONE_SLAB);
                    output.accept(Items.CUT_RED_SANDSTONE);
                    output.accept(Items.CUT_RED_SANDSTONE_SLAB);
                    output.accept(Items.SEA_LANTERN);
                    output.accept(Items.PRISMARINE);
                    output.accept(Items.PRISMARINE_STAIRS);
                    output.accept(Items.PRISMARINE_SLAB);
                    output.accept(Items.PRISMARINE_WALL);
                    output.accept(Items.PRISMARINE_BRICKS);
                    output.accept(Items.PRISMARINE_BRICK_STAIRS);
                    output.accept(Items.PRISMARINE_BRICK_SLAB);
                    output.accept(Items.DARK_PRISMARINE);
                    output.accept(Items.DARK_PRISMARINE_STAIRS);
                    output.accept(Items.DARK_PRISMARINE_SLAB);
                    output.accept(Items.NETHERRACK);
                    output.accept(Items.NETHER_BRICKS);
                    output.accept(Items.CRACKED_NETHER_BRICKS);
                    output.accept(Items.NETHER_BRICK_STAIRS);
                    output.accept(Items.NETHER_BRICK_SLAB);
                    output.accept(Items.NETHER_BRICK_WALL);
                    output.accept(Items.NETHER_BRICK_FENCE);
                    output.accept(Items.CHISELED_NETHER_BRICKS);
                    output.accept(Items.RED_NETHER_BRICKS);
                    output.accept(Items.RED_NETHER_BRICK_STAIRS);
                    output.accept(Items.RED_NETHER_BRICK_SLAB);
                    output.accept(Items.RED_NETHER_BRICK_WALL);
                    output.accept(Items.BASALT);
                    output.accept(Items.SMOOTH_BASALT);
                    output.accept(Items.POLISHED_BASALT);
                    output.accept(Items.BLACKSTONE);
                    output.accept(Items.GILDED_BLACKSTONE);
                    output.accept(Items.BLACKSTONE_STAIRS);
                    output.accept(Items.BLACKSTONE_SLAB);
                    output.accept(Items.BLACKSTONE_WALL);
                    output.accept(Items.CHISELED_POLISHED_BLACKSTONE);
                    output.accept(Items.POLISHED_BLACKSTONE);
                    output.accept(Items.POLISHED_BLACKSTONE_STAIRS);
                    output.accept(Items.POLISHED_BLACKSTONE_SLAB);
                    output.accept(Items.POLISHED_BLACKSTONE_WALL);
                    output.accept(Items.POLISHED_BLACKSTONE_PRESSURE_PLATE);
                    output.accept(Items.POLISHED_BLACKSTONE_BUTTON);
                    output.accept(Items.POLISHED_BLACKSTONE_BRICKS);
                    output.accept(Items.CRACKED_POLISHED_BLACKSTONE_BRICKS);
                    output.accept(Items.POLISHED_BLACKSTONE_BRICK_STAIRS);
                    output.accept(Items.POLISHED_BLACKSTONE_BRICK_SLAB);
                    output.accept(Items.POLISHED_BLACKSTONE_BRICK_WALL);
                    output.accept(Items.END_STONE);
                    output.accept(Items.END_STONE_BRICKS);
                    output.accept(Items.END_STONE_BRICK_STAIRS);
                    output.accept(Items.END_STONE_BRICK_SLAB);
                    output.accept(Items.END_STONE_BRICK_WALL);
                    output.accept(Items.PURPUR_BLOCK);
                    output.accept(Items.PURPUR_PILLAR);
                    output.accept(Items.PURPUR_STAIRS);
                    output.accept(Items.PURPUR_SLAB);
                    output.accept(Items.COAL_BLOCK);
                    output.accept(Items.IRON_BLOCK);
                    output.accept(Items.IRON_BARS);
                    output.accept(Items.IRON_DOOR);
                    output.accept(Items.IRON_TRAPDOOR);
                    output.accept(Items.HEAVY_WEIGHTED_PRESSURE_PLATE);
                    output.accept(Items.CHAIN);
                    output.accept(Items.GOLD_BLOCK);
                    output.accept(Items.LIGHT_WEIGHTED_PRESSURE_PLATE);
                    output.accept(Items.REDSTONE_BLOCK);
                    output.accept(Items.EMERALD_BLOCK);
                    output.accept(Items.LAPIS_BLOCK);
                    output.accept(Items.DIAMOND_BLOCK);
                    output.accept(Items.NETHERITE_BLOCK);
                    output.accept(Items.QUARTZ_BLOCK);
                    output.accept(Items.QUARTZ_STAIRS);
                    output.accept(Items.QUARTZ_SLAB);
                    output.accept(Items.CHISELED_QUARTZ_BLOCK);
                    output.accept(Items.QUARTZ_BRICKS);
                    output.accept(Items.QUARTZ_PILLAR);
                    output.accept(Items.SMOOTH_QUARTZ);
                    output.accept(Items.SMOOTH_QUARTZ_STAIRS);
                    output.accept(Items.SMOOTH_QUARTZ_SLAB);
                    output.accept(Items.AMETHYST_BLOCK);
                    output.accept(Items.COPPER_BLOCK);
                    output.accept(Items.CHISELED_COPPER);
                    output.accept(Items.COPPER_GRATE);
                    output.accept(Items.CUT_COPPER);
                    output.accept(Items.CUT_COPPER_STAIRS);
                    output.accept(Items.CUT_COPPER_SLAB);
                    output.accept(Items.COPPER_DOOR);
                    output.accept(Items.COPPER_TRAPDOOR);
                    output.accept(Items.COPPER_BULB);
                    output.accept(Items.EXPOSED_COPPER);
                    output.accept(Items.EXPOSED_CHISELED_COPPER);
                    output.accept(Items.EXPOSED_COPPER_GRATE);
                    output.accept(Items.EXPOSED_CUT_COPPER);
                    output.accept(Items.EXPOSED_CUT_COPPER_STAIRS);
                    output.accept(Items.EXPOSED_CUT_COPPER_SLAB);
                    output.accept(Items.EXPOSED_COPPER_DOOR);
                    output.accept(Items.EXPOSED_COPPER_TRAPDOOR);
                    output.accept(Items.EXPOSED_COPPER_BULB);
                    output.accept(Items.WEATHERED_COPPER);
                    output.accept(Items.WEATHERED_CHISELED_COPPER);
                    output.accept(Items.WEATHERED_COPPER_GRATE);
                    output.accept(Items.WEATHERED_CUT_COPPER);
                    output.accept(Items.WEATHERED_CUT_COPPER_STAIRS);
                    output.accept(Items.WEATHERED_CUT_COPPER_SLAB);
                    output.accept(Items.WEATHERED_COPPER_DOOR);
                    output.accept(Items.WEATHERED_COPPER_TRAPDOOR);
                    output.accept(Items.WEATHERED_COPPER_BULB);
                    output.accept(Items.OXIDIZED_COPPER);
                    output.accept(Items.OXIDIZED_CHISELED_COPPER);
                    output.accept(Items.OXIDIZED_COPPER_GRATE);
                    output.accept(Items.OXIDIZED_CUT_COPPER);
                    output.accept(Items.OXIDIZED_CUT_COPPER_STAIRS);
                    output.accept(Items.OXIDIZED_CUT_COPPER_SLAB);
                    output.accept(Items.OXIDIZED_COPPER_DOOR);
                    output.accept(Items.OXIDIZED_COPPER_TRAPDOOR);
                    output.accept(Items.OXIDIZED_COPPER_BULB);
                    output.accept(Items.WAXED_COPPER_BLOCK);
                    output.accept(Items.WAXED_CHISELED_COPPER);
                    output.accept(Items.WAXED_COPPER_GRATE);
                    output.accept(Items.WAXED_CUT_COPPER);
                    output.accept(Items.WAXED_CUT_COPPER_STAIRS);
                    output.accept(Items.WAXED_CUT_COPPER_SLAB);
                    output.accept(Items.WAXED_COPPER_DOOR);
                    output.accept(Items.WAXED_COPPER_TRAPDOOR);
                    output.accept(Items.WAXED_COPPER_BULB);
                    output.accept(Items.WAXED_EXPOSED_COPPER);
                    output.accept(Items.WAXED_EXPOSED_CHISELED_COPPER);
                    output.accept(Items.WAXED_EXPOSED_COPPER_GRATE);
                    output.accept(Items.WAXED_EXPOSED_CUT_COPPER);
                    output.accept(Items.WAXED_EXPOSED_CUT_COPPER_STAIRS);
                    output.accept(Items.WAXED_EXPOSED_CUT_COPPER_SLAB);
                    output.accept(Items.WAXED_EXPOSED_COPPER_DOOR);
                    output.accept(Items.WAXED_EXPOSED_COPPER_TRAPDOOR);
                    output.accept(Items.WAXED_EXPOSED_COPPER_BULB);
                    output.accept(Items.WAXED_WEATHERED_COPPER);
                    output.accept(Items.WAXED_WEATHERED_CHISELED_COPPER);
                    output.accept(Items.WAXED_WEATHERED_COPPER_GRATE);
                    output.accept(Items.WAXED_WEATHERED_CUT_COPPER);
                    output.accept(Items.WAXED_WEATHERED_CUT_COPPER_STAIRS);
                    output.accept(Items.WAXED_WEATHERED_CUT_COPPER_SLAB);
                    output.accept(Items.WAXED_WEATHERED_COPPER_DOOR);
                    output.accept(Items.WAXED_WEATHERED_COPPER_TRAPDOOR);
                    output.accept(Items.WAXED_WEATHERED_COPPER_BULB);
                    output.accept(Items.WAXED_OXIDIZED_COPPER);
                    output.accept(Items.WAXED_OXIDIZED_CHISELED_COPPER);
                    output.accept(Items.WAXED_OXIDIZED_COPPER_GRATE);
                    output.accept(Items.WAXED_OXIDIZED_CUT_COPPER);
                    output.accept(Items.WAXED_OXIDIZED_CUT_COPPER_STAIRS);
                    output.accept(Items.WAXED_OXIDIZED_CUT_COPPER_SLAB);
                    output.accept(Items.WAXED_OXIDIZED_COPPER_DOOR);
                    output.accept(Items.WAXED_OXIDIZED_COPPER_TRAPDOOR);
                    output.accept(Items.WAXED_OXIDIZED_COPPER_BULB);
                })
                .build()
        );
        Registry.register(
            registry,
            COLORED_BLOCKS,
            CreativeModeTab.builder(CreativeModeTab.Row.TOP, 1)
                .title(Component.translatable("itemGroup.coloredBlocks"))
                .icon(() -> new ItemStack(Blocks.CYAN_WOOL))
                .displayItems((parameters, output) -> {
                    output.accept(Items.WHITE_WOOL);
                    output.accept(Items.LIGHT_GRAY_WOOL);
                    output.accept(Items.GRAY_WOOL);
                    output.accept(Items.BLACK_WOOL);
                    output.accept(Items.BROWN_WOOL);
                    output.accept(Items.RED_WOOL);
                    output.accept(Items.ORANGE_WOOL);
                    output.accept(Items.YELLOW_WOOL);
                    output.accept(Items.LIME_WOOL);
                    output.accept(Items.GREEN_WOOL);
                    output.accept(Items.CYAN_WOOL);
                    output.accept(Items.LIGHT_BLUE_WOOL);
                    output.accept(Items.BLUE_WOOL);
                    output.accept(Items.PURPLE_WOOL);
                    output.accept(Items.MAGENTA_WOOL);
                    output.accept(Items.PINK_WOOL);
                    output.accept(Items.WHITE_CARPET);
                    output.accept(Items.LIGHT_GRAY_CARPET);
                    output.accept(Items.GRAY_CARPET);
                    output.accept(Items.BLACK_CARPET);
                    output.accept(Items.BROWN_CARPET);
                    output.accept(Items.RED_CARPET);
                    output.accept(Items.ORANGE_CARPET);
                    output.accept(Items.YELLOW_CARPET);
                    output.accept(Items.LIME_CARPET);
                    output.accept(Items.GREEN_CARPET);
                    output.accept(Items.CYAN_CARPET);
                    output.accept(Items.LIGHT_BLUE_CARPET);
                    output.accept(Items.BLUE_CARPET);
                    output.accept(Items.PURPLE_CARPET);
                    output.accept(Items.MAGENTA_CARPET);
                    output.accept(Items.PINK_CARPET);
                    output.accept(Items.TERRACOTTA);
                    output.accept(Items.WHITE_TERRACOTTA);
                    output.accept(Items.LIGHT_GRAY_TERRACOTTA);
                    output.accept(Items.GRAY_TERRACOTTA);
                    output.accept(Items.BLACK_TERRACOTTA);
                    output.accept(Items.BROWN_TERRACOTTA);
                    output.accept(Items.RED_TERRACOTTA);
                    output.accept(Items.ORANGE_TERRACOTTA);
                    output.accept(Items.YELLOW_TERRACOTTA);
                    output.accept(Items.LIME_TERRACOTTA);
                    output.accept(Items.GREEN_TERRACOTTA);
                    output.accept(Items.CYAN_TERRACOTTA);
                    output.accept(Items.LIGHT_BLUE_TERRACOTTA);
                    output.accept(Items.BLUE_TERRACOTTA);
                    output.accept(Items.PURPLE_TERRACOTTA);
                    output.accept(Items.MAGENTA_TERRACOTTA);
                    output.accept(Items.PINK_TERRACOTTA);
                    output.accept(Items.WHITE_CONCRETE);
                    output.accept(Items.LIGHT_GRAY_CONCRETE);
                    output.accept(Items.GRAY_CONCRETE);
                    output.accept(Items.BLACK_CONCRETE);
                    output.accept(Items.BROWN_CONCRETE);
                    output.accept(Items.RED_CONCRETE);
                    output.accept(Items.ORANGE_CONCRETE);
                    output.accept(Items.YELLOW_CONCRETE);
                    output.accept(Items.LIME_CONCRETE);
                    output.accept(Items.GREEN_CONCRETE);
                    output.accept(Items.CYAN_CONCRETE);
                    output.accept(Items.LIGHT_BLUE_CONCRETE);
                    output.accept(Items.BLUE_CONCRETE);
                    output.accept(Items.PURPLE_CONCRETE);
                    output.accept(Items.MAGENTA_CONCRETE);
                    output.accept(Items.PINK_CONCRETE);
                    output.accept(Items.WHITE_CONCRETE_POWDER);
                    output.accept(Items.LIGHT_GRAY_CONCRETE_POWDER);
                    output.accept(Items.GRAY_CONCRETE_POWDER);
                    output.accept(Items.BLACK_CONCRETE_POWDER);
                    output.accept(Items.BROWN_CONCRETE_POWDER);
                    output.accept(Items.RED_CONCRETE_POWDER);
                    output.accept(Items.ORANGE_CONCRETE_POWDER);
                    output.accept(Items.YELLOW_CONCRETE_POWDER);
                    output.accept(Items.LIME_CONCRETE_POWDER);
                    output.accept(Items.GREEN_CONCRETE_POWDER);
                    output.accept(Items.CYAN_CONCRETE_POWDER);
                    output.accept(Items.LIGHT_BLUE_CONCRETE_POWDER);
                    output.accept(Items.BLUE_CONCRETE_POWDER);
                    output.accept(Items.PURPLE_CONCRETE_POWDER);
                    output.accept(Items.MAGENTA_CONCRETE_POWDER);
                    output.accept(Items.PINK_CONCRETE_POWDER);
                    output.accept(Items.WHITE_GLAZED_TERRACOTTA);
                    output.accept(Items.LIGHT_GRAY_GLAZED_TERRACOTTA);
                    output.accept(Items.GRAY_GLAZED_TERRACOTTA);
                    output.accept(Items.BLACK_GLAZED_TERRACOTTA);
                    output.accept(Items.BROWN_GLAZED_TERRACOTTA);
                    output.accept(Items.RED_GLAZED_TERRACOTTA);
                    output.accept(Items.ORANGE_GLAZED_TERRACOTTA);
                    output.accept(Items.YELLOW_GLAZED_TERRACOTTA);
                    output.accept(Items.LIME_GLAZED_TERRACOTTA);
                    output.accept(Items.GREEN_GLAZED_TERRACOTTA);
                    output.accept(Items.CYAN_GLAZED_TERRACOTTA);
                    output.accept(Items.LIGHT_BLUE_GLAZED_TERRACOTTA);
                    output.accept(Items.BLUE_GLAZED_TERRACOTTA);
                    output.accept(Items.PURPLE_GLAZED_TERRACOTTA);
                    output.accept(Items.MAGENTA_GLAZED_TERRACOTTA);
                    output.accept(Items.PINK_GLAZED_TERRACOTTA);
                    output.accept(Items.GLASS);
                    output.accept(Items.TINTED_GLASS);
                    output.accept(Items.WHITE_STAINED_GLASS);
                    output.accept(Items.LIGHT_GRAY_STAINED_GLASS);
                    output.accept(Items.GRAY_STAINED_GLASS);
                    output.accept(Items.BLACK_STAINED_GLASS);
                    output.accept(Items.BROWN_STAINED_GLASS);
                    output.accept(Items.RED_STAINED_GLASS);
                    output.accept(Items.ORANGE_STAINED_GLASS);
                    output.accept(Items.YELLOW_STAINED_GLASS);
                    output.accept(Items.LIME_STAINED_GLASS);
                    output.accept(Items.GREEN_STAINED_GLASS);
                    output.accept(Items.CYAN_STAINED_GLASS);
                    output.accept(Items.LIGHT_BLUE_STAINED_GLASS);
                    output.accept(Items.BLUE_STAINED_GLASS);
                    output.accept(Items.PURPLE_STAINED_GLASS);
                    output.accept(Items.MAGENTA_STAINED_GLASS);
                    output.accept(Items.PINK_STAINED_GLASS);
                    output.accept(Items.GLASS_PANE);
                    output.accept(Items.WHITE_STAINED_GLASS_PANE);
                    output.accept(Items.LIGHT_GRAY_STAINED_GLASS_PANE);
                    output.accept(Items.GRAY_STAINED_GLASS_PANE);
                    output.accept(Items.BLACK_STAINED_GLASS_PANE);
                    output.accept(Items.BROWN_STAINED_GLASS_PANE);
                    output.accept(Items.RED_STAINED_GLASS_PANE);
                    output.accept(Items.ORANGE_STAINED_GLASS_PANE);
                    output.accept(Items.YELLOW_STAINED_GLASS_PANE);
                    output.accept(Items.LIME_STAINED_GLASS_PANE);
                    output.accept(Items.GREEN_STAINED_GLASS_PANE);
                    output.accept(Items.CYAN_STAINED_GLASS_PANE);
                    output.accept(Items.LIGHT_BLUE_STAINED_GLASS_PANE);
                    output.accept(Items.BLUE_STAINED_GLASS_PANE);
                    output.accept(Items.PURPLE_STAINED_GLASS_PANE);
                    output.accept(Items.MAGENTA_STAINED_GLASS_PANE);
                    output.accept(Items.PINK_STAINED_GLASS_PANE);
                    output.accept(Items.SHULKER_BOX);
                    output.accept(Items.WHITE_SHULKER_BOX);
                    output.accept(Items.LIGHT_GRAY_SHULKER_BOX);
                    output.accept(Items.GRAY_SHULKER_BOX);
                    output.accept(Items.BLACK_SHULKER_BOX);
                    output.accept(Items.BROWN_SHULKER_BOX);
                    output.accept(Items.RED_SHULKER_BOX);
                    output.accept(Items.ORANGE_SHULKER_BOX);
                    output.accept(Items.YELLOW_SHULKER_BOX);
                    output.accept(Items.LIME_SHULKER_BOX);
                    output.accept(Items.GREEN_SHULKER_BOX);
                    output.accept(Items.CYAN_SHULKER_BOX);
                    output.accept(Items.LIGHT_BLUE_SHULKER_BOX);
                    output.accept(Items.BLUE_SHULKER_BOX);
                    output.accept(Items.PURPLE_SHULKER_BOX);
                    output.accept(Items.MAGENTA_SHULKER_BOX);
                    output.accept(Items.PINK_SHULKER_BOX);
                    output.accept(Items.WHITE_BED);
                    output.accept(Items.LIGHT_GRAY_BED);
                    output.accept(Items.GRAY_BED);
                    output.accept(Items.BLACK_BED);
                    output.accept(Items.BROWN_BED);
                    output.accept(Items.RED_BED);
                    output.accept(Items.ORANGE_BED);
                    output.accept(Items.YELLOW_BED);
                    output.accept(Items.LIME_BED);
                    output.accept(Items.GREEN_BED);
                    output.accept(Items.CYAN_BED);
                    output.accept(Items.LIGHT_BLUE_BED);
                    output.accept(Items.BLUE_BED);
                    output.accept(Items.PURPLE_BED);
                    output.accept(Items.MAGENTA_BED);
                    output.accept(Items.PINK_BED);
                    output.accept(Items.CANDLE);
                    output.accept(Items.WHITE_CANDLE);
                    output.accept(Items.LIGHT_GRAY_CANDLE);
                    output.accept(Items.GRAY_CANDLE);
                    output.accept(Items.BLACK_CANDLE);
                    output.accept(Items.BROWN_CANDLE);
                    output.accept(Items.RED_CANDLE);
                    output.accept(Items.ORANGE_CANDLE);
                    output.accept(Items.YELLOW_CANDLE);
                    output.accept(Items.LIME_CANDLE);
                    output.accept(Items.GREEN_CANDLE);
                    output.accept(Items.CYAN_CANDLE);
                    output.accept(Items.LIGHT_BLUE_CANDLE);
                    output.accept(Items.BLUE_CANDLE);
                    output.accept(Items.PURPLE_CANDLE);
                    output.accept(Items.MAGENTA_CANDLE);
                    output.accept(Items.PINK_CANDLE);
                    output.accept(Items.WHITE_BANNER);
                    output.accept(Items.LIGHT_GRAY_BANNER);
                    output.accept(Items.GRAY_BANNER);
                    output.accept(Items.BLACK_BANNER);
                    output.accept(Items.BROWN_BANNER);
                    output.accept(Items.RED_BANNER);
                    output.accept(Items.ORANGE_BANNER);
                    output.accept(Items.YELLOW_BANNER);
                    output.accept(Items.LIME_BANNER);
                    output.accept(Items.GREEN_BANNER);
                    output.accept(Items.CYAN_BANNER);
                    output.accept(Items.LIGHT_BLUE_BANNER);
                    output.accept(Items.BLUE_BANNER);
                    output.accept(Items.PURPLE_BANNER);
                    output.accept(Items.MAGENTA_BANNER);
                    output.accept(Items.PINK_BANNER);
                })
                .build()
        );
        Registry.register(
            registry,
            NATURAL_BLOCKS,
            CreativeModeTab.builder(CreativeModeTab.Row.TOP, 2)
                .title(Component.translatable("itemGroup.natural"))
                .icon(() -> new ItemStack(Blocks.GRASS_BLOCK))
                .displayItems((parameters, output) -> {
                    output.accept(Items.GRASS_BLOCK);
                    output.accept(Items.PODZOL);
                    output.accept(Items.MYCELIUM);
                    output.accept(Items.DIRT_PATH);
                    output.accept(Items.DIRT);
                    output.accept(Items.COARSE_DIRT);
                    output.accept(Items.ROOTED_DIRT);
                    output.accept(Items.FARMLAND);
                    output.accept(Items.MUD);
                    output.accept(Items.CLAY);
                    output.accept(Items.GRAVEL);
                    output.accept(Items.SAND);
                    output.accept(Items.SANDSTONE);
                    output.accept(Items.RED_SAND);
                    output.accept(Items.RED_SANDSTONE);
                    output.accept(Items.ICE);
                    output.accept(Items.PACKED_ICE);
                    output.accept(Items.BLUE_ICE);
                    output.accept(Items.SNOW_BLOCK);
                    output.accept(Items.SNOW);
                    output.accept(Items.MOSS_BLOCK);
                    output.accept(Items.MOSS_CARPET);
                    output.accept(Items.PALE_MOSS_BLOCK);
                    output.accept(Items.PALE_MOSS_CARPET);
                    output.accept(Items.PALE_HANGING_MOSS);
                    output.accept(Items.STONE);
                    output.accept(Items.DEEPSLATE);
                    output.accept(Items.GRANITE);
                    output.accept(Items.DIORITE);
                    output.accept(Items.ANDESITE);
                    output.accept(Items.CALCITE);
                    output.accept(Items.TUFF);
                    output.accept(Items.DRIPSTONE_BLOCK);
                    output.accept(Items.POINTED_DRIPSTONE);
                    output.accept(Items.PRISMARINE);
                    output.accept(Items.MAGMA_BLOCK);
                    output.accept(Items.OBSIDIAN);
                    output.accept(Items.CRYING_OBSIDIAN);
                    output.accept(Items.NETHERRACK);
                    output.accept(Items.CRIMSON_NYLIUM);
                    output.accept(Items.WARPED_NYLIUM);
                    output.accept(Items.SOUL_SAND);
                    output.accept(Items.SOUL_SOIL);
                    output.accept(Items.BONE_BLOCK);
                    output.accept(Items.BLACKSTONE);
                    output.accept(Items.BASALT);
                    output.accept(Items.SMOOTH_BASALT);
                    output.accept(Items.END_STONE);
                    output.accept(Items.COAL_ORE);
                    output.accept(Items.DEEPSLATE_COAL_ORE);
                    output.accept(Items.IRON_ORE);
                    output.accept(Items.DEEPSLATE_IRON_ORE);
                    output.accept(Items.COPPER_ORE);
                    output.accept(Items.DEEPSLATE_COPPER_ORE);
                    output.accept(Items.GOLD_ORE);
                    output.accept(Items.DEEPSLATE_GOLD_ORE);
                    output.accept(Items.REDSTONE_ORE);
                    output.accept(Items.DEEPSLATE_REDSTONE_ORE);
                    output.accept(Items.EMERALD_ORE);
                    output.accept(Items.DEEPSLATE_EMERALD_ORE);
                    output.accept(Items.LAPIS_ORE);
                    output.accept(Items.DEEPSLATE_LAPIS_ORE);
                    output.accept(Items.DIAMOND_ORE);
                    output.accept(Items.DEEPSLATE_DIAMOND_ORE);
                    output.accept(Items.NETHER_GOLD_ORE);
                    output.accept(Items.NETHER_QUARTZ_ORE);
                    output.accept(Items.ANCIENT_DEBRIS);
                    output.accept(Items.RAW_IRON_BLOCK);
                    output.accept(Items.RAW_COPPER_BLOCK);
                    output.accept(Items.RAW_GOLD_BLOCK);
                    output.accept(Items.GLOWSTONE);
                    output.accept(Items.AMETHYST_BLOCK);
                    output.accept(Items.BUDDING_AMETHYST);
                    output.accept(Items.SMALL_AMETHYST_BUD);
                    output.accept(Items.MEDIUM_AMETHYST_BUD);
                    output.accept(Items.LARGE_AMETHYST_BUD);
                    output.accept(Items.AMETHYST_CLUSTER);
                    output.accept(Items.OAK_LOG);
                    output.accept(Items.SPRUCE_LOG);
                    output.accept(Items.BIRCH_LOG);
                    output.accept(Items.JUNGLE_LOG);
                    output.accept(Items.ACACIA_LOG);
                    output.accept(Items.DARK_OAK_LOG);
                    output.accept(Items.MANGROVE_LOG);
                    output.accept(Items.MANGROVE_ROOTS);
                    output.accept(Items.MUDDY_MANGROVE_ROOTS);
                    output.accept(Items.CHERRY_LOG);
                    output.accept(Items.PALE_OAK_LOG);
                    output.accept(Items.MUSHROOM_STEM);
                    output.accept(Items.CRIMSON_STEM);
                    output.accept(Items.WARPED_STEM);
                    output.accept(Items.OAK_LEAVES);
                    output.accept(Items.SPRUCE_LEAVES);
                    output.accept(Items.BIRCH_LEAVES);
                    output.accept(Items.JUNGLE_LEAVES);
                    output.accept(Items.ACACIA_LEAVES);
                    output.accept(Items.DARK_OAK_LEAVES);
                    output.accept(Items.MANGROVE_LEAVES);
                    output.accept(Items.CHERRY_LEAVES);
                    output.accept(Items.PALE_OAK_LEAVES);
                    output.accept(Items.AZALEA_LEAVES);
                    output.accept(Items.FLOWERING_AZALEA_LEAVES);
                    output.accept(Items.BROWN_MUSHROOM_BLOCK);
                    output.accept(Items.RED_MUSHROOM_BLOCK);
                    output.accept(Items.NETHER_WART_BLOCK);
                    output.accept(Items.WARPED_WART_BLOCK);
                    output.accept(Items.SHROOMLIGHT);
                    output.accept(Items.OAK_SAPLING);
                    output.accept(Items.SPRUCE_SAPLING);
                    output.accept(Items.BIRCH_SAPLING);
                    output.accept(Items.JUNGLE_SAPLING);
                    output.accept(Items.ACACIA_SAPLING);
                    output.accept(Items.DARK_OAK_SAPLING);
                    output.accept(Items.MANGROVE_PROPAGULE);
                    output.accept(Items.CHERRY_SAPLING);
                    output.accept(Items.PALE_OAK_SAPLING);
                    output.accept(Items.AZALEA);
                    output.accept(Items.FLOWERING_AZALEA);
                    output.accept(Items.BROWN_MUSHROOM);
                    output.accept(Items.RED_MUSHROOM);
                    output.accept(Items.CRIMSON_FUNGUS);
                    output.accept(Items.WARPED_FUNGUS);
                    output.accept(Items.SHORT_GRASS);
                    output.accept(Items.FERN);
                    output.accept(Items.DRY_SHORT_GRASS);
                    output.accept(Items.BUSH);
                    output.accept(Items.DEAD_BUSH);
                    output.accept(Items.DANDELION);
                    output.accept(Items.POPPY);
                    output.accept(Items.BLUE_ORCHID);
                    output.accept(Items.ALLIUM);
                    output.accept(Items.AZURE_BLUET);
                    output.accept(Items.RED_TULIP);
                    output.accept(Items.ORANGE_TULIP);
                    output.accept(Items.WHITE_TULIP);
                    output.accept(Items.PINK_TULIP);
                    output.accept(Items.OXEYE_DAISY);
                    output.accept(Items.CORNFLOWER);
                    output.accept(Items.LILY_OF_THE_VALLEY);
                    output.accept(Items.TORCHFLOWER);
                    output.accept(Items.CACTUS_FLOWER);
                    output.accept(Items.CLOSED_EYEBLOSSOM);
                    output.accept(Items.OPEN_EYEBLOSSOM);
                    output.accept(Items.WITHER_ROSE);
                    output.accept(Items.PINK_PETALS);
                    output.accept(Items.WILDFLOWERS);
                    output.accept(Items.LEAF_LITTER);
                    output.accept(Items.SPORE_BLOSSOM);
                    output.accept(Items.FIREFLY_BUSH);
                    output.accept(Items.BAMBOO);
                    output.accept(Items.SUGAR_CANE);
                    output.accept(Items.CACTUS);
                    output.accept(Items.CRIMSON_ROOTS);
                    output.accept(Items.WARPED_ROOTS);
                    output.accept(Items.NETHER_SPROUTS);
                    output.accept(Items.WEEPING_VINES);
                    output.accept(Items.TWISTING_VINES);
                    output.accept(Items.VINE);
                    output.accept(Items.TALL_GRASS);
                    output.accept(Items.LARGE_FERN);
                    output.accept(Items.DRY_TALL_GRASS);
                    output.accept(Items.SUNFLOWER);
                    output.accept(Items.LILAC);
                    output.accept(Items.ROSE_BUSH);
                    output.accept(Items.PEONY);
                    output.accept(Items.PITCHER_PLANT);
                    output.accept(Items.BIG_DRIPLEAF);
                    output.accept(Items.SMALL_DRIPLEAF);
                    output.accept(Items.CHORUS_PLANT);
                    output.accept(Items.CHORUS_FLOWER);
                    output.accept(Items.GLOW_LICHEN);
                    output.accept(Items.HANGING_ROOTS);
                    output.accept(Items.FROGSPAWN);
                    output.accept(Items.TURTLE_EGG);
                    output.accept(Items.SNIFFER_EGG);
                    output.accept(Items.DRIED_GHAST);
                    output.accept(Items.WHEAT_SEEDS);
                    output.accept(Items.COCOA_BEANS);
                    output.accept(Items.PUMPKIN_SEEDS);
                    output.accept(Items.MELON_SEEDS);
                    output.accept(Items.BEETROOT_SEEDS);
                    output.accept(Items.TORCHFLOWER_SEEDS);
                    output.accept(Items.PITCHER_POD);
                    output.accept(Items.GLOW_BERRIES);
                    output.accept(Items.SWEET_BERRIES);
                    output.accept(Items.NETHER_WART);
                    output.accept(Items.LILY_PAD);
                    output.accept(Items.SEAGRASS);
                    output.accept(Items.SEA_PICKLE);
                    output.accept(Items.KELP);
                    output.accept(Items.DRIED_KELP_BLOCK);
                    output.accept(Items.TUBE_CORAL_BLOCK);
                    output.accept(Items.BRAIN_CORAL_BLOCK);
                    output.accept(Items.BUBBLE_CORAL_BLOCK);
                    output.accept(Items.FIRE_CORAL_BLOCK);
                    output.accept(Items.HORN_CORAL_BLOCK);
                    output.accept(Items.DEAD_TUBE_CORAL_BLOCK);
                    output.accept(Items.DEAD_BRAIN_CORAL_BLOCK);
                    output.accept(Items.DEAD_BUBBLE_CORAL_BLOCK);
                    output.accept(Items.DEAD_FIRE_CORAL_BLOCK);
                    output.accept(Items.DEAD_HORN_CORAL_BLOCK);
                    output.accept(Items.TUBE_CORAL);
                    output.accept(Items.BRAIN_CORAL);
                    output.accept(Items.BUBBLE_CORAL);
                    output.accept(Items.FIRE_CORAL);
                    output.accept(Items.HORN_CORAL);
                    output.accept(Items.DEAD_TUBE_CORAL);
                    output.accept(Items.DEAD_BRAIN_CORAL);
                    output.accept(Items.DEAD_BUBBLE_CORAL);
                    output.accept(Items.DEAD_FIRE_CORAL);
                    output.accept(Items.DEAD_HORN_CORAL);
                    output.accept(Items.TUBE_CORAL_FAN);
                    output.accept(Items.BRAIN_CORAL_FAN);
                    output.accept(Items.BUBBLE_CORAL_FAN);
                    output.accept(Items.FIRE_CORAL_FAN);
                    output.accept(Items.HORN_CORAL_FAN);
                    output.accept(Items.DEAD_TUBE_CORAL_FAN);
                    output.accept(Items.DEAD_BRAIN_CORAL_FAN);
                    output.accept(Items.DEAD_BUBBLE_CORAL_FAN);
                    output.accept(Items.DEAD_FIRE_CORAL_FAN);
                    output.accept(Items.DEAD_HORN_CORAL_FAN);
                    output.accept(Items.SPONGE);
                    output.accept(Items.WET_SPONGE);
                    output.accept(Items.MELON);
                    output.accept(Items.PUMPKIN);
                    output.accept(Items.CARVED_PUMPKIN);
                    output.accept(Items.JACK_O_LANTERN);
                    output.accept(Items.HAY_BLOCK);
                    output.accept(Items.BEE_NEST);
                    output.accept(Items.HONEYCOMB_BLOCK);
                    output.accept(Items.SLIME_BLOCK);
                    output.accept(Items.HONEY_BLOCK);
                    output.accept(Items.RESIN_BLOCK);
                    output.accept(Items.OCHRE_FROGLIGHT);
                    output.accept(Items.VERDANT_FROGLIGHT);
                    output.accept(Items.PEARLESCENT_FROGLIGHT);
                    output.accept(Items.SCULK);
                    output.accept(Items.SCULK_VEIN);
                    output.accept(Items.SCULK_CATALYST);
                    output.accept(Items.SCULK_SHRIEKER);
                    output.accept(Items.SCULK_SENSOR);
                    output.accept(Items.COBWEB);
                    output.accept(Items.BEDROCK);
                })
                .build()
        );
        Registry.register(
            registry,
            FUNCTIONAL_BLOCKS,
            CreativeModeTab.builder(CreativeModeTab.Row.TOP, 3)
                .title(Component.translatable("itemGroup.functional"))
                .icon(() -> new ItemStack(Items.OAK_SIGN))
                .displayItems(
                    (parameters, output) -> {
                        output.accept(Items.TORCH);
                        output.accept(Items.SOUL_TORCH);
                        output.accept(Items.REDSTONE_TORCH);
                        output.accept(Items.LANTERN);
                        output.accept(Items.SOUL_LANTERN);
                        output.accept(Items.CHAIN);
                        output.accept(Items.END_ROD);
                        output.accept(Items.SEA_LANTERN);
                        output.accept(Items.REDSTONE_LAMP);
                        output.accept(Items.COPPER_BULB);
                        output.accept(Items.EXPOSED_COPPER_BULB);
                        output.accept(Items.WEATHERED_COPPER_BULB);
                        output.accept(Items.OXIDIZED_COPPER_BULB);
                        output.accept(Items.WAXED_COPPER_BULB);
                        output.accept(Items.WAXED_EXPOSED_COPPER_BULB);
                        output.accept(Items.WAXED_WEATHERED_COPPER_BULB);
                        output.accept(Items.WAXED_OXIDIZED_COPPER_BULB);
                        output.accept(Items.GLOWSTONE);
                        output.accept(Items.SHROOMLIGHT);
                        output.accept(Items.OCHRE_FROGLIGHT);
                        output.accept(Items.VERDANT_FROGLIGHT);
                        output.accept(Items.PEARLESCENT_FROGLIGHT);
                        output.accept(Items.CRYING_OBSIDIAN);
                        output.accept(Items.GLOW_LICHEN);
                        output.accept(Items.MAGMA_BLOCK);
                        output.accept(Items.CRAFTING_TABLE);
                        output.accept(Items.STONECUTTER);
                        output.accept(Items.CARTOGRAPHY_TABLE);
                        output.accept(Items.FLETCHING_TABLE);
                        output.accept(Items.SMITHING_TABLE);
                        output.accept(Items.GRINDSTONE);
                        output.accept(Items.LOOM);
                        output.accept(Items.FURNACE);
                        output.accept(Items.SMOKER);
                        output.accept(Items.BLAST_FURNACE);
                        output.accept(Items.CAMPFIRE);
                        output.accept(Items.SOUL_CAMPFIRE);
                        output.accept(Items.ANVIL);
                        output.accept(Items.CHIPPED_ANVIL);
                        output.accept(Items.DAMAGED_ANVIL);
                        output.accept(Items.COMPOSTER);
                        output.accept(Items.NOTE_BLOCK);
                        output.accept(Items.JUKEBOX);
                        output.accept(Items.ENCHANTING_TABLE);
                        output.accept(Items.END_CRYSTAL);
                        output.accept(Items.BREWING_STAND);
                        output.accept(Items.CAULDRON);
                        output.accept(Items.BELL);
                        output.accept(Items.BEACON);
                        output.accept(Items.CONDUIT);
                        output.accept(Items.LODESTONE);
                        output.accept(Items.LADDER);
                        output.accept(Items.SCAFFOLDING);
                        output.accept(Items.BEE_NEST);
                        output.accept(Items.BEEHIVE);
                        output.accept(Items.SUSPICIOUS_SAND);
                        output.accept(Items.SUSPICIOUS_GRAVEL);
                        output.accept(Items.LIGHTNING_ROD);
                        output.accept(Items.FLOWER_POT);
                        output.accept(Items.DECORATED_POT);
                        output.accept(Items.ARMOR_STAND);
                        output.accept(Items.ITEM_FRAME);
                        output.accept(Items.GLOW_ITEM_FRAME);
                        output.accept(Items.PAINTING);
                        parameters.holders()
                            .lookup(Registries.PAINTING_VARIANT)
                            .ifPresent(
                                registryLookup -> generatePresetPaintings(
                                    output,
                                    parameters.holders(),
                                    (HolderLookup.RegistryLookup<PaintingVariant>)registryLookup,
                                    holder -> holder.is(PaintingVariantTags.PLACEABLE),
                                    CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS
                                )
                            );
                        output.accept(Items.BOOKSHELF);
                        output.accept(Items.CHISELED_BOOKSHELF);
                        output.accept(Items.LECTERN);
                        output.accept(Items.TINTED_GLASS);
                        output.accept(Items.OAK_SIGN);
                        output.accept(Items.OAK_HANGING_SIGN);
                        output.accept(Items.SPRUCE_SIGN);
                        output.accept(Items.SPRUCE_HANGING_SIGN);
                        output.accept(Items.BIRCH_SIGN);
                        output.accept(Items.BIRCH_HANGING_SIGN);
                        output.accept(Items.JUNGLE_SIGN);
                        output.accept(Items.JUNGLE_HANGING_SIGN);
                        output.accept(Items.ACACIA_SIGN);
                        output.accept(Items.ACACIA_HANGING_SIGN);
                        output.accept(Items.DARK_OAK_SIGN);
                        output.accept(Items.DARK_OAK_HANGING_SIGN);
                        output.accept(Items.MANGROVE_SIGN);
                        output.accept(Items.MANGROVE_HANGING_SIGN);
                        output.accept(Items.CHERRY_SIGN);
                        output.accept(Items.CHERRY_HANGING_SIGN);
                        output.accept(Items.PALE_OAK_SIGN);
                        output.accept(Items.PALE_OAK_HANGING_SIGN);
                        output.accept(Items.BAMBOO_SIGN);
                        output.accept(Items.BAMBOO_HANGING_SIGN);
                        output.accept(Items.CRIMSON_SIGN);
                        output.accept(Items.CRIMSON_HANGING_SIGN);
                        output.accept(Items.WARPED_SIGN);
                        output.accept(Items.WARPED_HANGING_SIGN);
                        output.accept(Items.CHEST);
                        output.accept(Items.BARREL);
                        output.accept(Items.ENDER_CHEST);
                        output.accept(Items.SHULKER_BOX);
                        output.accept(Items.WHITE_SHULKER_BOX);
                        output.accept(Items.LIGHT_GRAY_SHULKER_BOX);
                        output.accept(Items.GRAY_SHULKER_BOX);
                        output.accept(Items.BLACK_SHULKER_BOX);
                        output.accept(Items.BROWN_SHULKER_BOX);
                        output.accept(Items.RED_SHULKER_BOX);
                        output.accept(Items.ORANGE_SHULKER_BOX);
                        output.accept(Items.YELLOW_SHULKER_BOX);
                        output.accept(Items.LIME_SHULKER_BOX);
                        output.accept(Items.GREEN_SHULKER_BOX);
                        output.accept(Items.CYAN_SHULKER_BOX);
                        output.accept(Items.LIGHT_BLUE_SHULKER_BOX);
                        output.accept(Items.BLUE_SHULKER_BOX);
                        output.accept(Items.PURPLE_SHULKER_BOX);
                        output.accept(Items.MAGENTA_SHULKER_BOX);
                        output.accept(Items.PINK_SHULKER_BOX);
                        output.accept(Items.RESPAWN_ANCHOR);
                        output.accept(Items.WHITE_BED);
                        output.accept(Items.LIGHT_GRAY_BED);
                        output.accept(Items.GRAY_BED);
                        output.accept(Items.BLACK_BED);
                        output.accept(Items.BROWN_BED);
                        output.accept(Items.RED_BED);
                        output.accept(Items.ORANGE_BED);
                        output.accept(Items.YELLOW_BED);
                        output.accept(Items.LIME_BED);
                        output.accept(Items.GREEN_BED);
                        output.accept(Items.CYAN_BED);
                        output.accept(Items.LIGHT_BLUE_BED);
                        output.accept(Items.BLUE_BED);
                        output.accept(Items.PURPLE_BED);
                        output.accept(Items.MAGENTA_BED);
                        output.accept(Items.PINK_BED);
                        output.accept(Items.CANDLE);
                        output.accept(Items.WHITE_CANDLE);
                        output.accept(Items.LIGHT_GRAY_CANDLE);
                        output.accept(Items.GRAY_CANDLE);
                        output.accept(Items.BLACK_CANDLE);
                        output.accept(Items.BROWN_CANDLE);
                        output.accept(Items.RED_CANDLE);
                        output.accept(Items.ORANGE_CANDLE);
                        output.accept(Items.YELLOW_CANDLE);
                        output.accept(Items.LIME_CANDLE);
                        output.accept(Items.GREEN_CANDLE);
                        output.accept(Items.CYAN_CANDLE);
                        output.accept(Items.LIGHT_BLUE_CANDLE);
                        output.accept(Items.BLUE_CANDLE);
                        output.accept(Items.PURPLE_CANDLE);
                        output.accept(Items.MAGENTA_CANDLE);
                        output.accept(Items.PINK_CANDLE);
                        output.accept(Items.WHITE_BANNER);
                        output.accept(Items.LIGHT_GRAY_BANNER);
                        output.accept(Items.GRAY_BANNER);
                        output.accept(Items.BLACK_BANNER);
                        output.accept(Items.BROWN_BANNER);
                        output.accept(Items.RED_BANNER);
                        output.accept(Items.ORANGE_BANNER);
                        output.accept(Items.YELLOW_BANNER);
                        output.accept(Items.LIME_BANNER);
                        output.accept(Items.GREEN_BANNER);
                        output.accept(Items.CYAN_BANNER);
                        output.accept(Items.LIGHT_BLUE_BANNER);
                        output.accept(Items.BLUE_BANNER);
                        output.accept(Items.PURPLE_BANNER);
                        output.accept(Items.MAGENTA_BANNER);
                        output.accept(Items.PINK_BANNER);
                        output.accept(Raid.getOminousBannerInstance(parameters.holders().lookupOrThrow(Registries.BANNER_PATTERN)));
                        output.accept(Items.SKELETON_SKULL);
                        output.accept(Items.WITHER_SKELETON_SKULL);
                        output.accept(Items.PLAYER_HEAD);
                        output.accept(Items.ZOMBIE_HEAD);
                        output.accept(Items.CREEPER_HEAD);
                        output.accept(Items.PIGLIN_HEAD);
                        output.accept(Items.DRAGON_HEAD);
                        output.accept(Items.DRAGON_EGG);
                        output.accept(Items.END_PORTAL_FRAME);
                        output.accept(Items.ENDER_EYE);
                        output.accept(Items.VAULT);
                        output.accept(Items.INFESTED_STONE);
                        output.accept(Items.INFESTED_COBBLESTONE);
                        output.accept(Items.INFESTED_STONE_BRICKS);
                        output.accept(Items.INFESTED_MOSSY_STONE_BRICKS);
                        output.accept(Items.INFESTED_CRACKED_STONE_BRICKS);
                        output.accept(Items.INFESTED_CHISELED_STONE_BRICKS);
                        output.accept(Items.INFESTED_DEEPSLATE);
                    }
                )
                .build()
        );
        Registry.register(
            registry,
            REDSTONE_BLOCKS,
            CreativeModeTab.builder(CreativeModeTab.Row.TOP, 4)
                .title(Component.translatable("itemGroup.redstone"))
                .icon(() -> new ItemStack(Items.REDSTONE))
                .displayItems((parameters, output) -> {
                    output.accept(Items.REDSTONE);
                    output.accept(Items.REDSTONE_TORCH);
                    output.accept(Items.REDSTONE_BLOCK);
                    output.accept(Items.REPEATER);
                    output.accept(Items.COMPARATOR);
                    output.accept(Items.TARGET);
                    output.accept(Items.WAXED_COPPER_BULB);
                    output.accept(Items.WAXED_EXPOSED_COPPER_BULB);
                    output.accept(Items.WAXED_WEATHERED_COPPER_BULB);
                    output.accept(Items.WAXED_OXIDIZED_COPPER_BULB);
                    output.accept(Items.LEVER);
                    output.accept(Items.OAK_BUTTON);
                    output.accept(Items.STONE_BUTTON);
                    output.accept(Items.OAK_PRESSURE_PLATE);
                    output.accept(Items.STONE_PRESSURE_PLATE);
                    output.accept(Items.LIGHT_WEIGHTED_PRESSURE_PLATE);
                    output.accept(Items.HEAVY_WEIGHTED_PRESSURE_PLATE);
                    output.accept(Items.SCULK_SENSOR);
                    output.accept(Items.CALIBRATED_SCULK_SENSOR);
                    output.accept(Items.SCULK_SHRIEKER);
                    output.accept(Items.AMETHYST_BLOCK);
                    output.accept(Items.WHITE_WOOL);
                    output.accept(Items.TRIPWIRE_HOOK);
                    output.accept(Items.STRING);
                    output.accept(Items.LECTERN);
                    output.accept(Items.DAYLIGHT_DETECTOR);
                    output.accept(Items.LIGHTNING_ROD);
                    output.accept(Items.PISTON);
                    output.accept(Items.STICKY_PISTON);
                    output.accept(Items.SLIME_BLOCK);
                    output.accept(Items.HONEY_BLOCK);
                    output.accept(Items.DISPENSER);
                    output.accept(Items.DROPPER);
                    output.accept(Items.CRAFTER);
                    output.accept(Items.HOPPER);
                    output.accept(Items.CHEST);
                    output.accept(Items.BARREL);
                    output.accept(Items.CHISELED_BOOKSHELF);
                    output.accept(Items.FURNACE);
                    output.accept(Items.TRAPPED_CHEST);
                    output.accept(Items.JUKEBOX);
                    output.accept(Items.DECORATED_POT);
                    output.accept(Items.OBSERVER);
                    output.accept(Items.NOTE_BLOCK);
                    output.accept(Items.COMPOSTER);
                    output.accept(Items.CAULDRON);
                    output.accept(Items.RAIL);
                    output.accept(Items.POWERED_RAIL);
                    output.accept(Items.DETECTOR_RAIL);
                    output.accept(Items.ACTIVATOR_RAIL);
                    output.accept(Items.MINECART);
                    output.accept(Items.HOPPER_MINECART);
                    output.accept(Items.CHEST_MINECART);
                    output.accept(Items.FURNACE_MINECART);
                    output.accept(Items.TNT_MINECART);
                    output.accept(Items.OAK_CHEST_BOAT);
                    output.accept(Items.BAMBOO_CHEST_RAFT);
                    output.accept(Items.OAK_DOOR);
                    output.accept(Items.IRON_DOOR);
                    output.accept(Items.OAK_FENCE_GATE);
                    output.accept(Items.OAK_TRAPDOOR);
                    output.accept(Items.IRON_TRAPDOOR);
                    output.accept(Items.TNT);
                    output.accept(Items.REDSTONE_LAMP);
                    output.accept(Items.BELL);
                    output.accept(Items.BIG_DRIPLEAF);
                    output.accept(Items.ARMOR_STAND);
                    output.accept(Items.REDSTONE_ORE);
                })
                .build()
        );
        Registry.register(
            registry,
            HOTBAR,
            CreativeModeTab.builder(CreativeModeTab.Row.TOP, 5)
                .title(Component.translatable("itemGroup.hotbar"))
                .icon(() -> new ItemStack(Blocks.BOOKSHELF))
                .alignedRight()
                .type(CreativeModeTab.Type.HOTBAR)
                .build()
        );
        Registry.register(
            registry,
            SEARCH,
            CreativeModeTab.builder(CreativeModeTab.Row.TOP, 6)
                .title(Component.translatable("itemGroup.search"))
                .icon(() -> new ItemStack(Items.COMPASS))
                .displayItems((parameters, output) -> {
                    Set<ItemStack> set = ItemStackLinkedSet.createTypeAndComponentsSet();

                    for (CreativeModeTab creativeModeTab : registry) {
                        if (creativeModeTab.getType() != CreativeModeTab.Type.SEARCH) {
                            set.addAll(creativeModeTab.getSearchTabDisplayItems());
                        }
                    }

                    output.acceptAll(set);
                })
                .backgroundTexture(SEARCH_BACKGROUND)
                .alignedRight()
                .type(CreativeModeTab.Type.SEARCH)
                .build()
        );
        Registry.register(
            registry,
            TOOLS_AND_UTILITIES,
            CreativeModeTab.builder(CreativeModeTab.Row.BOTTOM, 0)
                .title(Component.translatable("itemGroup.tools"))
                .icon(() -> new ItemStack(Items.DIAMOND_PICKAXE))
                .displayItems(
                    (parameters, output) -> {
                        output.accept(Items.WOODEN_SHOVEL);
                        output.accept(Items.WOODEN_PICKAXE);
                        output.accept(Items.WOODEN_AXE);
                        output.accept(Items.WOODEN_HOE);
                        output.accept(Items.STONE_SHOVEL);
                        output.accept(Items.STONE_PICKAXE);
                        output.accept(Items.STONE_AXE);
                        output.accept(Items.STONE_HOE);
                        output.accept(Items.IRON_SHOVEL);
                        output.accept(Items.IRON_PICKAXE);
                        output.accept(Items.IRON_AXE);
                        output.accept(Items.IRON_HOE);
                        output.accept(Items.GOLDEN_SHOVEL);
                        output.accept(Items.GOLDEN_PICKAXE);
                        output.accept(Items.GOLDEN_AXE);
                        output.accept(Items.GOLDEN_HOE);
                        output.accept(Items.DIAMOND_SHOVEL);
                        output.accept(Items.DIAMOND_PICKAXE);
                        output.accept(Items.DIAMOND_AXE);
                        output.accept(Items.DIAMOND_HOE);
                        output.accept(Items.NETHERITE_SHOVEL);
                        output.accept(Items.NETHERITE_PICKAXE);
                        output.accept(Items.NETHERITE_AXE);
                        output.accept(Items.NETHERITE_HOE);
                        output.accept(Items.BUCKET);
                        output.accept(Items.WATER_BUCKET);
                        output.accept(Items.COD_BUCKET);
                        output.accept(Items.SALMON_BUCKET);
                        output.accept(Items.TROPICAL_FISH_BUCKET);
                        output.accept(Items.PUFFERFISH_BUCKET);
                        output.accept(Items.AXOLOTL_BUCKET);
                        output.accept(Items.TADPOLE_BUCKET);
                        output.accept(Items.LAVA_BUCKET);
                        output.accept(Items.POWDER_SNOW_BUCKET);
                        output.accept(Items.MILK_BUCKET);
                        output.accept(Items.FISHING_ROD);
                        output.accept(Items.FLINT_AND_STEEL);
                        output.accept(Items.FIRE_CHARGE);
                        output.accept(Items.BONE_MEAL);
                        output.accept(Items.SHEARS);
                        output.accept(Items.BRUSH);
                        output.accept(Items.NAME_TAG);
                        output.accept(Items.LEAD);
                        output.accept(Items.BUNDLE);
                        output.accept(Items.WHITE_BUNDLE);
                        output.accept(Items.LIGHT_GRAY_BUNDLE);
                        output.accept(Items.GRAY_BUNDLE);
                        output.accept(Items.BLACK_BUNDLE);
                        output.accept(Items.BROWN_BUNDLE);
                        output.accept(Items.RED_BUNDLE);
                        output.accept(Items.ORANGE_BUNDLE);
                        output.accept(Items.YELLOW_BUNDLE);
                        output.accept(Items.LIME_BUNDLE);
                        output.accept(Items.GREEN_BUNDLE);
                        output.accept(Items.CYAN_BUNDLE);
                        output.accept(Items.LIGHT_BLUE_BUNDLE);
                        output.accept(Items.BLUE_BUNDLE);
                        output.accept(Items.PURPLE_BUNDLE);
                        output.accept(Items.MAGENTA_BUNDLE);
                        output.accept(Items.PINK_BUNDLE);
                        output.accept(Items.COMPASS);
                        output.accept(Items.RECOVERY_COMPASS);
                        output.accept(Items.CLOCK);
                        output.accept(Items.SPYGLASS);
                        output.accept(Items.MAP);
                        output.accept(Items.WRITABLE_BOOK);
                        output.accept(Items.WIND_CHARGE);
                        output.accept(Items.ENDER_PEARL);
                        output.accept(Items.ENDER_EYE);
                        output.accept(Items.ELYTRA);
                        generateFireworksAllDurations(output, CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS);
                        output.accept(Items.SADDLE);
                        output.accept(Items.WHITE_HARNESS);
                        output.accept(Items.LIGHT_GRAY_HARNESS);
                        output.accept(Items.GRAY_HARNESS);
                        output.accept(Items.BLACK_HARNESS);
                        output.accept(Items.BROWN_HARNESS);
                        output.accept(Items.RED_HARNESS);
                        output.accept(Items.ORANGE_HARNESS);
                        output.accept(Items.YELLOW_HARNESS);
                        output.accept(Items.LIME_HARNESS);
                        output.accept(Items.GREEN_HARNESS);
                        output.accept(Items.CYAN_HARNESS);
                        output.accept(Items.LIGHT_BLUE_HARNESS);
                        output.accept(Items.BLUE_HARNESS);
                        output.accept(Items.PURPLE_HARNESS);
                        output.accept(Items.MAGENTA_HARNESS);
                        output.accept(Items.PINK_HARNESS);
                        output.accept(Items.CARROT_ON_A_STICK);
                        output.accept(Items.WARPED_FUNGUS_ON_A_STICK);
                        output.accept(Items.OAK_BOAT);
                        output.accept(Items.OAK_CHEST_BOAT);
                        output.accept(Items.SPRUCE_BOAT);
                        output.accept(Items.SPRUCE_CHEST_BOAT);
                        output.accept(Items.BIRCH_BOAT);
                        output.accept(Items.BIRCH_CHEST_BOAT);
                        output.accept(Items.JUNGLE_BOAT);
                        output.accept(Items.JUNGLE_CHEST_BOAT);
                        output.accept(Items.ACACIA_BOAT);
                        output.accept(Items.ACACIA_CHEST_BOAT);
                        output.accept(Items.DARK_OAK_BOAT);
                        output.accept(Items.DARK_OAK_CHEST_BOAT);
                        output.accept(Items.MANGROVE_BOAT);
                        output.accept(Items.MANGROVE_CHEST_BOAT);
                        output.accept(Items.CHERRY_BOAT);
                        output.accept(Items.CHERRY_CHEST_BOAT);
                        output.accept(Items.PALE_OAK_BOAT);
                        output.accept(Items.PALE_OAK_CHEST_BOAT);
                        output.accept(Items.BAMBOO_RAFT);
                        output.accept(Items.BAMBOO_CHEST_RAFT);
                        output.accept(Items.RAIL);
                        output.accept(Items.POWERED_RAIL);
                        output.accept(Items.DETECTOR_RAIL);
                        output.accept(Items.ACTIVATOR_RAIL);
                        output.accept(Items.MINECART);
                        output.accept(Items.HOPPER_MINECART);
                        output.accept(Items.CHEST_MINECART);
                        output.accept(Items.FURNACE_MINECART);
                        output.accept(Items.TNT_MINECART);
                        parameters.holders()
                            .lookup(Registries.INSTRUMENT)
                            .ifPresent(
                                registryLookup -> generateInstrumentTypes(
                                    output, registryLookup, Items.GOAT_HORN, InstrumentTags.GOAT_HORNS, CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS
                                )
                            );
                        output.accept(Items.MUSIC_DISC_13);
                        output.accept(Items.MUSIC_DISC_CAT);
                        output.accept(Items.MUSIC_DISC_BLOCKS);
                        output.accept(Items.MUSIC_DISC_CHIRP);
                        output.accept(Items.MUSIC_DISC_FAR);
                        output.accept(Items.MUSIC_DISC_MALL);
                        output.accept(Items.MUSIC_DISC_MELLOHI);
                        output.accept(Items.MUSIC_DISC_STAL);
                        output.accept(Items.MUSIC_DISC_STRAD);
                        output.accept(Items.MUSIC_DISC_WARD);
                        output.accept(Items.MUSIC_DISC_11);
                        output.accept(Items.MUSIC_DISC_CREATOR_MUSIC_BOX);
                        output.accept(Items.MUSIC_DISC_WAIT);
                        output.accept(Items.MUSIC_DISC_CREATOR);
                        output.accept(Items.MUSIC_DISC_PRECIPICE);
                        output.accept(Items.MUSIC_DISC_OTHERSIDE);
                        output.accept(Items.MUSIC_DISC_RELIC);
                        output.accept(Items.MUSIC_DISC_5);
                        output.accept(Items.MUSIC_DISC_PIGSTEP);
                        output.accept(Items.MUSIC_DISC_TEARS);
                        output.accept(Items.MUSIC_DISC_LAVA_CHICKEN);
                    }
                )
                .build()
        );
        Registry.register(
            registry,
            COMBAT,
            CreativeModeTab.builder(CreativeModeTab.Row.BOTTOM, 1)
                .title(Component.translatable("itemGroup.combat"))
                .icon(() -> new ItemStack(Items.NETHERITE_SWORD))
                .displayItems(
                    (parameters, output) -> {
                        output.accept(Items.WOODEN_SWORD);
                        output.accept(Items.STONE_SWORD);
                        output.accept(Items.IRON_SWORD);
                        output.accept(Items.GOLDEN_SWORD);
                        output.accept(Items.DIAMOND_SWORD);
                        output.accept(Items.NETHERITE_SWORD);
                        output.accept(Items.WOODEN_AXE);
                        output.accept(Items.STONE_AXE);
                        output.accept(Items.IRON_AXE);
                        output.accept(Items.GOLDEN_AXE);
                        output.accept(Items.DIAMOND_AXE);
                        output.accept(Items.NETHERITE_AXE);
                        output.accept(Items.TRIDENT);
                        output.accept(Items.MACE);
                        output.accept(Items.SHIELD);
                        output.accept(Items.LEATHER_HELMET);
                        output.accept(Items.LEATHER_CHESTPLATE);
                        output.accept(Items.LEATHER_LEGGINGS);
                        output.accept(Items.LEATHER_BOOTS);
                        output.accept(Items.CHAINMAIL_HELMET);
                        output.accept(Items.CHAINMAIL_CHESTPLATE);
                        output.accept(Items.CHAINMAIL_LEGGINGS);
                        output.accept(Items.CHAINMAIL_BOOTS);
                        output.accept(Items.IRON_HELMET);
                        output.accept(Items.IRON_CHESTPLATE);
                        output.accept(Items.IRON_LEGGINGS);
                        output.accept(Items.IRON_BOOTS);
                        output.accept(Items.GOLDEN_HELMET);
                        output.accept(Items.GOLDEN_CHESTPLATE);
                        output.accept(Items.GOLDEN_LEGGINGS);
                        output.accept(Items.GOLDEN_BOOTS);
                        output.accept(Items.DIAMOND_HELMET);
                        output.accept(Items.DIAMOND_CHESTPLATE);
                        output.accept(Items.DIAMOND_LEGGINGS);
                        output.accept(Items.DIAMOND_BOOTS);
                        output.accept(Items.NETHERITE_HELMET);
                        output.accept(Items.NETHERITE_CHESTPLATE);
                        output.accept(Items.NETHERITE_LEGGINGS);
                        output.accept(Items.NETHERITE_BOOTS);
                        output.accept(Items.TURTLE_HELMET);
                        output.accept(Items.LEATHER_HORSE_ARMOR);
                        output.accept(Items.IRON_HORSE_ARMOR);
                        output.accept(Items.GOLDEN_HORSE_ARMOR);
                        output.accept(Items.DIAMOND_HORSE_ARMOR);
                        output.accept(Items.WOLF_ARMOR);
                        output.accept(Items.TOTEM_OF_UNDYING);
                        output.accept(Items.TNT);
                        output.accept(Items.END_CRYSTAL);
                        output.accept(Items.SNOWBALL);
                        output.accept(Items.EGG);
                        output.accept(Items.BROWN_EGG);
                        output.accept(Items.BLUE_EGG);
                        output.accept(Items.WIND_CHARGE);
                        output.accept(Items.BOW);
                        output.accept(Items.CROSSBOW);
                        generateFireworksAllDurations(output, CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS);
                        output.accept(Items.ARROW);
                        output.accept(Items.SPECTRAL_ARROW);
                        parameters.holders()
                            .lookup(Registries.POTION)
                            .ifPresent(
                                registryLookup -> generatePotionEffectTypes(
                                    output,
                                    registryLookup,
                                    Items.TIPPED_ARROW,
                                    CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS,
                                    parameters.enabledFeatures()
                                )
                            );
                    }
                )
                .build()
        );
        Registry.register(
            registry,
            FOOD_AND_DRINKS,
            CreativeModeTab.builder(CreativeModeTab.Row.BOTTOM, 2)
                .title(Component.translatable("itemGroup.foodAndDrink"))
                .icon(() -> new ItemStack(Items.GOLDEN_APPLE))
                .displayItems(
                    (parameters, output) -> {
                        output.accept(Items.APPLE);
                        output.accept(Items.GOLDEN_APPLE);
                        output.accept(Items.ENCHANTED_GOLDEN_APPLE);
                        output.accept(Items.MELON_SLICE);
                        output.accept(Items.SWEET_BERRIES);
                        output.accept(Items.GLOW_BERRIES);
                        output.accept(Items.CHORUS_FRUIT);
                        output.accept(Items.CARROT);
                        output.accept(Items.GOLDEN_CARROT);
                        output.accept(Items.POTATO);
                        output.accept(Items.BAKED_POTATO);
                        output.accept(Items.POISONOUS_POTATO);
                        output.accept(Items.BEETROOT);
                        output.accept(Items.DRIED_KELP);
                        output.accept(Items.BEEF);
                        output.accept(Items.COOKED_BEEF);
                        output.accept(Items.PORKCHOP);
                        output.accept(Items.COOKED_PORKCHOP);
                        output.accept(Items.MUTTON);
                        output.accept(Items.COOKED_MUTTON);
                        output.accept(Items.CHICKEN);
                        output.accept(Items.COOKED_CHICKEN);
                        output.accept(Items.RABBIT);
                        output.accept(Items.COOKED_RABBIT);
                        output.accept(Items.COD);
                        output.accept(Items.COOKED_COD);
                        output.accept(Items.SALMON);
                        output.accept(Items.COOKED_SALMON);
                        output.accept(Items.TROPICAL_FISH);
                        output.accept(Items.PUFFERFISH);
                        output.accept(Items.BREAD);
                        output.accept(Items.COOKIE);
                        output.accept(Items.CAKE);
                        output.accept(Items.PUMPKIN_PIE);
                        output.accept(Items.ROTTEN_FLESH);
                        output.accept(Items.SPIDER_EYE);
                        output.accept(Items.MUSHROOM_STEW);
                        output.accept(Items.BEETROOT_SOUP);
                        output.accept(Items.RABBIT_STEW);
                        generateSuspiciousStews(output, CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS);
                        output.accept(Items.MILK_BUCKET);
                        output.accept(Items.HONEY_BOTTLE);
                        generateOminousBottles(output, CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS);
                        parameters.holders()
                            .lookup(Registries.POTION)
                            .ifPresent(
                                registryLookup -> {
                                    generatePotionEffectTypes(
                                        output,
                                        registryLookup,
                                        Items.POTION,
                                        CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS,
                                        parameters.enabledFeatures()
                                    );
                                    generatePotionEffectTypes(
                                        output,
                                        registryLookup,
                                        Items.SPLASH_POTION,
                                        CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS,
                                        parameters.enabledFeatures()
                                    );
                                    generatePotionEffectTypes(
                                        output,
                                        registryLookup,
                                        Items.LINGERING_POTION,
                                        CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS,
                                        parameters.enabledFeatures()
                                    );
                                }
                            );
                    }
                )
                .build()
        );
        Registry.register(
            registry,
            INGREDIENTS,
            CreativeModeTab.builder(CreativeModeTab.Row.BOTTOM, 3)
                .title(Component.translatable("itemGroup.ingredients"))
                .icon(() -> new ItemStack(Items.IRON_INGOT))
                .displayItems((parameters, output) -> {
                    output.accept(Items.COAL);
                    output.accept(Items.CHARCOAL);
                    output.accept(Items.RAW_IRON);
                    output.accept(Items.RAW_COPPER);
                    output.accept(Items.RAW_GOLD);
                    output.accept(Items.EMERALD);
                    output.accept(Items.LAPIS_LAZULI);
                    output.accept(Items.DIAMOND);
                    output.accept(Items.ANCIENT_DEBRIS);
                    output.accept(Items.QUARTZ);
                    output.accept(Items.AMETHYST_SHARD);
                    output.accept(Items.IRON_NUGGET);
                    output.accept(Items.GOLD_NUGGET);
                    output.accept(Items.IRON_INGOT);
                    output.accept(Items.COPPER_INGOT);
                    output.accept(Items.GOLD_INGOT);
                    output.accept(Items.NETHERITE_SCRAP);
                    output.accept(Items.NETHERITE_INGOT);
                    output.accept(Items.STICK);
                    output.accept(Items.FLINT);
                    output.accept(Items.WHEAT);
                    output.accept(Items.BONE);
                    output.accept(Items.BONE_MEAL);
                    output.accept(Items.STRING);
                    output.accept(Items.FEATHER);
                    output.accept(Items.SNOWBALL);
                    output.accept(Items.EGG);
                    output.accept(Items.BROWN_EGG);
                    output.accept(Items.BLUE_EGG);
                    output.accept(Items.LEATHER);
                    output.accept(Items.RABBIT_HIDE);
                    output.accept(Items.HONEYCOMB);
                    output.accept(Items.RESIN_CLUMP);
                    output.accept(Items.INK_SAC);
                    output.accept(Items.GLOW_INK_SAC);
                    output.accept(Items.TURTLE_SCUTE);
                    output.accept(Items.ARMADILLO_SCUTE);
                    output.accept(Items.SLIME_BALL);
                    output.accept(Items.CLAY_BALL);
                    output.accept(Items.PRISMARINE_SHARD);
                    output.accept(Items.PRISMARINE_CRYSTALS);
                    output.accept(Items.NAUTILUS_SHELL);
                    output.accept(Items.HEART_OF_THE_SEA);
                    output.accept(Items.FIRE_CHARGE);
                    output.accept(Items.BLAZE_ROD);
                    output.accept(Items.BREEZE_ROD);
                    output.accept(Items.HEAVY_CORE);
                    output.accept(Items.NETHER_STAR);
                    output.accept(Items.ENDER_PEARL);
                    output.accept(Items.ENDER_EYE);
                    output.accept(Items.SHULKER_SHELL);
                    output.accept(Items.POPPED_CHORUS_FRUIT);
                    output.accept(Items.ECHO_SHARD);
                    output.accept(Items.DISC_FRAGMENT_5);
                    output.accept(Items.WHITE_DYE);
                    output.accept(Items.LIGHT_GRAY_DYE);
                    output.accept(Items.GRAY_DYE);
                    output.accept(Items.BLACK_DYE);
                    output.accept(Items.BROWN_DYE);
                    output.accept(Items.RED_DYE);
                    output.accept(Items.ORANGE_DYE);
                    output.accept(Items.YELLOW_DYE);
                    output.accept(Items.LIME_DYE);
                    output.accept(Items.GREEN_DYE);
                    output.accept(Items.CYAN_DYE);
                    output.accept(Items.LIGHT_BLUE_DYE);
                    output.accept(Items.BLUE_DYE);
                    output.accept(Items.PURPLE_DYE);
                    output.accept(Items.MAGENTA_DYE);
                    output.accept(Items.PINK_DYE);
                    output.accept(Items.BOWL);
                    output.accept(Items.BRICK);
                    output.accept(Items.NETHER_BRICK);
                    output.accept(Items.RESIN_BRICK);
                    output.accept(Items.PAPER);
                    output.accept(Items.BOOK);
                    output.accept(Items.FIREWORK_STAR);
                    output.accept(Items.GLASS_BOTTLE);
                    output.accept(Items.NETHER_WART);
                    output.accept(Items.REDSTONE);
                    output.accept(Items.GLOWSTONE_DUST);
                    output.accept(Items.GUNPOWDER);
                    output.accept(Items.DRAGON_BREATH);
                    output.accept(Items.FERMENTED_SPIDER_EYE);
                    output.accept(Items.BLAZE_POWDER);
                    output.accept(Items.SUGAR);
                    output.accept(Items.RABBIT_FOOT);
                    output.accept(Items.GLISTERING_MELON_SLICE);
                    output.accept(Items.SPIDER_EYE);
                    output.accept(Items.PUFFERFISH);
                    output.accept(Items.MAGMA_CREAM);
                    output.accept(Items.GOLDEN_CARROT);
                    output.accept(Items.GHAST_TEAR);
                    output.accept(Items.TURTLE_HELMET);
                    output.accept(Items.PHANTOM_MEMBRANE);
                    output.accept(Items.FIELD_MASONED_BANNER_PATTERN);
                    output.accept(Items.BORDURE_INDENTED_BANNER_PATTERN);
                    output.accept(Items.FLOWER_BANNER_PATTERN);
                    output.accept(Items.CREEPER_BANNER_PATTERN);
                    output.accept(Items.SKULL_BANNER_PATTERN);
                    output.accept(Items.MOJANG_BANNER_PATTERN);
                    output.accept(Items.GLOBE_BANNER_PATTERN);
                    output.accept(Items.PIGLIN_BANNER_PATTERN);
                    output.accept(Items.FLOW_BANNER_PATTERN);
                    output.accept(Items.GUSTER_BANNER_PATTERN);
                    output.accept(Items.ANGLER_POTTERY_SHERD);
                    output.accept(Items.ARCHER_POTTERY_SHERD);
                    output.accept(Items.ARMS_UP_POTTERY_SHERD);
                    output.accept(Items.BLADE_POTTERY_SHERD);
                    output.accept(Items.BREWER_POTTERY_SHERD);
                    output.accept(Items.BURN_POTTERY_SHERD);
                    output.accept(Items.DANGER_POTTERY_SHERD);
                    output.accept(Items.EXPLORER_POTTERY_SHERD);
                    output.accept(Items.FLOW_POTTERY_SHERD);
                    output.accept(Items.FRIEND_POTTERY_SHERD);
                    output.accept(Items.GUSTER_POTTERY_SHERD);
                    output.accept(Items.HEART_POTTERY_SHERD);
                    output.accept(Items.HEARTBREAK_POTTERY_SHERD);
                    output.accept(Items.HOWL_POTTERY_SHERD);
                    output.accept(Items.MINER_POTTERY_SHERD);
                    output.accept(Items.MOURNER_POTTERY_SHERD);
                    output.accept(Items.PLENTY_POTTERY_SHERD);
                    output.accept(Items.PRIZE_POTTERY_SHERD);
                    output.accept(Items.SCRAPE_POTTERY_SHERD);
                    output.accept(Items.SHEAF_POTTERY_SHERD);
                    output.accept(Items.SHELTER_POTTERY_SHERD);
                    output.accept(Items.SKULL_POTTERY_SHERD);
                    output.accept(Items.SNORT_POTTERY_SHERD);
                    output.accept(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE);
                    output.accept(Items.SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.VEX_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.WILD_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.COAST_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.DUNE_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.RAISER_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.HOST_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.WARD_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.TIDE_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.RIB_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.EYE_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.FLOW_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.BOLT_ARMOR_TRIM_SMITHING_TEMPLATE);
                    output.accept(Items.EXPERIENCE_BOTTLE);
                    output.accept(Items.TRIAL_KEY);
                    output.accept(Items.OMINOUS_TRIAL_KEY);
                    parameters.holders().lookup(Registries.ENCHANTMENT).ifPresent(registryLookup -> {
                        generateEnchantmentBookTypesOnlyMaxLevel(output, registryLookup, CreativeModeTab.TabVisibility.PARENT_TAB_ONLY);
                        generateEnchantmentBookTypesAllLevels(output, registryLookup, CreativeModeTab.TabVisibility.SEARCH_TAB_ONLY);
                    });
                })
                .build()
        );
        Registry.register(
            registry,
            SPAWN_EGGS,
            CreativeModeTab.builder(CreativeModeTab.Row.BOTTOM, 4)
                .title(Component.translatable("itemGroup.spawnEggs"))
                .icon(() -> new ItemStack(Items.CREEPER_SPAWN_EGG))
                .displayItems((parameters, output) -> {
                    output.accept(Items.SPAWNER);
                    output.accept(Items.TRIAL_SPAWNER);
                    output.accept(Items.CREAKING_HEART);
                    output.accept(Items.ALLAY_SPAWN_EGG);
                    output.accept(Items.ARMADILLO_SPAWN_EGG);
                    output.accept(Items.AXOLOTL_SPAWN_EGG);
                    output.accept(Items.BAT_SPAWN_EGG);
                    output.accept(Items.BEE_SPAWN_EGG);
                    output.accept(Items.BLAZE_SPAWN_EGG);
                    output.accept(Items.BOGGED_SPAWN_EGG);
                    output.accept(Items.BREEZE_SPAWN_EGG);
                    output.accept(Items.CAMEL_SPAWN_EGG);
                    output.accept(Items.CAT_SPAWN_EGG);
                    output.accept(Items.CAVE_SPIDER_SPAWN_EGG);
                    output.accept(Items.CHICKEN_SPAWN_EGG);
                    output.accept(Items.COD_SPAWN_EGG);
                    output.accept(Items.COW_SPAWN_EGG);
                    output.accept(Items.CREAKING_SPAWN_EGG);
                    output.accept(Items.CREEPER_SPAWN_EGG);
                    output.accept(Items.DOLPHIN_SPAWN_EGG);
                    output.accept(Items.DONKEY_SPAWN_EGG);
                    output.accept(Items.DROWNED_SPAWN_EGG);
                    output.accept(Items.ELDER_GUARDIAN_SPAWN_EGG);
                    output.accept(Items.ENDERMAN_SPAWN_EGG);
                    output.accept(Items.ENDERMITE_SPAWN_EGG);
                    output.accept(Items.EVOKER_SPAWN_EGG);
                    output.accept(Items.FOX_SPAWN_EGG);
                    output.accept(Items.FROG_SPAWN_EGG);
                    output.accept(Items.GHAST_SPAWN_EGG);
                    output.accept(Items.GLOW_SQUID_SPAWN_EGG);
                    output.accept(Items.GOAT_SPAWN_EGG);
                    output.accept(Items.GUARDIAN_SPAWN_EGG);
                    output.accept(Items.HAPPY_GHAST_SPAWN_EGG);
                    output.accept(Items.HOGLIN_SPAWN_EGG);
                    output.accept(Items.HORSE_SPAWN_EGG);
                    output.accept(Items.HUSK_SPAWN_EGG);
                    output.accept(Items.IRON_GOLEM_SPAWN_EGG);
                    output.accept(Items.LLAMA_SPAWN_EGG);
                    output.accept(Items.MAGMA_CUBE_SPAWN_EGG);
                    output.accept(Items.MOOSHROOM_SPAWN_EGG);
                    output.accept(Items.MULE_SPAWN_EGG);
                    output.accept(Items.OCELOT_SPAWN_EGG);
                    output.accept(Items.PANDA_SPAWN_EGG);
                    output.accept(Items.PARROT_SPAWN_EGG);
                    output.accept(Items.PHANTOM_SPAWN_EGG);
                    output.accept(Items.PIG_SPAWN_EGG);
                    output.accept(Items.PIGLIN_SPAWN_EGG);
                    output.accept(Items.PIGLIN_BRUTE_SPAWN_EGG);
                    output.accept(Items.PILLAGER_SPAWN_EGG);
                    output.accept(Items.POLAR_BEAR_SPAWN_EGG);
                    output.accept(Items.PUFFERFISH_SPAWN_EGG);
                    output.accept(Items.RABBIT_SPAWN_EGG);
                    output.accept(Items.RAVAGER_SPAWN_EGG);
                    output.accept(Items.SALMON_SPAWN_EGG);
                    output.accept(Items.SHEEP_SPAWN_EGG);
                    output.accept(Items.SHULKER_SPAWN_EGG);
                    output.accept(Items.SILVERFISH_SPAWN_EGG);
                    output.accept(Items.SKELETON_SPAWN_EGG);
                    output.accept(Items.SKELETON_HORSE_SPAWN_EGG);
                    output.accept(Items.SLIME_SPAWN_EGG);
                    output.accept(Items.SNIFFER_SPAWN_EGG);
                    output.accept(Items.SNOW_GOLEM_SPAWN_EGG);
                    output.accept(Items.SPIDER_SPAWN_EGG);
                    output.accept(Items.SQUID_SPAWN_EGG);
                    output.accept(Items.STRAY_SPAWN_EGG);
                    output.accept(Items.STRIDER_SPAWN_EGG);
                    output.accept(Items.TADPOLE_SPAWN_EGG);
                    output.accept(Items.TRADER_LLAMA_SPAWN_EGG);
                    output.accept(Items.TROPICAL_FISH_SPAWN_EGG);
                    output.accept(Items.TURTLE_SPAWN_EGG);
                    output.accept(Items.VEX_SPAWN_EGG);
                    output.accept(Items.VILLAGER_SPAWN_EGG);
                    output.accept(Items.VINDICATOR_SPAWN_EGG);
                    output.accept(Items.WANDERING_TRADER_SPAWN_EGG);
                    output.accept(Items.WARDEN_SPAWN_EGG);
                    output.accept(Items.WITCH_SPAWN_EGG);
                    output.accept(Items.WITHER_SKELETON_SPAWN_EGG);
                    output.accept(Items.WOLF_SPAWN_EGG);
                    output.accept(Items.ZOGLIN_SPAWN_EGG);
                    output.accept(Items.ZOMBIE_SPAWN_EGG);
                    output.accept(Items.ZOMBIE_HORSE_SPAWN_EGG);
                    output.accept(Items.ZOMBIE_VILLAGER_SPAWN_EGG);
                    output.accept(Items.ZOMBIFIED_PIGLIN_SPAWN_EGG);
                })
                .build()
        );
        Registry.register(
            registry,
            OP_BLOCKS,
            CreativeModeTab.builder(CreativeModeTab.Row.BOTTOM, 5)
                .title(Component.translatable("itemGroup.op"))
                .icon(() -> new ItemStack(Items.COMMAND_BLOCK))
                .alignedRight()
                .displayItems(
                    (parameters, output) -> {
                        if (parameters.hasPermissions()) {
                            output.accept(Items.COMMAND_BLOCK);
                            output.accept(Items.CHAIN_COMMAND_BLOCK);
                            output.accept(Items.REPEATING_COMMAND_BLOCK);
                            output.accept(Items.COMMAND_BLOCK_MINECART);
                            output.accept(Items.JIGSAW);
                            output.accept(Items.STRUCTURE_BLOCK);
                            output.accept(Items.STRUCTURE_VOID);
                            output.accept(Items.BARRIER);
                            output.accept(Items.DEBUG_STICK);
                            output.accept(Items.TEST_INSTANCE_BLOCK);

                            for (TestBlockMode testBlockMode : TestBlockMode.values()) {
                                output.accept(TestBlock.setModeOnStack(new ItemStack(Items.TEST_BLOCK), testBlockMode));
                            }

                            for (int i = 15; i >= 0; i--) {
                                output.accept(LightBlock.setLightOnStack(new ItemStack(Items.LIGHT), i));
                            }

                            parameters.holders()
                                .lookup(Registries.PAINTING_VARIANT)
                                .ifPresent(
                                    registryLookup -> generatePresetPaintings(
                                        output,
                                        parameters.holders(),
                                        (HolderLookup.RegistryLookup<PaintingVariant>)registryLookup,
                                        holder -> !holder.is(PaintingVariantTags.PLACEABLE),
                                        CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS
                                    )
                                );
                        }
                    }
                )
                .build()
        );
        return Registry.register(
            registry,
            INVENTORY,
            CreativeModeTab.builder(CreativeModeTab.Row.BOTTOM, 6)
                .title(Component.translatable("itemGroup.inventory"))
                .icon(() -> new ItemStack(Blocks.CHEST))
                .backgroundTexture(INVENTORY_BACKGROUND)
                .hideTitle()
                .alignedRight()
                .type(CreativeModeTab.Type.INVENTORY)
                .noScrollBar()
                .build()
        );
    }

    public static void validate() {
        Map<Pair<CreativeModeTab.Row, Integer>, String> map = new HashMap<>();

        for (ResourceKey<CreativeModeTab> resourceKey : BuiltInRegistries.CREATIVE_MODE_TAB.registryKeySet()) {
            CreativeModeTab creativeModeTab = BuiltInRegistries.CREATIVE_MODE_TAB.getValueOrThrow(resourceKey);
            String string = creativeModeTab.getDisplayName().getString();
            String string1 = map.put(Pair.of(creativeModeTab.row(), creativeModeTab.column()), string);
            if (string1 != null) {
                throw new IllegalArgumentException("Duplicate position: " + string + " vs. " + string1);
            }
        }
    }

    public static CreativeModeTab getDefaultTab() {
        return BuiltInRegistries.CREATIVE_MODE_TAB.getValueOrThrow(BUILDING_BLOCKS);
    }

    private static void generatePotionEffectTypes(
        CreativeModeTab.Output output, HolderLookup<Potion> potions, Item item, CreativeModeTab.TabVisibility tabVisibility, FeatureFlagSet requiredFeatures
    ) {
        potions.listElements()
            .filter(reference -> reference.value().isEnabled(requiredFeatures))
            .map(reference -> PotionContents.createItemStack(item, reference))
            .forEach(itemStack -> output.accept(itemStack, tabVisibility));
    }

    private static void generateEnchantmentBookTypesOnlyMaxLevel(
        CreativeModeTab.Output output, HolderLookup<Enchantment> enchantments, CreativeModeTab.TabVisibility tabVisibility
    ) {
        enchantments.listElements()
            .map(reference -> EnchantmentHelper.createBook(new EnchantmentInstance(reference, reference.value().getMaxLevel())))
            .forEach(itemStack -> output.accept(itemStack, tabVisibility));
    }

    private static void generateEnchantmentBookTypesAllLevels(
        CreativeModeTab.Output output, HolderLookup<Enchantment> enchantments, CreativeModeTab.TabVisibility tabVisibility
    ) {
        enchantments.listElements()
            .flatMap(
                reference -> IntStream.rangeClosed(reference.value().getMinLevel(), reference.value().getMaxLevel())
                    .mapToObj(i -> EnchantmentHelper.createBook(new EnchantmentInstance(reference, i)))
            )
            .forEach(itemStack -> output.accept(itemStack, tabVisibility));
    }

    private static void generateInstrumentTypes(
        CreativeModeTab.Output output,
        HolderLookup<Instrument> instruments,
        Item item,
        TagKey<Instrument> instrument,
        CreativeModeTab.TabVisibility tabVisibility
    ) {
        instruments.get(instrument)
            .ifPresent(
                named -> named.stream()
                    .map(holder -> InstrumentItem.create(item, (Holder<Instrument>)holder))
                    .forEach(itemStack -> output.accept(itemStack, tabVisibility))
            );
    }

    private static void generateSuspiciousStews(CreativeModeTab.Output output, CreativeModeTab.TabVisibility tabVisibility) {
        List<SuspiciousEffectHolder> allEffectHolders = SuspiciousEffectHolder.getAllEffectHolders();
        Set<ItemStack> set = ItemStackLinkedSet.createTypeAndComponentsSet();

        for (SuspiciousEffectHolder suspiciousEffectHolder : allEffectHolders) {
            ItemStack itemStack = new ItemStack(Items.SUSPICIOUS_STEW);
            itemStack.set(DataComponents.SUSPICIOUS_STEW_EFFECTS, suspiciousEffectHolder.getSuspiciousEffects());
            set.add(itemStack);
        }

        output.acceptAll(set, tabVisibility);
    }

    private static void generateOminousBottles(CreativeModeTab.Output output, CreativeModeTab.TabVisibility tabVisibility) {
        for (int i = 0; i <= 4; i++) {
            ItemStack itemStack = new ItemStack(Items.OMINOUS_BOTTLE);
            itemStack.set(DataComponents.OMINOUS_BOTTLE_AMPLIFIER, new OminousBottleAmplifier(i));
            output.accept(itemStack, tabVisibility);
        }
    }

    private static void generateFireworksAllDurations(CreativeModeTab.Output output, CreativeModeTab.TabVisibility tabVisibility) {
        for (byte b : FireworkRocketItem.CRAFTABLE_DURATIONS) {
            ItemStack itemStack = new ItemStack(Items.FIREWORK_ROCKET);
            itemStack.set(DataComponents.FIREWORKS, new Fireworks(b, List.of()));
            output.accept(itemStack, tabVisibility);
        }
    }

    private static void generatePresetPaintings(
        CreativeModeTab.Output output,
        HolderLookup.Provider registries,
        HolderLookup.RegistryLookup<PaintingVariant> paintingVariants,
        Predicate<Holder<PaintingVariant>> predicate,
        CreativeModeTab.TabVisibility tabVisibility
    ) {
        RegistryOps<Tag> registryOps = registries.createSerializationContext(NbtOps.INSTANCE);
        paintingVariants.listElements().filter(predicate).sorted(PAINTING_COMPARATOR).forEach(reference -> {
            ItemStack itemStack = new ItemStack(Items.PAINTING);
            itemStack.set(DataComponents.PAINTING_VARIANT, reference);
            output.accept(itemStack, tabVisibility);
        });
    }

    public static List<CreativeModeTab> tabs() {
        return streamAllTabs().filter(CreativeModeTab::shouldDisplay).toList();
    }

    public static List<CreativeModeTab> allTabs() {
        return streamAllTabs().toList();
    }

    private static Stream<CreativeModeTab> streamAllTabs() {
        return BuiltInRegistries.CREATIVE_MODE_TAB.stream();
    }

    public static CreativeModeTab searchTab() {
        return BuiltInRegistries.CREATIVE_MODE_TAB.getValueOrThrow(SEARCH);
    }

    private static void buildAllTabContents(CreativeModeTab.ItemDisplayParameters parameters) {
        streamAllTabs()
            .filter(creativeModeTab -> creativeModeTab.getType() == CreativeModeTab.Type.CATEGORY)
            .forEach(creativeModeTab -> creativeModeTab.buildContents(parameters));
        streamAllTabs()
            .filter(creativeModeTab -> creativeModeTab.getType() != CreativeModeTab.Type.CATEGORY)
            .forEach(creativeModeTab -> creativeModeTab.buildContents(parameters));
    }

    public static boolean tryRebuildTabContents(FeatureFlagSet enabledFeatures, boolean hasPermissions, HolderLookup.Provider registries) {
        if (CACHED_PARAMETERS != null && !CACHED_PARAMETERS.needsUpdate(enabledFeatures, hasPermissions, registries)) {
            return false;
        } else {
            CACHED_PARAMETERS = new CreativeModeTab.ItemDisplayParameters(enabledFeatures, hasPermissions, registries);
            buildAllTabContents(CACHED_PARAMETERS);
            return true;
        }
    }
}
