Intellij Idea Loot modifiers not being applied Minecraft Forge 1.20.1

zf2sa74q  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(123)

怪物不会掉落我通过战利品修改器添加到他们战利品表中的物品。我有大约60个战利品修改器文件,但为了简单起见,让我们假设我唯一的战利品修改器是spider_charm_from_spiders.json。该文件看起来像:

  1. {
  2. "type": "reinvigoration:add_item",
  3. "conditions": [
  4. {
  5. "condition": "minecraft:entity_properties",
  6. "predicate": {
  7. "type": "minecraft:spider"
  8. },
  9. "entity": "this"
  10. },
  11. {
  12. "condition": "minecraft:killed_by_player"
  13. }
  14. ],
  15. "item": "reinvigoration:spider_charm"
  16. }

字符串
位于src/main/resources/data/reinvigoration/loot_modifiers/spider_charm_from_spiders.json
我的global_loot_modifiers. json类位于src/main/resources/data/forge/loot_modifiers/global_loot_modifiers. json,看起来像这样:

  1. {
  2. "replace": false,
  3. "entries": [
  4. "reinvigoration:spider_charm_from_spiders"
  5. ]
  6. }


我有两个类,AddItemModifier.java和ModLootModifiers.java,在src/main/java/com/soliid/reinvigoraion/loot中。
AddItemModifier:

  1. package com.soliid.reinvigoration.loot;
  2. import com.google.common.base.Suppliers;
  3. import com.mojang.serialization.Codec;
  4. import com.mojang.serialization.codecs.RecordCodecBuilder;
  5. import it.unimi.dsi.fastutil.objects.ObjectArrayList;
  6. import net.minecraft.world.item.Item;
  7. import net.minecraft.world.item.ItemStack;
  8. import net.minecraft.world.level.storage.loot.LootContext;
  9. import net.minecraft.world.level.storage.loot.predicates.LootItemCondition;
  10. import net.minecraftforge.common.loot.IGlobalLootModifier;
  11. import net.minecraftforge.common.loot.LootModifier;
  12. import net.minecraftforge.registries.ForgeRegistries;
  13. import org.jetbrains.annotations.NotNull;
  14. import java.util.function.Supplier;
  15. public class AddItemModifier extends LootModifier {
  16. public static final Supplier<Codec<AddItemModifier>> CODEC = Suppliers.memoize(()
  17. -> RecordCodecBuilder.create(inst -> codecStart(inst).and(ForgeRegistries.ITEMS.getCodec()
  18. .fieldOf("item").forGetter(m -> m.item)).apply(inst, AddItemModifier::new)));
  19. private final Item item;
  20. protected AddItemModifier(LootItemCondition[] conditionsIn, Item item) {
  21. super(conditionsIn);
  22. this.item = item;
  23. }
  24. @Override
  25. @NotNull
  26. protected ObjectArrayList<ItemStack> doApply(ObjectArrayList<ItemStack> generatedLoot, LootContext context) {
  27. generatedLoot.add(new ItemStack(item));
  28. return generatedLoot;
  29. }
  30. @Override
  31. public Codec<? extends IGlobalLootModifier> codec() {
  32. return CODEC.get();
  33. }
  34. }


ModLootModifiers:

  1. package com.soliid.reinvigoration.loot;
  2. import com.mojang.serialization.Codec;
  3. import com.soliid.reinvigoration.Reinvigoration;
  4. import net.minecraftforge.common.loot.IGlobalLootModifier;
  5. import net.minecraftforge.eventbus.api.IEventBus;
  6. import net.minecraftforge.registries.DeferredRegister;
  7. import net.minecraftforge.registries.ForgeRegistries;
  8. import net.minecraftforge.registries.RegistryObject;
  9. public class ModLootModifiers {
  10. public static final DeferredRegister<Codec<? extends IGlobalLootModifier>> LOOT_MODIFIER_SERIALIZERS =
  11. DeferredRegister.create(ForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, Reinvigoration.MODID);
  12. public static final RegistryObject<Codec<? extends IGlobalLootModifier>> ADD_ITEM =
  13. LOOT_MODIFIER_SERIALIZERS.register("add_item", AddItemModifier.CODEC);
  14. public static void register(IEventBus bus) {
  15. LOOT_MODIFIER_SERIALIZERS.register(bus);
  16. }
  17. }


我在我的主类中注册了LOOT_MODIFIER_SERIALIZERS:

  1. ModLootModifiers.register(modEventBus);


当我建造和玩游戏时,蜘蛛不会掉蜘蛛符咒。我正在修改IntelliJ IDEA社区版2023.1.2

1qczuiv0

1qczuiv01#

我也有同样的问题。这显然是在最新的锻造版本中被打破的。有一个PR等待合并,以解决问题:https://github.com/MinecraftForge/MinecraftForge/pull/9554

相关问题