aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/PetInfo.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/PetInfo.java')
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/PetInfo.java372
1 files changed, 0 insertions, 372 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/PetInfo.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/PetInfo.java
deleted file mode 100644
index 187ca897..00000000
--- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/PetInfo.java
+++ /dev/null
@@ -1,372 +0,0 @@
-package io.github.moulberry.notenoughupdates.miscfeatures;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
-import io.github.moulberry.notenoughupdates.core.config.gui.GuiPositionEditor;
-import io.github.moulberry.notenoughupdates.options.NEUConfig;
-import io.github.moulberry.notenoughupdates.profileviewer.GuiProfileViewer;
-import io.github.moulberry.notenoughupdates.profileviewer.ProfileViewer;
-import io.github.moulberry.notenoughupdates.util.Constants;
-import io.github.moulberry.notenoughupdates.util.ProfileApiSyncer;
-import io.github.moulberry.notenoughupdates.util.Utils;
-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.item.ItemStack;
-import net.minecraft.util.ChatComponentText;
-import net.minecraft.util.EnumChatFormatting;
-import net.minecraftforge.client.event.ClientChatReceivedEvent;
-import net.minecraftforge.client.event.RenderGameOverlayEvent;
-import net.minecraftforge.event.world.WorldEvent;
-import net.minecraftforge.fml.common.Loader;
-import net.minecraftforge.fml.common.eventhandler.EventPriority;
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
-import org.apache.commons.lang3.text.WordUtils;
-
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class PetInfo {
-
- private static final Pattern XP_GAIN_AND_SKILL_PATTERN = Pattern.compile("\\+(\\d*\\.?\\d*) (Farming|Mining|Combat|Foraging|Fishing|Enchanting|Alchemy) (\\(([0-9.,]+)/([0-9.,]+)\\))");
- private static final Pattern XP_BOOST_PATTERN = Pattern.compile("PET_ITEM_(COMBAT|FISHING|MINING|FORAGING|ALL|FARMING)_(SKILL|SKILLS)_BOOST_(COMMON|UNCOMMON|RARE|EPIC)");
-
- public enum Rarity {
- COMMON(0, 0, 1, EnumChatFormatting.WHITE),
- UNCOMMON(6, 1, 2, EnumChatFormatting.GREEN),
- RARE(11, 2, 3, EnumChatFormatting.BLUE),
- EPIC(16, 3, 4, EnumChatFormatting.DARK_PURPLE),
- LEGENDARY(20, 4, 5, EnumChatFormatting.GOLD),
- MYTHIC(20, 4, 5, EnumChatFormatting.LIGHT_PURPLE);
-
- public int petOffset;
- public EnumChatFormatting chatFormatting;
- public int petId;
- public int beastcreatMultiplyer;
-
- Rarity(int petOffset, int petId, int beastcreatMultiplyer, EnumChatFormatting chatFormatting){
- this.chatFormatting = chatFormatting;
- this.petOffset = petOffset;
- this.petId = petId;
- this.beastcreatMultiplyer = beastcreatMultiplyer;
- }
-
- public static Rarity getRarityFromColor(EnumChatFormatting chatFormatting){
- for (int i = 0; i < Rarity.values().length; i++) {
- if (Rarity.values()[i].chatFormatting.equals(chatFormatting))
- return Rarity.values()[i];
- }
- return COMMON;
- }
- }
-
- public static class pet {
- public String petType;
- public double petExp;
- public Rarity rarity;
- public GuiProfileViewer.PetLevel petLevel;
- public String petXpType;
- public String petItem;
- }
-
- public static pet currentPet = null;
- public static HashMap<String, pet> petList = new HashMap<>();
-
- public static double currentXp = 0.0;
- public static String currentXpType = "";
- public static int tamingLevel = 1;
- public static double beastMultiplier = 0;
- public static boolean ignoreNextXp = false;
-
- public static void clearPet(){ currentPet = null; }
-
- public float getLevelPercent(){
- DecimalFormat df = new DecimalFormat("#.#", DecimalFormatSymbols.getInstance(Locale.ENGLISH));
- try {
- return Float.parseFloat(df.format(currentPet.petLevel.levelPercentage * 100f ));
- }catch (Exception ignored){ return 0; }
- }
-
- private static void getAndSetPet(ProfileViewer.Profile profile) {
- JsonObject petObject = profile.getPetsInfo(profile.getLatestProfile());
- JsonObject skillInfo = profile.getSkillInfo(profile.getLatestProfile());
- JsonObject invInfo = profile.getInventoryInfo(profile.getLatestProfile());
- JsonObject profileInfo = profile.getProfileInformation(profile.getLatestProfile());
- if (invInfo != null && profileInfo != null){
- JsonObject stats = profileInfo.get("stats").getAsJsonObject();
- boolean hasBeastmasterCrest = false;
- Rarity currentBeastRarity = Rarity.COMMON;
- for (JsonElement talisman : invInfo.get("talisman_bag").getAsJsonArray()) {
- if (talisman.isJsonNull()) continue;
- String internalName = talisman.getAsJsonObject().get("internalname").getAsString();
- if (internalName.startsWith("BEASTMASTER_CREST")) {
- hasBeastmasterCrest = true;
- try {
- Rarity talismanRarity = Rarity.valueOf(internalName.replace("BEASTMASTER_CREST_", ""));
- if (talismanRarity.beastcreatMultiplyer > currentBeastRarity.beastcreatMultiplyer) currentBeastRarity = talismanRarity;
- } catch (Exception ignored) {}
- }
- }
- if (hasBeastmasterCrest) {
- if (stats.has("mythos_kills")) {
- int mk = stats.get("mythos_kills").getAsInt();
- double petXpBoost = mk > 10000 ? 1 : mk > 7500 ? 0.9 : mk > 5000 ? 0.8 : mk > 2500 ? 0.7 :
- mk > 1000 ? 0.6 : mk > 500 ? 0.5 : mk > 250 ? 0.4 : mk > 100 ? 0.3 : mk > 25 ? 0.2 : 0.1;
- beastMultiplier = petXpBoost * currentBeastRarity.beastcreatMultiplyer;
- }else beastMultiplier = 0.1 * currentBeastRarity.beastcreatMultiplyer;
- }
- }
- if (skillInfo != null) tamingLevel = skillInfo.get("level_skill_taming").getAsInt();
- JsonObject petsJson = Constants.PETS;
- if (petsJson != null) {
- if (petObject != null) {
- boolean hasActivePet = false;
- petList.clear();
-
- for (int i = 0; i < petObject.getAsJsonArray("pets").size(); i++) {
- JsonElement petElement = petObject.getAsJsonArray("pets").get(i);
- JsonObject petObj = petElement.getAsJsonObject();
- pet pet = new pet();
- pet.petType = petObj.get("type").getAsString();
- Rarity rarity;
- try {
- rarity = Rarity.valueOf(petObj.get("tier").getAsString());
- } catch (Exception ignored) {
- rarity = Rarity.COMMON;
- }
- pet.rarity = rarity;
- pet.petExp = petObj.get("exp").getAsDouble();
- pet.petLevel = GuiProfileViewer.getPetLevel(petsJson.get("pet_levels").getAsJsonArray(), rarity.petOffset, (float) pet.petExp);
- JsonElement heldItem = petObj.get("heldItem");
- pet.petItem = heldItem.isJsonNull() ? null : heldItem.getAsString();
- JsonObject petTypes = petsJson.get("pet_types").getAsJsonObject();
- pet.petXpType = petTypes.has(pet.petType) ? petTypes.get(pet.petType.toUpperCase()).getAsString().toLowerCase() : "unknown";
-
- petList.put(pet.petType + ";" + pet.rarity.petId, pet);
- if (petObj.get("active").getAsBoolean()) {
- hasActivePet = true;
- if (currentPet == null || (pet.petType.equalsIgnoreCase(currentPet.petType) && pet.rarity.equals(currentPet.rarity))) {
- if (currentPet != null && ((currentPet.petLevel.level == pet.petLevel.level && currentPet.petLevel.levelPercentage > pet.petLevel.levelPercentage) || currentPet.petLevel.level > pet.petLevel.level))
- pet.petLevel = currentPet.petLevel;
- currentPet = pet;
- }
- }
- }
- if (!hasActivePet){
- clearPet();
- }
- }
- }
- }
-
- public static void longTick(){
- NEUConfig config = NotEnoughUpdates.INSTANCE.config;
- int updateTime = 90000;
- if ((config.treecap.enableMonkeyCheck || config.notifications.showWrongPetMsg) && !config.overlay.enablePetInfo) updateTime = 300000;
-
- if (NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard()){
- ProfileApiSyncer.getInstance().requestResync("petinfo", updateTime, () -> {}, PetInfo::getAndSetPet);
- }
- }
-
- public static float getCurrentLevelReqs(float level, pet pet){
- JsonObject petsJson = Constants.PETS;
- if (petsJson != null){
- return petsJson.get("pet_levels").getAsJsonArray().get((int) (level+pet.rarity.petOffset)).getAsFloat();
- }
- return 0;
- }
-
- public static double getBoostMultiplyer(String boostName){
- if (boostName == null) return 1;
- if (boostName.equalsIgnoreCase("PET_ITEM_ALL_SKILLS_BOOST_COMMON")) {
- return 1.1;
- }else if (boostName.equalsIgnoreCase("ALL_SKILLS_SUPER_BOOST")){
- return 1.2;
- }else if (boostName.endsWith("epic")){
- return 1.5;
- }else if (boostName.endsWith("rare")){
- return 1.4;
- }else if (boostName.endsWith("uncommon")){
- return 1.3;
- }else if (boostName.endsWith("common")){
- return 1.2;
- }
- else return 1;
- }
-
- public static double getXpGain(pet pet, double xp, String xpType){
- double tamingPercent = 1.0 + (tamingLevel / 100f);
- xp = xp * tamingPercent;
- xp = xp + (xp * beastMultiplier);
- if (pet.petXpType != null && !pet.petXpType.equalsIgnoreCase(xpType)){
- xp = ((xpType.equalsIgnoreCase("alchemy") && !pet.petXpType.equalsIgnoreCase("alchemy")) || xpType.equalsIgnoreCase("enchanting") ) ?
- xp * 0.08 : xp * 0.33;
- }
- if (xpType.equalsIgnoreCase("mining") || xpType.equalsIgnoreCase("fishing")){
- xp = xp * 1.5;
- }
- if (pet.petItem != null) {
- Matcher petItemMatcher = XP_BOOST_PATTERN.matcher(pet.petItem);
- if ((petItemMatcher.matches() && petItemMatcher.group(1).equalsIgnoreCase(pet.petXpType)) || pet.petItem.equalsIgnoreCase("ALL_SKILLS_SUPER_BOOST"))
- xp = xp * getBoostMultiplyer(pet.petItem);
- }
- return xp;
- }
-
-
- @SubscribeEvent
- public void onOverlayDrawn(RenderGameOverlayEvent.Post event) {
- NEUConfig config = NotEnoughUpdates.INSTANCE.config;
- if(NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard() && config.overlay.enablePetInfo && ((event.type == null && Loader.isModLoaded("labymod")) ||
- event.type == RenderGameOverlayEvent.ElementType.ALL)
- ){
- Minecraft mc = Minecraft.getMinecraft();
- if (mc.gameSettings.showDebugInfo ||
- (mc.gameSettings.keyBindPlayerList.isKeyDown() &&
- (!mc.isIntegratedServerRunning() ||
- mc.thePlayer.sendQueue.getPlayerInfoMap().size() > 1))) {
- return;
- }
-
- if (currentPet != null && currentPet.petLevel != null && !currentPet.petType.isEmpty()) {
- ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
-
- FontRenderer font = mc.fontRendererObj;
-
- int overlayStyle = config.overlay.petInfoOverlayStyle;
-
- String petName = EnumChatFormatting.GREEN + "[Lvl " + (int) currentPet.petLevel.level + "] " + currentPet.rarity.chatFormatting +
- WordUtils.capitalizeFully(currentPet.petType.replace("_", " "));
- String lvlString = EnumChatFormatting.AQUA + "" + Utils.shortNumberFormat((currentPet.petLevel.currentLevelRequirement * currentPet.petLevel.levelPercentage), 0) + "/" + Utils.shortNumberFormat(currentPet.petLevel.currentLevelRequirement, 0) + EnumChatFormatting.YELLOW + " (" + getLevelPercent() + "%)";
-
- int xPos = config.overlay.petInfoPosition.getAbsX(scaledResolution, Math.max(font.getStringWidth(petName), font.getStringWidth(lvlString)) + 20);
- int yPos = config.overlay.petInfoPosition.getAbsY(scaledResolution, (currentPet.petLevel.level < 100 ? 22 : 11)) + 2;
-
- if (!(mc.currentScreen instanceof GuiPositionEditor) && (overlayStyle == 0 || overlayStyle == 4))
- Gui.drawRect(xPos, yPos-2, xPos+Math.max(font.getStringWidth(lvlString), font.getStringWidth(petName))+22, yPos+(currentPet.petLevel.level < 100 ? 20 : 16), 0x80000000);
-
- if (overlayStyle == 3) {
- for (int xO = -2; xO <= 2; xO++) {
- for (int yO = -2; yO <= 2; yO++) {
- if (Math.abs(xO) != Math.abs(yO)) {
- font.drawString(Utils.cleanColour(petName), xPos + 20 + xO / 2f, yPos + (currentPet.petLevel.level < 100 ? 0 : 4) + yO / 2f, 0x000000, false);
- }
- }
- }
- }
-
- font.drawString(petName, xPos + 20, yPos + (currentPet.petLevel.level < 100 ? 0 : 4), 0xffffff, overlayStyle == 2 || overlayStyle == 4);
- if (currentPet.petLevel.level < 100){
- if (overlayStyle == 3) {
- for (int xO = -2; xO <= 2; xO++) {
- for (int yO = -2; yO <= 2; yO++) {
- if (Math.abs(xO) != Math.abs(yO)) {
- font.drawString(Utils.cleanColour(lvlString), xPos + 20 + xO / 2f, yPos + font.FONT_HEIGHT + yO / 2f, 0x000000, false);
- }
- }
- }
- }
- font.drawString(lvlString, xPos + 20, yPos + font.FONT_HEIGHT, 0xffffff, overlayStyle == 2 || overlayStyle == 4);
- }
-
- JsonObject petItem = NotEnoughUpdates.INSTANCE.manager.getItemInformation().get(currentPet.petType+";"+currentPet.rarity.petId);
- if(petItem != null) {
- ItemStack stack = NotEnoughUpdates.INSTANCE.manager.jsonToStack(petItem, false, false, false);
- Utils.drawItemStack(stack, xPos, yPos);
- }
- GlStateManager.color(0,0,0);
- }
- }
- }
-
- @SubscribeEvent
- public void switchWorld(WorldEvent.Load event) {
- if (NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard()) {
- ProfileApiSyncer.getInstance().requestResync("petinfo", 10000, () -> {
- }, PetInfo::getAndSetPet);
- }
- }
-
- @SubscribeEvent(priority = EventPriority.HIGHEST)
- public void onChatReceived(ClientChatReceivedEvent event) {
- NEUConfig config = NotEnoughUpdates.INSTANCE.config;
- if (NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard() && (config.overlay.enablePetInfo || config.treecap.enableMonkeyCheck || config.notifications.showWrongPetMsg)) {
- if (event.type == 0) {
- String chatMessage = Utils.cleanColour(event.message.getUnformattedText());
- String petLevelMessage = "your " + (currentPet != null ? currentPet.petType.toLowerCase().replace("_", " ") : "") + " levelled up to level";
- if (chatMessage.toLowerCase().startsWith("you summoned your")) {
- String pet = chatMessage.trim().toUpperCase().replace("YOU SUMMONED YOUR ", "").replace("!", "").replace(" ", "_");
- Rarity rarity = event.message.getSiblings().size() == 3 ? Rarity.getRarityFromColor(event.message.getSiblings().get(1).getChatStyle().getColor()) : Rarity.COMMON;
- if (petList.containsKey(pet + ";" + rarity.petId)) {
- if (currentPet != null) petList.put(currentPet.petType + ";" + currentPet.rarity.petId, currentPet);
- pet summonedPet = new pet();
- summonedPet.petType = pet;
- summonedPet.rarity = rarity;
- summonedPet.petLevel = petList.get(pet + ";" + rarity.petId).petLevel;
- summonedPet.petXpType = petList.get(pet + ";" + rarity.petId).petXpType;
- currentPet = summonedPet;
- }
- } else if (chatMessage.toLowerCase().startsWith("you despawned your")) {
- if (currentPet != null) {
- petList.put(currentPet.petType + ";" + currentPet.rarity.petId, currentPet);
- }
- clearPet();
- } else if (chatMessage.toLowerCase().startsWith(petLevelMessage)) {
- if (currentPet != null) {
- try {
- ignoreNextXp = true;
- currentPet.petLevel.level = Integer.parseInt(chatMessage.toLowerCase().replace(petLevelMessage, "").replace("!", "").replace(" ", ""));
- currentPet.petLevel.levelPercentage = 0;
- currentPet.petLevel.currentLevelRequirement = getCurrentLevelReqs(currentPet.petLevel.level, currentPet);
- } catch (Exception ignored) {}
- }
- } else if (chatMessage.toLowerCase().contains("switching to profile")) {
- clearPet();
- petList.clear();
- }
- }
- if (event.type == 2) {
- String[] parts = Utils.cleanColour(event.message.getUnformattedText()).split(" {3,}");
- if (parts.length == 3) {
- Matcher matcher = XP_GAIN_AND_SKILL_PATTERN.matcher(parts[1].trim());
- if (currentPet != null && matcher.matches()) {
- String oldXpType = currentXpType;
- currentXpType = matcher.group(2);
- try {
- double actionXp = Double.parseDouble(matcher.group(4).replace(",", ""));
- if (actionXp != currentXp && actionXp != 0) {
- if (NotEnoughUpdates.INSTANCE.config.notifications.showWrongPetMsg &&
- currentXpType.equalsIgnoreCase(oldXpType) &&
- !currentXpType.equalsIgnoreCase(currentPet.petXpType)
- ){
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED +
- "[NEU]" + EnumChatFormatting.GOLD + " \u26A0 You're using a " + WordUtils.capitalizeFully(currentPet.petXpType) + " pet while gathering " + WordUtils.capitalizeFully(currentXpType) + " skill xp."));
- }
- double xpGain = !currentXpType.equalsIgnoreCase(oldXpType) ? Double.parseDouble(matcher.group(1)) : actionXp - currentXp;
- currentXp = actionXp;
- double xp = currentPet.petLevel.levelPercentage * currentPet.petLevel.currentLevelRequirement;
- double newXp = xp + getXpGain(currentPet, xpGain, currentXpType);
- if (ignoreNextXp) {
- //TODO : This needs to be changed to a better system as you can lose accuracy of levels with this,
- // will fix it self when it syncs to the api
- ignoreNextXp = false;
- } else {
- currentPet.petExp = newXp;
- currentPet.petLevel.levelPercentage = (float) (currentPet.petExp / currentPet.petLevel.currentLevelRequirement);
- }
- }
- }catch (NumberFormatException ignored){}
- }
- }
- }
- }
- }
-}