package de.luca.lager; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.item.ItemStack; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; /** * Zeigt als Zahl, wie viel Haltbarkeit das Ding in deiner Hand noch hat. * Den Balken macht Minecraft schon selbst, hier steht die Zahl. * * Direkt nach dem Umschalten steht der Name mit dabei, danach bleibt nur * die Zahl ueber der Schnellleiste stehen. */ public class Haltbarkeit { /** Ab hier wird die Zahl gelb, ab dem naechsten Wert rot. */ private static final double GELB = 0.25; private static final double ROT = 0.10; /** So lange nach dem Umschalten steht der Name mit dabei. */ private static final long NAME_ZEIT = 3000; private net.minecraft.item.Item letztes; private long gewechselt; private String gewarnt = ""; @SubscribeEvent public void beiUeberlagerung(RenderGameOverlayEvent.Text e) { Minecraft mc = Minecraft.getMinecraft(); if (mc.thePlayer == null || mc.gameSettings.showDebugInfo) { return; } ItemStack stapel = mc.thePlayer.getHeldItem(); if (stapel == null || !stapel.isItemStackDamageable()) { letztes = null; return; } int max = stapel.getMaxDamage(); if (max <= 0) { return; } int uebrig = max - stapel.getItemDamage(); double anteil = Math.max(Math.min((double) uebrig / (double) max, 1.0), 0.0); // Umschalten merken, damit der Name kurz eingeblendet wird if (letztes != stapel.getItem()) { letztes = stapel.getItem(); gewechselt = System.currentTimeMillis(); } ScaledResolution auf = e.resolution; int mitte = auf.getScaledWidth() / 2; int y = auf.getScaledHeight() - 58; // Die Zahl: gross das, was noch da ist, klein wie viel es mal war. String zahl = farbe(anteil) + uebrig + " §8/ " + max; int b = mc.fontRendererObj.getStringWidth(LagerMod.ohneFarben(zahl)); mc.fontRendererObj.drawStringWithShadow(zahl, mitte - b / 2, y, 0xFFFFFF); // Kurz nach dem Umschalten auch den Namen if (System.currentTimeMillis() - gewechselt < NAME_ZEIT) { String name = LagerMod.ohneFarben(stapel.getDisplayName()); int nb = mc.fontRendererObj.getStringWidth(name); mc.fontRendererObj.drawStringWithShadow("§f" + name, mitte - nb / 2, y - 11, 0xFFFFFF); } // Einmal Bescheid sagen, wenn es knapp wird String kennung = stapel.getDisplayName(); if (anteil <= ROT) { if (!gewarnt.equals(kennung)) { gewarnt = kennung; LagerMod.sagen("§c" + LagerMod.ohneFarben(kennung) + " ist fast durch — nur noch " + uebrig + " Haltbarkeit."); } } else if (anteil > GELB) { gewarnt = ""; } } private static String farbe(double anteil) { if (anteil <= ROT) { return "§c"; } return anteil <= GELB ? "§e" : "§a"; } }