RyanHub – file viewer
filename: common/src/main/java/rearth/oritech/init/ItemGroups.java
branch: 1.21
back to repo
package rearth.oritech.init;

import dev.architectury.registry.CreativeTabRegistry;
import dev.architectury.registry.registries.RegistrySupplier;
import net.minecraft.item.ItemConvertible;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.text.Text;
import rearth.oritech.util.registry.ArchitecturyRegistryContainer;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ItemGroups implements ArchitecturyRegistryContainer<ItemGroup> {
    
    private static final Map<ItemContent.Groups, List<ItemStack>> registered = new HashMap<>();
    public static void add(ItemContent.Groups group, ItemConvertible item) {
        registered.computeIfAbsent(group, k -> new ArrayList<>()).add(new ItemStack(item));
    }
    public static void add(ItemContent.Groups group, ItemStack item) {
        registered.computeIfAbsent(group, k -> new ArrayList<>()).add(item);
    }
    
    public static final ItemGroup MACHINE_GROUP = CreativeTabRegistry.create(
      Text.translatable("itemgroup.oritech.machines"),
      () -> new ItemStack(BlockContent.FERTILIZER_BLOCK.asItem()));
    
    public static final ItemGroup COMPONENT_GROUP = CreativeTabRegistry.create(
      Text.translatable("itemgroup.oritech.components"),
      () -> new ItemStack(ItemContent.SUPER_AI_CHIP.asItem()));
    
    public static final ItemGroup EQUIPMENT_GROUP = CreativeTabRegistry.create(
      Text.translatable("itemgroup.oritech.equipment"),
      () -> new ItemStack(ToolsContent.CHAINSAW.asItem()));
    
    public static final ItemGroup DECORATIVE_GROUP = CreativeTabRegistry.create(
      Text.translatable("itemgroup.oritech.decorative"),
      () -> new ItemStack(BlockContent.RESOURCE_NODE_PLATINUM.asItem()));
    
    @Override
    public RegistryKey<Registry<ItemGroup>> getRegistryType() {
        return RegistryKeys.ITEM_GROUP;
    }
    
    @Override
    public Class<ItemGroup> getTargetFieldType() {
        return ItemGroup.class;
    }
    
    @Override
    public void postProcessField(String namespace, ItemGroup value, String identifier, Field field, RegistrySupplier<ItemGroup> supplier) {
        ArchitecturyRegistryContainer.super.postProcessField(namespace, value, identifier, field, supplier);
        
        List<ItemStack> items = null;
        if (value.equals(MACHINE_GROUP)) items = registered.get(ItemContent.Groups.machines);
        if (value.equals(COMPONENT_GROUP)) items = registered.get(ItemContent.Groups.components);
        if (value.equals(EQUIPMENT_GROUP)) items = registered.get(ItemContent.Groups.equipment);
        if (value.equals(DECORATIVE_GROUP)) items = registered.get(ItemContent.Groups.decorative);
        
        if (items == null) {
            System.err.println("unknown item group: " + identifier);
            return;
        }
        
        items.forEach(item -> CreativeTabRegistry.appendStack(supplier, item));
        
    }
}