开坑-改变MC的游戏界面

事情起因

因为我的服务器是使用的外置登陆,因此之前写了一个启动器

自认为看着还行,But,经常有新玩家无法用该启动器启动游戏,因此流失了很多玩家
所以我就想能不能让玩家在启动后再登陆,以下是效果图

8说了,敲代码吧
提示:如果你没有任何编程基础,那么这篇文章可能不适合你,本篇文章将用Minecraft版本1.12.2,Forge版本2705做示例
如果你想写mod,那么想必你已经搭建好forge开发环境了,如果你还没有搭建,百度随便搜一下就有很多教程

新建一个mod项目

创建mod主类,名称随意,例如MyGUI就是我的主类名称

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Mod(modid = "mygui",name = "MyGui")
public class MyGUI {

@Mod.EventHandler
public void onload(FMLInitializationEvent event){
MinecraftForge.EVENT_BUS.register(this); //注册事件
}


@SubscribeEvent
public void onOpenScreen(GuiOpenEvent event){ //监听gui打开事件
if (event.getGui() instanceof GuiMainMenu){ //判断打开的gui是不是主界面,也就是启动游戏后看到的界面
event.setGui(要替换的gui); //替换界面
}
}

}

定义一个类,继承GuiScreen类

现在我们已经可以监听到主界面是否打开并且可以替换它了,但是我们需要有一个自己的GuiScreen来替换它
所以我们要新建一个类,类名可以自定义,我的是MyNewScreen,新建的类要继承GuiScreen类

1
2
3
public class MyNewScreen extends GuiScreen {

}

接着修改你的主类,修改监听事件中的代码,修改要替换的界面

1
2
3
4
5
6
@SubscribeEvent
public void onOpenScreen(GuiOpenEvent event){
if (event.getGui() instanceof GuiMainMenu){
event.setGui(new MyNewScreen()); //把界面替换成你刚刚写好的界面
}
}

这样我们就得到了一个空的界面,构建你的mods,放入你的mods文件夹,打开MC,你会发现原来的主界面变成了这样

漆黑的一片,什么都没有,因为你创建的只是一个空的界面,那么接下来就要给你的界面添加一些”控件”了

给你的界面“润色”

添加按钮

大概思路:重写initGui()方法,new一个你自己的按钮并把它加入到buttonList

1
2
3
4
5
6
7
public class MyNewScreen extends GuiScreen {
@Override
public void initGui(){
GuiButton btn = new GuiButton(1,this.width / 2 - 75, 120, 150, 20, "退出游戏");
this.buttonList.add(btn); //把你的按钮加入buttonList
}
}

代码中的this.width是当前mc窗口的宽度,this.width/2则是窗口宽度的一半
同样的,还有窗口的高度this.height,这样可以轻松的使按钮显示在屏幕中间位置

这里简单讲解一下GuiButton的参数

1
new GuiButton(按钮id,按钮显示的位置x,按钮位置y,按钮宽度,按钮高度,按钮显示的文本);

按钮id:随意一个int值,后面要用到
位置x与位置y:在mc窗口中的位置,mc窗口左下角是原点
宽度高度:字面意思
显示的文本: 字面意思。。。

现在可以再次测试你刚刚写的mod了,启动mc后你会发现按钮出现了,但是点击没有效果,那么现在就要给你的按钮添加事件了
例如这里我想让按钮按下后关闭mc
你需要重写actionPerformed()方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class MyNewScreen extends GuiScreen {
@Override
public void initGui(){
GuiButton btn = new GuiButton(1,this.width / 2 - 75, 120, 150, 20, "退出游戏");
this.buttonList.add(btn); //把你的按钮加入buttonList
}

@Override
protected void actionPerformed(GuiButton button) throws IOException {
if (button.id == 1){ //这里的1改为你的按钮id
//这里写要执行的代码,例如这里我要关闭mc
this.mc.shutdown();//关闭mc
}
}
}

添加标签

待填坑。。。