/* * Copyright (C) 2023 NotEnoughUpdates contributors * * This file is part of NotEnoughUpdates. * * NotEnoughUpdates is free software: you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation, either * version 3 of the License, or (at your option) any later version. * * NotEnoughUpdates is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with NotEnoughUpdates. If not, see . */ package io.github.moulberry.notenoughupdates.profileviewer.level.task; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.profileviewer.level.LevelPage; import io.github.moulberry.notenoughupdates.util.Constants; import io.github.moulberry.notenoughupdates.util.Utils; import net.minecraft.util.EnumChatFormatting; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; public class EssenceTaskLevel extends GuiTaskLevel { public EssenceTaskLevel(LevelPage levelPage) { super(levelPage); } @Override public void drawTask(JsonObject object, int mouseX, int mouseY, int guiLeft, int guiTop) { List lore = new ArrayList<>(); JsonObject categoryXp = levelPage.getConstant().get("category_xp").getAsJsonObject(); JsonObject essenceShopTask = levelPage.getConstant().get("essence_shop_task").getAsJsonObject(); JsonArray essenceSteps = essenceShopTask.get("essence_shop_xp").getAsJsonArray(); JsonObject essencePerks = object.has("perks") ? object.get("perks").getAsJsonObject() : new JsonObject(); Map loreMap = new HashMap<>(); for (Map.Entry stringJsonElementEntry : Constants.ESSENCESHOPS.entrySet()) { String name = stringJsonElementEntry.getKey(); JsonObject individualObjects = stringJsonElementEntry.getValue().getAsJsonObject(); for (Map.Entry jsonElementEntry : individualObjects.entrySet()) { int essenceAmount = Utils.getElementAsInt(Utils.getElement( object, "player_data.perks." + jsonElementEntry.getKey() ), 0); int amountReceivedForEach = 0; for (int i = essenceAmount - 1; i >= 0; i--) { amountReceivedForEach += essenceSteps.get(i).getAsInt(); } if (!loreMap.containsKey(name)) { EssenceShop value = new EssenceShop(); value.current += amountReceivedForEach; value.name = name; loreMap.put(name, value); } else { EssenceShop essenceShop = loreMap.get(name); essenceShop.current += amountReceivedForEach; } } } // bad workaround (pls fix later maybe) for (Map.Entry stringJsonElementEntry : essenceShopTask.entrySet()) { String key = stringJsonElementEntry.getKey(); if (!key.endsWith("_shop")) continue; String name = key.split("_shop")[0].toUpperCase(Locale.ROOT); if (!loreMap.containsKey(name)) { loreMap.put(name, new EssenceShop().setName(name).setCurrent(0)); } } int total = 0; for (Map.Entry stringEssenceShopEntry : loreMap.entrySet()) { String key = stringEssenceShopEntry.getKey(); EssenceShop value = stringEssenceShopEntry.getValue(); JsonObject jsonObject = NotEnoughUpdates.INSTANCE.manager .createItemResolutionQuery() .withKnownInternalName(key) .resolveToItemListJson(); if (jsonObject == null){ Utils.showOutdatedRepoNotification(key); continue; } value.name = jsonObject .get("displayname") .getAsString(); String name = key.toLowerCase(Locale.ROOT) + "_shop"; if (!essenceShopTask.has(name)) continue; value.max = essenceShopTask.get(name).getAsInt(); lore.add(levelPage.buildLore( EnumChatFormatting.getTextWithoutFormattingCodes(value.name), value.current, value.max, false )); total += value.current; } levelPage.renderLevelBar( "Essence", NotEnoughUpdates.INSTANCE.manager.createItemResolutionQuery() .withKnownInternalName("ESSENCE_WITHER") .resolveToItemStack(), guiLeft + 299, guiTop + 25, 110, total, total, categoryXp.get("essence_shop_task").getAsInt(), mouseX, mouseY, true, lore ); } class EssenceShop { String name; double max; double current; public EssenceShop setCurrent(double current) { this.current = current; return this; } public EssenceShop setName(String name) { this.name = name; return this; } } }