ROOT:挂端主文件夹

2x001 Wrapper.java

在制作游戏内的GUI以前,我们需要一个帮助程序(Helper Function)来完成OpenGL绘画和渲染的功能。在主包内创建一个新包,叫utils,在里面创建一个新的Java类,叫Wrapper,并在里面输入以下代码:

package me.hack.hackedclient.utils;import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;public class Wrapper {public static Minecraft mc  = Minecraft.getMinecraft();public static FontRenderer fr = mc.fontRendererObj;}

2x002 ColorUtils.java

如果你想要开启的模块的颜色显示为彩色的话,那就在utils包内创建一个新的类,叫ColorUtils并输入以下代码:

package me.hack.hackedclient.utils;import java.awt.*;public class ColorUtils {public static Color rainbowEffect(long offset, float fade) {float hue = (float) (System.nanoTime() + offset) / 1.0E10F % 1.0F;long color = Long.parseLong(Integer.toHexString(Integer.valueOf(Color.HSBtoRGB(hue, 1.0F, 1.0F)).intValue()), 16);Color c = new Color((int) color);return new Color(c.getRed() / 255.0F * fade, c.getGreen() / 255.0F * fade, c.getBlue() / 255.0F * fade, c.getAlpha() / 255.0F);}}

2x003 修改HackedClient.java

在这个类的第一行添加:

...
public class HackedClient {public static HackedClient instance = new HackedClient();...

这样,我们就可以在不创建实例的情况下使用主类内的东西了。

2x004 GuiIngameHook.java

在主包下创建一个新包,叫gui。我们游戏内GUI的源代码将会被存放在这里。在gui下创建一个新的Java类,叫GuiIngameHook。我们将会用这个文件来在游戏内展示我们已经开启了的模块,帧数等等。
在这个类中写入以下代码:

package me.EpicfToxic.HackCraft.gui;import com.google.common.collect.Sets;
import me.hack.hackedclient.HackedClient;
import me.hack.hackedclient.module.Module;
import me.hack.hackedclient.utils.ColorUtils;
import me.hack.hackedclient.utils.Wrapper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiIngame;
import net.minecraft.client.gui.ScaledResolution;import java.util.HashSet;public class GuiIngameHook extends GuiIngame {public GuiIngameHook(Minecraft mcIn) {super(mcIn);}@Overridepublic void renderGameOverlay(float p_175180_1_) {super.renderGameOverlay(p_175180_1_);if(!mc.gameSettings.showDebugInfo) {drawRect(2, 2, 100, 14, 0x80000000);Wrapper.fr.drawString("Hacked Client", 4, 4, 0x00FF2B);Wrapper.fr.drawString("FPS: " + mc.getDebugFPS(), 57, 4, -1);renderArrayList();}}private HashSet<String> modBlacklist = Sets.newHashSet();public boolean isModBlacklisted(Module m) {return modBlacklist.contains(m.getClass().getName());}private void renderArrayList() {int yCount = 0;int index = 0;long x = 0;for(Module m : HackedClient.instance.moduleManager.getModules()) {m.onRender();ScaledResolution sr = new ScaledResolution(mc);double offset = yCount * (Wrapper.fr.FONT_HEIGHT + 6);if(m.isToggled()) {if(!modBlacklist.contains(m.getClass().getName())) {Gui.drawRect(sr.getScaledWidth() - Wrapper.fr.getStringWidth(m.getName()) - 15, offset, sr.getScaledWidth(), 6 + Wrapper.fr.FONT_HEIGHT + offset, 0x80000000);Wrapper.fr.drawString("- " + m.getName(), sr.getScaledWidth() - Wrapper.fr.getStringWidth(m.getName()) - 13, 4 + offset, ColorUtils.rainbowEffect(index + x * 2000000000L, 1.0F).getRGB());yCount++;index++;x++;}}}}}

2x005 注入

点击两次RShift打开搜索面板,打开Minecraft.java。然后,使用Ctrl+F搜索guiingame,直到这附近:

...
this.checkGLError("Post startup");
this.ingameGUI = new GuiIngame(this);
...

并将它替换为:

...
this.checkGLError("Post startup");
this.ingameGUI = new GuiIngameHook(this);
...

将鼠标悬浮在GuiIngameHook上,并选择Import,然后这个类就会被导入。
这样一来,我的世界在初始化游戏内GUI的时候就会初始化我们自己的GUI,而不是游戏默认的。

2x006 测试

运行ROOT下的recompile.bat来重新编译挂端,然后运行startclient.bat来启动。如果一切正常的话,你应该可以在左上角看到你的挂端的名字,右上角你应该能看到你已经启用了的模块。按一下F,看看AutoSprint是不是显示在上面了?

— 完 —

如果大家遇到任何问题可以发在评论区,我会尽快回复!

【Java】我的世界Java版外挂制作 [2] - 游戏内GUI相关推荐

  1. 【Java】我的世界Java版外挂制作 [5] - ClickGUI

    ROOT:挂端主文件夹 5x001 HeroGUIv2 下载 很明显的是,手动制作一个ClickGUI不仅很难,也在我的能力范围之外.所以,我们需要使用其他人制作的模版.我搜索到了一个很好的,可以在这 ...

  2. 我的世界电脑版加模组JAVA,我的世界java版mod

