基本上我想从我的主mod类中的字符串中获取从“World.class”播放的地图的名称...
public abstract class World implements IBlockAccess{
protected WorldInfo worldInfo;
//=====OtherStuff=====
public World(ISaveHandler par1ISaveHandler, String par2Str, WorldSettings par3WorldSettings, WorldProvider par4WorldProvider, Profiler par5Profiler, ILogAgent par6ILogAgent)
{
this.worldInfo.setWorldName(par2Str);
}
//=====OtherStuff=====
}
我用同一个
在同一个包中创建了一个类public class World_Spy extends World{
public World_Spy(ISaveHandler par1iSaveHandler, String par2Str,
WorldProvider par3WorldProvider, WorldSettings par4WorldSettings,
Profiler par5Profiler, ILogAgent par6iLogAgent) {
super(par1iSaveHandler, par2Str, par3WorldProvider, par4WorldSettings,
par5Profiler, par6iLogAgent);
}
@Override
protected IChunkProvider createChunkProvider() {
return null;
}
@Override
public Entity getEntityByID(int i) {
return null;
}
String TheName = "";
public void gotIt(){
TheName = this.worldInfo.getWorldName();
System.out.println(TheName);
}
}
我从我的主要课程中调用它:
World_Spy WName = new World_Spy(null, null, null, null, null, null);
但它在启动时崩溃了...... 任何想法?
答案 0 :(得分:1)
World不是静态类...您需要一个World兼容对象的实例来获取名称。获取World的实例然后是名称的一种方法:
World world = Minecraft.getMinecraft().isIntegratedServerRunning() ? mc.getIntegratedServer().worldServerForDimension(Minecraft.getMinecraft().thePlayer.dimension) : Minecraft.getMinecraft().theWorld;
String worldName = world.getWorldInfo().getWorldName();
此代码应该在客户端工作。
答案 1 :(得分:0)
您尚未初始化worldInfo
protected WorldInfo worldInfo; // initialization MISSING!
因此,当您尝试实例化World_Spy
时,World()
又调用其父类构造函数NullPointerException
,您将获得this.worldInfo.setWorldName(par2Str); // NullPointerException here
protected WorldInfo worldInfo = new WorldInfo();
要解决此问题,只需提供实例
即可{{1}}
答案 2 :(得分:0)
我认为通过抛出NullPointerException
来“崩溃”:
this.worldInfo.setWorldName(par2Str);
确实变量worldInfo
从未通过尝试调用其方法setWorldName()
进行初始化。由于变量为null
,此时抛出NullPointerException
听起来合理。
在java中(与我所知的所有其他编程语言完全一样),你必须在使用之前初始化变量。实际上,默认情况下使用某种“正常”值初始化原始类型。但是,自定义类型的变量初始化为null
,这可能会使初学者感到困惑。
要进行初始化,必须使用构造函数调用后的new
关键字:
worldInfo = new WorldInfo();
现在您可以调用worldInfo
。