You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Minecraft Forge 1.20.1战利品修饰器未生效问题求助

Minecraft Forge 1.20.1自定义战利品修饰器未生效排查与修复

现有配置与代码

战利品修饰器文件 (spider_charm_from_spiders.json)

路径:src/main/resources/data/reinvigoration/loot_modifiers/spider_charm_from_spiders.json

{
  "type": "reinvigoration:add_item",
  "conditions": [
    {
      "condition": "minecraft:entity_properties",
      "predicate": {
        "type": "minecraft:spider"
      },
      "entity": "this"
    },
    {
      "condition": "minecraft:killed_by_player"
    }
  ],
  "item": "reinvigoration:spider_charm"
}

全局战利品修饰器配置 (global_loot_modifiers.json)

路径:src/main/resources/data/forge/loot_modifiers/global_loot_modifiers.json

{
  "replace": false,
  "entries": [
    "reinvigoration:spider_charm_from_spiders"
  ]
}

核心Java类

AddItemModifier.java

package com.soliid.reinvigoration.loot;

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.world.item.Item;
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.registries.ForgeRegistries;
import org.jetbrains.annotations.NotNull;

import java.util.function.Supplier;

public class AddItemModifier extends LootModifier {
    public static final Supplier<Codec<AddItemModifier>> CODEC = Suppliers.memoize(()
            -> RecordCodecBuilder.create(inst -> codecStart(inst).and(ForgeRegistries.ITEMS.getCodec()
            .fieldOf("item").forGetter(m -> m.item)).apply(inst, AddItemModifier::new)));
    private final Item item;

    protected AddItemModifier(LootItemCondition[] conditionsIn, Item item) {
        super(conditionsIn);
        this.item = item;
    }

    @Override
    @NotNull
    protected ObjectArrayList<ItemStack> doApply(ObjectArrayList<ItemStack> generatedLoot, LootContext context) {
        generatedLoot.add(new ItemStack(item));
        return generatedLoot;
    }

    @Override
    public Codec<? extends IGlobalLootModifier> codec() {
        return CODEC.get();
    }
}

ModLootModifiers.java

package com.soliid.reinvigoration.loot;

import com.mojang.serialization.Codec;
import com.soliid.reinvigoration.Reinvigoration;
import net.minecraftforge.common.loot.IGlobalLootModifier;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;

public class ModLootModifiers  {
public static final DeferredRegister<Codec<? extends IGlobalLootModifier>> LOOT_MODIFIER_SERIALIZERS =
            DeferredRegister.create(ForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, Reinvigoration.MODID);

    public static final RegistryObject<Codec<? extends IGlobalLootModifier>> ADD_ITEM =
            LOOT_MODIFIER_SERIALIZERS.register("add_item", AddItemModifier.CODEC);

    public static void register(IEventBus bus) {
        LOOT_MODIFIER_SERIALIZERS.register(bus);
    }
}

主类注册

ModLootModifiers.register(modEventBus);

问题排查与修复方案

1. 修正包名拼写错误

你的类路径是src/main/java/com/soliid/reinvigoraion/loot,但Java代码中的包名是com.soliid.reinvigoration.loot——reinvigoraion少了一个't',这会导致类无法被正确加载。将文件夹名称改为reinvigoration,与代码包名保持一致。

2. 调整击杀条件逻辑

minecraft:killed_by_player默认仅检测玩家直接击杀,若玩家通过宠物、发射器等间接击杀蜘蛛,条件会不满足。可以修改条件允许间接击杀:

{
  "condition": "minecraft:killed_by_player",
  "direct": false
}

也可以暂时移除该条件,先测试基础掉落是否生效,再逐步加回条件排查。

3. 验证物品注册有效性

确认reinvigoration:spider_charm已正确注册,在游戏中执行/give @p reinvigoration:spider_charm命令,若能获取物品则排除物品未注册问题。

4. 查看日志定位错误

启动游戏后,打开run/logs/latest.log,搜索loot、modifier关键词,查找类加载失败、修饰器类型找不到、物品不存在等报错信息,这些日志能直接定位问题根源。

5. 清理缓存并重构项目

在IntelliJ中执行Build > Rebuild Project,删除run文件夹后重新生成游戏环境,避免旧编译缓存导致的异常。


内容的提问来源于stack exchange,提问作者TherrSpoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:23:12