    详情 我的世界java版mod是一款经典热门沙盒创造游戏,我的世界java版mod游戏是一种特殊的版本,玩家可以自由的体验,而且游戏采用自由开放的风格,玩家可以随意的冒险和建造,还有丰富的未知之地等你 ...

  3. MC指令java,我的世界Java版指令有哪些-我的世界Java版常用指令分享-沧浪手游

    在我的世界中有着很多的指令操作,这些指令可以让玩家在游戏中拥有金手指,就比如下面这些就是Java版的我的世界的指令,具体的代码就让我们一起来看看吧. 我的世界Java版常用指令分享 1./setblo ...

  4. 【Java】我的世界Java版外挂制作 [1] - 模块管理器与第一个模块

    ROOT: 挂端主文件夹 1x001 创建主包和主类 在ROOT/src/minecraft下创建新包,名字叫me.hack.hackedclient.如果没有创建包的选项,就右键ROOT/src/m ...

  5. 【Java】我的世界Java版外挂制作 [4] - 移动类模块合集

    ROOT:挂端主文件夹 4x001 AutoWalk AutoWalk顾名思义,就是自动走路,可以防止服务器因为AFK把你踢了.在movement包下创建一个新类,叫做AutoWalk,并在里面输入以 ...

  6. 合金弹头 逆向分析与外挂制作报告【内联HOOK】

    一.工具及游戏介绍 使用工具:Ollydbg,PEID,Cheat Engine 实现功能:玩家无敌 目标:找到全局数据,或关键代码块. 游戏版本:合金弹头1-5代珍藏版 二.逆向逻辑 1.初始判断[ ...

  7. Python实践 制作石头剪刀布游戏 带GUI界面

    一.开发需求 使用 Python 编程实现 "石头剪刀布" 游戏,具体要求如下: 程序随机"出拳":在屏幕上显示"石头","剪刀& ...

  8. Unity游戏开发之UGUI设计——制作一个游戏内置的控制台界面/作弊菜单(详细流程,附代码)

    功能说明 今天要实现的功能就是老滚5.GTA.P社等游戏里面那个按下某个按键就能开启调试(开挂)的控制台组件.老规矩,直接上实际效果图: 如上图所示,输入输出文本的控制台本质上就是一个游戏中内嵌的命令 ...

  9. java爱暮色森林7.0js_我的世界手机版暮色森林js

    我的世界手机版js插件对游戏版本要求较高,因游戏版本不同不排除插件不能使用的情况. 我的世界手机版暮色森林js是一个模仿pc版暮色森林制作的js插件,推荐该js与材质包配合使用,跑跑车整理的这个包含材 ...

  10. 我的世界java边境之地_我的世界边境之地是什么 我的世界边境之地介绍

    我的世界边境之地是什么?边境之地在很多玩家严重都是传说之地,但是其实游戏会允许玩家接近地图边缘,下面小编就为各位玩家带来:我的世界边境之地介绍 我的世界边境之地介绍 边境之地(Far Lands,也叫 ...

最新文章

  1. ADO.NET 基础学习笔记1
  2. 即使有历史最佳年报,安踏的未来依然有三重重担
  3. Ubuntu 命令行打开pdf文件和打开命令行当前目录
  4. 前端学习(2790):封装商品组件并且使用
  5. 用随机梯度下降来优化人生
  6. bootstrape实战案例_bootstrap 实战入门教程(一)
  7. 10月26日练习注册用例的编写与ibatis培训
  8. 【恋上数据结构】图基础知识介绍
  9. 云服务器CentOS7上安装Mysql,并使用Navicat连接的最简便快速方法
  10. 很多免费的编程电子书
  11. 辞职日记 记录31岁的程序员跳槽心态
  12. canvas实现点连线动画
  13. js中的cookie的读写操作示例详解
  14. matlab行星运动轨迹仿真动画,Matlab动画模拟太阳系行星运动
  15. 流程图、数据关系绘图神器yEd
  16. 金错刀对话口袋购物王珂:找到痛点,确认卖点,制造爆点!
  17. 【Neo4j × 知识图谱】图形化数据库基本操作: 创建节点与关系、添加属性、查询节点 | 附:可视化 构建四大名著 知识图谱(含源代码)| word2vec实战: 构造斗罗大陆人物关系
  18. deepin系统中.txt文件图标显示内容问题_深度操作系统 deepin V20(UOS)的10大优化操作
  19. 多可文档管理的数据备份
  20. 【图像复原】RDN论文详解(Residual Dense Network for Image Restoration)

热门文章

  1. mac关闭谷歌自动更新
  2. 手机版wps怎么制作折线图_wps怎么制作目录
  3. 微软 苏州STCA 2022暑期实习生 平行面+终面 面经
  4. 论文研读 —— 7. Very Deep Convolutional Networks for Large-Scale Image Recognition (3/3)
  5. 前端应届简历应该怎么写?
  6. git/gitbub入门使用记录
  7. php制作特效文字,PPT制作文字特效 PPT特效文字制作教程
  8. blos硬盘启动台式计算机,戴尔台式机bios设置硬盘启动教程
  9. 浏览器播放rtsp视频流解决方案
  10. 计算机技术中采用二进制,计算机中采用二进制编码的原因是什么