java - 创建 Gui 的实例(使用 ModLoader 进行 Minecraft 模组)

标签 java user-interface minecraft

首先,我真的只是在尝试学习 Java。此时我想做的就是在屏幕上显示一个字符串;

所以我有我的 mod_Bite 类和我的 BiteGui 类。 (Bite只是一个随意的名字,我当时正在吃饭)

//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);
    }
}

最佳答案

您永远不会在 BiteGui 类中初始化 mc。然后,您尝试在 drawBiteGui 中使用 this.mc.fontRenderer 引用它。正如您所说,这会给您一个 NullPointerException

private Minecraft mc;

...相当于...

private Minecraft mc = null;

您应该在 BiteGui 构造函数中添加一些内容以将其初始化为某些内容。

关于java - 创建 Gui 的实例(使用 ModLoader 进行 Minecraft 模组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15466787/

相关文章:

html - 需要 CSS 帮助

java - Minecraft 1.12,服务器未启动。 "Linux external server"

java - 出于 mod 测试目的,Minecraft 不会从 eclipse 启动

java - 更改 SWING 中的布局

java - 我如何使用 JDK 1.7 运行 jersey 2.26?

java - ConnectionTimeout 与 SocketTimeout

java - Java 图形库简介

android - 布局旋钮和按钮 View

java - 在这种情况下如何打印这个java错误窗口?

java - 强制 .java 编译为 .class