package com.ismailkaygisiz.gamblingplus.event; import com.ismailkaygisiz.gamblingplus.GamblingPlusMod; import com.ismailkaygisiz.gamblingplus.item.ModItems; import com.ismailkaygisiz.gamblingplus.villager.ModVillagers; import net.minecraft.core.Holder; import net.minecraft.world.entity.npc.VillagerTrades; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.alchemy.PotionBrewing; import net.minecraft.world.item.alchemy.Potions; import net.minecraft.world.item.enchantment.EnchantedItemInUse; import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.EnchantmentInstance; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.item.trading.ItemCost; import net.minecraft.world.item.trading.MerchantOffer; import net.minecraft.world.level.Level; import net.minecraftforge.event.village.VillagerTradesEvent; import net.minecraftforge.event.village.WandererTradesEvent; import net.minecraftforge.eventbus.api.listener.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.registries.ForgeRegistries; import java.util.*; import static net.minecraft.core.component.predicates.DataComponentPredicates.ENCHANTMENTS; @Mod.EventBusSubscriber(modid = GamblingPlusMod.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE) public class ModEvents { @SubscribeEvent public static void addCustomTrades(VillagerTradesEvent event) { if(event.getType() == ModVillagers.RUBY_WORKER.getKey()) { var trades = event.getTrades(); trades.get(1).add((pTrader, pRandom) -> new MerchantOffer( new ItemCost(Items.COPPER_INGOT, pRandom.nextInt(3,6)), new ItemStack(ModItems.RUBY.get(), 1), 12, 1, 0.05f)); trades.get(1).add((pTrader, pRandom) -> new MerchantOffer( new ItemCost(ModItems.RUBY.get(), pRandom.nextInt(3,8)), new ItemStack(Items.EMERALD, 1), 12, 1, 0.05f)); trades.get(2).add((pTrader, pRandom) -> new MerchantOffer( new ItemCost(Items.EMERALD, pRandom.nextInt(1,4)), new ItemStack(Items.AMETHYST_SHARD, 2), 12, 3, 0.05f)); trades.get(3).add((pTrader, pRandom) -> new MerchantOffer( new ItemCost(Items.EMERALD, pRandom.nextInt(5,11)), new ItemStack(Items.BLAZE_POWDER, 1), 6, 5, 0.05f)); trades.get(3).add((pTrader, pRandom) -> new MerchantOffer( new ItemCost(Items.EMERALD, pRandom.nextInt(2,5)), new ItemStack(Items.FIREWORK_ROCKET, pRandom.nextInt(2,5)), 12, 5, 0.05f)); trades.get(4).add((pTrader, pRandom) -> new MerchantOffer( new ItemCost(Items.EMERALD, pRandom.nextInt(30,46)), new ItemStack(Items.SHULKER_BOX, 1), 4, 12, 0.05f)); trades.get(4).add((pTrader, pRandom) -> { List> valuableEnchantments = List.of( Enchantments.FORTUNE.getOrThrow(pTrader), Enchantments.EFFICIENCY.getOrThrow(pTrader), Enchantments.POWER.getOrThrow(pTrader), Enchantments.SHARPNESS.getOrThrow(pTrader), Enchantments.UNBREAKING.getOrThrow(pTrader), Enchantments.MENDING.getOrThrow(pTrader), Enchantments.LOOTING.getOrThrow(pTrader), Enchantments.PROTECTION.getOrThrow(pTrader), Enchantments.THORNS.getOrThrow(pTrader), Enchantments.RESPIRATION.getOrThrow(pTrader), Enchantments.FLAME.getOrThrow(pTrader), Enchantments.SMITE.getOrThrow(pTrader), Enchantments.INFINITY.getOrThrow(pTrader) ); Holder selected = valuableEnchantments.get(pRandom.nextInt(valuableEnchantments.size())); ItemStack book = Items.BOOK.getDefaultInstance(); book.enchant(selected, selected.get().getMaxLevel() >= 4 ? pRandom.nextInt(selected.get().getMaxLevel()-1, selected.get().getMaxLevel()+1): selected.get().getMaxLevel()); return new MerchantOffer( new ItemCost(Items.EMERALD, pRandom.nextInt(40, 65)), Optional.of(new ItemCost(Items.BOOK, 1)), book, 6, 32, 0.05f ); }); trades.get(5).add((pTrader, pRandom) -> new MerchantOffer( new ItemCost(Items.EMERALD, pRandom.nextInt(45,65)), Optional.of(new ItemCost(Items.EGG, pRandom.nextInt(5,11))), new ItemStack(ModItems.CATCHING_EGG.get(), 1), 6, 32, 0.05f)); trades.get(5).add((pTrader, pRandom) -> new MerchantOffer( new ItemCost(Items.EMERALD_BLOCK, pRandom.nextInt(12,21)), Optional.of(new ItemCost(ModItems.RUBY.get(), 64)), new ItemStack(Items.ELYTRA), 1, 256, 0.05f )); } /* if(event.getType() == VillagerProfession.TOOLSMITH) { var trades = event.getTrades(); trades.get(1).add((pTrader, pRandom) -> new MerchantOffer( new ItemCost(Items.EMERALD, 12), new ItemStack(ModItems.CHISEL.get(), 1), 6, 4, 0.05f)); trades.get(1).add((pTrader, pRandom) -> new MerchantOffer( new ItemCost(Items.DIAMOND, 19), new ItemStack(ModItems.TOMAHAWK.get(), 1), 6, 4, 0.05f)); trades.get(2).add((pTrader, pRandom) -> new MerchantOffer( new ItemCost(Items.EMERALD, 1), new ItemStack(ModItems.RADIATION_STAFF.get(), 1), 1, 12, 0.05f)); }*/ } @SubscribeEvent public static void addWanderingTrades(WandererTradesEvent event) { /* List genericTrades = event.getGenericTrades(); List rareTrades = event.getRareTrades(); genericTrades.add((pTrader, pRandom) -> new MerchantOffer( new ItemCost(Items.EMERALD, 12), new ItemStack(ModItems.RADIATION_STAFF.get(), 1), 1, 10, 0.2f )); rareTrades.add((pTrader, pRandom) -> new MerchantOffer( new ItemCost(Items.NETHERITE_INGOT, 8), new ItemStack(ModItems.BAR_BRAWL_MUSIC_DISC.get(), 1), 1, 10, 0.2f ));*/ } }