0

基本的に、メイン 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);

しかし、起動時にクラッシュします...何かアイデアはありますか?

4

3 に答える 3

1

World は静的クラスではありません...名前を取得するには、World 互換オブジェクトのインスタンスが必要です。World のインスタンスを取得してから名前を取得する 1 つの方法:

World world = Minecraft.getMinecraft().isIntegratedServerRunning() ? mc.getIntegratedServer().worldServerForDimension(Minecraft.getMinecraft().thePlayer.dimension) : Minecraft.getMinecraft().theWorld;
String worldName = world.getWorldInfo().getWorldName();

このコードはクライアント側で機能するはずです。

于 2013-09-30T17:05:29.413 に答える