package joshie.harvest.knowledge.gui.stats.notes.page; import joshie.harvest.api.knowledge.Category; import joshie.harvest.api.knowledge.Note; import joshie.harvest.api.knowledge.NoteRender; import joshie.harvest.core.HFTrackers; import joshie.harvest.core.base.gui.BookPage; import joshie.harvest.core.helpers.MCClientHelper; import joshie.harvest.knowledge.HFNotes; import joshie.harvest.knowledge.gui.stats.GuiStats; import joshie.harvest.knowledge.gui.stats.button.ButtonNext; import joshie.harvest.knowledge.gui.stats.button.ButtonPrevious; import joshie.harvest.knowledge.gui.stats.button.ButtonTabRight; import joshie.harvest.knowledge.gui.stats.notes.button.ButtonNote; import joshie.harvest.knowledge.gui.stats.notes.button.ButtonNoteNext; import joshie.harvest.knowledge.gui.stats.notes.button.ButtonNotePrevious; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiLabel; import net.minecraft.item.ItemStack; import net.minecraft.util.text.TextFormatting; import org.apache.commons.lang3.text.WordUtils; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; public class PageNotes extends BookPage<GuiStats> { public static Note note = HFNotes.BLUEPRINTS; private static int page; private static String[] split; private static int pages; private final List<Note> list; PageNotes(Category category, ItemStack stack) { super("note", category.getUnlocalizedName(), stack); this.list = new ArrayList<>(); this.list.addAll(Note.REGISTRY.values().stream().filter(note -> note.getCategory() == category).collect(Collectors.toList())); } public static void setDisplayPage(int amount) { page += amount; MCClientHelper.initGui(); } public static void setNote(Note note) { PageNotes.note = note; PageNotes.page = 0; String[] split = WordUtils.wrap(note.getDescription(), 26, "\n", false).split("\n"); if (split.length < 20) PageNotes.split = null; else { PageNotes.split = split; pages = split.length / 18; } MCClientHelper.initGui(); } @Override public void initGui(GuiStats gui, List<GuiButton> buttonList, List<GuiLabel> labelList) { super.initGui(gui, buttonList, labelList); labelList.add(createLabel(TextFormatting.UNDERLINE + getDisplayName(), labelList.size(), gui.guiLeft + 60, gui.guiTop + 8, 60, 20)); buttonList.add(new ButtonTabRight(gui, PageFarming.INSTANCE, buttonList.size(), 308, 32)); buttonList.add(new ButtonTabRight(gui, PageActivities.INSTANCE, buttonList.size(), 308, 66)); buttonList.add(new ButtonTabRight(gui, PageTown.INSTANCE, buttonList.size(), 308, 100)); //buttonList.add(new ButtonTabRight(gui, PageOther.INSTANCE, buttonList.size(), 308, 134)); //Remove secret notes that we haven't discovered from even showing up List<Note> list = new ArrayList<>(this.list); Iterator<Note> it = list.iterator(); while (it.hasNext()) { Note note = it.next(); if (note.isSecret() && !HFTrackers.getClientPlayerTracker().getTracking().getLearntNotes().contains(note.getResource())) { it.remove(); } } int j = 0; int k = 0; int added = 0; for (int i = start * 56; added < start * 56 + 56 && i < list.size(); i++) { Note note = list.get(i); if (k == 7) { k = 0; j++; } k++; added++; buttonList.add(new ButtonNote(gui, note, buttonList.size(), 3 + k * 18, 24 + j * 18)); } int maxStart = list.size() / 112; if (start < maxStart) buttonList.add(new ButtonNext(gui, buttonList.size(), 130, 172)); if (start != 0) buttonList.add(new ButtonPrevious(gui, buttonList.size(), 20, 172)); if (split != null) { if (page < pages) buttonList.add(new ButtonNoteNext(gui, buttonList.size(), 273, 172)); if (page != 0) buttonList.add(new ButtonNotePrevious(gui, buttonList.size(), 173, 172)); } if (note.getRender() != null) note.getRender().initRender(gui.mc, gui, gui.guiLeft, gui.guiTop); } @Override public void drawScreen(int x, int y) { if (split != null) { int pos = 0; int factor = page * 18; for (int i = factor; i < split.length && i < factor + 18; i++) { drawUnicodeFont(split[i], 164, 23 + (pos * 8), 500); pos++; } } else drawUnicodeFont(note.getDescription(), 164, 23, 126); NoteRender render = note.getRender(); if (render != null) { if (!render.isInit()) { render.initRender(gui.mc, gui, gui.guiLeft, gui.guiTop); } render.drawScreen(x, y); } } }