package joshie.harvest.player.tracking; import joshie.harvest.core.helpers.MCClientHelper; import joshie.harvest.core.helpers.StackRenderHelper; import joshie.harvest.core.lib.HFModInfo; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import java.text.NumberFormat; import java.util.Locale; import java.util.Set; import static joshie.harvest.core.HFCore.DISPLAY_SHIPPED_TICKS_ON_SCREEN; @SideOnly(Side.CLIENT) public class TrackingRenderer { private boolean loading; private int ticker = 0; private int yOffset = 0; private final Set<StackSold> sold; public TrackingRenderer(Set<StackSold> sold) { this.sold = sold; this.loading = true; } private void renderAt(Minecraft mc, StackSold stack, int x, int y) { StackRenderHelper.drawStack(stack.getStack(), x + 4, y - 24, 1.25F); mc.getTextureManager().bindTexture(HFModInfo.ELEMENTS); mc.ingameGUI.drawTexturedModalRect(x + 30, y - 16, 244, 0, 12, 12); String text = NumberFormat.getNumberInstance(Locale.ENGLISH).format(stack.getSellValue()); mc.fontRendererObj.drawStringWithShadow(text, x + 44, y - 13, 0xFFFFFFFF); } private boolean hasFinishedOrUpdateTickerUp() { ticker++; if (ticker >= 2) { if (yOffset + 1 >= sold.size() * 20) { if (ticker >= DISPLAY_SHIPPED_TICKS_ON_SCREEN) { ticker = 0; //Reset return true; } } else { ticker = 0; yOffset++; } } return false; } private void moveItemsDown() { ticker++; if (ticker >= 10) { if (yOffset <= 0) { MinecraftForge.EVENT_BUS.unregister(this); } else { ticker = 0; yOffset -= 2; } } } @SubscribeEvent public void onGuiRender(RenderGameOverlayEvent.Pre event) { if (event.getType() == ElementType.HOTBAR) { int maxHeight = event.getResolution().getScaledHeight(); Minecraft mc = MCClientHelper.getMinecraft(); GlStateManager.pushMatrix(); int y = 0; int currentY = maxHeight + (20 * sold.size()) - yOffset; for (StackSold stack: sold) { renderAt(mc, stack, 0, currentY - y); y += 20; //Increase the y } GlStateManager.popMatrix(); if (loading && hasFinishedOrUpdateTickerUp()) loading = false; else if (!loading) moveItemsDown(); } } }