Mod制作,在将内容绘制到屏幕时崩溃?

时间:2013-09-24 23:35:25

标签: java crash minecraft

我正在为一款名为Minecraft的游戏制作一个被黑客入侵/欺骗。我编译了我的mods,当我尝试打开某些东西时,我得到一个崩溃报告,无论它将黑客名称绘制到屏幕上。

我不知道出了什么问题,它在Eclipse中完美运行,但在游戏中却没有。这段代码有什么明显错误吗?

if(Client.flight){
            var8.drawString("Flight",GuiScreen.width-var8.getStringWidth("Flight")-1,arraySeperator,0xCCFF33);
            arraySeperator+=11;
        }
        if(Client.sneak){
            var8.drawString("Sneak",GuiScreen.width-var8.getStringWidth("Sneak")-1,arraySeperator,0x007700);
            arraySeperator+=11;
        }
        if(Client.nofall){
            var8.drawString("NoFall",GuiScreen.width-var8.getStringWidth("NoFall")-1,arraySeperator,0xFF0000);
            arraySeperator+=11;
        }
        if(Client.sprint){
            var8.drawString("Speed",GuiScreen.width-var8.getStringWidth("Speed")-1,arraySeperator,0x99CCFF);
            arraySeperator+=11;
        }
        if(Client.killaura){
            var8.drawString("Kill Aura",GuiScreen.width-var8.getStringWidth("Kill Aura")-1,arraySeperator,0xe11a1a);
            arraySeperator+=11;
        }
        if(Client.brightness){
            var8.drawString("Brightness",GuiScreen.width-var8.getStringWidth("Brightness")-1,arraySeperator,0xCCFF33);
            mc.gameSettings.gammaSetting = 10000;
            arraySeperator+=11;
        }else{
            mc.gameSettings.gammaSetting = 1;
        }
        if(Client.speedmine){
            var8.drawString("Cleany Consuela",GuiScreen.width-var8.getStringWidth("Cleany Consuela")-1,arraySeperator,0xF4DF76);
            arraySeperator+=11;
        }
        if(Client.instant){
            var8.drawString("Instant",GuiScreen.width-var8.getStringWidth("Instant")-1,arraySeperator,0xf4df76);
            arraySeperator+=11;
        }
        if(Client.tracers){
            var8.drawString("Tracers",GuiScreen.width-var8.getStringWidth("Tracers")-1,arraySeperator,0xFF0000);
            arraySeperator+=11;
        }

它在正确的地方;一切都很完美。当我尝试打开它时,它会在var8.drawString行上崩溃。

这是stacktrace / crash报告:

ava.lang.IncompatibleClassChangeError: Expected static field awe.g
at avj.a(GuiIngame.java:370)
at bfe.b(SourceFile:700)
at atv.S(SourceFile:686)
at atv.d(SourceFile:619)
at net.minecraft.client.main.Main.main(SourceFile:101)

错误,代码路径和所有已知详细信息的详细演练如下:


- 头 - 堆栈跟踪:     在avj.a(GuiIngame.java:370)

- 受影响的水平 - 细节:     级别名称:MpServer     所有球员:总共1人; [bdi ['ostrichparty101'/ 11,l ='MpServer',x = -757.69,y = 4.62,z = 1605.43]]     块状态:MultiplayerChunkCache:441     等级种子:0     电平发生器:ID 01 - flat,ver 0.功能启用:false     液位发生器选项:     等级产卵位置:世界:( - 744,4,1570),块:(在8,4,2英寸-47,98;包含块-752,0,1568到-737,255,1583),区域:( - 2 ,3;包含块-64,96到-33,127,块-1024,0,1536到-513,255,2047)     等级时间:799游戏时间,799天时间     等级维度:0     级别存储版本:0x00000 - 未知?     等级天气:降雨时间:0(现在:假),雷声时间:0(现在:假)     关卡游戏模式:游戏模式:创意(ID 1)。铁杆:假。秘籍:假     强迫实体:总共1个; [bdi ['ostrichparty101'/ 11,l ='MpServer',x = -757.69,y = 4.62,z = 1605.43]]     重试实体:总共0个; []     服务器品牌:香草     服务器类型:集成单人服务器 堆栈跟踪:     at bdd.a(SourceFile:284)     在atv.b(SourceFile:1761)     在atv.d(SourceFile:633)     在net.minecraft.client.main.Main.main(SourceFile:101)

2 个答案:

答案 0 :(得分:0)

您对客户端代码所做的更改使其与Minecraft运行时库不兼容。由于它在Eclipse中工作,因此IDE必须使用不同版本的库。重新编译库及其任何依赖项,并将它们部署到运行时环境中。

答案 1 :(得分:0)

您应该使用ScaledResolution对象,而不是直接引用GuiScreen.width。

new ScaledResolution(Minecraft.getMinecraft().gameSettings, Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight);

然后,您可以使用scaledResolution.getScaledWidth()代替GuiScreen.width

编辑:只是为了解释您的错误意味着什么,您试图以静态方式引用非静态字段GuiScreen.width。如果你想坚持使用GuiScreen宽度字段,你需要有一个GuiScreen兼容对象的实例。 Minecraft.getMinecraft()。currentScreen引用当前打开的GuiScreen对象,但是当没有Guis打开时,此引用为null。