57 lines
2.8 KiB
Java
57 lines
2.8 KiB
Java
package com.atsuishio.superbwarfare.init;
|
|
|
|
import com.atsuishio.superbwarfare.ModUtils;
|
|
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.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 ModLootModifier {
|
|
public static class TargetModLootTableModifier extends LootModifier {
|
|
public static final Supplier<Codec<TargetModLootTableModifier>> 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<ItemStack> doApply(ObjectArrayList<ItemStack> generatedLoot, LootContext context) {
|
|
context.getResolver().getLootTable(lootTable).getRandomItemsRaw(context, generatedLoot::add);
|
|
return generatedLoot;
|
|
}
|
|
|
|
@Override
|
|
public Codec<? extends IGlobalLootModifier> codec() {
|
|
return CODEC.get();
|
|
}
|
|
}
|
|
|
|
public static final DeferredRegister<Codec<? extends IGlobalLootModifier>> LOOT_MODIFIERS = DeferredRegister.create(ForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, ModUtils.MODID);
|
|
public static final RegistryObject<Codec<TargetModLootTableModifier>> LOOT_MODIFIER = LOOT_MODIFIERS.register(ModUtils.MODID + "_loot_modifier", TargetModLootTableModifier.CODEC);
|
|
|
|
@SubscribeEvent
|
|
public static void register(FMLConstructModEvent event) {
|
|
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
|
|
event.enqueueWork(() -> LOOT_MODIFIERS.register(bus));
|
|
}
|
|
}
|