package openeye.notes;
import java.util.List;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiMainMenu;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent;
import net.minecraftforge.client.event.GuiScreenEvent.DrawScreenEvent;
import net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import openeye.logic.Config;
public class NotesButtonInjector {
private static final int BUTTON_NOTES_ID = 666;
private static ITextComponent notification;
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void onGuiInit(GuiScreen screen, List buttonList) {
final NoteCollector noteCollector = NoteCollector.INSTANCE;
noteCollector.finishNoteCollection();
notification = noteCollector.getScreenMsg();
if (!noteCollector.isEmpty()) {
NoteCategory type = noteCollector.getMaxLevel();
NoteIcons icon = type.icon;
boolean blinking = noteCollector.hasImportantNotes();
GuiButtonNotes button = getOrCreateInfoButton(screen, buttonList);
button.setBlinking(blinking);
button.setIcon(icon);
}
}
private static int getX(GuiScreen screen, boolean isAbsolute, int delta) {
return (isAbsolute? 0 : screen.width / 2) + delta;
}
private static int getY(GuiScreen screen, boolean isAbsolute, int delta) {
return (isAbsolute? 0 : screen.height / 4) + delta;
}
private static GuiButtonNotes getOrCreateInfoButton(GuiScreen screen, List<GuiButton> buttonList) {
for (GuiButton button : buttonList)
if (button instanceof GuiButtonNotes) return (GuiButtonNotes)button;
GuiButtonNotes buttonNotes = new GuiButtonNotes(BUTTON_NOTES_ID,
getX(screen, Config.isNotesButtonPosAbsolute, Config.notesButtonPosX),
getY(screen, Config.isNotesButtonPosAbsolute, Config.notesButtonPosY));
buttonList.add(buttonNotes);
return buttonNotes;
}
public static void onScreenDraw(GuiScreen screen) {
if (Config.mainScreenExtraLine && notification != null)
screen.drawCenteredString(screen.mc.fontRendererObj,
notification.getFormattedText(),
getX(screen, Config.isExtraLinePosAbsolute, Config.extraLinePosX),
getY(screen, Config.isExtraLinePosAbsolute, Config.extraLinePosY),
0xFFFFFF);
}
public static void onActionPerformed(Minecraft mc, GuiScreen screen, GuiButton button) {
if (button.id == BUTTON_NOTES_ID) onActionPerformed(mc, screen);
}
private static void onActionPerformed(Minecraft mc, GuiScreen screen) {
mc.displayGuiScreen(new GuiNotes(screen, NoteCollector.INSTANCE.getNotes()));
}
@SubscribeEvent
public void onGuiInit(InitGuiEvent evt) {
if (evt.getGui() instanceof GuiMainMenu) onGuiInit(evt.getGui(), evt.getButtonList());
}
@SubscribeEvent
public void onGuiInit(DrawScreenEvent.Post evt) {
if (evt.getGui() instanceof GuiMainMenu) onScreenDraw(evt.getGui());
}
@SubscribeEvent
public void onActionPerformed(ActionPerformedEvent evt) {
if (evt.getGui() instanceof GuiMainMenu) onActionPerformed(evt.getGui().mc, evt.getGui(), evt.getButton());
}
public static void registerInjector() {
MinecraftForge.EVENT_BUS.register(new NotesButtonInjector());
}
}