Class LootModifier

java.lang.Object
net.neoforged.neoforge.common.loot.LootModifier
All Implemented Interfaces:
IGlobalLootModifier
Direct Known Subclasses:
AddTableLootModifier, GlobalLootModifiersTest.DungeonLootEnhancerModifier, GlobalLootModifiersTest.SilkTouchTestModifier, GlobalLootModifiersTest.SmeltingEnchantmentModifier, GlobalLootModifiersTest.WheatSeedsConverterModifier

public abstract class LootModifier extends Object implements IGlobalLootModifier
A base implementation of a Global Loot Modifier for modders to extend. Takes care of ILootCondition matching and comes with the base codec to extend.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private final Predicate<net.minecraft.world.level.storage.loot.LootContext>
     
    protected final net.minecraft.world.level.storage.loot.predicates.LootItemCondition[]
     

    Fields inherited from interface net.neoforged.neoforge.common.loot.IGlobalLootModifier

    CONDITIONAL_CODEC, DIRECT_CODEC, LOOT_CONDITIONS_CODEC
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    LootModifier(net.minecraft.world.level.storage.loot.predicates.LootItemCondition[] conditionsIn)
    Constructs a LootModifier.
  • Method Summary

    Modifier and Type
    Method
    Description
    final it.unimi.dsi.fastutil.objects.ObjectArrayList<net.minecraft.world.item.ItemStack>
    apply(it.unimi.dsi.fastutil.objects.ObjectArrayList<net.minecraft.world.item.ItemStack> generatedLoot, net.minecraft.world.level.storage.loot.LootContext context)
    Applies the modifier to the list of generated loot.
    protected static <T extends LootModifier>
    com.mojang.datafixers.Products.P1<com.mojang.serialization.codecs.RecordCodecBuilder.Mu<T>,net.minecraft.world.level.storage.loot.predicates.LootItemCondition[]>
    codecStart(com.mojang.serialization.codecs.RecordCodecBuilder.Instance<T> instance)
    Simplifies codec creation, especially if no other fields are added:
    protected abstract it.unimi.dsi.fastutil.objects.ObjectArrayList<net.minecraft.world.item.ItemStack>
    doApply(it.unimi.dsi.fastutil.objects.ObjectArrayList<net.minecraft.world.item.ItemStack> generatedLoot, net.minecraft.world.level.storage.loot.LootContext context)
    Applies the modifier to the generated loot (all loot conditions have already been checked and have returned true).

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface net.neoforged.neoforge.common.loot.IGlobalLootModifier

    codec
  • Field Details

    • conditions

      protected final net.minecraft.world.level.storage.loot.predicates.LootItemCondition[] conditions
    • combinedConditions

      private final Predicate<net.minecraft.world.level.storage.loot.LootContext> combinedConditions
  • Constructor Details

    • LootModifier

      protected LootModifier(net.minecraft.world.level.storage.loot.predicates.LootItemCondition[] conditionsIn)
      Constructs a LootModifier.
      Parameters:
      conditionsIn - the ILootConditions that need to be matched before the loot is modified.
  • Method Details

    • codecStart

      protected static <T extends LootModifier> com.mojang.datafixers.Products.P1<com.mojang.serialization.codecs.RecordCodecBuilder.Mu<T>,net.minecraft.world.level.storage.loot.predicates.LootItemCondition[]> codecStart(com.mojang.serialization.codecs.RecordCodecBuilder.Instance<T> instance)
      Simplifies codec creation, especially if no other fields are added:

      public static final Codec<MyLootModifier> CODEC = RecordCodecBuilder.create(inst -> codecStart(inst).apply(inst, MyLootModifier::new));

      Otherwise can follow this with #and() to add more fields. Examples: Forge Test Subclasses or BendingTrunkPlacer.CODEC
    • apply

      public final it.unimi.dsi.fastutil.objects.ObjectArrayList<net.minecraft.world.item.ItemStack> apply(it.unimi.dsi.fastutil.objects.ObjectArrayList<net.minecraft.world.item.ItemStack> generatedLoot, net.minecraft.world.level.storage.loot.LootContext context)
      Description copied from interface: IGlobalLootModifier
      Applies the modifier to the list of generated loot. This function needs to be responsible for checking ILootConditions as well.
      Specified by:
      apply in interface IGlobalLootModifier
      Parameters:
      generatedLoot - the list of ItemStacks that will be dropped, generated by loot tables
      context - the LootContext, identical to what is passed to loot tables
      Returns:
      modified loot drops
    • doApply

      protected abstract it.unimi.dsi.fastutil.objects.ObjectArrayList<net.minecraft.world.item.ItemStack> doApply(it.unimi.dsi.fastutil.objects.ObjectArrayList<net.minecraft.world.item.ItemStack> generatedLoot, net.minecraft.world.level.storage.loot.LootContext context)
      Applies the modifier to the generated loot (all loot conditions have already been checked and have returned true).
      Parameters:
      generatedLoot - the list of ItemStacks that will be dropped, generated by loot tables
      context - the LootContext, identical to what is passed to loot tables
      Returns:
      modified loot drops