package net.blay09.mods.eirairc.client.gui.overlay;
import net.blay09.mods.eirairc.api.config.IConfigProperty;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.util.IChatComponent;
import java.util.ArrayList;
import java.util.List;
public class OverlayJoinLeave extends Gui {
private static class JoinLeaveMessage {
public final IChatComponent chatComponent;
public int y;
public float timeLeft;
public JoinLeaveMessage(IChatComponent chatComponent, int y, float timeLeft) {
this.chatComponent = chatComponent;
this.y = y;
this.timeLeft = timeLeft;
}
}
private final List<JoinLeaveMessage> messages = new ArrayList<>();
private final Minecraft mc;
private final FontRenderer fontRenderer;
private IConfigProperty<Integer> visibleTime;
private IConfigProperty<Float> scale;
public OverlayJoinLeave(Minecraft mc, FontRenderer fontRenderer) {
this.mc = mc;
this.fontRenderer = fontRenderer;
}
public void setVisibleTime(IConfigProperty<Integer> visibleTime) {
this.visibleTime = visibleTime;
}
public void setScale(IConfigProperty<Float> scale) {
this.scale = scale;
}
public void addMessage(IChatComponent component) {
if(visibleTime == null) {
return;
}
for (JoinLeaveMessage message : messages) {
message.y -= fontRenderer.FONT_HEIGHT + 2;
}
messages.add(new JoinLeaveMessage(component, 0, visibleTime.get()));
}
public void updateAndRender(float renderTickTime) {
if(scale == null) {
return;
}
ScaledResolution resolution = new ScaledResolution(mc);
final int height = 64;
int guiTop = resolution.getScaledHeight() - height;
int guiLeft = resolution.getScaledWidth();
GlStateManager.pushMatrix();
GlStateManager.translate(guiLeft, guiTop, 0f);
GlStateManager.scale(scale.get(), scale.get(), 1f);
GlStateManager.enableBlend();
for(int i = messages.size() - 1; i >= 0; i--) {
JoinLeaveMessage message = messages.get(i);
message.timeLeft -= renderTickTime;
int alpha = 255;
if(message.timeLeft < visibleTime.get() / 5f) {
alpha = (int) Math.max(11, (255f * (message.timeLeft / (visibleTime.get() / 5f))));
}
if(message.timeLeft <= 0) {
messages.remove(i);
}
String formattedText = message.chatComponent.getFormattedText();
fontRenderer.drawString(formattedText, -fontRenderer.getStringWidth(formattedText) - 16, message.y, 16777215 | (alpha << 24), true);
}
GlStateManager.disableBlend();
GlStateManager.popMatrix();
}
}