diff options
| author | DoKM <mcazzyman@gmail.com> | 2021-09-02 14:03:14 +0200 |
|---|---|---|
| committer | DoKM <mcazzyman@gmail.com> | 2021-09-02 14:03:14 +0200 |
| commit | 74db72ad590c74b040d0800d411c4e1f1270a09a (patch) | |
| tree | 8ebf9cdf596fae2ec6b149826475d1d84de9ec3a /src/main/java/io/github/moulberry/notenoughupdates/miscfeatures | |
| parent | 05d6207281e18980b8a28046621c741fa81c1606 (diff) | |
| parent | 8eee6262a6e2c372240331f3c43c2279bd18539e (diff) | |
| download | notenoughupdates-74db72ad590c74b040d0800d411c4e1f1270a09a.tar.gz notenoughupdates-74db72ad590c74b040d0800d411c4e1f1270a09a.tar.bz2 notenoughupdates-74db72ad590c74b040d0800d411c4e1f1270a09a.zip | |
Merge remote-tracking branch 'Moulberry/master'
Diffstat (limited to 'src/main/java/io/github/moulberry/notenoughupdates/miscfeatures')
4 files changed, 338 insertions, 81 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionBINWarning.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionBINWarning.java new file mode 100644 index 00000000..fc2eaf61 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionBINWarning.java @@ -0,0 +1,243 @@ +package io.github.moulberry.notenoughupdates.miscfeatures; + +import com.google.gson.JsonObject; +import io.github.moulberry.notenoughupdates.NotEnoughUpdates; +import io.github.moulberry.notenoughupdates.core.GuiElement; +import io.github.moulberry.notenoughupdates.core.util.render.RenderUtils; +import io.github.moulberry.notenoughupdates.core.util.render.TextRenderUtils; +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.GuiChest; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class AuctionBINWarning extends GuiElement { + + private static final AuctionBINWarning INSTANCE = new AuctionBINWarning(); + public static AuctionBINWarning getInstance() { + return INSTANCE; + } + + private static final Pattern ITEM_PRICE_REGEX = Pattern.compile("\u00a7fItem price: \u00a76([0-9,]+) coins"); + + private boolean showWarning = false; + private List<String> sellingTooltip; + private String sellingName; + private int sellingPrice; + private int lowestPrice; + + private boolean shouldPerformCheck() { + if(!NotEnoughUpdates.INSTANCE.config.ahTweaks.enableBINWarning || + !NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard()) { + sellingTooltip = null; + showWarning = false; + return false; + } + + if(Minecraft.getMinecraft().currentScreen instanceof GuiChest && + SBInfo.getInstance().lastOpenContainerName.startsWith("Create BIN Auction")) { + return true; + } else { + sellingTooltip = null; + showWarning = false; + return false; + } + } + + public boolean shouldShow() { + return shouldPerformCheck() && showWarning; + } + + public boolean onMouseClick(Slot slotIn, int slotId, int clickedButton, int clickType) { + if(!shouldPerformCheck()) return false; + + if(slotId == 29) { + GuiChest chest = (GuiChest) Minecraft.getMinecraft().currentScreen; + + sellingPrice = -1; + + ItemStack priceStack = chest.inventorySlots.getSlot(31).getStack(); + if(priceStack != null) { + String displayName = priceStack.getDisplayName(); + Matcher priceMatcher = ITEM_PRICE_REGEX.matcher(displayName); + + if(priceMatcher.matches()) { + try { + sellingPrice = Integer.parseInt(priceMatcher.group(1).replace(",", "")); + } catch(NumberFormatException ignored) { + } + } + } + + ItemStack sellStack = chest.inventorySlots.getSlot(13).getStack(); + String internalname = NotEnoughUpdates.INSTANCE.manager.getInternalNameForItem(sellStack); + + if(internalname == null) { + return false; + } + + JsonObject itemInfo = NotEnoughUpdates.INSTANCE.manager.getItemInformation().get(internalname); + if(itemInfo == null || !itemInfo.has("displayname")) { + sellingName = internalname; + } else { + sellingName = itemInfo.get("displayname").getAsString(); + } + + sellingTooltip = sellStack.getTooltip(Minecraft.getMinecraft().thePlayer, + Minecraft.getMinecraft().gameSettings.advancedItemTooltips); + + lowestPrice = NotEnoughUpdates.INSTANCE.manager.auctionManager.getLowestBin(internalname); + if(lowestPrice <= 0) { + lowestPrice = (int)NotEnoughUpdates.INSTANCE.manager.auctionManager.getItemAvgBin(internalname); + } + + //TODO: Add option for warning if lowest price does not exist + + float factor = 1 - NotEnoughUpdates.INSTANCE.config.ahTweaks.warningThreshold/100; + if(factor < 0) factor = 0; + if(factor > 1) factor = 1; + + if(sellingPrice > 0 && lowestPrice > 0 && sellingPrice < lowestPrice*factor) { + showWarning = true; + return true; + } else { + return false; + } + } + return false; + } + + public void overrideIsMouseOverSlot(Slot slot, int mouseX, int mouseY, CallbackInfoReturnable<Boolean> cir) { + if(shouldShow()) { + cir.setReturnValue(false); + } + } + + @Override + public void render() { + final ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); + final int width = scaledResolution.getScaledWidth(); + final int height = scaledResolution.getScaledHeight(); + + GlStateManager.disableLighting(); + + GlStateManager.pushMatrix(); + GlStateManager.translate(0, 0, 500); + + Gui.drawRect(0, 0, width, height, 0x80000000); + + RenderUtils.drawFloatingRectDark(width/2-90, height/2-45, 180, 90); + + int neuLength = Minecraft.getMinecraft().fontRendererObj.getStringWidth("\u00a7lNEU"); + Minecraft.getMinecraft().fontRendererObj.drawString("\u00a7lNEU", width/2+90-neuLength-3, height/2-45+4, 0xff000000); + + TextRenderUtils.drawStringCenteredScaledMaxWidth("Are you SURE?", Minecraft.getMinecraft().fontRendererObj, + width/2, height/2-45+10, false, 170, 0xffff4040); + + String lowestPriceStr; + if(lowestPrice > 999) { + lowestPriceStr = Utils.shortNumberFormat(lowestPrice, 0); + } else { + lowestPriceStr = ""+lowestPrice; + } + + String sellingPriceStr; + if(sellingPrice > 999) { + sellingPriceStr = Utils.shortNumberFormat(sellingPrice, 0); + } else { + sellingPriceStr = ""+sellingPrice; + } + + String sellLine = "\u00a77[ \u00a7r"+sellingName+"\u00a77 ]"; + + TextRenderUtils.drawStringCenteredScaledMaxWidth(sellLine, Minecraft.getMinecraft().fontRendererObj, + width/2, height/2-45+25, false, 170, 0xffffffff); + TextRenderUtils.drawStringCenteredScaledMaxWidth("has a lowest BIN of \u00a76"+lowestPriceStr+"\u00a7r coins", Minecraft.getMinecraft().fontRendererObj, + width/2, height/2-45+34, false, 170, 0xffa0a0a0); + + int buyPercentage = 100 - sellingPrice*100/lowestPrice; + if(buyPercentage <= 0) buyPercentage = 1; + + TextRenderUtils.drawStringCenteredScaledMaxWidth("Continue selling it for", Minecraft.getMinecraft().fontRendererObj, + width/2, height/2-45+50, false, 170, 0xffa0a0a0); + TextRenderUtils.drawStringCenteredScaledMaxWidth("\u00a76"+sellingPriceStr+"\u00a7r coins? (\u00a7c-"+buyPercentage+"%\u00a7r)", + Minecraft.getMinecraft().fontRendererObj, + width/2, height/2-45+59, false, 170, 0xffa0a0a0); + + RenderUtils.drawFloatingRectDark(width/2-43, height/2+23, 40, 16, false); + RenderUtils.drawFloatingRectDark(width/2+3, height/2+23, 40, 16, false); + + TextRenderUtils.drawStringCenteredScaledMaxWidth(EnumChatFormatting.GREEN+"[Y]es", Minecraft.getMinecraft().fontRendererObj, + width/2-23, height/2+31, true, 36, 0xff00ff00); + TextRenderUtils.drawStringCenteredScaledMaxWidth(EnumChatFormatting.RED+"[n]o", Minecraft.getMinecraft().fontRendererObj, + width/2+23, height/2+31, true, 36, 0xffff0000); + + if(sellingTooltip != null) { + int mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; + int mouseY = height - Mouse.getY() * height / Minecraft.getMinecraft().displayHeight - 1; + + int sellLineLength = Minecraft.getMinecraft().fontRendererObj.getStringWidth(sellLine); + + if(mouseX >= width/2-sellLineLength/2 && mouseX <= width/2+sellLineLength/2 && + mouseY >= height/2-45+20 && mouseY <= height/2-45+30) { + Utils.drawHoveringText(sellingTooltip, mouseX, mouseY, width, height, -1, Minecraft.getMinecraft().fontRendererObj); + } + } + + GlStateManager.popMatrix(); + } + + @Override + public boolean mouseInput(int mouseX, int mouseY) { + final ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); + final int width = scaledResolution.getScaledWidth(); + final int height = scaledResolution.getScaledHeight(); + + if(Mouse.getEventButtonState()) { + if(mouseY >= height/2+23 && mouseY <= height/2+23+16) { + if(mouseX >= width/2-43 && mouseX <= width/2-3) { + GuiChest chest = (GuiChest) Minecraft.getMinecraft().currentScreen; + Minecraft.getMinecraft().playerController.windowClick(chest.inventorySlots.windowId, + 29, 0, 0, Minecraft.getMinecraft().thePlayer); + showWarning = false; + } else { + showWarning = false; + } + } + + if(mouseX < width/2-90 || mouseX > width/2+90 || + mouseY < height/2-45 || mouseY > height/2+45) { + showWarning = false; + } + } + + return false; + } + + @Override + public boolean keyboardInput() { + if(!Keyboard.getEventKeyState()) { + if(Keyboard.getEventKey() == Keyboard.KEY_Y || Keyboard.getEventKey() == Keyboard.KEY_RETURN) { + GuiChest chest = (GuiChest) Minecraft.getMinecraft().currentScreen; + Minecraft.getMinecraft().playerController.windowClick(chest.inventorySlots.windowId, + 29, 0, 0, Minecraft.getMinecraft().thePlayer); + } + showWarning = false; + } + + return false; + } + +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionSortModeWarning.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionSortModeWarning.java new file mode 100644 index 00000000..3002bce0 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/AuctionSortModeWarning.java @@ -0,0 +1,75 @@ +package io.github.moulberry.notenoughupdates.miscfeatures; + +import io.github.moulberry.notenoughupdates.NotEnoughUpdates; +import io.github.moulberry.notenoughupdates.core.util.render.RenderUtils; +import io.github.moulberry.notenoughupdates.core.util.render.TextRenderUtils; +import io.github.moulberry.notenoughupdates.util.SBInfo; +import io.github.moulberry.notenoughupdates.util.Utils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiChest; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import java.util.List; + +public class AuctionSortModeWarning { + + private static final AuctionSortModeWarning INSTANCE = new AuctionSortModeWarning(); + public static AuctionSortModeWarning getInstance() { + return INSTANCE; + } + + private boolean isAuctionBrowser() { + return NotEnoughUpdates.INSTANCE.config.ahTweaks.enableSortWarning && + Minecraft.getMinecraft().currentScreen instanceof GuiChest && + (SBInfo.getInstance().lastOpenContainerName.startsWith("Auctions Browser") || + SBInfo.getInstance().lastOpenContainerName.startsWith("Auctions: \"")); + } + + public void onPostGuiRender() { + if(isAuctionBrowser()) { + GuiChest chest = (GuiChest) Minecraft.getMinecraft().currentScreen; + + ItemStack stack = chest.inventorySlots.getSlot(50).getStack(); + + if(stack != null) { + List<String> tooltip = stack.getTooltip(Minecraft.getMinecraft().thePlayer, false); + + String selectedSort = null; + for(String line : tooltip) { + if(line.startsWith("\u00a75\u00a7o\u00a7b\u25B6 ")) { + selectedSort = Utils.cleanColour(line.substring("\u00a75\u00a7o\u00a7b\u25B6 ".length())); + } + } + + if(selectedSort != null) { + if(!selectedSort.trim().equals("Lowest Price")) { + GlStateManager.disableLighting(); + GlStateManager.pushMatrix(); + GlStateManager.translate(0, 0, 500); + + String selectedColour = "\u00a7e"; + + if(selectedSort.trim().equals("Highest Price")) { + selectedColour = "\u00a7c"; + } + + String warningText = "\u00a7aSort: " + selectedColour + selectedSort; + int warningLength = Minecraft.getMinecraft().fontRendererObj.getStringWidth(warningText); + + int centerX = chest.guiLeft+chest.xSize/2+9; + int centerY = chest.guiTop+26; + + RenderUtils.drawFloatingRectDark(centerX - warningLength/2 - 4, centerY - 6, + warningLength+8, 12, false); + TextRenderUtils.drawStringCenteredScaledMaxWidth(warningText, Minecraft.getMinecraft().fontRendererObj, + centerX, centerY, true, chest.width/2, 0xffffffff); + GlStateManager.popMatrix(); + } + } + } + } + } + +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/BetterContainers.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/BetterContainers.java index 0aa5e84d..65ccd73f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/BetterContainers.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/BetterContainers.java @@ -3,6 +3,7 @@ package io.github.moulberry.notenoughupdates.miscfeatures; import com.google.gson.JsonObject; import io.github.moulberry.notenoughupdates.NEUEventListener; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; +import io.github.moulberry.notenoughupdates.util.SBInfo; import io.github.moulberry.notenoughupdates.util.TexLoc; import io.github.moulberry.notenoughupdates.util.Utils; import net.minecraft.client.Minecraft; @@ -119,17 +120,29 @@ public class BetterContainers { return isChestOpen() && ((loaded && texture != null) || System.currentTimeMillis() - lastRenderMillis < 200) && !isBlacklistedInventory(); } - public static boolean isBlankStack(ItemStack stack) { + public static boolean isBlankStack(int index, ItemStack stack) { + if(index == 42 && NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard() && + (SBInfo.getInstance().lastOpenContainerName.contains("'s Profile") || + SBInfo.getInstance().lastOpenContainerName.contains("s' Profile"))) { + return false; + } + return stack != null && stack.getItem() == Item.getItemFromBlock(Blocks.stained_glass_pane) && stack.getItemDamage() == 15 && stack.getDisplayName() != null && stack.getDisplayName().trim().isEmpty(); } - public static boolean shouldRenderStack(ItemStack stack) { - return !isBlankStack(stack) && !isToggleOff(stack) && !isToggleOn(stack); + public static boolean shouldRenderStack(int index, ItemStack stack) { + return !isBlankStack(index, stack) && !isToggleOff(stack) && !isToggleOn(stack); } - public static boolean isButtonStack(ItemStack stack) { + public static boolean isButtonStack(int index, ItemStack stack) { + if(index == 42 && NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard() && + (SBInfo.getInstance().lastOpenContainerName.contains("'s Profile") || + SBInfo.getInstance().lastOpenContainerName.contains("s' Profile"))) { + return true; + } + return stack != null && stack.getItem() != Item.getItemFromBlock(Blocks.stained_glass_pane) && NotEnoughUpdates.INSTANCE.manager.getInternalNameForItem(stack) == null && !isToggleOn(stack) && !isToggleOff(stack); } @@ -220,7 +233,7 @@ public class BetterContainers { !lower.getDisplayName().getUnformattedText().contains("Stakes"); for (int index = 0; index < size; index++) { ItemStack stack = getStackCached(lower, index); - buttons[index%9][index/9] = isButtonStack(stack); + buttons[index%9][index/9] = isButtonStack(index, stack); if(ultrasequencer && stack.getItem() == Items.dye) { buttons[index%9][index/9] = false; @@ -234,7 +247,7 @@ public class BetterContainers { //buttons[index%9][index/9] = false; //slots[index%9][index/9] = true; } else { - slots[index%9][index/9] = !isBlankStack(stack) && !buttons[index%9][index/9]; + slots[index%9][index/9] = !isBlankStack(index, stack) && !buttons[index%9][index/9]; } } for (int index = 0; index < size; index++) { @@ -351,7 +364,7 @@ public class BetterContainers { IInventory lower = ((ContainerChest)container).getLowerChestInventory(); int size = lower.getSizeInventory(); for(int index=0; index<size; index++) { - if(isBlankStack(getStackCached(lower, index))) return true; + if(isBlankStack(index, getStackCached(lower, index))) return true; } } return false; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FlyFix.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FlyFix.java deleted file mode 100644 index 0fd2100c..00000000 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FlyFix.java +++ /dev/null @@ -1,74 +0,0 @@ -package io.github.moulberry.notenoughupdates.miscfeatures; - -import io.github.moulberry.notenoughupdates.NotEnoughUpdates; -import io.github.moulberry.notenoughupdates.util.SBInfo; -import net.minecraft.client.Minecraft; -import net.minecraft.network.play.client.C13PacketPlayerAbilities; -import net.minecraft.network.play.server.S39PacketPlayerAbilities; - -public class FlyFix { - - private static boolean serverWantFly = false; - private static boolean clientWantFly = false; - private static long lastAbilitySend = 0; - - public static void onSendAbilities(C13PacketPlayerAbilities packet) { - 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; - if(SBInfo.getInstance().getLocation() == null) return; - if(!SBInfo.getInstance().getLocation().equals("dynamic")) return; - - long currentTime = System.currentTimeMillis(); - - clientWantFly = packet.isFlying(); - if(clientWantFly != serverWantFly) lastAbilitySend = currentTime; - } - - public static void onReceiveAbilities(S39PacketPlayerAbilities packet) { - 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; - if(SBInfo.getInstance().getLocation() == null) return; - if(!SBInfo.getInstance().getLocation().equals("dynamic")) return; - - long currentTime = System.currentTimeMillis(); - - serverWantFly = packet.isFlying(); - - if(serverWantFly != clientWantFly) { - if(currentTime - lastAbilitySend > 0 && currentTime - lastAbilitySend < 500) { - packet.setFlying(clientWantFly); - } else { - clientWantFly = serverWantFly; - } - } - } - - public static void tick() { - 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; - if(SBInfo.getInstance().getLocation() == null) return; - if(!SBInfo.getInstance().getLocation().equals("dynamic")) return; - - long currentTime = System.currentTimeMillis(); - - if(currentTime - lastAbilitySend > 1000 && currentTime - lastAbilitySend < 5000) { - if(clientWantFly != serverWantFly) { - Minecraft.getMinecraft().thePlayer.capabilities.isFlying = serverWantFly; - Minecraft.getMinecraft().thePlayer.sendPlayerAbilities(); - clientWantFly = serverWantFly; - } - } else { - clientWantFly = Minecraft.getMinecraft().thePlayer.capabilities.isFlying; - } - } - -} |
