使用Eclipse+Forge编译Minecraft模组时出现Cannot find symbol错误
解决Minecraft 1.7.10 Forge模组编译的"找不到符号"错误
我看了你用Eclipse+Forge编译1.7.10模组时碰到的问题,这些编译错误其实都是缺少必要的类导入语句导致的,和库链接关系不大——你代码里用到了Block、Material这些Minecraft/Forge的核心类,但没告诉编译器它们的位置,所以才会一堆"cannot find symbol"报错。
修正后的完整代码
package com.example.examplemod; // 新增所有必要的导入语句 import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; @Mod(modid = ExampleMod.MODID, version = ExampleMod.VERSION) public class ExampleMod { public static final String MODID = "examplemod"; public static final String VERSION = "1.0"; @EventHandler public void init(FMLInitializationEvent event) { Block amethystOre = new ModBlock(Material.rock, "amethystOre"); GameRegistry.registerBlock(amethystOre, "amethystOre"); } private class ModBlock extends Block { public ModBlock(Material material, String blockName) { super(material); this.setBlockName(blockName); this.setBlockTextureName(MODID + ":" + blockName); this.setCreativeTab(CreativeTabs.tabBlock); } } }
错误原因拆解
你遇到的每一个报错都对应一个缺失的导入:
Block类:来自net.minecraft.block.BlockMaterial类:来自net.minecraft.block.material.MaterialGameRegistry工具类:来自cpw.mods.fml.common.registry.GameRegistryCreativeTabs枚举:来自net.minecraft.creativetab.CreativeTabs
另外那个关于bootstrap class path的警告,是因为你用的Java版本高于1.6(Forge 1.7.10基于Java 1.6开发),可以在Eclipse项目设置里把编译级别改成1.6,或者直接忽略——它不会影响编译成功,只是环境版本不匹配的提示。
实用小技巧
在Eclipse里选中报错的类名(比如Block),按Ctrl + Shift + O就能自动导入所有缺失的类,能省不少手动写导入的功夫。另外记得确认你的Forge环境是正确搭建的:已经运行过gradlew setupDecompWorkspace eclipse,并且Eclipse导入的是正确的项目。
内容的提问来源于stack exchange,提问作者Spitfire972




