[Бинды] Отрисовка на время

Версия Minecraft
1.7.10
1,470
19
189
Мне нужно, что бы при нажатии на кнопку, выполнялся код на определённое время. Как это сделать?
Код:
public class ChangeGui {
 Minecraft mc = Minecraft.getMinecraft();
 protected float zLevel; 
 
 @SubscribeEvent
 public void render(RenderGameOverlayEvent.Pre event) {
 if (event.type == ElementType.FOOD) {
 event.setCanceled(true);
 }
 if (event.type == ElementType.HEALTH) {
 event.setCanceled(true);
 }
 if (event.type == ElementType.ARMOR) {
 // event.setCanceled(true);
 }
 if (event.type == ElementType.AIR) {
 event.setCanceled(true);
 }
 }
 
 @SubscribeEvent
 public void render(RenderGameOverlayEvent.Post event) {
 Minecraft mc = Minecraft.getMinecraft();
 ScaledResolution scale = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
 ExtendedPlayer ep = new ExtendedPlayer(mc.thePlayer).get(mc.thePlayer);
 
 int universalR = 20;

 int hpX = scale.getScaledWidth() / 2 - 72;
 int hpY = scale.getScaledHeight() - 50;

 int hungerX = scale.getScaledWidth() / 2 - 25;
 int hungerY = scale.getScaledHeight() - 50;

 int oxygenX = scale.getScaledWidth() / 2 + 22;
 int oxygenY = scale.getScaledHeight() - 50;
 
 String temp = "Player temperature: " + String.valueOf(ep.getPlayerTemp(mc.thePlayer));
 int playerTempX = scale.getScaledWidth() / 2 - 197;
 int playerTempY = scale.getScaledHeight() - 9;
 
 mc.fontRenderer.drawString(temp, playerTempX - 20, playerTempY, 0xFFFFFF);
 
 if(KeyBinds.ShowStats.getIsKeyPressed()) {
 if (!mc.thePlayer.capabilities.isCreativeMode) {
 this.drawHunger(hungerX, hungerY, universalR);
 this.drawHP(hpX, hpY, universalR);
 this.drawOxygen(oxygenX, oxygenY, universalR);
 }
 }

 // Debug
 if (RCC.DEBUG) {
 // Log.warn("Temp: " + props.getTemp());
 }
 }

 /**
 * @param xC
 * @param yC
 * @param r
 */
 public void drawHP(double xC, double yC, int r) {
 GL11.glPushMatrix();
 GL11.glDisable(GL11.GL_TEXTURE_2D);
 GL11.glEnable(GL11.GL_BLEND);
 double x, y;
 GL11.glColor4f(0.2f, 0.2f, 0.2f, 1);
 Tessellator tess = new Tessellator();
 tess.startDrawing(GL11.GL_TRIANGLE_FAN);
 tess.addVertex(xC, yC, 0);
 for (int i = 0; i <= 30; i++) {
 x = (r * Math.sin(Math.toRadians(i * (360 / 30)))) + xC;
 y = (r * Math.cos(Math.toRadians(i * (360 / 30)))) + yC;
 tess.addVertex(x, y, 0);
 }
 tess.draw();

 float hp = Minecraft.getMinecraft().thePlayer.getHealth();
 float maxHP = Minecraft.getMinecraft().thePlayer.getMaxHealth();

 GL11.glColor4f(1f, 0f, 0f, 1);
 tess.startDrawing(GL11.GL_TRIANGLE_FAN);
 GL11.glDisable(GL11.GL_CULL_FACE);
 tess.addVertex(xC, yC, 0);

 for (int i = 0; i <= hp; i++) {
 double angle = 360 - (i * (360 / maxHP));
 x = (r * Math.sin(Math.toRadians(angle))) + xC;
 y = (r * Math.cos(Math.toRadians(angle))) + yC;
 tess.addVertex(x, y, 0);
 }
 tess.draw();
 GL11.glEnable(GL11.GL_TEXTURE_2D);
 GL11.glEnable(GL11.GL_CULL_FACE);
 this.mc.getTextureManager().bindTexture(new ResourceLocation(RCC.MODID + ":" + "textures/gui/statsHP.png"));
 GL11.glColor3f(1, 1, 1);
 GL11.glTranslated(0, 0, 500);
 RenderUtils.drawScaledCustomSizeModalRect((int) xC - r, (int) yC - r, 0, 0, 133 + 3, 133 + 3, r * 2, r * 2,
 133 * 2 - 5, 133 * 2 - 5);
 GL11.glPopMatrix();
 }

