MCreator开发MC服务端模组:玩家加入日志输出报错求助
解决PlayerLoggedInEvent调用getPlayer()报错的问题
问题分析
你遇到的编译报错,是因为当前Minecraft/Forge版本中,PlayerEvent.PlayerLoggedInEvent的getPlayer()方法存在版本兼容问题,导致无法被正确识别调用。
解决步骤
修正玩家实体获取方式
部分新版本Forge中,推荐通过getEntity()获取实体后强转为Player类,替代直接调用getPlayer():Player player = (Player) event.getEntity();记得导入正确的Player类:
import net.minecraft.entity.player.Player;添加空指针安全校验
为避免运行时潜在错误,建议先判断实体类型再执行操作:if (event != null && event.getEntity() instanceof Player) { Player player = (Player) event.getEntity(); System.out.println(player.getDisplayName().getString()); }检查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
相关产品推荐
相关产品推荐

