Как нарисовать на экране статистику

Версия Minecraft
1.7.10
98
1
Хочу выводить на главный экран статистику о игроке, в определенную область. Подскажите как ее нарисовать правильнее.
Код:
@ForgeSubscribe
public void drawStats(RenderGameOverlayEvent.Text e){
int stat = Minecraft.getMinecraft().statFileWriter.writeStat(StatList.distanceWalkedStat);
e.left.add("Пройдено: " + stat);
}
 
98
1
Develance написал(а):
Да че вы как маленькие.
Код:
  drawCenteredString(super.fontRendererObj, ""), 0, 0, 0xFFFFFFFF);
Подбирай сам.

Выдает ошибки
Код:
@SubscribeEvent
 public void render(RenderGameOverlayEvent event) {
 @ForgeSubscribe
 public void drawStats(RenderGameOverlayEvent.Text e){
 int stat = Minecraft.getMinecraft().statFileWriter.writeStat(StatList.distanceWalkedStat);
 e.left.add("Пройдено: " + stat);
 }
 switch(event.type) {
    case ALL:{
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        mc.getTextureManager().bindTexture(furnaceGuiTextures);
        int posX = (event.resolution.getScaledWidth() - xSize) / 2;
        int posY = (event.resolution.getScaledHeight() - ySize) / 2;
        mc.ingameGUI.drawTexturedModalRect(posX, posY, 0, 0, xSize, ySize);
        break;
    }
    default:break;
    }
 }
}
 

timaxa007

Модератор
5,831
409
672
Не может найти такое поле.


Чуть-чуть времени на поиски и вроде должно быть так сделано:
Код:
int stat = mc.thePlayer.getStatFileWriter().writeStat(StatList.distanceWalkedStat);
 
98
1
timaxa007 написал(а):
Не может найти такое поле.


Чуть-чуть времени на поиски и вроде должно быть так сделано:
Код:
int stat = mc.thePlayer.getStatFileWriter().writeStat(StatList.distanceWalkedStat);




Огромное спасибо. А как теперь можно его вывести  на экран, т.е добавить в public ?
Код:
@SubscribeEvent
 public void render(RenderGameOverlayEvent event) {
 switch(event.type) {
    case ALL:{
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        mc.getTextureManager().bindTexture(furnaceGuiTextures);
        int posX = (event.resolution.getScaledWidth() - xSize) / 2;
        int posY = (event.resolution.getScaledHeight() - ySize) / 2;
        mc.ingameGUI.drawTexturedModalRect(posX, posY, 0, 0, xSize, ySize);
        break;
    }
    default:break;
    }
 }
}
Ps: код вывода на экран с ошибкой
 drawCenteredString(super.fontRendererObj, ""), 0, 0, 0xFFFFFFFF);
 

timaxa007

Модератор
5,831
409
672
Не понял смысла слов "добавить в public" в этом предложении.
Можешь попробовать вывести.
И типа попробуй использовать
Код:
mc.fontRenderer.drawString("Пройдено: " + stat, posX + 8, posY + 8, 4210752);
после
Код:
mc.ingameGUI.drawTexturedModalRect(posX, posY, 0, 0, xSize, ySize);
 
98
1
timaxa007 написал(а):
Не понял смысла слов "добавить в public" в этом предложении.
Можешь попробовать вывести.
И типа попробуй использовать
Код:
mc.fontRenderer.drawString("Пройдено: " + stat, posX + 8, posY + 8, 4210752);
после
Код:
mc.ingameGUI.drawTexturedModalRect(posX, posY, 0, 0, xSize, ySize);
Спасибо, но не помогло. Скорее всего я где-то туплю. Вот полный код класса, посмотри если сможешь.
Код:
import org.lwjgl.opengl.GL11;

import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.stats.StatList;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderPlayerEvent;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;

