From 4369156ef9e0a96e0f789b27fa88fff9b2f0f2c7 Mon Sep 17 00:00:00 2001 From: Moulberry Date: Fri, 17 Jul 2020 08:26:08 +0800 Subject: Attribution-NonCommercial 3.0 --- LICENSE | 81 ++++++++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 60 insertions(+), 21 deletions(-) diff --git a/LICENSE b/LICENSE index c7f0c337..7ff2f90d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,60 @@ -MIT License - -Copyright (c) 2020 Moulberry - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. + "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. + "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. + "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. + "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. + "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. + "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. + "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; + to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; + to Distribute and Publicly Perform the Work including as incorporated in Collections; and, + to Distribute and Publicly Perform Adaptations. + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d). + +4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested. + You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. + If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + + For the avoidance of doubt: + Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; + Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, + Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c). + Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. -- cgit From 8499a98beeb556c16987fc375dbd7d05d6c27ab4 Mon Sep 17 00:00:00 2001 From: Moulberry Date: Mon, 20 Jul 2020 05:12:05 +1000 Subject: some profile viewer stuffs --- .../moulberry/notenoughupdates/NEUManager.java | 33 +- .../moulberry/notenoughupdates/NEUOverlay.java | 3 + .../notenoughupdates/NotEnoughUpdates.java | 216 ++++++--- .../notenoughupdates/auction/APIManager.java | 16 +- .../profileviewer/GuiProfileViewer.java | 315 ++++++++++++ .../profileviewer/PlayerStats.java | 537 +++++++++++++++++++++ .../profileviewer/ProfileViewer.java | 370 ++++++++++++++ .../questing/requirements/RequirementApi.java | 1 - .../notenoughupdates/util/HypixelApi.java | 6 +- .../moulberry/notenoughupdates/util/Utils.java | 48 ++ .../resources/assets/notenoughupdates/pv_basic.png | Bin 0 -> 10496 bytes 11 files changed, 1455 insertions(+), 90 deletions(-) create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java create mode 100644 src/main/resources/assets/notenoughupdates/pv_basic.png diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java index 8d625c14..edf1d31c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java @@ -112,10 +112,12 @@ public class NEUManager { public void setCurrentProfile(String currentProfile) { this.currentProfile = currentProfile; + this.auctionManager.incPlayerInfoVersion(); } public void setCurrentProfileBackup(String currentProfile) { this.currentProfileBackup = currentProfile; + this.auctionManager.incPlayerInfoVersion(); } public String getCurrentProfile() { @@ -227,7 +229,7 @@ public class NEUManager { public void updatePrices() { if(System.currentTimeMillis() - auctionLastUpdate > 1000*60*120) { //2 hours craftCost.clear(); - System.out.println("UPDATING PRICE INFORMATION"); + System.out.println("[NEU] UPDATING PRICE INFORMATION"); auctionLastUpdate = System.currentTimeMillis(); try(Reader inReader = new InputStreamReader(new GZIPInputStream(new URL(AUCTIONS_PRICE_URL).openStream()))) { auctionPricesJson = gson.fromJson(inReader, JsonObject.class); @@ -349,7 +351,7 @@ public class NEUManager { BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8)); JsonObject json = gson.fromJson(reader, JsonObject.class); return json; - } catch(Exception e) { return null; } + } catch(Exception e) { e.printStackTrace(); return null; } } /** @@ -389,7 +391,6 @@ public class NEUManager { if (Display.isActive()) dialog.toFront(); if (changedFiles != null && changedFiles.size() <= 20) { - String startMessage = "NotEnoughUpdates: Syncing with remote repository ("; int downloaded = 0; @@ -403,6 +404,7 @@ public class NEUManager { File item = new File(repoLocation, name); try { + item.getParentFile().mkdirs(); item.createNewFile(); } catch (IOException e) { } @@ -810,6 +812,7 @@ public class NEUManager { public JsonObject getJsonFromItemBytes(String item_bytes) { try { NBTTagCompound tag = CompressedStreamTools.readCompressed(new ByteArrayInputStream(Base64.getDecoder().decode(item_bytes))); + //System.out.println(tag.toString()); return getJsonFromNBT(tag); } catch(IOException e) { return null; @@ -873,7 +876,12 @@ public class NEUManager { } public JsonObject getJsonFromNBT(NBTTagCompound tag) { - tag = tag.getTagList("i", 10).getCompoundTagAt(0); + return getJsonFromNBTEntry(tag.getTagList("i", 10).getCompoundTagAt(0)); + } + + public JsonObject getJsonFromNBTEntry(NBTTagCompound tag) { + if(tag.getKeySet().size() == 0) return null; + int id = tag.getShort("id"); int damage = tag.getShort("Damage"); int count = tag.getShort("Count"); @@ -882,6 +890,7 @@ public class NEUManager { if(id == 141) id = 391; //for some reason hypixel thinks carrots have id 141 String internalname = getInternalnameFromNBT(tag); + if(internalname == null) return null; NBTTagCompound display = tag.getCompoundTag("display"); String[] lore = getLoreFromNBT(tag); @@ -896,15 +905,25 @@ public class NEUManager { String clickcommand = ""; - //public JsonObject createItemJson(String internalname, String itemid, String displayname, String[] lore, - // String crafttext, String infoType, String[] info, - // String clickcommand, int damage, NBTTagCompound nbttag) { JsonObject item = new JsonObject(); item.addProperty("internalname", internalname); item.addProperty("itemid", itemid); item.addProperty("displayname", displayname); + if(tag != null && tag.hasKey("ExtraAttributes", 10)) { + NBTTagCompound ea = tag.getCompoundTag("ExtraAttributes"); + + if (ea.hasKey("new_year_cake_bag_data", 7)) { + byte[] bytes = ea.getByteArray("new_year_cake_bag_data"); + JsonArray bytesArr = new JsonArray(); + for(byte b : bytes) { + bytesArr.add(new JsonPrimitive(b)); + } + item.add("item_contents", bytesArr); + } + } + if(lore != null && lore.length > 0) { JsonArray jsonLore = new JsonArray(); for (String line : lore) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java index 23def271..a33c13b3 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java @@ -1097,6 +1097,9 @@ public class NEUOverlay extends Gui { case "ducttapedigger": searchedItems.add(CustomItems.DUCTTAPE); break; + case "thirtyvirus": + searchedItems.add(manager.getItemInformation().get("SPIKED_BAIT")); + break; } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java index a589fe2b..a7a30233 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java @@ -11,6 +11,8 @@ import io.github.moulberry.notenoughupdates.commands.SimpleCommand; import io.github.moulberry.notenoughupdates.cosmetics.CapeManager; import io.github.moulberry.notenoughupdates.infopanes.CollectionLogInfoPane; import io.github.moulberry.notenoughupdates.infopanes.CosmeticsInfoPane; +import io.github.moulberry.notenoughupdates.profileviewer.GuiProfileViewer; +import io.github.moulberry.notenoughupdates.profileviewer.ProfileViewer; import io.github.moulberry.notenoughupdates.questing.GuiQuestLine; import io.github.moulberry.notenoughupdates.questing.NEUQuesting; import io.github.moulberry.notenoughupdates.util.Utils; @@ -29,6 +31,7 @@ import net.minecraft.inventory.ContainerChest; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.scoreboard.ScoreObjective; @@ -129,6 +132,37 @@ public class NotEnoughUpdates { } }); + private static ProfileViewer profileViewer; + + SimpleCommand viewProfileCommand = new SimpleCommand("neuprofile", new SimpleCommand.ProcessCommandRunnable() { + public void processCommand(ICommandSender sender, String[] args) { + if(args.length != 1) { + Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "idiot.")); + } + profileViewer.getProfileByName(args[0], profile -> { + openGui = new GuiProfileViewer(profile); + }); + } + }); + + SimpleCommand linksCommand = new SimpleCommand("neulinks", new SimpleCommand.ProcessCommandRunnable() { + public void processCommand(ICommandSender sender, String[] args) { + File repo = manager.repoLocation; + if(repo.exists()) { + File updateJson = new File(repo, "update.json"); + try { + JsonObject update = manager.getJsonFromFile(updateJson); + + Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("")); + displayLinks(update); + Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("")); + } catch (Exception ignored) { + } + } + } + }); + SimpleCommand overlayPlacementsCommand = new SimpleCommand("neuoverlay", new SimpleCommand.ProcessCommandRunnable() { public void processCommand(ICommandSender sender, String[] args) { openGui = new NEUOverlayPlacements(); @@ -175,6 +209,8 @@ public class NotEnoughUpdates { f.mkdirs(); ClientCommandHandler.instance.registerCommand(collectionLogCommand); ClientCommandHandler.instance.registerCommand(cosmeticsCommand); + ClientCommandHandler.instance.registerCommand(linksCommand); + ClientCommandHandler.instance.registerCommand(viewProfileCommand); ClientCommandHandler.instance.registerCommand(overlayPlacementsCommand); //ClientCommandHandler.instance.registerCommand(questingCommand); ClientCommandHandler.instance.registerCommand(neuAhCommand); @@ -183,6 +219,7 @@ public class NotEnoughUpdates { manager = new NEUManager(this, neuio, f); manager.loadItemInformation(); overlay = new NEUOverlay(manager); + profileViewer = new ProfileViewer(manager); for(KeyBinding kb : manager.keybinds) { ClientRegistry.registerKeyBinding(kb); @@ -203,7 +240,7 @@ public class NotEnoughUpdates { })); //TODO: login code. Ignore this, used for testing. - /*try { + try { Field field = Minecraft.class.getDeclaredField("session"); YggdrasilUserAuthentication auth = (YggdrasilUserAuthentication) new YggdrasilAuthenticationService(Proxy.NO_PROXY, UUID.randomUUID().toString()) @@ -232,7 +269,7 @@ public class NotEnoughUpdates { field.setAccessible(true); field.set(Minecraft.getMinecraft(), session); } catch (NoSuchFieldException | AuthenticationException | IllegalAccessException e) { - }*/ + } } /** @@ -250,6 +287,98 @@ public class NotEnoughUpdates { } } + private void displayLinks(JsonObject update) { + String discord_link = update.get("discord_link").getAsString(); + String youtube_link = update.get("youtube_link").getAsString(); + String update_link = update.get("update_link").getAsString(); + String github_link = update.get("github_link").getAsString(); + String other_text = update.get("other_text").getAsString(); + String other_link = update.get("other_link").getAsString(); + + ChatComponentText other = null; + if(other_text.length() > 0) { + other = new ChatComponentText(EnumChatFormatting.GRAY+"["+EnumChatFormatting.BLUE+other_text+EnumChatFormatting.GRAY+"]"); + other.setChatStyle(Utils.createClickStyle(ClickEvent.Action.OPEN_URL, other_link)); + } + ChatComponentText links = new ChatComponentText(""); + ChatComponentText separator = new ChatComponentText( + EnumChatFormatting.GRAY+EnumChatFormatting.BOLD.toString()+EnumChatFormatting.STRIKETHROUGH+(other==null?"---":"--")); + ChatComponentText discord = new ChatComponentText(EnumChatFormatting.GRAY+"["+EnumChatFormatting.BLUE+"Discord"+EnumChatFormatting.GRAY+"]"); + discord.setChatStyle(Utils.createClickStyle(ClickEvent.Action.OPEN_URL, discord_link)); + ChatComponentText youtube = new ChatComponentText(EnumChatFormatting.GRAY+"["+EnumChatFormatting.RED+"YouTube"+EnumChatFormatting.GRAY+"]"); + youtube.setChatStyle(Utils.createClickStyle(ClickEvent.Action.OPEN_URL, youtube_link)); + ChatComponentText release = new ChatComponentText(EnumChatFormatting.GRAY+"["+EnumChatFormatting.GREEN+"Release"+EnumChatFormatting.GRAY+"]"); + release.setChatStyle(Utils.createClickStyle(ClickEvent.Action.OPEN_URL, update_link)); + ChatComponentText github = new ChatComponentText(EnumChatFormatting.GRAY+"["+EnumChatFormatting.DARK_PURPLE+"GitHub"+EnumChatFormatting.GRAY+"]"); + github.setChatStyle(Utils.createClickStyle(ClickEvent.Action.OPEN_URL, github_link)); + + + links.appendSibling(separator); + links.appendSibling(discord); + links.appendSibling(separator); + links.appendSibling(youtube); + links.appendSibling(separator); + links.appendSibling(release); + links.appendSibling(separator); + links.appendSibling(github); + links.appendSibling(separator); + if(other != null) { + links.appendSibling(other); + links.appendSibling(separator); + } + + Minecraft.getMinecraft().thePlayer.addChatMessage(links); + } + + private boolean displayUpdateMessageIfOutOfDate() { + File repo = manager.repoLocation; + if(repo.exists()) { + File updateJson = new File(repo, "update.json"); + try { + JsonObject o = manager.getJsonFromFile(updateJson); + + String version = o.get("version").getAsString(); + + if(!VERSION.equalsIgnoreCase(version)) { + String update_msg = o.get("update_msg").getAsString(); + String discord_link = o.get("discord_link").getAsString(); + String youtube_link = o.get("youtube_link").getAsString(); + String update_link = o.get("update_link").getAsString(); + String github_link = o.get("github_link").getAsString(); + String other_text = o.get("other_text").getAsString(); + String other_link = o.get("other_link").getAsString(); + + int first_len = -1; + for(String line : update_msg.split("\n")) { + FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; + int len = fr.getStringWidth(line); + if(first_len == -1) { + first_len = len; + } + int missing_len = first_len-len; + if(missing_len > 0) { + StringBuilder sb = new StringBuilder(line); + for(int i=0; i 0) { - StringBuilder sb = new StringBuilder(line); - for(int i=0; i 0) { - other = new ChatComponentText(EnumChatFormatting.GRAY+"["+EnumChatFormatting.BLUE+other_text+EnumChatFormatting.GRAY+"]"); - other.setChatStyle(Utils.createClickStyle(ClickEvent.Action.OPEN_URL, other_link)); - } - ChatComponentText links = new ChatComponentText(""); - ChatComponentText separator = new ChatComponentText( - EnumChatFormatting.GRAY+EnumChatFormatting.BOLD.toString()+EnumChatFormatting.STRIKETHROUGH+(other==null?"---":"--")); - ChatComponentText discord = new ChatComponentText(EnumChatFormatting.GRAY+"["+EnumChatFormatting.BLUE+"Discord"+EnumChatFormatting.GRAY+"]"); - discord.setChatStyle(Utils.createClickStyle(ClickEvent.Action.OPEN_URL, discord_link)); - ChatComponentText youtube = new ChatComponentText(EnumChatFormatting.GRAY+"["+EnumChatFormatting.RED+"YouTube"+EnumChatFormatting.GRAY+"]"); - youtube.setChatStyle(Utils.createClickStyle(ClickEvent.Action.OPEN_URL, youtube_link)); - ChatComponentText release = new ChatComponentText(EnumChatFormatting.GRAY+"["+EnumChatFormatting.GREEN+"Release"+EnumChatFormatting.GRAY+"]"); - release.setChatStyle(Utils.createClickStyle(ClickEvent.Action.OPEN_URL, update_link)); - ChatComponentText github = new ChatComponentText(EnumChatFormatting.GRAY+"["+EnumChatFormatting.DARK_PURPLE+"GitHub"+EnumChatFormatting.GRAY+"]"); - github.setChatStyle(Utils.createClickStyle(ClickEvent.Action.OPEN_URL, github_link)); - - - links.appendSibling(separator); - links.appendSibling(discord); - links.appendSibling(separator); - links.appendSibling(youtube); - links.appendSibling(separator); - links.appendSibling(release); - links.appendSibling(separator); - links.appendSibling(github); - links.appendSibling(separator); - if(other != null) { - links.appendSibling(other); - links.appendSibling(separator); - } - - Minecraft.getMinecraft().thePlayer.addChatMessage(links); - Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("")); - - } - - joinedSB = true; - } catch(Exception ignored) {} + if(displayUpdateMessageIfOutOfDate()) { + joinedSB = false; } } //NEUQuesting.getInstance().tick(); @@ -387,7 +444,6 @@ public class NotEnoughUpdates { } } } else { - for(ItemStack stack : Minecraft.getMinecraft().thePlayer.inventory.mainInventory) { processUniqueStack(stack, newItem); } @@ -407,6 +463,7 @@ public class NotEnoughUpdates { if(newItemAddMap.containsKey(internalname)) { if(System.currentTimeMillis() - newItemAddMap.get(internalname) > 1000) { log.add(internalname); + try { manager.saveConfig(); } catch(IOException ignored) {} } } else { newItemAddMap.put(internalname, System.currentTimeMillis()); @@ -732,7 +789,10 @@ public class NotEnoughUpdates { ItemStack item = lower.getStackInSlot(11+i); String internal = manager.getInternalNameForItem(item); if(internal != null) { - int worth = manager.auctionManager.getLowestBin(internal); + float worth = manager.auctionManager.getLowestBin(internal); + + if(worth == -1) worth = manager.getCraftCost(internal).craftCost; + if(worth > 0) { totalValue += worth; } else { 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 20ac86ba..65f6545e 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/auction/APIManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/auction/APIManager.java @@ -19,6 +19,7 @@ import net.minecraft.util.EnumChatFormatting; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; public class APIManager { @@ -60,6 +61,8 @@ public class APIManager { customAH = new CustomAH(manager); } + private AtomicInteger playerInfoVersion = new AtomicInteger(0); + public JsonObject getPlayerInformation() { if(playerInformation == null) return null; for(int i=0; i getAuctionItems() { return auctionMap; } @@ -158,6 +169,7 @@ public class APIManager { manager.hypixelApi.getHypixelApiAsync(manager.config.apiKey.value, "skyblock/profiles", args, jsonObject -> { if(jsonObject.has("success") && jsonObject.get("success").getAsBoolean()) { + incPlayerInfoVersion(); playerInformation = jsonObject.get("profiles").getAsJsonArray(); if(playerInformation == null) return; String backup = null; @@ -332,6 +344,8 @@ public class APIManager { if(contains) { if(line.trim().contains(rarity + " " + typeMatches[j])) { return j; + } else if(line.trim().contains(rarity + " DUNGEON " + typeMatches[j])) { + return j; } } else { if(line.trim().endsWith(rarity + " " + typeMatches[j])) { @@ -464,7 +478,7 @@ public class APIManager { //Categories String category = sbCategory; - int itemType = checkItemType(item_lore, false,"SWORD", "FISHING ROD", "PICKAXE", + int itemType = checkItemType(item_lore, true,"SWORD", "FISHING ROD", "PICKAXE", "AXE", "SHOVEL", "PET ITEM", "TRAVEL SCROLL", "REFORGE STONE", "BOW"); if(itemType >= 0 && itemType < categoryItemType.length) { category = categoryItemType[itemType]; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java new file mode 100644 index 00000000..81ecc9b4 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java @@ -0,0 +1,315 @@ +package io.github.moulberry.notenoughupdates.profileviewer; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.minecraft.MinecraftProfileTexture; +import com.mojang.authlib.properties.Property; +import io.github.moulberry.notenoughupdates.NotEnoughUpdates; +import io.github.moulberry.notenoughupdates.util.TexLoc; +import io.github.moulberry.notenoughupdates.util.Utils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityOtherPlayerMP; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.network.NetworkPlayerInfo; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.client.resources.SkinManager; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.io.Charsets; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.UUID; + +public class GuiProfileViewer extends GuiScreen { + + public static final ResourceLocation pv_basic = new ResourceLocation("notenoughupdates:pv_basic.png"); + + private final ProfileViewer.Profile profile; + private ProfileViewerPage currentPage = ProfileViewerPage.BASIC; + private int sizeX; + private int sizeY; + private int guiLeft; + private int guiTop; + + public enum ProfileViewerPage { + BASIC + } + + public GuiProfileViewer(ProfileViewer.Profile profile) { + this.profile = profile; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + super.drawScreen(mouseX, mouseY, partialTicks); + drawDefaultBackground(); + + switch (currentPage) { + case BASIC: + drawBasicPage(mouseX, mouseY, partialTicks); + break; + } + + } + + private String niceUuid(String uuidStr) { + if(uuidStr.length()!=32) return uuidStr; + + StringBuilder niceAucId = new StringBuilder(); + niceAucId.append(uuidStr, 0, 8); + niceAucId.append("-"); + niceAucId.append(uuidStr, 8, 12); + niceAucId.append("-"); + niceAucId.append(uuidStr, 12, 16); + niceAucId.append("-"); + niceAucId.append(uuidStr, 16, 20); + niceAucId.append("-"); + niceAucId.append(uuidStr, 20, 32); + return niceAucId.toString(); + } + + private EntityOtherPlayerMP entityPlayer = null; + private ResourceLocation playerLocationSkin = null; + private ResourceLocation playerLocationCape = null; + private String skinType = null; + + TexLoc tl = new TexLoc(0, 0, Keyboard.KEY_M); + TexLoc tl2 = new TexLoc(0, 0, Keyboard.KEY_B); + TexLoc tl3 = new TexLoc(0, 0, Keyboard.KEY_J); + private void drawBasicPage(int mouseX, int mouseY, float partialTicks) { + this.sizeX = 431; + this.sizeY = 202; + this.guiLeft = (this.width-this.sizeX)/2; + this.guiTop = (this.height-this.sizeY)/2; + + Minecraft.getMinecraft().getTextureManager().bindTexture(pv_basic); + Utils.drawTexturedRect(guiLeft, guiTop, sizeX, sizeY, GL11.GL_NEAREST); + + tl.handleKeyboardInput(); + tl2.handleKeyboardInput(); + tl3.handleKeyboardInput(); + + if(entityPlayer == null) { + UUID playerUUID = UUID.fromString(niceUuid(profile.getUuid())); + GameProfile fakeProfile = Minecraft.getMinecraft().getSessionService().fillProfileProperties(new GameProfile(playerUUID, "CoolGuy123"), false); + for(Property prop : fakeProfile.getProperties().get("textures")) { + System.out.println(new String(Base64.decodeBase64(prop.getValue()), Charsets.UTF_8)); + } + entityPlayer = new EntityOtherPlayerMP(Minecraft.getMinecraft().theWorld, fakeProfile) { + public ResourceLocation getLocationSkin() { + return playerLocationSkin == null ? DefaultPlayerSkin.getDefaultSkin(this.getUniqueID()) : playerLocationSkin; + } + + public ResourceLocation getLocationCape() { + return playerLocationCape; + } + + public String getSkinType() { + return skinType == null ? DefaultPlayerSkin.getSkinType(this.getUniqueID()) : skinType; + } + }; + } + + JsonObject profileInfo = profile.getProfileInformation(null); + if(profileInfo == null) return; + + JsonObject skillInfo = profile.getSkillInfo(null); + JsonObject inventoryInfo = profile.getInventoryInfo(null); + JsonObject collectionInfo =profile. getCollectionInfo(null); + + if(inventoryInfo != null && inventoryInfo.has("inv_armor")) { + JsonArray items = inventoryInfo.get("inv_armor").getAsJsonArray(); + for(int i=0; i entry : skillToSkillNameMap.entrySet()) { + int yPosition = position % 7; + int xPosition = position / 7; + + String skillName = entry.getValue(); + + float level = (int)skillInfo.get(entry.getKey()).getAsFloat(); + + for(int xOff=-1; xOff<=1; xOff++) { + for(int yOff=-1; yOff<=1; yOff++) { + if(Math.abs(xOff) != Math.abs(yOff)) { + //Utils.drawStringCenteredScaledMaxWidth(Utils.cleanColourNotModifiers(skillName) + " " + level, Minecraft.getMinecraft().fontRendererObj, + // guiLeft+tl.x+tl2.x*xPosition+xOff, guiTop+tl.y+tl2.y*yPosition+yOff, false, 85, new Color(100, 100, 100, 100).getRGB()); + } + } + } + + GlStateManager.color(1, 1, 1, 1); + Utils.drawStringCenteredScaledMaxWidth(skillName + " " + EnumChatFormatting.WHITE + level, Minecraft.getMinecraft().fontRendererObj, + guiLeft+277+86*xPosition, guiTop+36+21*yPosition, true, 85, Color.BLACK.getRGB()); + + position++; + } + } + + private static final LinkedHashMap skillToSkillNameMap = new LinkedHashMap<>(); + static { + skillToSkillNameMap.put("level_skill_taming", "Taming"); + skillToSkillNameMap.put("level_skill_mining", "Mining"); + skillToSkillNameMap.put("level_skill_foraging", "Foraging"); + skillToSkillNameMap.put("level_skill_enchanting", "Enchanting"); + skillToSkillNameMap.put("level_skill_carpentry", "Carpentry"); + skillToSkillNameMap.put("level_skill_farming", "Farming"); + skillToSkillNameMap.put("level_skill_combat", "Combat"); + skillToSkillNameMap.put("level_skill_fishing", "Fishing"); + skillToSkillNameMap.put("level_skill_alchemy", "Alchemy"); + skillToSkillNameMap.put("level_skill_runecrafting", "Runecrafting"); + skillToSkillNameMap.put("level_slayer_zombie", "Revenant Slayer"); + skillToSkillNameMap.put("level_slayer_spider", "Tarantula Slayer"); + skillToSkillNameMap.put("level_slayer_wolf", "Sven Slayer"); + } + + /*private void renderBar(float x, float y, float xSize, float ySize, float completed) { + this.mc.getTextureManager().bindTexture(Gui.icons); + + float yScale = ySize/5; + + + if (i > 0) + { + int j = 182; + int k = (int)(this.mc.thePlayer.experience * (float)(j + 1)); + int l = p_175176_1_.getScaledHeight() - 32 + 3; + + Utils.drawTexturedRect(x, y, xSize, ); + + this.drawTexturedModalRect(p_175176_2_, l, 0, 64, j, 5); + + if (k > 0) + { + this.drawTexturedModalRect(p_175176_2_, l, 0, 69, k, 5); + } + } + + if (this.mc.thePlayer.experienceLevel > 0) + { + this.mc.mcProfiler.startSection("expLevel"); + int k1 = 8453920; + String s = "" + this.mc.thePlayer.experienceLevel; + int l1 = (p_175176_1_.getScaledWidth() - this.getFontRenderer().getStringWidth(s)) / 2; + int i1 = p_175176_1_.getScaledHeight() - 31 - 4; + int j1 = 0; + this.getFontRenderer().drawString(s, l1 + 1, i1, 0); + this.getFontRenderer().drawString(s, l1 - 1, i1, 0); + this.getFontRenderer().drawString(s, l1, i1 + 1, 0); + this.getFontRenderer().drawString(s, l1, i1 - 1, 0); + this.getFontRenderer().drawString(s, l1, i1, k1); + this.mc.mcProfiler.endSection(); + } + }*/ + + public static void drawEntityOnScreen(int posX, int posY, int scale, float mouseX, float mouseY, EntityLivingBase ent) { + GlStateManager.enableColorMaterial(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float)posX, (float)posY, 50.0F); + GlStateManager.scale((float)(-scale), (float)scale, (float)scale); + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + float f = ent.renderYawOffset; + float f1 = ent.rotationYaw; + float f2 = ent.rotationPitch; + float f3 = ent.prevRotationYawHead; + float f4 = ent.rotationYawHead; + GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F); + ent.renderYawOffset = (float)Math.atan((double)(mouseX / 40.0F)) * 20.0F; + ent.rotationYaw = (float)Math.atan((double)(mouseX / 40.0F)) * 40.0F; + ent.rotationPitch = -((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F; + ent.rotationYawHead = ent.rotationYaw; + ent.prevRotationYawHead = ent.rotationYaw; + GlStateManager.translate(0.0F, 0.0F, 0.0F); + RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager(); + rendermanager.setPlayerViewY(180.0F); + rendermanager.setRenderShadow(false); + rendermanager.renderEntityWithPosYaw(ent, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F); + rendermanager.setRenderShadow(true); + ent.renderYawOffset = f; + ent.rotationYaw = f1; + ent.rotationPitch = f2; + ent.prevRotationYawHead = f3; + ent.rotationYawHead = f4; + GlStateManager.popMatrix(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableRescaleNormal(); + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.disableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + } +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java new file mode 100644 index 00000000..25b7356d --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java @@ -0,0 +1,537 @@ +package io.github.moulberry.notenoughupdates.profileviewer; + +import com.google.gson.*; +import io.github.moulberry.notenoughupdates.util.Utils; +import net.minecraft.nbt.*; +import net.minecraft.util.EnumChatFormatting; +import org.apache.commons.lang3.StringUtils; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.util.Base64; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class PlayerStats { + public static final String HEALTH = "health"; + public static final String DEFENCE = "defence"; + public static final String STRENGTH = "strength"; + public static final String SPEED = "speed"; + public static final String CRIT_CHANCE = "crit_chance"; + public static final String CRIT_DAMAGE = "crit_damage"; + public static final String BONUS_ATTACK_SPEED = "bonus_attack_speed"; + public static final String INTELLIGENCE = "intelligence"; + public static final String SEA_CREATURE_CHANCE = "sea_creature_chance"; + public static final String MAGIC_FIND = "magic_find"; + public static final String PET_LUCK = "pet_luck"; + + public static final String[] defaultStatNames = new String[]{"health","defence","strength","speed","crit_chance", + "crit_damage","bonus_attack_speed","intelligence","sea_creature_chance","magic_find","pet_luck"}; + public static final String[] defaultStatNamesPretty = new String[]{EnumChatFormatting.RED+"\u2764 Health",EnumChatFormatting.GREEN+"\u2748 Defence", + EnumChatFormatting.RED+"\u2741 Strength",EnumChatFormatting.WHITE+"\u2726 Speed",EnumChatFormatting.BLUE+"\u2623 Crit Chance", + EnumChatFormatting.BLUE+"\u2620 Crit Damage",EnumChatFormatting.YELLOW+"\u2694 Attack Speed",EnumChatFormatting.AQUA+"\u270e Intelligence", + EnumChatFormatting.DARK_AQUA+"\u03b1 SC Chance",EnumChatFormatting.AQUA+"\u272f Magic Find",EnumChatFormatting.LIGHT_PURPLE+"\u2663 Pet Luck"}; + + public static class Stats { + JsonObject statsJson = new JsonObject(); + + /*public float health; + public float defence; + public float strength; + public float speed; + public float crit_chance; + public float crit_damage; + public float bonus_attack_speed; + public float intelligence; + public float sea_creature_chance; + public float magic_find; + public float pet_luck;*/ + + public Stats(Stats... statses) { + for(Stats stats : statses) { + add(stats); + } + } + + /*@Override + public String toString() { + return String.format("{health=%s,defence=%s,strength=%s,speed=%s,crit_chance=%s,crit_damage=%s," + + "bonus_attack_speed=%s,intelligence=%s,sea_creature_chance=%s,magic_find=%s,pet_luck=%s}", + stats.get("health"), defence, strength, speed, crit_chance, crit_damage, bonus_attack_speed, intelligence, + sea_creature_chance, magic_find, pet_luck); + }*/ + + public float get(String statName) { + if(statsJson.has(statName)) { + return statsJson.get(statName).getAsFloat(); + } else { + return 0; + } + } + + public Stats add(Stats stats) { + for(Map.Entry statEntry : stats.statsJson.entrySet()) { + if(statEntry.getValue().isJsonPrimitive() && ((JsonPrimitive)statEntry.getValue()).isNumber()) { + if(!statsJson.has(statEntry.getKey())) { + statsJson.add(statEntry.getKey(), statEntry.getValue()); + } else { + JsonPrimitive e = statsJson.get(statEntry.getKey()).getAsJsonPrimitive(); + float statNum = e.getAsFloat() + statEntry.getValue().getAsFloat(); + statsJson.add(statEntry.getKey(), new JsonPrimitive(statNum)); + } + } + } + return this; + } + + public void scaleAll(float scale) { + for(Map.Entry statEntry : statsJson.entrySet()) { + statsJson.add(statEntry.getKey(), new JsonPrimitive(statEntry.getValue().getAsFloat()*scale)); + } + } + + public void addStat(String statName, float amount) { + if(!statsJson.has(statName)) { + statsJson.add(statName, new JsonPrimitive(amount)); + } else { + JsonPrimitive e = statsJson.get(statName).getAsJsonPrimitive(); + statsJson.add(statName, new JsonPrimitive(e.getAsFloat() + amount)); + } + } + } + + public static Stats getBaseStats() { + JsonObject misc = Utils.getConstant("misc"); + if(misc == null) return null; + + Stats stats = new Stats(); + for(String statName : defaultStatNames) { + stats.addStat(statName, Utils.getElementAsFloat(Utils.getElement(misc, "base_stats."+statName), 0)); + } + return stats; + } + + public static Stats getFairyBonus(int fairyExchanges) { + Stats bonus = new Stats(); + + bonus.addStat(SPEED, fairyExchanges/10); + + for(int i=0; i entry : skillInfo.entrySet()) { + if(entry.getKey().startsWith("level_")) { + String skill = entry.getKey().substring("level_".length()); + JsonObject skillStatMap = Utils.getElement(bonuses, "bonus_stats."+skill).getAsJsonObject(); + + Stats currentBonus = new Stats(); + for(int i=1; i<=entry.getValue().getAsFloat(); i++) { + if(skillStatMap.has(""+i)) { + currentBonus = new Stats(); + for(Map.Entry entry2 : skillStatMap.get(""+i).getAsJsonObject().entrySet()) { + currentBonus.addStat(entry2.getKey(), entry2.getValue().getAsFloat()); + } + } + skillBonus.add(currentBonus); + } + } + } + + return skillBonus; + } + + public static Stats getPetBonus(JsonObject profile) { + JsonObject bonuses = Utils.getConstant("bonuses"); + if(bonuses == null) return null; + + JsonElement petsElement = Utils.getElement(profile, "pets"); + if(petsElement == null) return new Stats(); + + JsonArray pets = petsElement.getAsJsonArray(); + + HashMap highestRarityMap = new HashMap<>(); + + for(int i=0; i entry : petRewards.get(""+i).getAsJsonObject().entrySet()) { + petBonus.addStat(entry.getKey(), entry.getValue().getAsFloat()); + } + } + } + return petBonus; + } + + public static float harpBonus(JsonObject profile) { + String talk_to_melody = Utils.getElementAsString(Utils.getElement(profile, "objectives.talk_to_melody.status"), "INCOMPLETE"); + if(talk_to_melody.equalsIgnoreCase("COMPLETE")) { + return 26; + } else { + return 0; + } + } + + + public static Stats getPassiveBonuses(JsonObject skillInfo, JsonObject profile) { + Stats passiveBonuses = new Stats(); + + //TODO: null checking + Stats fairyBonus = getFairyBonus((int)Utils.getElementAsFloat(Utils.getElement(profile, "fairy_exchanges"), 0)); + Stats skillBonus = getSkillBonus(skillInfo); + Stats petBonus = getPetBonus(profile); + + if(fairyBonus == null || skillBonus == null || petBonus == null) return null; + + passiveBonuses.add(fairyBonus); + passiveBonuses.add(skillBonus); + passiveBonuses.addStat(INTELLIGENCE, harpBonus(profile)); + passiveBonuses.add(petBonus); + + return passiveBonuses; + } + + public static String getFullset(JsonArray armor, int ignore) { + String fullset = null; + for(int i=0; i=0; i--) { + String line = lore.get(i).getAsString(); + for(String rarity : rarityArr) { + for(int j=0; j STAT_PATTERN_MAP = new HashMap<>(); + static { + STAT_PATTERN_MAP.put("health", HEALTH_PATTERN); + STAT_PATTERN_MAP.put("defence", DEFENCE_PATTERN); + STAT_PATTERN_MAP.put("strength", STRENGTH_PATTERN); + STAT_PATTERN_MAP.put("speed", SPEED_PATTERN); + STAT_PATTERN_MAP.put("crit_chance", CC_PATTERN); + STAT_PATTERN_MAP.put("crit_damage", CD_PATTERN); + STAT_PATTERN_MAP.put("bonus_attack_speed", ATKSPEED_PATTERN); + STAT_PATTERN_MAP.put("intelligence", INTELLIGENCE_PATTERN); + STAT_PATTERN_MAP.put("sea_creature_chance", SCC_PATTERN); + } + public static Stats getStatForItem(String internalname, JsonObject item, JsonArray lore) { + Stats stats = new Stats(); + for(int i=0; i entry : STAT_PATTERN_MAP.entrySet()) { + Matcher matcher = entry.getValue().matcher(Utils.cleanColour(line)); + if(matcher.find()) { + int bonus = Integer.parseInt(matcher.group(1)); + //System.out.println(entry.getKey() + ":" + bonus); + stats.addStat(entry.getKey(), bonus); + } + } + } + if(internalname.equals("DAY_CRYSTAL") || internalname.equals("NIGHT_CRYSTAL")) { + stats.addStat(STRENGTH, 2.5f); + stats.addStat(DEFENCE, 2.5f); + System.out.println("added day"); + } + if(internalname.equals("NEW_YEAR_CAKE_BAG") && item.has("item_contents")) { + + JsonArray bytesArr = item.get("item_contents").getAsJsonArray(); + byte[] bytes = new byte[bytesArr.size()]; + for(int i=0; i cakes = new HashSet<>(); + for(int j=0; j 0) { + NBTTagCompound nbt = items.getCompoundTagAt(j).getCompoundTag("tag"); + if(nbt != null && nbt.hasKey("ExtraAttributes", 10)) { + NBTTagCompound ea = nbt.getCompoundTag("ExtraAttributes"); + if (ea.hasKey("new_years_cake")) { + cakes.add(ea.getInteger("new_years_cake")); + } + } + } + } + stats.addStat(HEALTH, cakes.size()); + } catch(IOException e) { + e.printStackTrace(); + return stats; + } + } + return stats; + } + public static Stats getItemBonuses(boolean talismanOnly, JsonArray... inventories) { + JsonObject misc = Utils.getConstant("misc"); + if(misc == null) return null; + JsonElement talisman_upgrades_element = misc.get("talisman_upgrades"); + if(talisman_upgrades_element == null) return null; + JsonObject talisman_upgrades = talisman_upgrades_element.getAsJsonObject(); + + HashMap itemBonuses = new HashMap<>(); + for(JsonArray inventory : inventories) { + for(int i=0; i= 0) { + Stats itemBonus = getStatForItem(internalname, item, item.get("lore").getAsJsonArray()); + + itemBonuses.put(internalname, itemBonus); + + for(Map.Entry talisman_upgrades_item : talisman_upgrades.entrySet()) { + JsonArray upgrades = talisman_upgrades_item.getValue().getAsJsonArray(); + for(int j=0; j0 + JsonArray armor = Utils.getElement(inventoryInfo, "inv_armor").getAsJsonArray(); + + String fullset = getFullset(armor, 3); + + if(fullset != null) { + switch(fullset) { + case "CHEAP_TUXEDO_": + stats.statsJson.add(HEALTH, new JsonPrimitive(Math.min(75, stats.get(HEALTH)))); + case "FANCY_TUXEDO_": + stats.statsJson.add(HEALTH, new JsonPrimitive(Math.min(150, stats.get(HEALTH)))); + case "ELEGANT_TUXEDO_": + stats.statsJson.add(HEALTH, new JsonPrimitive(Math.min(250, stats.get(HEALTH)))); + } + } + + for(Map.Entry statEntry : stats.statsJson.entrySet()) { + stats.statsJson.add(statEntry.getKey(), new JsonPrimitive(Math.max(0, statEntry.getValue().getAsFloat()))); + } + } + + public static Stats getStats(JsonObject skillInfo, JsonObject inventoryInfo, JsonObject collectionInfo, JsonObject profile) { + JsonArray armor = Utils.getElement(inventoryInfo, "inv_armor").getAsJsonArray(); + JsonArray inventory = Utils.getElement(inventoryInfo, "inv_contents").getAsJsonArray(); + JsonArray talisman_bag = Utils.getElement(inventoryInfo, "talisman_bag").getAsJsonArray(); + + Stats passiveBonuses = getPassiveBonuses(skillInfo, profile); + System.out.println("passive:"+new Stats(passiveBonuses, getBaseStats())); + Stats armorBonuses = getItemBonuses(false, armor); + Stats talismanBonuses = getItemBonuses(true, inventory, talisman_bag); + + if(passiveBonuses == null) System.out.println("passive null"); + if(armorBonuses == null) System.out.println("armorBonuses null"); + if(talismanBonuses == null) System.out.println("talismanBonuses null"); + + if(passiveBonuses == null || armorBonuses == null || talismanBonuses == null) return null; + + Stats stats = getBaseStats().add(passiveBonuses).add(armorBonuses).add(talismanBonuses); + + stats.add(getSetBonuses(stats, inventoryInfo, collectionInfo, skillInfo, profile)); + + stats.scaleAll(getStatMult(inventoryInfo)); + + applyLimits(stats, inventoryInfo); + + return stats; + } + +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java new file mode 100644 index 00000000..db90cca8 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java @@ -0,0 +1,370 @@ +package io.github.moulberry.notenoughupdates.profileviewer; + +import com.google.common.base.Splitter; +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.NEUManager; +import io.github.moulberry.notenoughupdates.NotEnoughUpdates; +import io.github.moulberry.notenoughupdates.util.Utils; +import net.minecraft.client.Minecraft; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.ChatComponentText; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.util.Base64; +import java.util.HashMap; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Consumer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class ProfileViewer { + + private final NEUManager manager; + + public ProfileViewer(NEUManager manager) { + this.manager = manager; + } + + public class Profile { + private final String uuid; + private String latestProfile = null; + + private JsonArray playerInformation = null; + private JsonObject basicInfo = null; + + private final HashMap profileMap = new HashMap<>(); + private final HashMap skillInfoMap = new HashMap<>(); + private final HashMap inventoryInfoMap = new HashMap<>(); + private final HashMap collectionInfoMap = new HashMap<>(); + private PlayerStats.Stats stats = null; + + public Profile(String uuid) { + this.uuid = uuid; + } + + private AtomicBoolean updatingPlayerInfoState = new AtomicBoolean(false); + + public JsonArray getPlayerInformation(Runnable runnable) { + if(playerInformation != null) return playerInformation; + if(updatingPlayerInfoState.get()) return null; + + updatingPlayerInfoState.set(true); + + HashMap args = new HashMap<>(); + args.put("uuid", ""+uuid); + manager.hypixelApi.getHypixelApiAsync(manager.config.apiKey.value, "skyblock/profiles", + args, jsonObject -> { + updatingPlayerInfoState.set(false); + if(jsonObject.has("success") && jsonObject.get("success").getAsBoolean()) { + playerInformation = jsonObject.get("profiles").getAsJsonArray(); + if(playerInformation == null) return; + String backup = null; + long backupLastSave = 0; + for(int i=0; i backupLastSave) { + backupLastSave = last_save; + backup = cute_name; + } + } + } + System.out.println("accepting runnable"); + runnable.run(); + latestProfile = backup; + } + } + ); + + return null; + } + + public JsonObject getProfileInformation(String profileId) { + JsonArray playerInfo = getPlayerInformation(() -> {}); + if(playerInfo == null) return null; + if(profileId == null) profileId = latestProfile; + if(profileMap.containsKey(profileId)) return profileMap.get(profileId); + + for(int i=0; i xp) { + return level + xp/levelXp; + } else { + xp -= levelXp; + } + } + return levelingArray.size(); + } + + public JsonObject getSkillInfo(String profileId) { + JsonObject profileInfo = getProfileInformation(profileId); + if(profileInfo == null) return null; + if(profileId == null) profileId = latestProfile; + if(skillInfoMap.containsKey(profileId)) return skillInfoMap.get(profileId); + JsonObject leveling = Utils.getConstant("leveling"); + if(leveling == null) return null; + + float experience_skill_taming = Utils.getElementAsFloat(Utils.getElement(profileInfo, "experience_skill_taming"), 0); + float experience_skill_mining = Utils.getElementAsFloat(Utils.getElement(profileInfo, "experience_skill_mining"), 0); + float experience_skill_foraging = Utils.getElementAsFloat(Utils.getElement(profileInfo, "experience_skill_foraging"), 0); + float experience_skill_enchanting = Utils.getElementAsFloat(Utils.getElement(profileInfo, "experience_skill_enchanting"), 0); + float experience_skill_carpentry = Utils.getElementAsFloat(Utils.getElement(profileInfo, "experience_skill_carpentry"), 0); + float experience_skill_farming = Utils.getElementAsFloat(Utils.getElement(profileInfo, "experience_skill_farming"), 0); + float experience_skill_combat = Utils.getElementAsFloat(Utils.getElement(profileInfo, "experience_skill_combat"), 0); + float experience_skill_fishing = Utils.getElementAsFloat(Utils.getElement(profileInfo, "experience_skill_fishing"), 0); + float experience_skill_alchemy = Utils.getElementAsFloat(Utils.getElement(profileInfo, "experience_skill_alchemy"), 0); + float experience_skill_runecrafting = Utils.getElementAsFloat(Utils.getElement(profileInfo, "experience_skill_runecrafting"), 0); + + float experience_slayer_zombie = Utils.getElementAsFloat(Utils.getElement(profileInfo, "slayer_bosses.zombie.xp"), 0); + float experience_slayer_spider = Utils.getElementAsFloat(Utils.getElement(profileInfo, "slayer_bosses.spider.xp"), 0); + float experience_slayer_wolf = Utils.getElementAsFloat(Utils.getElement(profileInfo, "slayer_bosses.zombie.xp"), 0); + + float totalSkillXP = experience_skill_taming + experience_skill_mining + experience_skill_foraging + + experience_skill_enchanting + experience_skill_carpentry + experience_skill_farming + + experience_skill_combat + experience_skill_fishing + experience_skill_alchemy + + experience_skill_runecrafting; + + if(totalSkillXP <= 0) { + System.out.println("couldnt get skill xp"); + return null; + } + + JsonObject skillInfo = new JsonObject(); + + skillInfo.addProperty("experience_skill_taming", experience_skill_taming); + skillInfo.addProperty("experience_skill_mining", experience_skill_mining); + skillInfo.addProperty("experience_skill_foraging", experience_skill_foraging); + skillInfo.addProperty("experience_skill_enchanting", experience_skill_enchanting); + skillInfo.addProperty("experience_skill_carpentry", experience_skill_carpentry); + skillInfo.addProperty("experience_skill_farming", experience_skill_farming); + skillInfo.addProperty("experience_skill_combat", experience_skill_combat); + skillInfo.addProperty("experience_skill_fishing", experience_skill_fishing); + skillInfo.addProperty("experience_skill_alchemy", experience_skill_alchemy); + skillInfo.addProperty("experience_skill_runecrafting", experience_skill_runecrafting); + + skillInfo.addProperty("experience_slayer_zombie", experience_slayer_zombie); + skillInfo.addProperty("experience_slayer_spider", experience_slayer_spider); + skillInfo.addProperty("experience_slayer_wolf", experience_slayer_wolf); + + skillInfo.addProperty("level_skill_taming", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_taming)); + skillInfo.addProperty("level_skill_mining", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_mining)); + skillInfo.addProperty("level_skill_foraging", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_foraging)); + skillInfo.addProperty("level_skill_enchanting", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_enchanting)); + skillInfo.addProperty("level_skill_carpentry", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_carpentry)); + skillInfo.addProperty("level_skill_farming", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_farming)); + skillInfo.addProperty("level_skill_combat", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_combat)); + skillInfo.addProperty("level_skill_fishing", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_fishing)); + skillInfo.addProperty("level_skill_alchemy", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_alchemy)); + skillInfo.addProperty("level_skill_runecrafting", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_runecrafting)); + + skillInfo.addProperty("level_slayer_zombie", getLevel(Utils.getElement(leveling, "slayer_xp.zombie").getAsJsonArray(), experience_slayer_zombie)); + skillInfo.addProperty("level_slayer_spider", getLevel(Utils.getElement(leveling, "slayer_xp.spider").getAsJsonArray(), experience_slayer_spider)); + skillInfo.addProperty("level_slayer_wolf", getLevel(Utils.getElement(leveling, "slayer_xp.wolf").getAsJsonArray(), experience_slayer_wolf)); + + return skillInfo; + } + + public JsonObject getInventoryInfo(String profileId) { + JsonObject profileInfo = getProfileInformation(profileId); + if(profileInfo == null) return null; + if(profileId == null) profileId = latestProfile; + if(inventoryInfoMap.containsKey(profileId)) return inventoryInfoMap.get(profileId); + + //inv_armor, fishing_bag, quiver, ender_chest_contents, wardrobe_contents, potion_bag, inv_contents, talisman_bag, candy_inventory_contents + + String inv_armor_bytes = Utils.getElementAsString(Utils.getElement(profileInfo, "inv_armor.data"), "Hz8IAAAAAAAAAD9iYD9kYD9kAAMAPwI/Gw0AAAA="); + String fishing_bag_bytes = Utils.getElementAsString(Utils.getElement(profileInfo, "fishing_bag.data"), "Hz8IAAAAAAAAAD9iYD9kYD9kAAMAPwI/Gw0AAAA="); + String quiver_bytes = Utils.getElementAsString(Utils.getElement(profileInfo, "quiver.data"), "Hz8IAAAAAAAAAD9iYD9kYD9kAAMAPwI/Gw0AAAA="); + String ender_chest_contents_bytes = Utils.getElementAsString(Utils.getElement(profileInfo, "ender_chest_contents.data"), "Hz8IAAAAAAAAAD9iYD9kYD9kAAMAPwI/Gw0AAAA="); + String wardrobe_contents_bytes = Utils.getElementAsString(Utils.getElement(profileInfo, "wardrobe_contents.data"), "Hz8IAAAAAAAAAD9iYD9kYD9kAAMAPwI/Gw0AAAA="); + String potion_bag_bytes = Utils.getElementAsString(Utils.getElement(profileInfo, "potion_bag.data"), "Hz8IAAAAAAAAAD9iYD9kYD9kAAMAPwI/Gw0AAAA="); + String inv_contents_bytes = Utils.getElementAsString(Utils.getElement(profileInfo, "inv_contents.data"), "Hz8IAAAAAAAAAD9iYD9kYD9kAAMAPwI/Gw0AAAA="); + String talisman_bag_bytes = Utils.getElementAsString(Utils.getElement(profileInfo, "talisman_bag.data"), "Hz8IAAAAAAAAAD9iYD9kYD9kAAMAPwI/Gw0AAAA="); + String candy_inventory_contents_bytes = Utils.getElementAsString(Utils.getElement(profileInfo, "candy_inventory_contents.data"), "Hz8IAAAAAAAAAD9iYD9kYD9kAAMAPwI/Gw0AAAA="); + + JsonObject inventoryInfo = new JsonObject(); + + String[] inv_names = new String[]{"inv_armor", "fishing_bag", "quiver", "ender_chest_contents", "wardrobe_contents", + "potion_bag", "inv_contents", "talisman_bag", "candy_inventory_contents"}; + String[] inv_bytes = new String[]{inv_armor_bytes, fishing_bag_bytes, quiver_bytes, ender_chest_contents_bytes, wardrobe_contents_bytes, + potion_bag_bytes, inv_contents_bytes, talisman_bag_bytes, candy_inventory_contents_bytes}; + for(int i=0; i nameToHypixelProfile = new HashMap<>(); + private HashMap uuidToHypixelProfile = new HashMap<>(); + private HashMap uuidToProfileMap = new HashMap<>(); + + public void getHypixelProfile(String name, Consumer callback) { + HashMap args = new HashMap<>(); + args.put("name", ""+name); + manager.hypixelApi.getHypixelApiAsync(manager.config.apiKey.value, "player", + args, jsonObject -> { + if(jsonObject.has("success") && jsonObject.get("success").getAsBoolean()) { + nameToHypixelProfile.put(name, jsonObject.get("player").getAsJsonObject()); + uuidToHypixelProfile.put(jsonObject.get("player").getAsJsonObject().get("uuid").getAsString(), jsonObject.get("player").getAsJsonObject()); + if(callback != null) callback.accept(jsonObject); + } + } + ); + } + + public Profile getProfileByName(String name, Consumer callback) { + if(nameToHypixelProfile.containsKey(name)) { + return getProfileReset(nameToHypixelProfile.get(name).get("uuid").getAsString(), callback); + } else { + getHypixelProfile(name, jsonObject -> { + System.out.println("getting profile with callback"); + getProfileReset(jsonObject.get("player").getAsJsonObject().get("uuid").getAsString(), callback); + }); + return null; + } + } + + public Profile getProfile(String uuid, Consumer callback) { + Profile profile = uuidToProfileMap.computeIfAbsent(uuid, k -> new Profile(uuid)); + if(profile.playerInformation != null) { + System.out.println("getting profile with callback1"); + callback.accept(profile); + } else { + System.out.println("getting profile with callback3"); + profile.getPlayerInformation(() -> callback.accept(profile)); + } + return profile; + } + + public Profile getProfileReset(String uuid, Consumer callback) { + Profile profile = getProfile(uuid, callback); + profile.resetCache(); + return profile; + } + +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/questing/requirements/RequirementApi.java b/src/main/java/io/github/moulberry/notenoughupdates/questing/requirements/RequirementApi.java index 951cfa50..27f9f293 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/questing/requirements/RequirementApi.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/questing/requirements/RequirementApi.java @@ -40,7 +40,6 @@ public class RequirementApi extends Requirement { private static JsonElement getElement(JsonElement element, String path) { List path_split = PATH_SPLITTER.splitToList(path); if(element instanceof JsonObject) { - System.out.println(path_split.get(0)); JsonElement e = element.getAsJsonObject().get(path_split.get(0)); if(path_split.size() > 1) { return getElement(e, path_split.get(1)); 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 c271d63a..133619ae 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/HypixelApi.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/HypixelApi.java @@ -62,11 +62,11 @@ public class HypixelApi { } public String generateApiUrl(String apiKey, String method, HashMap args) { - String url = "https://api.hypixel.net/" + method + "?key=" + apiKey; + StringBuilder url = new StringBuilder("https://api.hypixel.net/" + method + "?key=" + apiKey); for(Map.Entry entry : args.entrySet()) { - url += "&" + entry.getKey() + "=" + entry.getValue(); + url.append("&").append(entry.getKey()).append("=").append(entry.getValue()); } - return url; + return url.toString(); } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/Utils.java b/src/main/java/io/github/moulberry/notenoughupdates/util/Utils.java index 57b89a0a..66400c00 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/Utils.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/Utils.java @@ -1,5 +1,9 @@ package io.github.moulberry.notenoughupdates.util; +import com.google.common.base.Splitter; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; import com.mojang.authlib.Agent; import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; import com.mojang.authlib.yggdrasil.YggdrasilUserAuthentication; @@ -376,6 +380,50 @@ public class Utils { drawHoveringText(textLines, mouseX, mouseY, screenWidth, screenHeight, maxTextWidth, font, true); } + public static JsonObject getConstant(String constant) { + File repo = NotEnoughUpdates.INSTANCE.manager.repoLocation; + if(repo.exists()) { + File jsonFile = new File(repo, "constants/"+constant+".json"); + try { + return NotEnoughUpdates.INSTANCE.manager.getJsonFromFile(jsonFile); + } catch (Exception ignored) { + } + } + System.out.println(constant + " = null"); + return null; + } + + public static float getElementAsFloat(JsonElement element, float def) { + if(element == null) return def; + if(!element.isJsonPrimitive()) return def; + JsonPrimitive prim = element.getAsJsonPrimitive(); + if(!prim.isNumber()) return def; + return prim.getAsFloat(); + } + + public static String getElementAsString(JsonElement element, String def) { + if(element == null) return def; + if(!element.isJsonPrimitive()) return def; + JsonPrimitive prim = element.getAsJsonPrimitive(); + if(!prim.isString()) return def; + return prim.getAsString(); + } + + public static Splitter PATH_SPLITTER = Splitter.on(".").omitEmptyStrings().limit(2); + public static JsonElement getElement(JsonElement element, String path) { + List path_split = PATH_SPLITTER.splitToList(path); + if(element instanceof JsonObject) { + JsonElement e = element.getAsJsonObject().get(path_split.get(0)); + if(path_split.size() > 1) { + return getElement(e, path_split.get(1)); + } else { + return e; + } + } else { + return element; + } + } + public static ChatStyle createClickStyle(ClickEvent.Action action, String value) { ChatStyle style = new ChatStyle(); style.setChatClickEvent(new ClickEvent(action, value)); diff --git a/src/main/resources/assets/notenoughupdates/pv_basic.png b/src/main/resources/assets/notenoughupdates/pv_basic.png new file mode 100644 index 00000000..8e9c8d85 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/pv_basic.png differ -- cgit From d04771c7ef5cdab9554aa6aef506a39c8e2bd3d4 Mon Sep 17 00:00:00 2001 From: Moulberry Date: Wed, 22 Jul 2020 03:54:59 +1000 Subject: less scuffed profile viewer :) --- .../moulberry/notenoughupdates/GuiItemRecipe.java | 2 +- .../moulberry/notenoughupdates/NEUManager.java | 2 - .../moulberry/notenoughupdates/NEUOverlay.java | 22 +- .../notenoughupdates/NotEnoughUpdates.java | 29 +- .../notenoughupdates/auction/APIManager.java | 8 +- .../notenoughupdates/auction/CustomAH.java | 2 +- .../profileviewer/GuiProfileViewer.java | 482 ++++++++++++++++----- .../notenoughupdates/profileviewer/Panorama.java | 151 +++++++ .../profileviewer/PlayerStats.java | 27 +- .../profileviewer/ProfileViewer.java | 206 +++++++-- .../notenoughupdates/questing/NEUQuesting.java | 67 --- .../questing/SBScoreboardData.java | 76 ++++ .../questing/requirements/RequirementApi.java | 2 - .../requirements/RequirementIslandType.java | 4 +- .../notenoughupdates/util/HypixelApi.java | 30 +- .../moulberry/notenoughupdates/util/Utils.java | 89 ++++ .../panoramas/combat_1_day/panorama_0.png | Bin 0 -> 2044572 bytes .../panoramas/combat_1_day/panorama_1.png | Bin 0 -> 2118694 bytes .../panoramas/combat_1_day/panorama_2.png | Bin 0 -> 1975377 bytes .../panoramas/combat_1_day/panorama_3.png | Bin 0 -> 1909797 bytes .../panoramas/combat_1_day/panorama_4.png | Bin 0 -> 2256091 bytes .../panoramas/combat_1_day/panorama_5.png | Bin 0 -> 1456745 bytes .../panoramas/combat_1_night/panorama_0.png | Bin 0 -> 1835538 bytes .../panoramas/combat_1_night/panorama_1.png | Bin 0 -> 1892728 bytes .../panoramas/combat_1_night/panorama_2.png | Bin 0 -> 1577765 bytes .../panoramas/combat_1_night/panorama_3.png | Bin 0 -> 1635925 bytes .../panoramas/combat_1_night/panorama_4.png | Bin 0 -> 1873550 bytes .../panoramas/combat_1_night/panorama_5.png | Bin 0 -> 1471032 bytes .../panoramas/combat_2_day/panorama_0.png | Bin 0 -> 1870077 bytes .../panoramas/combat_2_day/panorama_1.png | Bin 0 -> 1827993 bytes .../panoramas/combat_2_day/panorama_2.png | Bin 0 -> 1930272 bytes .../panoramas/combat_2_day/panorama_3.png | Bin 0 -> 2036129 bytes .../panoramas/combat_2_day/panorama_4.png | Bin 0 -> 1741259 bytes .../panoramas/combat_2_day/panorama_5.png | Bin 0 -> 1450149 bytes .../panoramas/combat_2_night/panorama_0.png | Bin 0 -> 1604404 bytes .../panoramas/combat_2_night/panorama_1.png | Bin 0 -> 1506039 bytes .../panoramas/combat_2_night/panorama_2.png | Bin 0 -> 1280422 bytes .../panoramas/combat_2_night/panorama_3.png | Bin 0 -> 1683043 bytes .../panoramas/combat_2_night/panorama_4.png | Bin 0 -> 1475680 bytes .../panoramas/combat_2_night/panorama_5.png | Bin 0 -> 1317441 bytes .../panoramas/combat_3_day/panorama_0.png | Bin 0 -> 2188059 bytes .../panoramas/combat_3_day/panorama_1.png | Bin 0 -> 1858211 bytes .../panoramas/combat_3_day/panorama_2.png | Bin 0 -> 1820033 bytes .../panoramas/combat_3_day/panorama_3.png | Bin 0 -> 2320903 bytes .../panoramas/combat_3_day/panorama_4.png | Bin 0 -> 1815303 bytes .../panoramas/combat_3_day/panorama_5.png | Bin 0 -> 1584572 bytes .../panoramas/combat_3_night/panorama_0.png | Bin 0 -> 1850016 bytes .../panoramas/combat_3_night/panorama_1.png | Bin 0 -> 1491122 bytes .../panoramas/combat_3_night/panorama_2.png | Bin 0 -> 1560123 bytes .../panoramas/combat_3_night/panorama_3.png | Bin 0 -> 1905445 bytes .../panoramas/combat_3_night/panorama_4.png | Bin 0 -> 1618932 bytes .../panoramas/combat_3_night/panorama_5.png | Bin 0 -> 1402137 bytes .../panoramas/dark_auction/panorama_0.png | Bin 0 -> 1855519 bytes .../panoramas/dark_auction/panorama_1.png | Bin 0 -> 1850637 bytes .../panoramas/dark_auction/panorama_2.png | Bin 0 -> 1674606 bytes .../panoramas/dark_auction/panorama_3.png | Bin 0 -> 1922696 bytes .../panoramas/dark_auction/panorama_4.png | Bin 0 -> 2052381 bytes .../panoramas/dark_auction/panorama_5.png | Bin 0 -> 1347015 bytes .../panoramas/dungeon/panorama_0.png | Bin 0 -> 1529623 bytes .../panoramas/dungeon/panorama_1.png | Bin 0 -> 1752770 bytes .../panoramas/dungeon/panorama_2.png | Bin 0 -> 1650468 bytes .../panoramas/dungeon/panorama_3.png | Bin 0 -> 1648713 bytes .../panoramas/dungeon/panorama_4.png | Bin 0 -> 1862221 bytes .../panoramas/dungeon/panorama_5.png | Bin 0 -> 1351481 bytes .../panoramas/dungeon_hub/panorama_0.png | Bin 0 -> 1529623 bytes .../panoramas/dungeon_hub/panorama_1.png | Bin 0 -> 1752770 bytes .../panoramas/dungeon_hub/panorama_2.png | Bin 0 -> 1650468 bytes .../panoramas/dungeon_hub/panorama_3.png | Bin 0 -> 1648713 bytes .../panoramas/dungeon_hub/panorama_4.png | Bin 0 -> 1862221 bytes .../panoramas/dungeon_hub/panorama_5.png | Bin 0 -> 1351481 bytes .../panoramas/dynamic_day/panorama_0.png | Bin 0 -> 2225270 bytes .../panoramas/dynamic_day/panorama_1.png | Bin 0 -> 2261346 bytes .../panoramas/dynamic_day/panorama_2.png | Bin 0 -> 2339782 bytes .../panoramas/dynamic_day/panorama_3.png | Bin 0 -> 2543434 bytes .../panoramas/dynamic_day/panorama_4.png | Bin 0 -> 2173289 bytes .../panoramas/dynamic_day/panorama_5.png | Bin 0 -> 1726308 bytes .../panoramas/dynamic_night/panorama_0.png | Bin 0 -> 2197444 bytes .../panoramas/dynamic_night/panorama_1.png | Bin 0 -> 2394932 bytes .../panoramas/dynamic_night/panorama_2.png | Bin 0 -> 2188571 bytes .../panoramas/dynamic_night/panorama_3.png | Bin 0 -> 2376290 bytes .../panoramas/dynamic_night/panorama_4.png | Bin 0 -> 2000878 bytes .../panoramas/dynamic_night/panorama_5.png | Bin 0 -> 1511540 bytes .../panoramas/farming_1_day/panorama_0.png | Bin 0 -> 2187588 bytes .../panoramas/farming_1_day/panorama_1.png | Bin 0 -> 2459529 bytes .../panoramas/farming_1_day/panorama_2.png | Bin 0 -> 2459437 bytes .../panoramas/farming_1_day/panorama_3.png | Bin 0 -> 2435508 bytes .../panoramas/farming_1_day/panorama_4.png | Bin 0 -> 1669131 bytes .../panoramas/farming_1_day/panorama_5.png | Bin 0 -> 2298029 bytes .../panoramas/farming_1_night/panorama_0.png | Bin 0 -> 1853632 bytes .../panoramas/farming_1_night/panorama_1.png | Bin 0 -> 2028666 bytes .../panoramas/farming_1_night/panorama_2.png | Bin 0 -> 2027933 bytes .../panoramas/farming_1_night/panorama_3.png | Bin 0 -> 1999075 bytes .../panoramas/farming_1_night/panorama_4.png | Bin 0 -> 1466349 bytes .../panoramas/farming_1_night/panorama_5.png | Bin 0 -> 1835107 bytes .../panoramas/farming_2_day/panorama_0.png | Bin 0 -> 2063170 bytes .../panoramas/farming_2_day/panorama_1.png | Bin 0 -> 2017820 bytes .../panoramas/farming_2_day/panorama_2.png | Bin 0 -> 2004712 bytes .../panoramas/farming_2_day/panorama_3.png | Bin 0 -> 2049201 bytes .../panoramas/farming_2_day/panorama_4.png | Bin 0 -> 1505669 bytes .../panoramas/farming_2_day/panorama_5.png | Bin 0 -> 1678571 bytes .../panoramas/farming_2_night/panorama_0.png | Bin 0 -> 1767456 bytes .../panoramas/farming_2_night/panorama_1.png | Bin 0 -> 1690021 bytes .../panoramas/farming_2_night/panorama_2.png | Bin 0 -> 1637647 bytes .../panoramas/farming_2_night/panorama_3.png | Bin 0 -> 1695396 bytes .../panoramas/farming_2_night/panorama_4.png | Bin 0 -> 1347288 bytes .../panoramas/farming_2_night/panorama_5.png | Bin 0 -> 1523433 bytes .../panoramas/foraging_1_day/panorama_0.png | Bin 0 -> 2411778 bytes .../panoramas/foraging_1_day/panorama_1.png | Bin 0 -> 2041133 bytes .../panoramas/foraging_1_day/panorama_2.png | Bin 0 -> 2206230 bytes .../panoramas/foraging_1_day/panorama_3.png | Bin 0 -> 2247037 bytes .../panoramas/foraging_1_day/panorama_4.png | Bin 0 -> 2095796 bytes .../panoramas/foraging_1_day/panorama_5.png | Bin 0 -> 1839740 bytes .../panoramas/foraging_1_night/panorama_0.png | Bin 0 -> 1766471 bytes .../panoramas/foraging_1_night/panorama_1.png | Bin 0 -> 1638095 bytes .../panoramas/foraging_1_night/panorama_2.png | Bin 0 -> 1776122 bytes .../panoramas/foraging_1_night/panorama_3.png | Bin 0 -> 1796200 bytes .../panoramas/foraging_1_night/panorama_4.png | Bin 0 -> 1635702 bytes .../panoramas/foraging_1_night/panorama_5.png | Bin 0 -> 1504163 bytes .../panoramas/hub_day/panorama_0.png | Bin 0 -> 1778138 bytes .../panoramas/hub_day/panorama_1.png | Bin 0 -> 1844566 bytes .../panoramas/hub_day/panorama_2.png | Bin 0 -> 1906390 bytes .../panoramas/hub_day/panorama_3.png | Bin 0 -> 1978044 bytes .../panoramas/hub_day/panorama_4.png | Bin 0 -> 1457085 bytes .../panoramas/hub_day/panorama_5.png | Bin 0 -> 1481400 bytes .../panoramas/hub_night/panorama_0.png | Bin 0 -> 1800967 bytes .../panoramas/hub_night/panorama_1.png | Bin 0 -> 1795725 bytes .../panoramas/hub_night/panorama_2.png | Bin 0 -> 1783854 bytes .../panoramas/hub_night/panorama_3.png | Bin 0 -> 1903785 bytes .../panoramas/hub_night/panorama_4.png | Bin 0 -> 1334156 bytes .../panoramas/hub_night/panorama_5.png | Bin 0 -> 1484102 bytes .../panoramas/mining_1_day/panorama_0.png | Bin 0 -> 2250360 bytes .../panoramas/mining_1_day/panorama_1.png | Bin 0 -> 1990106 bytes .../panoramas/mining_1_day/panorama_2.png | Bin 0 -> 1917797 bytes .../panoramas/mining_1_day/panorama_3.png | Bin 0 -> 2080411 bytes .../panoramas/mining_1_day/panorama_4.png | Bin 0 -> 1680133 bytes .../panoramas/mining_1_day/panorama_5.png | Bin 0 -> 1368779 bytes .../panoramas/mining_1_night/panorama_0.png | Bin 0 -> 2144730 bytes .../panoramas/mining_1_night/panorama_1.png | Bin 0 -> 1881956 bytes .../panoramas/mining_1_night/panorama_2.png | Bin 0 -> 1660032 bytes .../panoramas/mining_1_night/panorama_3.png | Bin 0 -> 1879865 bytes .../panoramas/mining_1_night/panorama_4.png | Bin 0 -> 1514854 bytes .../panoramas/mining_1_night/panorama_5.png | Bin 0 -> 1357481 bytes .../panoramas/mining_2/panorama_0.png | Bin 0 -> 1750950 bytes .../panoramas/mining_2/panorama_1.png | Bin 0 -> 1672301 bytes .../panoramas/mining_2/panorama_2.png | Bin 0 -> 1702966 bytes .../panoramas/mining_2/panorama_3.png | Bin 0 -> 1681660 bytes .../panoramas/mining_2/panorama_4.png | Bin 0 -> 1823482 bytes .../panoramas/mining_2/panorama_5.png | Bin 0 -> 1375439 bytes .../panoramas/unknown/panorama_0.png | Bin 0 -> 2095449 bytes .../panoramas/unknown/panorama_1.png | Bin 0 -> 2096492 bytes .../panoramas/unknown/panorama_2.png | Bin 0 -> 2082800 bytes .../panoramas/unknown/panorama_3.png | Bin 0 -> 2080972 bytes .../panoramas/unknown/panorama_4.png | Bin 0 -> 2095828 bytes .../panoramas/unknown/panorama_5.png | Bin 0 -> 2083932 bytes .../assets/notenoughupdates/shaders/cape.frag | 4 +- .../assets/notenoughupdates/shaders/fade_cape.frag | 8 +- .../assets/notenoughupdates/shaders/make_gold.frag | 38 ++ .../assets/notenoughupdates/shaders/make_gold.vert | 13 + 158 files changed, 997 insertions(+), 265 deletions(-) create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/profileviewer/Panorama.java delete mode 100644 src/main/java/io/github/moulberry/notenoughupdates/questing/NEUQuesting.java create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/questing/SBScoreboardData.java create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/shaders/make_gold.frag create mode 100644 src/main/resources/assets/notenoughupdates/shaders/make_gold.vert diff --git a/src/main/java/io/github/moulberry/notenoughupdates/GuiItemRecipe.java b/src/main/java/io/github/moulberry/notenoughupdates/GuiItemRecipe.java index 200569df..d0301b2c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/GuiItemRecipe.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/GuiItemRecipe.java @@ -170,7 +170,7 @@ public class GuiItemRecipe extends GuiScreen { @Override public void handleKeyboardInput() throws IOException { - super.handleKeyboardInput(); //TODO: r and u + super.handleKeyboardInput(); ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); int width = scaledResolution.getScaledWidth(); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java index edf1d31c..b879c383 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java @@ -1079,8 +1079,6 @@ public class NEUManager { } if(craftMatrices.size() > 0) { - Minecraft.getMinecraft().thePlayer.sendQueue.addToSendQueue(new C0DPacketCloseWindow( - Minecraft.getMinecraft().thePlayer.openContainer.windowId)); Minecraft.getMinecraft().displayGuiScreen(new GuiItemRecipe("Item Usages", craftMatrices, results, this)); return true; } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java index a33c13b3..25b27cc5 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java @@ -96,7 +96,6 @@ public class NEUOverlay extends Gui { private JsonObject[] searchedItemsArr = null; private boolean itemPaneOpen = false; - private boolean hoveringItemPaneToggle = false; private int page = 0; @@ -1636,21 +1635,16 @@ public class NEUOverlay extends Gui { int rightSide = leftSide+paneWidth-getBoxPadding()-getItemBoxXPadding(); //Tab - Minecraft.getMinecraft().getTextureManager().bindTexture(itemPaneTabArrow); - GlStateManager.color(1f, 1f, 1f, 0.3f); - Utils.drawTexturedRect(width-itemPaneTabOffset.getValue(), height/2 - 50, 20, 100); - GlStateManager.bindTexture(0); + if(!manager.config.disableItemTabOpen.value) { + Minecraft.getMinecraft().getTextureManager().bindTexture(itemPaneTabArrow); + GlStateManager.color(1f, 1f, 1f, 0.3f); + Utils.drawTexturedRect(width-itemPaneTabOffset.getValue(), height/2 - 50, 20, 100); + GlStateManager.bindTexture(0); - if(mouseX > width-itemPaneTabOffset.getValue() && mouseY > height/2 - 50 - && mouseY < height/2 + 50) { - if(!hoveringItemPaneToggle) { - if(!manager.config.disableItemTabOpen.value) { - itemPaneOpen = !itemPaneOpen; - } - hoveringItemPaneToggle = true; + if(!itemPaneOpen && mouseX > width-itemPaneTabOffset.getValue() && mouseY > height/2 - 50 + && mouseY < height/2 + 50) { + itemPaneOpen = true; } - } else { - hoveringItemPaneToggle = false; } //Atomic reference used so that below lambda doesn't complain about non-effectively-final variable diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java index a7a30233..734f7ca1 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java @@ -14,7 +14,7 @@ import io.github.moulberry.notenoughupdates.infopanes.CosmeticsInfoPane; import io.github.moulberry.notenoughupdates.profileviewer.GuiProfileViewer; import io.github.moulberry.notenoughupdates.profileviewer.ProfileViewer; import io.github.moulberry.notenoughupdates.questing.GuiQuestLine; -import io.github.moulberry.notenoughupdates.questing.NEUQuesting; +import io.github.moulberry.notenoughupdates.questing.SBScoreboardData; import io.github.moulberry.notenoughupdates.util.Utils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; @@ -31,20 +31,15 @@ import net.minecraft.inventory.ContainerChest; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.scoreboard.ScoreObjective; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.util.ChatComponentText; -import net.minecraft.util.ChatStyle; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.Session; import net.minecraftforge.client.ClientCommandHandler; -import net.minecraftforge.client.event.ClientChatReceivedEvent; -import net.minecraftforge.client.event.GuiOpenEvent; -import net.minecraftforge.client.event.GuiScreenEvent; -import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.client.event.*; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.player.ItemTooltipEvent; import net.minecraftforge.fml.client.registry.ClientRegistry; @@ -139,10 +134,13 @@ public class NotEnoughUpdates { if(args.length != 1) { Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "idiot.")); + } else { + profileViewer.getProfileByName(args[0], profile -> { + profile.resetCache(); + openGui = new GuiProfileViewer(profile); + }); } - profileViewer.getProfileByName(args[0], profile -> { - openGui = new GuiProfileViewer(profile); - }); + //openGui = new GuiProfileViewer(null); } }); @@ -398,7 +396,7 @@ public class NotEnoughUpdates { joinedSB = false; } } - //NEUQuesting.getInstance().tick(); + SBScoreboardData.getInstance().tick(); //GuiQuestLine.questLine.tick(); } if(currChatMessage != null && System.currentTimeMillis() - lastChatMessage > CHAT_MSG_COOLDOWN) { @@ -473,6 +471,15 @@ public class NotEnoughUpdates { } } + @SubscribeEvent(priority=EventPriority.HIGHEST) + public void onRenderEntitySpecials(RenderLivingEvent.Specials.Pre event) { + if(Minecraft.getMinecraft().currentScreen instanceof GuiProfileViewer) { + if(((GuiProfileViewer)Minecraft.getMinecraft().currentScreen).getEntityPlayer() == event.entity) { + event.setCanceled(true); + } + } + } + @SubscribeEvent public void onRenderGameOverlay(RenderGameOverlayEvent event) { if(event.type != null && event.type.equals(RenderGameOverlayEvent.ElementType.BOSSHEALTH) && 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 65f6545e..53cc4639 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/auction/APIManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/auction/APIManager.java @@ -168,7 +168,9 @@ public class APIManager { args.put("uuid", ""+uuid); manager.hypixelApi.getHypixelApiAsync(manager.config.apiKey.value, "skyblock/profiles", args, jsonObject -> { - if(jsonObject.has("success") && jsonObject.get("success").getAsBoolean()) { + if(jsonObject == null) return; + + if(jsonObject.has("success") && jsonObject.get("success").getAsBoolean()) { incPlayerInfoVersion(); playerInformation = jsonObject.get("profiles").getAsJsonArray(); if(playerInformation == null) return; @@ -366,7 +368,9 @@ public class APIManager { args.put("page", ""+page); manager.hypixelApi.getHypixelApiAsync(manager.config.apiKey.value, "skyblock/auctions", args, jsonObject -> { - if (jsonObject.get("success").getAsBoolean()) { + if(jsonObject == null) return; + + if (jsonObject.get("success").getAsBoolean()) { totalPages = jsonObject.get("totalPages").getAsInt(); activeAuctions = jsonObject.get("totalAuctions").getAsInt(); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java b/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java index 17ce216e..77fa8425 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java @@ -103,7 +103,7 @@ public class CustomAH extends Gui { private Category CATEGORY_TRAVEL_SCROLLS = new Category("travelscroll", "Travel Scrolls", "map"); private Category CATEGORY_REFORGE_STONES = new Category("reforgestone", "Reforge Stones", "anvil"); - private Category CATEGORY_RUNES = new Category("rune", "Runes", "end_portal_frame"); + private Category CATEGORY_RUNES = new Category("rune", "Runes", "magma_cream"); private Category CATEGORY_FURNITURE = new Category("furniture", "Furniture", "armor_stand"); private Category CATEGORY_COMBAT = new Category("weapon", "Combat", "golden_sword", CATEGORY_SWORD, diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java index 81ecc9b4..9607a888 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java @@ -1,5 +1,6 @@ package io.github.moulberry.notenoughupdates.profileviewer; +import com.google.common.base.Splitter; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -7,35 +8,49 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.minecraft.MinecraftProfileTexture; import com.mojang.authlib.properties.Property; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; +import io.github.moulberry.notenoughupdates.cosmetics.ShaderManager; +import io.github.moulberry.notenoughupdates.questing.SBScoreboardData; import io.github.moulberry.notenoughupdates.util.TexLoc; import io.github.moulberry.notenoughupdates.util.Utils; +import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityOtherPlayerMP; +import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.network.NetworkPlayerInfo; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; import net.minecraft.client.resources.SkinManager; +import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockPos; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.Charsets; +import org.luaj.vm2.ast.Str; import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL14; +import org.lwjgl.opengl.GL20; import java.awt.*; +import java.io.IOException; import java.nio.charset.Charset; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.UUID; +import java.util.*; +import java.util.List; public class GuiProfileViewer extends GuiScreen { @@ -48,6 +63,14 @@ public class GuiProfileViewer extends GuiScreen { private int guiLeft; private int guiTop; + private float backgroundRotation = 0; + + private long currentTime = 0; + private long lastTime = 0; + private long startTime = 0; + + private List tooltipToDisplay = null; + public enum ProfileViewerPage { BASIC } @@ -58,6 +81,9 @@ public class GuiProfileViewer extends GuiScreen { @Override public void drawScreen(int mouseX, int mouseY, float partialTicks) { + currentTime = System.currentTimeMillis(); + if(startTime == 0) startTime = currentTime; + super.drawScreen(mouseX, mouseY, partialTicks); drawDefaultBackground(); @@ -67,6 +93,12 @@ public class GuiProfileViewer extends GuiScreen { break; } + lastTime = currentTime; + + if(tooltipToDisplay != null) { + Utils.drawHoveringText(tooltipToDisplay, mouseX, mouseY, width, height, -1, Minecraft.getMinecraft().fontRendererObj); + tooltipToDisplay = null; + } } private String niceUuid(String uuidStr) { @@ -85,33 +117,196 @@ public class GuiProfileViewer extends GuiScreen { return niceAucId.toString(); } + public EntityOtherPlayerMP getEntityPlayer() { + return entityPlayer; + } + private EntityOtherPlayerMP entityPlayer = null; private ResourceLocation playerLocationSkin = null; private ResourceLocation playerLocationCape = null; private String skinType = null; - TexLoc tl = new TexLoc(0, 0, Keyboard.KEY_M); - TexLoc tl2 = new TexLoc(0, 0, Keyboard.KEY_B); - TexLoc tl3 = new TexLoc(0, 0, Keyboard.KEY_J); + private HashMap panoramasMap = new HashMap<>(); + + public ResourceLocation[] getPanoramasForLocation(String location, String identifier) { + if(panoramasMap.containsKey(location)) return panoramasMap.get(location); + try { + ResourceLocation[] panoramasArray = new ResourceLocation[6]; + for(int i=0; i<6; i++) { + panoramasArray[i] = new ResourceLocation("notenoughupdates:panoramas/"+location+"_"+identifier+"/panorama_"+i+".png"); + Minecraft.getMinecraft().getResourceManager().getResource(panoramasArray[i]); + } + panoramasMap.put(location, panoramasArray); + return panoramasArray; + } catch(IOException e) { + try { + ResourceLocation[] panoramasArray = new ResourceLocation[6]; + for(int i=0; i<6; i++) { + panoramasArray[i] = new ResourceLocation("notenoughupdates:panoramas/"+location+"/panorama_"+i+".png"); + Minecraft.getMinecraft().getResourceManager().getResource(panoramasArray[i]); + } + panoramasMap.put(location, panoramasArray); + return panoramasArray; + } catch(IOException e2) { + ResourceLocation[] panoramasArray = new ResourceLocation[6]; + for(int i=0; i<6; i++) { + panoramasArray[i] = new ResourceLocation("notenoughupdates:panoramas/unknown/panorama_"+i+".png"); + } + panoramasMap.put(location, panoramasArray); + return panoramasArray; + } + } + } + + private int backgroundClickedX = -1; + + private static char[] c = new char[]{'k', 'm', 'b', 't'}; + + public static String shortNumberFormat(double n, int iteration) { + double d = ((long) n / 100) / 10.0; + boolean isRound = (d * 10) %10 == 0; + return (d < 1000? + ((d > 99.9 || isRound || (!isRound && d > 9.99)? + (int) d * 10 / 10 : d + "" + ) + "" + c[iteration]) + : shortNumberFormat(d, iteration+1)); + } + private void drawBasicPage(int mouseX, int mouseY, float partialTicks) { + FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; + this.sizeX = 431; this.sizeY = 202; this.guiLeft = (this.width-this.sizeX)/2; this.guiTop = (this.height-this.sizeY)/2; + String location = null; + JsonObject status = profile.getPlayerStatus(); + if(status != null && status.has("mode")) { + location = status.get("mode").getAsString(); + } + + int extraRotation = 0; + if(Mouse.isButtonDown(0)) { + if(backgroundClickedX == -1) { + if(mouseX > guiLeft+23 && mouseX < guiLeft+23+81) { + if(mouseY > guiTop+44 && mouseY < guiTop+44+108) { + backgroundClickedX = mouseX; + } + } + } + } else { + if(backgroundClickedX != -1) { + backgroundRotation += mouseX - backgroundClickedX; + backgroundClickedX = -1; + } + } + if(backgroundClickedX == -1) { + backgroundRotation += (currentTime - lastTime)/400f; + } else { + extraRotation = mouseX - backgroundClickedX; + } + backgroundRotation %= 360; + + String panoramaIdentifier = "day"; + if(SBScoreboardData.getInstance().currentTimeDate != null) { + if(SBScoreboardData.getInstance().currentTimeDate.before(new Date(0, 0, 0, 6, 0, 0))) { + if(SBScoreboardData.getInstance().currentTimeDate.after(new Date(0, 0, 0, 20, 0, 0))) { + panoramaIdentifier = "night"; + } + } + } + + Panorama.drawPanorama(-backgroundRotation-extraRotation, guiLeft+23, guiTop+44, 81, 108, + getPanoramasForLocation(location==null?"unknown":location, panoramaIdentifier)); + Minecraft.getMinecraft().getTextureManager().bindTexture(pv_basic); Utils.drawTexturedRect(guiLeft, guiTop, sizeX, sizeY, GL11.GL_NEAREST); - tl.handleKeyboardInput(); - tl2.handleKeyboardInput(); - tl3.handleKeyboardInput(); + if(entityPlayer != null && profile.getHypixelProfile() != null) { + String rank = Utils.getElementAsString(profile.getHypixelProfile().get("rank"), Utils.getElementAsString(profile.getHypixelProfile().get("newPackageRank"), "NONE")); + EnumChatFormatting rankPlusColorECF = EnumChatFormatting.getValueByName(Utils.getElementAsString(profile.getHypixelProfile().get("rankPlusColor"), "WHITE")); + String rankPlusColor = EnumChatFormatting.WHITE.toString(); + if(rankPlusColorECF != null) { + rankPlusColor = rankPlusColorECF.toString(); + } + + JsonObject misc = Utils.getConstant("misc"); + if(misc != null) { + if(misc.has("ranks")) { + String rankName = Utils.getElementAsString(Utils.getElement(misc, "ranks."+rank+".tag"), null); + String rankColor = Utils.getElementAsString(Utils.getElement(misc, "ranks."+rank+".color"), "7"); + String rankPlus = Utils.getElementAsString(Utils.getElement(misc, "ranks."+rank+".plus"), ""); + + String name = entityPlayer.getName(); + + if(misc.has("special_bois")) { + JsonArray special_bois = misc.get("special_bois").getAsJsonArray(); + for(int i=0; i guiLeft+132 && mouseX < guiLeft+212) { + if(mouseY > guiTop+32+12.5f*i && mouseY < guiTop+40+12.5f*i) { + List split = splitter.splitToList(statNamePretty); + PlayerStats.Stats baseStats = PlayerStats.getBaseStats(); + tooltipToDisplay = new ArrayList<>(); + tooltipToDisplay.add(statNamePretty); + int base = Math.round(baseStats.get(statName)); + tooltipToDisplay.add(EnumChatFormatting.GRAY+"Base "+split.get(1)+": "+EnumChatFormatting.GREEN+base+" "+split.get(0)); + int passive = Math.round(profile.getPassiveStats(null).get(statName)-baseStats.get(statName)); + tooltipToDisplay.add(EnumChatFormatting.GRAY+"Passive "+split.get(1)+" Bonus: +"+EnumChatFormatting.YELLOW+passive+" "+split.get(0)); + int itemBonus = Math.round(stats.get(statName)-profile.getPassiveStats(null).get(statName)); + tooltipToDisplay.add(EnumChatFormatting.GRAY+"Item "+split.get(1)+" Bonus: +"+EnumChatFormatting.DARK_PURPLE+itemBonus+" "+split.get(0)); + int finalStat = Math.round(stats.get(statName)); + tooltipToDisplay.add(EnumChatFormatting.GRAY+"Final "+split.get(1)+": +"+EnumChatFormatting.RED+finalStat+" "+split.get(0)); } } } - - GlStateManager.color(1, 1, 1, 1); - Utils.drawStringCenteredScaledMaxWidth(statNamePretty + " " + EnumChatFormatting.WHITE + val, Minecraft.getMinecraft().fontRendererObj, - guiLeft+172f, guiTop+36+12.5f*i, true, 85, Color.BLACK.getRGB()); + } else { + //"stats not enabled in api" } - int position = 0; - for(Map.Entry entry : skillToSkillNameMap.entrySet()) { - int yPosition = position % 7; - int xPosition = position / 7; + if(skillInfo != null) { + int position = 0; + for(Map.Entry entry : ProfileViewer.getSkillToSkillDisplayMap().entrySet()) { + int yPosition = position % 7; + int xPosition = position / 7; - String skillName = entry.getValue(); + String skillName = entry.getValue().getDisplayName(); - float level = (int)skillInfo.get(entry.getKey()).getAsFloat(); + float level = Utils.getElementAsFloat(skillInfo.get("level_"+entry.getKey()), 0); + int levelFloored = (int)Math.floor(level); - for(int xOff=-1; xOff<=1; xOff++) { - for(int yOff=-1; yOff<=1; yOff++) { - if(Math.abs(xOff) != Math.abs(yOff)) { - //Utils.drawStringCenteredScaledMaxWidth(Utils.cleanColourNotModifiers(skillName) + " " + level, Minecraft.getMinecraft().fontRendererObj, - // guiLeft+tl.x+tl2.x*xPosition+xOff, guiTop+tl.y+tl2.y*yPosition+yOff, false, 85, new Color(100, 100, 100, 100).getRGB()); + int x = guiLeft+237+86*xPosition; + int y = guiTop+31+21*yPosition; + + for(int xOff=-2; xOff<=2; xOff++) { + for(int yOff=-2; yOff<=2; yOff++) { + if(Math.abs(xOff) != Math.abs(yOff)) { + Utils.drawStringCenteredYScaledMaxWidth(Utils.cleanColourNotModifiers(skillName) + " " + levelFloored, Minecraft.getMinecraft().fontRendererObj, + x+14+xOff/2f, y+yOff/2f, false, 60, new Color(0, 0, 0, + 200/Math.max(Math.abs(xOff), Math.abs(yOff))).getRGB()); + } } } - } - GlStateManager.color(1, 1, 1, 1); - Utils.drawStringCenteredScaledMaxWidth(skillName + " " + EnumChatFormatting.WHITE + level, Minecraft.getMinecraft().fontRendererObj, - guiLeft+277+86*xPosition, guiTop+36+21*yPosition, true, 85, Color.BLACK.getRGB()); + GlStateManager.color(1, 1, 1, 1); + Utils.drawStringCenteredYScaledMaxWidth(EnumChatFormatting.WHITE + skillName + " " + EnumChatFormatting.WHITE + levelFloored, Minecraft.getMinecraft().fontRendererObj, + x+14, y, false, 60, 4210752); - position++; + if(skillInfo.get("maxed_"+entry.getKey()).getAsBoolean()) { + renderGoldBar(x, y+6, 80); + } else { + renderBar(x, y+6, 80, level%1); + } + + if(mouseX > x && mouseX < x+80) { + if(mouseY > y+4 && mouseY < y+13) { + String levelStr; + if(skillInfo.get("maxed_"+entry.getKey()).getAsBoolean()) { + levelStr = EnumChatFormatting.GOLD+"MAXED!"; + } else { + int maxXp = (int)skillInfo.get("maxxp_"+entry.getKey()).getAsFloat(); + levelStr = EnumChatFormatting.DARK_PURPLE.toString() + shortNumberFormat(Math.round((level%1)*maxXp), 0) + "/" + shortNumberFormat(maxXp, 0); + } + + tooltipToDisplay = Utils.createList(levelStr); + } + } + + GL11.glTranslatef((x), (y-8*0.7f), 0); + GL11.glScalef(0.7f, 0.7f, 1); + Utils.drawItemStackLinear(entry.getValue(), 0, 0); + GL11.glScalef(1/0.7f, 1/0.7f, 1); + GL11.glTranslatef(-(x), -(y-8*0.7f), 0); + + position++; + } + } else { + //api not enabled } } - private static final LinkedHashMap skillToSkillNameMap = new LinkedHashMap<>(); - static { - skillToSkillNameMap.put("level_skill_taming", "Taming"); - skillToSkillNameMap.put("level_skill_mining", "Mining"); - skillToSkillNameMap.put("level_skill_foraging", "Foraging"); - skillToSkillNameMap.put("level_skill_enchanting", "Enchanting"); - skillToSkillNameMap.put("level_skill_carpentry", "Carpentry"); - skillToSkillNameMap.put("level_skill_farming", "Farming"); - skillToSkillNameMap.put("level_skill_combat", "Combat"); - skillToSkillNameMap.put("level_skill_fishing", "Fishing"); - skillToSkillNameMap.put("level_skill_alchemy", "Alchemy"); - skillToSkillNameMap.put("level_skill_runecrafting", "Runecrafting"); - skillToSkillNameMap.put("level_slayer_zombie", "Revenant Slayer"); - skillToSkillNameMap.put("level_slayer_spider", "Tarantula Slayer"); - skillToSkillNameMap.put("level_slayer_wolf", "Sven Slayer"); - } + private void renderGoldBar(float x, float y, float xSize) { - /*private void renderBar(float x, float y, float xSize, float ySize, float completed) { - this.mc.getTextureManager().bindTexture(Gui.icons); + Minecraft.getMinecraft().getTextureManager().bindTexture(Gui.icons); + ShaderManager shaderManager = ShaderManager.getInstance(); + shaderManager.loadShader("make_gold"); + shaderManager.loadData("make_gold", "amount", (startTime-System.currentTimeMillis())/10000f); - float yScale = ySize/5; + Utils.drawTexturedRect(x, y, xSize/2f, 5, 0/256f, (xSize/2f)/256f, 79/256f, 84/256f, GL11.GL_NEAREST); + Utils.drawTexturedRect(x+xSize/2f, y, xSize/2f, 5, (182-xSize/2f)/256f, 182/256f, 79/256f, 84/256f, GL11.GL_NEAREST); + GL20.glUseProgram(0); + } - if (i > 0) - { - int j = 182; - int k = (int)(this.mc.thePlayer.experience * (float)(j + 1)); - int l = p_175176_1_.getScaledHeight() - 32 + 3; + private void renderBar(float x, float y, float xSize, float completed) { + Minecraft.getMinecraft().getTextureManager().bindTexture(Gui.icons); - Utils.drawTexturedRect(x, y, xSize, ); + completed = Math.round(completed/0.05f)*0.05f; - this.drawTexturedModalRect(p_175176_2_, l, 0, 64, j, 5); + float notcompleted = 1-completed; - if (k > 0) - { - this.drawTexturedModalRect(p_175176_2_, l, 0, 69, k, 5); - } + int displayNum = 0;//tl.x%5; + + GlStateManager.color(1, 1, 1, 1); + float width = 0; + + if(completed < 0.5f && (displayNum == 1 || displayNum == 0)) { + width = (0.5f - completed) * xSize; + Utils.drawTexturedRect(x+xSize*completed, y, width, 5, xSize*completed/256f, (xSize/2f)/256f, 74/256f, 79/256f, GL11.GL_NEAREST); + } + if(completed < 1f && (displayNum == 2 || displayNum == 0)) { + width = Math.min(xSize*notcompleted, xSize/2f); + Utils.drawTexturedRect(x+(xSize/2f)+Math.max(xSize*(completed-0.5f), 0), y, width, 5, + (182-(xSize/2f)+Math.max(xSize*(completed-0.5f), 0))/256f, 182/256f, 74/256f, 79/256f, GL11.GL_NEAREST); } - if (this.mc.thePlayer.experienceLevel > 0) - { - this.mc.mcProfiler.startSection("expLevel"); - int k1 = 8453920; - String s = "" + this.mc.thePlayer.experienceLevel; - int l1 = (p_175176_1_.getScaledWidth() - this.getFontRenderer().getStringWidth(s)) / 2; - int i1 = p_175176_1_.getScaledHeight() - 31 - 4; - int j1 = 0; - this.getFontRenderer().drawString(s, l1 + 1, i1, 0); - this.getFontRenderer().drawString(s, l1 - 1, i1, 0); - this.getFontRenderer().drawString(s, l1, i1 + 1, 0); - this.getFontRenderer().drawString(s, l1, i1 - 1, 0); - this.getFontRenderer().drawString(s, l1, i1, k1); - this.mc.mcProfiler.endSection(); + if(completed > 0f && (displayNum == 3 || displayNum == 0)) { + width = Math.min(xSize*completed, xSize/2f); + Utils.drawTexturedRect(x, y, width, 5, + 0/256f, width/256f, 79/256f, 84/256f, GL11.GL_NEAREST); } - }*/ + if(completed > 0.5f && (displayNum == 4 || displayNum == 0)) { + width = Math.max(xSize*(completed-0.5f), xSize/2f); + Utils.drawTexturedRect(x+(xSize/2f), y, width, 5, + (182-(xSize/2f))/256f, (182-(xSize/2f)+width)/256f, 79/256f, 84/256f, GL11.GL_NEAREST); + } + } + private static final ResourceLocation shadowTextures = new ResourceLocation("textures/misc/shadow.png"); public static void drawEntityOnScreen(int posX, int posY, int scale, float mouseX, float mouseY, EntityLivingBase ent) { GlStateManager.enableColorMaterial(); GlStateManager.pushMatrix(); GlStateManager.translate((float)posX, (float)posY, 50.0F); GlStateManager.scale((float)(-scale), (float)scale, (float)scale); GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); - float f = ent.renderYawOffset; + float renderYawOffset = ent.renderYawOffset; float f1 = ent.rotationYaw; float f2 = ent.rotationPitch; float f3 = ent.prevRotationYawHead; @@ -288,19 +541,54 @@ public class GuiProfileViewer extends GuiScreen { GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F); RenderHelper.enableStandardItemLighting(); GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(-((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(25, 1.0F, 0.0F, 0.0F); ent.renderYawOffset = (float)Math.atan((double)(mouseX / 40.0F)) * 20.0F; ent.rotationYaw = (float)Math.atan((double)(mouseX / 40.0F)) * 40.0F; ent.rotationPitch = -((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F; ent.rotationYawHead = ent.rotationYaw; ent.prevRotationYawHead = ent.rotationYaw; - GlStateManager.translate(0.0F, 0.0F, 0.0F); RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager(); rendermanager.setPlayerViewY(180.0F); rendermanager.setRenderShadow(false); rendermanager.renderEntityWithPosYaw(ent, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F); - rendermanager.setRenderShadow(true); - ent.renderYawOffset = f; + + /*{ + GlStateManager.enableBlend(); + GlStateManager.blendFunc(770, 771); + rendermanager.renderEngine.bindTexture(shadowTextures); + GlStateManager.depthMask(false); + float f = 0.5f; + + if (ent instanceof EntityLiving) { + EntityLiving entityliving = (EntityLiving)ent; + f *= entityliving.getRenderSizeModifier(); + + if (entityliving.isChild()) + { + f *= 0.5F; + } + } + + /*Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + + GlStateManager.color(1, 1, 1, 0.5f); + Utils.drawTexturedRect(-0.5f*tl.x, -0.5f*tl.x, 1*tl.x, 1*tl.x); + + /*for (BlockPos blockpos : BlockPos.getAllInBoxMutable(new BlockPos(i, k, i1), new BlockPos(j, l, j1))) { + Block block = world.getBlockState(blockpos.down()).getBlock(); + + if (block.getRenderType() != -1 && world.getLightFromNeighbors(blockpos) > 3) { + this.func_180549_a(block, x, y, z, blockpos, shadowAlpha, f, d2, d3, d4); + } + } + + GlStateManager.disableBlend(); + GlStateManager.depthMask(true); + }*/ + + ent.renderYawOffset = renderYawOffset; ent.rotationYaw = f1; ent.rotationPitch = f2; ent.prevRotationYawHead = f3; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/Panorama.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/Panorama.java new file mode 100644 index 00000000..bf49e616 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/Panorama.java @@ -0,0 +1,151 @@ +package io.github.moulberry.notenoughupdates.profileviewer; + +import io.github.moulberry.notenoughupdates.util.TexLoc; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.glu.Project; + +public class Panorama { + + private static TexLoc tl = new TexLoc(97, 19, Keyboard.KEY_P); + private static TexLoc tl2 = new TexLoc(37, 80, Keyboard.KEY_L); + + private static ResourceLocation backgroundTexture = null; + + private static int lastWidth = 0; + private static int lastHeight = 0; + + public static void drawPanorama(float angle, int x, int y, int width, int height, ResourceLocation[] panoramas) { + Minecraft.getMinecraft().getFramebuffer().unbindFramebuffer(); + //GlStateManager.viewport(0, 0, 1024, 1024); + + ScaledResolution scaledresolution = new ScaledResolution(Minecraft.getMinecraft()); + + GL11.glViewport(0, 0, width*scaledresolution.getScaleFactor(), height*scaledresolution.getScaleFactor()); + + tl.handleKeyboardInput(); + tl2.handleKeyboardInput(); + float fov = 97; + + { + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + GlStateManager.matrixMode(5889); + GlStateManager.pushMatrix(); + GlStateManager.loadIdentity(); + Project.gluPerspective(fov, (float)height/width, 0.05F, 10.0F); + GlStateManager.matrixMode(5888); + GlStateManager.pushMatrix(); + GlStateManager.loadIdentity(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.rotate(180F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(90, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(19, 1.0F, 0.0F, 0.0F); + //GlStateManager.rotate(tl.x, 0.0F, 0.0F, 1.0F); + GlStateManager.enableBlend(); + GlStateManager.disableAlpha(); + GlStateManager.disableCull(); + GlStateManager.depthMask(false); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + + GlStateManager.pushMatrix(); + + GlStateManager.translate(0, 0.37f, 0.8f); + + //GlStateManager.rotate(MathHelper.sin(currentTime/1.6f) * 5.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(angle, 0.0F, 1.0F, 0.0F); + + + for (int k = 0; k < 6; ++k) { + GlStateManager.pushMatrix(); + + switch (k) { + case 1: + GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F); break; + case 2: + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); break; + case 3: + GlStateManager.rotate(-90.0F, 0.0F, 1.0F, 0.0F); break; + case 4: + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); break; + case 5: + GlStateManager.rotate(-90.0F, 1.0F, 0.0F, 0.0F); break; + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(panoramas[k]); + float splits = 0.1f; + for(float x1=0; x1<1; x1+=splits) { + for(float y1=0; y1<1; y1+=splits) { + worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + + for(int i=0; i<4; i++) { + float x2 = (i == 0 || i == 3) ? x1 : x1+splits; + float y2 = (i >= 2) ? y1 : y1+splits; + + float xr = x2*2-1; + float yr = y2*2-1; + + float distSq = xr*xr+yr*yr+1; + float scale = (float)Math.sqrt(3/distSq); + + worldrenderer.pos(xr*scale , yr*scale , scale).tex(x2, y2).color(255, 255, 255, 255).endVertex(); + + } + + tessellator.draw(); + } + } + + GlStateManager.popMatrix(); + } + + GlStateManager.popMatrix(); + GlStateManager.colorMask(true, true, true, false); + + worldrenderer.setTranslation(0.0D, 0.0D, 0.0D); + GlStateManager.colorMask(true, true, true, true); + GlStateManager.matrixMode(5889); + GlStateManager.popMatrix(); + GlStateManager.matrixMode(5888); + GlStateManager.popMatrix(); + GlStateManager.depthMask(true); + GlStateManager.enableCull(); + GlStateManager.enableDepth(); + } + + if(backgroundTexture == null || lastWidth != width*scaledresolution.getScaleFactor() || lastHeight != height*scaledresolution.getScaleFactor()) { + DynamicTexture viewportTexture = new DynamicTexture(width*scaledresolution.getScaleFactor(), height*scaledresolution.getScaleFactor()); + backgroundTexture = Minecraft.getMinecraft().getTextureManager().getDynamicTextureLocation("background", viewportTexture); + lastWidth = width*scaledresolution.getScaleFactor(); + lastHeight = height*scaledresolution.getScaleFactor(); + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(backgroundTexture); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + GL11.glCopyTexSubImage2D(GL11.GL_TEXTURE_2D, 0, 0, 0, 0, 0, width*scaledresolution.getScaleFactor(), height*scaledresolution.getScaleFactor()); + + Minecraft.getMinecraft().getFramebuffer().bindFramebuffer(true); + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); + worldrenderer.pos(x, y+height, 0) + .tex(0, 1).endVertex(); + worldrenderer.pos(x+width, y+height, 0) + .tex(0, 0).endVertex(); + worldrenderer.pos(x+width, y, 0) + .tex(1, 0).endVertex(); + worldrenderer.pos(x, y, 0) + .tex(1, 1).endVertex(); + tessellator.draw(); + } + +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java index 25b7356d..d0d1e5fc 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java @@ -114,7 +114,7 @@ public class PlayerStats { return stats; } - public static Stats getFairyBonus(int fairyExchanges) { + private static Stats getFairyBonus(int fairyExchanges) { Stats bonus = new Stats(); bonus.addStat(SPEED, fairyExchanges/10); @@ -128,7 +128,7 @@ public class PlayerStats { return bonus; } - public static Stats getSkillBonus(JsonObject skillInfo) { + private static Stats getSkillBonus(JsonObject skillInfo) { JsonObject bonuses = Utils.getConstant("bonuses"); if(bonuses == null) return null; @@ -155,7 +155,7 @@ public class PlayerStats { return skillBonus; } - public static Stats getPetBonus(JsonObject profile) { + private static Stats getPetBonus(JsonObject profile) { JsonObject bonuses = Utils.getConstant("bonuses"); if(bonuses == null) return null; @@ -192,7 +192,7 @@ public class PlayerStats { return petBonus; } - public static float harpBonus(JsonObject profile) { + private static float harpBonus(JsonObject profile) { String talk_to_melody = Utils.getElementAsString(Utils.getElement(profile, "objectives.talk_to_melody.status"), "INCOMPLETE"); if(talk_to_melody.equalsIgnoreCase("COMPLETE")) { return 26; @@ -205,7 +205,6 @@ public class PlayerStats { public static Stats getPassiveBonuses(JsonObject skillInfo, JsonObject profile) { Stats passiveBonuses = new Stats(); - //TODO: null checking Stats fairyBonus = getFairyBonus((int)Utils.getElementAsFloat(Utils.getElement(profile, "fairy_exchanges"), 0)); Stats skillBonus = getSkillBonus(skillInfo); Stats petBonus = getPetBonus(profile); @@ -220,7 +219,7 @@ public class PlayerStats { return passiveBonuses; } - public static String getFullset(JsonArray armor, int ignore) { + private static String getFullset(JsonArray armor, int ignore) { String fullset = null; for(int i=0; i=0; i--) { String line = lore.get(i).getAsString(); for(String rarity : rarityArr) { @@ -365,7 +364,7 @@ public class PlayerStats { STAT_PATTERN_MAP.put("intelligence", INTELLIGENCE_PATTERN); STAT_PATTERN_MAP.put("sea_creature_chance", SCC_PATTERN); } - public static Stats getStatForItem(String internalname, JsonObject item, JsonArray lore) { + private static Stats getStatForItem(String internalname, JsonObject item, JsonArray lore) { Stats stats = new Stats(); for(int i=0; i= 0) { + if(!talismanOnly || checkItemType(item.get("lore").getAsJsonArray(), true, "ACCESSORY", "HATCCESSORY") >= 0) { Stats itemBonus = getStatForItem(internalname, item, item.get("lore").getAsJsonArray()); itemBonuses.put(internalname, itemBonus); @@ -457,7 +456,7 @@ public class PlayerStats { return itemBonusesStats; } - public static float getStatMult(JsonObject inventoryInfo) { + private static float getStatMult(JsonObject inventoryInfo) { float mult = 1f; JsonArray armor = Utils.getElement(inventoryInfo, "inv_armor").getAsJsonArray(); @@ -485,7 +484,7 @@ public class PlayerStats { return mult; } - public static void applyLimits(Stats stats, JsonObject inventoryInfo) { + private static void applyLimits(Stats stats, JsonObject inventoryInfo) { //>0 JsonArray armor = Utils.getElement(inventoryInfo, "inv_armor").getAsJsonArray(); @@ -508,6 +507,8 @@ public class PlayerStats { } public static Stats getStats(JsonObject skillInfo, JsonObject inventoryInfo, JsonObject collectionInfo, JsonObject profile) { + if(skillInfo == null || inventoryInfo == null || collectionInfo == null || profile == null) return null; + JsonArray armor = Utils.getElement(inventoryInfo, "inv_armor").getAsJsonArray(); JsonArray inventory = Utils.getElement(inventoryInfo, "inv_contents").getAsJsonArray(); JsonArray talisman_bag = Utils.getElement(inventoryInfo, "talisman_bag").getAsJsonArray(); 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 db90cca8..5706dee9 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java @@ -9,17 +9,20 @@ import io.github.moulberry.notenoughupdates.NEUManager; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.util.Utils; import net.minecraft.client.Minecraft; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; -import java.util.Base64; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; import java.util.regex.Matcher; @@ -33,6 +36,27 @@ public class ProfileViewer { this.manager = manager; } + private static final LinkedHashMap skillToSkillDisplayMap = new LinkedHashMap<>(); + static { + skillToSkillDisplayMap.put("skill_taming", Utils.createItemStack(Items.spawn_egg, EnumChatFormatting.LIGHT_PURPLE+"Taming")); + skillToSkillDisplayMap.put("skill_mining", Utils.createItemStack(Items.stone_pickaxe, EnumChatFormatting.GRAY+"Mining")); + skillToSkillDisplayMap.put("skill_foraging", Utils.createItemStack(Item.getItemFromBlock(Blocks.sapling), EnumChatFormatting.DARK_GREEN+"Foraging")); + skillToSkillDisplayMap.put("skill_enchanting", Utils.createItemStack(Item.getItemFromBlock(Blocks.enchanting_table), EnumChatFormatting.GREEN+"Enchanting")); + skillToSkillDisplayMap.put("skill_carpentry", Utils.createItemStack(Item.getItemFromBlock(Blocks.crafting_table), EnumChatFormatting.DARK_RED+"Carpentry")); + skillToSkillDisplayMap.put("skill_farming", Utils.createItemStack(Items.golden_hoe, EnumChatFormatting.YELLOW+"Farming")); + skillToSkillDisplayMap.put("skill_combat", Utils.createItemStack(Items.stone_sword, EnumChatFormatting.RED+"Combat")); + skillToSkillDisplayMap.put("skill_fishing", Utils.createItemStack(Items.fishing_rod, EnumChatFormatting.AQUA+"Fishing")); + skillToSkillDisplayMap.put("skill_alchemy", Utils.createItemStack(Items.brewing_stand, EnumChatFormatting.BLUE+"Alchemy")); + skillToSkillDisplayMap.put("skill_runecrafting", Utils.createItemStack(Items.magma_cream, EnumChatFormatting.DARK_PURPLE+"Runecrafting")); + skillToSkillDisplayMap.put("slayer_zombie", Utils.createItemStack(Items.rotten_flesh, EnumChatFormatting.GOLD+"Rev Slayer")); + skillToSkillDisplayMap.put("slayer_spider", Utils.createItemStack(Items.spider_eye, EnumChatFormatting.GOLD+"Tara Slayer")); + skillToSkillDisplayMap.put("slayer_wolf", Utils.createItemStack(Items.bone, EnumChatFormatting.GOLD+"Sven Slayer")); + } + + public static Map getSkillToSkillDisplayMap() { + return Collections.unmodifiableMap(skillToSkillDisplayMap); + } + public class Profile { private final String uuid; private String latestProfile = null; @@ -44,13 +68,38 @@ public class ProfileViewer { private final HashMap skillInfoMap = new HashMap<>(); private final HashMap inventoryInfoMap = new HashMap<>(); private final HashMap collectionInfoMap = new HashMap<>(); + private JsonObject playerStatus = null; private PlayerStats.Stats stats = null; + private PlayerStats.Stats passiveStats = null; public Profile(String uuid) { this.uuid = uuid; } private AtomicBoolean updatingPlayerInfoState = new AtomicBoolean(false); + private AtomicBoolean updatingPlayerStatusState = new AtomicBoolean(false); + + public JsonObject getPlayerStatus() { + if(playerStatus != null) return playerStatus; + if(updatingPlayerStatusState.get()) return null; + + updatingPlayerStatusState.set(true); + + HashMap args = new HashMap<>(); + args.put("uuid", ""+uuid); + manager.hypixelApi.getHypixelApiAsync(manager.config.apiKey.value, "status", + args, jsonObject -> { + if(jsonObject == null) return; + + updatingPlayerStatusState.set(false); + if(jsonObject.has("success") && jsonObject.get("success").getAsBoolean()) { + playerStatus = jsonObject.get("session").getAsJsonObject(); + } + }, () -> updatingPlayerStatusState.set(false) + ); + + return null; + } public JsonArray getPlayerInformation(Runnable runnable) { if(playerInformation != null) return playerInformation; @@ -62,6 +111,8 @@ public class ProfileViewer { args.put("uuid", ""+uuid); manager.hypixelApi.getHypixelApiAsync(manager.config.apiKey.value, "skyblock/profiles", args, jsonObject -> { + if(jsonObject == null) return; + updatingPlayerInfoState.set(false); if(jsonObject.has("success") && jsonObject.get("success").getAsBoolean()) { playerInformation = jsonObject.get("profiles").getAsJsonArray(); @@ -79,17 +130,21 @@ public class ProfileViewer { if(members.has(uuid)) { JsonObject member = members.get(uuid).getAsJsonObject(); - long last_save = member.get("last_save").getAsLong(); - if(last_save > backupLastSave) { - backupLastSave = last_save; - backup = cute_name; + if(member.has("last_save")) { + long last_save = member.get("last_save").getAsLong(); + if(last_save > backupLastSave) { + backupLastSave = last_save; + backup = cute_name; + } } } } System.out.println("accepting runnable"); - runnable.run(); + if(runnable != null) runnable.run(); latestProfile = backup; } + }, () -> { + updatingPlayerInfoState.set(false); } ); @@ -103,6 +158,10 @@ public class ProfileViewer { if(profileMap.containsKey(profileId)) return profileMap.get(profileId); for(int i=0; i xp) { - return level + xp/levelXp; + if(cumulative) { + float previous = 0; + if(level > 0) previous = levelingArray.get(level-1).getAsFloat(); + levelObj.maxXpForLevel = (levelXp-previous); + levelObj.level = 1 + level + (xp-levelXp)/levelObj.maxXpForLevel; + } else { + levelObj.maxXpForLevel = levelXp; + levelObj.level = level + xp/levelXp; + } + return levelObj; } else { - xp -= levelXp; + if(!cumulative) xp -= levelXp; } } - return levelingArray.size(); + levelObj.level = levelingArray.size(); + levelObj.maxed = true; + return levelObj; } public JsonObject getSkillInfo(String profileId) { @@ -164,7 +242,7 @@ public class ProfileViewer { float experience_slayer_zombie = Utils.getElementAsFloat(Utils.getElement(profileInfo, "slayer_bosses.zombie.xp"), 0); float experience_slayer_spider = Utils.getElementAsFloat(Utils.getElement(profileInfo, "slayer_bosses.spider.xp"), 0); - float experience_slayer_wolf = Utils.getElementAsFloat(Utils.getElement(profileInfo, "slayer_bosses.zombie.xp"), 0); + float experience_slayer_wolf = Utils.getElementAsFloat(Utils.getElement(profileInfo, "slayer_bosses.wolf.xp"), 0); float totalSkillXP = experience_skill_taming + experience_skill_mining + experience_skill_foraging + experience_skill_enchanting + experience_skill_carpentry + experience_skill_farming @@ -193,20 +271,65 @@ public class ProfileViewer { skillInfo.addProperty("experience_slayer_spider", experience_slayer_spider); skillInfo.addProperty("experience_slayer_wolf", experience_slayer_wolf); - skillInfo.addProperty("level_skill_taming", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_taming)); - skillInfo.addProperty("level_skill_mining", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_mining)); - skillInfo.addProperty("level_skill_foraging", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_foraging)); - skillInfo.addProperty("level_skill_enchanting", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_enchanting)); - skillInfo.addProperty("level_skill_carpentry", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_carpentry)); - skillInfo.addProperty("level_skill_farming", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_farming)); - skillInfo.addProperty("level_skill_combat", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_combat)); - skillInfo.addProperty("level_skill_fishing", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_fishing)); - skillInfo.addProperty("level_skill_alchemy", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_alchemy)); - skillInfo.addProperty("level_skill_runecrafting", getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_runecrafting)); - - skillInfo.addProperty("level_slayer_zombie", getLevel(Utils.getElement(leveling, "slayer_xp.zombie").getAsJsonArray(), experience_slayer_zombie)); - skillInfo.addProperty("level_slayer_spider", getLevel(Utils.getElement(leveling, "slayer_xp.spider").getAsJsonArray(), experience_slayer_spider)); - skillInfo.addProperty("level_slayer_wolf", getLevel(Utils.getElement(leveling, "slayer_xp.wolf").getAsJsonArray(), experience_slayer_wolf)); + Level level_skill_taming = getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_taming, false); + Level level_skill_mining = getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_mining, false); + Level level_skill_foraging = getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_foraging, false); + Level level_skill_enchanting = getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_enchanting, false); + Level level_skill_carpentry = getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_carpentry, false); + Level level_skill_farming = getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_farming, false); + Level level_skill_combat = getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_combat, false); + Level level_skill_fishing = getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_fishing, false); + Level level_skill_alchemy = getLevel(Utils.getElement(leveling, "leveling_xp").getAsJsonArray(), experience_skill_alchemy, false); + Level level_skill_runecrafting = getLevel(Utils.getElement(leveling, "runecrafting_xp").getAsJsonArray(), experience_skill_runecrafting, false); + + Level level_slayer_zombie = getLevel(Utils.getElement(leveling, "slayer_xp.zombie").getAsJsonArray(), experience_slayer_zombie, true); + Level level_slayer_spider = getLevel(Utils.getElement(leveling, "slayer_xp.spider").getAsJsonArray(), experience_slayer_spider, true); + Level level_slayer_wolf = getLevel(Utils.getElement(leveling, "slayer_xp.wolf").getAsJsonArray(), experience_slayer_wolf, true); + + skillInfo.addProperty("level_skill_taming", level_skill_taming.level); + skillInfo.addProperty("level_skill_mining", level_skill_mining.level); + skillInfo.addProperty("level_skill_foraging", level_skill_foraging.level); + skillInfo.addProperty("level_skill_enchanting", level_skill_enchanting.level); + skillInfo.addProperty("level_skill_carpentry", level_skill_carpentry.level); + skillInfo.addProperty("level_skill_farming", level_skill_farming.level); + skillInfo.addProperty("level_skill_combat", level_skill_combat.level); + skillInfo.addProperty("level_skill_fishing", level_skill_fishing.level); + skillInfo.addProperty("level_skill_alchemy", level_skill_alchemy.level); + skillInfo.addProperty("level_skill_runecrafting", level_skill_runecrafting.level); + + skillInfo.addProperty("level_slayer_zombie", level_slayer_zombie.level); + skillInfo.addProperty("level_slayer_spider", level_slayer_spider.level); + skillInfo.addProperty("level_slayer_wolf", level_slayer_wolf.level); + + skillInfo.addProperty("maxed_skill_taming", level_skill_taming.maxed); + skillInfo.addProperty("maxed_skill_mining", level_skill_mining.maxed); + skillInfo.addProperty("maxed_skill_foraging", level_skill_foraging.maxed); + skillInfo.addProperty("maxed_skill_enchanting", level_skill_enchanting.maxed); + skillInfo.addProperty("maxed_skill_carpentry", level_skill_carpentry.maxed); + skillInfo.addProperty("maxed_skill_farming", level_skill_farming.maxed); + skillInfo.addProperty("maxed_skill_combat", level_skill_combat.maxed); + skillInfo.addProperty("maxed_skill_fishing", level_skill_fishing.maxed); + skillInfo.addProperty("maxed_skill_alchemy", level_skill_alchemy.maxed); + skillInfo.addProperty("maxed_skill_runecrafting", level_skill_runecrafting.maxed); + + skillInfo.addProperty("maxed_slayer_zombie", level_slayer_zombie.maxed); + skillInfo.addProperty("maxed_slayer_spider", level_slayer_spider.maxed); + skillInfo.addProperty("maxed_slayer_wolf", level_slayer_wolf.maxed); + + skillInfo.addProperty("maxxp_skill_taming", level_skill_taming.maxXpForLevel); + skillInfo.addProperty("maxxp_skill_mining", level_skill_mining.maxXpForLevel); + skillInfo.addProperty("maxxp_skill_foraging", level_skill_foraging.maxXpForLevel); + skillInfo.addProperty("maxxp_skill_enchanting", level_skill_enchanting.maxXpForLevel); + skillInfo.addProperty("maxxp_skill_carpentry", level_skill_carpentry.maxXpForLevel); + skillInfo.addProperty("maxxp_skill_farming", level_skill_farming.maxXpForLevel); + skillInfo.addProperty("maxxp_skill_combat", level_skill_combat.maxXpForLevel); + skillInfo.addProperty("maxxp_skill_fishing", level_skill_fishing.maxXpForLevel); + skillInfo.addProperty("maxxp_skill_alchemy", level_skill_alchemy.maxXpForLevel); + skillInfo.addProperty("maxxp_skill_runecrafting", level_skill_runecrafting.maxXpForLevel); + + skillInfo.addProperty("maxxp_slayer_zombie", level_slayer_zombie.maxXpForLevel); + skillInfo.addProperty("maxxp_slayer_spider", level_slayer_spider.maxXpForLevel); + skillInfo.addProperty("maxxp_slayer_wolf", level_slayer_wolf.maxXpForLevel); return skillInfo; } @@ -300,10 +423,24 @@ public class ProfileViewer { return collectionInfo; } + public PlayerStats.Stats getPassiveStats(String profileId) { + if(passiveStats != null) return passiveStats; + JsonObject profileInfo = getProfileInformation(profileId); + if(profileInfo == null) return null; + + passiveStats = PlayerStats.getPassiveBonuses(getSkillInfo(profileId), profileInfo); + + if(passiveStats != null) { + passiveStats.add(PlayerStats.getBaseStats()); + } + + return passiveStats; + } + public PlayerStats.Stats getStats(String profileId) { if(stats != null) return stats; JsonObject profileInfo = getProfileInformation(profileId); - if(profileInfo == null) return PlayerStats.getBaseStats(); + if(profileInfo == null) return null; stats = PlayerStats.getStats(getSkillInfo(profileId), getInventoryInfo(profileId), getCollectionInfo(profileId), profileInfo); return stats; @@ -328,7 +465,9 @@ public class ProfileViewer { args.put("name", ""+name); manager.hypixelApi.getHypixelApiAsync(manager.config.apiKey.value, "player", args, jsonObject -> { - if(jsonObject.has("success") && jsonObject.get("success").getAsBoolean()) { + if(jsonObject == null) return; + + if(jsonObject.has("success") && jsonObject.get("success").getAsBoolean()) { nameToHypixelProfile.put(name, jsonObject.get("player").getAsJsonObject()); uuidToHypixelProfile.put(jsonObject.get("player").getAsJsonObject().get("uuid").getAsString(), jsonObject.get("player").getAsJsonObject()); if(callback != null) callback.accept(jsonObject); @@ -339,14 +478,15 @@ public class ProfileViewer { public Profile getProfileByName(String name, Consumer callback) { if(nameToHypixelProfile.containsKey(name)) { - return getProfileReset(nameToHypixelProfile.get(name).get("uuid").getAsString(), callback); + Profile profile = getProfileReset(nameToHypixelProfile.get(name).get("uuid").getAsString(), ignored -> {}); + callback.accept(profile); + return profile; } else { getHypixelProfile(name, jsonObject -> { - System.out.println("getting profile with callback"); - getProfileReset(jsonObject.get("player").getAsJsonObject().get("uuid").getAsString(), callback); + callback.accept(getProfileReset(jsonObject.get("player").getAsJsonObject().get("uuid").getAsString(), ignored -> {})); }); - return null; } + return null; } public Profile getProfile(String uuid, Consumer callback) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/questing/NEUQuesting.java b/src/main/java/io/github/moulberry/notenoughupdates/questing/NEUQuesting.java deleted file mode 100644 index 8be12c95..00000000 --- a/src/main/java/io/github/moulberry/notenoughupdates/questing/NEUQuesting.java +++ /dev/null @@ -1,67 +0,0 @@ -package io.github.moulberry.notenoughupdates.questing; - -import io.github.moulberry.notenoughupdates.NotEnoughUpdates; -import io.github.moulberry.notenoughupdates.util.Utils; -import net.minecraft.client.Minecraft; -import net.minecraft.scoreboard.Score; -import net.minecraft.scoreboard.ScoreObjective; -import net.minecraft.scoreboard.ScorePlayerTeam; -import net.minecraft.scoreboard.Scoreboard; -import net.minecraft.util.EnumChatFormatting; - -import java.io.File; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class NEUQuesting { - - private static final NEUQuesting INSTANCE = new NEUQuesting(); - - private static final Pattern locationPattern = Pattern.compile("(\\u00a7)(?!.*\\u00a7).+"); - private static final Pattern timePattern = Pattern.compile(".+(am|pm)"); - - public String location = ""; - public String date = ""; - public String time = ""; - - public static NEUQuesting getInstance() { - return INSTANCE; - } - - public void tick() { - Scoreboard scoreboard = Minecraft.getMinecraft().thePlayer.getWorldScoreboard(); - - ScoreObjective sidebarObjective = scoreboard.getObjectiveInDisplaySlot(1); //§707/14/20 - - List scores = new ArrayList<>(); - for(Score score : scoreboard.getSortedScores(sidebarObjective)) { - scores.add(score); - } - List lines = new ArrayList<>(); - for(int i=scores.size()-1; i>=0; i--) { - Score score = scores.get(i); - ScorePlayerTeam scoreplayerteam1 = scoreboard.getPlayersTeam(score.getPlayerName()); - String line = ScorePlayerTeam.formatPlayerName(scoreplayerteam1, score.getPlayerName()); - line = Utils.cleanDuplicateColourCodes(line); - lines.add(line); - } - if(lines.size() >= 5) { - date = Utils.cleanColour(lines.get(2)).trim(); - //§74:40am - Matcher matcher = timePattern.matcher(lines.get(3)); - if(matcher.find()) { - time = Utils.cleanColour(matcher.group()).trim(); - } - matcher = locationPattern.matcher(lines.get(4)); - if(matcher.find()) { - location = Utils.cleanColour(matcher.group()).trim(); - } - } - //System.out.println(date + ":" + time + ":" + location); - } - -} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/questing/SBScoreboardData.java b/src/main/java/io/github/moulberry/notenoughupdates/questing/SBScoreboardData.java new file mode 100644 index 00000000..89ec44cc --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/questing/SBScoreboardData.java @@ -0,0 +1,76 @@ +package io.github.moulberry.notenoughupdates.questing; + +import io.github.moulberry.notenoughupdates.util.Utils; +import net.minecraft.client.Minecraft; +import net.minecraft.scoreboard.Score; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.scoreboard.Scoreboard; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class SBScoreboardData { + + private static final SBScoreboardData INSTANCE = new SBScoreboardData(); + + private static final Pattern locationPattern = Pattern.compile("(\\u00a7)(?!.*\\u00a7).+"); + private static final Pattern timePattern = Pattern.compile(".+(am|pm)"); + + public String location = ""; + public String date = ""; + public String time = ""; + + public Date currentTimeDate = null; + + + public static SBScoreboardData getInstance() { + return INSTANCE; + } + + public void tick() { + try { + Scoreboard scoreboard = Minecraft.getMinecraft().thePlayer.getWorldScoreboard(); + + ScoreObjective sidebarObjective = scoreboard.getObjectiveInDisplaySlot(1); //§707/14/20 + + List scores = new ArrayList<>(); + for(Score score : scoreboard.getSortedScores(sidebarObjective)) { + scores.add(score); + } + List lines = new ArrayList<>(); + for(int i=scores.size()-1; i>=0; i--) { + Score score = scores.get(i); + ScorePlayerTeam scoreplayerteam1 = scoreboard.getPlayersTeam(score.getPlayerName()); + String line = ScorePlayerTeam.formatPlayerName(scoreplayerteam1, score.getPlayerName()); + line = Utils.cleanDuplicateColourCodes(line); + lines.add(line); + } + if(lines.size() >= 5) { + date = Utils.cleanColour(lines.get(2)).trim(); + //§74:40am + Matcher matcher = timePattern.matcher(lines.get(3)); + if(matcher.find()) { + time = Utils.cleanColour(matcher.group()).trim(); + + try { + String timeSpace = time.replace("am", " am").replace("pm", " pm"); + SimpleDateFormat parseFormat = new SimpleDateFormat("hh:mm a"); + currentTimeDate = parseFormat.parse(timeSpace); + } catch (ParseException e) {} + } + matcher = locationPattern.matcher(lines.get(4)); + if(matcher.find()) { + location = Utils.cleanColour(matcher.group()).trim(); + } + } + } catch(Exception e) {} + //System.out.println(date + ":" + time + ":" + location); + } + +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/questing/requirements/RequirementApi.java b/src/main/java/io/github/moulberry/notenoughupdates/questing/requirements/RequirementApi.java index 27f9f293..a53ed56b 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/questing/requirements/RequirementApi.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/questing/requirements/RequirementApi.java @@ -3,10 +3,8 @@ package io.github.moulberry.notenoughupdates.questing.requirements; import com.google.common.base.Splitter; import com.google.gson.*; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; -import io.github.moulberry.notenoughupdates.questing.NEUQuesting; import java.util.List; -import java.util.Map; public class RequirementApi extends Requirement { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/questing/requirements/RequirementIslandType.java b/src/main/java/io/github/moulberry/notenoughupdates/questing/requirements/RequirementIslandType.java index 5ee005f5..319bc1b6 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/questing/requirements/RequirementIslandType.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/questing/requirements/RequirementIslandType.java @@ -1,6 +1,6 @@ package io.github.moulberry.notenoughupdates.questing.requirements; -import io.github.moulberry.notenoughupdates.questing.NEUQuesting; +import io.github.moulberry.notenoughupdates.questing.SBScoreboardData; public class RequirementIslandType extends Requirement { @@ -14,6 +14,6 @@ public class RequirementIslandType extends Requirement { @Override public void updateRequirement() { - completed = islandType.equalsIgnoreCase(NEUQuesting.getInstance().location); + completed = islandType.equalsIgnoreCase(SBScoreboardData.getInstance().location); } } 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 133619ae..05351629 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/HypixelApi.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/HypixelApi.java @@ -27,24 +27,28 @@ public class HypixelApi { private ExecutorService es = Executors.newCachedThreadPool(); public void getHypixelApiAsync(String apiKey, String method, HashMap args, Consumer consumer) { - getHypixelApiAsync(generateApiUrl(apiKey.trim(), method, args), consumer); + getHypixelApiAsync(apiKey, method, args, consumer, () -> {}); } - public void getHypixelApiAsync(String urlS, Consumer consumer) { + public void getHypixelApiAsync(String apiKey, String method, HashMap args, Consumer consumer, Runnable error) { + getHypixelApiAsync(generateApiUrl(apiKey.trim(), method, args), consumer, error); + } + + public void getHypixelApiAsync(String urlS, Consumer consumer, Runnable error) { es.submit(() -> { - consumer.accept(getHypixelApiSync(urlS)); + try { + consumer.accept(getHypixelApiSync(urlS)); + } catch(IOException e) { + error.run(); + } }); } - public JsonObject getHypixelApiSync(String urlS) { - URLConnection connection; - try { - URL url = new URL(urlS); - connection = url.openConnection(); - connection.setConnectTimeout(3000); - } catch(IOException e) { - return null; - } + public JsonObject getHypixelApiSync(String urlS) throws IOException { + + URL url = new URL(urlS); + URLConnection connection = url.openConnection(); + connection.setConnectTimeout(3000); try(BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) { StringBuilder builder = new StringBuilder(); @@ -56,8 +60,6 @@ public class HypixelApi { JsonObject json = gson.fromJson(response, JsonObject.class); return json; - } catch(IOException e) { - return null; } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/Utils.java b/src/main/java/io/github/moulberry/notenoughupdates/util/Utils.java index 66400c00..5fe96aae 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/Utils.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/Utils.java @@ -13,13 +13,18 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.audio.SoundHandler; import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.model.IBakedModel; import net.minecraft.event.ClickEvent; import net.minecraft.event.HoverEvent; import net.minecraft.inventory.Slot; @@ -33,6 +38,7 @@ import net.minecraft.util.*; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL14; +import org.lwjgl.util.glu.Project; import javax.swing.*; import java.awt.*; @@ -89,6 +95,80 @@ public class Utils { RenderHelper.disableStandardItemLighting(); } + private static final EnumChatFormatting[] rainbow = new EnumChatFormatting[]{ + EnumChatFormatting.RED, + EnumChatFormatting.GOLD, + EnumChatFormatting.YELLOW, + EnumChatFormatting.GREEN, + EnumChatFormatting.AQUA, + EnumChatFormatting.LIGHT_PURPLE, + EnumChatFormatting.DARK_PURPLE + }; + + public static String chromaString(String str) { + long currentTimeMillis = System.currentTimeMillis(); + + StringBuilder rainbowText = new StringBuilder(); + for(int i=0; i clazz, Class[] params, String... methodNames) { for(String methodName : methodNames) { try { @@ -281,6 +361,15 @@ public class Utils { drawStringScaled(str, fr, x, y-fontHeight/2, shadow, colour, factor); } + public static void drawStringCenteredYScaledMaxWidth(String str, FontRenderer fr, float x, float y, boolean shadow, int len, int colour) { + int strLen = fr.getStringWidth(str); + float factor = len/(float)strLen; + factor = Math.min(1, factor); + float fontHeight = 8*factor; + + drawStringScaled(str, fr, x, y-fontHeight/2, shadow, colour, factor); + } + public static int renderStringTrimWidth(String str, FontRenderer fr, boolean shadow, int x, int y, int len, int colour, int maxLines) { return renderStringTrimWidth(str, fr, shadow, x, y, len, colour, maxLines, 1); } diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_0.png new file mode 100644 index 00000000..45c266a4 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_1.png new file mode 100644 index 00000000..27c7e6e5 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_2.png new file mode 100644 index 00000000..1802f46d Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_3.png new file mode 100644 index 00000000..16eb6335 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_4.png new file mode 100644 index 00000000..63c6686e Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_5.png new file mode 100644 index 00000000..aead2717 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_0.png new file mode 100644 index 00000000..b3720818 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_1.png new file mode 100644 index 00000000..8c76d9c2 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_2.png new file mode 100644 index 00000000..69d75e84 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_3.png new file mode 100644 index 00000000..9dfa063b Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_4.png new file mode 100644 index 00000000..da9f1f2b Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_5.png new file mode 100644 index 00000000..0d4e4702 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_0.png new file mode 100644 index 00000000..58193e89 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_1.png new file mode 100644 index 00000000..f0f5d8f3 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_2.png new file mode 100644 index 00000000..6905f1de Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_3.png new file mode 100644 index 00000000..baaf374a Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_4.png new file mode 100644 index 00000000..976bea03 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_5.png new file mode 100644 index 00000000..140ae13b Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_0.png new file mode 100644 index 00000000..e2870888 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_1.png new file mode 100644 index 00000000..8b922268 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_2.png new file mode 100644 index 00000000..bb96f17d Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_3.png new file mode 100644 index 00000000..1371adc2 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_4.png new file mode 100644 index 00000000..88d41995 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_5.png new file mode 100644 index 00000000..569f9b00 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_0.png new file mode 100644 index 00000000..775021fb Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_1.png new file mode 100644 index 00000000..687741e0 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_2.png new file mode 100644 index 00000000..a9667bc0 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_3.png new file mode 100644 index 00000000..0ed0309f Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_4.png new file mode 100644 index 00000000..855c0fb3 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_5.png new file mode 100644 index 00000000..fd2f1828 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_0.png new file mode 100644 index 00000000..693dc7a1 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_1.png new file mode 100644 index 00000000..6294f539 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_2.png new file mode 100644 index 00000000..3c9c3be5 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_3.png new file mode 100644 index 00000000..5c8d2256 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_4.png new file mode 100644 index 00000000..27cea30b Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_5.png new file mode 100644 index 00000000..08de77f1 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_0.png new file mode 100644 index 00000000..3d34b9c0 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_1.png new file mode 100644 index 00000000..dff319d4 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_2.png new file mode 100644 index 00000000..3c9260c0 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_3.png new file mode 100644 index 00000000..04bb6391 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_4.png new file mode 100644 index 00000000..e530dbe4 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_5.png new file mode 100644 index 00000000..e34de57e Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_0.png new file mode 100644 index 00000000..6efddb7d Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_1.png new file mode 100644 index 00000000..e6b8b0f0 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_2.png new file mode 100644 index 00000000..5cbd1130 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_3.png new file mode 100644 index 00000000..bfb5b6ea Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_4.png new file mode 100644 index 00000000..76b83fa8 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_5.png new file mode 100644 index 00000000..522db81f Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_0.png new file mode 100644 index 00000000..6efddb7d Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_1.png new file mode 100644 index 00000000..e6b8b0f0 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_2.png new file mode 100644 index 00000000..5cbd1130 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_3.png new file mode 100644 index 00000000..bfb5b6ea Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_4.png new file mode 100644 index 00000000..76b83fa8 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_5.png new file mode 100644 index 00000000..522db81f Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_0.png new file mode 100644 index 00000000..b965bf11 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_1.png new file mode 100644 index 00000000..090ce488 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_2.png new file mode 100644 index 00000000..8d146dcc Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_3.png new file mode 100644 index 00000000..e7ec0f8c Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_4.png new file mode 100644 index 00000000..cf19ee51 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_5.png new file mode 100644 index 00000000..fa489b5b Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_0.png new file mode 100644 index 00000000..d5a0d326 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_1.png new file mode 100644 index 00000000..508ca40d Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_2.png new file mode 100644 index 00000000..b2bb4554 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_3.png new file mode 100644 index 00000000..8e02189f Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_4.png new file mode 100644 index 00000000..c4884e35 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_5.png new file mode 100644 index 00000000..3a84542a Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_0.png new file mode 100644 index 00000000..aa29d196 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_1.png new file mode 100644 index 00000000..4f08df59 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_2.png new file mode 100644 index 00000000..9a260767 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_3.png new file mode 100644 index 00000000..d07ee5cf Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_4.png new file mode 100644 index 00000000..c4fe2e62 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_5.png new file mode 100644 index 00000000..99f4d13a Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_0.png new file mode 100644 index 00000000..a26a4899 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_1.png new file mode 100644 index 00000000..f2461236 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_2.png new file mode 100644 index 00000000..f70bad58 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_3.png new file mode 100644 index 00000000..09fe998c Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_4.png new file mode 100644 index 00000000..ca0e6bb2 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_5.png new file mode 100644 index 00000000..e3b7ca22 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_0.png new file mode 100644 index 00000000..119ef422 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_1.png new file mode 100644 index 00000000..4182d4ed Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_2.png new file mode 100644 index 00000000..339ee33d Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_3.png new file mode 100644 index 00000000..30229f16 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_4.png new file mode 100644 index 00000000..c4047c85 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_5.png new file mode 100644 index 00000000..7473e4c3 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_0.png new file mode 100644 index 00000000..89d1187b Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_1.png new file mode 100644 index 00000000..32c0d4fb Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_2.png new file mode 100644 index 00000000..9aba96d7 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_3.png new file mode 100644 index 00000000..ba3e3405 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_4.png new file mode 100644 index 00000000..d0a821a2 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_5.png new file mode 100644 index 00000000..4c5af604 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_0.png new file mode 100644 index 00000000..9f10e34e Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_1.png new file mode 100644 index 00000000..b3f06ebe Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_2.png new file mode 100644 index 00000000..2e28c95a Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_3.png new file mode 100644 index 00000000..b83064c4 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_4.png new file mode 100644 index 00000000..e8e30ed2 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_5.png new file mode 100644 index 00000000..627f2a65 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_0.png new file mode 100644 index 00000000..fec494fa Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_1.png new file mode 100644 index 00000000..a294b712 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_2.png new file mode 100644 index 00000000..ac53acc0 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_3.png new file mode 100644 index 00000000..f6034c0c Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_4.png new file mode 100644 index 00000000..cff34967 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_5.png new file mode 100644 index 00000000..d6c9e00f Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_0.png new file mode 100644 index 00000000..bc5d267d Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_1.png new file mode 100644 index 00000000..a8456990 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_2.png new file mode 100644 index 00000000..d3b1f6bc Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_3.png new file mode 100644 index 00000000..4aa95968 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_4.png new file mode 100644 index 00000000..ceae59a6 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_5.png new file mode 100644 index 00000000..8e2dc590 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_0.png new file mode 100644 index 00000000..ba98e8df Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_1.png new file mode 100644 index 00000000..2d4edc17 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_2.png new file mode 100644 index 00000000..dfc12e33 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_3.png new file mode 100644 index 00000000..7230ded4 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_4.png new file mode 100644 index 00000000..28b16a4a Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_5.png new file mode 100644 index 00000000..1d9daa59 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_0.png new file mode 100644 index 00000000..8e6c5146 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_1.png new file mode 100644 index 00000000..11541940 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_2.png new file mode 100644 index 00000000..7957ddc9 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_3.png new file mode 100644 index 00000000..07d22a5f Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_4.png new file mode 100644 index 00000000..88908d3a Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_5.png new file mode 100644 index 00000000..da740bed Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_0.png new file mode 100644 index 00000000..0fd56624 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_1.png new file mode 100644 index 00000000..e350e3f9 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_2.png new file mode 100644 index 00000000..5539d6c4 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_3.png new file mode 100644 index 00000000..10c50d3c Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_4.png new file mode 100644 index 00000000..e04012e1 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_5.png new file mode 100644 index 00000000..bd9f5291 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_0.png new file mode 100644 index 00000000..06969c2a Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_1.png new file mode 100644 index 00000000..4053ce7c Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_2.png new file mode 100644 index 00000000..c583aee2 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_3.png new file mode 100644 index 00000000..afacdf61 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_4.png new file mode 100644 index 00000000..52b27e94 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_5.png new file mode 100644 index 00000000..bb35a684 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_0.png new file mode 100644 index 00000000..1b03fc43 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_0.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_1.png new file mode 100644 index 00000000..0513b21c Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_1.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_2.png new file mode 100644 index 00000000..fbe9bd47 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_2.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_3.png new file mode 100644 index 00000000..b8838c4c Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_3.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_4.png new file mode 100644 index 00000000..c3ffe75c Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_4.png differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_5.png new file mode 100644 index 00000000..16377625 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_5.png differ diff --git a/src/main/resources/assets/notenoughupdates/shaders/cape.frag b/src/main/resources/assets/notenoughupdates/shaders/cape.frag index cbe00c70..bfc089bb 100644 --- a/src/main/resources/assets/notenoughupdates/shaders/cape.frag +++ b/src/main/resources/assets/notenoughupdates/shaders/cape.frag @@ -8,9 +8,9 @@ void main() { vec4 texture = texture2D(textureIn, gl_TexCoord[0].st); gl_FragColor = texture * passColour; - vec3 fakeSunNormal = normalize(vec3(0.2f,1f,-0.2f)); + vec3 fakeSunNormal = normalize(vec3(0.2f,1.0f,-0.2f)); vec3 normNormal = normalize(passNormal); float shading = max(0.6f, dot(fakeSunNormal, normNormal)); - gl_FragColor = vec4(gl_FragColor.rgb*shading, gl_FragColor.a);//gl_FragColor.rgb*shading + gl_FragColor = vec4(gl_FragColor.rgb*shading, gl_FragColor.a); } \ No newline at end of file diff --git a/src/main/resources/assets/notenoughupdates/shaders/fade_cape.frag b/src/main/resources/assets/notenoughupdates/shaders/fade_cape.frag index 76738c31..33d6b341 100644 --- a/src/main/resources/assets/notenoughupdates/shaders/fade_cape.frag +++ b/src/main/resources/assets/notenoughupdates/shaders/fade_cape.frag @@ -16,16 +16,16 @@ vec3 hsv2rgb(vec3 c) { void main() { vec4 texture = texture2D(textureIn, gl_TexCoord[0].st); - float hue = mod(millis/10000f+gl_TexCoord[0].t, 1f); + float hue = mod(millis/10000.0f+gl_TexCoord[0].t, 1.0f); float sat = 0.5f; float val = 0.5f; vec3 fade = hsv2rgb(vec3(hue, sat, val)); - gl_FragColor = vec4(texture.rgb*texture.a + fade*(1-texture.a), 1f) * passColour; + gl_FragColor = vec4(texture.rgb*texture.a + fade*(1.0f-texture.a), 1.0f) * passColour; - vec3 fakeSunNormal = normalize(vec3(0.2f,1f,-0.2f)); + vec3 fakeSunNormal = normalize(vec3(0.2f,1.0f,-0.2f)); vec3 normNormal = normalize(passNormal); float shading = max(0.6f, dot(fakeSunNormal, normNormal)); gl_FragColor = vec4(gl_FragColor.rgb*shading, gl_FragColor.a); -} \ No newline at end of file +} diff --git a/src/main/resources/assets/notenoughupdates/shaders/make_gold.frag b/src/main/resources/assets/notenoughupdates/shaders/make_gold.frag new file mode 100644 index 00000000..e771f2c2 --- /dev/null +++ b/src/main/resources/assets/notenoughupdates/shaders/make_gold.frag @@ -0,0 +1,38 @@ +#version 120 + +varying vec4 passColour; +varying vec3 passPosition; +uniform sampler2D textureIn; + +uniform float amount; + +//Algorithm by sam hocevar +vec3 rgb2hsv(vec3 c) { + vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); + vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); + + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} + +//Algorithm by hughsk +vec3 hsv2rgb(vec3 c) { + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + +void main() { + vec4 texture = texture2D(textureIn, gl_TexCoord[0].st); + + vec3 hsv = rgb2hsv(texture.rgb); + + float hue = mod(hsv.x + amount + passPosition.x*4.0f, 1.0f); + float sat = hsv.y*0.7f; + float val = hsv.z; + vec3 fade = hsv2rgb(vec3(hue, sat, val)); + + gl_FragColor = vec4(fade.rgb, texture.a); +} diff --git a/src/main/resources/assets/notenoughupdates/shaders/make_gold.vert b/src/main/resources/assets/notenoughupdates/shaders/make_gold.vert new file mode 100644 index 00000000..40a9d08a --- /dev/null +++ b/src/main/resources/assets/notenoughupdates/shaders/make_gold.vert @@ -0,0 +1,13 @@ +#version 120 + +varying vec4 passColour; +varying vec3 passPosition; + +void main() { + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_TexCoord[0] = gl_MultiTexCoord0; + + passPosition = gl_Position.xyz; + + passColour = gl_Color; +} \ No newline at end of file -- cgit From 16b89f752b83aa91f1697238d785eb97a4f01f61 Mon Sep 17 00:00:00 2001 From: Moulberry Date: Wed, 22 Jul 2020 04:55:27 +1000 Subject: even less scuffed --- .../profileviewer/GuiProfileViewer.java | 8 ++++---- .../panoramas/combat_1_day/panorama_0.jpg | Bin 0 -> 21394 bytes .../panoramas/combat_1_day/panorama_0.png | Bin 2044572 -> 0 bytes .../panoramas/combat_1_day/panorama_1.jpg | Bin 0 -> 20539 bytes .../panoramas/combat_1_day/panorama_1.png | Bin 2118694 -> 0 bytes .../panoramas/combat_1_day/panorama_2.jpg | Bin 0 -> 18095 bytes .../panoramas/combat_1_day/panorama_2.png | Bin 1975377 -> 0 bytes .../panoramas/combat_1_day/panorama_3.jpg | Bin 0 -> 21069 bytes .../panoramas/combat_1_day/panorama_3.png | Bin 1909797 -> 0 bytes .../panoramas/combat_1_day/panorama_4.jpg | Bin 0 -> 17245 bytes .../panoramas/combat_1_day/panorama_4.png | Bin 2256091 -> 0 bytes .../panoramas/combat_1_day/panorama_5.jpg | Bin 0 -> 13035 bytes .../panoramas/combat_1_day/panorama_5.png | Bin 1456745 -> 0 bytes .../panoramas/combat_1_night/panorama_0.jpg | Bin 0 -> 15969 bytes .../panoramas/combat_1_night/panorama_0.png | Bin 1835538 -> 0 bytes .../panoramas/combat_1_night/panorama_1.jpg | Bin 0 -> 14301 bytes .../panoramas/combat_1_night/panorama_1.png | Bin 1892728 -> 0 bytes .../panoramas/combat_1_night/panorama_2.jpg | Bin 0 -> 12769 bytes .../panoramas/combat_1_night/panorama_2.png | Bin 1577765 -> 0 bytes .../panoramas/combat_1_night/panorama_3.jpg | Bin 0 -> 12440 bytes .../panoramas/combat_1_night/panorama_3.png | Bin 1635925 -> 0 bytes .../panoramas/combat_1_night/panorama_4.jpg | Bin 0 -> 11408 bytes .../panoramas/combat_1_night/panorama_4.png | Bin 1873550 -> 0 bytes .../panoramas/combat_1_night/panorama_5.jpg | Bin 0 -> 16017 bytes .../panoramas/combat_1_night/panorama_5.png | Bin 1471032 -> 0 bytes .../panoramas/combat_2_day/panorama_0.jpg | Bin 0 -> 30425 bytes .../panoramas/combat_2_day/panorama_0.png | Bin 1870077 -> 0 bytes .../panoramas/combat_2_day/panorama_1.jpg | Bin 0 -> 18248 bytes .../panoramas/combat_2_day/panorama_1.png | Bin 1827993 -> 0 bytes .../panoramas/combat_2_day/panorama_2.jpg | Bin 0 -> 14289 bytes .../panoramas/combat_2_day/panorama_2.png | Bin 1930272 -> 0 bytes .../panoramas/combat_2_day/panorama_3.jpg | Bin 0 -> 19871 bytes .../panoramas/combat_2_day/panorama_3.png | Bin 2036129 -> 0 bytes .../panoramas/combat_2_day/panorama_4.jpg | Bin 0 -> 18328 bytes .../panoramas/combat_2_day/panorama_4.png | Bin 1741259 -> 0 bytes .../panoramas/combat_2_day/panorama_5.jpg | Bin 0 -> 8718 bytes .../panoramas/combat_2_day/panorama_5.png | Bin 1450149 -> 0 bytes .../panoramas/combat_2_night/panorama_0.jpg | Bin 0 -> 14773 bytes .../panoramas/combat_2_night/panorama_0.png | Bin 1604404 -> 0 bytes .../panoramas/combat_2_night/panorama_1.jpg | Bin 0 -> 11063 bytes .../panoramas/combat_2_night/panorama_1.png | Bin 1506039 -> 0 bytes .../panoramas/combat_2_night/panorama_2.jpg | Bin 0 -> 5580 bytes .../panoramas/combat_2_night/panorama_2.png | Bin 1280422 -> 0 bytes .../panoramas/combat_2_night/panorama_3.jpg | Bin 0 -> 17256 bytes .../panoramas/combat_2_night/panorama_3.png | Bin 1683043 -> 0 bytes .../panoramas/combat_2_night/panorama_4.jpg | Bin 0 -> 12133 bytes .../panoramas/combat_2_night/panorama_4.png | Bin 1475680 -> 0 bytes .../panoramas/combat_2_night/panorama_5.jpg | Bin 0 -> 4516 bytes .../panoramas/combat_2_night/panorama_5.png | Bin 1317441 -> 0 bytes .../panoramas/combat_3_day/panorama_0.jpg | Bin 0 -> 34048 bytes .../panoramas/combat_3_day/panorama_0.png | Bin 2188059 -> 0 bytes .../panoramas/combat_3_day/panorama_1.jpg | Bin 0 -> 28471 bytes .../panoramas/combat_3_day/panorama_1.png | Bin 1858211 -> 0 bytes .../panoramas/combat_3_day/panorama_2.jpg | Bin 0 -> 22159 bytes .../panoramas/combat_3_day/panorama_2.png | Bin 1820033 -> 0 bytes .../panoramas/combat_3_day/panorama_3.jpg | Bin 0 -> 27487 bytes .../panoramas/combat_3_day/panorama_3.png | Bin 2320903 -> 0 bytes .../panoramas/combat_3_day/panorama_4.jpg | Bin 0 -> 19750 bytes .../panoramas/combat_3_day/panorama_4.png | Bin 1815303 -> 0 bytes .../panoramas/combat_3_day/panorama_5.jpg | Bin 0 -> 21597 bytes .../panoramas/combat_3_day/panorama_5.png | Bin 1584572 -> 0 bytes .../panoramas/combat_3_night/panorama_0.jpg | Bin 0 -> 18255 bytes .../panoramas/combat_3_night/panorama_0.png | Bin 1850016 -> 0 bytes .../panoramas/combat_3_night/panorama_1.jpg | Bin 0 -> 11295 bytes .../panoramas/combat_3_night/panorama_1.png | Bin 1491122 -> 0 bytes .../panoramas/combat_3_night/panorama_2.jpg | Bin 0 -> 13877 bytes .../panoramas/combat_3_night/panorama_2.png | Bin 1560123 -> 0 bytes .../panoramas/combat_3_night/panorama_3.jpg | Bin 0 -> 18438 bytes .../panoramas/combat_3_night/panorama_3.png | Bin 1905445 -> 0 bytes .../panoramas/combat_3_night/panorama_4.jpg | Bin 0 -> 10785 bytes .../panoramas/combat_3_night/panorama_4.png | Bin 1618932 -> 0 bytes .../panoramas/combat_3_night/panorama_5.jpg | Bin 0 -> 12742 bytes .../panoramas/combat_3_night/panorama_5.png | Bin 1402137 -> 0 bytes .../panoramas/dark_auction/panorama_0.jpg | Bin 0 -> 19008 bytes .../panoramas/dark_auction/panorama_0.png | Bin 1855519 -> 0 bytes .../panoramas/dark_auction/panorama_1.jpg | Bin 0 -> 19414 bytes .../panoramas/dark_auction/panorama_1.png | Bin 1850637 -> 0 bytes .../panoramas/dark_auction/panorama_2.jpg | Bin 0 -> 19388 bytes .../panoramas/dark_auction/panorama_2.png | Bin 1674606 -> 0 bytes .../panoramas/dark_auction/panorama_3.jpg | Bin 0 -> 19497 bytes .../panoramas/dark_auction/panorama_3.png | Bin 1922696 -> 0 bytes .../panoramas/dark_auction/panorama_4.jpg | Bin 0 -> 18727 bytes .../panoramas/dark_auction/panorama_4.png | Bin 2052381 -> 0 bytes .../panoramas/dark_auction/panorama_5.jpg | Bin 0 -> 18871 bytes .../panoramas/dark_auction/panorama_5.png | Bin 1347015 -> 0 bytes .../notenoughupdates/panoramas/dungeon/panorama_0.jpg | Bin 0 -> 16337 bytes .../notenoughupdates/panoramas/dungeon/panorama_0.png | Bin 1529623 -> 0 bytes .../notenoughupdates/panoramas/dungeon/panorama_1.jpg | Bin 0 -> 19376 bytes .../notenoughupdates/panoramas/dungeon/panorama_1.png | Bin 1752770 -> 0 bytes .../notenoughupdates/panoramas/dungeon/panorama_2.jpg | Bin 0 -> 17633 bytes .../notenoughupdates/panoramas/dungeon/panorama_2.png | Bin 1650468 -> 0 bytes .../notenoughupdates/panoramas/dungeon/panorama_3.jpg | Bin 0 -> 18424 bytes .../notenoughupdates/panoramas/dungeon/panorama_3.png | Bin 1648713 -> 0 bytes .../notenoughupdates/panoramas/dungeon/panorama_4.jpg | Bin 0 -> 18780 bytes .../notenoughupdates/panoramas/dungeon/panorama_4.png | Bin 1862221 -> 0 bytes .../notenoughupdates/panoramas/dungeon/panorama_5.jpg | Bin 0 -> 18041 bytes .../notenoughupdates/panoramas/dungeon/panorama_5.png | Bin 1351481 -> 0 bytes .../panoramas/dungeon_hub/panorama_0.jpg | Bin 0 -> 16337 bytes .../panoramas/dungeon_hub/panorama_0.png | Bin 1529623 -> 0 bytes .../panoramas/dungeon_hub/panorama_1.jpg | Bin 0 -> 19376 bytes .../panoramas/dungeon_hub/panorama_1.png | Bin 1752770 -> 0 bytes .../panoramas/dungeon_hub/panorama_2.jpg | Bin 0 -> 17633 bytes .../panoramas/dungeon_hub/panorama_2.png | Bin 1650468 -> 0 bytes .../panoramas/dungeon_hub/panorama_3.jpg | Bin 0 -> 18424 bytes .../panoramas/dungeon_hub/panorama_3.png | Bin 1648713 -> 0 bytes .../panoramas/dungeon_hub/panorama_4.jpg | Bin 0 -> 18780 bytes .../panoramas/dungeon_hub/panorama_4.png | Bin 1862221 -> 0 bytes .../panoramas/dungeon_hub/panorama_5.jpg | Bin 0 -> 18041 bytes .../panoramas/dungeon_hub/panorama_5.png | Bin 1351481 -> 0 bytes .../panoramas/dynamic_day/panorama_0.jpg | Bin 0 -> 35131 bytes .../panoramas/dynamic_day/panorama_0.png | Bin 2225270 -> 0 bytes .../panoramas/dynamic_day/panorama_1.jpg | Bin 0 -> 32356 bytes .../panoramas/dynamic_day/panorama_1.png | Bin 2261346 -> 0 bytes .../panoramas/dynamic_day/panorama_2.jpg | Bin 0 -> 34147 bytes .../panoramas/dynamic_day/panorama_2.png | Bin 2339782 -> 0 bytes .../panoramas/dynamic_day/panorama_3.jpg | Bin 0 -> 42291 bytes .../panoramas/dynamic_day/panorama_3.png | Bin 2543434 -> 0 bytes .../panoramas/dynamic_day/panorama_4.jpg | Bin 0 -> 25831 bytes .../panoramas/dynamic_day/panorama_4.png | Bin 2173289 -> 0 bytes .../panoramas/dynamic_day/panorama_5.jpg | Bin 0 -> 20933 bytes .../panoramas/dynamic_day/panorama_5.png | Bin 1726308 -> 0 bytes .../panoramas/dynamic_night/panorama_0.jpg | Bin 0 -> 28070 bytes .../panoramas/dynamic_night/panorama_0.png | Bin 2197444 -> 0 bytes .../panoramas/dynamic_night/panorama_1.jpg | Bin 0 -> 30401 bytes .../panoramas/dynamic_night/panorama_1.png | Bin 2394932 -> 0 bytes .../panoramas/dynamic_night/panorama_2.jpg | Bin 0 -> 29899 bytes .../panoramas/dynamic_night/panorama_2.png | Bin 2188571 -> 0 bytes .../panoramas/dynamic_night/panorama_3.jpg | Bin 0 -> 30543 bytes .../panoramas/dynamic_night/panorama_3.png | Bin 2376290 -> 0 bytes .../panoramas/dynamic_night/panorama_4.jpg | Bin 0 -> 27401 bytes .../panoramas/dynamic_night/panorama_4.png | Bin 2000878 -> 0 bytes .../panoramas/dynamic_night/panorama_5.jpg | Bin 0 -> 21828 bytes .../panoramas/dynamic_night/panorama_5.png | Bin 1511540 -> 0 bytes .../panoramas/farming_1_day/panorama_0.jpg | Bin 0 -> 34294 bytes .../panoramas/farming_1_day/panorama_0.png | Bin 2187588 -> 0 bytes .../panoramas/farming_1_day/panorama_1.jpg | Bin 0 -> 47518 bytes .../panoramas/farming_1_day/panorama_1.png | Bin 2459529 -> 0 bytes .../panoramas/farming_1_day/panorama_2.jpg | Bin 0 -> 46569 bytes .../panoramas/farming_1_day/panorama_2.png | Bin 2459437 -> 0 bytes .../panoramas/farming_1_day/panorama_3.jpg | Bin 0 -> 36648 bytes .../panoramas/farming_1_day/panorama_3.png | Bin 2435508 -> 0 bytes .../panoramas/farming_1_day/panorama_4.jpg | Bin 0 -> 15788 bytes .../panoramas/farming_1_day/panorama_4.png | Bin 1669131 -> 0 bytes .../panoramas/farming_1_day/panorama_5.jpg | Bin 0 -> 47536 bytes .../panoramas/farming_1_day/panorama_5.png | Bin 2298029 -> 0 bytes .../panoramas/farming_1_night/panorama_0.jpg | Bin 0 -> 20273 bytes .../panoramas/farming_1_night/panorama_0.png | Bin 1853632 -> 0 bytes .../panoramas/farming_1_night/panorama_1.jpg | Bin 0 -> 23666 bytes .../panoramas/farming_1_night/panorama_1.png | Bin 2028666 -> 0 bytes .../panoramas/farming_1_night/panorama_2.jpg | Bin 0 -> 26548 bytes .../panoramas/farming_1_night/panorama_2.png | Bin 2027933 -> 0 bytes .../panoramas/farming_1_night/panorama_3.jpg | Bin 0 -> 22310 bytes .../panoramas/farming_1_night/panorama_3.png | Bin 1999075 -> 0 bytes .../panoramas/farming_1_night/panorama_4.jpg | Bin 0 -> 9398 bytes .../panoramas/farming_1_night/panorama_4.png | Bin 1466349 -> 0 bytes .../panoramas/farming_1_night/panorama_5.jpg | Bin 0 -> 29882 bytes .../panoramas/farming_1_night/panorama_5.png | Bin 1835107 -> 0 bytes .../panoramas/farming_2_day/panorama_0.jpg | Bin 0 -> 30779 bytes .../panoramas/farming_2_day/panorama_0.png | Bin 2063170 -> 0 bytes .../panoramas/farming_2_day/panorama_1.jpg | Bin 0 -> 29586 bytes .../panoramas/farming_2_day/panorama_1.png | Bin 2017820 -> 0 bytes .../panoramas/farming_2_day/panorama_2.jpg | Bin 0 -> 30070 bytes .../panoramas/farming_2_day/panorama_2.png | Bin 2004712 -> 0 bytes .../panoramas/farming_2_day/panorama_3.jpg | Bin 0 -> 30822 bytes .../panoramas/farming_2_day/panorama_3.png | Bin 2049201 -> 0 bytes .../panoramas/farming_2_day/panorama_4.jpg | Bin 0 -> 11867 bytes .../panoramas/farming_2_day/panorama_4.png | Bin 1505669 -> 0 bytes .../panoramas/farming_2_day/panorama_5.jpg | Bin 0 -> 24780 bytes .../panoramas/farming_2_day/panorama_5.png | Bin 1678571 -> 0 bytes .../panoramas/farming_2_night/panorama_0.jpg | Bin 0 -> 19525 bytes .../panoramas/farming_2_night/panorama_0.png | Bin 1767456 -> 0 bytes .../panoramas/farming_2_night/panorama_1.jpg | Bin 0 -> 14742 bytes .../panoramas/farming_2_night/panorama_1.png | Bin 1690021 -> 0 bytes .../panoramas/farming_2_night/panorama_2.jpg | Bin 0 -> 16263 bytes .../panoramas/farming_2_night/panorama_2.png | Bin 1637647 -> 0 bytes .../panoramas/farming_2_night/panorama_3.jpg | Bin 0 -> 17533 bytes .../panoramas/farming_2_night/panorama_3.png | Bin 1695396 -> 0 bytes .../panoramas/farming_2_night/panorama_4.jpg | Bin 0 -> 6528 bytes .../panoramas/farming_2_night/panorama_4.png | Bin 1347288 -> 0 bytes .../panoramas/farming_2_night/panorama_5.jpg | Bin 0 -> 17504 bytes .../panoramas/farming_2_night/panorama_5.png | Bin 1523433 -> 0 bytes .../panoramas/foraging_1_day/panorama_0.jpg | Bin 0 -> 42789 bytes .../panoramas/foraging_1_day/panorama_0.png | Bin 2411778 -> 0 bytes .../panoramas/foraging_1_day/panorama_1.jpg | Bin 0 -> 32963 bytes .../panoramas/foraging_1_day/panorama_1.png | Bin 2041133 -> 0 bytes .../panoramas/foraging_1_day/panorama_2.jpg | Bin 0 -> 36208 bytes .../panoramas/foraging_1_day/panorama_2.png | Bin 2206230 -> 0 bytes .../panoramas/foraging_1_day/panorama_3.jpg | Bin 0 -> 34657 bytes .../panoramas/foraging_1_day/panorama_3.png | Bin 2247037 -> 0 bytes .../panoramas/foraging_1_day/panorama_4.jpg | Bin 0 -> 25234 bytes .../panoramas/foraging_1_day/panorama_4.png | Bin 2095796 -> 0 bytes .../panoramas/foraging_1_day/panorama_5.jpg | Bin 0 -> 29243 bytes .../panoramas/foraging_1_day/panorama_5.png | Bin 1839740 -> 0 bytes .../panoramas/foraging_1_night/panorama_0.jpg | Bin 0 -> 16958 bytes .../panoramas/foraging_1_night/panorama_0.png | Bin 1766471 -> 0 bytes .../panoramas/foraging_1_night/panorama_1.jpg | Bin 0 -> 16735 bytes .../panoramas/foraging_1_night/panorama_1.png | Bin 1638095 -> 0 bytes .../panoramas/foraging_1_night/panorama_2.jpg | Bin 0 -> 15980 bytes .../panoramas/foraging_1_night/panorama_2.png | Bin 1776122 -> 0 bytes .../panoramas/foraging_1_night/panorama_3.jpg | Bin 0 -> 17531 bytes .../panoramas/foraging_1_night/panorama_3.png | Bin 1796200 -> 0 bytes .../panoramas/foraging_1_night/panorama_4.jpg | Bin 0 -> 11656 bytes .../panoramas/foraging_1_night/panorama_4.png | Bin 1635702 -> 0 bytes .../panoramas/foraging_1_night/panorama_5.jpg | Bin 0 -> 17297 bytes .../panoramas/foraging_1_night/panorama_5.png | Bin 1504163 -> 0 bytes .../notenoughupdates/panoramas/hub_day/panorama_0.jpg | Bin 0 -> 20453 bytes .../notenoughupdates/panoramas/hub_day/panorama_0.png | Bin 1778138 -> 0 bytes .../notenoughupdates/panoramas/hub_day/panorama_1.jpg | Bin 0 -> 20509 bytes .../notenoughupdates/panoramas/hub_day/panorama_1.png | Bin 1844566 -> 0 bytes .../notenoughupdates/panoramas/hub_day/panorama_2.jpg | Bin 0 -> 23845 bytes .../notenoughupdates/panoramas/hub_day/panorama_2.png | Bin 1906390 -> 0 bytes .../notenoughupdates/panoramas/hub_day/panorama_3.jpg | Bin 0 -> 24436 bytes .../notenoughupdates/panoramas/hub_day/panorama_3.png | Bin 1978044 -> 0 bytes .../notenoughupdates/panoramas/hub_day/panorama_4.jpg | Bin 0 -> 10145 bytes .../notenoughupdates/panoramas/hub_day/panorama_4.png | Bin 1457085 -> 0 bytes .../notenoughupdates/panoramas/hub_day/panorama_5.jpg | Bin 0 -> 16562 bytes .../notenoughupdates/panoramas/hub_day/panorama_5.png | Bin 1481400 -> 0 bytes .../panoramas/hub_night/panorama_0.jpg | Bin 0 -> 17155 bytes .../panoramas/hub_night/panorama_0.png | Bin 1800967 -> 0 bytes .../panoramas/hub_night/panorama_1.jpg | Bin 0 -> 17538 bytes .../panoramas/hub_night/panorama_1.png | Bin 1795725 -> 0 bytes .../panoramas/hub_night/panorama_2.jpg | Bin 0 -> 15950 bytes .../panoramas/hub_night/panorama_2.png | Bin 1783854 -> 0 bytes .../panoramas/hub_night/panorama_3.jpg | Bin 0 -> 17928 bytes .../panoramas/hub_night/panorama_3.png | Bin 1903785 -> 0 bytes .../panoramas/hub_night/panorama_4.jpg | Bin 0 -> 5091 bytes .../panoramas/hub_night/panorama_4.png | Bin 1334156 -> 0 bytes .../panoramas/hub_night/panorama_5.jpg | Bin 0 -> 15786 bytes .../panoramas/hub_night/panorama_5.png | Bin 1484102 -> 0 bytes .../panoramas/mining_1_day/panorama_0.jpg | Bin 0 -> 37877 bytes .../panoramas/mining_1_day/panorama_0.png | Bin 2250360 -> 0 bytes .../panoramas/mining_1_day/panorama_1.jpg | Bin 0 -> 33985 bytes .../panoramas/mining_1_day/panorama_1.png | Bin 1990106 -> 0 bytes .../panoramas/mining_1_day/panorama_2.jpg | Bin 0 -> 29885 bytes .../panoramas/mining_1_day/panorama_2.png | Bin 1917797 -> 0 bytes .../panoramas/mining_1_day/panorama_3.jpg | Bin 0 -> 29426 bytes .../panoramas/mining_1_day/panorama_3.png | Bin 2080411 -> 0 bytes .../panoramas/mining_1_day/panorama_4.jpg | Bin 0 -> 17061 bytes .../panoramas/mining_1_day/panorama_4.png | Bin 1680133 -> 0 bytes .../panoramas/mining_1_day/panorama_5.jpg | Bin 0 -> 24623 bytes .../panoramas/mining_1_day/panorama_5.png | Bin 1368779 -> 0 bytes .../panoramas/mining_1_night/panorama_0.jpg | Bin 0 -> 25721 bytes .../panoramas/mining_1_night/panorama_0.png | Bin 2144730 -> 0 bytes .../panoramas/mining_1_night/panorama_1.jpg | Bin 0 -> 22713 bytes .../panoramas/mining_1_night/panorama_1.png | Bin 1881956 -> 0 bytes .../panoramas/mining_1_night/panorama_2.jpg | Bin 0 -> 17499 bytes .../panoramas/mining_1_night/panorama_2.png | Bin 1660032 -> 0 bytes .../panoramas/mining_1_night/panorama_3.jpg | Bin 0 -> 19113 bytes .../panoramas/mining_1_night/panorama_3.png | Bin 1879865 -> 0 bytes .../panoramas/mining_1_night/panorama_4.jpg | Bin 0 -> 11604 bytes .../panoramas/mining_1_night/panorama_4.png | Bin 1514854 -> 0 bytes .../panoramas/mining_1_night/panorama_5.jpg | Bin 0 -> 17142 bytes .../panoramas/mining_1_night/panorama_5.png | Bin 1357481 -> 0 bytes .../panoramas/mining_2/panorama_0.jpg | Bin 0 -> 19309 bytes .../panoramas/mining_2/panorama_0.png | Bin 1750950 -> 0 bytes .../panoramas/mining_2/panorama_1.jpg | Bin 0 -> 11211 bytes .../panoramas/mining_2/panorama_1.png | Bin 1672301 -> 0 bytes .../panoramas/mining_2/panorama_2.jpg | Bin 0 -> 13231 bytes .../panoramas/mining_2/panorama_2.png | Bin 1702966 -> 0 bytes .../panoramas/mining_2/panorama_3.jpg | Bin 0 -> 13388 bytes .../panoramas/mining_2/panorama_3.png | Bin 1681660 -> 0 bytes .../panoramas/mining_2/panorama_4.jpg | Bin 0 -> 10314 bytes .../panoramas/mining_2/panorama_4.png | Bin 1823482 -> 0 bytes .../panoramas/mining_2/panorama_5.jpg | Bin 0 -> 11803 bytes .../panoramas/mining_2/panorama_5.png | Bin 1375439 -> 0 bytes .../notenoughupdates/panoramas/missing/panorama_0.jpg | Bin 0 -> 26015 bytes .../notenoughupdates/panoramas/missing/panorama_1.jpg | Bin 0 -> 26016 bytes .../notenoughupdates/panoramas/missing/panorama_2.jpg | Bin 0 -> 24769 bytes .../notenoughupdates/panoramas/missing/panorama_3.jpg | Bin 0 -> 24854 bytes .../notenoughupdates/panoramas/missing/panorama_4.jpg | Bin 0 -> 26123 bytes .../notenoughupdates/panoramas/missing/panorama_5.jpg | Bin 0 -> 24894 bytes .../notenoughupdates/panoramas/unknown/panorama_0.png | Bin 2095449 -> 0 bytes .../notenoughupdates/panoramas/unknown/panorama_1.png | Bin 2096492 -> 0 bytes .../notenoughupdates/panoramas/unknown/panorama_2.png | Bin 2082800 -> 0 bytes .../notenoughupdates/panoramas/unknown/panorama_3.png | Bin 2080972 -> 0 bytes .../notenoughupdates/panoramas/unknown/panorama_4.png | Bin 2095828 -> 0 bytes .../notenoughupdates/panoramas/unknown/panorama_5.png | Bin 2083932 -> 0 bytes 277 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_0.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_1.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_2.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_3.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_4.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_5.png create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_0.jpg create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_1.jpg create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_2.jpg create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_3.jpg create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_4.jpg create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_5.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_0.png delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_1.png delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_2.png delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_3.png delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_4.png delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_5.png diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java index 9607a888..7b16102c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java @@ -133,7 +133,7 @@ public class GuiProfileViewer extends GuiScreen { try { ResourceLocation[] panoramasArray = new ResourceLocation[6]; for(int i=0; i<6; i++) { - panoramasArray[i] = new ResourceLocation("notenoughupdates:panoramas/"+location+"_"+identifier+"/panorama_"+i+".png"); + panoramasArray[i] = new ResourceLocation("notenoughupdates:panoramas/"+location+"_"+identifier+"/panorama_"+i+".jpg"); Minecraft.getMinecraft().getResourceManager().getResource(panoramasArray[i]); } panoramasMap.put(location, panoramasArray); @@ -142,7 +142,7 @@ public class GuiProfileViewer extends GuiScreen { try { ResourceLocation[] panoramasArray = new ResourceLocation[6]; for(int i=0; i<6; i++) { - panoramasArray[i] = new ResourceLocation("notenoughupdates:panoramas/"+location+"/panorama_"+i+".png"); + panoramasArray[i] = new ResourceLocation("notenoughupdates:panoramas/"+location+"/panorama_"+i+".jpg"); Minecraft.getMinecraft().getResourceManager().getResource(panoramasArray[i]); } panoramasMap.put(location, panoramasArray); @@ -150,7 +150,7 @@ public class GuiProfileViewer extends GuiScreen { } catch(IOException e2) { ResourceLocation[] panoramasArray = new ResourceLocation[6]; for(int i=0; i<6; i++) { - panoramasArray[i] = new ResourceLocation("notenoughupdates:panoramas/unknown/panorama_"+i+".png"); + panoramasArray[i] = new ResourceLocation("notenoughupdates:panoramas/unknown/panorama_"+i+".jpg"); } panoramasMap.put(location, panoramasArray); return panoramasArray; @@ -453,7 +453,7 @@ public class GuiProfileViewer extends GuiScreen { } if(mouseX > x && mouseX < x+80) { - if(mouseY > y+4 && mouseY < y+13) { + if(mouseY > y-4 && mouseY < y+13) { String levelStr; if(skillInfo.get("maxed_"+entry.getKey()).getAsBoolean()) { levelStr = EnumChatFormatting.GOLD+"MAXED!"; diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_0.jpg new file mode 100644 index 00000000..27531695 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_0.png deleted file mode 100644 index 45c266a4..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_1.jpg new file mode 100644 index 00000000..5586cf8a Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_1.png deleted file mode 100644 index 27c7e6e5..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_2.jpg new file mode 100644 index 00000000..78540079 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_2.png deleted file mode 100644 index 1802f46d..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_3.jpg new file mode 100644 index 00000000..74bc8f23 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_3.png deleted file mode 100644 index 16eb6335..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_4.jpg new file mode 100644 index 00000000..cdf3fdde Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_4.png deleted file mode 100644 index 63c6686e..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_5.jpg new file mode 100644 index 00000000..63ce6702 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_5.png deleted file mode 100644 index aead2717..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_day/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_0.jpg new file mode 100644 index 00000000..93ee50d1 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_0.png deleted file mode 100644 index b3720818..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_1.jpg new file mode 100644 index 00000000..9f100e8c Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_1.png deleted file mode 100644 index 8c76d9c2..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_2.jpg new file mode 100644 index 00000000..7c1e9d5d Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_2.png deleted file mode 100644 index 69d75e84..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_3.jpg new file mode 100644 index 00000000..133e3d4a Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_3.png deleted file mode 100644 index 9dfa063b..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_4.jpg new file mode 100644 index 00000000..c049a2fa Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_4.png deleted file mode 100644 index da9f1f2b..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_5.jpg new file mode 100644 index 00000000..f9e5ed40 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_5.png deleted file mode 100644 index 0d4e4702..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_1_night/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_0.jpg new file mode 100644 index 00000000..0bfb0d2e Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_0.png deleted file mode 100644 index 58193e89..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_1.jpg new file mode 100644 index 00000000..b4890bc5 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_1.png deleted file mode 100644 index f0f5d8f3..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_2.jpg new file mode 100644 index 00000000..ea7da9aa Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_2.png deleted file mode 100644 index 6905f1de..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_3.jpg new file mode 100644 index 00000000..92013d1a Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_3.png deleted file mode 100644 index baaf374a..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_4.jpg new file mode 100644 index 00000000..2e3da992 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_4.png deleted file mode 100644 index 976bea03..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_5.jpg new file mode 100644 index 00000000..95398c35 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_5.png deleted file mode 100644 index 140ae13b..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_day/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_0.jpg new file mode 100644 index 00000000..837a2928 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_0.png deleted file mode 100644 index e2870888..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_1.jpg new file mode 100644 index 00000000..6f988421 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_1.png deleted file mode 100644 index 8b922268..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_2.jpg new file mode 100644 index 00000000..0c664062 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_2.png deleted file mode 100644 index bb96f17d..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_3.jpg new file mode 100644 index 00000000..278d92f1 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_3.png deleted file mode 100644 index 1371adc2..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_4.jpg new file mode 100644 index 00000000..f9205c52 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_4.png deleted file mode 100644 index 88d41995..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_5.jpg new file mode 100644 index 00000000..5ca08bf9 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_5.png deleted file mode 100644 index 569f9b00..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_2_night/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_0.jpg new file mode 100644 index 00000000..f1f6a028 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_0.png deleted file mode 100644 index 775021fb..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_1.jpg new file mode 100644 index 00000000..882e20a2 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_1.png deleted file mode 100644 index 687741e0..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_2.jpg new file mode 100644 index 00000000..3ec9391f Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_2.png deleted file mode 100644 index a9667bc0..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_3.jpg new file mode 100644 index 00000000..0c99863b Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_3.png deleted file mode 100644 index 0ed0309f..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_4.jpg new file mode 100644 index 00000000..92b62ab3 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_4.png deleted file mode 100644 index 855c0fb3..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_5.jpg new file mode 100644 index 00000000..169c36be Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_5.png deleted file mode 100644 index fd2f1828..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_day/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_0.jpg new file mode 100644 index 00000000..cb60f6d3 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_0.png deleted file mode 100644 index 693dc7a1..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_1.jpg new file mode 100644 index 00000000..d538b920 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_1.png deleted file mode 100644 index 6294f539..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_2.jpg new file mode 100644 index 00000000..27894a8a Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_2.png deleted file mode 100644 index 3c9c3be5..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_3.jpg new file mode 100644 index 00000000..39a3b594 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_3.png deleted file mode 100644 index 5c8d2256..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_4.jpg new file mode 100644 index 00000000..b172a40c Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_4.png deleted file mode 100644 index 27cea30b..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_5.jpg new file mode 100644 index 00000000..3edaba89 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_5.png deleted file mode 100644 index 08de77f1..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/combat_3_night/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_0.jpg new file mode 100644 index 00000000..32f9f7bb Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_0.png deleted file mode 100644 index 3d34b9c0..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_1.jpg new file mode 100644 index 00000000..ece00b29 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_1.png deleted file mode 100644 index dff319d4..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_2.jpg new file mode 100644 index 00000000..298621e3 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_2.png deleted file mode 100644 index 3c9260c0..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_3.jpg new file mode 100644 index 00000000..ed4af05e Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_3.png deleted file mode 100644 index 04bb6391..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_4.jpg new file mode 100644 index 00000000..aca79dcf Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_4.png deleted file mode 100644 index e530dbe4..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_5.jpg new file mode 100644 index 00000000..398e21c9 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_5.png deleted file mode 100644 index e34de57e..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dark_auction/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_0.jpg new file mode 100644 index 00000000..494c5fe0 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_0.png deleted file mode 100644 index 6efddb7d..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_1.jpg new file mode 100644 index 00000000..5da4d3e5 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_1.png deleted file mode 100644 index e6b8b0f0..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_2.jpg new file mode 100644 index 00000000..445c31dc Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_2.png deleted file mode 100644 index 5cbd1130..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_3.jpg new file mode 100644 index 00000000..1de0182b Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_3.png deleted file mode 100644 index bfb5b6ea..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_4.jpg new file mode 100644 index 00000000..75b6cd4e Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_4.png deleted file mode 100644 index 76b83fa8..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_5.jpg new file mode 100644 index 00000000..c5e99eac Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_5.png deleted file mode 100644 index 522db81f..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dungeon/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_0.jpg new file mode 100644 index 00000000..494c5fe0 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_0.png deleted file mode 100644 index 6efddb7d..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_1.jpg new file mode 100644 index 00000000..5da4d3e5 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_1.png deleted file mode 100644 index e6b8b0f0..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_2.jpg new file mode 100644 index 00000000..445c31dc Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_2.png deleted file mode 100644 index 5cbd1130..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_3.jpg new file mode 100644 index 00000000..1de0182b Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_3.png deleted file mode 100644 index bfb5b6ea..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_4.jpg new file mode 100644 index 00000000..75b6cd4e Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_4.png deleted file mode 100644 index 76b83fa8..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_5.jpg new file mode 100644 index 00000000..c5e99eac Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_5.png deleted file mode 100644 index 522db81f..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dungeon_hub/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_0.jpg new file mode 100644 index 00000000..f6231245 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_0.png deleted file mode 100644 index b965bf11..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_1.jpg new file mode 100644 index 00000000..286b3a38 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_1.png deleted file mode 100644 index 090ce488..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_2.jpg new file mode 100644 index 00000000..c6fca879 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_2.png deleted file mode 100644 index 8d146dcc..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_3.jpg new file mode 100644 index 00000000..01b2f816 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_3.png deleted file mode 100644 index e7ec0f8c..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_4.jpg new file mode 100644 index 00000000..a5c810fe Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_4.png deleted file mode 100644 index cf19ee51..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_5.jpg new file mode 100644 index 00000000..30d32a08 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_5.png deleted file mode 100644 index fa489b5b..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_day/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_0.jpg new file mode 100644 index 00000000..b1fb3e84 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_0.png deleted file mode 100644 index d5a0d326..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_1.jpg new file mode 100644 index 00000000..f7642beb Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_1.png deleted file mode 100644 index 508ca40d..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_2.jpg new file mode 100644 index 00000000..3cb3b42f Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_2.png deleted file mode 100644 index b2bb4554..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_3.jpg new file mode 100644 index 00000000..a98d7672 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_3.png deleted file mode 100644 index 8e02189f..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_4.jpg new file mode 100644 index 00000000..ad2b8c70 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_4.png deleted file mode 100644 index c4884e35..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_5.jpg new file mode 100644 index 00000000..f2e93cde Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_5.png deleted file mode 100644 index 3a84542a..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/dynamic_night/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_0.jpg new file mode 100644 index 00000000..c03b849d Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_0.png deleted file mode 100644 index aa29d196..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_1.jpg new file mode 100644 index 00000000..2286407b Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_1.png deleted file mode 100644 index 4f08df59..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_2.jpg new file mode 100644 index 00000000..62127f51 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_2.png deleted file mode 100644 index 9a260767..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_3.jpg new file mode 100644 index 00000000..fe631d89 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_3.png deleted file mode 100644 index d07ee5cf..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_4.jpg new file mode 100644 index 00000000..cf835eea Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_4.png deleted file mode 100644 index c4fe2e62..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_5.jpg new file mode 100644 index 00000000..879b5747 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_5.png deleted file mode 100644 index 99f4d13a..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_day/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_0.jpg new file mode 100644 index 00000000..265515f6 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_0.png deleted file mode 100644 index a26a4899..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_1.jpg new file mode 100644 index 00000000..e774ca7a Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_1.png deleted file mode 100644 index f2461236..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_2.jpg new file mode 100644 index 00000000..1e3c8a98 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_2.png deleted file mode 100644 index f70bad58..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_3.jpg new file mode 100644 index 00000000..7833eb89 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_3.png deleted file mode 100644 index 09fe998c..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_4.jpg new file mode 100644 index 00000000..63fafd87 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_4.png deleted file mode 100644 index ca0e6bb2..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_5.jpg new file mode 100644 index 00000000..ae3bdbdf Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_5.png deleted file mode 100644 index e3b7ca22..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_1_night/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_0.jpg new file mode 100644 index 00000000..e03657af Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_0.png deleted file mode 100644 index 119ef422..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_1.jpg new file mode 100644 index 00000000..27db8499 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_1.png deleted file mode 100644 index 4182d4ed..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_2.jpg new file mode 100644 index 00000000..c83f2c91 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_2.png deleted file mode 100644 index 339ee33d..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_3.jpg new file mode 100644 index 00000000..9b730712 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_3.png deleted file mode 100644 index 30229f16..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_4.jpg new file mode 100644 index 00000000..e687ac9d Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_4.png deleted file mode 100644 index c4047c85..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_5.jpg new file mode 100644 index 00000000..a17337b9 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_5.png deleted file mode 100644 index 7473e4c3..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_day/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_0.jpg new file mode 100644 index 00000000..26909780 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_0.png deleted file mode 100644 index 89d1187b..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_1.jpg new file mode 100644 index 00000000..d1eb9e1b Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_1.png deleted file mode 100644 index 32c0d4fb..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_2.jpg new file mode 100644 index 00000000..dafe1dd3 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_2.png deleted file mode 100644 index 9aba96d7..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_3.jpg new file mode 100644 index 00000000..0e870f38 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_3.png deleted file mode 100644 index ba3e3405..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_4.jpg new file mode 100644 index 00000000..51a760f5 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_4.png deleted file mode 100644 index d0a821a2..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_5.jpg new file mode 100644 index 00000000..f40c330c Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_5.png deleted file mode 100644 index 4c5af604..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/farming_2_night/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_0.jpg new file mode 100644 index 00000000..9a12896f Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_0.png deleted file mode 100644 index 9f10e34e..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_1.jpg new file mode 100644 index 00000000..c157ccdd Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_1.png deleted file mode 100644 index b3f06ebe..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_2.jpg new file mode 100644 index 00000000..ecee024b Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_2.png deleted file mode 100644 index 2e28c95a..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_3.jpg new file mode 100644 index 00000000..0dbef91f Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_3.png deleted file mode 100644 index b83064c4..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_4.jpg new file mode 100644 index 00000000..681aa33e Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_4.png deleted file mode 100644 index e8e30ed2..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_5.jpg new file mode 100644 index 00000000..6be866d2 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_5.png deleted file mode 100644 index 627f2a65..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_day/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_0.jpg new file mode 100644 index 00000000..050e4f78 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_0.png deleted file mode 100644 index fec494fa..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_1.jpg new file mode 100644 index 00000000..c3f012a2 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_1.png deleted file mode 100644 index a294b712..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_2.jpg new file mode 100644 index 00000000..557d7396 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_2.png deleted file mode 100644 index ac53acc0..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_3.jpg new file mode 100644 index 00000000..3af3638e Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_3.png deleted file mode 100644 index f6034c0c..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_4.jpg new file mode 100644 index 00000000..b5f913e6 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_4.png deleted file mode 100644 index cff34967..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_5.jpg new file mode 100644 index 00000000..d3c13992 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_5.png deleted file mode 100644 index d6c9e00f..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/foraging_1_night/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_0.jpg new file mode 100644 index 00000000..0d5f26dd Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_0.png deleted file mode 100644 index bc5d267d..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_1.jpg new file mode 100644 index 00000000..820b92a4 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_1.png deleted file mode 100644 index a8456990..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_2.jpg new file mode 100644 index 00000000..14d01dd1 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_2.png deleted file mode 100644 index d3b1f6bc..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_3.jpg new file mode 100644 index 00000000..bfc66ec9 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_3.png deleted file mode 100644 index 4aa95968..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_4.jpg new file mode 100644 index 00000000..07f17d24 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_4.png deleted file mode 100644 index ceae59a6..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_5.jpg new file mode 100644 index 00000000..f3df82a5 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_5.png deleted file mode 100644 index 8e2dc590..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/hub_day/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_0.jpg new file mode 100644 index 00000000..34bc84db Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_0.png deleted file mode 100644 index ba98e8df..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_1.jpg new file mode 100644 index 00000000..742d158b Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_1.png deleted file mode 100644 index 2d4edc17..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_2.jpg new file mode 100644 index 00000000..abf0a253 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_2.png deleted file mode 100644 index dfc12e33..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_3.jpg new file mode 100644 index 00000000..7efc75d6 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_3.png deleted file mode 100644 index 7230ded4..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_4.jpg new file mode 100644 index 00000000..a7f7988b Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_4.png deleted file mode 100644 index 28b16a4a..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_5.jpg new file mode 100644 index 00000000..e86e93c4 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_5.png deleted file mode 100644 index 1d9daa59..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/hub_night/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_0.jpg new file mode 100644 index 00000000..e0c4288d Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_0.png deleted file mode 100644 index 8e6c5146..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_1.jpg new file mode 100644 index 00000000..e0cc8139 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_1.png deleted file mode 100644 index 11541940..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_2.jpg new file mode 100644 index 00000000..381912e1 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_2.png deleted file mode 100644 index 7957ddc9..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_3.jpg new file mode 100644 index 00000000..0beaf628 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_3.png deleted file mode 100644 index 07d22a5f..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_4.jpg new file mode 100644 index 00000000..26417482 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_4.png deleted file mode 100644 index 88908d3a..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_5.jpg new file mode 100644 index 00000000..8571b288 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_5.png deleted file mode 100644 index da740bed..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_day/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_0.jpg new file mode 100644 index 00000000..e90efd5f Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_0.png deleted file mode 100644 index 0fd56624..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_1.jpg new file mode 100644 index 00000000..603f9d04 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_1.png deleted file mode 100644 index e350e3f9..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_2.jpg new file mode 100644 index 00000000..b4d253f6 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_2.png deleted file mode 100644 index 5539d6c4..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_3.jpg new file mode 100644 index 00000000..abd201d1 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_3.png deleted file mode 100644 index 10c50d3c..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_4.jpg new file mode 100644 index 00000000..4c12b0b9 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_4.png deleted file mode 100644 index e04012e1..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_5.jpg new file mode 100644 index 00000000..93a5a26d Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_5.png deleted file mode 100644 index bd9f5291..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_1_night/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_0.jpg new file mode 100644 index 00000000..7aced4cc Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_0.png deleted file mode 100644 index 06969c2a..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_1.jpg new file mode 100644 index 00000000..852a1af2 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_1.png deleted file mode 100644 index 4053ce7c..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_2.jpg new file mode 100644 index 00000000..6710318f Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_2.png deleted file mode 100644 index c583aee2..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_3.jpg new file mode 100644 index 00000000..3d42e658 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_3.png deleted file mode 100644 index afacdf61..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_4.jpg new file mode 100644 index 00000000..08abb255 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_4.png deleted file mode 100644 index 52b27e94..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_5.jpg new file mode 100644 index 00000000..3d4845d9 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_5.png deleted file mode 100644 index bb35a684..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/mining_2/panorama_5.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_0.jpg b/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_0.jpg new file mode 100644 index 00000000..9482df80 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_0.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_1.jpg b/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_1.jpg new file mode 100644 index 00000000..1b4235dd Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_1.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_2.jpg b/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_2.jpg new file mode 100644 index 00000000..2f1fcc06 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_2.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_3.jpg b/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_3.jpg new file mode 100644 index 00000000..ce20d9b5 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_3.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_4.jpg b/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_4.jpg new file mode 100644 index 00000000..3dcdac57 Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_4.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_5.jpg b/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_5.jpg new file mode 100644 index 00000000..45f65c7c Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_5.jpg differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_0.png b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_0.png deleted file mode 100644 index 1b03fc43..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_0.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_1.png b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_1.png deleted file mode 100644 index 0513b21c..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_1.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_2.png b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_2.png deleted file mode 100644 index fbe9bd47..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_2.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_3.png b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_3.png deleted file mode 100644 index b8838c4c..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_3.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_4.png b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_4.png deleted file mode 100644 index c3ffe75c..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_4.png and /dev/null differ diff --git a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_5.png b/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_5.png deleted file mode 100644 index 16377625..00000000 Binary files a/src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_5.png and /dev/null differ -- cgit From f0293a74282cece3aa8a2a328559889d6e187209 Mon Sep 17 00:00:00 2001 From: Moulberry Date: Sun, 26 Jul 2020 12:12:25 +1000 Subject: 1.11.7 --- build.gradle | 3 +- src/main/java/NotSkyblockAddonsInstallerFrame.java | 667 +++++++++++ .../moulberry/notenoughupdates/CustomItems.java | 8 + .../notenoughupdates/GuiEnchantColour.java | 222 ++++ .../moulberry/notenoughupdates/ItemRarityHalo.java | 251 ++++ .../moulberry/notenoughupdates/NEUManager.java | 19 +- .../moulberry/notenoughupdates/NEUOverlay.java | 13 +- .../notenoughupdates/NotEnoughUpdates.java | 166 ++- .../notenoughupdates/auction/APIManager.java | 20 +- .../notenoughupdates/auction/CustomAH.java | 20 +- .../infopanes/CollectionLogInfoPane.java | 17 +- .../itemeditor/GuiElementTextField.java | 49 +- .../mixins/MixinInventoryEffectRenderer.java | 1 + .../notenoughupdates/mixins/MixinRenderItem.java | 53 + .../notenoughupdates/options/Options.java | 29 +- .../profileviewer/GuiProfileViewer.java | 1253 ++++++++++++++++++-- .../notenoughupdates/profileviewer/Panorama.java | 4 - .../profileviewer/PlayerStats.java | 37 +- .../profileviewer/ProfileViewer.java | 472 +++++++- .../questing/SBScoreboardData.java | 6 +- .../notenoughupdates/util/HypixelApi.java | 1 - .../moulberry/notenoughupdates/util/Utils.java | 127 +- .../assets/notenoughupdates/button20x.png | Bin 0 -> 170 bytes .../assets/notenoughupdates/custom_ench_colour.png | Bin 0 -> 4530 bytes .../resources/assets/notenoughupdates/folder.png | Bin 0 -> 454 bytes .../panoramas/missing/panorama_0.jpg | Bin 26015 -> 0 bytes .../panoramas/missing/panorama_1.jpg | Bin 26016 -> 0 bytes .../panoramas/missing/panorama_2.jpg | Bin 24769 -> 0 bytes .../panoramas/missing/panorama_3.jpg | Bin 24854 -> 0 bytes .../panoramas/missing/panorama_4.jpg | Bin 26123 -> 0 bytes .../panoramas/missing/panorama_5.jpg | Bin 24894 -> 0 bytes .../panoramas/unknown/panorama_0.jpg | Bin 0 -> 26015 bytes .../panoramas/unknown/panorama_1.jpg | Bin 0 -> 26016 bytes .../panoramas/unknown/panorama_2.jpg | Bin 0 -> 24769 bytes .../panoramas/unknown/panorama_3.jpg | Bin 0 -> 24854 bytes .../panoramas/unknown/panorama_4.jpg | Bin 0 -> 26123 bytes .../panoramas/unknown/panorama_5.jpg | Bin 0 -> 24894 bytes .../resources/assets/notenoughupdates/pv_basic.png | Bin 10496 -> 5173 bytes .../resources/assets/notenoughupdates/pv_bg.png | Bin 0 -> 2016 bytes .../resources/assets/notenoughupdates/pv_cols.png | Bin 0 -> 1843 bytes .../assets/notenoughupdates/pv_elements.png | Bin 0 -> 831 bytes .../resources/assets/notenoughupdates/pv_invs.png | Bin 0 -> 4446 bytes .../resources/assets/notenoughupdates/pv_pets.png | Bin 0 -> 3420 bytes .../notenoughupdates/shaders/program/blur.json | 21 + .../notenoughupdates/shaders/program/blur2.fsh | 34 + .../shaders/program/setrgbtoalpha.fsh | 11 + .../shaders/program/setrgbtoalpha.json | 17 + .../notenoughupdates/shaders/program/sobel.vsh | 20 + src/main/resources/mixins.notenoughupdates.json | 3 +- 49 files changed, 3220 insertions(+), 324 deletions(-) create mode 100644 src/main/java/NotSkyblockAddonsInstallerFrame.java create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/GuiEnchantColour.java create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/ItemRarityHalo.java create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderItem.java create mode 100644 src/main/resources/assets/notenoughupdates/button20x.png create mode 100644 src/main/resources/assets/notenoughupdates/custom_ench_colour.png create mode 100644 src/main/resources/assets/notenoughupdates/folder.png delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_0.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_1.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_2.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_3.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_4.jpg delete mode 100644 src/main/resources/assets/notenoughupdates/panoramas/missing/panorama_5.jpg create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_0.jpg create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_1.jpg create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_2.jpg create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_3.jpg create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_4.jpg create mode 100644 src/main/resources/assets/notenoughupdates/panoramas/unknown/panorama_5.jpg create mode 100644 src/main/resources/assets/notenoughupdates/pv_bg.png create mode 100644 src/main/resources/assets/notenoughupdates/pv_cols.png create mode 100644 src/main/resources/assets/notenoughupdates/pv_elements.png create mode 100644 src/main/resources/assets/notenoughupdates/pv_invs.png create mode 100644 src/main/resources/assets/notenoughupdates/pv_pets.png create mode 100644 src/main/resources/assets/notenoughupdates/shaders/program/blur.json create mode 100644 src/main/resources/assets/notenoughupdates/shaders/program/blur2.fsh create mode 100644 src/main/resources/assets/notenoughupdates/shaders/program/setrgbtoalpha.fsh create mode 100644 src/main/resources/assets/notenoughupdates/shaders/program/setrgbtoalpha.json create mode 100644 src/main/resources/assets/notenoughupdates/shaders/program/sobel.vsh diff --git a/build.gradle b/build.gradle index 29128fba..909e51f3 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ apply plugin: 'com.github.johnrengelman.shadow' sourceCompatibility = 1.8 targetCompatibility = 1.8 -version = "1.0" +version = "1.11.7" group= "io.github.moulberry" archivesBaseName = "NotEnoughUpdates" String modid = "notenoughupdates" @@ -49,6 +49,7 @@ mixin { jar { manifest.attributes( + 'Main-Class': 'NotSkyblockAddonsInstallerFrame', 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker', 'MixinConfigs': "mixins.${modid}.json", 'FMLCorePluginContainsFMLMod': true, diff --git a/src/main/java/NotSkyblockAddonsInstallerFrame.java b/src/main/java/NotSkyblockAddonsInstallerFrame.java new file mode 100644 index 00000000..7c5a1638 --- /dev/null +++ b/src/main/java/NotSkyblockAddonsInstallerFrame.java @@ -0,0 +1,667 @@ +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.image.BufferedImage; +import java.io.*; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.util.Locale; +import java.util.jar.JarFile; +import java.util.regex.Pattern; +import java.util.zip.ZipEntry; + +public class NotSkyblockAddonsInstallerFrame extends JFrame implements ActionListener, MouseListener { + + private static final Pattern IN_MODS_SUBFOLDER = Pattern.compile("1\\.8\\.9[/\\\\]?$"); + + private JLabel logo = null; + private JLabel versionInfo = null; + private JLabel labelFolder = null; + + private JPanel panelCenter = null; + private JPanel panelBottom = null; + private JPanel totalContentPane = null; + + private JTextArea descriptionText = null; + private JTextArea forgeDescriptionText = null; + + private JTextField textFieldFolderLocation = null; + private JButton buttonChooseFolder = null; + + private JButton buttonInstall = null; + private JButton buttonOpenFolder = null; + private JButton buttonClose = null; + + private static final int TOTAL_HEIGHT = 435; + private static final int TOTAL_WIDTH = 404; + + private int x = 0; + private int y = 0; + + private int w = TOTAL_WIDTH; + private int h; + private int margin; + + public NotSkyblockAddonsInstallerFrame() { + try { + setName("NotEnoughUpdatesInstallerFrame"); + setTitle("NotEnoughUpdates Installer"); + setResizable(false); + setSize(TOTAL_WIDTH, TOTAL_HEIGHT); + setContentPane(getPanelContentPane()); + + getButtonFolder().addActionListener(this); + getButtonInstall().addActionListener(this); + getButtonOpenFolder().addActionListener(this); + getButtonClose().addActionListener(this); + getForgeTextArea().addMouseListener(this); + + pack(); + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + + getFieldFolder().setText(getModsFolder().getPath()); + getButtonInstall().setEnabled(true); + getButtonInstall().requestFocus(); + } catch (Exception ex) { + showErrorPopup(ex); + } + } + + public static void main(String[] args) { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + NotSkyblockAddonsInstallerFrame frame = new NotSkyblockAddonsInstallerFrame(); + frame.centerFrame(frame); + frame.show(); + + } catch (Exception ex) { + showErrorPopup(ex); + } + } + + private JPanel getPanelContentPane() { + if (totalContentPane == null) { + try { + totalContentPane = new JPanel(); + totalContentPane.setName("PanelContentPane"); + totalContentPane.setLayout(new BorderLayout(5, 5)); + totalContentPane.setPreferredSize(new Dimension(TOTAL_WIDTH, TOTAL_HEIGHT)); + totalContentPane.add(getPanelCenter(), "Center"); + totalContentPane.add(getPanelBottom(), "South"); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return totalContentPane; + } + + private JPanel getPanelCenter() { + if (panelCenter == null) { + try { + (panelCenter = new JPanel()).setName("PanelCenter"); + panelCenter.setLayout(null); + panelCenter.add(getPictureLabel(), getPictureLabel().getName()); + panelCenter.add(getVersionInfo(), getVersionInfo().getName()); + panelCenter.add(getTextArea(), getTextArea().getName()); + panelCenter.add(getForgeTextArea(), getForgeTextArea().getName()); + panelCenter.add(getLabelFolder(), getLabelFolder().getName()); + panelCenter.add(getFieldFolder(), getFieldFolder().getName()); + panelCenter.add(getButtonFolder(), getButtonFolder().getName()); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return panelCenter; + } + + private JLabel getPictureLabel() { + if (logo == null) { + try { + h = w/2; + margin = 5; + + BufferedImage myPicture = ImageIO.read(getClass().getClassLoader().getResourceAsStream("assets/notenoughupdates/logo.png")); + Image scaled = myPicture.getScaledInstance(w-margin*2, h-margin, Image.SCALE_SMOOTH); + logo = new JLabel(new ImageIcon(scaled)); + logo.setName("Logo"); + logo.setBounds(x+margin, y+margin, w-margin*2, h-margin); + logo.setFont(new Font(Font.DIALOG, Font.BOLD, 18)); + logo.setHorizontalAlignment(SwingConstants.CENTER); + logo.setPreferredSize(new Dimension(h*742/537, h)); + + y += h; + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return logo; + } + + private JLabel getVersionInfo() { + if (versionInfo == null) { + try { + h = 25; + + versionInfo = new JLabel(); + versionInfo.setName("LabelMcVersion"); + versionInfo.setBounds(x, y, w, h); + versionInfo.setFont(new Font(Font.DIALOG, Font.BOLD, 14)); + versionInfo.setHorizontalAlignment(SwingConstants.CENTER); + versionInfo.setPreferredSize(new Dimension(w, h)); + versionInfo.setText("NEU by Moulberry, Installer by Biscuit - for Minecraft 1.8.9"); + + y += h; + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return versionInfo; + } + + private JTextArea getTextArea() { + if (descriptionText == null) { + try { + h = 60; + margin = 10; + + descriptionText = new JTextArea(); + descriptionText.setName("TextArea"); + descriptionText.setBounds(x+margin, y+margin, w-margin*2, h-margin); + descriptionText.setEditable(false); + descriptionText.setHighlighter(null); + descriptionText.setEnabled(true); + descriptionText.setFont(new Font(Font.DIALOG, Font.PLAIN, 12)); + descriptionText.setLineWrap(true); + descriptionText.setOpaque(false); + descriptionText.setPreferredSize(new Dimension(w-margin*2, h-margin)); + descriptionText.setText("This installer will copy NotEnoughUpdates into your forge mods folder for you, and replace any old versions that already exist. " + + "Close this if you prefer to do this yourself!"); + descriptionText.setWrapStyleWord(true); + + y += h; + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return descriptionText; + } + + private JTextArea getForgeTextArea() { + if (forgeDescriptionText == null) { + try { + h = 55; + margin = 10; + + forgeDescriptionText = new JTextArea(); + forgeDescriptionText.setName("TextAreaForge"); + forgeDescriptionText.setBounds(x+margin, y+margin, w-margin*2, h-margin); + forgeDescriptionText.setEditable(false); + forgeDescriptionText.setHighlighter(null); + forgeDescriptionText.setEnabled(true); + forgeDescriptionText.setFont(new Font(Font.DIALOG, Font.PLAIN, 12)); + forgeDescriptionText.setLineWrap(true); + forgeDescriptionText.setOpaque(false); + forgeDescriptionText.setPreferredSize(new Dimension(w-margin*2, h-margin)); + forgeDescriptionText.setText("However, you still need to install Forge client in order to be able to run this mod. Click here to visit the download page for Forge 1.8.9!"); + forgeDescriptionText.setForeground(Color.BLUE.darker()); + forgeDescriptionText.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + forgeDescriptionText.setWrapStyleWord(true); + + y += h; + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return forgeDescriptionText; + } + + private JLabel getLabelFolder() { + if (labelFolder == null) { + h = 16; + w = 65; + + x += 10; // Padding + + try { + labelFolder = new JLabel(); + labelFolder.setName("LabelFolder"); + labelFolder.setBounds(x, y+2, w, h); + labelFolder.setPreferredSize(new Dimension(w, h)); + labelFolder.setText("Mods Folder"); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + + x += w; + } + return labelFolder; + } + + private JTextField getFieldFolder() { + if (textFieldFolderLocation == null) { + h = 20; + w = 287; + + try { + textFieldFolderLocation = new JTextField(); + textFieldFolderLocation.setName("FieldFolder"); + textFieldFolderLocation.setBounds(x, y, w, h); + textFieldFolderLocation.setEditable(false); + textFieldFolderLocation.setPreferredSize(new Dimension(w, h)); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + + x += w; + } + return textFieldFolderLocation; + } + + private JButton getButtonFolder() { + if (buttonChooseFolder == null) { + h = 20; + w = 25; + + x += 10; // Padding + + try { + BufferedImage myPicture = ImageIO.read(getClass().getClassLoader().getResourceAsStream("assets/notenoughupdates/folder.png")); + Image scaled = myPicture.getScaledInstance(w-8, h-6, Image.SCALE_SMOOTH); + buttonChooseFolder = new JButton(new ImageIcon(scaled)); + buttonChooseFolder.setName("ButtonFolder"); + buttonChooseFolder.setBounds(x, y, w, h); + buttonChooseFolder.setPreferredSize(new Dimension(w, h)); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return buttonChooseFolder; + } + + private JPanel getPanelBottom() { + if (panelBottom == null) { + try { + panelBottom = new JPanel(); + panelBottom.setName("PanelBottom"); + panelBottom.setLayout(new FlowLayout(FlowLayout.CENTER, 15, 10)); + panelBottom.setPreferredSize(new Dimension(390, 55)); + panelBottom.add(getButtonInstall(), getButtonInstall().getName()); + panelBottom.add(getButtonOpenFolder(), getButtonOpenFolder().getName()); + panelBottom.add(getButtonClose(), getButtonClose().getName()); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return panelBottom; + } + + private JButton getButtonInstall() { + if (buttonInstall == null) { + w = 100; + h = 26; + + try { + buttonInstall = new JButton(); + buttonInstall.setName("ButtonInstall"); + buttonInstall.setPreferredSize(new Dimension(w, h)); + buttonInstall.setText("Install"); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return buttonInstall; + } + + private JButton getButtonOpenFolder() { + if (buttonOpenFolder == null) { + w = 130; + h = 26; + + try { + buttonOpenFolder = new JButton(); + buttonOpenFolder.setName("ButtonOpenFolder"); + buttonOpenFolder.setPreferredSize(new Dimension(w, h)); + buttonOpenFolder.setText("Open Mods Folder"); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return buttonOpenFolder; + } + + private JButton getButtonClose() { + if (buttonClose == null) { + w = 100; + h = 26; + + try { + (buttonClose = new JButton()).setName("ButtonClose"); + buttonClose.setPreferredSize(new Dimension(w, h)); + buttonClose.setText("Cancel"); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return buttonClose; + } + + public void onFolderSelect() { + File currentDirectory = new File(getFieldFolder().getText()); + + JFileChooser jFileChooser = new JFileChooser(currentDirectory); + jFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + jFileChooser.setAcceptAllFileFilterUsed(false); + if (jFileChooser.showOpenDialog(this) == 0) { + File newDirectory = jFileChooser.getSelectedFile(); + getFieldFolder().setText(newDirectory.getPath()); + } + } + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == getButtonClose()) { + dispose(); + System.exit(0); + } + if (e.getSource() == getButtonFolder()) { + onFolderSelect(); + } + if (e.getSource() == getButtonInstall()) { + onInstall(); + } + if (e.getSource() == getButtonOpenFolder()) { + onOpenFolder(); + } + } + + @Override + public void mouseClicked(MouseEvent e) { + if (e.getSource() == getForgeTextArea()) { + try { + Desktop.getDesktop().browse(new URI("http://files.minecraftforge.net/maven/net/minecraftforge/forge/index_1.8.9.html")); + } catch (IOException | URISyntaxException ex) { + showErrorPopup(ex); + } + } + } + + public void onInstall() { + try { + File modsFolder = new File(getFieldFolder().getText()); + if (!modsFolder.exists()) { + showErrorMessage("Folder not found: " + modsFolder.getPath()); + return; + } + if (!modsFolder.isDirectory()) { + showErrorMessage("Not a folder: " + modsFolder.getPath()); + return; + } + tryInstall(modsFolder); + } catch (Exception e) { + showErrorPopup(e); + } + } + + private void tryInstall(File modsFolder) { + File thisFile = getThisFile(); + + if (thisFile != null) { + boolean inSubFolder = false; + if (IN_MODS_SUBFOLDER.matcher(modsFolder.getPath()).find()) { + inSubFolder = true; + } + + boolean deletingFailure = false; + if (modsFolder.isDirectory()) { // Delete in this current folder. + boolean failed = findSkyblockAddonsAndDelete(modsFolder.listFiles()); + if (failed) deletingFailure = true; + } + if (inSubFolder) { // We are in the 1.8.9 folder, delete in the parent folder as well. + if (modsFolder.getParentFile().isDirectory()) { + boolean failed = findSkyblockAddonsAndDelete(modsFolder.getParentFile().listFiles()); + if (failed) deletingFailure = true; + } + } else { // We are in the main mods folder, but the 1.8.9 subfolder exists... delete in there too. + File subFolder = new File(modsFolder, "1.8.9"); + if (subFolder.exists() && subFolder.isDirectory()) { + boolean failed = findSkyblockAddonsAndDelete(subFolder.listFiles()); + if (failed) deletingFailure = true; + } + } + + if (deletingFailure) return; + + if (thisFile.isDirectory()) { + showErrorMessage("This file is a directory... Are we in a development environment?"); + return; + } + + try { + Files.copy(thisFile.toPath(), new File(modsFolder, thisFile.getName()).toPath()); + } catch (Exception ex) { + showErrorPopup(ex); + return; + } + + showMessage("NotEnoughUpdates has been successfully installed into your mods folder."); + dispose(); + System.exit(0); + } + } + + private boolean findSkyblockAddonsAndDelete(File[] files) { + if (files == null) return false; + + for (File file : files) { + if (!file.isDirectory() && file.getPath().endsWith(".jar")) { + try { + JarFile jarFile = new JarFile(file); + ZipEntry mcModInfo = jarFile.getEntry("mcmod.info"); + if (mcModInfo != null) { + InputStream inputStream = jarFile.getInputStream(mcModInfo); + String modID = getModIDFromInputStream(inputStream); + if (modID.equals("notenoughupdates")) { + jarFile.close(); + try { + boolean deleted = file.delete(); + if (!deleted) { + throw new Exception(); + } + } catch (Exception ex) { + ex.printStackTrace(); + showErrorMessage("Was not able to delete the other NotEnoughUpdates files found in your mods folder!" + System.lineSeparator() + + "Please make sure that your minecraft is currently closed and try again, or feel" + System.lineSeparator() + + "free to open your mods folder and delete those files manually."); + return true; + } + continue; + } + } + jarFile.close(); + } catch (Exception ex) { + // Just don't check the file I guess, move on to the next... + } + } + } + return false; + } + + public void onOpenFolder() { + try { + Desktop.getDesktop().open(getModsFolder()); + } catch (Exception e) { + showErrorPopup(e); + } + } + + public File getModsFolder() { + String userHome = System.getProperty("user.home", "."); + + File modsFolder = getFile(userHome, "minecraft/mods/1.8.9"); + if (!modsFolder.exists()) { + modsFolder = getFile(userHome, "minecraft/mods"); + } + + if (!modsFolder.exists() && !modsFolder.mkdirs()) { + throw new RuntimeException("The working directory could not be created: " + modsFolder); + } + return modsFolder; + } + + public File getFile(String userHome, String minecraftPath) { + File workingDirectory; + switch (getOperatingSystem()) { + case LINUX: + case SOLARIS: { + workingDirectory = new File(userHome, '.' + minecraftPath + '/'); + break; + } + case WINDOWS: { + String applicationData = System.getenv("APPDATA"); + if (applicationData != null) { + workingDirectory = new File(applicationData, "." + minecraftPath + '/'); + break; + } + workingDirectory = new File(userHome, '.' + minecraftPath + '/'); + break; + } + case MACOS: { + workingDirectory = new File(userHome, "Library/Application Support/" + minecraftPath); + break; + } + default: { + workingDirectory = new File(userHome, minecraftPath + '/'); + break; + } + } + return workingDirectory; + } + + public OperatingSystem getOperatingSystem() { + String osName = System.getProperty("os.name").toLowerCase(Locale.US); + if (osName.contains("win")) { + return OperatingSystem.WINDOWS; + + } else if (osName.contains("mac")) { + return OperatingSystem.MACOS; + + } else if (osName.contains("solaris") || osName.contains("sunos")) { + + return OperatingSystem.SOLARIS; + } else if (osName.contains("linux") || osName.contains("unix")) { + + return OperatingSystem.LINUX; + } + return OperatingSystem.UNKNOWN; + } + + public void centerFrame(JFrame frame) { + Rectangle rectangle = frame.getBounds(); + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + Rectangle screenRectangle = new Rectangle(0, 0, screenSize.width, screenSize.height); + + int newX = screenRectangle.x + (screenRectangle.width - rectangle.width) / 2; + int newY = screenRectangle.y + (screenRectangle.height - rectangle.height) / 2; + + if (newX < 0) newX = 0; + if (newY < 0) newY = 0; + + frame.setBounds(newX, newY, rectangle.width, rectangle.height); + } + + public void showMessage(String message) { + JOptionPane.showMessageDialog(null, message, "NotEnoughUpdates", JOptionPane.INFORMATION_MESSAGE); + } + + public void showErrorMessage(String message) { + JOptionPane.showMessageDialog(null, message, "NotEnoughUpdates - Error", JOptionPane.ERROR_MESSAGE); + } + + public enum OperatingSystem { + LINUX, + SOLARIS, + WINDOWS, + MACOS, + UNKNOWN + } + + private static String getStacktraceText(Throwable ex) { + StringWriter stringWriter = new StringWriter(); + ex.printStackTrace(new PrintWriter(stringWriter)); + return stringWriter.toString().replace("\t", " "); + } + + private static void showErrorPopup(Throwable ex) { + ex.printStackTrace(); + + JTextArea textArea = new JTextArea(getStacktraceText(ex)); + textArea.setEditable(false); + Font currentFont = textArea.getFont(); + Font newFont = new Font(Font.MONOSPACED, currentFont.getStyle(), currentFont.getSize()); + textArea.setFont(newFont); + + JScrollPane errorScrollPane = new JScrollPane(textArea); + errorScrollPane.setPreferredSize(new Dimension(600, 400)); + JOptionPane.showMessageDialog(null, errorScrollPane, "Error", JOptionPane.ERROR_MESSAGE); + } + + private String getVersionFromMcmodInfo() { + String version = ""; + try { + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(getClass().getClassLoader().getResourceAsStream("mcmod.info"))); + while ((version = bufferedReader.readLine()) != null) { + if (version.contains("\"version\": \"")) { + version = version.split(Pattern.quote("\"version\": \""))[1]; + version = version.substring(0, version.length() - 2); + break; + } + } + } catch (Exception ex) { + // It's okay, I guess just don't use the version lol. + } + return version; + } + + private String getModIDFromInputStream(InputStream inputStream) { + String version = ""; + try { + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); + while ((version = bufferedReader.readLine()) != null) { + if (version.contains("\"modid\": \"")) { + version = version.split(Pattern.quote("\"modid\": \""))[1]; + version = version.substring(0, version.length() - 2); + break; + } + } + } catch (Exception ex) { + // RIP, couldn't find the modid... + } + return version; + } + + private File getThisFile() { + try { + return new File(NotSkyblockAddonsInstallerFrame.class.getProtectionDomain().getCodeSource().getLocation().toURI()); + } catch (URISyntaxException ex) { + showErrorPopup(ex); + } + return null; + } + + @Override + public void mousePressed(MouseEvent e) {} + + @Override + public void mouseReleased(MouseEvent e) {} + + @Override + public void mouseEntered(MouseEvent e) {} + + @Override + public void mouseExited(MouseEvent e) {} +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/CustomItems.java b/src/main/java/io/github/moulberry/notenoughupdates/CustomItems.java index 4328eaf4..58eaab72 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/CustomItems.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/CustomItems.java @@ -48,6 +48,14 @@ public class CustomItems { "incursions on the server, some of which I, a player on this Minecraft", "anarchy server in Minecraft, have participated in. One of this server's", "most infamous Minecraft players on the oldest Minecraft"); + public static JsonObject LEOCTHL = create("LEOCTHL", "dragon_egg", "--- Stats below may not be entirely accurate ---", + "17 legendary dragon pets", + "24 epic dragon pets", + "18 epic golem pets", + "12 legendary golem pets", + "39 legendary phoenix pets", + "", + "get flexed"); /** * SHAAAAAAAAAAAAAAAAAAME diff --git a/src/main/java/io/github/moulberry/notenoughupdates/GuiEnchantColour.java b/src/main/java/io/github/moulberry/notenoughupdates/GuiEnchantColour.java new file mode 100644 index 00000000..98b08fd8 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/GuiEnchantColour.java @@ -0,0 +1,222 @@ +package io.github.moulberry.notenoughupdates; + +import com.google.common.base.Splitter; +import io.github.moulberry.notenoughupdates.itemeditor.GuiElementTextField; +import io.github.moulberry.notenoughupdates.util.Utils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class GuiEnchantColour extends GuiScreen { + + public static final ResourceLocation custom_ench_colour = new ResourceLocation("notenoughupdates:custom_ench_colour.png"); + + private int guiLeft; + private int guiTop; + private final int xSize = 176; + private int ySize = 0; + + private List getEnchantColours() { + return NotEnoughUpdates.INSTANCE.manager.config.enchantColours.value; + } + + public static final Splitter splitter = Splitter.on(":").limit(4); + + private HashMap comparators = new HashMap<>(); + private List guiElementTextFields = new ArrayList<>(); + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + List enchantColours = getEnchantColours(); + + ySize = 53+25*enchantColours.size(); + guiLeft = (width-xSize)/2; + guiTop = (height-ySize)/2; + + NotEnoughUpdates.INSTANCE.manager.loadConfig(); + + Minecraft.getMinecraft().getTextureManager().bindTexture(custom_ench_colour); + Utils.drawTexturedRect(guiLeft, guiTop, xSize, 21, 0, 1, 0, 21/78f, GL11.GL_NEAREST); + Utils.drawTexturedRect(guiLeft, guiTop+ySize-32, xSize, 32, 0, 1, 46/78f, 1, GL11.GL_NEAREST); + + fontRendererObj.drawString("Ench Name", guiLeft+10, guiTop+7, 4210752); + fontRendererObj.drawString("CMP", guiLeft+71, guiTop+7, 4210752); + fontRendererObj.drawString("LVL", guiLeft+96, guiTop+7, 4210752); + fontRendererObj.drawString("COL", guiLeft+121, guiTop+7, 4210752); + fontRendererObj.drawString("DEL", guiLeft+146, guiTop+7, 4210752); + + Utils.drawStringCentered("Add Ench Colour", fontRendererObj, guiLeft+xSize/2, guiTop+ySize-20, false, 4210752); + + int yIndex = 0; + for(String str : enchantColours) { + Minecraft.getMinecraft().getTextureManager().bindTexture(custom_ench_colour); + GlStateManager.color(1, 1, 1, 1); + Utils.drawTexturedRect(guiLeft, guiTop+21+yIndex*25, xSize, 25, 0, 1, 21/78f, 46/78f, GL11.GL_NEAREST); + + List colourOps = splitter.splitToList(str); + String enchantName = getColourOpIndex(colourOps, 0); + String comparator = getColourOpIndex(colourOps, 1); + String comparison = getColourOpIndex(colourOps, 2); + String colourCode = getColourOpIndex(colourOps, 3); + + if(colourCode.length() > 1) colourCode = String.valueOf(colourCode.toLowerCase().charAt(0)); + if(comparator.length() > 1) comparator = String.valueOf(comparator.toLowerCase().charAt(0)); + + Utils.drawStringCentered(comparator, fontRendererObj, guiLeft+81, guiTop+33+25*yIndex, false, 4210752); + + if(guiElementTextFields.size() <= yIndex) { + guiElementTextFields.add(new GuiElementTextField[3]); + } + if(guiElementTextFields.get(yIndex)[0] == null) { + guiElementTextFields.get(yIndex)[0] = new GuiElementTextField(enchantName, GuiElementTextField.SCALE_TEXT); + guiElementTextFields.get(yIndex)[0].setSize(56, 20); + } + if(guiElementTextFields.get(yIndex)[1] == null) { + guiElementTextFields.get(yIndex)[1] = new GuiElementTextField(comparison, + GuiElementTextField.SCALE_TEXT|GuiElementTextField.NUM_ONLY|GuiElementTextField.NO_SPACE); + guiElementTextFields.get(yIndex)[1].setSize(20, 20); + } + if(guiElementTextFields.get(yIndex)[2] == null) { + guiElementTextFields.get(yIndex)[2] = new GuiElementTextField(colourCode, GuiElementTextField.SCALE_TEXT); + guiElementTextFields.get(yIndex)[2].setSize(20, 20); + } + guiElementTextFields.get(yIndex)[0].setText(enchantName); + guiElementTextFields.get(yIndex)[1].setText(comparison); + comparators.put(yIndex, comparator); + guiElementTextFields.get(yIndex)[2].setText(colourCode); + + guiElementTextFields.get(yIndex)[0].render(guiLeft+10, guiTop+23+25*yIndex); + guiElementTextFields.get(yIndex)[1].render(guiLeft+96, guiTop+23+25*yIndex); + guiElementTextFields.get(yIndex)[2].render(guiLeft+121, guiTop+23+25*yIndex); + + yIndex++; + } + } + + @Override + protected void keyTyped(char typedChar, int keyCode) throws IOException { + super.keyTyped(typedChar, keyCode); + for(int yIndex=0; yIndex NotEnoughUpdates.INSTANCE.manager.config.enchantColours.value.size()) { + addOffset = NotEnoughUpdates.INSTANCE.manager.config.enchantColours.value.size()-yIndex; + } + System.out.println(addOffset); + NotEnoughUpdates.INSTANCE.manager.config.enchantColours.value.add(yIndex+addOffset, + getEnchantOpString(guiElementTextFields.get(yIndex), comparators.get(yIndex))); + NotEnoughUpdates.INSTANCE.manager.saveConfig(); + if(addOffset != 0) { + GuiElementTextField[] guiElementTextFieldArray = guiElementTextFields.remove(yIndex); + guiElementTextFields.add(yIndex+addOffset, guiElementTextFieldArray); + } + return; + } + } + } + } + + public String getEnchantOpString(GuiElementTextField[] tfs, String comparator) { + StringBuilder enchantOp = new StringBuilder(); + enchantOp.append(tfs[0].getText()); + enchantOp.append(":"); + enchantOp.append(comparator); + enchantOp.append(":"); + enchantOp.append(tfs[1].getText()); + enchantOp.append(":"); + enchantOp.append(tfs[2].getText()); + return enchantOp.toString(); + } + + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { + super.mouseClicked(mouseX, mouseY, mouseButton); + for(int yIndex=0; yIndex x && mouseX < x+guiElementTextFields.get(yIndex)[i].getWidth()) { + if(mouseY > guiTop+23+25*yIndex && mouseY < guiTop+23+25*yIndex+20) { + guiElementTextFields.get(yIndex)[i].mouseClicked(mouseX, mouseY, mouseButton); + if(mouseButton == 1) { + NotEnoughUpdates.INSTANCE.manager.config.enchantColours.value.remove(yIndex); + NotEnoughUpdates.INSTANCE.manager.config.enchantColours.value.add(yIndex, + getEnchantOpString(guiElementTextFields.get(yIndex), comparators.get(yIndex))); + NotEnoughUpdates.INSTANCE.manager.saveConfig(); + } + continue; + } + } + guiElementTextFields.get(yIndex)[i].otherComponentClick(); + } + comparators.computeIfAbsent(yIndex, k->">"); + if(mouseY > guiTop+23+25*yIndex && mouseY < guiTop+23+25*yIndex+20) { + if(mouseX > guiLeft+71 && mouseX < guiLeft+71+20) { + switch (comparators.get(yIndex)) { + case ">": + comparators.put(yIndex, "="); break; + case "=": + comparators.put(yIndex, "<"); break; + default: + comparators.put(yIndex, ">"); break; + } + NotEnoughUpdates.INSTANCE.manager.config.enchantColours.value.remove(yIndex); + NotEnoughUpdates.INSTANCE.manager.config.enchantColours.value.add(yIndex, + getEnchantOpString(guiElementTextFields.get(yIndex), comparators.get(yIndex))); + NotEnoughUpdates.INSTANCE.manager.saveConfig(); + } else if(mouseX > guiLeft+146 && mouseX < guiLeft+146+20) { + NotEnoughUpdates.INSTANCE.manager.config.enchantColours.value.remove(yIndex); + guiElementTextFields.remove(yIndex); + comparators.remove(yIndex); + NotEnoughUpdates.INSTANCE.manager.saveConfig(); + } + } + } + if(mouseX >= guiLeft+42 && mouseX <= guiLeft+42+88) { + if(mouseY >= guiTop+ySize-30 && mouseY <= guiTop+ySize-10) { + NotEnoughUpdates.INSTANCE.manager.config.enchantColours.value.add("[a-zA-Z ]+:>:5:9"); + NotEnoughUpdates.INSTANCE.manager.saveConfig(); + } + } + } + + public static String getColourOpIndex(List colourOps, int index) { + if(colourOps.size() > index) { + return colourOps.get(index); + } else { + switch(index) { + case 0: + return "[a-zA-Z ]+"; + case 1: + return ">"; + case 2: + return "5"; + case 3: + return "9"; + } + } + return null; + } +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/ItemRarityHalo.java b/src/main/java/io/github/moulberry/notenoughupdates/ItemRarityHalo.java new file mode 100644 index 00000000..2c70ec1e --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/ItemRarityHalo.java @@ -0,0 +1,251 @@ +package io.github.moulberry.notenoughupdates; + +import io.github.moulberry.notenoughupdates.util.Utils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.shader.Framebuffer; +import net.minecraft.client.shader.Shader; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Matrix4f; +import org.lwjgl.BufferUtils; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL14; +import org.lwjgl.opengl.GL30; +import org.lwjgl.opengl.GL45; + +import java.awt.*; +import java.nio.ByteBuffer; +import java.nio.IntBuffer; +import java.util.HashMap; + +public class ItemRarityHalo { + + public static Framebuffer itemFramebuffer1 = null; + public static Framebuffer itemFramebuffer2 = null; + public static HashMap itemHaloTexMap = new HashMap<>(); + public static Matrix4f projectionMatrix = null; + + public static Shader colourShader = null; + public static Shader blurShaderHorz = null; + public static Shader blurShaderVert = null; + + private static int oldScaledResolution = 0; + + public static void onItemRender(ItemStack stack, int x, int y) { + if(x == 0 && y == 0) return; + + if(!OpenGlHelper.isFramebufferEnabled() || !OpenGlHelper.areShadersSupported()) return; + NotEnoughUpdates neu = NotEnoughUpdates.INSTANCE; + if(!neu.isOnSkyblock()) return; + if(neu.manager.config.itemHighlightOpacity.value <= 1) return; + if(neu.manager.getInternalNameForItem(stack) == null) return; + + ScaledResolution scaledresolution = new ScaledResolution(Minecraft.getMinecraft()); + int size = 16*scaledresolution.getScaleFactor(); + + if(projectionMatrix == null) { + projectionMatrix = Utils.createProjectionMatrix(size, size); + } + + itemFramebuffer1 = checkFramebufferSizes(itemFramebuffer1, size, size); + itemFramebuffer2 = checkFramebufferSizes(itemFramebuffer2, size, size); + + try { + if(colourShader == null) { + colourShader = new Shader(new NEUResourceManager(Minecraft.getMinecraft().getResourceManager()), + "setrgbtoalpha", itemFramebuffer1, itemFramebuffer2); + upload(colourShader, size, size); + } + + if(blurShaderHorz == null) { + blurShaderHorz = new Shader(new NEUResourceManager(Minecraft.getMinecraft().getResourceManager()), + "blur", itemFramebuffer2, itemFramebuffer1); + blurShaderHorz.getShaderManager().getShaderUniform("BlurDir").set(1, 0); + blurShaderHorz.getShaderManager().getShaderUniform("Radius").set(5f); + blurShaderHorz.getShaderManager().getShaderUniform("AlphaMult").set(2f); + upload(blurShaderHorz, size, size); + } + + if(blurShaderVert == null) { + blurShaderVert = new Shader(new NEUResourceManager(Minecraft.getMinecraft().getResourceManager()), + "blur", itemFramebuffer1, itemFramebuffer2); + blurShaderVert.getShaderManager().getShaderUniform("BlurDir").set(0, 1); + blurShaderVert.getShaderManager().getShaderUniform("Radius").set(5f); + blurShaderVert.getShaderManager().getShaderUniform("AlphaMult").set(2f); + upload(blurShaderVert, size, size); + } + } catch(Exception e) { return; } + + if(oldScaledResolution != scaledresolution.getScaleFactor()) { + resetItemHaloCache(); + oldScaledResolution = scaledresolution.getScaleFactor(); + } + + int currentBuffer = GL11.glGetInteger(GL30.GL_FRAMEBUFFER_BINDING); + IntBuffer currentViewport = BufferUtils.createIntBuffer(16); + GL11.glGetInteger(GL11.GL_VIEWPORT, currentViewport); + try { + if(!itemHaloTexMap.containsKey(stack)) { + int texture1 = TextureUtil.glGenTextures(); + int texture2 = TextureUtil.glGenTextures(); + + GlStateManager.bindTexture(texture1); + GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA8, size, size, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, ((ByteBuffer)null)); + itemFramebuffer1.bindFramebuffer(false); + OpenGlHelper.glFramebufferTexture2D(OpenGlHelper.GL_FRAMEBUFFER, OpenGlHelper.GL_COLOR_ATTACHMENT0, 3553, texture1, 0); + + GlStateManager.bindTexture(texture2); + GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA8, size, size, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, ((ByteBuffer)null)); + itemFramebuffer2.bindFramebuffer(false); + OpenGlHelper.glFramebufferTexture2D(OpenGlHelper.GL_FRAMEBUFFER, OpenGlHelper.GL_COLOR_ATTACHMENT0, 3553, texture2, 0); + + itemFramebuffer1.framebufferClear(); + itemFramebuffer2.framebufferClear(); + + GlStateManager.pushMatrix(); { + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + GlStateManager.ortho(0.0D, size, size, 0.0D, 1000.0D, 3000.0D); + GlStateManager.matrixMode(5888); + GlStateManager.loadIdentity(); + GlStateManager.translate(0.0F, 0.0F, -2000.0F); + + GL11.glScalef(scaledresolution.getScaleFactor(), scaledresolution.getScaleFactor(), 1); + + itemFramebuffer1.bindFramebuffer(true); + + RenderItem itemRender = Minecraft.getMinecraft().getRenderItem(); + RenderHelper.enableGUIStandardItemLighting(); + float zLevel = itemRender.zLevel; + itemRender.zLevel = -145; //Negates the z-offset of the below method. + itemRender.renderItemAndEffectIntoGUI(stack, 0, 0); + itemRender.zLevel = zLevel; + RenderHelper.disableStandardItemLighting(); + } GlStateManager.popMatrix(); + + GlStateManager.pushMatrix(); { + GL45.glTextureBarrier(); GL11.glFlush(); GL11.glFinish(); + executeShader(colourShader); + //GL45.glTextureBarrier(); GL11.glFlush(); GL11.glFinish(); + //executeShader(blurShaderHorz); + //GL45.glTextureBarrier(); GL11.glFlush(); GL11.glFinish(); + //executeShader(blurShaderVert); + //GL45.glTextureBarrier(); GL11.glFlush(); GL11.glFinish(); + } GlStateManager.popMatrix(); + + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + GlStateManager.ortho(0.0D, scaledresolution.getScaledWidth_double(), scaledresolution.getScaledHeight_double(), 0.0D, 1000.0D, 3000.0D); + GlStateManager.matrixMode(5888); + + OpenGlHelper.glBindFramebuffer(OpenGlHelper.GL_FRAMEBUFFER, currentBuffer); + GlStateManager.viewport(currentViewport.get(), currentViewport.get(), currentViewport.get(), currentViewport.get()); + + //TextureUtil.deleteTexture(texture1); + itemHaloTexMap.put(stack, texture2); + } + + OpenGlHelper.glBindFramebuffer(OpenGlHelper.GL_FRAMEBUFFER, currentBuffer); + GlStateManager.viewport(currentViewport.get(), currentViewport.get(), currentViewport.get(), currentViewport.get()); + + GlStateManager.bindTexture(itemHaloTexMap.get(stack)); + Color color = Utils.getPrimaryColour(stack.getDisplayName()); + GlStateManager.color(color.getRed()/255f, color.getGreen()/255f, color.getBlue()/255f, + NotEnoughUpdates.INSTANCE.manager.config.itemHighlightOpacity.value.floatValue()/255f); + Utils.drawTexturedRect(x, y, 16, 16, + 0, 1, 1, 0, GL11.GL_NEAREST); + GlStateManager.bindTexture(0); + } catch(Exception e) { + e.printStackTrace(); + OpenGlHelper.glBindFramebuffer(OpenGlHelper.GL_FRAMEBUFFER, currentBuffer); + GlStateManager.viewport(currentViewport.get(), currentViewport.get(), currentViewport.get(), currentViewport.get()); + } + } + + private static Framebuffer checkFramebufferSizes(Framebuffer framebuffer, int width, int height) { + if(framebuffer == null || framebuffer.framebufferWidth != width || framebuffer.framebufferHeight != height) { + if(framebuffer == null) { + framebuffer = new Framebuffer(width, height, true); + } else { + framebuffer.createBindFramebuffer(width, height); + } + framebuffer.setFramebufferFilter(GL11.GL_NEAREST); + } + return framebuffer; + } + + public static void resetItemHaloCache() { + ScaledResolution scaledresolution = new ScaledResolution(Minecraft.getMinecraft()); + int size = 16*scaledresolution.getScaleFactor(); + + for(int tex : itemHaloTexMap.values()) { + TextureUtil.deleteTexture(tex); + } + itemHaloTexMap.clear(); + + if(NotEnoughUpdates.INSTANCE.isOnSkyblock()) { + projectionMatrix = Utils.createProjectionMatrix(size, size); + upload(colourShader, size, size); + upload(blurShaderHorz, size, size); + upload(blurShaderVert, size, size); + } + } + + private static void upload(Shader shader, int width, int height) { + if(shader == null) return; + shader.getShaderManager().getShaderUniformOrDefault("ProjMat").set(projectionMatrix); + shader.getShaderManager().getShaderUniformOrDefault("InSize").set(width, height); + shader.getShaderManager().getShaderUniformOrDefault("OutSize").set(width, height); + shader.getShaderManager().getShaderUniformOrDefault("ScreenSize").set((float)width, (float)height); + } + + private static void executeShader(Shader shader) { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableBlend(); + GlStateManager.disableDepth(); + GlStateManager.disableAlpha(); + GlStateManager.disableFog(); + GlStateManager.disableLighting(); + GlStateManager.disableColorMaterial(); + GlStateManager.enableTexture2D(); + GlStateManager.bindTexture(0); + + float f = (float)shader.framebufferOut.framebufferTextureWidth; + float f1 = (float)shader.framebufferOut.framebufferTextureHeight; + GlStateManager.viewport(0, 0, (int)f, (int)f1); + + shader.getShaderManager().useShader(); + shader.getShaderManager().addSamplerTexture("DiffuseSampler", shader.framebufferIn); + + shader.framebufferOut.framebufferClear(); + shader.framebufferOut.bindFramebuffer(false); + + GlStateManager.depthMask(false); + + GlStateManager.enableAlpha(); + GlStateManager.enableBlend(); + GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA); + + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR); + worldrenderer.pos(0.0D, (double)f1, 500.0D).color(255, 255, 255, 255).endVertex(); + worldrenderer.pos((double)f, (double)f1, 500.0D).color(255, 255, 255, 255).endVertex(); + worldrenderer.pos((double)f, 0.0D, 500.0D).color(255, 255, 255, 255).endVertex(); + worldrenderer.pos(0.0D, 0.0D, 500.0D).color(255, 255, 255, 255).endVertex(); + tessellator.draw(); + + GlStateManager.depthMask(true); + + shader.getShaderManager().endShader(); + + shader.framebufferOut.unbindFramebuffer(); + shader.framebufferIn.unbindFramebufferTexture(); + } + +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java index b879c383..680094af 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java @@ -23,6 +23,8 @@ import java.io.*; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.zip.GZIPInputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -226,24 +228,29 @@ public class NEUManager { /** * Downloads and sets auctionPricesJson from the URL specified by AUCTIONS_PRICE_URL. */ + private ExecutorService es = Executors.newCachedThreadPool(); public void updatePrices() { if(System.currentTimeMillis() - auctionLastUpdate > 1000*60*120) { //2 hours craftCost.clear(); System.out.println("[NEU] UPDATING PRICE INFORMATION"); auctionLastUpdate = System.currentTimeMillis(); - try(Reader inReader = new InputStreamReader(new GZIPInputStream(new URL(AUCTIONS_PRICE_URL).openStream()))) { - auctionPricesJson = gson.fromJson(inReader, JsonObject.class); - } catch (IOException e) { - e.printStackTrace(); - } + es.submit(() -> { + try(Reader inReader = new InputStreamReader(new GZIPInputStream(new URL(AUCTIONS_PRICE_URL).openStream()))) { + auctionPricesJson = gson.fromJson(inReader, JsonObject.class); + } catch (IOException e) { + e.printStackTrace(); + } + }); } } public boolean hasAuctionInfo(String internalname) { + if(auctionPricesJson == null) return false; return auctionPricesJson.has("item_data") && auctionPricesJson.get("item_data").getAsJsonObject().has(internalname); } public boolean hasBazaarInfo(String internalname) { + if(auctionPricesJson == null) return false; return auctionPricesJson.has("bazaar") && auctionPricesJson.get("bazaar").getAsJsonObject().has(internalname); } @@ -276,7 +283,7 @@ public class NEUManager { if(info == null || !info.has("price")) { return 0; } - if(!auctionPricesJson.has("ench_prices") || !auctionPricesJson.has("ench_maximums")) { + if(auctionPricesJson == null || !auctionPricesJson.has("ench_prices") || !auctionPricesJson.has("ench_maximums")) { return 0; } JsonObject ench_prices = auctionPricesJson.getAsJsonObject("ench_prices"); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java index 25b27cc5..7db8875d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java @@ -1053,7 +1053,7 @@ public class NEUOverlay extends Gui { } else if(getSortMode() == SORT_MODE_MOB) { return internalname.matches(mobRegex); } else if(getSortMode() == SORT_MODE_PET) { - return internalname.matches(petRegex); + return internalname.matches(petRegex) && item.get("displayname").getAsString().contains("["); } else if(getSortMode() == SORT_MODE_TOOL) { return checkItemType(item.get("lore").getAsJsonArray(), "SWORD", "BOW", "AXE", "PICKAXE", "FISHING ROD", "WAND", "SHOVEL", "HOE") >= 0; @@ -1099,6 +1099,9 @@ public class NEUOverlay extends Gui { case "thirtyvirus": searchedItems.add(manager.getItemInformation().get("SPIKED_BAIT")); break; + case "leocthl": + searchedItems.add(CustomItems.LEOCTHL); + break; } } @@ -1482,16 +1485,16 @@ public class NEUOverlay extends Gui { if(blurShaderHorz == null) { try { - blurShaderHorz = new Shader(Minecraft.getMinecraft().getResourceManager(), "blur", - Minecraft.getMinecraft().getFramebuffer(), blurOutputHorz); + blurShaderHorz = new Shader(Minecraft.getMinecraft().getResourceManager(), + "blur", Minecraft.getMinecraft().getFramebuffer(), blurOutputHorz); blurShaderHorz.getShaderManager().getShaderUniform("BlurDir").set(1, 0); blurShaderHorz.setProjectionMatrix(createProjectionMatrix(width, height)); } catch(Exception e) { } } if(blurShaderVert == null) { try { - blurShaderVert = new Shader(Minecraft.getMinecraft().getResourceManager(), "blur", - blurOutputHorz, blurOutputVert); + blurShaderVert = new Shader(Minecraft.getMinecraft().getResourceManager(), + "blur", blurOutputHorz, blurOutputVert); blurShaderVert.getShaderManager().getShaderUniform("BlurDir").set(0, 1); blurShaderVert.setProjectionMatrix(createProjectionMatrix(width, height)); } catch(Exception e) { } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java index 734f7ca1..efd38c55 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java @@ -11,6 +11,7 @@ import io.github.moulberry.notenoughupdates.commands.SimpleCommand; import io.github.moulberry.notenoughupdates.cosmetics.CapeManager; import io.github.moulberry.notenoughupdates.infopanes.CollectionLogInfoPane; import io.github.moulberry.notenoughupdates.infopanes.CosmeticsInfoPane; +import io.github.moulberry.notenoughupdates.mixins.MixinRenderItem; import io.github.moulberry.notenoughupdates.profileviewer.GuiProfileViewer; import io.github.moulberry.notenoughupdates.profileviewer.ProfileViewer; import io.github.moulberry.notenoughupdates.questing.GuiQuestLine; @@ -24,6 +25,8 @@ import net.minecraft.client.gui.inventory.*; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.settings.KeyBinding; +import net.minecraft.client.shader.Framebuffer; +import net.minecraft.client.shader.Shader; import net.minecraft.command.ICommandSender; import net.minecraft.event.ClickEvent; import net.minecraft.init.Blocks; @@ -37,6 +40,7 @@ import net.minecraft.scoreboard.ScoreObjective; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.Matrix4f; import net.minecraft.util.Session; import net.minecraftforge.client.ClientCommandHandler; import net.minecraftforge.client.event.*; @@ -61,10 +65,13 @@ import java.lang.reflect.Modifier; import java.net.Proxy; import java.text.NumberFormat; import java.util.*; +import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import static io.github.moulberry.notenoughupdates.GuiTextures.*; @@ -127,10 +134,20 @@ public class NotEnoughUpdates { } }); + SimpleCommand enchantColourCommand = new SimpleCommand("neuec", new SimpleCommand.ProcessCommandRunnable() { + public void processCommand(ICommandSender sender, String[] args) { + openGui = new GuiEnchantColour(); + } + }); + private static ProfileViewer profileViewer; SimpleCommand viewProfileCommand = new SimpleCommand("neuprofile", new SimpleCommand.ProcessCommandRunnable() { public void processCommand(ICommandSender sender, String[] args) { + /*if(!OpenGlHelper.isFramebufferEnabled()) { + Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "This feature requires FBOs to work. Try disabling Optifine's 'Fast Render'.")); + } else*/ if(args.length != 1) { Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "idiot.")); @@ -210,6 +227,7 @@ public class NotEnoughUpdates { ClientCommandHandler.instance.registerCommand(linksCommand); ClientCommandHandler.instance.registerCommand(viewProfileCommand); ClientCommandHandler.instance.registerCommand(overlayPlacementsCommand); + ClientCommandHandler.instance.registerCommand(enchantColourCommand); //ClientCommandHandler.instance.registerCommand(questingCommand); ClientCommandHandler.instance.registerCommand(neuAhCommand); @@ -383,28 +401,39 @@ public class NotEnoughUpdates { * 2)Adds unique items to the collection log */ private HashMap newItemAddMap = new HashMap<>(); + private long lastLongUpdate = 0; @SubscribeEvent public void onTick(TickEvent.ClientTickEvent event) { + boolean longUpdate = false; + long currentTime = System.currentTimeMillis(); + if(currentTime - lastLongUpdate > 1000) { + longUpdate = true; + lastLongUpdate = currentTime; + } if(openGui != null) { Minecraft.getMinecraft().displayGuiScreen(openGui); openGui = null; } - if(hasSkyblockScoreboard()) { - manager.auctionManager.tick(); - if(!joinedSB && manager.config.showUpdateMsg.value) { - if(displayUpdateMessageIfOutOfDate()) { - joinedSB = false; + if(longUpdate) { + updateSkyblockScoreboard(); + if(hasSkyblockScoreboard()) { + manager.auctionManager.tick(); + if(!joinedSB && manager.config.showUpdateMsg.value) { + if(displayUpdateMessageIfOutOfDate()) { + joinedSB = false; + } } + SBScoreboardData.getInstance().tick(); + //GuiQuestLine.questLine.tick(); } - SBScoreboardData.getInstance().tick(); - //GuiQuestLine.questLine.tick(); + //ItemRarityHalo.resetItemHaloCache(); } - if(currChatMessage != null && System.currentTimeMillis() - lastChatMessage > CHAT_MSG_COOLDOWN) { - lastChatMessage = System.currentTimeMillis(); + if(currChatMessage != null && currentTime - lastChatMessage > CHAT_MSG_COOLDOWN) { + lastChatMessage = currentTime; Minecraft.getMinecraft().thePlayer.sendChatMessage(currChatMessage); currChatMessage = null; } - if(hasSkyblockScoreboard() && manager.getCurrentProfile() != null && manager.getCurrentProfile().length() > 0) { + if(longUpdate && hasSkyblockScoreboard() && manager.getCurrentProfile() != null && manager.getCurrentProfile().length() > 0) { HashSet newItem = new HashSet<>(); if(Minecraft.getMinecraft().currentScreen instanceof GuiContainer && !(Minecraft.getMinecraft().currentScreen instanceof GuiCrafting)) { @@ -512,7 +541,8 @@ public class NotEnoughUpdates { String containerName = container.getLowerChestInventory().getDisplayName().getUnformattedText(); manager.auctionManager.customAH.setRenderOverAuctionView(containerName.trim().equals("Auction View") || - containerName.trim().equals("BIN Auction View") || containerName.trim().equals("Confirm Bid")); + containerName.trim().equals("BIN Auction View") || containerName.trim().equals("Confirm Bid") || + containerName.trim().equals("Confirm Purchase")); } //OPEN @@ -682,7 +712,7 @@ public class NotEnoughUpdates { */ @SubscribeEvent public void onGuiBackgroundDraw(GuiScreenEvent.BackgroundDrawnEvent event) { - if((event.gui instanceof GuiContainer || event.gui instanceof CustomAHGui) && isOnSkyblock()) { + if((event.gui instanceof GuiContainer || event.gui instanceof CustomAHGui || event.gui instanceof GuiItemRecipe) && isOnSkyblock()) { ScaledResolution scaledresolution = new ScaledResolution(Minecraft.getMinecraft()); int width = scaledresolution.getScaledWidth(); @@ -749,7 +779,7 @@ public class NotEnoughUpdates { @SubscribeEvent public void onGuiScreenDrawPost(GuiScreenEvent.DrawScreenEvent.Post event) { if(!(event.gui instanceof CustomAHGui || manager.auctionManager.customAH.isRenderOverAuctionView())) { - if(event.gui instanceof GuiContainer && isOnSkyblock()) { + if((event.gui instanceof GuiContainer || event.gui instanceof GuiItemRecipe) && isOnSkyblock()) { renderDungeonChestOverlay(event.gui); @@ -1003,6 +1033,103 @@ public class NotEnoughUpdates { }*/ } + @SubscribeEvent(priority = EventPriority.LOW) + public void onItemTooltipLow(ItemTooltipEvent event) { + //NotEnoughUpdates.INSTANCE.manager.config.enchantColours.value + int index = 0; + List newTooltip = new ArrayList<>(); + for(String line : event.toolTip) { + for(String op : NotEnoughUpdates.INSTANCE.manager.config.enchantColours.value) { + List colourOps = GuiEnchantColour.splitter.splitToList(op); + String enchantName = GuiEnchantColour.getColourOpIndex(colourOps, 0); + String comparator = GuiEnchantColour.getColourOpIndex(colourOps, 1); + String comparison = GuiEnchantColour.getColourOpIndex(colourOps, 2); + String colourCode = GuiEnchantColour.getColourOpIndex(colourOps, 3); + + if(enchantName.length() == 0) continue; + if(comparator.length() == 0) continue; + if(comparison.length() == 0) continue; + if(colourCode.length() == 0) continue; + + if(enchantName.contains("(") || enchantName.contains(")")) continue; + + int comparatorI = ">=<".indexOf(comparator.charAt(0)); + + int levelToFind = -1; + try { + levelToFind = Integer.parseInt(comparison); + } catch(Exception e) { continue; } + + if(comparatorI < 0) continue; + if("0123456789abcdefz".indexOf(colourCode.charAt(0)) < 0) continue; + + //item_lore = item_lore.replaceAll("\\u00A79("+lvl4Max+" IV)", EnumChatFormatting.DARK_PURPLE+"$1"); + //9([a-zA-Z ]+?) ([0-9]+|(I|II|III|IV|V|VI|VII|VIII|IX|X))(,|$) + Pattern pattern; + try { + String prefix = "\u00A79"; + if(enchantName.startsWith("ULT_")) prefix = "\u00A7l\u00A7d"; + pattern = Pattern.compile(prefix+"("+enchantName+") ([0-9]+|(I|II|III|IV|V|VI|VII|VIII|IX|X))(,|$)"); + } catch(Exception e) {continue;} //malformed regex + Matcher matcher = pattern.matcher(line); + int matchCount = 0; + while(matcher.find() && matchCount < 5) { + matchCount++; + int level = -1; + String levelStr = matcher.group(2); + if(levelStr == null) continue; + try { + level = Integer.parseInt(levelStr); + } catch(Exception e) { + switch(levelStr) { + case "I": + level = 1; break; + case "II": + level = 2; break; + case "III": + level = 3; break; + case "IV": + level = 4; break; + case "V": + level = 5; break; + case "VI": + level = 6; break; + case "VII": + level = 7; break; + case "VIII": + level = 8; break; + case "IX": + level = 9; break; + case "X": + level = 10; break; + } + } + boolean matches = false; + if(level > 0) { + switch(comparator) { + case ">": + matches = level > levelToFind; break; + case "=": + matches = level == levelToFind; break; + case "<": + matches = level < levelToFind; break; + } + } + if(matches) { + if(!colourCode.equals("z")) { + line = line.replaceAll("\\u00A79"+matcher.group(1), "\u00A7"+colourCode+matcher.group(1)); + } else { + line = line.replaceAll("\\u00A79"+matcher.group(1), Utils.chromaString(matcher.group(1))); + } + } + } + } + newTooltip.add(line); + } + event.toolTip.clear(); + event.toolTip.addAll(newTooltip); + } + /** * This makes it so that holding LCONTROL while hovering over an item with NBT will show the NBT of the item. * @param event @@ -1103,13 +1230,19 @@ public class NotEnoughUpdates { } } - //Stolen from Biscut's SkyblockAddons public boolean isOnSkyblock() { if(!manager.config.onlyShowOnSkyblock.value) return true; return hasSkyblockScoreboard(); } + private boolean hasSkyblockScoreboard; + public boolean hasSkyblockScoreboard() { + return hasSkyblockScoreboard; + } + + //Stolen from Biscut's SkyblockAddons + private void updateSkyblockScoreboard() { Minecraft mc = Minecraft.getMinecraft(); if (mc != null && mc.theWorld != null) { @@ -1119,12 +1252,13 @@ public class NotEnoughUpdates { String objectiveName = sidebarObjective.getDisplayName().replaceAll("(?i)\\u00A7.", ""); for (String skyblock : SKYBLOCK_IN_ALL_LANGUAGES) { if (objectiveName.startsWith(skyblock)) { - return true; + hasSkyblockScoreboard = true; + return; } } } } - return false; + hasSkyblockScoreboard = false; } } 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 53cc4639..4d30cf3e 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/auction/APIManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/auction/APIManager.java @@ -40,6 +40,8 @@ public class APIManager { private JsonArray playerInformation = null; + public HashMap aucUpdates = new HashMap<>(); + public TreeMap>> extrasToAucIdMap = new TreeMap<>(); private long lastPageUpdate = 0; @@ -141,20 +143,21 @@ public class APIManager { public void tick() { customAH.tick(); - if(System.currentTimeMillis() - lastPageUpdate > 5*1000) { + long currentTime = System.currentTimeMillis(); + if(currentTime - lastPageUpdate > 5*1000) { lastPageUpdate = System.currentTimeMillis(); updatePageTick(); ahNotification(); } - if(System.currentTimeMillis() - lastProfileUpdate > 10*1000) { + if(currentTime - lastProfileUpdate > 10*1000) { lastProfileUpdate = System.currentTimeMillis(); updateProfiles(Minecraft.getMinecraft().thePlayer.getUniqueID().toString().replace("-", "")); } - if(System.currentTimeMillis() - lastCleanup > 120*1000) { + if(currentTime - lastCleanup > 120*1000) { lastCleanup = System.currentTimeMillis(); cleanup(); } - if(System.currentTimeMillis() - lastCustomAHSearch > 60*1000) { + if(currentTime - lastCustomAHSearch > 60*1000) { lastCustomAHSearch = System.currentTimeMillis(); if(Minecraft.getMinecraft().currentScreen instanceof CustomAHGui || customAH.isRenderOverAuctionView()) { customAH.updateSearch(); @@ -415,11 +418,12 @@ public class APIManager { String rarity = auction.get("tier").getAsString(); JsonArray bids = auction.get("bids").getAsJsonArray(); - for(String lvl4Max : lvl4Maxes) { - item_lore = item_lore.replaceAll("\\u00A79("+lvl4Max+" IV)", EnumChatFormatting.DARK_PURPLE+"$1"); + { + Auction old = auctionMap.get(auctionUuid); + if(old != null && old.highest_bid_amount != highest_bid_amount) { + aucUpdates.put(page, aucUpdates.computeIfAbsent(page, k->0)+1); + } } - item_lore = item_lore.replaceAll("\\u00A79([A-Za-z ]+ VI)", EnumChatFormatting.DARK_PURPLE+"$1"); - item_lore = item_lore.replaceAll("\\u00A79([A-Za-z ]+ VII)", EnumChatFormatting.RED+"$1"); try { NBTTagCompound item_tag; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java b/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java index 77fa8425..2bbabd64 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/auction/CustomAH.java @@ -182,10 +182,12 @@ public class CustomAH extends Gui { } public void tick() { - if(shouldUpdateSearch) updateSearch(); - if(shouldSortItems) { - sortItems(); - shouldSortItems = false; + if(Minecraft.getMinecraft().currentScreen instanceof CustomAHGui || renderOverAuctionView) { + if(shouldUpdateSearch) updateSearch(); + if(shouldSortItems) { + sortItems(); + shouldSortItems = false; + } } } @@ -530,8 +532,7 @@ public class CustomAH extends Gui { } catch(NullPointerException e) { //i cant be bothered } } - } else if(containerName.trim().equals("Confirm Bid")) { - + } else if(containerName.trim().equals("Confirm Bid") || containerName.trim().equals("Confirm Purchase")) { Minecraft.getMinecraft().getTextureManager().bindTexture(auction_accept); this.drawTexturedModalRect(auctionViewLeft, guiTop, 0, 0, 78, 172); @@ -878,6 +879,11 @@ public class CustomAH extends Gui { lore.add("ID Tagged Auctions: " + manager.auctionManager.internalnameTaggedAuctions); lore.add("Total Tags: " + manager.auctionManager.totalTags); lore.add("Tagged Auctions: " + manager.auctionManager.taggedAuctions); + lore.add("AucUpdates(0): " + manager.auctionManager.aucUpdates.computeIfAbsent(0, k->0)); + lore.add("AucUpdates(1): " + manager.auctionManager.aucUpdates.computeIfAbsent(1, k->0)); + lore.add("AucUpdates(20): " + manager.auctionManager.aucUpdates.computeIfAbsent(20, k->0)); + lore.add("AucUpdates(Last-1): " + manager.auctionManager.aucUpdates.computeIfAbsent(manager.auctionManager.aucUpdates.size()-2, k->0)); + lore.add("AucUpdates(Last): " + manager.auctionManager.aucUpdates.computeIfAbsent(manager.auctionManager.aucUpdates.size()-1, k->0)); lore.add(""); lore.add(EnumChatFormatting.AQUA + "Right-Click to copy current aucid to clipboard!"); lore.add(EnumChatFormatting.YELLOW + "Click to refresh!"); @@ -1371,7 +1377,7 @@ public class CustomAH extends Gui { Utils.playPressSound(); } } - } else if(containerName.trim().equals("Confirm Bid")) { + } else if(containerName.trim().equals("Confirm Bid") || containerName.trim().equals("Confirm Purchase")) { if(mouseX > guiLeft+getXSize()+4+31 && mouseX < guiLeft+getXSize()+4+31+16) { if(mouseY > guiTop+31 && mouseY < guiTop+31+16) { if(currentAucId != null) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/CollectionLogInfoPane.java b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/CollectionLogInfoPane.java index 5f9e6af1..e4c524f2 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/infopanes/CollectionLogInfoPane.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/infopanes/CollectionLogInfoPane.java @@ -241,19 +241,6 @@ public class CollectionLogInfoPane extends ScrollableInfoPane { } } - private Matrix4f createProjectionMatrix(int width, int height) { - Matrix4f projMatrix = new Matrix4f(); - projMatrix.setIdentity(); - projMatrix.m00 = 2.0F / (float)width; - projMatrix.m11 = 2.0F / (float)(-height); - projMatrix.m22 = -0.0020001999F; - projMatrix.m33 = 1.0F; - projMatrix.m03 = -1.0F; - projMatrix.m13 = 1.0F; - projMatrix.m23 = -1.0001999F; - return projMatrix; - } - public int getCurrentAcquiredCount() { if(getAcquiredItems() == null) return 0; if(!getAcquiredItems().containsKey(manager.getCurrentProfile())) return 0; @@ -268,7 +255,7 @@ public class CollectionLogInfoPane extends ScrollableInfoPane { if(itemFramebuffer != null && grayscaleShader != null && (itemFramebuffer.framebufferWidth != width || itemFramebuffer.framebufferHeight != height)) { - grayscaleShader.setProjectionMatrix(createProjectionMatrix( + grayscaleShader.setProjectionMatrix(Utils.createProjectionMatrix( width*scaledresolution.getScaleFactor(), height*scaledresolution.getScaleFactor())); } @@ -300,7 +287,7 @@ public class CollectionLogInfoPane extends ScrollableInfoPane { grayscaleShader = new Shader(new NEUResourceManager(Minecraft.getMinecraft().getResourceManager()), "grayscale", itemFramebuffer, itemFramebufferGrayscale); - grayscaleShader.setProjectionMatrix(createProjectionMatrix( + grayscaleShader.setProjectionMatrix(Utils.createProjectionMatrix( width*scaledresolution.getScaleFactor(), height*scaledresolution.getScaleFactor())); } catch(Exception e) { return; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementTextField.java b/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementTextField.java index 3c939589..23f4ad0b 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementTextField.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/itemeditor/GuiElementTextField.java @@ -54,7 +54,9 @@ public class GuiElementTextField extends GuiElement { } public void setText(String text) { - textField.setText(text); + if(textField.getText() == null || !textField.getText().equals(text)) { + textField.setText(text); + } } public void setSize(int searchBarXSize, int searchBarYSize) { @@ -300,6 +302,7 @@ public class GuiElementTextField extends GuiElement { if((options & FORCE_CAPS) != 0) typedChar = Character.toUpperCase(typedChar); if((options & NO_SPACE) != 0 && typedChar == ' ') return; + textField.setFocused(true); textField.textboxKeyTyped(typedChar, keyCode); if((options & COLOUR) != 0) { @@ -378,11 +381,18 @@ public class GuiElementTextField extends GuiElement { textNoColor = matcher.replaceFirst("\u00B6"+code); } + int xStartOffset = 5; + float scale = 1; String[] texts = text.split("\n"); for(int yOffI = 0; yOffI < texts.length; yOffI++) { int yOff = yOffI*extraSize; if(isScaling() && Minecraft.getMinecraft().fontRendererObj.getStringWidth(texts[yOffI])>searchBarXSize-10) { + scale = (searchBarXSize-2)/(float)Minecraft.getMinecraft().fontRendererObj.getStringWidth(texts[yOffI]); + if(scale > 1) scale=1; + float newLen = Minecraft.getMinecraft().fontRendererObj.getStringWidth(texts[yOffI])*scale; + xStartOffset = (int)((searchBarXSize-newLen)/2f); + Utils.drawStringCenteredScaledMaxWidth(texts[yOffI], Minecraft.getMinecraft().fontRendererObj, x+searchBarXSize/2f, y+searchBarYSize/2f+yOff, false, searchBarXSize-2, Color.WHITE.getRGB()); @@ -390,7 +400,6 @@ public class GuiElementTextField extends GuiElement { Minecraft.getMinecraft().fontRendererObj.drawString(Utils.trimToWidth(texts[yOffI], searchBarXSize-10), x + 5, y+(searchBarYSize-8)/2+yOff, Color.WHITE.getRGB()); } - } if(focus && System.currentTimeMillis()%1000>500) { @@ -406,22 +415,20 @@ public class GuiElementTextField extends GuiElement { if(split.length <= numLinesBeforeCursor || split.length == 0) { textBeforeCursorWidth = 0; } else { - textBeforeCursorWidth = Minecraft.getMinecraft().fontRendererObj.getStringWidth(split[split.length-1]); + textBeforeCursorWidth = (int)(Minecraft.getMinecraft().fontRendererObj.getStringWidth(split[split.length-1])*scale); } - drawRect(x + 5 + textBeforeCursorWidth, + drawRect(x + xStartOffset + textBeforeCursorWidth, y+(searchBarYSize-8)/2-1 + yOff, - x + 5 + textBeforeCursorWidth+1, + x + xStartOffset + textBeforeCursorWidth+1, y+(searchBarYSize-8)/2+9 + yOff, Color.WHITE.getRGB()); } String selectedText = textField.getSelectedText(); if(!selectedText.isEmpty()) { - int leftIndex = textField.getCursorPosition() < textField.getSelectionEnd() ? - textField.getCursorPosition() : textField.getSelectionEnd(); - int rightIndex = textField.getCursorPosition() > textField.getSelectionEnd() ? - textField.getCursorPosition() : textField.getSelectionEnd(); + int leftIndex = Math.min(textField.getCursorPosition(), textField.getSelectionEnd()); + int rightIndex = Math.max(textField.getCursorPosition(), textField.getSelectionEnd()); - int texX = 0; + float texX = 0; int texY = 0; boolean sectionSignPrev = false; boolean bold = false; @@ -440,9 +447,9 @@ public class GuiElementTextField extends GuiElement { if(c == '\n') { if(i >= leftIndex && i < rightIndex) { - drawRect(x + 5 + texX, + drawRect(x + xStartOffset + (int)texX, y+(searchBarYSize-8)/2-1 + texY, - x + 5 + texX + 3, + x + xStartOffset + (int)texX + 3, y+(searchBarYSize-8)/2+9 + texY, Color.LIGHT_GRAY.getRGB()); } @@ -456,22 +463,22 @@ public class GuiElementTextField extends GuiElement { int len = Minecraft.getMinecraft().fontRendererObj.getStringWidth(String.valueOf(c)); if(bold) len++; if(i >= leftIndex && i < rightIndex) { - drawRect(x + 5 + texX, + drawRect(x + xStartOffset + (int)texX, y+(searchBarYSize-8)/2-1 + texY, - x + 5 + texX + len, + x + xStartOffset + (int)(texX + len*scale), y+(searchBarYSize-8)/2+9 + texY, Color.LIGHT_GRAY.getRGB()); - Minecraft.getMinecraft().fontRendererObj.drawString(String.valueOf(c), - x + 5 + texX, - y+(searchBarYSize-8)/2 + texY, Color.BLACK.getRGB()); + Utils.drawStringScaled(String.valueOf(c), Minecraft.getMinecraft().fontRendererObj, + x + xStartOffset + texX, + y+searchBarYSize/2f-scale*8/2f + texY, false, Color.BLACK.getRGB(), scale); if(bold) { - Minecraft.getMinecraft().fontRendererObj.drawString(String.valueOf(c), - x + 5 + texX +1, - y+(searchBarYSize-8)/2 + texY, Color.BLACK.getRGB()); + Utils.drawStringScaled(String.valueOf(c), Minecraft.getMinecraft().fontRendererObj, + x + xStartOffset + texX + 1, + y+searchBarYSize/2f-scale*8/2f + texY, false, Color.BLACK.getRGB(), scale); } } - texX += len; + texX += len*scale; } } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinInventoryEffectRenderer.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinInventoryEffectRenderer.java index 51c85b19..00fdc873 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinInventoryEffectRenderer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinInventoryEffectRenderer.java @@ -4,6 +4,7 @@ import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import net.minecraft.client.renderer.InventoryEffectRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderItem.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderItem.java new file mode 100644 index 00000000..67f0f7dc --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinRenderItem.java @@ -0,0 +1,53 @@ +package io.github.moulberry.notenoughupdates.mixins; + +import io.github.moulberry.notenoughupdates.ItemRarityHalo; +import io.github.moulberry.notenoughupdates.NEUResourceManager; +import io.github.moulberry.notenoughupdates.NotEnoughUpdates; +import io.github.moulberry.notenoughupdates.util.Utils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.model.IBakedModel; +import net.minecraft.client.shader.Framebuffer; +import net.minecraft.client.shader.Shader; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Matrix4f; +import org.lwjgl.BufferUtils; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL14; +import org.lwjgl.opengl.GL30; +import org.lwjgl.util.vector.Vector4f; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import javax.vecmath.Vector3f; +import java.awt.*; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.util.HashMap; + +@Mixin({RenderItem.class}) +public abstract class MixinRenderItem { + + //Lnet/minecraft/client/renderer/entity/RenderItem;renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/resources/model/IBakedModel;)V + @Inject(method="Lnet/minecraft/client/renderer/entity/RenderItem;renderItemIntoGUI(Lnet/minecraft/item/ItemStack;II)V", + at=@At("HEAD"), cancellable = true) + public void renderItemIntoGUI(ItemStack stack, int x, int y, CallbackInfo ci) { + if(x == 0 && y == 0 || true) return; + ItemRarityHalo.onItemRender(stack, x, y); + + if(Keyboard.isKeyDown(Keyboard.KEY_H)) ci.cancel(); + } +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/Options.java b/src/main/java/io/github/moulberry/notenoughupdates/options/Options.java index 1c8a6e07..8cd82568 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/Options.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/Options.java @@ -1,6 +1,7 @@ package io.github.moulberry.notenoughupdates.options; import com.google.gson.*; +import io.github.moulberry.notenoughupdates.GuiEnchantColour; import io.github.moulberry.notenoughupdates.NEUOverlayPlacements; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.mbgui.MBAnchorPoint; @@ -137,6 +138,11 @@ public class Options { "Item Background Opacity", false, "Changes the opacity of item background. Value between 0-255.", 0, 255); + public Option itemHighlightOpacity = new Option( + 178.0, + "Item Highlight Opacity", + false, + "Changes the opacity of item highlights. Value between 0-255.", 0, 255); public Option panePadding = new Option( 10.0, "Pane Padding", @@ -206,6 +212,17 @@ public class Options { "OverlaySearchBar", false, "OverlaySearchBar"); + public Option> enchantColours = new Option( + Utils.createList("[a-zA-Z ]+:\u003e:9:6", + "[a-zA-Z ]+:\u003e:6:c", + "[a-zA-Z ]+:\u003e:5:5", + "Experience:\u003e:3:5", + "Life Steal:\u003e:3:5", + "Scavenger:\u003e:3:5", + "Looting:\u003e:3:5"), + "enchantColours", + false, + "enchantColours"); private ArrayList createDefaultQuickCommands() { ArrayList arr = new ArrayList<>(); @@ -248,6 +265,11 @@ public class Options { buttons.add(new Button("Edit Gui Positions", "Allows you to change the position of the search bar, etc.", () -> { Minecraft.getMinecraft().displayGuiScreen(new NEUOverlayPlacements()); })); + + + buttons.add(new Button("Edit Enchant Colours", "Allows you to change the colour of any enchant at any level.", () -> { + Minecraft.getMinecraft().displayGuiScreen(new GuiEnchantColour()); + })); } public List