Class LootModifier

java.lang.Object
net.minecraftforge.common.loot.LootModifier
All Implemented Interfaces:
IGlobalLootModifier

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 Details

  • Constructor Details

    • LootModifier

      protected LootModifier(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>,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

      @NotNull public final @NotNull it.unimi.dsi.fastutil.objects.ObjectArrayList<ItemStack> apply(it.unimi.dsi.fastutil.objects.ObjectArrayList<ItemStack> generatedLoot, 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

      @NotNull protected abstract @NotNull it.unimi.dsi.fastutil.objects.ObjectArrayList<ItemStack> doApply(it.unimi.dsi.fastutil.objects.ObjectArrayList<ItemStack> generatedLoot, 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