public class EventRenderer {
 Minecraft mc = Minecraft.getMinecraft();
 private static final ResourceLocation texture = new ResourceLocation("dayz", "textures/items/backpack.png");
 private static final IModelCustom model = AdvancedModelLoader.loadModel(new ResourceLocation("dayz", "models/items/modelbp.obj"));

 @SubscribeEvent
 public void renderItem(RenderPlayerEvent.Specials.Pre event) {
 EntityPlayer player = event.entityPlayer;

 double p_x = player.lastTickPosX + (player.posX - player.lastTickPosX);
 double p_y = player.lastTickPosY + (player.posY - player.lastTickPosY);
 double p_z = player.lastTickPosZ + (player.posZ - player.lastTickPosZ);

 double dx = player.posX - p_x;
 double dy = player.posY - p_y;
 double dz = player.posZ - p_z;

 GL11.glPushMatrix();
 GL11.glTranslated(dx, dy, dz);

 GL11.glRotatef(180F, 1F, 0F, 0F);

 GL11.glTranslatef(
 event.renderer.modelBipedMain.bipedBody.rotationPointX * event.partialRenderTick,
 event.renderer.modelBipedMain.bipedBody.rotationPointY * event.partialRenderTick,
 event.renderer.modelBipedMain.bipedBody.rotationPointZ * event.partialRenderTick);
 GL11.glRotatef(event.renderer.modelBipedMain.bipedBody.rotateAngleZ * (180F / (float)Math.PI), 0F, 0F, 1F);
 GL11.glRotatef(event.renderer.modelBipedMain.bipedBody.rotateAngleY * (180F / (float)Math.PI), 0F, 1F, 0F);
 GL11.glRotatef(event.renderer.modelBipedMain.bipedBody.rotateAngleX * (180F / (float)Math.PI), 1F, 0F, 0F);
 GL11.glTranslatef(0F, -1.5F, 0F);

 mc.renderEngine.bindTexture(texture);
 model.renderAll();

 GL11.glPopMatrix();
 
 }
 
 public void drawStats(RenderGameOverlayEvent.Text e){
 int stat = mc.thePlayer.getStatFileWriter().writeStat(StatList.distanceWalkedStat);
 int posX = (e.resolution.getScaledWidth() - xSize) / 2;
    int posY = (e.resolution.getScaledHeight() - ySize) / 2;
 mc.ingameGUI.drawTexturedModalRect(posX, posY, 0, 0, xSize, ySize);
 mc.fontRenderer.drawString("Пройдено: " + stat, posX + 30, posY + 30, 4210752);
 } 
 
 static final ResourceLocation furnaceGuiTextures = new ResourceLocation("dayz", "textures/items/backpack.png");
 int xSize = 16;
 int ySize = 16;
 
 @SubscribeEvent
 public void render(RenderGameOverlayEvent event) {
 switch(event.type) {
    case ALL:{
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        mc.getTextureManager().bindTexture(furnaceGuiTextures);
        int posX = (event.resolution.getScaledWidth() - xSize) / 2;
        int posY = (event.resolution.getScaledHeight() - ySize) / 2;
        mc.ingameGUI.drawTexturedModalRect(posX, posY, 0, 0, xSize, ySize);
        break;
    }
    default:break;
    }
 }
}
 
98
1
timaxa007 написал(а):
Вроде как да, у тебя отсутствует аннотация "@SubscribeEvent" у метода drawStats.

Все заработало, но проблема в том, что обновлает статистику только после захода во gui статистика + крест наведения стал двойным. Можно ли сделать автоматическое обновление статистики?
 

Вложения

  • необновляет.png
    необновляет.png
    30.1 KB · Просмотры: 48
7,099
324
1,510
Через какой-то промежуток времени перерисовывай гуи


Крестик норм выглядит, но снайперам не понравится)
 
7,099
324
1,510
А зачем каждый тик дергать стату? Вполне достаточно раз в секунду, например. Или получение статы быстрая операция?
 
Сверху