Files
gambling-plus/src/main/java/com/ismailkaygisiz/gamblingplus/event/ModEvents.java

142 lines
6.6 KiB
Java

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<Holder<Enchantment>> 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<Enchantment> 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<VillagerTrades.ItemListing> genericTrades = event.getGenericTrades();
List<VillagerTrades.ItemListing> 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
));*/
}
}