最近看见很多大佬在mc里做的GUI,我尝试了一下好像不行,试了好几回都显示不出来,err...我该咋办,像哪种在游戏界面创建按钮怎么搞的?panel的newbutton不能使用吧
Vex插件

可以
但是那就是新建一个窗口了XD
但是那就是新建一个窗口了XD
skpsk自己家 发表于 2018-11-29 12:20
可以
但是那就是新建一个窗口了XD
又不是那个意思我是希望在游戏里的
请继承GuiScreen来制作GUI,在里面的buttonList中添加GuiButton来增加按钮。
用Minecraft.getMinecraft().displayGuiScreen()来打开GUI。
用Minecraft.getMinecraft().displayGuiScreen()来打开GUI。
以下回答基于MC1.12回答
如果想要创建一个GUI你至少需要一个GuiContainer或者一个GuiScreen对象(建议继承这两个类并编写自己的代码)
如果你的GUI不需要物品栏,则直接继承GuiScreen,如果需要则继承GuiContainer。
如果你的GUI有物品栏,那么你还另外需要一个类继承自net.minecraft.inventory.Container类,你需要在该类的构造方法中初始化GUI每个物品栏的位置使用 addSlotToContainer(new Slot(inventoryPlayer, index,x,y));来添加一个新的物品Slot到你的Container内
显示GUI:
如果你的GUI是GuiScreen,那么只需要直接执行Minecraft.getMinecraft().displayGuiScreen(GuiScreen gui)来打开GUI即可(该方法需要仅在客户端执行)
如果GUI包含物品栏,或者是GuiContainer的子类,那么需要通过player.openGui(MOD_INSTANCE,guiID,world,x,y,z)来打开GUI
在这种情况下,你需要一个IGuiHandler来响应openGui的事件使用一个类实现IGuiHandler接口,然后重载其中的两个方法
getServerGuiElement需要反回这个GUI对应的Container,getClientGuiElement反回对应的GuiContainer类
最后别忘记注册你的IGuiHandler,在MOD的init事件中注册NetworkRegistry.INSTANCE.registerGuiHandler(MOD_INSTANCE, new GuiHandler());
如果想要创建一个GUI你至少需要一个GuiContainer或者一个GuiScreen对象(建议继承这两个类并编写自己的代码)
如果你的GUI不需要物品栏,则直接继承GuiScreen,如果需要则继承GuiContainer。
如果你的GUI有物品栏,那么你还另外需要一个类继承自net.minecraft.inventory.Container类,你需要在该类的构造方法中初始化GUI每个物品栏的位置使用 addSlotToContainer(new Slot(inventoryPlayer, index,x,y));来添加一个新的物品Slot到你的Container内
显示GUI:
如果你的GUI是GuiScreen,那么只需要直接执行Minecraft.getMinecraft().displayGuiScreen(GuiScreen gui)来打开GUI即可(该方法需要仅在客户端执行)
如果GUI包含物品栏,或者是GuiContainer的子类,那么需要通过player.openGui(MOD_INSTANCE,guiID,world,x,y,z)来打开GUI
在这种情况下,你需要一个IGuiHandler来响应openGui的事件使用一个类实现IGuiHandler接口,然后重载其中的两个方法
getServerGuiElement需要反回这个GUI对应的Container,getClientGuiElement反回对应的GuiContainer类
最后别忘记注册你的IGuiHandler,在MOD的init事件中注册NetworkRegistry.INSTANCE.registerGuiHandler(MOD_INSTANCE, new GuiHandler());