From 3d37cee20ddcf92b47144cb1e3ae25785a5e8bc2 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Sun, 20 Nov 2022 13:42:58 +0100 Subject: Added Abiphone contact requirements and location. (#411) * Added Abiphone contact requirements and location. * Using more repo data and less item lore data * F3+H support * merge problems Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- Update Notes/2.1.1.md | 1 + .../notenoughupdates/NotEnoughUpdates.java | 2 + .../miscfeatures/AbiphoneContactHelper.java | 165 +++++++++++++++++++++ .../notenoughupdates/miscfeatures/Navigation.java | 4 +- .../notenoughupdates/miscgui/GuiNavigation.java | 4 + .../options/seperateSections/TooltipTweaks.java | 16 ++ .../moulberry/notenoughupdates/util/Constants.java | 2 + 7 files changed, 193 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AbiphoneContactHelper.java diff --git a/Update Notes/2.1.1.md b/Update Notes/2.1.1.md index 06a64ca0..efd067bd 100644 --- a/Update Notes/2.1.1.md +++ b/Update Notes/2.1.1.md @@ -30,6 +30,7 @@ - Added fairy soul waypoint distance - Vixid - Fixed buggy cape on player model in /pv - Vixid - Added abiphone favourites - hannibal2 + - Added Abiphone contact requirements and location - hannibal2 - Fixed rare crash in AH/BZ Graph - DeDiamondPro - Added the extra MP that abicases give to pv - nopo - Fixed presets not having load button when from discord - nopo diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java index 14ee656a..37b493e2 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java @@ -36,6 +36,7 @@ import io.github.moulberry.notenoughupdates.listener.NEUEventListener; import io.github.moulberry.notenoughupdates.listener.OldAnimationChecker; import io.github.moulberry.notenoughupdates.listener.RenderListener; import io.github.moulberry.notenoughupdates.listener.WorldListener; +import io.github.moulberry.notenoughupdates.miscfeatures.AbiphoneContactHelper; import io.github.moulberry.notenoughupdates.miscfeatures.AbiphoneFavourites; import io.github.moulberry.notenoughupdates.miscfeatures.AbiphoneWarning; import io.github.moulberry.notenoughupdates.miscfeatures.AntiCoopAdd; @@ -342,6 +343,7 @@ public class NotEnoughUpdates { MinecraftForge.EVENT_BUS.register(TitleUtil.getInstance()); MinecraftForge.EVENT_BUS.register(EnderNodeHighlighter.getInstance()); MinecraftForge.EVENT_BUS.register(AbiphoneFavourites.getInstance()); + MinecraftForge.EVENT_BUS.register(AbiphoneContactHelper.getInstance()); if (Minecraft.getMinecraft().getResourceManager() instanceof IReloadableResourceManager) { IReloadableResourceManager manager = (IReloadableResourceManager) Minecraft.getMinecraft().getResourceManager(); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AbiphoneContactHelper.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AbiphoneContactHelper.java new file mode 100644 index 00000000..d2a5fc84 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AbiphoneContactHelper.java @@ -0,0 +1,165 @@ +/* + * Copyright (C) 2022 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.miscfeatures; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import io.github.moulberry.notenoughupdates.NotEnoughUpdates; +import io.github.moulberry.notenoughupdates.core.util.StringUtils; +import io.github.moulberry.notenoughupdates.events.SlotClickEvent; +import io.github.moulberry.notenoughupdates.util.Constants; +import io.github.moulberry.notenoughupdates.util.Utils; +import net.minecraft.item.ItemStack; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import org.lwjgl.input.Keyboard; + +import java.util.List; +import java.util.Map; + +public class AbiphoneContactHelper { + + private static final AbiphoneContactHelper INSTANCE = new AbiphoneContactHelper(); + + public static AbiphoneContactHelper getInstance() { + return INSTANCE; + } + + private String selectedWaypointName = ""; + private long lastClick = 0L; + + @SubscribeEvent + public void onItemTooltip(ItemTooltipEvent event) { + if (!NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard()) return; + if (!Utils.getOpenChestName().equals("Contacts Directory")) return; + + List list = event.toolTip; + if (list == null) return; + if (list.isEmpty()) return; + String rawNpcName = event.itemStack.getDisplayName(); + String npcName = StringUtils.cleanColour(rawNpcName); + + JsonObject data = getJsonData(npcName); + if (data == null) return; + + if (NotEnoughUpdates.INSTANCE.config.tooltipTweaks.abiphoneContactRequirements) { + if (data.has("requirement")) { + JsonArray requirements = data.get("requirement").getAsJsonArray(); + if (requirements.size() > 0) { + list.add(" "); + list.add("§e§lRequirements:"); + + for (JsonElement requirementObject : requirements) { + String requirement = requirementObject.getAsString(); + list.add(requirement); + } + } + } + } + + if (NotEnoughUpdates.INSTANCE.config.tooltipTweaks.abiphoneContactMarker) { + if (data.has("x")) { + if (selectedWaypointName.equals(npcName)) { + list.set(0, npcName + " §f- §aMarker set!"); + } + + list.add(" "); + if (selectedWaypointName.equals(npcName)) { + list.add("§eClick to remove the marker!"); + } else { + list.add("§eClick to set a marker!"); + } + list.add("§eShift-Click to teleport to the nearest waypoint!"); + } + } + } + + @SubscribeEvent + public void onStackClick(SlotClickEvent event) { + if (!NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard()) return; + if (!NotEnoughUpdates.INSTANCE.config.tooltipTweaks.abiphoneContactMarker) return; + if (!Utils.getOpenChestName().equals("Contacts Directory")) return; + + ItemStack stack = event.slot.getStack(); + if (stack == null || stack.getDisplayName() == null) return; + + String rawNpcName = stack.getDisplayName(); + String npcName = StringUtils.cleanColour(rawNpcName); + + JsonObject data = getJsonData(npcName); + if (data == null) return; + if (!data.has("x")) return; + + int x = data.get("x").getAsInt(); + int y = data.get("y").getAsInt(); + int z = data.get("z").getAsInt(); + + String rawIslandName = data.get("island").getAsString(); + if (rawIslandName == null) return; + + if (lastClick + 500 > System.currentTimeMillis()) return; + lastClick = System.currentTimeMillis(); + + boolean shiftPressed = Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT); + if (selectedWaypointName.equals(npcName) && !shiftPressed) { + NotEnoughUpdates.INSTANCE.navigation.untrackWaypoint(); + selectedWaypointName = ""; + } else { + trackWaypoint(rawNpcName, x, y, z, rawIslandName); + if (shiftPressed) { + NotEnoughUpdates.INSTANCE.navigation.useWarpCommand(); + } + selectedWaypointName = npcName; + } + Utils.playPressSound(); + } + + private static void trackWaypoint(String rawNpcName, int x, int y, int z, String rawIslandName) { + JsonObject waypoint = new JsonObject(); + waypoint.add("x", new JsonPrimitive(x)); + waypoint.add("y", new JsonPrimitive(y)); + waypoint.add("z", new JsonPrimitive(z)); + waypoint.add("displayname", new JsonPrimitive(rawNpcName)); + waypoint.add("island", new JsonPrimitive(rawIslandName)); + waypoint.add("internalname", new JsonPrimitive("abiphone-contact-" + rawNpcName)); + + NotEnoughUpdates.INSTANCE.navigation.trackWaypoint(waypoint); + } + + private JsonObject getJsonData(String npcName) { + JsonObject abiphone = Constants.ABIPHONE; + if (abiphone == null) return null; + + JsonObject contacts = abiphone.getAsJsonObject(); + for (Map.Entry entry : contacts.entrySet()) { + String repoName = entry.getKey(); + if (repoName.equals(npcName)) { + return entry.getValue().getAsJsonObject(); + } + } + return null; + } + + public void resetMarker() { + selectedWaypointName = ""; + } +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/Navigation.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/Navigation.java index 89e95e25..9bdc4608 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/Navigation.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/Navigation.java @@ -389,8 +389,10 @@ public class Navigation { && NotEnoughUpdates.INSTANCE.config.misc.untrackCloseWaypoints && island.equals(SBInfo.getInstance().mode)) { EntityPlayerSP thePlayer = Minecraft.getMinecraft().thePlayer; - if (thePlayer != null && thePlayer.getDistanceSq(position) < 16) + if (thePlayer != null && thePlayer.getDistanceSq(position) < 16) { untrackWaypoint(); + AbiphoneContactHelper.getInstance().resetMarker(); + } } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiNavigation.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiNavigation.java index dcb1344c..35c80579 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiNavigation.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiNavigation.java @@ -87,6 +87,10 @@ public class GuiNavigation extends GuiScreen { Minecraft.getMinecraft().getTextureManager().bindTexture(BACKGROUND); String name = searchResults.get(i); JsonObject json = NotEnoughUpdates.INSTANCE.navigation.getWaypoints().get(name); + + //to prevent an NPE when trying to render a waypoint from AbiphoneContactExtraInformation + if (json == null) continue; + boolean selected = name.equals(NotEnoughUpdates.INSTANCE.navigation.getInternalname()); int baseX = guiLeft + LIST_START_X; int baseY = guiTop + LIST_START_Y + LIST_OFFSET_Y * i; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java index 1697098e..5c320db1 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java @@ -216,6 +216,22 @@ public class TooltipTweaks { @ConfigAccordionId(id = 1) public boolean rngMeterRunsNeeded = true; + @Expose + @ConfigOption( + name = "Abiphone NPC Requirements", + desc = "Show what the NPC needs in order to add him as contact in the abiphone" + ) + @ConfigEditorBoolean + public boolean abiphoneContactRequirements = true; + + @Expose + @ConfigOption( + name = "Abiphone NPC Location", + desc = "Click on an NPC to set an marker at the location" + ) + @ConfigEditorBoolean + public boolean abiphoneContactMarker = true; + @Expose @ConfigOption( name = "Essence Price In Shop", diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/Constants.java b/src/main/java/io/github/moulberry/notenoughupdates/util/Constants.java index 5a228dc4..e7674aa9 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/Constants.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/Constants.java @@ -76,6 +76,7 @@ public class Constants { public static JsonObject TROPHYFISH; public static JsonObject WEIGHT; public static JsonObject RNGSCORE; + public static JsonObject ABIPHONE; private static final ReentrantLock lock = new ReentrantLock(); @@ -98,6 +99,7 @@ public class Constants { TROPHYFISH = Utils.getConstant("trophyfish", gson); WEIGHT = Utils.getConstant("weight", gson); RNGSCORE = Utils.getConstant("rngscore", gson); + ABIPHONE = Utils.getConstant("abiphone", gson); parseEssenceCosts(); } catch (Exception ex) { -- cgit