From 06cb4d208801e276a0e4d96252c00ae01d9e522d Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sat, 20 Feb 2021 23:37:59 +0800 Subject: charzard just 4 u --- .../notenoughupdates/ItemPriceInformation.java | 40 +- .../notenoughupdates/NEUEventListener.java | 32 +- .../moulberry/notenoughupdates/NEUManager.java | 18 +- .../moulberry/notenoughupdates/NEUOverlay.java | 2 +- .../notenoughupdates/NotEnoughUpdates.java | 19 + .../notenoughupdates/core/BackgroundBlur.java | 37 +- .../core/config/annotations/ConfigAccordionId.java | 14 + .../config/annotations/ConfigEditorAccordion.java | 14 + .../core/config/gui/GuiOptionEditorAccordion.java | 86 ++ .../config/gui/GuiOptionEditorDraggableList.java | 1 + .../core/config/struct/ConfigProcessor.java | 16 +- .../core/util/lerp/LerpingInteger.java | 4 + .../core/util/render/RenderUtils.java | 2 +- .../notenoughupdates/cosmetics/CapeManager.java | 10 +- .../notenoughupdates/cosmetics/GuiCosmetics.java | 41 +- .../notenoughupdates/cosmetics/NEUCape.java | 82 +- .../notenoughupdates/dungeons/DungeonBlocks.java | 22 +- .../notenoughupdates/dungeons/DungeonMap.java | 101 ++- .../notenoughupdates/dungeons/DungeonWin.java | 10 +- .../notenoughupdates/gamemodes/SBGamemodes.java | 2 +- .../notenoughupdates/infopanes/InfoPane.java | 2 +- .../miscfeatures/CustomItemEffects.java | 126 ++- .../miscfeatures/CustomSkulls.java | 22 +- .../miscfeatures/DwarvenMinesTextures.java | 5 - .../miscfeatures/DwarvenMinesWaypoints.java | 46 +- .../miscfeatures/ItemCooldowns.java | 2 +- .../miscfeatures/PetInfoOverlay.java | 64 +- .../notenoughupdates/miscgui/CalendarOverlay.java | 4 + .../notenoughupdates/miscgui/GuiEnchantColour.java | 2 +- .../mixins/MixinItemCameraTransforms.java | 18 + .../mixins/MixinNetHandlerPlayClient.java | 13 +- .../notenoughupdates/mixins/MixinRender.java | 2 +- .../notenoughupdates/mixins/MixinRenderFish.java | 6 +- .../mixins/MixinTileEntitySpecialRenderer.java | 4 +- .../notenoughupdates/mixins/MixinWorld.java | 2 +- .../notenoughupdates/options/NEUConfig.java | 970 ++++++++++----------- .../notenoughupdates/options/NEUConfigEditor.java | 338 ++++++- .../overlays/AuctionSearchOverlay.java | 1 + .../notenoughupdates/overlays/FarmingOverlay.java | 9 +- .../notenoughupdates/overlays/MiningOverlay.java | 57 +- .../notenoughupdates/overlays/OverlayManager.java | 10 + .../notenoughupdates/overlays/TimersOverlay.java | 338 +++++++ .../profileviewer/GuiProfileViewer.java | 12 +- .../notenoughupdates/util/HypixelApi.java | 2 +- .../moulberry/notenoughupdates/util/SBInfo.java | 15 + .../notenoughupdates/util/XPInformation.java | 4 +- .../assets/notenoughupdates/capes/soldier.png | Bin 0 -> 72369 bytes .../notenoughupdates/capes/soldier_preview.png | Bin 0 -> 29839 bytes .../assets/notenoughupdates/core/search.png | Bin 0 -> 401 bytes .../resources/assets/notenoughupdates/hhh.json | 22 - src/main/resources/mixins.notenoughupdates.json | 3 +- 51 files changed, 1817 insertions(+), 835 deletions(-) create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigAccordionId.java create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorAccordion.java create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorAccordion.java create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinItemCameraTransforms.java create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/overlays/TimersOverlay.java create mode 100644 src/main/resources/assets/notenoughupdates/capes/soldier.png create mode 100644 src/main/resources/assets/notenoughupdates/capes/soldier_preview.png create mode 100644 src/main/resources/assets/notenoughupdates/core/search.png delete mode 100644 src/main/resources/assets/notenoughupdates/hhh.json diff --git a/src/main/java/io/github/moulberry/notenoughupdates/ItemPriceInformation.java b/src/main/java/io/github/moulberry/notenoughupdates/ItemPriceInformation.java index 401898d2..58efa371 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/ItemPriceInformation.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/ItemPriceInformation.java @@ -28,14 +28,7 @@ public class ItemPriceInformation { NumberFormat format = NumberFormat.getInstance(Locale.US); if(bazaarItem) { - int[] lines = { - NotEnoughUpdates.INSTANCE.config.priceInfoBaz.line1, - NotEnoughUpdates.INSTANCE.config.priceInfoBaz.line2, - NotEnoughUpdates.INSTANCE.config.priceInfoBaz.line3, - NotEnoughUpdates.INSTANCE.config.priceInfoBaz.line4, - NotEnoughUpdates.INSTANCE.config.priceInfoBaz.line5, - NotEnoughUpdates.INSTANCE.config.priceInfoBaz.line6 - }; + List lines = NotEnoughUpdates.INSTANCE.config.tooltipTweaks.priceInfoBaz; boolean added = false; @@ -51,8 +44,6 @@ public class ItemPriceInformation { for(int lineId : lines) { switch (lineId) { case 0: - continue; - case 1: if(bazaarInfo.has("avg_buy")) { if(!added) { tooltip.add(""); @@ -64,7 +55,7 @@ public class ItemPriceInformation { EnumChatFormatting.GOLD+EnumChatFormatting.BOLD+format.format(bazaarBuyPrice)+" coins"); } break; - case 2: + case 1: if(bazaarInfo.has("avg_sell")) { if(!added) { tooltip.add(""); @@ -76,7 +67,7 @@ public class ItemPriceInformation { EnumChatFormatting.GOLD+EnumChatFormatting.BOLD+format.format(bazaarSellPrice)+" coins"); } break; - case 3: + case 2: if(bazaarInfo.has("curr_buy")) { if(!added) { tooltip.add(""); @@ -88,7 +79,7 @@ public class ItemPriceInformation { EnumChatFormatting.GOLD+EnumChatFormatting.BOLD+format.format(bazaarInstantBuyPrice)+" coins"); } break; - case 4: + case 3: if(bazaarInfo.has("curr_sell")) { if(!added) { tooltip.add(""); @@ -100,7 +91,7 @@ public class ItemPriceInformation { EnumChatFormatting.GOLD+EnumChatFormatting.BOLD+format.format(bazaarInstantSellPrice)+" coins"); } break; - case 5: + case 4: if(craftCost.fromRecipe) { if(!added) { tooltip.add(""); @@ -115,22 +106,13 @@ public class ItemPriceInformation { return added; } else if(auctionItem) { - int[] lines = { - NotEnoughUpdates.INSTANCE.config.priceInfoAuc.line1, - NotEnoughUpdates.INSTANCE.config.priceInfoAuc.line2, - NotEnoughUpdates.INSTANCE.config.priceInfoAuc.line3, - NotEnoughUpdates.INSTANCE.config.priceInfoAuc.line4, - NotEnoughUpdates.INSTANCE.config.priceInfoAuc.line5, - NotEnoughUpdates.INSTANCE.config.priceInfoAuc.line6 - }; + List lines = NotEnoughUpdates.INSTANCE.config.tooltipTweaks.priceInfoAuc; boolean added = false; for(int lineId : lines) { switch (lineId) { case 0: - continue; - case 1: if(lowestBin > 0) { if(!added) { tooltip.add(""); @@ -140,7 +122,7 @@ public class ItemPriceInformation { EnumChatFormatting.GOLD+EnumChatFormatting.BOLD+format.format(lowestBin)+" coins"); } break; - case 2: + case 1: if(auctionInfo != null) { if(!added) { tooltip.add(""); @@ -159,7 +141,7 @@ public class ItemPriceInformation { } break; - case 3: + case 2: if(auctionInfo != null) { if(!added) { tooltip.add(""); @@ -176,7 +158,7 @@ public class ItemPriceInformation { } } break; - case 4: + case 3: if(craftCost.fromRecipe) { if(!added) { tooltip.add(""); @@ -186,7 +168,7 @@ public class ItemPriceInformation { EnumChatFormatting.GOLD+EnumChatFormatting.BOLD+format.format((int)craftCost.craftCost)+" coins"); } break; - case 5: + case 4: if(lowestBinAvg > 0) { if(!added) { tooltip.add(""); @@ -196,7 +178,7 @@ public class ItemPriceInformation { EnumChatFormatting.GOLD+EnumChatFormatting.BOLD+format.format(lowestBinAvg)+" coins"); } break; - case 6: + case 5: if(Constants.ESSENCECOSTS == null) break; JsonObject essenceCosts = Constants.ESSENCECOSTS; if(!essenceCosts.has(internalname)) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java index 4ba2cba9..838f0b0a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java @@ -185,7 +185,7 @@ public class NEUEventListener { longUpdate = true; lastLongUpdate = currentTime; } - if(!neu.config.dungeonBlock.slowDungeonBlocks) { + if(!neu.config.dungeons.slowDungeonBlocks) { DungeonBlocks.tick(); } DungeonWin.tick(); @@ -254,7 +254,7 @@ public class NEUEventListener { NotEnoughUpdates.profileViewer.putNameUuid(Minecraft.getMinecraft().thePlayer.getName(), Minecraft.getMinecraft().thePlayer.getUniqueID().toString().replace("-", "")); - if(neu.config.dungeonBlock.slowDungeonBlocks) { + if(neu.config.dungeons.slowDungeonBlocks) { DungeonBlocks.tick(); } @@ -287,7 +287,7 @@ public class NEUEventListener { displayUpdateMessageIfOutOfDate(); } - if(neu.config.hidden.doRamNotif) { + if(neu.config.notifications.doRamNotif) { long maxMemoryMB = Runtime.getRuntime().maxMemory()/1024L/1024L; if(maxMemoryMB > 4100) { notificationDisplayMillis = System.currentTimeMillis(); @@ -295,9 +295,9 @@ public class NEUEventListener { notificationLines.add(EnumChatFormatting.DARK_RED+"Too much memory allocated!"); notificationLines.add(String.format(EnumChatFormatting.DARK_GRAY+"NEU has detected %03dMB of memory allocated to Minecraft!", maxMemoryMB)); notificationLines.add(EnumChatFormatting.DARK_GRAY+"It is recommended to allocated between 2-4GB of memory"); - notificationLines.add(EnumChatFormatting.DARK_GRAY+"More than 4GB WILL cause FPS issues, EVEN if you have 16GB+ available"); + notificationLines.add(EnumChatFormatting.DARK_GRAY+"More than 4GB MAY cause FPS issues, EVEN if you have 16GB+ available"); notificationLines.add(""); - notificationLines.add(EnumChatFormatting.DARK_GRAY+"For more information, visit #ram-info in discord.gg/spr6ESn"); + notificationLines.add(EnumChatFormatting.DARK_GRAY+"For more information, visit #ram-info in discord.gg/moulberry"); } } @@ -884,9 +884,9 @@ public class NEUEventListener { } private void renderDungeonChestOverlay(GuiScreen gui) { - if(neu.config.dungeonProfit.profitDisplayLoc == 3) return; + if(neu.config.dungeons.profitDisplayLoc == 3) return; - if(gui instanceof GuiChest && neu.config.dungeonProfit.profitDisplayLoc != 2) { + if(gui instanceof GuiChest && neu.config.dungeons.profitDisplayLoc != 2) { try { int xSize = (int) Utils.getField(GuiContainer.class, gui, "xSize", "field_146999_f"); int ySize = (int) Utils.getField(GuiContainer.class, gui, "ySize", "field_147000_g"); @@ -933,7 +933,7 @@ public class NEUEventListener { if(bazaarPrice > 0) { worth = bazaarPrice; } else { - switch(neu.config.dungeonProfit.profitType) { + switch(neu.config.dungeons.profitType) { case 1: worth = neu.manager.auctionManager.getItemAvgBin(internal); break; @@ -1025,7 +1025,7 @@ public class NEUEventListener { plStringBIN = prefix + "-" + format.format(-profitLossBIN) + " coins"; } - if(neu.config.dungeonProfit.profitDisplayLoc == 1 && !valueStringBIN2.equals(missingItem)) { + if(neu.config.dungeons.profitDisplayLoc == 1 && !valueStringBIN2.equals(missingItem)) { int w = Minecraft.getMinecraft().fontRendererObj.getStringWidth(plStringBIN); GlStateManager.disableLighting(); GlStateManager.translate(0, 0, 200); @@ -1729,7 +1729,7 @@ public class NEUEventListener { } } - if(neu.config.dungeonProfit.profitDisplayLoc == 2 && Minecraft.getMinecraft().currentScreen instanceof GuiChest) { + if(neu.config.dungeons.profitDisplayLoc == 2 && Minecraft.getMinecraft().currentScreen instanceof GuiChest) { if(line.contains(EnumChatFormatting.GREEN+"Open Reward Chest")) { dungeonProfit = true; } else if(index == 7 && dungeonProfit) { @@ -1771,7 +1771,7 @@ public class NEUEventListener { if(bazaarPrice > 0) { worth = bazaarPrice; } else { - switch(neu.config.dungeonProfit.profitType) { + switch(neu.config.dungeons.profitType) { case 1: worth = neu.manager.auctionManager.getItemAvgBin(internal); break; @@ -1886,6 +1886,16 @@ public class NEUEventListener { event.toolTip.clear(); event.toolTip.addAll(newTooltip); + HashMap> loreBuckets = new HashMap<>(); + + List hypixelOrder = new ArrayList<>(); + + hypixelOrder.add("attributes"); + hypixelOrder.add("enchants"); + hypixelOrder.add("ability"); + hypixelOrder.add("reforge_bonus"); + hypixelOrder.add("rarity"); + if(neu.config.tooltipTweaks.showPriceInfoInvItem) { ItemPriceInformation.addToTooltip(event.toolTip, internalname, event.itemStack); } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java index bbaa08db..061d6774 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java @@ -6,6 +6,7 @@ import io.github.moulberry.notenoughupdates.auction.APIManager; import io.github.moulberry.notenoughupdates.miscgui.GuiItemRecipe; import io.github.moulberry.notenoughupdates.util.Constants; import io.github.moulberry.notenoughupdates.util.HypixelApi; +import io.github.moulberry.notenoughupdates.util.SBInfo; import io.github.moulberry.notenoughupdates.util.Utils; import net.minecraft.client.Minecraft; import net.minecraft.client.settings.KeyBinding; @@ -25,9 +26,6 @@ import java.net.URL; import java.net.URLConnection; import java.nio.charset.StandardCharsets; import java.util.*; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadPoolExecutor; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -105,16 +103,8 @@ public class NEUManager { this.currentProfile = currentProfile; } - public void setCurrentProfileBackup(String currentProfile) { - this.currentProfileBackup = currentProfile; - } - public String getCurrentProfile() { - if(currentProfile == null || currentProfile.length() == 0) { - return currentProfileBackup; - } else { - return currentProfile; - } + return SBInfo.getInstance().currentProfile; } public void saveItemRenameConfig() { @@ -606,11 +596,11 @@ public class NEUManager { */ public Map subMapWithKeysThatAreSuffixes(String prefix, NavigableMap map) { if ("".equals(prefix)) return map; - String lastKey = createLexicographicallyNextStringOfTheSameLenght(prefix); + String lastKey = createLexicographicallyNextStringOfTheSameLength(prefix); return map.subMap(prefix, true, lastKey, false); } - String createLexicographicallyNextStringOfTheSameLenght(String input) { + public String createLexicographicallyNextStringOfTheSameLength(String input) { final int lastCharPosition = input.length()-1; String inputWithoutLastChar = input.substring(0, lastCharPosition); char lastChar = input.charAt(lastCharPosition) ; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java index a87d266a..689a98f1 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java @@ -1732,7 +1732,7 @@ public class NEUOverlay extends Gui { BackgroundBlur.renderBlurredBackground(NotEnoughUpdates.INSTANCE.config.itemlist.bgBlurFactor, width, height, leftSide+getBoxPadding()-5, getBoxPadding()-5, - paneWidth-getBoxPadding()*2+10, height-getBoxPadding()*2+10); + paneWidth-getBoxPadding()*2+10, height-getBoxPadding()*2+10, true); Gui.drawRect(leftSide+getBoxPadding()-5, getBoxPadding()-5, leftSide+getBoxPadding()-5+paneWidth-getBoxPadding()*2+10, getBoxPadding()-5+height-getBoxPadding()*2+10, 0xc8101010); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java index 447dc8d1..59c821b0 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java @@ -690,6 +690,7 @@ public class NotEnoughUpdates { Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED+devFailStrings[devFailIndex++])); return; } + if(args.length == 1 && args[0].equalsIgnoreCase("dev")) NotEnoughUpdates.INSTANCE.config.hidden.dev = true; Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN+"Executing dubious code")); /*Minecraft.getMinecraft().thePlayer.rotationYaw = 0; Minecraft.getMinecraft().thePlayer.rotationPitch = 0; @@ -876,6 +877,23 @@ public class NotEnoughUpdates { SimpleCommand cosmeticsCommand = new SimpleCommand("neucosmetics", new SimpleCommand.ProcessCommandRunnable() { public void processCommand(ICommandSender sender, String[] args) { + if(Loader.isModLoaded("optifine") && + new File(Minecraft.getMinecraft().mcDataDir, "optionsof.txt").exists()) { + try(InputStream in = new FileInputStream(new File(Minecraft.getMinecraft().mcDataDir, "optionsof.txt"))) { + BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8)); + + String line; + while((line = reader.readLine()) != null) { + if(line.contains("ofFastRender:true")) { + Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + + "NEU cosmetics do not work with OF Fast Render. Go to Video > Performance to disable it.")); + return; + } + } + } catch(Exception e) { + } + } + openGui = new GuiCosmetics(); } }); @@ -972,6 +990,7 @@ public class NotEnoughUpdates { MinecraftForge.EVENT_BUS.register(new FuelBar()); MinecraftForge.EVENT_BUS.register(XPInformation.getInstance()); MinecraftForge.EVENT_BUS.register(OverlayManager.petInfoOverlay); + MinecraftForge.EVENT_BUS.register(OverlayManager.timersOverlay); if(Minecraft.getMinecraft().getResourceManager() instanceof IReloadableResourceManager) { ((IReloadableResourceManager)Minecraft.getMinecraft().getResourceManager()).registerReloadListener(CustomSkulls.getInstance()); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/BackgroundBlur.java b/src/main/java/io/github/moulberry/notenoughupdates/core/BackgroundBlur.java index b0f0bff3..bc8ea93a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/BackgroundBlur.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/BackgroundBlur.java @@ -2,6 +2,7 @@ package io.github.moulberry.notenoughupdates.core; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.core.util.render.RenderUtils; +import io.github.moulberry.notenoughupdates.util.Utils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; import net.minecraft.client.renderer.GlStateManager; @@ -28,6 +29,7 @@ public class BackgroundBlur { private static HashMap blurOutput = new HashMap<>(); private static HashMap lastBlurUse = new HashMap<>(); + private static long lastBlur = 0; private static HashSet requestedBlurs = new HashSet<>(); private static int fogColour = 0; @@ -47,14 +49,14 @@ public class BackgroundBlur { } } - @SubscribeEvent(priority = EventPriority.HIGHEST) - public void onScreenRender(RenderGameOverlayEvent.Pre event) { - if(shouldBlur && event.type == RenderGameOverlayEvent.ElementType.ALL) { + public static void processBlurs() { + if(shouldBlur) { shouldBlur = false; long currentTime = System.currentTimeMillis(); for(float blur : requestedBlurs) { + lastBlur = currentTime; lastBlurUse.put(blur, currentTime); int width = Minecraft.getMinecraft().displayWidth; @@ -87,6 +89,13 @@ public class BackgroundBlur { } } + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onScreenRender(RenderGameOverlayEvent.Pre event) { + if(event.type == RenderGameOverlayEvent.ElementType.ALL) { + processBlurs(); + } + } + @SubscribeEvent public void onFogColour(EntityViewRenderEvent.FogColors event) { fogColour = 0xff000000; @@ -146,9 +155,6 @@ public class BackgroundBlur { Minecraft.getMinecraft().getFramebuffer().bindFramebuffer(false); } - /*if(blurShaderHorz == null) { - - }*/ try { blurShaderHorz = new Shader(Minecraft.getMinecraft().getResourceManager(), "blur", Minecraft.getMinecraft().getFramebuffer(), blurOutputHorz); @@ -172,9 +178,9 @@ public class BackgroundBlur { GL11.glPushMatrix(); /*GL30.glBindFramebuffer(GL30.GL_READ_FRAMEBUFFER, Minecraft.getMinecraft().getFramebuffer().framebufferObject); - GL30.glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, blurOutputVert.framebufferObject); + GL30.glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, output.framebufferObject); GL30.glBlitFramebuffer(0, 0, width, height, - 0, 0, width, height, + 0, 0, output.framebufferWidth, output.framebufferHeight, GL11.GL_COLOR_BUFFER_BIT, GL11.GL_NEAREST);*/ blurShaderHorz.loadShader(0); @@ -186,22 +192,31 @@ public class BackgroundBlur { } } + public static void renderBlurredBackground(float blurStrength, int screenWidth, int screenHeight, + int x, int y, int blurWidth, int blurHeight) { + renderBlurredBackground(blurStrength, screenWidth, screenHeight, x, y, blurWidth, blurHeight, false); + } + /** * Renders a subsection of the blurred framebuffer on to the corresponding section of the screen. * Essentially, this method will "blur" the background inside the bounds specified by [x->x+blurWidth, y->y+blurHeight] */ public static void renderBlurredBackground(float blurStrength, int screenWidth, int screenHeight, - int x, int y, int blurWidth, int blurHeight) { + int x, int y, int blurWidth, int blurHeight, boolean forcedUpdate) { + if(!OpenGlHelper.isFramebufferEnabled() || !OpenGlHelper.areShadersSupported()) return; if(blurStrength < 0.5) return; requestedBlurs.add(blurStrength); - if(!OpenGlHelper.isFramebufferEnabled() || !OpenGlHelper.areShadersSupported()) return; + long currentTime = System.currentTimeMillis(); + if(currentTime - lastBlur > 300) { + shouldBlur = true; + if(currentTime - lastBlur > 400 && forcedUpdate) return; + } if(blurOutput.isEmpty()) return; Framebuffer fb = blurOutput.get(blurStrength); if(fb == null) { - System.out.println("Blur not found:"+blurStrength); fb = blurOutput.values().iterator().next(); } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigAccordionId.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigAccordionId.java new file mode 100644 index 00000000..54d3e345 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigAccordionId.java @@ -0,0 +1,14 @@ +package io.github.moulberry.notenoughupdates.core.config.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface ConfigAccordionId { + + int id(); + +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorAccordion.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorAccordion.java new file mode 100644 index 00000000..47948985 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/annotations/ConfigEditorAccordion.java @@ -0,0 +1,14 @@ +package io.github.moulberry.notenoughupdates.core.config.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface ConfigEditorAccordion { + + int id(); + +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorAccordion.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorAccordion.java new file mode 100644 index 00000000..79667ff8 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorAccordion.java @@ -0,0 +1,86 @@ +package io.github.moulberry.notenoughupdates.core.config.gui; + +import io.github.moulberry.notenoughupdates.core.config.Config; +import io.github.moulberry.notenoughupdates.core.config.struct.ConfigProcessor; +import io.github.moulberry.notenoughupdates.core.util.render.RenderUtils; +import io.github.moulberry.notenoughupdates.core.util.render.TextRenderUtils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +import static io.github.moulberry.notenoughupdates.util.GuiTextures.button_tex; + +public class GuiOptionEditorAccordion extends GuiOptionEditor { + + private int accordionId; + private boolean accordionToggled; + + public GuiOptionEditorAccordion(ConfigProcessor.ProcessedOption option, int accordionId) { + super(option); + this.accordionToggled = (boolean) option.get(); + this.accordionId = accordionId; + } + + @Override + public int getHeight() { + return 20; + } + + public int getAccordionId() { + return accordionId; + } + + public boolean getToggled() { + return accordionToggled; + } + + @Override + public void render(int x, int y, int width) { + int height = getHeight(); + RenderUtils.drawFloatingRectDark(x, y, width, height, true); + + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + GlStateManager.enableBlend(); + GlStateManager.disableTexture2D(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + GlStateManager.color(1, 1, 1, 1); + worldrenderer.begin(GL11.GL_TRIANGLES, DefaultVertexFormats.POSITION); + if(accordionToggled) { + worldrenderer.pos((double)x+6, (double)y+6, 0.0D).endVertex(); + worldrenderer.pos((double)x+9.75f, (double)y+13.5f, 0.0D).endVertex(); + worldrenderer.pos((double)x+13.5f, (double)y+6, 0.0D).endVertex(); + } else { + worldrenderer.pos((double)x+6, (double)y+13.5f, 0.0D).endVertex(); + worldrenderer.pos((double)x+13.5f, (double)y+9.75f, 0.0D).endVertex(); + worldrenderer.pos((double)x+6, (double)y+6, 0.0D).endVertex(); + } + tessellator.draw(); + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + + TextRenderUtils.drawStringScaledMaxWidth(option.name, Minecraft.getMinecraft().fontRendererObj, + x+18, y+6, false, width-10, 0xc0c0c0); + } + + @Override + public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { + if(Mouse.getEventButtonState() && mouseX > x && mouseX < x+ width && + mouseY > y && mouseY < y+getHeight()) { + accordionToggled = !accordionToggled; + return true; + } + + return false; + } + + @Override + public boolean keyboardInput() { + return false; + } +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDraggableList.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDraggableList.java index 103a8c92..03c5bc6c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDraggableList.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditorDraggableList.java @@ -13,6 +13,7 @@ import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; +import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/struct/ConfigProcessor.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/struct/ConfigProcessor.java index 2f2e1fdb..794d4837 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/struct/ConfigProcessor.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/struct/ConfigProcessor.java @@ -29,6 +29,8 @@ public class ConfigProcessor { public final int subcategoryId; public GuiOptionEditor editor; + public int accordionId = -1; + private final Field field; private final Object container; @@ -87,10 +89,9 @@ public class ConfigProcessor { processedConfig.put(categoryField.getName(), cat); for(Field optionField : categoryObj.getClass().getDeclaredFields()) { - boolean optionExposePresent = optionField.isAnnotationPresent(Expose.class); boolean optionPresent = optionField.isAnnotationPresent(ConfigOption.class); - if(optionExposePresent && optionPresent) { + if(optionPresent) { ConfigOption optionAnnotation = optionField.getAnnotation(ConfigOption.class); ProcessedOption option = new ProcessedOption( optionAnnotation.name(), @@ -99,6 +100,10 @@ public class ConfigProcessor { optionField, categoryObj ); + if(optionField.isAnnotationPresent(ConfigAccordionId.class)) { + ConfigAccordionId annotation = optionField.getAnnotation(ConfigAccordionId.class); + option.accordionId = annotation.id(); + } GuiOptionEditor editor = null; Class optionType = optionField.getType(); @@ -110,6 +115,11 @@ public class ConfigProcessor { optionField.isAnnotationPresent(ConfigEditorBoolean.class)) { editor = new GuiOptionEditorBoolean(option); } + if(optionType.isAssignableFrom(boolean.class) && + optionField.isAnnotationPresent(ConfigEditorAccordion.class)) { + ConfigEditorAccordion configEditorAnnotation = optionField.getAnnotation(ConfigEditorAccordion.class); + editor = new GuiOptionEditorAccordion(option, configEditorAnnotation.id()); + } if(optionType.isAssignableFrom(int.class)) { if(optionField.isAnnotationPresent(ConfigEditorDropdown.class)) { ConfigEditorDropdown configEditorAnnotation = optionField.getAnnotation(ConfigEditorDropdown.class); @@ -154,8 +164,6 @@ public class ConfigProcessor { } option.editor = editor; cat.options.put(optionField.getName(), option); - } else if(optionExposePresent || optionPresent) { - //System.err.printf("Failed to load config option %s. Both @Expose and @ConfigOption must be present.\n", optionField.getName()); } } } else if(exposePresent || categoryPresent) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpingInteger.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpingInteger.java index 516169c9..b3dd9d6f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpingInteger.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/lerp/LerpingInteger.java @@ -54,6 +54,10 @@ public class LerpingInteger { this.lastMillis = System.currentTimeMillis(); } + public void setTimeToReachTarget(int timeToReachTarget) { + this.timeToReachTarget = timeToReachTarget; + } + public void setTarget(int targetValue) { this.targetValue = targetValue; } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/RenderUtils.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/RenderUtils.java index b3aa8c97..a43eb0e6 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/RenderUtils.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/RenderUtils.java @@ -24,7 +24,7 @@ public class RenderUtils { if(OpenGlHelper.isFramebufferEnabled()) { ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); BackgroundBlur.renderBlurredBackground(15, scaledResolution.getScaledWidth(), - scaledResolution.getScaledHeight(), x, y, width, height); + scaledResolution.getScaledHeight(), x, y, width, height, true); } else { alpha = 0xff000000; } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java index 6bd8418d..5a453247 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/CapeManager.java @@ -17,6 +17,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.client.event.RenderPlayerEvent; import net.minecraftforge.client.event.RenderWorldEvent; import net.minecraftforge.client.event.RenderWorldLastEvent; +import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import org.apache.commons.lang3.ArrayUtils; @@ -46,8 +47,8 @@ public class CapeManager { public JsonObject lastJsonSync = null; private String[] capes = new String[]{"patreon1", "patreon2", "fade", "contrib", "nullzee", - "gravy", "space", "mcworld", "lava", "packshq", "mbstaff", "thebakery", "negative", "void", "ironmoon", "krusty", "furf" }; - public Boolean[] specialCapes = new Boolean[]{ true, true, false, true, true, true, false, false, false, true, true, true, false, false, true, false, true }; + "gravy", "space", "mcworld", "lava", "packshq", "mbstaff", "thebakery", "negative", "void", "ironmoon", "krusty", "furf", "soldier" }; + public Boolean[] specialCapes = new Boolean[]{ true, true, false, true, true, true, false, false, false, true, true, true, false, false, true, false, true, true }; public static CapeManager getInstance() { return INSTANCE; @@ -195,6 +196,11 @@ public class CapeManager { updateWorldFramebuffer = false; } + @SubscribeEvent + public void onWorldLoad(WorldEvent.Load event) { + if(playerMap != null) playerMap.clear(); + } + @SubscribeEvent public void onRenderPlayer(RenderPlayerEvent.Post e) { if(e.partialRenderTick == 1.0F) return; //rendering in inventory diff --git a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/GuiCosmetics.java b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/GuiCosmetics.java index 3f84f8fc..07162a77 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/GuiCosmetics.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/GuiCosmetics.java @@ -16,6 +16,7 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL14; import java.awt.*; +import java.math.BigInteger; import java.util.List; import java.util.*; @@ -271,17 +272,37 @@ public class GuiCosmetics extends GuiScreen { null, true); lastCapeEquip = System.currentTimeMillis(); - if(wantToEquipCape == null) { - NotEnoughUpdates.INSTANCE.manager.hypixelApi.getMyApiAsync("cgi-bin/changecape.py?capeType=null&accessToken="+ - Minecraft.getMinecraft().getSession().getToken(), (jsonObject) -> { System.out.println(jsonObject); }, () -> { - System.out.println("change cape error"); - }); - } else { - NotEnoughUpdates.INSTANCE.manager.hypixelApi.getMyApiAsync("cgi-bin/changecape.py?capeType="+wantToEquipCape+"&accessToken="+ - Minecraft.getMinecraft().getSession().getToken(), (jsonObject) -> { System.out.println(jsonObject); }, () -> { - System.out.println("change cape error"); - }); + + try { + String userName = Minecraft.getMinecraft().thePlayer.getName(); + String accessToken = Minecraft.getMinecraft().getSession().getToken(); + Random r1 = new Random(); + Random r2 = new Random(System.identityHashCode(new Object())); + BigInteger random1Bi = new BigInteger(128, r1); + BigInteger random2Bi = new BigInteger(128, r2); + BigInteger serverBi = random1Bi.xor(random2Bi); + String serverId = serverBi.toString(16); + Minecraft.getMinecraft().getSessionService().joinServer(Minecraft.getMinecraft().getSession().getProfile(), accessToken, serverId); + + //System.out.println("Joined with serverId="+serverId); + + if(wantToEquipCape == null) { + NotEnoughUpdates.INSTANCE.manager.hypixelApi.getMyApiAsync("cgi-bin/changecape.py?capeType=null&serverId="+ + serverId+"&username="+userName, (jsonObject) -> { System.out.println(jsonObject); }, () -> { + System.out.println("Change cape error"); + }); + } else { + NotEnoughUpdates.INSTANCE.manager.hypixelApi.getMyApiAsync("cgi-bin/changecape.py?capeType="+wantToEquipCape+"&serverId="+ + serverId+"&username="+userName, (jsonObject) -> { System.out.println(jsonObject); }, () -> { + System.out.println("Change cape error"); + }); + } + } catch(Exception e) { + System.out.println("Exception while generating mojang shared secret"); + e.printStackTrace(); } + + } } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/NEUCape.java b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/NEUCape.java index 927ef8cf..3814e2ba 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/NEUCape.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/cosmetics/NEUCape.java @@ -61,6 +61,7 @@ public class NEUCape { public static float targetDist = 1/20f; private EntityPlayer currentPlayer; + private boolean keepCurrentPlayer = false; private String shaderName = "cape"; @@ -364,6 +365,8 @@ public class NEUCape { GlStateManager.enableTexture2D(); GlStateManager.enableDepth(); GlStateManager.disableCull(); + GlStateManager.disableLighting(); + GlStateManager.color(1, 1, 1, 1); if(shaderName.equals("mcworld_cape")) { GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); @@ -393,12 +396,13 @@ public class NEUCape { lastRender = System.currentTimeMillis(); } - private boolean notRendering = false; public void onTick(TickEvent.ClientTickEvent event, EntityPlayer player) { if(player == null) return; + if(Minecraft.getMinecraft().isGamePaused()) return; if(System.currentTimeMillis() - lastRender < 500) { - if(currentPlayer == null) { + if(currentPlayer == null || !keepCurrentPlayer) { + keepCurrentPlayer = true; currentPlayer = player; } else if(currentPlayer != player) { return; @@ -415,12 +419,8 @@ public class NEUCape { } } updateCape(player); - - notRendering = false; } else { - currentPlayer = null; - - notRendering = true; + keepCurrentPlayer = false; } } @@ -490,8 +490,6 @@ public class NEUCape { } } - TexLoc tl = new TexLoc(10, 75, Keyboard.KEY_M); - private double deltaAngleAccum; private double oldPlayerAngle; private int crouchTicks = 0; @@ -514,19 +512,6 @@ public class NEUCape { } } - if(notRendering) { - for (int y = 0; y < nodes.size(); y++) { - for (int x = 0; x < nodes.get(y).size(); x++) { - CapeNode node = nodes.get(y).get(x); - if(!node.fixed) { - Vector3f.add(node.position, capeTranslation, node.position); - node.lastPosition.set(node.position); - node.renderPosition.set(node.position); - } - } - } - } - double playerAngle = Math.toRadians(player.renderYawOffset); double deltaAngle = playerAngle - oldPlayerAngle; if(deltaAngle > Math.PI) { @@ -543,8 +528,6 @@ public class NEUCape { float factor = (float)(deltaAngleAccum*deltaAngleAccum); - tl.handleKeyboardInput(); - float capeTransLength = capeTranslation.length(); float capeTranslationFactor = 0f; @@ -715,10 +698,35 @@ public class NEUCape { private void renderCape(EntityPlayer player, float partialRenderTick) { ensureCapeNodesCreated(player); - if(System.currentTimeMillis() - lastRender > 500) { - updateCape(player); - } + + Vector3f avgPositionFixedBefore = avgFixedRenderPosition(); updateFixedCapeNodesPartial(player, partialRenderTick); + Vector3f avgPositionFixed = avgFixedRenderPosition(); + Vector3f delta = Vector3f.sub(avgPositionFixed, avgPositionFixedBefore, null); + + if(delta.lengthSquared() > 9) { + updateFixedCapeNodes(player); + + for(int y=0; y 0.8/0.2 //0-1 accum.scale(blendFactor); @@ -760,11 +768,13 @@ public class NEUCape { node.renderPosition = accum; } - for(int i=node.oldRenderPosition.length-1; i>=0; i--) { - if(i > 0) { - node.oldRenderPosition[i] = node.oldRenderPosition[i-1]; - } else { - node.oldRenderPosition[i] = Vector3f.sub(node.renderPosition, avgPositionFixed, null); + if(!Minecraft.getMinecraft().isGamePaused()) { + for(int i=node.oldRenderPosition.length-1; i>=0; i--) { + if(i > 0) { + node.oldRenderPosition[i] = node.oldRenderPosition[i-1]; + } else { + node.oldRenderPosition[i] = Vector3f.sub(node.renderPosition, avgPositionFixed, null); + } } } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonBlocks.java b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonBlocks.java index 6fd3db78..890155e8 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonBlocks.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonBlocks.java @@ -42,8 +42,8 @@ public class DungeonBlocks { } public static boolean isOverriding() { - return OpenGlHelper.isFramebufferEnabled() && NotEnoughUpdates.INSTANCE.config.dungeonBlock.enableDungBlockOverlay && - (NotEnoughUpdates.INSTANCE.config.dungeonBlock.dungeonBlocksEverywhere || + return OpenGlHelper.isFramebufferEnabled() && NotEnoughUpdates.INSTANCE.config.dungeons.enableDungBlockOverlay && + (NotEnoughUpdates.INSTANCE.config.dungeons.dungeonBlocksEverywhere || (SBInfo.getInstance().getLocation() != null && SBInfo.getInstance().getLocation().equals("dungeon"))); } @@ -141,15 +141,15 @@ public class DungeonBlocks { static { dynamicPreloadMap.put(new ResourceLocation("textures/entity/bat.png"), - NotEnoughUpdates.INSTANCE.config.dungeonBlock.dungBatColour); + NotEnoughUpdates.INSTANCE.config.dungeons.dungBatColour); dynamicPreloadMap.put(new ResourceLocation("textures/entity/chest/normal.png"), - NotEnoughUpdates.INSTANCE.config.dungeonBlock.dungChestColour); + NotEnoughUpdates.INSTANCE.config.dungeons.dungChestColour); dynamicPreloadMap.put(new ResourceLocation("textures/entity/chest/normal_double.png"), - NotEnoughUpdates.INSTANCE.config.dungeonBlock.dungChestColour); + NotEnoughUpdates.INSTANCE.config.dungeons.dungChestColour); dynamicPreloadMap.put(new ResourceLocation("textures/entity/chest/trapped.png"), - NotEnoughUpdates.INSTANCE.config.dungeonBlock.dungTrappedChestColour); + NotEnoughUpdates.INSTANCE.config.dungeons.dungTrappedChestColour); dynamicPreloadMap.put(new ResourceLocation("textures/entity/chest/trapped_double.png"), - NotEnoughUpdates.INSTANCE.config.dungeonBlock.dungTrappedChestColour); + NotEnoughUpdates.INSTANCE.config.dungeons.dungTrappedChestColour); } public static void tick() { @@ -192,13 +192,13 @@ public class DungeonBlocks { HashMap spriteMap = new HashMap<>(); spriteMap.put(Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("minecraft:blocks/stonebrick_cracked"), - SpecialColour.specialToChromaRGB(NotEnoughUpdates.INSTANCE.config.dungeonBlock.dungCrackedColour)); + SpecialColour.specialToChromaRGB(NotEnoughUpdates.INSTANCE.config.dungeons.dungCrackedColour)); spriteMap.put(Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("minecraft:blocks/dispenser_front_horizontal"), - SpecialColour.specialToChromaRGB(NotEnoughUpdates.INSTANCE.config.dungeonBlock.dungDispenserColour)); + SpecialColour.specialToChromaRGB(NotEnoughUpdates.INSTANCE.config.dungeons.dungDispenserColour)); spriteMap.put(Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("minecraft:blocks/lever"), - SpecialColour.specialToChromaRGB(NotEnoughUpdates.INSTANCE.config.dungeonBlock.dungLeverColour)); + SpecialColour.specialToChromaRGB(NotEnoughUpdates.INSTANCE.config.dungeons.dungLeverColour)); spriteMap.put(Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("minecraft:blocks/trip_wire"), - SpecialColour.specialToChromaRGB(NotEnoughUpdates.INSTANCE.config.dungeonBlock.dungTripWireColour)); + SpecialColour.specialToChromaRGB(NotEnoughUpdates.INSTANCE.config.dungeons.dungTripWireColour)); for(Map.Entry entry : spriteMap.entrySet()) { if(((entry.getValue() >> 24) & 0xFF) < 10) continue; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonMap.java b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonMap.java index 019fe9ee..8a591398 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonMap.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonMap.java @@ -19,6 +19,7 @@ import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.client.resources.DefaultPlayerSkin; import net.minecraft.client.shader.Framebuffer; import net.minecraft.client.shader.Shader; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.ItemMap; @@ -88,6 +89,7 @@ public class DungeonMap { private Map playerMarkerMapPositions = new HashMap<>(); private Set rawPlayerMarkerMapPositions = new HashSet<>(); private Map playerMarkerMapPositionsLast = new HashMap<>(); + private HashMap playerIdMap = new HashMap<>(); private Map playerSkinMap = new HashMap<>(); @@ -655,7 +657,7 @@ public class DungeonMap { pixelWidth = pixelHeight = 12; } GlStateManager.color(1, 1, 1, 1); - if((!NotEnoughUpdates.INSTANCE.config.dungeonMapOpen.showOwnHeadAsMarker || + if((!NotEnoughUpdates.INSTANCE.config.dungeons.showOwnHeadAsMarker || playerMarkerMapPositions.size() <= 1 || minU != 1/4f) && NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPlayerHeads >= 1 && playerSkinMap.containsKey(entry.getKey())) { @@ -818,6 +820,7 @@ public class DungeonMap { GlStateManager.enableBlend(); GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); GlStateManager.enableDepth(); + GlStateManager.disableLighting(); } @@ -1013,8 +1016,10 @@ public class DungeonMap { if(colourMap[0].length != 128) return; this.colourMap = colourMap; + boolean searchForPlayers = false; if(System.currentTimeMillis() - lastClearCache > 1000) { roomMap.clear(); + searchForPlayers = true; startRoomX = -1; startRoomY = -1; connectorSize = -1; @@ -1140,58 +1145,66 @@ public class DungeonMap { } } - for(EntityPlayer player : Minecraft.getMinecraft().theWorld.playerEntities) { - if(player instanceof AbstractClientPlayer && actualPlayers.contains(player.getName())) { - AbstractClientPlayer aplayer = (AbstractClientPlayer) player; - ResourceLocation skin = aplayer.getLocationSkin(); - if(skin != DefaultPlayerSkin.getDefaultSkin(aplayer.getUniqueID())) { - playerSkinMap.put(player.getName(), skin); + actualPlayers.add(Minecraft.getMinecraft().thePlayer.getName()); + if(searchForPlayers) { + for(EntityPlayer player : Minecraft.getMinecraft().theWorld.playerEntities) { + if(player instanceof AbstractClientPlayer && actualPlayers.contains(player.getName())) { + AbstractClientPlayer aplayer = (AbstractClientPlayer) player; + ResourceLocation skin = aplayer.getLocationSkin(); + if(skin != DefaultPlayerSkin.getDefaultSkin(aplayer.getUniqueID())) { + playerSkinMap.put(player.getName(), skin); + playerIdMap.put(player.getName(), player.getEntityId()); + } } } } - actualPlayers.add(Minecraft.getMinecraft().thePlayer.getName()); playerEntityMapPositions.clear(); if(usePlayerPositions) { - for(EntityPlayer player : Minecraft.getMinecraft().theWorld.playerEntities) { - if(actualPlayers.contains(player.getName())) { - float roomX = (float)player.posX / (roomSizeBlocks+1); - float roomY = (float)player.posZ / (roomSizeBlocks+1); - - float playerRoomOffsetX = (float) Math.floor(roomX); - float playerConnOffsetX = (float) Math.floor(roomX); - float playerRoomOffsetY = (float) Math.floor(roomY); - float playerConnOffsetY = (float) Math.floor(roomY); - - float roomXInBlocks = (float)player.posX % (roomSizeBlocks+1); - if(roomXInBlocks < 2) { //0,1 - playerConnOffsetX -= 2/5f-roomXInBlocks/5f; - } else if(roomXInBlocks > roomSizeBlocks-2) { //31,30,29 - playerRoomOffsetX++; - playerConnOffsetX += (roomXInBlocks - (roomSizeBlocks-2))/5f; - } else { - playerRoomOffsetX += (roomXInBlocks-2) / (roomSizeBlocks-4); - } + for(String playerName : actualPlayers) { + if(playerIdMap.containsKey(playerName)) { + Entity entity = Minecraft.getMinecraft().theWorld.getEntityByID(playerIdMap.get(playerName)); + if(entity instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) entity; + + float roomX = (float)player.posX / (roomSizeBlocks+1); + float roomY = (float)player.posZ / (roomSizeBlocks+1); + + float playerRoomOffsetX = (float) Math.floor(roomX); + float playerConnOffsetX = (float) Math.floor(roomX); + float playerRoomOffsetY = (float) Math.floor(roomY); + float playerConnOffsetY = (float) Math.floor(roomY); + + float roomXInBlocks = (float)player.posX % (roomSizeBlocks+1); + if(roomXInBlocks < 2) { //0,1 + playerConnOffsetX -= 2/5f-roomXInBlocks/5f; + } else if(roomXInBlocks > roomSizeBlocks-2) { //31,30,29 + playerRoomOffsetX++; + playerConnOffsetX += (roomXInBlocks - (roomSizeBlocks-2))/5f; + } else { + playerRoomOffsetX += (roomXInBlocks-2) / (roomSizeBlocks-4); + } - float roomYInBlocks = (float)player.posZ % (roomSizeBlocks+1); - if(roomYInBlocks < 2) { //0,1 - playerConnOffsetY -= 2/5f-roomYInBlocks/5f; - } else if(roomYInBlocks > roomSizeBlocks-2) { //31,30,29 - playerRoomOffsetY++; - playerConnOffsetY += (roomYInBlocks - (roomSizeBlocks-2))/5f; - } else { - playerRoomOffsetY += (roomYInBlocks-2) / (roomSizeBlocks-4); - } + float roomYInBlocks = (float)player.posZ % (roomSizeBlocks+1); + if(roomYInBlocks < 2) { //0,1 + playerConnOffsetY -= 2/5f-roomYInBlocks/5f; + } else if(roomYInBlocks > roomSizeBlocks-2) { //31,30,29 + playerRoomOffsetY++; + playerConnOffsetY += (roomYInBlocks - (roomSizeBlocks-2))/5f; + } else { + playerRoomOffsetY += (roomYInBlocks-2) / (roomSizeBlocks-4); + } - playerRoomOffsetX -= startRoomX/(roomSize+connectorSize); - playerRoomOffsetY -= startRoomY/(roomSize+connectorSize); - playerConnOffsetX -= startRoomX/(roomSize+connectorSize); - playerConnOffsetY -= startRoomY/(roomSize+connectorSize); + playerRoomOffsetX -= startRoomX/(roomSize+connectorSize); + playerRoomOffsetY -= startRoomY/(roomSize+connectorSize); + playerConnOffsetX -= startRoomX/(roomSize+connectorSize); + playerConnOffsetY -= startRoomY/(roomSize+connectorSize); - MapPosition pos = new MapPosition(playerRo