2013-03-17 55 views
0

首先,我真的只是在尝试学习Java。我现在想要做的就是在屏幕上显示一个字符串;创建一个Gui实例(使用ModLoader修改我的Minecraft)

所以我有我的mod_Bite类和我的BiteGui类。 (撕咬只是一个随机的名字,我在吃的时候)

//mod_Bite.java 
package net.minecraft.src; 

import net.minecraft.client.Minecraft; 

public class mod_Bite extends BaseMod { 

    @Override 
    public String getVersion() { 
     return "1.0"; 
    } 

    @Override 
    public void load() { 
     ModLoader.setInGameHook(this, true, true); 
    } 

    public mod_Bite() { 
    } 

    @Override 
    public boolean onTickInGame(float tick, Minecraft mc) 
    { 
     return true; 
    } 
} 

//BiteGui.java 
package net.minecraft.src; 
import net.minecraft.client.Minecraft; 

public class BiteGui extends Gui { 

    private Minecraft mc; 

    public BiteGui(){ 
     drawBiteGui(); 
    } 

    public void drawBiteGui() { 
     FontRenderer fr = this.mc.fontRenderer; 
     drawString(fr, "Testing!", 5, 5, 0xffffff); 
    } 
} 

我不明白的是如何创建它。我试图在onTickInGame方法创建BiteGui的对象(虽然我不认为它应该创建它的每一个刻度)

public boolean onTickInGame(float tick, Minecraft mc) 
{ 
    BiteGui biteObj = new BiteGui(); 
    return true; 
} 

但它说,有一个空指针异常,这给我的知识是指我”试图使用未分配任何值的东西,或者它没有指向任何东西。 我显然没有在这里做点什么。


编辑:我改变了代码,它的工作原理除了文本闪烁而不是停留在屏幕上。很明显,因为我在onTickInGame方法中创建了对象,但我不知道如何从其他位置初始化Minecraft。

package net.minecraft.src; 

import net.minecraft.client.Minecraft; 

public class mod_Bite extends BaseMod { 

    @Override 
    public String getVersion() { 
     return "1.0"; 
    } 

    @Override 
    public void load() { 
     ModLoader.setInGameHook(this, true, true); 
    } 

    public mod_Bite() { 

    } 

    @Override 
    public boolean onTickInGame(float tick, Minecraft mc) 
    { 
     BiteGui biteObj = new BiteGui(mc); 
     return true; 
    } 
} 

package net.minecraft.src; 
import net.minecraft.client.Minecraft; 

public class BiteGui extends Gui { 

    private Minecraft mc; 

    public BiteGui(Minecraft minecraft) { 
     this.mc = minecraft; 
     drawBiteGui(); 
    } 

    public void drawBiteGui() { 
     FontRenderer fr = this.mc.fontRenderer; 
     drawString(fr, "Testing!", 5, 5, 0xffffff); 
    } 
} 
+0

哪里是例外?无论如何,首先要使用Java API(Swing),而不是尝试在逻辑中添加更多混乱,请稍后再说。 – SJuan76 2013-03-17 22:07:12

+0

我很好奇你为什么使用ModLoader而不是Forge。 – 2013-03-17 22:14:46

+0

感谢您告诉我们您得到了什么样的错误;你不会相信有多少人会说“它没有工作,修复它”。尽管如此,当您遇到错误时,请告诉我们您获得的完整堆栈跟踪。这告诉我们行号和其他细节,我们可以用它来更好地诊断您的问题。谢谢! – MathSquared 2013-07-17 15:56:25

回答

1

你永远不要初始化mcBiteGui类。然后,您尝试使用this.mc.fontRendererdrawBiteGui中提及它。如你所说,这会给你一个NullPointerException

private Minecraft mc; 

...等价于...

private Minecraft mc = null; 

你应该在你BiteGui构造函数初始化它添加一些东西。

+0

啊,这是有道理的,我从onTickInGame通过了Minecraft,它可以正常工作,但是文字会随着每个勾号闪烁。我如何让文本保持显示?我用我所做的更新了主帖。 – Sharph 2013-03-17 22:40:43

1

我想出了如何让它停止闪烁!在mod_Bite,

改变这一点:

ModLoader.setInGameHook(this, true, true); 

这样:

ModLoader.setInGameHook(this, true, false); 
相关问题