package net.mcreator.superbwarfare.init; import com.google.common.base.Suppliers; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.mcreator.superbwarfare.ModUtils; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import net.minecraftforge.common.loot.IGlobalLootModifier; import net.minecraftforge.common.loot.LootModifier; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLConstructModEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; import java.util.function.Supplier; @Mod.EventBusSubscriber(modid = ModUtils.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) public class TargetModLootModifier { public static class TargetModLootTableModifier extends LootModifier { public static final Supplier> CODEC = Suppliers .memoize(() -> RecordCodecBuilder.create(instance -> codecStart(instance).and(ResourceLocation.CODEC.fieldOf("lootTable").forGetter(m -> m.lootTable)).apply(instance, TargetModLootTableModifier::new))); private final ResourceLocation lootTable; public TargetModLootTableModifier(LootItemCondition[] conditions, ResourceLocation lootTable) { super(conditions); this.lootTable = lootTable; } @Override protected ObjectArrayList doApply(ObjectArrayList generatedLoot, LootContext context) { context.getResolver().getLootTable(lootTable).getRandomItemsRaw(context, generatedLoot::add); return generatedLoot; } @Override public Codec codec() { return CODEC.get(); } } public static final DeferredRegister> LOOT_MODIFIERS = DeferredRegister.create(ForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, "target"); public static final RegistryObject> LOOT_MODIFIER = LOOT_MODIFIERS.register("target_loot_modifier", TargetModLootTableModifier.CODEC); @SubscribeEvent public static void register(FMLConstructModEvent event) { IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); event.enqueueWork(() -> { LOOT_MODIFIERS.register(bus); }); } }