Меню отладки F3

372
0
Я что то поискал, поискал... да не нашел.
Вопрос: как поменять меню на свое? Надеюсь asm не нужно будет юзать.
 
Я на 1.7.10 для начала регаю евент в главном классе 
Код:
@Mod.EventHandler
    public void load(FMLInitializationEvent event) {
        MinecraftForge.EVENT_BUS.register(new EventClient());
    }


потом в классе EventClient пишу следующее

Код:
Minecraft mc = Minecraft.getMinecraft();

FontRenderer fontRenderer = mc.fontRenderer;
GuiDebagMainMenu deb = new GuiDebagMainMenu(mc,fontRenderer);

@SubscribeEvent
public void invRender(RenderGameOverlayEvent evt) {
    if (evt instanceof RenderGameOverlayEvent.Text && this.mc.gameSettings.showDebugInfo) {
        this.deb.addText(evt);
    }
    if (evt instanceof RenderGameOverlayEvent.Pre) {
        switch (evt.type) {
            case DEBUG: {
                this.deb.render(evt);
                break;
            }
            default: {
                return;
            }
        }
        evt.setCanceled(true);
    }
}

а в классе GuiDebagMainMenu этот код
Код:
private Minecraft mc;
private FontRenderer fontRenderer;

public GuiDebagMainMenu(final Minecraft mc, final FontRenderer fontRenderer) {
    this.mc = mc;
    this.fontRenderer = fontRenderer;
}

public void render(final RenderGameOverlayEvent evt) {
    evt.setCanceled(true);
    this.fontRenderer.drawStringWithShadow("      §8[§6Minecraft 1.7.10§8]", 2, 2, 0);
    this.fontRenderer.drawStringWithShadow(this.mc.debug, 2, 12, 16766720);
    final int k3 = MathHelper.floor_double(((Entity)this.mc.thePlayer).posX);
    final int j3 = MathHelper.floor_double(((Entity)this.mc.thePlayer).posY);
    final int l4 = MathHelper.floor_double(((Entity)this.mc.thePlayer).posZ);
    this.fontRenderer.drawString(String.format("§8x:§6 %4.2f  §8\u041f\u043e\u0437\u0438\u0446\u0438\u044f \u0447\u0430\u043d\u043a\u0430:§6 %d (%d)", ((Entity)this.mc.thePlayer).posX, k3 >> 4, k3 & 0xF), 2, 22, 16766720);
    this.fontRenderer.drawString(String.format("§8y:§6 %4.2f  §8\u041f\u043e\u0437\u0438\u0446\u0438\u044f \u0433\u043b\u0430\u0437:§6 %.2f", ((Entity)this.mc.thePlayer).boundingBox.minY, ((Entity)this.mc.thePlayer).posY), 2, 32, 16766720);
    this.fontRenderer.drawString(String.format("§8z:§6 %4.2f  §8\u041f\u043e\u0437\u0438\u0446\u0438\u044f \u0447\u0430\u043d\u043a\u0430:§6 %d (%d)", ((Entity)this.mc.thePlayer).posZ, l4 >> 4, l4 & 0xF), 2, 42, 16766720);
    final int i5 = MathHelper.floor_double(((Entity)this.mc.thePlayer).rotationYaw * 4.0f / 360.0f + 0.5) & 0x3;
    this.fontRenderer.drawString("§8\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0433\u043b\u0430\u0437:§6 " + i5 + " (" + Direction.directions[i5] + ") / " + MathHelper.wrapAngleTo180_float(((Entity)this.mc.thePlayer).rotationYaw), 2, 52, 16766720);
    if (this.mc.objectMouseOver != null) {
        this.fontRenderer.drawString("§8\u0412\u044b \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u0431\u043b\u043e\u043a:§6 " + this.mc.objectMouseOver.blockX + " " + this.mc.objectMouseOver.blockY + " " + this.mc.objectMouseOver.blockZ, 2, 62, 16766720);
    }
}

public void addText(final RenderGameOverlayEvent evt) {
    final long l3 = Runtime.getRuntime().maxMemory();
    final long i4 = Runtime.getRuntime().totalMemory();
    final long j4 = Runtime.getRuntime().freeMemory();
    final long k4 = i4 - j4;
    String s2 = "§8\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438:§6 " + k4 * 100L / l3 + "§8% (§6" + k4 / 1024L / 1024L + "§8MB) of §6" + l3 / 1024L / 1024L + "§8MB";
    final RenderGameOverlayEvent.Text te = (RenderGameOverlayEvent.Text)evt;
    te.right.add(s2);
    s2 = "§8\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u043f\u0430\u043c\u044f\u0442\u0438:§6 " + i4 * 100L / l3 + "§8% (§6" + i4 / 1024L / 1024L + "§8MB)";
    te.right.add(s2);
    for (int m = 0; m < 8; ++m) {
        te.left.add(null);
    }
}

Это для мода
 
1,990
18
105
Код:
String.format("§8x:§6 %4.2f  §8\u041f\u043e\u0437\u0438\u0446\u0438\u044f \u0447\u0430\u043d\u043a\u0430:§6 %d (%d)", ((Entity)this.mc.thePlayer).posX, k3 >> 4, k3 & 0xF), 2, 22, 16766720);
>16766720 а не НЕХ
>k3 >> 4
>k3 & 0xF
>молчу про строку в уникоде
>final в каждом уместном месте, хм
Клёво код пишешь. Сразу захотелось посидеть десяток минут, разбирая одну строку.
 
1,990
18
105
Ну кто спорит.
А k3 >> 4 работает быстрее чем k3 / 16
И поля с final тоже меньше нагрузки несут.
И 0xFFD700 компилятору не придётся преобразовывать в 16766720
Молодец.
 
1,137
5
3
Oldestkon написал(а):
Ну кто спорит.
А k3 >> 4 работает быстрее чем k3 / 16
И поля с final тоже меньше нагрузки несут.
И 0xFFD700 компилятору не придётся преобразовывать в 16766720
Молодец.
Вообще-то реально работает быстрее О_о
Ну и final для совместимости с Котлином, чтобы при конвертации был val, а не var
 
1,990
18
105
Я без сарказма про скорость работы кода.
Зато про с сарказмом то, сам ли он оптимизирует код в каждом возможном месте)0
wilah написал(а):
Ну и final для совместимости с Котлином, чтобы при конвертации был val, а не var
шта? пруфы?
 
1,137
5
3
Проверил в IDEA(Code->Convert Java File...) - работает, как я сказал: без final - var, с ним - val.
***
А ещё лишний каст не повредит:
Код:
MathHelper.floor_double(((Entity)this.mc.thePlayer).posZ);
 
1,990
18
105
-_-
Причём тут конвертация идеей в котлин?
Я знаю, что final превратится в val. Только как ты это вообще приплёл в этот контекст? Очень сомневаюсь, что ТС использует котлин.
И говорил я к тому, что final модификатор везде где можно - наверняка проделки компилятора.
 
Сверху