package net.minecraft.world.entity.npc;

import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.item.Items;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.core.Registry;
import javax.annotation.Nullable;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.item.Item;
import com.google.common.collect.ImmutableSet;
import net.minecraft.world.entity.ai.village.poi.PoiType;

public class VillagerProfession {
    public static final VillagerProfession NONE;
    public static final VillagerProfession ARMORER;
    public static final VillagerProfession BUTCHER;
    public static final VillagerProfession CARTOGRAPHER;
    public static final VillagerProfession CLERIC;
    public static final VillagerProfession FARMER;
    public static final VillagerProfession FISHERMAN;
    public static final VillagerProfession FLETCHER;
    public static final VillagerProfession LEATHERWORKER;
    public static final VillagerProfession LIBRARIAN;
    public static final VillagerProfession MASON;
    public static final VillagerProfession NITWIT;
    public static final VillagerProfession SHEPHERD;
    public static final VillagerProfession TOOLSMITH;
    public static final VillagerProfession WEAPONSMITH;
    private final String name;
    private final PoiType jobPoiType;
    private final ImmutableSet<Item> requestedItems;
    private final ImmutableSet<Block> secondaryPoi;
    @Nullable
    private final SoundEvent workSound;
    
    private VillagerProfession(final String string, final PoiType ayc, final ImmutableSet<Item> immutableSet3, final ImmutableSet<Block> immutableSet4, @Nullable final SoundEvent ack) {
        this.name = string;
        this.jobPoiType = ayc;
        this.requestedItems = immutableSet3;
        this.secondaryPoi = immutableSet4;
        this.workSound = ack;
    }
    
    public PoiType getJobPoiType() {
        return this.jobPoiType;
    }
    
    public ImmutableSet<Item> getRequestedItems() {
        return this.requestedItems;
    }
    
    public ImmutableSet<Block> getSecondaryPoi() {
        return this.secondaryPoi;
    }
    
    @Nullable
    public SoundEvent getWorkSound() {
        return this.workSound;
    }
    
    @Override
    public String toString() {
        return this.name;
    }
    
    static VillagerProfession register(final String string, final PoiType ayc, @Nullable final SoundEvent ack) {
        return register(string, ayc, ImmutableSet.<Item>of(), ImmutableSet.<Block>of(), ack);
    }
    
    static VillagerProfession register(final String string, final PoiType ayc, final ImmutableSet<Item> immutableSet3, final ImmutableSet<Block> immutableSet4, @Nullable final SoundEvent ack) {
        return Registry.<VillagerProfession, VillagerProfession>register(Registry.VILLAGER_PROFESSION, new ResourceLocation(string), new VillagerProfession(string, ayc, immutableSet3, immutableSet4, ack));
    }
    
    static {
        NONE = register("none", PoiType.UNEMPLOYED, null);
        ARMORER = register("armorer", PoiType.ARMORER, SoundEvents.VILLAGER_WORK_ARMORER);
        BUTCHER = register("butcher", PoiType.BUTCHER, SoundEvents.VILLAGER_WORK_BUTCHER);
        CARTOGRAPHER = register("cartographer", PoiType.CARTOGRAPHER, SoundEvents.VILLAGER_WORK_CARTOGRAPHER);
        CLERIC = register("cleric", PoiType.CLERIC, SoundEvents.VILLAGER_WORK_CLERIC);
        FARMER = register("farmer", PoiType.FARMER, ImmutableSet.<Item>of(Items.WHEAT, Items.WHEAT_SEEDS, Items.BEETROOT_SEEDS, Items.BONE_MEAL), ImmutableSet.<Block>of(Blocks.FARMLAND), SoundEvents.VILLAGER_WORK_FARMER);
        FISHERMAN = register("fisherman", PoiType.FISHERMAN, SoundEvents.VILLAGER_WORK_FISHERMAN);
        FLETCHER = register("fletcher", PoiType.FLETCHER, SoundEvents.VILLAGER_WORK_FLETCHER);
        LEATHERWORKER = register("leatherworker", PoiType.LEATHERWORKER, SoundEvents.VILLAGER_WORK_LEATHERWORKER);
        LIBRARIAN = register("librarian", PoiType.LIBRARIAN, SoundEvents.VILLAGER_WORK_LIBRARIAN);
        MASON = register("mason", PoiType.MASON, SoundEvents.VILLAGER_WORK_MASON);
        NITWIT = register("nitwit", PoiType.NITWIT, null);
        SHEPHERD = register("shepherd", PoiType.SHEPHERD, SoundEvents.VILLAGER_WORK_SHEPHERD);
        TOOLSMITH = register("toolsmith", PoiType.TOOLSMITH, SoundEvents.VILLAGER_WORK_TOOLSMITH);
        WEAPONSMITH = register("weaponsmith", PoiType.WEAPONSMITH, SoundEvents.VILLAGER_WORK_WEAPONSMITH);
    }
}