 /**
 * @param xC
 * @param yC
 * @param r
 */
 public void drawHunger(double xC, double yC, int r) {
 GL11.glPushMatrix();
 GL11.glDisable(GL11.GL_TEXTURE_2D);
 GL11.glEnable(GL11.GL_BLEND);
 double x, y;
 GL11.glColor4f(0.2f, 0.2f, 0.2f, 1);
 Tessellator tess = new Tessellator();
 tess.startDrawing(GL11.GL_TRIANGLE_FAN);
 tess.addVertex(xC, yC, 0);
 for (int i = 0; i <= 30; i++) {
 x = (r * Math.sin(Math.toRadians(i * (360 / 30)))) + xC;
 y = (r * Math.cos(Math.toRadians(i * (360 / 30)))) + yC;
 tess.addVertex(x, y, 0);
 }
 tess.draw();

 float hunger = Minecraft.getMinecraft().thePlayer.getFoodStats().getFoodLevel();
 float maxHunger = 20.0F;

 GL11.glColor4f(1f, 0f, 0f, 1);
 tess.startDrawing(GL11.GL_TRIANGLE_FAN);
 GL11.glDisable(GL11.GL_CULL_FACE);
 tess.addVertex(xC, yC, 0);

 for (int i = 0; i <= hunger; i++) {
 double angle = 360 - (i * (360 / maxHunger));
 x = (r * Math.sin(Math.toRadians(angle))) + xC;
 y = (r * Math.cos(Math.toRadians(angle))) + yC;
 tess.addVertex(x, y, 0);
 }
 tess.draw();
 GL11.glEnable(GL11.GL_TEXTURE_2D);
 GL11.glEnable(GL11.GL_CULL_FACE);
 this.mc.getTextureManager().bindTexture(new ResourceLocation(RCC.MODID + ":" + "textures/gui/statsHunger.png"));
 GL11.glColor3f(1, 1, 1);
 GL11.glTranslated(0, 0, 500);

 ScaledResolution scale = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);

 int tw = scale.getScaledWidth();
 int th = scale.getScaledHeight();

 RenderUtils.drawScaledCustomSizeModalRect((int) xC - r, (int) yC - r, 0, 0, 133 + 3, 133 + 3, r * 2, r * 2,
 133 * 2 - 5, 133 * 2 - 5);
 GL11.glPopMatrix();
 }

 /**
 * @param xC
 * @param yC
 * @param r
 */
 public void drawOxygen(double xC, double yC, int r) {
 GL11.glPushMatrix();
 GL11.glDisable(GL11.GL_TEXTURE_2D);
 GL11.glEnable(GL11.GL_BLEND);
 double x, y;
 GL11.glColor4f(0.2f, 0.2f, 0.2f, 1);
 Tessellator tess = new Tessellator();
 tess.startDrawing(GL11.GL_TRIANGLE_FAN);
 tess.addVertex(xC, yC, 0);
 for (int i = 0; i <= 30; i++) {
 x = (r * Math.sin(Math.toRadians(i * (360 / 30)))) + xC;
 y = (r * Math.cos(Math.toRadians(i * (360 / 30)))) + yC;
 tess.addVertex(x, y, 0);
 }
 tess.draw();

 float oxygen = Minecraft.getMinecraft().thePlayer.getAir() / 3;
 float maxOxygen = 300.0F / 3;

 GL11.glColor4f(1f, 0f, 0f, 1);
 tess.startDrawing(GL11.GL_TRIANGLE_FAN);
 GL11.glDisable(GL11.GL_CULL_FACE);
 tess.addVertex(xC, yC, 0);

 for (int i = 0; i <= oxygen; i++) {
 double angle = 360 - (i * (360 / maxOxygen));
 x = (r * Math.sin(Math.toRadians(angle))) + xC;
 y = (r * Math.cos(Math.toRadians(angle))) + yC;
 tess.addVertex(x, y, 0);
 }
 tess.draw();
 GL11.glEnable(GL11.GL_TEXTURE_2D);
 GL11.glEnable(GL11.GL_CULL_FACE);
 this.mc.getTextureManager().bindTexture(new ResourceLocation(RCC.MODID + ":" + "textures/gui/statsOxygen.png"));
 GL11.glColor3f(1, 1, 1);
 GL11.glTranslated(0, 0, 500);

 ScaledResolution scale = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);

 int tw = scale.getScaledWidth();
 int th = scale.getScaledHeight();

 RenderUtils.drawScaledCustomSizeModalRect((int) xC - r, (int) yC - r, 0, 0, 133 + 3, 133 + 3, r * 2, r * 2,
 133 * 2 - 5, 133 * 2 - 5);
 GL11.glPopMatrix();
 }
}
 
