/*
 *  Copyright 2025-2026 R3944Realms
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

package top.r3944realms.eroticdungeongame.core.register;

import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.state.properties.WoodType;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import org.jetbrains.annotations.NotNull;
import top.r3944realms.eroticdungeongame.EroticDungeon;
import top.r3944realms.eroticdungeongame.content.item.*;
import top.r3944realms.eroticdungeongame.util.ColorContent;
import top.r3944realms.lib39.util.lang.Pair;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

@SuppressWarnings("unused")
public class EDGItems {

    public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, EroticDungeon.MOD_ID);
    // 床物品列表
    public static final Set<RegistryObject<Item>> SEAT_ITEMS = new HashSet<>();
    public static final Map<ColorContent, RegistryObject<Item>> CUFF_BED_ITEMS = new HashMap<>();
    public static final Map<WoodType, RegistryObject<Item>> RACK_ITEMS = new HashMap<>();
    public static final Map<WoodType, RegistryObject<Item>> X_CROSS_ITEMS = new HashMap<>();
    public static final Map<WoodType, RegistryObject<Item>> PETRINE_CROSS_ITEMS = new HashMap<>();
    public static final Map<WoodType, RegistryObject<Item>> CRUX_ITEMS = new HashMap<>();
    public static final Map<WoodType, RegistryObject<Item>> SPANISH_DONKEY_ITEMS = new HashMap<>();
    public static final Map<WoodType, RegistryObject<Item>> PILLORY_ITEMS = new HashMap<>();
    public static final Map<WoodType, RegistryObject<Item>> WALL_RACK_ITEMS = new HashMap<>();
    public static final Map<WoodType, RegistryObject<Item>> CUFF_POLE_ITEMS = new HashMap<>();
    public static final Map<Pair<ColorContent, WoodType>, RegistryObject<Item>> PRONE_BENCH_ITEMS = new HashMap<>();
    public static final Map<WoodType, RegistryObject<Item>> HANGING_POST_ITEMS = new HashMap<>();

    public static final RegistryObject<Item> DUNGEON_CRAFTING_TABLE = ITEMS.register("dungeon_crafting_table", () ->
            new BlockItem(EDGBlocks.DUNGEON_CRAFTING_TABLE.get(), new Item.Properties())
    );
    public static final RegistryObject<Item> END_ROD_LOVE_MACHINE = ITEMS.register(
            "end_rod_love_machine", () -> new LoveMachineItem(new Item.Properties(), "end_rod")
    );
    public static final RegistryObject<Item> LIGHTNING_ROD_LOVE_MACHINE = ITEMS.register(
            "lightning_rod_love_machine", () -> new LoveMachineItem(new Item.Properties(), "lightning_rod")
    );
    public static final RegistryObject<Item> FILTER = ITEMS.register(
            "filter", () -> new FilterItem(new Item.Properties().stacksTo(1))
    );
    public static final RegistryObject<Item> DEVICE_KEY = ITEMS.register("device_key", () -> new DeviceKeyItem(new Item.Properties()));
    public static final RegistryObject<Item> WHIP = ITEMS.register("whip", () -> new WhipItem(5));
    // 床物品注册
    public static final RegistryObject<Item> WHITE_CUFF_BED = registerCuffBedItem(ColorContent.WHITE);
    public static final RegistryObject<Item> ORANGE_CUFF_BED = registerCuffBedItem(ColorContent.ORANGE);
    public static final RegistryObject<Item> MAGENTA_CUFF_BED = registerCuffBedItem(ColorContent.MAGENTA);
    public static final RegistryObject<Item> LIGHT_BLUE_CUFF_BED = registerCuffBedItem(ColorContent.LIGHT_BLUE);
    public static final RegistryObject<Item> YELLOW_CUFF_BED = registerCuffBedItem(ColorContent.YELLOW);
    public static final RegistryObject<Item> LIME_CUFF_BED = registerCuffBedItem(ColorContent.LIME);
    public static final RegistryObject<Item> PINK_CUFF_BED = registerCuffBedItem(ColorContent.PINK);
    public static final RegistryObject<Item> GRAY_CUFF_BED = registerCuffBedItem(ColorContent.GRAY);
    public static final RegistryObject<Item> LIGHT_GRAY_CUFF_BED = registerCuffBedItem(ColorContent.LIGHT_GRAY);
    public static final RegistryObject<Item> CYAN_CUFF_BED = registerCuffBedItem(ColorContent.CYAN);
    public static final RegistryObject<Item> PURPLE_CUFF_BED = registerCuffBedItem(ColorContent.PURPLE);
    public static final RegistryObject<Item> BLUE_CUFF_BED = registerCuffBedItem(ColorContent.BLUE);
    public static final RegistryObject<Item> BROWN_CUFF_BED = registerCuffBedItem(ColorContent.BROWN);
    public static final RegistryObject<Item> GREEN_CUFF_BED = registerCuffBedItem(ColorContent.GREEN);
    public static final RegistryObject<Item> RED_CUFF_BED = registerCuffBedItem(ColorContent.RED);
    public static final RegistryObject<Item> BLACK_CUFF_BED = registerCuffBedItem(ColorContent.BLACK);

    public static final RegistryObject<Item> OAK_RACK =  registerRackItem(WoodType.OAK);
    public static final RegistryObject<Item> SPRUCE_RACK =  registerRackItem(WoodType.SPRUCE);
    public static final RegistryObject<Item> BIRCH_RACK =  registerRackItem(WoodType.BIRCH);
    public static final RegistryObject<Item> ACACIA_RACK =  registerRackItem(WoodType.ACACIA);
    public static final RegistryObject<Item> CHERRY_RACK =  registerRackItem(WoodType.CHERRY);
    public static final RegistryObject<Item> JUNGLE_RACK =  registerRackItem(WoodType.JUNGLE);
    public static final RegistryObject<Item> DARK_OAK_RACK =  registerRackItem(WoodType.DARK_OAK);
    public static final RegistryObject<Item> CRIMSON_RACK =  registerRackItem(WoodType.CRIMSON);
    public static final RegistryObject<Item> WARPED_RACK =  registerRackItem(WoodType.WARPED);
    public static final RegistryObject<Item> MANGROVE_RACK =  registerRackItem(WoodType.MANGROVE);
    public static final RegistryObject<Item> BAMBOO_RACK =  registerRackItem(WoodType.BAMBOO);

    public static final RegistryObject<Item> OAK_X_CROSS =  registerXCrossItem(WoodType.OAK);
    public static final RegistryObject<Item> SPRUCE_X_CROSS =  registerXCrossItem(WoodType.SPRUCE);
    public static final RegistryObject<Item> BIRCH_X_CROSS =  registerXCrossItem(WoodType.BIRCH);
    public static final RegistryObject<Item> ACACIA_X_CROSS =  registerXCrossItem(WoodType.ACACIA);
    public static final RegistryObject<Item> CHERRY_X_CROSS =  registerXCrossItem(WoodType.CHERRY);
    public static final RegistryObject<Item> JUNGLE_X_CROSS =  registerXCrossItem(WoodType.JUNGLE);
    public static final RegistryObject<Item> DARK_OAK_X_CROSS =  registerXCrossItem(WoodType.DARK_OAK);
    public static final RegistryObject<Item> CRIMSON_X_CROSS =  registerXCrossItem(WoodType.CRIMSON);
    public static final RegistryObject<Item> WARPED_X_CROSS =  registerXCrossItem(WoodType.WARPED);
    public static final RegistryObject<Item> MANGROVE_X_CROSS =  registerXCrossItem(WoodType.MANGROVE);
    public static final RegistryObject<Item> BAMBOO_X_CROSS =  registerXCrossItem(WoodType.BAMBOO);

    public static final RegistryObject<Item> OAK_PETRINE_CROSS =  registerPetrineCrossItem(WoodType.OAK);
    public static final RegistryObject<Item> SPRUCE_PETRINE_CROSS =  registerPetrineCrossItem(WoodType.SPRUCE);
    public static final RegistryObject<Item> BIRCH_PETRINE_CROSS =  registerPetrineCrossItem(WoodType.BIRCH);
    public static final RegistryObject<Item> ACACIA_PETRINE_CROSS =  registerPetrineCrossItem(WoodType.ACACIA);
    public static final RegistryObject<Item> CHERRY_PETRINE_CROSS =  registerPetrineCrossItem(WoodType.CHERRY);
    public static final RegistryObject<Item> JUNGLE_PETRINE_CROSS =  registerPetrineCrossItem(WoodType.JUNGLE);
    public static final RegistryObject<Item> DARK_OAK_PETRINE_CROSS =  registerPetrineCrossItem(WoodType.DARK_OAK);
    public static final RegistryObject<Item> CRIMSON_PETRINE_CROSS =  registerPetrineCrossItem(WoodType.CRIMSON);
    public static final RegistryObject<Item> WARPED_PETRINE_CROSS =  registerPetrineCrossItem(WoodType.WARPED);
    public static final RegistryObject<Item> MANGROVE_PETRINE_CROSS =  registerPetrineCrossItem(WoodType.MANGROVE);
    public static final RegistryObject<Item> BAMBOO_PETRINE_CROSS =  registerPetrineCrossItem(WoodType.BAMBOO);

    public static final RegistryObject<Item> OAK_CRUX =  registerCruxItem(WoodType.OAK);
    public static final RegistryObject<Item> SPRUCE_CRUX =  registerCruxItem(WoodType.SPRUCE);
    public static final RegistryObject<Item> BIRCH_CRUX =  registerCruxItem(WoodType.BIRCH);
    public static final RegistryObject<Item> ACACIA_CRUX =  registerCruxItem(WoodType.ACACIA);
    public static final RegistryObject<Item> CHERRY_CRUX =  registerCruxItem(WoodType.CHERRY);
    public static final RegistryObject<Item> JUNGLE_CRUX =  registerCruxItem(WoodType.JUNGLE);
    public static final RegistryObject<Item> DARK_OAK_CRUX =  registerCruxItem(WoodType.DARK_OAK);
    public static final RegistryObject<Item> CRIMSON_CRUX =  registerCruxItem(WoodType.CRIMSON);
    public static final RegistryObject<Item> WARPED_CRUX =  registerCruxItem(WoodType.WARPED);
    public static final RegistryObject<Item> MANGROVE_CRUX =  registerCruxItem(WoodType.MANGROVE);
    public static final RegistryObject<Item> BAMBOO_CRUX =  registerCruxItem(WoodType.BAMBOO);

    public static final RegistryObject<Item> OAK_SPANISH_DONKEY =  registerSpanishDonkeyItem(WoodType.OAK);
    public static final RegistryObject<Item> SPRUCE_SPANISH_DONKEY =  registerSpanishDonkeyItem(WoodType.SPRUCE);
    public static final RegistryObject<Item> BIRCH_SPANISH_DONKEY =  registerSpanishDonkeyItem(WoodType.BIRCH);
    public static final RegistryObject<Item> ACACIA_SPANISH_DONKEY =  registerSpanishDonkeyItem(WoodType.ACACIA);
    public static final RegistryObject<Item> CHERRY_SPANISH_DONKEY =  registerSpanishDonkeyItem(WoodType.CHERRY);
    public static final RegistryObject<Item> JUNGLE_SPANISH_DONKEY =  registerSpanishDonkeyItem(WoodType.JUNGLE);
    public static final RegistryObject<Item> DARK_OAK_SPANISH_DONKEY =  registerSpanishDonkeyItem(WoodType.DARK_OAK);
    public static final RegistryObject<Item> CRIMSON_SPANISH_DONKEY =  registerSpanishDonkeyItem(WoodType.CRIMSON);
    public static final RegistryObject<Item> WARPED_SPANISH_DONKEY =  registerSpanishDonkeyItem(WoodType.WARPED);
    public static final RegistryObject<Item> MANGROVE_SPANISH_DONKEY =  registerSpanishDonkeyItem(WoodType.MANGROVE);
    public static final RegistryObject<Item> BAMBOO_SPANISH_DONKEY =  registerSpanishDonkeyItem(WoodType.BAMBOO);

   public static final RegistryObject<Item> OAK_PILLORY =  registerPilloryItem(WoodType.OAK);
   public static final RegistryObject<Item> SPRUCE_PILLORY =  registerPilloryItem(WoodType.SPRUCE);
   public static final RegistryObject<Item> BIRCH_PILLORY =  registerPilloryItem(WoodType.BIRCH);
   public static final RegistryObject<Item> ACACIA_PILLORY =  registerPilloryItem(WoodType.ACACIA);
   public static final RegistryObject<Item> CHERRY_PILLORY =  registerPilloryItem(WoodType.CHERRY);
   public static final RegistryObject<Item> JUNGLE_PILLORY =  registerPilloryItem(WoodType.JUNGLE);
   public static final RegistryObject<Item> DARK_OAK_PILLORY =  registerPilloryItem(WoodType.DARK_OAK);
   public static final RegistryObject<Item> CRIMSON_PILLORY =  registerPilloryItem(WoodType.CRIMSON);
   public static final RegistryObject<Item> WARPED_PILLORY =  registerPilloryItem(WoodType.WARPED);
   public static final RegistryObject<Item> MANGROVE_PILLORY =  registerPilloryItem(WoodType.MANGROVE);
   public static final RegistryObject<Item> BAMBOO_PILLORY =  registerPilloryItem(WoodType.BAMBOO);

    public static final RegistryObject<Item> OAK_WALL_RACK =  registerWallRackItem(WoodType.OAK);
    public static final RegistryObject<Item> SPRUCE_WALL_RACK =  registerWallRackItem(WoodType.SPRUCE);
    public static final RegistryObject<Item> BIRCH_WALL_RACK =  registerWallRackItem(WoodType.BIRCH);
    public static final RegistryObject<Item> ACACIA_WALL_RACK =  registerWallRackItem(WoodType.ACACIA);
    public static final RegistryObject<Item> CHERRY_WALL_RACK =  registerWallRackItem(WoodType.CHERRY);
    public static final RegistryObject<Item> JUNGLE_WALL_RACK =  registerWallRackItem(WoodType.JUNGLE);
    public static final RegistryObject<Item> DARK_OAK_WALL_RACK =  registerWallRackItem(WoodType.DARK_OAK);
    public static final RegistryObject<Item> CRIMSON_WALL_RACK =  registerWallRackItem(WoodType.CRIMSON);
    public static final RegistryObject<Item> WARPED_WALL_RACK =  registerWallRackItem(WoodType.WARPED);
    public static final RegistryObject<Item> MANGROVE_WALL_RACK =  registerWallRackItem(WoodType.MANGROVE);
    public static final RegistryObject<Item> BAMBOO_WALL_RACK =  registerWallRackItem(WoodType.BAMBOO);

    public static final RegistryObject<Item> OAK_CUFF_POLE =  registerCuffPoleItem(WoodType.OAK);
    public static final RegistryObject<Item> SPRUCE_CUFF_POLE =  registerCuffPoleItem(WoodType.SPRUCE);
    public static final RegistryObject<Item> BIRCH_CUFF_POLE =  registerCuffPoleItem(WoodType.BIRCH);
    public static final RegistryObject<Item> ACACIA_CUFF_POLE =  registerCuffPoleItem(WoodType.ACACIA);
    public static final RegistryObject<Item> CHERRY_CUFF_POLE =  registerCuffPoleItem(WoodType.CHERRY);
    public static final RegistryObject<Item> JUNGLE_CUFF_POLE =  registerCuffPoleItem(WoodType.JUNGLE);
    public static final RegistryObject<Item> DARK_OAK_CUFF_POLE =  registerCuffPoleItem(WoodType.DARK_OAK);
    public static final RegistryObject<Item> CRIMSON_CUFF_POLE =  registerCuffPoleItem(WoodType.CRIMSON);
    public static final RegistryObject<Item> WARPED_CUFF_POLE =  registerCuffPoleItem(WoodType.WARPED);
    public static final RegistryObject<Item> MANGROVE_CUFF_POLE =  registerCuffPoleItem(WoodType.MANGROVE);
    public static final RegistryObject<Item> BAMBOO_CUFF_POLE =  registerCuffPoleItem(WoodType.BAMBOO);

    public static final RegistryObject<Item> WHITE_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.WHITE, WoodType.OAK);
    public static final RegistryObject<Item> WHITE_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.WHITE, WoodType.SPRUCE);
    public static final RegistryObject<Item> WHITE_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.WHITE, WoodType.BIRCH);
    public static final RegistryObject<Item> WHITE_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.WHITE, WoodType.ACACIA);
    public static final RegistryObject<Item> WHITE_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.WHITE, WoodType.CHERRY);
    public static final RegistryObject<Item> WHITE_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.WHITE, WoodType.JUNGLE);
    public static final RegistryObject<Item> WHITE_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.WHITE, WoodType.DARK_OAK);
    public static final RegistryObject<Item> WHITE_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.WHITE, WoodType.CRIMSON);
    public static final RegistryObject<Item> WHITE_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.WHITE, WoodType.WARPED);
    public static final RegistryObject<Item> WHITE_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.WHITE, WoodType.MANGROVE);
    public static final RegistryObject<Item> WHITE_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.WHITE, WoodType.BAMBOO);

    public static final RegistryObject<Item> ORANGE_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.ORANGE, WoodType.OAK);
    public static final RegistryObject<Item> ORANGE_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.ORANGE, WoodType.SPRUCE);
    public static final RegistryObject<Item> ORANGE_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.ORANGE, WoodType.BIRCH);
    public static final RegistryObject<Item> ORANGE_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.ORANGE, WoodType.ACACIA);
    public static final RegistryObject<Item> ORANGE_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.ORANGE, WoodType.CHERRY);
    public static final RegistryObject<Item> ORANGE_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.ORANGE, WoodType.JUNGLE);
    public static final RegistryObject<Item> ORANGE_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.ORANGE, WoodType.DARK_OAK);
    public static final RegistryObject<Item> ORANGE_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.ORANGE, WoodType.CRIMSON);
    public static final RegistryObject<Item> ORANGE_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.ORANGE, WoodType.WARPED);
    public static final RegistryObject<Item> ORANGE_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.ORANGE, WoodType.MANGROVE);
    public static final RegistryObject<Item> ORANGE_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.ORANGE, WoodType.BAMBOO);

    public static final RegistryObject<Item> MAGENTA_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.MAGENTA, WoodType.OAK);
    public static final RegistryObject<Item> MAGENTA_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.MAGENTA, WoodType.SPRUCE);
    public static final RegistryObject<Item> MAGENTA_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.MAGENTA, WoodType.BIRCH);
    public static final RegistryObject<Item> MAGENTA_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.MAGENTA, WoodType.ACACIA);
    public static final RegistryObject<Item> MAGENTA_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.MAGENTA, WoodType.CHERRY);
    public static final RegistryObject<Item> MAGENTA_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.MAGENTA, WoodType.JUNGLE);
    public static final RegistryObject<Item> MAGENTA_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.MAGENTA, WoodType.DARK_OAK);
    public static final RegistryObject<Item> MAGENTA_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.MAGENTA, WoodType.CRIMSON);
    public static final RegistryObject<Item> MAGENTA_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.MAGENTA, WoodType.WARPED);
    public static final RegistryObject<Item> MAGENTA_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.MAGENTA, WoodType.MANGROVE);
    public static final RegistryObject<Item> MAGENTA_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.MAGENTA, WoodType.BAMBOO);

    public static final RegistryObject<Item> LIGHT_BLUE_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_BLUE, WoodType.OAK);
    public static final RegistryObject<Item> LIGHT_BLUE_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_BLUE, WoodType.SPRUCE);
    public static final RegistryObject<Item> LIGHT_BLUE_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_BLUE, WoodType.BIRCH);
    public static final RegistryObject<Item> LIGHT_BLUE_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_BLUE, WoodType.ACACIA);
    public static final RegistryObject<Item> LIGHT_BLUE_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_BLUE, WoodType.CHERRY);
    public static final RegistryObject<Item> LIGHT_BLUE_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_BLUE, WoodType.JUNGLE);
    public static final RegistryObject<Item> LIGHT_BLUE_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_BLUE, WoodType.DARK_OAK);
    public static final RegistryObject<Item> LIGHT_BLUE_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_BLUE, WoodType.CRIMSON);
    public static final RegistryObject<Item> LIGHT_BLUE_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_BLUE, WoodType.WARPED);
    public static final RegistryObject<Item> LIGHT_BLUE_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_BLUE, WoodType.MANGROVE);
    public static final RegistryObject<Item> LIGHT_BLUE_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_BLUE, WoodType.BAMBOO);

    public static final RegistryObject<Item> YELLOW_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.YELLOW, WoodType.OAK);
    public static final RegistryObject<Item> YELLOW_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.YELLOW, WoodType.SPRUCE);
    public static final RegistryObject<Item> YELLOW_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.YELLOW, WoodType.BIRCH);
    public static final RegistryObject<Item> YELLOW_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.YELLOW, WoodType.ACACIA);
    public static final RegistryObject<Item> YELLOW_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.YELLOW, WoodType.CHERRY);
    public static final RegistryObject<Item> YELLOW_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.YELLOW, WoodType.JUNGLE);
    public static final RegistryObject<Item> YELLOW_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.YELLOW, WoodType.DARK_OAK);
    public static final RegistryObject<Item> YELLOW_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.YELLOW, WoodType.CRIMSON);
    public static final RegistryObject<Item> YELLOW_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.YELLOW, WoodType.WARPED);
    public static final RegistryObject<Item> YELLOW_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.YELLOW, WoodType.MANGROVE);
    public static final RegistryObject<Item> YELLOW_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.YELLOW, WoodType.BAMBOO);

    public static final RegistryObject<Item> LIME_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIME, WoodType.OAK);
    public static final RegistryObject<Item> LIME_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIME, WoodType.SPRUCE);
    public static final RegistryObject<Item> LIME_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIME, WoodType.BIRCH);
    public static final RegistryObject<Item> LIME_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIME, WoodType.ACACIA);
    public static final RegistryObject<Item> LIME_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIME, WoodType.CHERRY);
    public static final RegistryObject<Item> LIME_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIME, WoodType.JUNGLE);
    public static final RegistryObject<Item> LIME_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIME, WoodType.DARK_OAK);
    public static final RegistryObject<Item> LIME_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIME, WoodType.CRIMSON);
    public static final RegistryObject<Item> LIME_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIME, WoodType.WARPED);
    public static final RegistryObject<Item> LIME_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIME, WoodType.MANGROVE);
    public static final RegistryObject<Item> LIME_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIME, WoodType.BAMBOO);

    public static final RegistryObject<Item> PINK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.PINK, WoodType.OAK);
    public static final RegistryObject<Item> PINK_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.PINK, WoodType.SPRUCE);
    public static final RegistryObject<Item> PINK_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.PINK, WoodType.BIRCH);
    public static final RegistryObject<Item> PINK_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.PINK, WoodType.ACACIA);
    public static final RegistryObject<Item> PINK_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.PINK, WoodType.CHERRY);
    public static final RegistryObject<Item> PINK_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.PINK, WoodType.JUNGLE);
    public static final RegistryObject<Item> PINK_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.PINK, WoodType.DARK_OAK);
    public static final RegistryObject<Item> PINK_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.PINK, WoodType.CRIMSON);
    public static final RegistryObject<Item> PINK_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.PINK, WoodType.WARPED);
    public static final RegistryObject<Item> PINK_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.PINK, WoodType.MANGROVE);
    public static final RegistryObject<Item> PINK_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.PINK, WoodType.BAMBOO);

    public static final RegistryObject<Item> GRAY_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.GRAY, WoodType.OAK);
    public static final RegistryObject<Item> GRAY_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.GRAY, WoodType.SPRUCE);
    public static final RegistryObject<Item> GRAY_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.GRAY, WoodType.BIRCH);
    public static final RegistryObject<Item> GRAY_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.GRAY, WoodType.ACACIA);
    public static final RegistryObject<Item> GRAY_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.GRAY, WoodType.CHERRY);
    public static final RegistryObject<Item> GRAY_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.GRAY, WoodType.JUNGLE);
    public static final RegistryObject<Item> GRAY_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.GRAY, WoodType.DARK_OAK);
    public static final RegistryObject<Item> GRAY_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.GRAY, WoodType.CRIMSON);
    public static final RegistryObject<Item> GRAY_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.GRAY, WoodType.WARPED);
    public static final RegistryObject<Item> GRAY_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.GRAY, WoodType.MANGROVE);
    public static final RegistryObject<Item> GRAY_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.GRAY, WoodType.BAMBOO);

    public static final RegistryObject<Item> LIGHT_GRAY_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_GRAY, WoodType.OAK);
    public static final RegistryObject<Item> LIGHT_GRAY_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_GRAY, WoodType.SPRUCE);
    public static final RegistryObject<Item> LIGHT_GRAY_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_GRAY, WoodType.BIRCH);
    public static final RegistryObject<Item> LIGHT_GRAY_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_GRAY, WoodType.ACACIA);
    public static final RegistryObject<Item> LIGHT_GRAY_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_GRAY, WoodType.CHERRY);
    public static final RegistryObject<Item> LIGHT_GRAY_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_GRAY, WoodType.JUNGLE);
    public static final RegistryObject<Item> LIGHT_GRAY_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_GRAY, WoodType.DARK_OAK);
    public static final RegistryObject<Item> LIGHT_GRAY_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_GRAY, WoodType.CRIMSON);
    public static final RegistryObject<Item> LIGHT_GRAY_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_GRAY, WoodType.WARPED);
    public static final RegistryObject<Item> LIGHT_GRAY_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_GRAY, WoodType.MANGROVE);
    public static final RegistryObject<Item> LIGHT_GRAY_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.LIGHT_GRAY, WoodType.BAMBOO);

    public static final RegistryObject<Item> CYAN_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.CYAN, WoodType.OAK);
    public static final RegistryObject<Item> CYAN_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.CYAN, WoodType.SPRUCE);
    public static final RegistryObject<Item> CYAN_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.CYAN, WoodType.BIRCH);
    public static final RegistryObject<Item> CYAN_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.CYAN, WoodType.ACACIA);
    public static final RegistryObject<Item> CYAN_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.CYAN, WoodType.CHERRY);
    public static final RegistryObject<Item> CYAN_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.CYAN, WoodType.JUNGLE);
    public static final RegistryObject<Item> CYAN_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.CYAN, WoodType.DARK_OAK);
    public static final RegistryObject<Item> CYAN_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.CYAN, WoodType.CRIMSON);
    public static final RegistryObject<Item> CYAN_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.CYAN, WoodType.WARPED);
    public static final RegistryObject<Item> CYAN_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.CYAN, WoodType.MANGROVE);
    public static final RegistryObject<Item> CYAN_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.CYAN, WoodType.BAMBOO);

    public static final RegistryObject<Item> PURPLE_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.PURPLE, WoodType.OAK);
    public static final RegistryObject<Item> PURPLE_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.PURPLE, WoodType.SPRUCE);
    public static final RegistryObject<Item> PURPLE_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.PURPLE, WoodType.BIRCH);
    public static final RegistryObject<Item> PURPLE_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.PURPLE, WoodType.ACACIA);
    public static final RegistryObject<Item> PURPLE_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.PURPLE, WoodType.CHERRY);
    public static final RegistryObject<Item> PURPLE_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.PURPLE, WoodType.JUNGLE);
    public static final RegistryObject<Item> PURPLE_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.PURPLE, WoodType.DARK_OAK);
    public static final RegistryObject<Item> PURPLE_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.PURPLE, WoodType.CRIMSON);
    public static final RegistryObject<Item> PURPLE_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.PURPLE, WoodType.WARPED);
    public static final RegistryObject<Item> PURPLE_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.PURPLE, WoodType.MANGROVE);
    public static final RegistryObject<Item> PURPLE_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.PURPLE, WoodType.BAMBOO);

    public static final RegistryObject<Item> BLUE_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLUE, WoodType.OAK);
    public static final RegistryObject<Item> BLUE_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLUE, WoodType.SPRUCE);
    public static final RegistryObject<Item> BLUE_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLUE, WoodType.BIRCH);
    public static final RegistryObject<Item> BLUE_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLUE, WoodType.ACACIA);
    public static final RegistryObject<Item> BLUE_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLUE, WoodType.CHERRY);
    public static final RegistryObject<Item> BLUE_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLUE, WoodType.JUNGLE);
    public static final RegistryObject<Item> BLUE_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLUE, WoodType.DARK_OAK);
    public static final RegistryObject<Item> BLUE_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLUE, WoodType.CRIMSON);
    public static final RegistryObject<Item> BLUE_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLUE, WoodType.WARPED);
    public static final RegistryObject<Item> BLUE_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLUE, WoodType.MANGROVE);
    public static final RegistryObject<Item> BLUE_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLUE, WoodType.BAMBOO);

    public static final RegistryObject<Item> BROWN_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.BROWN, WoodType.OAK);
    public static final RegistryObject<Item> BROWN_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.BROWN, WoodType.SPRUCE);
    public static final RegistryObject<Item> BROWN_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.BROWN, WoodType.BIRCH);
    public static final RegistryObject<Item> BROWN_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.BROWN, WoodType.ACACIA);
    public static final RegistryObject<Item> BROWN_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.BROWN, WoodType.CHERRY);
    public static final RegistryObject<Item> BROWN_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.BROWN, WoodType.JUNGLE);
    public static final RegistryObject<Item> BROWN_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.BROWN, WoodType.DARK_OAK);
    public static final RegistryObject<Item> BROWN_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.BROWN, WoodType.CRIMSON);
    public static final RegistryObject<Item> BROWN_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.BROWN, WoodType.WARPED);
    public static final RegistryObject<Item> BROWN_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.BROWN, WoodType.MANGROVE);
    public static final RegistryObject<Item> BROWN_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.BROWN, WoodType.BAMBOO);

    public static final RegistryObject<Item> GREEN_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.GREEN, WoodType.OAK);
    public static final RegistryObject<Item> GREEN_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.GREEN, WoodType.SPRUCE);
    public static final RegistryObject<Item> GREEN_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.GREEN, WoodType.BIRCH);
    public static final RegistryObject<Item> GREEN_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.GREEN, WoodType.ACACIA);
    public static final RegistryObject<Item> GREEN_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.GREEN, WoodType.CHERRY);
    public static final RegistryObject<Item> GREEN_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.GREEN, WoodType.JUNGLE);
    public static final RegistryObject<Item> GREEN_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.GREEN, WoodType.DARK_OAK);
    public static final RegistryObject<Item> GREEN_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.GREEN, WoodType.CRIMSON);
    public static final RegistryObject<Item> GREEN_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.GREEN, WoodType.WARPED);
    public static final RegistryObject<Item> GREEN_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.GREEN, WoodType.MANGROVE);
    public static final RegistryObject<Item> GREEN_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.GREEN, WoodType.BAMBOO);

    public static final RegistryObject<Item> RED_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.RED, WoodType.OAK);
    public static final RegistryObject<Item> RED_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.RED, WoodType.SPRUCE);
    public static final RegistryObject<Item> RED_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.RED, WoodType.BIRCH);
    public static final RegistryObject<Item> RED_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.RED, WoodType.ACACIA);
    public static final RegistryObject<Item> RED_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.RED, WoodType.CHERRY);
    public static final RegistryObject<Item> RED_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.RED, WoodType.JUNGLE);
    public static final RegistryObject<Item> RED_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.RED, WoodType.DARK_OAK);
    public static final RegistryObject<Item> RED_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.RED, WoodType.CRIMSON);
    public static final RegistryObject<Item> RED_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.RED, WoodType.WARPED);
    public static final RegistryObject<Item> RED_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.RED, WoodType.MANGROVE);
    public static final RegistryObject<Item> RED_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.RED, WoodType.BAMBOO);

    public static final RegistryObject<Item> BLACK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLACK, WoodType.OAK);
    public static final RegistryObject<Item> BLACK_SPRUCE_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLACK, WoodType.SPRUCE);
    public static final RegistryObject<Item> BLACK_BIRCH_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLACK, WoodType.BIRCH);
    public static final RegistryObject<Item> BLACK_ACACIA_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLACK, WoodType.ACACIA);
    public static final RegistryObject<Item> BLACK_CHERRY_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLACK, WoodType.CHERRY);
    public static final RegistryObject<Item> BLACK_JUNGLE_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLACK, WoodType.JUNGLE);
    public static final RegistryObject<Item> BLACK_DARK_OAK_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLACK, WoodType.DARK_OAK);
    public static final RegistryObject<Item> BLACK_CRIMSON_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLACK, WoodType.CRIMSON);
    public static final RegistryObject<Item> BLACK_WARPED_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLACK, WoodType.WARPED);
    public static final RegistryObject<Item> BLACK_MANGROVE_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLACK, WoodType.MANGROVE);
    public static final RegistryObject<Item> BLACK_BAMBOO_PRONE_BENCH =  registerProneBenchItem(ColorContent.BLACK, WoodType.BAMBOO);

    public static final RegistryObject<Item> OAK_HANGING_POST =  registerHangingPostItem(WoodType.OAK);
    public static final RegistryObject<Item> SPRUCE_HANGING_POST =  registerHangingPostItem(WoodType.SPRUCE);
    public static final RegistryObject<Item> BIRCH_HANGING_POST =  registerHangingPostItem(WoodType.BIRCH);
    public static final RegistryObject<Item> ACACIA_HANGING_POST =  registerHangingPostItem(WoodType.ACACIA);
    public static final RegistryObject<Item> CHERRY_HANGING_POST =  registerHangingPostItem(WoodType.CHERRY);
    public static final RegistryObject<Item> JUNGLE_HANGING_POST =  registerHangingPostItem(WoodType.JUNGLE);
    public static final RegistryObject<Item> DARK_OAK_HANGING_POST =  registerHangingPostItem(WoodType.DARK_OAK);
    public static final RegistryObject<Item> CRIMSON_HANGING_POST =  registerHangingPostItem(WoodType.CRIMSON);
    public static final RegistryObject<Item> WARPED_HANGING_POST =  registerHangingPostItem(WoodType.WARPED);
    public static final RegistryObject<Item> MANGROVE_HANGING_POST =  registerHangingPostItem(WoodType.MANGROVE);
    public static final RegistryObject<Item> BAMBOO_HANGING_POST =  registerHangingPostItem(WoodType.BAMBOO);

    public static final RegistryObject<Item> IRON_CAGE_ITEM = ITEMS.register("iron_cage", () -> new IronCageItem(new Item.Properties()));

    private static RegistryObject<Item> registerCuffBedItem(@NotNull ColorContent color) {
        String name = color.getName() + "_cuff_bed";
        RegistryObject<Item> item = ITEMS.register(name, () -> new BlockItem(
                EDGBlocks.getCuffedBlock(color)
                ,new Item.Properties()
        ));
        CUFF_BED_ITEMS.put(color,item);
        SEAT_ITEMS.add(item);
        return item;
    }

    private static RegistryObject<Item> registerHangingPostItem(@NotNull WoodType wood) {
        String name = wood.name() + "_hanging_post";
        RegistryObject<Item> item = ITEMS.register(name, () -> new BlockItem(
                EDGBlocks.getHangingPostBlock(wood)
                ,new Item.Properties()
        ));
        HANGING_POST_ITEMS.put(wood,item);
        SEAT_ITEMS.add(item);
        return item;
    }

    private static RegistryObject<Item> registerRackItem(@NotNull WoodType wood) {
        String name = wood.name() + "_rack";
        RegistryObject<Item> item = ITEMS.register(name, () -> new BlockItem(
                EDGBlocks.getRackBlock(wood)
                ,new Item.Properties()
        ));
        RACK_ITEMS.put(wood,item);
        SEAT_ITEMS.add(item);
        return item;
    }

    private static RegistryObject<Item> registerXCrossItem(@NotNull WoodType wood) {
        String name = wood.name() + "_x_cross";
        RegistryObject<Item> item = ITEMS.register(name, () -> new BlockItem(
                EDGBlocks.getXCrossBlock(wood),
                new Item.Properties()
        ));
        X_CROSS_ITEMS.put(wood, item);
        SEAT_ITEMS.add(item);
        return item;
    }

    private static RegistryObject<Item> registerPetrineCrossItem(@NotNull WoodType wood) {
        String name = wood.name() + "_petrine_cross";
        RegistryObject<Item> item = ITEMS.register(name, () -> new BlockItem(
                EDGBlocks.getPetrineCrossBlock(wood),
                new Item.Properties()
        ));
        PETRINE_CROSS_ITEMS.put(wood, item);
        SEAT_ITEMS.add(item);
        return item;
    }

    private static RegistryObject<Item> registerCruxItem(@NotNull WoodType wood) {
        String name = wood.name() + "_crux";
        RegistryObject<Item> item = ITEMS.register(name, () -> new BlockItem(
                EDGBlocks.getCruxBlock(wood),
                new Item.Properties()
        ));
        CRUX_ITEMS.put(wood ,item);
        SEAT_ITEMS.add(item);
        return item;
    }

    private static RegistryObject<Item> registerSpanishDonkeyItem(@NotNull WoodType wood) {
        String name = wood.name() + "_spanish_donkey";
        RegistryObject<Item> item = ITEMS.register(name, () -> new SpanishDonkeyItem(
                wood,
                new Item.Properties()
        ));
        SPANISH_DONKEY_ITEMS.put(wood ,item);
        SEAT_ITEMS.add(item);
        return item;
    }

    private static RegistryObject<Item> registerPilloryItem(@NotNull WoodType woodType) {
        String name = woodType.name() + "_pillory";
        RegistryObject<Item> item = ITEMS.register(name, () -> new BlockItem(
                EDGBlocks.getPilloryBlock(woodType)
                ,new Item.Properties()
        ));
        PILLORY_ITEMS.put(woodType,item);
        SEAT_ITEMS.add(item);
        return item;
    }

    private static RegistryObject<Item> registerWallRackItem(@NotNull WoodType woodType) {
        String name = woodType.name() + "_wall_rack";
        RegistryObject<Item> item = ITEMS.register(name, () -> new BlockItem(
                EDGBlocks.getWallRackBlock(woodType)
                ,new Item.Properties()
        ));
        WALL_RACK_ITEMS.put(woodType,item);
        SEAT_ITEMS.add(item);
        return item;
    }
    private static RegistryObject<Item> registerProneBenchItem(@NotNull ColorContent color, WoodType woodType) {
        String name = color.getName() +"_" + woodType.name() + "_prone_bench";
        RegistryObject<Item> item = ITEMS.register(name, () -> new BlockItem(
                EDGBlocks.getProneBenchBlock(color, woodType)
                ,new Item.Properties()
        ));
        PRONE_BENCH_ITEMS.put(Pair.of(color, woodType),item);
        SEAT_ITEMS.add(item);
        return item;
    }

    private static RegistryObject<Item> registerCuffPoleItem(@NotNull WoodType wood) {
        String name = wood.name() + "_cuff_pole";
        RegistryObject<Item> item = ITEMS.register(name, () -> new BlockItem(
                EDGBlocks.getCuffPoleBlock(wood)
                ,new Item.Properties()
        ));
        CUFF_POLE_ITEMS.put(wood,item);
        SEAT_ITEMS.add(item);
        return item;
    }

    public static void register(IEventBus eventBus) {
        ITEMS.register(eventBus);
    }
}
