@@ -0,0 +1,2621 @@
+package net.darkhax.bookshelf.api.entity.merchant.trade;%0A%0Aimport net.minecraft.world.entity.Entity;%0Aimport net.minecraft.world.entity.npc.VillagerTrades;%0Aimport net.minecraft.world.item.Item;%0Aimport net.minecraft.world.item.ItemStack;%0Aimport net.minecraft.world.item.Items;%0Aimport net.minecraft.world.item.trading.MerchantOffer;%0Aimport net.minecraft.world.level.block.Block;%0A%0Aimport java.util.Random;%0Aimport java.util.function.Supplier;%0A%0Apublic class VillagerSells implements VillagerTrades.ItemListing %7B%0A%0A    private final Supplier%3CItemStack%3E itemToBuy;%0A    private final int emeraldCost;%0A    private final int maxUses;%0A    private final int villagerXp;%0A    private final float priceMultiplier;%0A%0A    public VillagerSells(Block itemToBuy, int emeraldCost, int maxUses, int villagerXp, float priceMultiplier) %7B%0A%0A        this(new ItemStack(itemToBuy), emeraldCost, maxUses, villagerXp, priceMultiplier);%0A    %7D%0A%0A    public VillagerSells(Block itemToBuy, int emeraldCost, int maxUses, int villagerXp) %7B%0A%0A        this(new ItemStack(itemToBuy), emeraldCost, maxUses, villagerXp, 0.05f);%0A    %7D%0A%0A    public VillagerSells(Item itemToBuy, int emeraldCost, int maxUses, int villagerXp, float priceMultiplier) %7B%0A%0A        this(itemToBuy.getDefaultInstance(), emeraldCost, maxUses, villagerXp, priceMultiplier);%0A    %7D%0A%0A    public VillagerSells(Item itemToBuy, int emeraldCost, int maxUses, int villagerXp) %7B%0A%0A        this(itemToBuy.getDefaultInstance(), emeraldCost, maxUses, villagerXp, 0.05f);%0A    %7D%0A%0A    public VillagerSells(ItemStack itemToBuy, int emeraldCost, int maxUses, int villagerXp, float priceMultiplier) %7B%0A%0A        this(itemToBuy::copy, emeraldCost, maxUses, villagerXp, priceMultiplier);%0A    %7D%0A%0A    public VillagerSells(ItemStack itemToBuy, int emeraldCost, int maxUses, int villagerXp) %7B%0A%0A        this(itemToBuy::copy, emeraldCost, maxUses, villagerXp, 0.05f);%0A    %7D%0A%0A    public VillagerSells(Supplier%3CItemStack%3E itemToBuy, int emeraldCost, int maxUses, int villagerXp) %7B%0A%0A        this(itemToBuy, emeraldCost, maxUses, villagerXp, 0.05f);%0A    %7D%0A%0A    public VillagerSells(Supplier%3CItemStack%3E itemToBuy, int emeraldCost, int maxUses, int villagerXp, float priceMultiplier) %7B%0A%0A        this.itemToBuy = itemToBuy;%0A        this.emeraldCost = emeraldCost;%0A        this.maxUses = maxUses;%0A        this.villagerXp = villagerXp;%0A        this.priceMultiplier = priceMultiplier;%0A    %7D%0A%0A    @Override%0A    public MerchantOffer getOffer(Entity villager, Random rng) %7B%0A%0A        return new MerchantOffer(new ItemStack(Items.EMERALD, this.emeraldCost), this.itemToBuy.get(), this.maxUses, this.villagerXp, this.priceMultiplier);%0A    %7D%0A%7D

Add basic trade for villager selling items.