1,470
19
189
Код:
protected int time;
 protected boolean show = false;
 
 @SubscribeEvent
    public void onClientTickEvent(TickEvent.ClientTickEvent event) {
     mc = Minecraft.getMinecraft();
        switch (event.phase) {
        case START:{
         if(++time > 5*20 && show) {
         time = 0;
         show = false;
         }
            break;
        }
        default:break;
        }
    }
 
 @SubscribeEvent
 public void render(RenderGameOverlayEvent.Post event) {
 Minecraft mc = Minecraft.getMinecraft();
 ScaledResolution scale = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
 ExtendedPlayer ep = new ExtendedPlayer(mc.thePlayer).get(mc.thePlayer);
 
 int universalR = 20;

 int hpX = scale.getScaledWidth() / 2 - 72;
 int hpY = scale.getScaledHeight() - 50;

 int hungerX = scale.getScaledWidth() / 2 - 25;
 int hungerY = scale.getScaledHeight() - 50;

 int oxygenX = scale.getScaledWidth() / 2 + 22;
 int oxygenY = scale.getScaledHeight() - 50;
 
 String temp = "Player temperature: " + String.valueOf(ep.getPlayerTemp(mc.thePlayer));
 int playerTempX = scale.getScaledWidth() / 2 - 197;
 int playerTempY = scale.getScaledHeight() - 9;
 
 mc.fontRenderer.drawString(temp, playerTempX - 20, playerTempY, 0xFFFFFF);
 
 if(KeyBinds.ShowStats.getIsKeyPressed()) {
 show = true;
 if(show) {
 if (!mc.thePlayer.capabilities.isCreativeMode) {
 this.drawHunger(hungerX, hungerY, universalR);
 this.drawHP(hpX, hpY, universalR);
 this.drawOxygen(oxygenX, oxygenY, universalR);
 }
 }
 }

 // Debug
 if (RCC.DEBUG) {
 // Log.warn("Temp: " + props.getTemp());
 }
 }

Вышел такой код, но он не работает


Код:
protected int time;
 protected boolean show = false;
 
 @SubscribeEvent
    public void onClientTickEvent(TickEvent.ClientTickEvent event) {
     mc = Minecraft.getMinecraft();
        switch (event.phase) {
        case START:{
         if(++time > 5*20 && show) {
         time = 0;
         show = false;
         }
            break;
        }
        default:break;
        }
    }
 
 @SubscribeEvent
 public void render(RenderGameOverlayEvent.Post event) {
 Minecraft mc = Minecraft.getMinecraft();
 ScaledResolution scale = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
 ExtendedPlayer ep = new ExtendedPlayer(mc.thePlayer).get(mc.thePlayer);
 
 int universalR = 20;

 int hpX = scale.getScaledWidth() / 2 - 72;
 int hpY = scale.getScaledHeight() - 50;

 int hungerX = scale.getScaledWidth() / 2 - 25;
 int hungerY = scale.getScaledHeight() - 50;

 int oxygenX = scale.getScaledWidth() / 2 + 22;
 int oxygenY = scale.getScaledHeight() - 50;
 
 String temp = "Player temperature: " + String.valueOf(ep.getPlayerTemp(mc.thePlayer));
 int playerTempX = scale.getScaledWidth() / 2 - 197;
 int playerTempY = scale.getScaledHeight() - 9;
 
 mc.fontRenderer.drawString(temp, playerTempX - 20, playerTempY, 0xFFFFFF);
 
 if(KeyBinds.ShowStats.getIsKeyPressed()) {
 show = true;
 if(show) {
 if (!mc.thePlayer.capabilities.isCreativeMode) {
 this.drawHunger(hungerX, hungerY, universalR);
 this.drawHP(hpX, hpY, universalR);
 this.drawOxygen(oxygenX, oxygenY, universalR);
 }
 }
 }

 // Debug
 if (RCC.DEBUG) {
 // Log.warn("Temp: " + props.getTemp());
 }
 }

