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

MCreator开发MC服务端模组:玩家加入日志输出报错求助

解决PlayerLoggedInEvent调用getPlayer()报错的问题

问题分析

你遇到的编译报错,是因为当前Minecraft/Forge版本中,PlayerEvent.PlayerLoggedInEvent的getPlayer()方法存在版本兼容问题,导致无法被正确识别调用。

解决步骤

  1. 修正玩家实体获取方式
    部分新版本Forge中,推荐通过getEntity()获取实体后强转为Player类,替代直接调用getPlayer():

    Player player = (Player) event.getEntity();
    

    记得导入正确的Player类:import net.minecraft.entity.player.Player;

  2. 添加空指针安全校验
    为避免运行时潜在错误,建议先判断实体类型再执行操作:

    if (event != null && event.getEntity() instanceof Player) {
        Player player = (Player) event.getEntity();
        System.out.println(player.getDisplayName().getString());
    }
    
  3. 检查MCreator环境依赖

    • 确认MCreator项目关联的Forge服务端版本与你查阅文档的版本一致,版本不匹配会导致方法无法识别。
    • 尝试清理MCreator缓存,重新生成项目后再编译。

修正后的完整代码

package net.mcreator.discord.procedures;

import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraft.entity.player.Player;

import javax.annotation.Nullable;

@Mod.EventBusSubscriber
public class LoginTrackerProcedure {
    @SubscribeEvent
    public static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
        System.out.println("test");
        // 安全获取玩家并输出名称
        if (event != null && event.getEntity() instanceof Player) {
            Player player = (Player) event.getEntity();
            System.out.println(player.getDisplayName().getString());
        }
        System.out.println("test");
    }

    // 若不需要execute方法可直接删除以下部分
    public static void execute() {
        execute(null);
    }

    private static void execute(@Nullable net.minecraftforge.eventbus.api.Event event) {
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:58:36