From 52c6dabe58005aa5a7fc5809512bd8cf4ad4f97f Mon Sep 17 00:00:00 2001 From: BuildTools Date: Wed, 10 Feb 2021 20:11:57 +0800 Subject: PRE18.1 --- .../notenoughupdates/NEUEventListener.java | 26 +- .../moulberry/notenoughupdates/NEUManager.java | 69 +++--- .../notenoughupdates/NotEnoughUpdates.java | 2 + .../notenoughupdates/core/config/Position.java | 6 +- .../core/config/gui/GuiPositionEditor.java | 20 +- .../dungeons/GuiDungeonMapEditor.java | 4 +- .../miscfeatures/CrystalOverlay.java | 2 +- .../notenoughupdates/miscfeatures/FlyFix.java | 13 +- .../mixins/MixinNetHandlerPlayClient.java | 3 +- .../notenoughupdates/mixins/MixinWorld.java | 2 +- .../notenoughupdates/options/NEUConfig.java | 65 +++-- .../notenoughupdates/options/NEUConfigEditor.java | 18 +- .../overlays/AuctionSearchOverlay.java | 271 ++++++++++++++------- .../notenoughupdates/overlays/MiningOverlay.java | 13 +- .../overlays/RancherBootOverlay.java | 163 +++++++++++++ .../moulberry/notenoughupdates/util/SBInfo.java | 2 +- .../assets/notenoughupdates/ah_search_overlay.png | Bin 0 -> 3513 bytes 17 files changed, 497 insertions(+), 182 deletions(-) create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/overlays/RancherBootOverlay.java create mode 100644 src/main/resources/assets/notenoughupdates/ah_search_overlay.png diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java index 070b2d66..d32398c3 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java @@ -6,6 +6,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import io.github.moulberry.notenoughupdates.auction.CustomAHGui; import io.github.moulberry.notenoughupdates.core.BackgroundBlur; +import io.github.moulberry.notenoughupdates.core.GuiScreenElementWrapper; import io.github.moulberry.notenoughupdates.cosmetics.CapeManager; import io.github.moulberry.notenoughupdates.dungeons.DungeonBlocks; import io.github.moulberry.notenoughupdates.dungeons.DungeonWin; @@ -264,6 +265,7 @@ public class NEUEventListener { } if(neu.hasSkyblockScoreboard()) { + SBInfo.getInstance().tick(); if(Loader.isModLoaded("morus")) { MorusIntegration.getInstance().tick(); } @@ -304,7 +306,6 @@ public class NEUEventListener { Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("")); } } - SBInfo.getInstance().tick(); } if(currentTime - lastSkyblockScoreboard < 5*60*1000) { //5 minutes neu.manager.auctionManager.tick(); @@ -466,6 +467,14 @@ public class NEUEventListener { AtomicBoolean missingRecipe = new AtomicBoolean(false); @SubscribeEvent public void onGuiOpen(GuiOpenEvent event) { + if(Minecraft.getMinecraft().currentScreen instanceof GuiScreenElementWrapper && + event.gui == null && !(Keyboard.getEventKeyState() && Keyboard.getEventKey() == Keyboard.KEY_ESCAPE) && + System.currentTimeMillis() - NotEnoughUpdates.INSTANCE.lastOpenedGui < 500) { + NotEnoughUpdates.INSTANCE.lastOpenedGui = 0; + event.setCanceled(true); + return; + } + if(!(event.gui instanceof GuiContainer) && Minecraft.getMinecraft().currentScreen != null) { CalendarOverlay.setEnabled(false); } @@ -788,6 +797,11 @@ public class NEUEventListener { event.setCanceled(true); return; } + if(RancherBootOverlay.shouldReplace()) { + RancherBootOverlay.render(); + event.setCanceled(true); + return; + } if(TradeWindow.tradeWindowActive() || event.gui instanceof CustomAHGui || neu.manager.auctionManager.customAH.isRenderOverAuctionView()) { @@ -1070,6 +1084,11 @@ public class NEUEventListener { event.setCanceled(true); return; } + if(RancherBootOverlay.shouldReplace()) { + RancherBootOverlay.mouseEvent(); + event.setCanceled(true); + return; + } if(TradeWindow.tradeWindowActive() || event.gui instanceof CustomAHGui || neu.manager.auctionManager.customAH.isRenderOverAuctionView()) { event.setCanceled(true); @@ -1110,6 +1129,11 @@ public class NEUEventListener { event.setCanceled(true); return; } + if(RancherBootOverlay.shouldReplace()) { + RancherBootOverlay.keyEvent(); + event.setCanceled(true); + return; + } if(TradeWindow.tradeWindowActive() || event.gui instanceof CustomAHGui || neu.manager.auctionManager.customAH.isRenderOverAuctionView()) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java index 0381a70a..bbaa08db 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUManager.java @@ -204,48 +204,45 @@ public class NEUManager { if (Display.isActive()) dialog.toFront(); - if (false) { - } else { - Utils.recursiveDelete(repoLocation); - repoLocation.mkdirs(); + Utils.recursiveDelete(repoLocation); + repoLocation.mkdirs(); - //TODO: Store hard-coded value somewhere else - String dlUrl = "https://github.com/Moulberry/NotEnoughUpdates-REPO/archive/master.zip"; + //TODO: Store hard-coded value somewhere else + String dlUrl = "https://github.com/Moulberry/NotEnoughUpdates-REPO/archive/master.zip"; - pane.setMessage("Downloading NEU Master Archive. (DL# >20)"); - dialog.pack(); - if(NotEnoughUpdates.INSTANCE.config.hidden.dev) dialog.setVisible(true); - if (Display.isActive()) dialog.toFront(); + pane.setMessage("Downloading NEU Master Archive. (DL# >20)"); + dialog.pack(); + if(NotEnoughUpdates.INSTANCE.config.hidden.dev) dialog.setVisible(true); + if (Display.isActive()) dialog.toFront(); - File itemsZip = new File(repoLocation, "neu-items-master.zip"); - try { - itemsZip.createNewFile(); - } catch (IOException e) { - return; - } - URL url = new URL(dlUrl); - URLConnection urlConnection = url.openConnection(); - urlConnection.setConnectTimeout(15000); - urlConnection.setReadTimeout(20000); - try (BufferedInputStream inStream = new BufferedInputStream(urlConnection.getInputStream()); - FileOutputStream fileOutputStream = new FileOutputStream(itemsZip)) { - byte dataBuffer[] = new byte[1024]; - int bytesRead; - while ((bytesRead = inStream.read(dataBuffer, 0, 1024)) != -1) { - fileOutputStream.write(dataBuffer, 0, bytesRead); - } - } catch (IOException e) { - dialog.dispose(); - return; + File itemsZip = new File(repoLocation, "neu-items-master.zip"); + try { + itemsZip.createNewFile(); + } catch (IOException e) { + return; + } + URL url = new URL(dlUrl); + URLConnection urlConnection = url.openConnection(); + urlConnection.setConnectTimeout(15000); + urlConnection.setReadTimeout(20000); + try (BufferedInputStream inStream = new BufferedInputStream(urlConnection.getInputStream()); + FileOutputStream fileOutputStream = new FileOutputStream(itemsZip)) { + byte dataBuffer[] = new byte[1024]; + int bytesRead; + while ((bytesRead = inStream.read(dataBuffer, 0, 1024)) != -1) { + fileOutputStream.write(dataBuffer, 0, bytesRead); } + } catch (IOException e) { + dialog.dispose(); + return; + } - pane.setMessage("Unzipping NEU Master Archive."); - dialog.pack(); - //dialog.setVisible(true); - if (Display.isActive()) dialog.toFront(); + pane.setMessage("Unzipping NEU Master Archive."); + dialog.pack(); + //dialog.setVisible(true); + if (Display.isActive()) dialog.toFront(); - unzipIgnoreFirstFolder(itemsZip.getAbsolutePath(), repoLocation.getAbsolutePath()); - } + unzipIgnoreFirstFolder(itemsZip.getAbsolutePath(), repoLocation.getAbsolutePath()); if(currentCommitJSON == null || !currentCommitJSON.get("sha").getAsString().equals(latestRepoCommit)) { JsonObject newCurrentCommitJSON = new JsonObject(); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java index 1dbbb956..43f9512f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java @@ -103,6 +103,7 @@ public class NotEnoughUpdates { private static final Set SKYBLOCK_IN_ALL_LANGUAGES = Sets.newHashSet("SKYBLOCK","\u7A7A\u5C9B\u751F\u5B58", "\u7A7A\u5CF6\u751F\u5B58"); public GuiScreen openGui = null; + public long lastOpenedGui = 0; SimpleCommand collectionLogCommand = new SimpleCommand("neucl", new SimpleCommand.ProcessCommandRunnable() { public void processCommand(ICommandSender sender, String[] args) { @@ -1046,6 +1047,7 @@ public class NotEnoughUpdates { } Minecraft.getMinecraft().displayGuiScreen(openGui); openGui = null; + lastOpenedGui = System.currentTimeMillis(); } if(currChatMessage != null && currentTime - lastChatMessage > CHAT_MSG_COOLDOWN) { lastChatMessage = currentTime; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/Position.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/Position.java index e003e440..e7198631 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/Position.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/Position.java @@ -162,9 +162,9 @@ public class Position { this.y = screenHeight-EDGE_OFFSET; } } else { - if(this.y+objHeight > -EDGE_OFFSET) { - deltaY += -EDGE_OFFSET-objHeight-this.y; - this.y = -EDGE_OFFSET-objHeight; + if(this.y+1 > -EDGE_OFFSET) { + deltaY += -EDGE_OFFSET-1-this.y; + this.y = -EDGE_OFFSET-1; } if(this.y+screenHeight < EDGE_OFFSET) { deltaY += EDGE_OFFSET-screenHeight-this.y; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiPositionEditor.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiPositionEditor.java index d7d84d28..3b0df42d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiPositionEditor.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiPositionEditor.java @@ -1,7 +1,6 @@ package io.github.moulberry.notenoughupdates.core.config.gui; import io.github.moulberry.notenoughupdates.core.config.Position; -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; @@ -13,20 +12,17 @@ import java.io.IOException; public class GuiPositionEditor extends GuiScreen { - private Position position; + private final Position position; private Position originalPosition; - private int elementWidth; - private int elementHeight; - private Runnable renderCallback; - private Runnable positionChangedCallback; - private Runnable closedCallback; + private final int elementWidth; + private final int elementHeight; + private final Runnable renderCallback; + private final Runnable positionChangedCallback; + private final Runnable closedCallback; private boolean clicked = false; private int grabbedX = 0; private int grabbedY = 0; - private int oldMouseX = 0; - private int oldMouseY = 0; - private int guiScaleOverride = -1; public GuiPositionEditor(Position position, int elementWidth, int elementHeight, @@ -63,7 +59,6 @@ public class GuiPositionEditor extends GuiScreen { scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); } - this.width = scaledResolution.getScaledWidth(); this.height = scaledResolution.getScaledHeight(); mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; @@ -142,9 +137,6 @@ public class GuiPositionEditor extends GuiScreen { mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; mouseY = height - Mouse.getY() * height / Minecraft.getMinecraft().displayHeight - 1; - oldMouseX = mouseX; - oldMouseY = mouseY; - grabbedX += position.moveX(mouseX - grabbedX, elementWidth, scaledResolution); grabbedY += position.moveY(mouseY - grabbedY, elementHeight, scaledResolution); positionChangedCallback.run(); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java index 817e80e9..b0e46e00 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java @@ -478,8 +478,8 @@ public class GuiDungeonMapEditor extends GuiScreen { NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPosition, size, size, () -> { ScaledResolution scaledResolution = Utils.pushGuiScale(2); - demoMap.renderMap(NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPosition.getAbsX(scaledResolution, size/2)+size/2, - NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPosition.getAbsY(scaledResolution, size/2)+size/2, + demoMap.renderMap(NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPosition.getAbsX(scaledResolution, size)+size/2, + NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPosition.getAbsY(scaledResolution, size)+size/2, NotEnoughUpdates.INSTANCE.colourMap, decorations, 0, players, false, 0); Utils.pushGuiScale(-1); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalOverlay.java index 9e97cfc0..b96fefef 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CrystalOverlay.java @@ -144,7 +144,7 @@ public class CrystalOverlay { ItemStack held = p.getHeldItem(); String internal = NotEnoughUpdates.INSTANCE.manager.getInternalNameForItem(held); if(internal != null) { - if(internal.endsWith("_CRYSTAL")) { + if(internal.endsWith("_CRYSTAL") && !internal.equals("POWER_CRYSTAL")) { displayMillis = System.currentTimeMillis(); } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FlyFix.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FlyFix.java index d33cb7d3..0fd2100c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FlyFix.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FlyFix.java @@ -13,8 +13,8 @@ public class FlyFix { private static long lastAbilitySend = 0; public static void onSendAbilities(C13PacketPlayerAbilities packet) { - //if(true) return; - if(!NotEnoughUpdates.INSTANCE.config.misc.flyFix) return; + if(true) return; + //if(!NotEnoughUpdates.INSTANCE.config.misc.flyFix) return; if(Minecraft.getMinecraft().thePlayer == null) return; if(!Minecraft.getMinecraft().thePlayer.capabilities.allowFlying) return; if(!NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard()) return; @@ -28,8 +28,8 @@ public class FlyFix { } public static void onReceiveAbilities(S39PacketPlayerAbilities packet) { - //if(true) return; - if(!NotEnoughUpdates.INSTANCE.config.misc.flyFix) return; + if(true) return; + //if(!NotEnoughUpdates.INSTANCE.config.misc.flyFix) return; if(Minecraft.getMinecraft().thePlayer == null) return; if(!Minecraft.getMinecraft().thePlayer.capabilities.allowFlying) return; if(!NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard()) return; @@ -39,6 +39,7 @@ public class FlyFix { long currentTime = System.currentTimeMillis(); serverWantFly = packet.isFlying(); + if(serverWantFly != clientWantFly) { if(currentTime - lastAbilitySend > 0 && currentTime - lastAbilitySend < 500) { packet.setFlying(clientWantFly); @@ -49,8 +50,8 @@ public class FlyFix { } public static void tick() { - //if(true) return; - if(!NotEnoughUpdates.INSTANCE.config.misc.flyFix) return; + if(true) return; + //if(!NotEnoughUpdates.INSTANCE.config.misc.flyFix) return; if(Minecraft.getMinecraft().thePlayer == null) return; if(!Minecraft.getMinecraft().thePlayer.capabilities.allowFlying) return; if(!NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard()) return; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinNetHandlerPlayClient.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinNetHandlerPlayClient.java index 5cb2dc8d..10509dd1 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinNetHandlerPlayClient.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinNetHandlerPlayClient.java @@ -2,10 +2,12 @@ package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.miscfeatures.*; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; +import io.github.moulberry.notenoughupdates.util.SBInfo; import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.network.Packet; import net.minecraft.network.play.client.C13PacketPlayerAbilities; +import net.minecraft.network.play.server.S03PacketTimeUpdate; import net.minecraft.network.play.server.S23PacketBlockChange; import net.minecraft.network.play.server.S2FPacketSetSlot; import net.minecraft.network.play.server.S39PacketPlayerAbilities; @@ -19,7 +21,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(NetHandlerPlayClient.class) public class MixinNetHandlerPlayClient { - private static final String TARGET = "Lnet/minecraft/entity/player/EntityPlayer;" + "setPositionAndRotation(DDDFF)V"; @Redirect(method="handlePlayerPosLook", at=@At(value="INVOKE", target=TARGET)) diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinWorld.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinWorld.java index 19cc7606..6c640390 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinWorld.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinWorld.java @@ -3,6 +3,7 @@ package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.miscfeatures.CustomItemEffects; import io.github.moulberry.notenoughupdates.miscfeatures.DwarvenMinesTextures; +import io.github.moulberry.notenoughupdates.util.SBInfo; import net.minecraft.util.BlockPos; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; @@ -14,7 +15,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(World.class) public class MixinWorld { - @Inject(method="spawnParticle(IZDDDDDD[I)V", at=@At("HEAD"), cancellable = true) public void spawnParticle(int particleID, boolean p_175720_2_, double xCood, double yCoord, double zCoord, double xOffset, double yOffset, double zOffset, int[] p_175720_15_, CallbackInfo ci) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java index 045b4cdb..c8625088 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java @@ -201,6 +201,21 @@ public class NEUConfig extends Config { ) public DungeonMapOpen dungeonMapOpen = new DungeonMapOpen(); + @Expose + @Category( + name = "Smooth AOTE", + desc = "Smooth AOTE" + ) + public SmoothAOTE smoothAOTE = new SmoothAOTE(); + + + @Expose + @Category( + name = "AH Search GUI", + desc = "AH Search GUI" + ) + public AuctionHouseSearch auctionHouseSearch = new AuctionHouseSearch(); + @Expose @Category( name = "Dungeon Block Overlay", @@ -215,13 +230,6 @@ public class NEUConfig extends Config { ) public AccessoryBag accessoryBag = new AccessoryBag(); - @Expose - @Category( - name = "Smooth AOTE", - desc = "Smooth AOTE" - ) - public SmoothAOTE smoothAOTE = new SmoothAOTE(); - @Expose @Category( name = "Custom Rod Colours", @@ -258,14 +266,6 @@ public class NEUConfig extends Config { @ConfigEditorBoolean public boolean onlyShowOnSkyblock = true; - @Expose - @ConfigOption( - name = "Private Island Fly Fix", - desc = "Fix flying being delaying on private islands" - ) - @ConfigEditorBoolean - public boolean flyFix = true; - @Expose @ConfigOption( name = "Hide Potion Effects", @@ -1154,6 +1154,41 @@ public class NEUConfig extends Config { public boolean showOwnHeadAsMarker = false; } + public static class AuctionHouseSearch { + @Expose + @ConfigOption( + name = "Enable Search GUI", + desc = "Use the advanced search GUI with autocomplete and history instead of the normal sign GUI" + ) + @ConfigEditorBoolean + public boolean enableSearchOverlay = true; + + @Expose + @ConfigOption( + name = "Keep Previous Search", + desc = "Don't clear the search bar after closing the GUI" + ) + @ConfigEditorBoolean + public boolean keepPreviousSearch = false; + + @Expose + @ConfigOption( + name = "Past Searches", + desc = "Show past searches below the autocomplete box" + ) + @ConfigEditorBoolean + public boolean showPastSearches = true; + + @Expose + @ConfigOption( + name = "ESC to Full Close", + desc = "Make pressing ESCAPE close the search GUI without opening up the AH again\n" + + "ENTER can still be used to search" + ) + @ConfigEditorBoolean + public boolean escFullClose = true; + } + public static class DungeonBlock { @Expose @ConfigOption( diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfigEditor.java b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfigEditor.java index 0b00cd5a..5d91e268 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfigEditor.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfigEditor.java @@ -63,24 +63,24 @@ public class NEUConfigEditor extends GuiElement { this.processedConfig = ConfigProcessor.create(config); if(categoryOpen != null) { - for(String category : processedConfig.keySet()) { - if(category.equalsIgnoreCase(categoryOpen)) { - selectedCategory = category; + for(Map.Entry category : processedConfig.entrySet()) { + if(category.getValue().name.equalsIgnoreCase(categoryOpen)) { + selectedCategory = category.getKey(); break; } } if(selectedCategory == null) { - for(String category : processedConfig.keySet()) { - if(category.toLowerCase().startsWith(categoryOpen.toLowerCase())) { - selectedCategory = category; + for(Map.Entry category : processedConfig.entrySet()) { + if(category.getValue().name.toLowerCase().startsWith(categoryOpen.toLowerCase())) { + selectedCategory = category.getKey(); break; } } } if(selectedCategory == null) { - for(String category : processedConfig.keySet()) { - if(category.toLowerCase().contains(categoryOpen.toLowerCase())) { - selectedCategory = category; + for(Map.Entry category : processedConfig.entrySet()) { + if(category.getValue().name.toLowerCase().contains(categoryOpen.toLowerCase())) { + selectedCategory = category.getKey(); break; } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/AuctionSearchOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/AuctionSearchOverlay.java index 33322f8a..3401bb21 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/AuctionSearchOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/AuctionSearchOverlay.java @@ -4,7 +4,9 @@ import com.google.common.base.Splitter; import com.google.gson.JsonObject; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.core.GuiElementTextField; +import io.github.moulberry.notenoughupdates.core.GuiScreenElementWrapper; import io.github.moulberry.notenoughupdates.mixins.GuiEditSignAccessor; +import io.github.moulberry.notenoughupdates.options.NEUConfigEditor; import io.github.moulberry.notenoughupdates.util.SBInfo; import io.github.moulberry.notenoughupdates.util.Utils; import net.minecraft.client.Minecraft; @@ -13,15 +15,26 @@ import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.gui.inventory.GuiEditSign; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.item.ItemStack; +import net.minecraft.network.play.client.C0DPacketCloseWindow; import net.minecraft.tileentity.TileEntitySign; import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.text.WordUtils; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicInteger; public class AuctionSearchOverlay { + private static final ResourceLocation SEARCH_OVERLAY_TEXTURE = new ResourceLocation("notenoughupdates:ah_search_overlay.png"); + private static GuiElementTextField textField = new GuiElementTextField("", 200, 20, 0); private static boolean searchFieldClicked = false; private static String searchString = ""; @@ -29,7 +42,7 @@ public class AuctionSearchOverlay { private static final int AUTOCOMPLETE_HEIGHT = 118; - private static Set autocompletedItems = new LinkedHashSet<>(); + private static final Set autocompletedItems = new LinkedHashSet<>(); private static final Comparator salesComparator = (o1, o2) -> { JsonObject auctionInfo1 = NotEnoughUpdates.INSTANCE.manager.auctionManager.getItemAuctionInfo(o1); @@ -51,14 +64,21 @@ public class AuctionSearchOverlay { }; public static boolean shouldReplace() { - if(!(Minecraft.getMinecraft().currentScreen instanceof GuiEditSign)) return false; + if(!NotEnoughUpdates.INSTANCE.config.auctionHouseSearch.enableSearchOverlay) return false; + + if(!(Minecraft.getMinecraft().currentScreen instanceof GuiEditSign)) { + if(!NotEnoughUpdates.INSTANCE.config.auctionHouseSearch.keepPreviousSearch) searchString = ""; + return false; + } String lastContainer = SBInfo.getInstance().lastOpenContainerName; + if(lastContainer == null) return false; if(!lastContainer.equals("Auctions Browser") && !lastContainer.startsWith("Auctions: ")) return false; TileEntitySign tes = ((GuiEditSignAccessor)Minecraft.getMinecraft().currentScreen).getTileSign(); + if(tes == null) return false; if(tes.getPos().getY() != 0) return false; if(!tes.signText[2].getUnformattedText().equals("^^^^^^^^^^^^^^^")) return false; if(!tes.signText[3].getUnformattedText().equals("Enter query")) return false; @@ -75,55 +95,76 @@ public class AuctionSearchOverlay { Utils.drawGradientRect(0, 0, width, height, -1072689136, -804253680); - Minecraft.getMinecraft().fontRendererObj.drawString("Enter Query:", width/2-100, height/4-10, 0xdddddd, true); + int h = NotEnoughUpdates.INSTANCE.config.auctionHouseSearch.showPastSearches ? 219 : 145; + + int topY = height/4; + if(scaledResolution.getScaleFactor() >= 4) { + topY = height/2 - h/2 + 5; + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(SEARCH_OVERLAY_TEXTURE); + Utils.drawTexturedRect(width/2-100, topY-1, 203, h, 0, 203/512f, 0, h/256f, GL11.GL_NEAREST); + + Minecraft.getMinecraft().fontRendererObj.drawString("Enter Query:", width/2-100, topY-10, 0xdddddd, true); textField.setText(searchString); - textField.render(width/2-100, height/4); + textField.setSize(149, 20); + textField.setCustomBorderColour(0xffffff); + textField.render(width/2-100+1, topY+1); if(textField.getText().trim().isEmpty()) autocompletedItems.clear(); - Gui.drawRect(width/2-101, height/4+25, width/2+101, height/4+25+ AUTOCOMPLETE_HEIGHT, 0xffffffff); - Gui.drawRect(width/2-100, height/4+25+1, width/2+100, height/4+25-1+ AUTOCOMPLETE_HEIGHT, 0xff000000); + //Gui.drawRect(width/2-101, height/4+25, width/2+101, height/4+25+ AUTOCOMPLETE_HEIGHT, 0xffffffff); + //Gui.drawRect(width/2-100, height/4+25+1, width/2+100, height/4+25-1+ AUTOCOMPLETE_HEIGHT, 0xff000000); List tooltipToDisplay = null; int num = 0; - for(String str : autocompletedItems) { - JsonObject obj = NotEnoughUpdates.INSTANCE.manager.getItemInformation().get(str); - if(obj != null) { - ItemStack stack = NotEnoughUpdates.INSTANCE.manager.jsonToStack(obj); - Gui.drawRect(width/2-96, height/4+30+num*22, width/2+96, height/4+30+num*22+20, 0xff505050); - Minecraft.getMinecraft().fontRendererObj.drawString(Utils.trimIgnoreColour(stack.getDisplayName().replaceAll("\\[.+]", "")), - width/2-74, height/4+35+num*22, 0xdddddd, true); - - GlStateManager.enableDepth(); - Utils.drawItemStack(stack, width/2-94, height/4+32+num*22); - - if(mouseX > width/2-96 && mouseX < width/2+96 && mouseY > height/4+30+num*22 && mouseY < height/4+30+num*22+20) { - tooltipToDisplay = stack.getTooltip(Minecraft.getMinecraft().thePlayer, false); - } + synchronized(autocompletedItems) { + for(String str : autocompletedItems) { + JsonObject obj = NotEnoughUpdates.INSTANCE.manager.getItemInformation().get(str); + if(obj != null) { + ItemStack stack = NotEnoughUpdates.INSTANCE.manager.jsonToStack(obj); + //Gui.drawRect(width/2-96, height/4+30+num*22, width/2+96, height/4+30+num*22+20, 0xff505050); + + Minecraft.getMinecraft().getTextureManager().bindTexture(SEARCH_OVERLAY_TEXTURE); + GlStateManager.color(1, 1, 1, 1); + Utils.drawTexturedRect(width/2-96+1, topY+30+num*22+1, 193, 21, 214/512f, 407/512f, 0, 21/256f, GL11.GL_NEAREST); + + String itemName = Utils.trimIgnoreColour(stack.getDisplayName().replaceAll("\\[.+]", "")); + if(itemName.contains("Enchanted Book") && str.contains(";")) { + itemName = EnumChatFormatting.BLUE+WordUtils.capitalizeFully(str.split(";")[0].replace("_", " ")); + } + Minecraft.getMinecraft().fontRendererObj.drawString(Minecraft.getMinecraft().fontRendererObj.trimStringToWidth(itemName, 165), + width/2-74, topY+35+num*22+1, 0xdddddd, true); + + GlStateManager.enableDepth(); + Utils.drawItemStack(stack, width/2-94+2, topY+32+num*22+1); + + if(mouseX > width/2-96 && mouseX < width/2+96 && mouseY > topY+30+num*22 && mouseY < topY+30+num*22+20) { + tooltipToDisplay = stack.getTooltip(Minecraft.getMinecraft().thePlayer, false); + } - if(++num >= 5) break; + if(++num >= 5) break; + } } } - Minecraft.getMinecraft().fontRendererObj.drawString("Past Searches:", width/2-100, height/4+25+ AUTOCOMPLETE_HEIGHT +5, 0xdddddd, true); - - int pastSearchHeight = 9 + 10 * Math.min(5, NotEnoughUpdates.INSTANCE.config.hidden.previousAuctionSearches.size()); + if(NotEnoughUpdates.INSTANCE.config.auctionHouseSearch.showPastSearches) { + Minecraft.getMinecraft().fontRendererObj.drawString("Past Searches:", width/2-100, topY+25+ AUTOCOMPLETE_HEIGHT +5, 0xdddddd, true); - Gui.drawRect(width/2-101, height/4+ AUTOCOMPLETE_HEIGHT +40, width/2+101, height/4+ AUTOCOMPLETE_HEIGHT +40+pastSearchHeight, 0xffffffff); - Gui.drawRect(width/2-100, height/4+ AUTOCOMPLETE_HEIGHT +40+1, width/2+100, height/4+ AUTOCOMPLETE_HEIGHT +40-1+pastSearchHeight, 0xff000000); + for(int i=0; i<5; i++) { + if(i >= NotEnoughUpdates.INSTANCE.config.hidden.previousAuctionSearches.size()) break; - for(int i=0; i<5; i++) { - if(i >= NotEnoughUpdates.INSTANCE.config.hidden.previousAuctionSearches.size()) break; + String s = NotEnoughUpdates.INSTANCE.config.hidden.previousAuctionSearches.get(i); + Minecraft.getMinecraft().fontRendererObj.drawString(s, width/2-95+1, topY+45+ AUTOCOMPLETE_HEIGHT +i*10+2, 0xdddddd, true); + } - String s = NotEnoughUpdates.INSTANCE.config.hidden.previousAuctionSearches.get(i); - Minecraft.getMinecraft().fontRendererObj.drawString(s, width/2-95, height/4+45+ AUTOCOMPLETE_HEIGHT +i*10, 0xdddddd, true); + if(tooltipToDisplay != null) { + Utils.drawHoveringText(tooltipToDisplay, mouseX, mouseY, width, height, -1, Minecraft.getMinecraft().fontRendererObj); + } } - if(tooltipToDisplay != null) { - Utils.drawHoveringText(tooltipToDisplay, mouseX, mouseY, width, height, -1, Minecraft.getMinecraft().fontRendererObj); - } } public static void close() { @@ -189,45 +230,70 @@ public class AuctionSearchOverlay { } } + private static ExecutorService searchES = Executors.newSingleThreadExecutor(); + private static AtomicInteger searchId = new AtomicInteger(0); + public static void keyEvent() { - if(Keyboard.getEventKey() == Keyboard.KEY_ESCAPE || Keyboard.getEventKey() == Keyboard.KEY_RETURN) { + if(Keyboard.getEventKey() == Keyboard.KEY_ESCAPE) { + close(); + if(NotEnoughUpdates.INSTANCE.config.auctionHouseSearch.escFullClose) { + Minecraft.getMinecraft().thePlayer.sendQueue.addToSendQueue(new C0DPacketCloseWindow(Minecraft.getMinecraft().thePlayer.openContainer.windowId)); + } + } else if(Keyboard.getEventKey() == Keyboard.KEY_RETURN) { close(); } else if(Keyboard.getEventKeyState()) { textField.setText(searchString); textField.keyTyped(Keyboard.getEventCharacter(), Keyboard.getEventKey()); searchString = textField.getText(); - autocompletedItems.clear(); + final int thisSearchId = searchId.incrementAndGet(); + + searchES.submit(() -> { + if(thisSearchId != searchId.get()) return; - List title = new ArrayList<>(NotEnoughUpdates.INSTANCE.manager.search("title:"+searchString.trim())); - if(!searchString.trim().contains(" ")) { - StringBuilder sb = new StringBuilder(); - for(char c : searchString.toCharArray()) { - sb.append(c).append(" "); + List title = new ArrayList<>(NotEnoughUpdates.INSTANCE.manager.search("title:"+searchString.trim())); + + if(thisSearchId != searchId.get()) return; + + if(!searchString.trim().contains(" ")) { + StringBuilder sb = new StringBuilder(); + for(char c : searchString.toCharArray()) { + sb.append(c).append(" "); + } + title.addAll(NotEnoughUpdates.INSTANCE.manager.search("title:"+sb.toString().trim())); } - title.addAll(NotEnoughUpdates.INSTANCE.manager.search("title:"+sb.toString().trim())); - } - List desc = new ArrayList<>(NotEnoughUpdates.INSTANCE.manager.search("desc:"+searchString.trim())); - desc.removeAll(title); - Set auctionableItems = NotEnoughUpdates.INSTANCE.manager.auctionManager.getLowestBinKeySet(); - auctionableItems.addAll(NotEnoughUpdates.INSTANCE.manager.auctionManager.getItemAuctionInfoKeySet()); + if(thisSearchId != searchId.get()) return; - if(!auctionableItems.isEmpty()) { - title.retainAll(auctionableItems); - desc.retainAll(auctionableItems); + List desc = new ArrayList<>(NotEnoughUpdates.INSTANCE.manager.search("desc:"+searchString.trim())); + desc.removeAll(title); - title.sort(salesComparator); - desc.sort(salesComparator); - } else { - Set bazaarItems = NotEnoughUpdates.INSTANCE.manager.auctionManager.getBazaarKeySet(); + if(thisSearchId != searchId.get()) return; - title.removeAll(bazaarItems); - desc.removeAll(bazaarItems); - } + Set auctionableItems = NotEnoughUpdates.INSTANCE.manager.auctionManager.getLowestBinKeySet(); + auctionableItems.addAll(NotEnoughUpdates.INSTANCE.manager.auctionManager.getItemAuctionInfoKeySet()); + + if(!auctionableItems.isEmpty()) { + title.retainAll(auctionableItems); + desc.retainAll(auctionableItems); + + title.sort(salesComparator); + desc.sort(salesComparator); + } else { + Set bazaarItems = NotEnoughUpdates.INSTANCE.manager.auctionManager.getBazaarKeySet(); + + title.removeAll(bazaarItems); + desc.removeAll(bazaarItems); + } - autocompletedItems.addAll(title); - autocompletedItems.addAll(desc); + if(thisSearchId != searchId.get()) return; + + synchronized(autocompletedItems) { + autocompletedItems.clear(); + autocompletedItems.addAll(title); + autocompletedItems.addAll(desc); + } + }); } } @@ -238,51 +304,80 @@ public class AuctionSearchOverlay { int mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; int mouseY = height - Mouse.getY() * height / Minecraft.getMinecraft().displayHeight - 1; + int h = NotEnoughUpdates.INSTANCE.config.auctionHouseSearch.showPastSearches ? 219 : 145; + + int topY = height/4; + if(scaledResolution.getScaleFactor() >= 4) { + topY = height/2 - h/2 + 5; + } + if(!Mouse.getEventButtonState() && Mouse.getEventButton() == -1 && searchFieldClicked) { - textField.mouseClickMove(mouseX-2, height/4+10, 0, 0); + textField.mouseClickMove(mouseX-2, topY+10, 0, 0); } if(Mouse.getEventButton() != -1) { searchFieldClicked = false; } - if(mouseX > width/2-100 && mouseX < width/2+100 && mouseY > height/4 && mouseY < height/4+20) { - if(Mouse.getEventButtonState()) { - searchFieldClicked = true; - textField.mouseClicked(mouseX-2, mouseY, Mouse.getEventButton()); - - if(Mouse.getEventButton() == 1) { - searchString = ""; - autocompletedItems.clear(); - } - } - } else if(Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { - int num = 0; - for(String str : autocompletedItems) { - JsonObject obj = NotEnoughUpdates.INSTANCE.manager.getItemInformation().get(str); - if(obj != null) { - ItemStack stack = NotEnoughUpdates.INSTANCE.manager.jsonToStack(obj); - if(mouseX >= width/2-96 && mouseX <= width/2+96 && mouseY >= height/4+30+num*22 && mouseY <= height/4+30+num*22+20) { - searchString = Utils.cleanColour(stack.getDisplayName().replaceAll("\\[.+]", "")).trim(); + if(Mouse.getEventButtonState()) { + if(mouseY > topY && mouseY < topY+20) { + if(mouseX > width/2-100) { + if(mouseX < width/2+49) { + searchFieldClicked = true; + textField.mouseClicked(mouseX-2, mouseY, Mouse.getEventButton()); + + if(Mouse.getEventButton() == 1) { + searchString = ""; + synchronized(autocompletedItems) { + autocompletedItems.clear(); + } + } + } else if(mouseX < width/2+75) { close(); - return; + } else if(mouseX < width/2+100) { + close(); + Minecraft.getMinecraft().thePlayer.sendQueue.addToSendQueue(new C0DPacketCloseWindow(Minecraft.getMinecraft().thePlayer.openContainer.windowId)); + NotEnoughUpdates.INSTANCE.openGui = new GuiScreenElementWrapper(new NEUConfigEditor( + NotEnoughUpdates.INSTANCE.config, "AH Search GUI")); + } + } + } else if(Mouse.getEventButton() == 0) { + int num = 0; + synchronized(autocompletedItems) { + for(String str : autocompletedItems) { + JsonObject obj = NotEnoughUpdates.INSTANCE.manager.getItemInformation().get(str); + if(obj != null) { + ItemStack stack = NotEnoughUpdates.INSTANCE.manager.jsonToStack(obj); + if(mouseX >= width/2-96 && mouseX <= width/2+96 && mouseY >= topY+30+num*22 && mouseY <= topY+30+num*22+20) { + searchString = Utils.cleanColour(stack.getDisplayName().replaceAll("\\[.+]", "")).trim(); + if(searchString.contains("Enchanted Book") && str.contains(";")) { + searchString = WordUtils.capitalizeFully(str.split(";")[0].replace("_", " ")); + } + close(); + return; + } + + if(++num >= 5) break; + } } - - if(++num >= 5) break; } - } - for(int i=0; i<5; i++) { - if(i >= NotEnoughUpdates.INSTANCE.config.hidden.previousAuctionSearches.size()) break; + if(NotEnoughUpdates.INSTANCE.config.auctionHouseSearch.showPastSearches) { + for(int i=0; i<5; i++) { + if(i >= NotEnoughUpdates.INSTANCE.config.hidden.previousAuctionSearches.size()) break; - String s = NotEnoughUpdates.INSTANCE.config.hidden.previousAuctionSearches.get(i); - if(mouseX >= width/2-95 && mouseX <= width/2+95 && mouseY >= height/4+45+AUTOCOMPLETE_HEIGHT+i*10 && mouseY <= height/4+45+AUTOCOMPLETE_HEIGHT+i*10+10) { - searchString = s; - close(); - return; + String s = NotEnoughUpdates.INSTANCE.config.hidden.previousAuctionSearches.get(i); + if(mouseX >= width/2-95 && mouseX <= width/2+95 && mouseY >= topY+45+AUTOCOMPLETE_HEIGHT+i*10 && mouseY <= topY+45+AUTOCOMPLETE_HEIGHT+i*10+10) { + searchString = s; + close(); + return; + } + } } } } + + } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java index d4671986..930d4d39 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java @@ -62,11 +62,16 @@ public class MiningOverlay extends TextOverlay { } String clean = StringUtils.cleanColour(name); if(forges && clean.startsWith(" ")) { - if(name.contains("LOCKED")) continue; - if(name.contains("EMPTY")) { - forgeStringsEmpty.add(DARK_AQUA+"Forge "+ Utils.trimIgnoreColour(name).replaceAll("\u00a7[f|F|r]", "")); + char firstChar = clean.trim().charAt(0); + if(firstChar < '0' || firstChar > '9') { + forges = false; } else { - forgeStrings.add(DARK_AQUA+"Forge "+ Utils.trimIgnoreColour(name).replaceAll("\u00a7[f|F|r]", "")); + if(name.contains("LOCKED")) continue; + if(name.contains("EMPTY")) { + forgeStringsEmpty.add(DARK_AQUA+"Forge "+ Utils.trimIgnoreColour(name).replaceAll("\u00a7[f|F|r]", "")); + } else { + forgeStrings.add(DARK_AQUA+"Forge "+ Utils.trimIgnoreColour(name).replaceAll("\u00a7[f|F|r]", "")); + } } } else if(commissions && clean.startsWith(" ")) { String[] split = clean.trim().split(": "); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/RancherBootOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/RancherBootOverlay.java new file mode 100644 index 00000000..54988e70 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/RancherBootOverlay.java @@ -0,0 +1,163 @@ +package io.github.moulberry.notenoughupdates.overlays; + +import io.github.moulberry.notenoughupdates.NotEnoughUpdates; +import io.github.moulberry.notenoughupdates.core.GuiElementTextField; +import io.github.moulberry.notenoughupdates.core.util.GuiElementSlider; +import io.github.moulberry.notenoughupdates.mixins.GuiEditSignAccessor; +import io.github.moulberry.notenoughupdates.util.SBInfo; +import io.github.moulberry.notenoughupdates.util.Utils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.gui.inventory.GuiEditSign; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntitySign; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; + +import java.util.HashMap; + +public class RancherBootOverlay { + + private static int selectedIndex = 0; + + private static HashMap currentSpeeds = new HashMap<>(); + private static GuiElementSlider slider = new GuiElementSlider(0, 0, 145, 100, 400, 1, 300, (val) -> { + setValue(val.intValue()); + }); + private static GuiElementTextField textField = new GuiElementTextField("", 48, 20, GuiElementTextField.NUM_ONLY); + private static boolean textFieldClicked = false; + + public static boolean shouldReplace() { + //if(!NotEnoughUpdates.INSTANCE.config.auctionHouseSearch.enableSearchOverlay) return false; + + if(!(Minecraft.getMinecraft().currentScreen instanceof GuiEditSign)) return false; + + TileEntitySign tes = ((GuiEditSignAccessor)Minecraft.getMinecraft().currentScreen).getTileSign(); + + if(tes == null) return false; + if(tes.getPos().getY() != 0) return false; + if(!tes.signText[1].getUnformattedText().equals("^^^^^^")) return false; + if(!tes.signText[2].getUnformattedText().equals("Set your")) return false; + if(!tes.signText[3].getUnformattedText().equals("speed cap!")) return false; + + return true; + } + + public static void render() { + ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); + int width = scaledResolution.getScaledWidth(); + int height = scaledResolution.getScaledHeight(); + int mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; + int mouseY = height - Mouse.getY() * height / Minecraft.getMinecraft().displayHeight - 1; + + Utils.drawGradientRect(0, 0, width, height, -1072689136, -804253680); + + int topY = height/4; + + //Gui.drawRect(width/2-100, topY, width/2+48, topY+20, 0xffffffff); + Gui.drawRect(width/2+52, topY, width/2+100, topY+20, 0xffffffff); + + textField.render(width/2+52, topY); + + slider.x = width/2-100; + slider.y = topY; + slider.render(); + + int numIcons = 3; + int iconsLeft = width/2 - (numIcons*25 - 5)/2 ; + + for(int i=0; i 5) textField.setText(textField.getText().substring(0, 5)); + + try { + setCurrentSpeed(Integer.parseInt(textField.getText().trim())); + slider.setValue(getCurrentSpeed()); + textField.setCustomBorderColour(0xfeffffff); + } catch(NumberFormatException ignored) { + textField.setCustomBorderColour(0xffff0000); + } + } + } + } + + private static int getCurrentSpeed() { + return currentSpeeds.get(selectedIndex); + } + + private static void setCurrentSpeed(int speed) { + currentSpeeds.put(selectedIndex, speed); + } + + public static void setValue(int value) { + setCurrentSpeed(value); + textField.setText(""+getCurrentSpeed()); + } + + public static void mouseEvent() { + ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); + int width = scaledResolution.getScaledWidth(); + int height = scaledResolution.getScaledHeight(); + int mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; + int mouseY = height - Mouse.getY() * height / Minecraft.getMinecraft().displayHeight - 1; + + int topY = height/4; + + slider.mouseInput(mouseX, mouseY); + + if(!Mouse.getEventButtonState() && Mouse.getEventButton() == -1 && textFieldClicked) { + textField.mouseClickMove(mouseX-2, topY+10, 0, 0); + } + + if(Mouse.getEventButton() != -1) { + textFieldClicked = false; + } + + if(mouseX > width/2+52 && mouseX < width/2+100 && mouseY > topY && mouseY < topY+20) { + if(Mouse.getEventButtonState()) { + textField.mouseClicked(mouseX, mouseY, Mouse.getEventButton()); + textFieldClicked = true; + } + } + + if(Mouse.getEventButtonState()) { + int numIcons = 3; + int iconsLeft = width/2 - (numIcons*25 - 5)/2 ; + + for(int i=0; i iconsLeft+i*25 && mouseX < iconsLeft+i*25+20 && mouseY > topY+25 && mouseY < topY+45) { + if(i != selectedIndex) { + selectedIndex = i; + slider.setValue(getCurrentSpeed()); + textField.setText(""+getCurrentSpeed()); + } + return; + } + //Minecraft.getMinecraft().fontRendererObj.drawString("\u2710", iconsLeft+i*25+15, topY+40, 0xffffff, false); + } + } + } + +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java b/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java index a17c9ec9..090b3b59 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/SBInfo.java @@ -114,7 +114,7 @@ public class SBInfo { Minecraft.getMinecraft().theWorld != null && locraw == null && (currentTime - joinedWorld) > 1000 && - (currentTime - lastLocRaw) > 10000) { + (currentTime - lastLocRaw) > 15000) { lastLocRaw = System.currentTimeMillis(); NotEnoughUpdates.INSTANCE.sendChatMessage("/locraw"); } diff --git a/src/main/resources/assets/notenoughupdates/ah_search_overlay.png b/src/main/resources/assets/notenoughupdates/ah_search_overlay.png new file mode 100644 index 00000000..3e21edda Binary files /dev/null and b/src/main/resources/assets/notenoughupdates/ah_search_overlay.png differ -- cgit