diff options
Diffstat (limited to 'src/main/java/io')
25 files changed, 251 insertions, 197 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java index b28aace6..ea92a670 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java @@ -35,10 +35,8 @@ import net.minecraft.nbt.NBTTagString; import net.minecraft.util.ResourceLocation; import org.apache.commons.io.FileUtils; import org.lwjgl.input.Keyboard; -import org.lwjgl.opengl.Display; import javax.net.ssl.HttpsURLConnection; -import javax.swing.*; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -55,6 +53,7 @@ import java.net.URL; import java.net.URLConnection; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Arrays; import java.util.Base64; import java.util.Collections; import java.util.HashMap; @@ -109,10 +108,6 @@ public class NEUManager { private final Map<String, ItemStack> itemstackCache = new HashMap<>(); - private static String GIT_COMMITS_URL; - - // TODO: private final Map<String, NeuItem> - private final Set<NeuRecipe> recipes = new HashSet<>(); private final HashMap<String, Set<NeuRecipe>> recipesMap = new HashMap<>(); private final HashMap<String, Set<NeuRecipe>> usagesMap = new HashMap<>(); @@ -136,8 +131,6 @@ public class NEUManager { this.craftingOverlay = new CraftingOverlay(this); this.katSitterOverlay = new KatSitterOverlay(); - GIT_COMMITS_URL = neu.config.hidden.repoCommitsURL; - gson = new GsonBuilder().setPrettyPrinting().create(); this.repoLocation = new File(configLocation, "repo"); @@ -200,7 +193,7 @@ public class NEUManager { JsonObject currentCommitJSON = getJsonFromFile(new File(configLocation, "currentCommit.json")); latestRepoCommit = null; - try (Reader inReader = new InputStreamReader(new URL(GIT_COMMITS_URL).openStream())) { + try (Reader inReader = new InputStreamReader(new URL(neu.config.apiData.getCommitApiUrl()).openStream())) { JsonObject commits = gson.fromJson(inReader, JsonObject.class); latestRepoCommit = commits.get("sha").getAsString(); } catch (Exception e) { @@ -216,8 +209,6 @@ public class NEUManager { Utils.recursiveDelete(repoLocation); repoLocation.mkdirs(); - String dlUrl = neu.config.hidden.repoURL; - File itemsZip = new File(repoLocation, "neu-items-master.zip"); try { itemsZip.createNewFile(); @@ -225,7 +216,7 @@ public class NEUManager { return false; } - URL url = new URL(dlUrl); + URL url = new URL(neu.config.apiData.getDownloadUrl(latestRepoCommit)); URLConnection urlConnection = url.openConnection(); urlConnection.setConnectTimeout(15000); urlConnection.setReadTimeout(30000); @@ -238,7 +229,6 @@ public class NEUManager { return false; } - unzipIgnoreFirstFolder(itemsZip.getAbsolutePath(), repoLocation.getAbsolutePath()); if (currentCommitJSON == null || !currentCommitJSON.get("sha").getAsString().equals(latestRepoCommit)) { @@ -261,10 +251,8 @@ public class NEUManager { * downloading of new/updated files. This then calls the "loadItem" method for every item in the local repository. */ public void loadItemInformation() { - if (NotEnoughUpdates.INSTANCE.config.hidden.autoupdate) { - fetchRepository().thenAccept(i -> { - reloadRepository(); - }); + if (NotEnoughUpdates.INSTANCE.config.apiData.autoupdate) { + fetchRepository().thenRun(this::reloadRepository); } else { reloadRepository(); } @@ -1485,26 +1473,64 @@ public class NEUManager { } } - public void reloadRepository() { + public CompletableFuture<List<String>> userFacingRepositoryReload() { + String lastCommit = NotEnoughUpdates.INSTANCE.manager.latestRepoCommit; + NotEnoughUpdates.INSTANCE.manager.resetRepo(); + return NotEnoughUpdates.INSTANCE.manager + .fetchRepository() + .thenCompose(ignored -> NotEnoughUpdates.INSTANCE.manager.reloadRepository()) + .<List<String>>thenApply(ignored -> { + String newCommitHash = NotEnoughUpdates.INSTANCE.manager.latestRepoCommit; + String newCommitShortHash = (newCommitHash == null ? "MISSING" : newCommitHash.substring(0, 7)); + return Arrays.asList( + "§aRepository reloaded.", + (lastCommit == null + ? "§eYou downloaded the repository version §b" + newCommitShortHash + "§e." + : "§eYou updated your repository from §b" + lastCommit.substring(0, 7) + "§e to §b" + + newCommitShortHash + "§e." + ) + ); + }) + .exceptionally(ex -> { + ex.printStackTrace(); + return Arrays.asList( + "§cRepository not fully reloaded.", + "§cThere was an error reloading your repository.", + "§cThis might be caused by an outdated version of neu", + "§c(or by not using the dangerous repository if you are using a prerelease of neu).", + "§aYour repository will still work, but is in a suboptimal state.", + "§eJoin §bdiscord.gg/moulberry §efor help." + ); + }); + } + + public CompletableFuture<Void> reloadRepository() { + CompletableFuture<Void> comp = new CompletableFuture<>(); Minecraft.getMinecraft().addScheduledTask(() -> { - File items = new File(repoLocation, "items"); - if (items.exists()) { - recipes.clear(); - recipesMap.clear(); - usagesMap.clear(); - - File[] itemFiles = new File(repoLocation, "items").listFiles(); - if (itemFiles != null) { - for (File f : itemFiles) { - String internalname = f.getName().substring(0, f.getName().length() - 5); - loadItem(internalname); + try { + File items = new File(repoLocation, "items"); + if (items.exists()) { + recipes.clear(); + recipesMap.clear(); + usagesMap.clear(); + + File[] itemFiles = new File(repoLocation, "items").listFiles(); + if (itemFiles != null) { + for (File f : itemFiles) { + String internalname = f.getName().substring(0, f.getName().length() - 5); + loadItem(internalname); + } } } - } - new RepositoryReloadEvent(repoLocation, !hasBeenLoadedBefore).post(); - hasBeenLoadedBefore = true; + new RepositoryReloadEvent(repoLocation, !hasBeenLoadedBefore).post(); + hasBeenLoadedBefore = true; + comp.complete(null); + } catch (Exception e) { + comp.completeExceptionally(e); + } }); + return comp; } public ItemStack createItem(String internalname) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java index d7b6db4b..b8651867 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java @@ -1135,7 +1135,7 @@ public class NEUOverlay extends Gui { } if (internalname.get() != null) { if (itemstack.get() != null) { - if (NotEnoughUpdates.INSTANCE.config.hidden.enableItemEditing && Keyboard.getEventCharacter() == 'k') { + if (NotEnoughUpdates.INSTANCE.config.apiData.repositoryEditing && Keyboard.getEventCharacter() == 'k') { Minecraft.getMinecraft().displayGuiScreen(new NEUItemEditor( internalname.get(), manager.getJsonForItem(itemstack.get()) @@ -1159,7 +1159,7 @@ public class NEUOverlay extends Gui { Minecraft.getMinecraft().thePlayer.inventory.addItemStackToInventory( manager.jsonToStack(item)); } - } else if (NotEnoughUpdates.INSTANCE.config.hidden.enableItemEditing && + } else if (NotEnoughUpdates.INSTANCE.config.apiData.repositoryEditing && Keyboard.getEventCharacter() == 'k') { Minecraft.getMinecraft().displayGuiScreen(new NEUItemEditor(internalname.get(), item)); return true; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java index 77499d59..cac89e77 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java @@ -208,6 +208,11 @@ public class NotEnoughUpdates { if (config == null) { config = new NEUConfig(); saveConfig(); + } else { + if (config.apiKey != null && config.apiKey.apiKey != null) { + config.apiData.apiKey = config.apiKey.apiKey; + config.apiKey = null; + } } MinecraftForge.EVENT_BUS.register(this); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/auction/APIManager.java b/src/main/java/io/github/moulberry/notenoughupdates/auction/APIManager.java index cb2f06d6..80d2bca9 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/auction/APIManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/auction/APIManager.java @@ -183,8 +183,8 @@ public class APIManager { customAH.tick(); long currentTime = System.currentTimeMillis(); if (NotEnoughUpdates.INSTANCE.config.neuAuctionHouse.enableNeuAuctionHouse && - NotEnoughUpdates.INSTANCE.config.apiKey.apiKey != null && - !NotEnoughUpdates.INSTANCE.config.apiKey.apiKey.isEmpty()) { + NotEnoughUpdates.INSTANCE.config.apiData.apiKey != null && + !NotEnoughUpdates.INSTANCE.config.apiData.apiKey.isEmpty()) { if (currentTime - lastAuctionUpdate > 60 * 1000) { lastAuctionUpdate = currentTime; updatePageTick(); @@ -675,7 +675,7 @@ public class APIManager { public void updateBazaar() { manager.hypixelApi.getHypixelApiAsync( - NotEnoughUpdates.INSTANCE.config.apiKey.apiKey, + NotEnoughUpdates.INSTANCE.config.apiData.apiKey, "skyblock/bazaar", new HashMap<>(), (jsonObject) -> { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/Commands.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/Commands.java index 5c2bf5c0..ea401eb7 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/Commands.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/Commands.java @@ -14,9 +14,6 @@ import io.github.moulberry.notenoughupdates.commands.profile.CataCommand; import io.github.moulberry.notenoughupdates.commands.profile.PeekCommand; import io.github.moulberry.notenoughupdates.commands.profile.PvCommand; import io.github.moulberry.notenoughupdates.commands.profile.ViewProfileCommand; -import io.github.moulberry.notenoughupdates.commands.repo.ReloadRepoCommand; -import io.github.moulberry.notenoughupdates.commands.repo.RepoModeCommand; -import io.github.moulberry.notenoughupdates.commands.repo.ResetRepoCommand; import io.github.moulberry.notenoughupdates.miscfeatures.FairySouls; import io.github.moulberry.notenoughupdates.miscgui.GuiEnchantColour; import io.github.moulberry.notenoughupdates.miscgui.GuiInvButtonEditor; @@ -41,11 +38,8 @@ public class Commands { ClientCommandHandler.instance.registerCommand(new DevTestCommand()); ClientCommandHandler.instance.registerCommand(new NullzeeSphereCommand()); ClientCommandHandler.instance.registerCommand(new DiagCommand()); - - // Repo Commands - ClientCommandHandler.instance.registerCommand(new ResetRepoCommand()); - ClientCommandHandler.instance.registerCommand(new RepoModeCommand()); ClientCommandHandler.instance.registerCommand(new ReloadRepoCommand()); + ClientCommandHandler.instance.registerCommand(new ResetRepoCommand()); // Profile Commands ClientCommandHandler.instance.registerCommand(new PeekCommand()); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/repo/ReloadRepoCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/ReloadRepoCommand.java index 7e58088f..40db245a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/repo/ReloadRepoCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/ReloadRepoCommand.java @@ -1,15 +1,10 @@ -package io.github.moulberry.notenoughupdates.commands.repo; +package io.github.moulberry.notenoughupdates.commands.dev; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.commands.ClientCommandBase; -import io.github.moulberry.notenoughupdates.options.NEUConfig; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; - -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; +import net.minecraft.util.ChatComponentText; public class ReloadRepoCommand extends ClientCommandBase { @@ -19,10 +14,7 @@ public class ReloadRepoCommand extends ClientCommandBase { @Override public void processCommand(ICommandSender sender, String[] args) throws CommandException { - if (args.length > 1 && args[0].equals("fetch")) { - NotEnoughUpdates.INSTANCE.manager.fetchRepository(); - } else { - NotEnoughUpdates.INSTANCE.manager.reloadRepository(); - } + NotEnoughUpdates.INSTANCE.manager.reloadRepository(); + sender.addChatMessage(new ChatComponentText("§e[NEU] Reloaded repository.")); } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/repo/ResetRepoCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/ResetRepoCommand.java index b9a0d7cd..9e8363fb 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/repo/ResetRepoCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/ResetRepoCommand.java @@ -1,9 +1,10 @@ -package io.github.moulberry.notenoughupdates.commands.repo; +package io.github.moulberry.notenoughupdates.commands.dev; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.commands.ClientCommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; public class ResetRepoCommand extends ClientCommandBase { @@ -13,6 +14,10 @@ public class ResetRepoCommand extends ClientCommandBase { @Override public void processCommand(ICommandSender sender, String[] args) throws CommandException { - NotEnoughUpdates.INSTANCE.manager.resetRepo(); + NotEnoughUpdates.INSTANCE.manager + .userFacingRepositoryReload() + .thenAccept(strings -> + strings.forEach(line -> + sender.addChatMessage(new ChatComponentText("§e[NEU] " + line)))); } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/StatsCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/StatsCommand.java index 38eafe39..c7b6e887 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/StatsCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/dev/StatsCommand.java @@ -146,7 +146,7 @@ public class StatsCommand extends ClientCommandBase { builder.append("Loaded Mods", String.valueOf(activeModCount)); builder.append("Forge", ForgeVersion.getVersion()); builder.category("Neu Settings"); - builder.append("API Key", NotEnoughUpdates.INSTANCE.config.apiKey.apiKey.isEmpty() ? "FALSE" : "TRUE"); + builder.append("API Key", NotEnoughUpdates.INSTANCE.config.apiData.apiKey.isEmpty() ? "FALSE" : "TRUE"); builder.append("On Skyblock", NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard() ? "TRUE" : "FALSE"); builder.append( "Mod Version", diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/AhCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/AhCommand.java index 0b2c155e..69d114ca 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/AhCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/misc/AhCommand.java @@ -21,8 +21,8 @@ public class AhCommand extends ClientCommandBase { if (!NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard()) { Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "You must be on Skyblock to use this feature.")); - } else if (NotEnoughUpdates.INSTANCE.config.apiKey.apiKey == null || - NotEnoughUpdates.INSTANCE.config.apiKey.apiKey.trim().isEmpty()) { + } else if (NotEnoughUpdates.INSTANCE.config.apiData.apiKey == null || + NotEnoughUpdates.INSTANCE.config.apiData.apiKey.trim().isEmpty()) { Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Can't open NeuAH, apikey is not set. Run /api new and put the result in settings.")); } else { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/ViewProfileCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/ViewProfileCommand.java index 371db394..fe441ad6 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/ViewProfileCommand.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/commands/profile/ViewProfileCommand.java @@ -23,8 +23,8 @@ public class ViewProfileCommand extends ClientCommandBase { "Some parts of the profile viewer do not work with OF Fast Render. Go to ESC > Options > Video Settings > Performance > Fast Render to disable it.")); } - if (NotEnoughUpdates.INSTANCE.config.apiKey.apiKey == null || - NotEnoughUpdates.INSTANCE.config.apiKey.apiKey.trim().isEmpty()) { + if (NotEnoughUpdates.INSTANCE.config.apiData.apiKey == null || + NotEnoughUpdates.INSTANCE.config.apiData.apiKey.trim().isEmpty()) { Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Can't view profile, apikey is not set. Run /api new and put the result in settings.")); } else if (args.length == 0) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/commands/repo/RepoModeCommand.java b/src/main/java/io/github/moulberry/notenoughupdates/commands/repo/RepoModeCommand.java deleted file mode 100644 index 7e5312fb..00000000 --- a/src/main/java/io/github/moulberry/notenoughupdates/commands/repo/RepoModeCommand.java +++ /dev/null @@ -1,60 +0,0 @@ -package io.github.moulberry.notenoughupdates.commands.repo; - -import io.github.moulberry.notenoughupdates.NotEnoughUpdates; -import io.github.moulberry.notenoughupdates.commands.ClientCommandBase; -import net.minecraft.client.Minecraft; -import net.minecraft.command.CommandException; -import net.minecraft.command.ICommandSender; -import net.minecraft.event.ClickEvent; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.ChatStyle; - -public class RepoModeCommand extends ClientCommandBase { - - public RepoModeCommand() { - super("neurepomode"); - } - - @Override - public void processCommand(ICommandSender sender, String[] args) throws CommandException { - if (args.length == 1 && args[0].equalsIgnoreCase("toggle")) { - NotEnoughUpdates.INSTANCE.config.hidden.dev = !NotEnoughUpdates.INSTANCE.config.hidden.dev; - NotEnoughUpdates.INSTANCE.config.hidden.enableItemEditing = - !NotEnoughUpdates.INSTANCE.config.hidden.enableItemEditing; - Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("\u00a75Toggled NEU repo dev mode.")); - } else if (args.length >= 2 && args[0].equalsIgnoreCase("setrepourl")) { - String githubUser = "Moulberry"; - String githubRepo = "NotEnoughUpdates-REPO"; - String githubBranch = "master"; - if (!args[1].equalsIgnoreCase("reset")) { - githubUser = args[1]; - if (args.length >= 3) { - githubRepo = args[2]; - } - if (args.length >= 4) { - githubBranch = args[3]; - } - } - NotEnoughUpdates.INSTANCE.config.hidden.repoURL = - "https://github.com/" + githubUser + "/" + githubRepo + "/archive/" + githubBranch + ".zip"; - NotEnoughUpdates.INSTANCE.config.hidden.repoCommitsURL = - "https://api.github.com/repos/" + githubUser + "/" + githubRepo + "/commits/" + githubBranch; - Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText( - "\u00a75Set NEU repo URL to " + NotEnoughUpdates.INSTANCE.config.hidden.repoURL + - "\n\u00a75Set NEU repo commits URL to " + NotEnoughUpdates.INSTANCE.config.hidden.repoCommitsURL)); - Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("\u00a75Run <") - .appendSibling(new ChatComponentText("/neureloadrepo fetch").setChatStyle(new ChatStyle().setChatClickEvent(new ClickEvent( - ClickEvent.Action.SUGGEST_COMMAND, "/neureloadrepo fetch")))) - .appendSibling(new ChatComponentText("\u00a75> to redownload your repo."))); - - } else if (args.length == 1 && args[0].equalsIgnoreCase("autoupdate")) { - NotEnoughUpdates.INSTANCE.config.hidden.autoupdate = !NotEnoughUpdates.INSTANCE.config.hidden.autoupdate; - Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("\u00a75Toggled repo auto-updating" + (NotEnoughUpdates.INSTANCE.config.hidden.autoupdate ? "on" : "off"))); - } else { - Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("\u00a7cUsage:" + - "\n\u00a75/neurepomode <toggle> Toggles on/off dev mode and item editing." + - "\n\u00a75/neurepomode <setRepoURL> <githubuser> [reponame] [branch] Sets the repo URL for downloading from." + - "\n\u00a75/neurepomode <autoupdate> Toggles on/off auto-updating the repo")); - } - } -} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/listener/ChatListener.java b/src/main/java/io/github/moulberry/notenoughupdates/listener/ChatListener.java index 6a5164a2..e4f0b3da 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/listener/ChatListener.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/listener/ChatListener.java @@ -145,7 +145,7 @@ public class ChatListener { .substring("Your profile was changed to: ".length()) .split(" ")[0].trim()); } else if (unformatted.startsWith("Your new API key is ")) { - NotEnoughUpdates.INSTANCE.config.apiKey.apiKey = unformatted.substring("Your new API key is ".length()).substring( + NotEnoughUpdates.INSTANCE.config.apiData.apiKey = unformatted.substring("Your new API key is ".length()).substring( 0, 36 ); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/listener/RenderListener.java b/src/main/java/io/github/moulberry/notenoughupdates/listener/RenderListener.java index 4823f5c5..fcba864c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/listener/RenderListener.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/listener/RenderListener.java @@ -1390,7 +1390,7 @@ public class RenderListener { event.setCanceled(true); } } - if (NotEnoughUpdates.INSTANCE.config.hidden.dev && NotEnoughUpdates.INSTANCE.config.hidden.enableItemEditing && + if (NotEnoughUpdates.INSTANCE.config.apiData.repositoryEditing && Minecraft.getMinecraft().theWorld != null && Keyboard.getEventKey() == Keyboard.KEY_N && Keyboard.getEventKeyState()) { GuiScreen gui = Minecraft.getMinecraft().currentScreen; @@ -1447,7 +1447,7 @@ public class RenderListener { System.out.println(essenceJson); } } - if (NotEnoughUpdates.INSTANCE.config.hidden.dev && NotEnoughUpdates.INSTANCE.config.hidden.enableItemEditing && + if (NotEnoughUpdates.INSTANCE.config.apiData.repositoryEditing && Minecraft.getMinecraft().theWorld != null && Keyboard.getEventKey() == Keyboard.KEY_O && Keyboard.getEventKeyState()) { GuiScreen gui = Minecraft.getMinecraft().currentScreen; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EntityViewer.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EntityViewer.java index 130f6ee7..78d035ac 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EntityViewer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/EntityViewer.java @@ -79,6 +79,7 @@ public class EntityViewer extends GuiScreen { put("invisible", new InvisibleModifier()); put("age", new AgeModifier()); put("horse", new HorseModifier()); + put("name", new NameModifier()); }}; public int guiLeft = 0; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/GUIClientPlayer.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/GUIClientPlayer.java index bbff2db1..db20a684 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/GUIClientPlayer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/GUIClientPlayer.java @@ -33,7 +33,18 @@ public class GUIClientPlayer extends AbstractClientPlayer { } }; - @Override + @Override + public String getName() { + return name; + } + + public String name; + + public void setName(String name) { + this.name = name; + } + + @Override protected NetworkPlayerInfo getPlayerInfo() { return playerInfo; } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/NameModifier.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/NameModifier.java new file mode 100644 index 00000000..9978882d --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/entityviewer/NameModifier.java @@ -0,0 +1,15 @@ +package io.github.moulberry.notenoughupdates.miscfeatures.entityviewer; + +import com.google.gson.JsonObject; +import net.minecraft.entity.EntityLivingBase; + +public class NameModifier extends EntityViewerModifier { + @Override + public EntityLivingBase applyModifier(EntityLivingBase base, JsonObject info) { + if (base instanceof GUIClientPlayer) { + ((GUIClientPlayer) base).setName(info.get("name").getAsString()); + } + base.setCustomNameTag(info.get("name").getAsString()); + return base; + } +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java index 5ed990a4..d9cc77e3 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java @@ -17,7 +17,7 @@ import io.github.moulberry.notenoughupdates.options.customtypes.NEUDebugFlag; import io.github.moulberry.notenoughupdates.options.seperateSections.AHGraph; import io.github.moulberry.notenoughupdates.options.seperateSections.AHTweaks; import io.github.moulberry.notenoughupdates.options.seperateSections.AccessoryBag; -import io.github.moulberry.notenoughupdates.options.seperateSections.ApiKey; +import io.github.moulberry.notenoughupdates.options.seperateSections.ApiData; import io.github.moulberry.notenoughupdates.options.seperateSections.Calendar; import io.github.moulberry.notenoughupdates.options.seperateSections.CustomArmour; import io.github.moulberry.notenoughupdates.options.seperateSections.DungeonMapConfig; @@ -46,6 +46,7 @@ import io.github.moulberry.notenoughupdates.options.seperateSections.TradeMenu; import io.github.moulberry.notenoughupdates.overlays.MiningOverlay; import io.github.moulberry.notenoughupdates.overlays.OverlayManager; import io.github.moulberry.notenoughupdates.overlays.TextOverlay; +import io.github.moulberry.notenoughupdates.util.NotificationHandler; import io.github.moulberry.notenoughupdates.util.SBInfo; import net.minecraft.client.Minecraft; import net.minecraftforge.client.ClientCommandHandler; @@ -155,6 +156,29 @@ public class NEUConfig extends Config { case 21: NotEnoughUpdates.INSTANCE.overlay.updateSearch(); return; + case 22: + NotEnoughUpdates.INSTANCE.manager + .userFacingRepositoryReload() + .thenAccept(strings -> + NotificationHandler.displayNotification(strings, true, true)); + Minecraft.getMinecraft().displayGuiScreen(null); + return; + case 23: + NotEnoughUpdates.INSTANCE.config.apiData.repoUser = "NotEnoughUpdates"; + NotEnoughUpdates.INSTANCE.config.apiData.repoName = "NotEnoughUpdates-REPO"; + NotEnoughUpdates.INSTANCE.config.apiData.repoBranch = "master"; + NotEnoughUpdates.INSTANCE.openGui = + new GuiScreenElementWrapper(new NEUConfigEditor(NotEnoughUpdates.INSTANCE.config, "apis")); + return; + case 24: + NotEnoughUpdates.INSTANCE.config.apiData.repoUser = "NotEnoughUpdates"; + NotEnoughUpdates.INSTANCE.config.apiData.repoName = "NotEnoughUpdates-REPO"; + NotEnoughUpdates.INSTANCE.config.apiData.repoBranch = "dangerous"; + NotEnoughUpdates.INSTANCE.openGui = + new GuiScreenElementWrapper(new NEUConfigEditor(NotEnoughUpdates.INSTANCE.config, "apis")); + return; + default: + System.err.printf("Unknown runnableId = %d in category %s%n", runnableId, activeConfigCategory); } } @@ -349,10 +373,19 @@ public class NEUConfig extends Config { @Expose @Category( - name = "Api Key", - desc = "Api Key" + name = "Apis", + desc = "Api Data" ) - public ApiKey apiKey = new ApiKey(); + public ApiData apiData = new ApiData(); + + @Expose + public LegacyApiKey apiKey = null; + + public static class LegacyApiKey { + // Blame Ironmoon for this (still better than my idea tho) + @Expose + public String apiKey = null; + } @Expose public Hidden hidden = new Hidden(); @@ -371,12 +404,8 @@ public class NEUConfig extends Config { @Expose public EnumSet<NEUDebugFlag> debugFlags = EnumSet.noneOf(NEUDebugFlag.class); @Expose - public boolean enableItemEditing = false; - @Expose public boolean cacheRenderedItempane = true; @Expose - public boolean autoupdate = true; - @Expose public String overlaySearchBar = ""; @Expose public String overlayQuickCommand = ""; @@ -402,10 +431,6 @@ public class NEUConfig extends Config { public ArrayList<String> quickCommands = createDefaultQuickCommands(); @Expose public ArrayList<String> enchantColours = createDefaultEnchantColours(); - @Expose - public String repoURL = "https://github.com/Moulberry/NotEnoughUpdates-REPO/archive/master.zip"; - @Expose - public String repoCommitsURL = "https://api.github.com/repos/Moulberry/NotEnoughUpdates-REPO/commits/master"; @Expose public boolean firstTimeSearchFocus = true; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ApiData.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ApiData.java new file mode 100644 index 00000000..6121e189 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ApiData.java @@ -0,0 +1,87 @@ +package io.github.moulberry.notenoughupdates.options.seperateSections; + +import com.google.gson.annotations.Expose; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigAccordionId; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorAccordion; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorButton; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorText; +import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; + +public class ApiData { + @Expose + @ConfigOption( + name = "Api Key", + desc = "Hypixel api key\nYou can run §a/api new§r to autofill this value." + ) + @ConfigEditorText + public String apiKey = ""; + + @ConfigEditorAccordion(id = 0) + @ConfigOption(name = "Repository", desc = "") + public boolean repository = false; + + @Expose + @ConfigOption(name = "Automatically Update Repository", desc = "Update the repository on every startup") + @ConfigEditorBoolean() + @ConfigAccordionId(id = 0) + public boolean autoupdate = true; + + @ConfigAccordionId(id = 0) + @ConfigOption(name = "Update Repository now", desc = "Refresh your repository") + @ConfigEditorButton(runnableId = 22, buttonText = "Update") + public int updateRepositoryButton = 0; + + @ConfigEditorAccordion(id = 1) + @ConfigAccordionId(id = 0) + @ConfigOption(name = "Repository Location", desc = "") + public boolean repositoryLocation = false; + + @ConfigAccordionId(id = 1) + @ConfigOption(name = "Use default repository", desc = "The latest, most up to date item list for the official NEU releases.") + @ConfigEditorButton(runnableId = 23, buttonText = "Reset") + public int setRepositoryToDefaultButton = 0; + + @ConfigAccordionId(id = 1) + @ConfigOption(name = "Use dangerous Repository", desc = "The latest, most up to date item list for the NEU prereleases.\n§4Use §lonly§r§4 with the prereleases.") + @ConfigEditorButton(runnableId = 24, buttonText = "Use") + public int setRepositoryToDangerousButton = 0; + + @Expose + @ConfigAccordionId(id = 1) + @ConfigOption(name = "Repository User", desc = "Repository User") + @ConfigEditorText + public String repoUser = "NotEnoughUpdates"; + + @Expose + @ConfigAccordionId(id = 1) + @ConfigOption(name = "Repository Name", desc = "Repository Name") + @ConfigEditorText + public String repoName = "NotEnoughUpdates-REPO"; + + @Expose + @ConfigAccordionId(id = 1) + @ConfigOption(name = "Repository Branch", desc = "Repository Branch") + @ConfigEditorText + public String repoBranch = "master"; + + @Expose + @ConfigAccordionId(id = 0) + @ConfigOption(name = "Edit Mode", desc = "Enables you to edit items in the item list.\n§4Recommended for repository maintainers only.\n§4§lRemember: §rTurn off auto update as well") + @ConfigEditorBoolean + public boolean repositoryEditing = false; + + @Expose + @ConfigOption(name = "Lowestbin API", desc = "§4Do §lNOT §r§4change this, unless you know exactly what you are doing\n§fDefault: §amoulberry.codes") + @ConfigEditorText + public String moulberryCodesApi = "moulberry.codes"; + + public String getCommitApiUrl() { + return String.format("https://api.github.com/repos/%s/%s/commits/%s", repoUser, repoName, repoBranch); + } + + public String getDownloadUrl(String commitId) { + return String.format("https://github.com/%s/%s/archive/%s.zip", repoUser, repoName, commitId); + } + +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ApiKey.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ApiKey.java deleted file mode 100644 index 5567365c..00000000 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ApiKey.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.github.moulberry.notenoughupdates.options.seperateSections; - -import com.google.gson.annotations.Expose; -import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorText; -import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption; - -public class ApiKey { - @Expose - @ConfigOption( - name = "Api Key", - desc = "Hypixel api key" - ) - @ConfigEditorText - public String apiKey = ""; -} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/BingoPage.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/BingoPage.java index 444e7087..0d03f297 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/BingoPage.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/BingoPage.java @@ -280,7 +280,7 @@ public class BingoPage { HashMap<String, String> args = new HashMap<>(); NotEnoughUpdates.INSTANCE.manager.hypixelApi.getHypixelApiAsync( - NotEnoughUpdates.INSTANCE.config.apiKey.apiKey, + NotEnoughUpdates.INSTANCE.config.apiData.apiKey, "resources/skyblock/bingo", args, jsonObject -> { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java index 39c12e54..95acb7d8 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java @@ -312,7 +312,7 @@ public class ProfileViewer { HashMap<String, String> args = new HashMap<>(); NotEnoughUpdates.INSTANCE.manager.hypixelApi.getHypixelApiAsync( - NotEnoughUpdates.INSTANCE.config.apiKey.apiKey, + NotEnoughUpdates.INSTANCE.config.apiData.apiKey, "resources/skyblock/collections", args, jsonObject -> { @@ -331,7 +331,7 @@ public class ProfileViewer { String nameF = name.toLowerCase(); HashMap<String, String> args = new HashMap<>(); args.put("name", "" + nameF); - manager.hypixelApi.getHypixelApiAsync(NotEnoughUpdates.INSTANCE.config.apiKey.apiKey, "player", + manager.hypixelApi.getHypixelApiAsync(NotEnoughUpdates.INSTANCE.config.apiData.apiKey, "player", args, jsonObject -> { if (jsonObject != null && jsonObject.has("success") && jsonObject.get("success").getAsBoolean() && jsonObject.get("player").isJsonObject()) { @@ -474,7 +474,7 @@ public class ProfileViewer { HashMap<String, String> args = new HashMap<>(); args.put("uuid", "" + uuid); - manager.hypixelApi.getHypixelApiAsync(NotEnoughUpdates.INSTANCE.config.apiKey.apiKey, "status", + manager.hypixelApi.getHypixelApiAsync(NotEnoughUpdates.INSTANCE.config.apiData.apiKey, "status", args, jsonObject -> { if (jsonObject == null) return; @@ -500,7 +500,7 @@ public class ProfileViewer { HashMap<String, String> args = new HashMap<>(); args.put("uuid", "" + uuid); NotEnoughUpdates.INSTANCE.manager.hypixelApi.getHypixelApiAsync( - NotEnoughUpdates.INSTANCE.config.apiKey.apiKey, + NotEnoughUpdates.INSTANCE.config.apiData.apiKey, "skyblock/bingo", args, jsonObject -> { @@ -657,7 +657,7 @@ public class ProfileViewer { HashMap<String, String> args = new HashMap<>(); args.put("uuid", "" + uuid); - manager.hypixelApi.getHypixelApiAsync(NotEnoughUpdates.INSTANCE.config.apiKey.apiKey, "skyblock/profiles", + manager.hypixelApi.getHypixelApiAsync(NotEnoughUpdates.INSTANCE.config.apiData.apiKey, "skyblock/profiles", args, jsonObject -> { updatingPlayerInfoState.set(false); @@ -720,7 +720,7 @@ public class ProfileViewer { HashMap<String, String> args = new HashMap<>(); args.put("player", "" + uuid); - manager.hypixelApi.getHypixelApiAsync(NotEnoughUpdates.INSTANCE.config.apiKey.apiKey, "guild", + manager.hypixelApi.getHypixelApiAsync(NotEnoughUpdates.INSTANCE.config.apiData.apiKey, "guild", args, jsonObject -> { updatingGuildInfoState.set(false); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeGenerator.java b/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeGenerator.java index b7d4a321..3e3b06b1 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeGenerator.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/recipes/RecipeGenerator.java @@ -48,7 +48,7 @@ public class RecipeGenerator { @SubscribeEvent public void onTick(TickEvent event) { - if (!neu.config.hidden.enableItemEditing) return; + if (!neu.config.apiData.repositoryEditing) return; GuiScreen currentScreen = Minecraft.getMinecraft().currentScreen; if (currentScreen == null) return; if (!(currentScreen instanceof GuiChest)) return; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/HotmInformation.java b/src/main/java/io/github/moulberry/notenoughupdates/util/HotmInformation.java index 7258fe9f..800c025a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/HotmInformation.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/HotmInformation.java @@ -141,7 +141,7 @@ public class HotmInformation { public synchronized void requestUpdate(boolean force) { if (updateTask.isDone() || force) { updateTask = neu.manager.hypixelApi.getHypixelApiAsync( - neu.config.apiKey.apiKey, + neu.config.apiData.apiKey, "skyblock/profiles", new HashMap<String, String>() {{ put("uuid", Minecraft.getMinecraft().thePlayer.getUniqueID().toString().replace("-", "")); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/HypixelApi.java b/src/main/java/io/github/moulberry/notenoughupdates/util/HypixelApi.java index 37de9ed8..937a0ab8 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/HypixelApi.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/HypixelApi.java @@ -21,14 +21,8 @@ import java.util.function.Consumer; import java.util.zip.GZIPInputStream; public class HypixelApi { - private static final int FAILS_BEFORE_SWITCH = 3; private final Gson gson = new Gson(); private final ExecutorService es = Executors.newFixedThreadPool(3); - private final String[] myApiURLs = {"https://moulberry.codes/"}; - //, "http://moulberry.codes/", "http://51.79.51.21/"};//, "http://51.75.78.252/" }; - private final Integer[] myApiSuccesses = {0, 0, 0, 0}; - private int currentUrl = 0; - private long lastPrimaryUrl = 0; public CompletableFuture<JsonObject> getHypixelApiAsync(String apiKey, String method, HashMap<String, String> args) { return getApiAsync(generateApiUrl(apiKey, method, args)); @@ -55,29 +49,7 @@ public class HypixelApi { } private String getMyApiURL() { - if (currentUrl == 0) { - lastPrimaryUrl = System.currentTimeMillis(); - } else if (System.currentTimeMillis() - lastPrimaryUrl > 1000 * 60 * 30) { //Try switch back to main url after 30m - currentUrl = 0; - } - - myApiSuccesses[currentUrl] = Math.min(FAILS_BEFORE_SWITCH, myApiSuccesses[currentUrl] + 1); - return myApiURLs[currentUrl]; - } - - private void myApiError(int index) { - myApiSuccesses[index] = myApiSuccesses[index] - 2; - - if (myApiSuccesses[index] < 0) { - myApiSuccesses[index] = 0; - - if (index == currentUrl) { - currentUrl++; - if (currentUrl >= myApiURLs.length) { - currentUrl = 0; - } - } - } + return String.format("https://%s/", NotEnoughUpdates.INSTANCE.config.apiData.moulberryCodesApi); } public CompletableFuture<JsonObject> getApiAsync(String urlS) { @@ -104,14 +76,12 @@ public class HypixelApi { public void getMyApiAsync(String urlS, Consumer<JsonObject> consumer, Runnable error) { es.submit(() -> { - int current = currentUrl; try { consumer.accept(getApiSync(getMyApiURL() + urlS)); } catch (Exception e) { if (NotEnoughUpdates.INSTANCE.config.hidden.dev) { e.printStackTrace(); } - myApiError(current); error.run(); } }); @@ -119,11 +89,9 @@ public class HypixelApi { public void getMyApiGZIPAsync(String urlS, Consumer<JsonObject> consumer, Runnable error) { es.submit(() -> { - int current = currentUrl; try { consumer.accept(getApiGZIPSync(getMyApiURL() + urlS)); } catch (Exception e) { - myApiError(current); error.run(); } }); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/JsonUtils.java b/src/main/java/io/github/moulberry/notenoughupdates/util/JsonUtils.java index b4193c88..5ee1dda1 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/JsonUtils.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/JsonUtils.java @@ -30,7 +30,7 @@ public class JsonUtils { String name, Function<? super JsonElement, ? extends T> mapper ) { - if (!rootObject.has(name)) { + if (rootObject == null || !rootObject.has(name)) { return Collections.emptyList(); } JsonElement jsonElement = rootObject.get(name); |