Вышел такой код, но он не работает
 

CumingSoon

Местный стендапер
1,634
12
269
Вопрос криво сформулировал. Попробую донести мысль через текст, без кода.
При нажатии на кнопку тебе нужно установить cool down. А потом сбрасывать каждый тик его на единичку, к примеру. Пока его значение >0, рисуй. <=0 не рисуй. Также, если меньше нуля, то нет смысла отнимать единицу
 
1,470
19
189
CoomingSoon написал(а):
Вопрос криво сформулировал. Попробую донести мысль через текст, без кода.
При нажатии на кнопку тебе нужно установить cool down. А потом сбрасывать каждый тик его на единичку, к примеру. Пока его значение >0, рисуй. <=0 не рисуй. Также, если меньше нуля, то нет смысла отнимать единицу
Мне нужно когда игрок нажимает на кнопку и отпускает, появлялись показатели, когда пройдёт н количество времени, исчезнут...

Сделал типа такого, но оно не работает, совсем, даже показатели не показываются.
Код:
@SubscribeEvent
    public void onClientTickEvent(TickEvent.ClientTickEvent event) {
 if(KeyBinds.ShowStats.getIsKeyPressed()) { 
 int timer = 100;
 
 Minecraft mc = Minecraft.getMinecraft();
 ScaledResolution scale = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
 
 int universalR = 20;

 int hpX = scale.getScaledWidth() / 2 - 72;
 int hpY = scale.getScaledHeight() - 50;

 int hungerX = scale.getScaledWidth() / 2 - 25;
 int hungerY = scale.getScaledHeight() - 50;

 int oxygenX = scale.getScaledWidth() / 2 + 22;
 int oxygenY = scale.getScaledHeight() - 50; 
 
 if(timer > 0) {
 --timer;
 this.drawHunger(hungerX, hungerY, universalR);
 this.drawHP(hpX, hpY, universalR);
 this.drawOxygen(oxygenX, oxygenY, universalR); 
 }
 }
 }
 
1,470
19
189
1,470
19
189
3,005
192
592
Сделай хранение переменной в классе.
В KeyInput (или какой эвент там за кнопку отвечает) - при нажатии кнопки ставишь таймер на X времени.
В RenderGameOverlayEvent - проверяешь таймер > 0, отнимаешь (--) и рисуешь.
Как только таймер будет < 0 - проверка не пройдет и отрисовки не будет.
Как только игрок нажмет на кнопку - так таймер поставится и отрисовка будет.
 
2,505
81
397
Можно сохранять время нажатия кнопки (и обновлять, если нажата). А затем в рендере чекать разницу между текущим временем и сохраненным. Если меньше порога, то рисовать.
 
1,470
19
189
Код:
int timer;
 
 @SubscribeEvent
 public void showStatsKey(KeyInputEvent event) {
 if(KeyBinds.ShowStats.getIsKeyPressed()) {
 int timer = 5*20;
 }
 }
 
 @SubscribeEvent
 public void showStatsTime(TickEvent.ClientTickEvent event) {
 if(timer > 0) {
 --timer;
 }
 }

Код:
if(timer > 0) {
 if (!mc.thePlayer.capabilities.isCreativeMode) {
 this.drawHunger(hungerX, hungerY, universalR);
 this.drawHP(hpX, hpY, universalR);
 this.drawOxygen(oxygenX, oxygenY, universalR);
 }
 }

Сделал это, но оно не работает
 
1,470
19
189
Dahaka написал(а):
Ты объявил новую переменную, лол. А не установил значение для нужной.

Всё равно не работает
 

CumingSoon

Местный стендапер
1,634
12
269
Тебе во флудилку, к Гарику, надо. После того, как унизил твое самолюбие, попрошу
А) дать код
Б) убедиться, что все зарегистрировал, поставив брейкпоинт в метод отрисовки
В) проверить что за getIsPressed. Насколько помню, он отвечает за удержание кнопки.
 
Сверху