package space.eptaproject.vmodaddon.util; import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; import lombok.Getter; import net.minecraft.core.registries.Registries; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.CreativeModeTabs; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; import java.util.Map; import java.util.function.Consumer; public class ModRegistry { @Getter private final String modid; public final DeferredRegister BLOCKS; public final DeferredRegister> BLOCK_ENTITIES; public final Map, DeferredRegister> ITEMS; public final DeferredRegister CREATIVE_MODE_TABS; public ModRegistry(String modid) { this.modid = modid; this.BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, modid); this.BLOCK_ENTITIES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, modid); this.ITEMS = new Object2ObjectArrayMap<>(); this.CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, modid); } public TabBuilder TabBuilder() { return new TabBuilder(this); } public void register(IEventBus bus) { this.BLOCKS.register(bus); this.BLOCK_ENTITIES.register(bus); this.CREATIVE_MODE_TABS.register(bus); for (DeferredRegister registry : ITEMS.values()) { registry.register(bus); } } public static class TabBuilder { private final ModRegistry registry; public final DeferredRegister ITEMS; public TabBuilder(ModRegistry registry) { this.registry = registry; this.ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, registry.modid); } public TabBuilder push(Consumer> registry) { registry.accept(ITEMS); return this; } public RegistryObject build(String name, ItemStack icon) { RegistryObject tab = this.registry.CREATIVE_MODE_TABS.register(name, () -> CreativeModeTab.builder().withTabsBefore(CreativeModeTabs.COMBAT).icon(() -> icon).displayItems((parameters, output) -> { for (RegistryObject object : ITEMS.getEntries()) { output.accept(object.get()); } }).build()); this.registry.ITEMS.put(tab, this.ITEMS); return tab; } } }