diff options
Diffstat (limited to 'src/main/java')
27 files changed, 737 insertions, 253 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java index 9d619c78..8a6f77ea 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java @@ -1,8 +1,10 @@ package io.github.moulberry.notenoughupdates; +import com.google.common.collect.Lists; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; import io.github.moulberry.notenoughupdates.auction.CustomAHGui; import io.github.moulberry.notenoughupdates.core.BackgroundBlur; import io.github.moulberry.notenoughupdates.core.config.Position; @@ -12,11 +14,8 @@ import io.github.moulberry.notenoughupdates.dungeons.DungeonWin; import io.github.moulberry.notenoughupdates.gamemodes.SBGamemodes; import io.github.moulberry.notenoughupdates.miscfeatures.*; import io.github.moulberry.notenoughupdates.miscgui.*; -import io.github.moulberry.notenoughupdates.overlays.CommissionOverlay; -import io.github.moulberry.notenoughupdates.overlays.FarmingOverlay; +import io.github.moulberry.notenoughupdates.overlays.*; import io.github.moulberry.notenoughupdates.profileviewer.GuiProfileViewer; -import io.github.moulberry.notenoughupdates.overlays.TextOverlay; -import io.github.moulberry.notenoughupdates.overlays.TextOverlayStyle; import io.github.moulberry.notenoughupdates.util.*; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; @@ -49,6 +48,7 @@ import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.text.WordUtils; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; @@ -140,19 +140,6 @@ public class NEUEventListener { private static final Pattern BAD_ITEM_REGEX = Pattern.compile("x[0-9]{1,2}$"); - public static Class<? extends TextOverlay> dontRenderOverlay = null; - private final List<TextOverlay> textOverlays = new ArrayList<>(); - { - textOverlays.add(new CommissionOverlay(NotEnoughUpdates.INSTANCE.config.mining.overlayPosition, () -> { - int style = NotEnoughUpdates.INSTANCE.config.mining.overlayStyle; - if(style >= 0 && style < TextOverlayStyle.values().length) { - return TextOverlayStyle.values()[style]; - } - return TextOverlayStyle.BACKGROUND; - })); - textOverlays.add(new FarmingOverlay(new Position(20, 300), () -> TextOverlayStyle.BACKGROUND)); - } - /** * 1)Will send the cached message from #sendChatMessage when at least 200ms has passed since the last message. * This is used in order to prevent the mod spamming messages. @@ -198,6 +185,12 @@ public class NEUEventListener { DungeonBlocks.tick(); } DungeonWin.tick(); + FlyFix.tick(); + + for(TextOverlay overlay : OverlayManager.textOverlays) { + overlay.shouldUpdateFrequent = true; + } + if(longUpdate) { /*for(Entity entity : Minecraft.getMinecraft().theWorld.loadedEntityList) { if(entity instanceof EntityArmorStand) { @@ -211,10 +204,11 @@ public class NEUEventListener { DwarvenMinesTextures.tick(); FairySouls.tick(); MiningStuff.tick(); + XPInformation.getInstance().tick(); ProfileApiSyncer.getInstance().tick(); DamageCommas.tick(); BackgroundBlur.tick(); - for(TextOverlay overlay : textOverlays) { + for(TextOverlay overlay : OverlayManager.textOverlays) { overlay.tick(); } if(TradeWindow.hypixelTradeWindowActive()) { @@ -425,13 +419,13 @@ public class NEUEventListener { long timeRemaining = 15000 - (System.currentTimeMillis() - notificationDisplayMillis); if(event.type == RenderGameOverlayEvent.ElementType.ALL) { DungeonWin.render(event.partialTicks); - for(TextOverlay overlay : textOverlays) { - if(dontRenderOverlay != null && dontRenderOverlay.isAssignableFrom(overlay.getClass())) { + for(TextOverlay overlay : OverlayManager.textOverlays) { + if(OverlayManager.dontRenderOverlay != null && OverlayManager.dontRenderOverlay.isAssignableFrom(overlay.getClass())) { continue; } overlay.render(); } - dontRenderOverlay = null; + OverlayManager.dontRenderOverlay = null; } if(event.type == RenderGameOverlayEvent.ElementType.ALL && timeRemaining > 0 && notificationLines != null && notificationLines.size() > 0) { @@ -1259,6 +1253,30 @@ public class NEUEventListener { EnumChatFormatting.RED+EnumChatFormatting.BOLD.toString()+"VERY SPECIAL", EnumChatFormatting.DARK_RED+EnumChatFormatting.BOLD.toString()+"SUPREME", }; + private static final HashMap<String, String> rarityArrMap = new HashMap<>(); + static { + rarityArrMap.put("COMMON", rarityArrC[0]); + rarityArrMap.put("UNCOMMON", rarityArrC[1]); + rarityArrMap.put("RARE", rarityArrC[2]); + rarityArrMap.put("EPIC", rarityArrC[3]); + rarityArrMap.put("LEGENDARY", rarityArrC[4]); + rarityArrMap.put("MYTHIC", rarityArrC[5]); + } + + private HashSet<String> percentStats = new HashSet<>(); + { + percentStats.add("bonus_attack_speed"); + percentStats.add("crit_damage"); + percentStats.add("crit_chance"); + percentStats.add("sea_creature_chance"); + percentStats.add("ability_damage"); + } + + private String currentRarity = "COMMON"; + private boolean showReforgeStoneStats = true; + private boolean pressedArrowLast = false; + private boolean pressedShiftLast = false; + @SubscribeEvent(priority = EventPriority.LOW) public void onItemTooltipLow(ItemTooltipEvent event) { if(!NotEnoughUpdates.INSTANCE.isOnSkyblock()) return; @@ -1323,7 +1341,145 @@ public class NEUEventListener { int index = 0; List<String> newTooltip = new ArrayList<>(); for(String line : event.toolTip) { - if(line.contains("\u00A7cR\u00A76a\u00A7ei\u00A7an\u00A7bb\u00A79o\u00A7dw\u00A79 Rune")) { + if(line.endsWith(EnumChatFormatting.DARK_GRAY+"Reforge Stone")) { + JsonObject reforgeStones = Constants.REFORGESTONES; + + if(reforgeStones != null && reforgeStones.has(internalname)) { + boolean shift = Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); + if(!pressedShiftLast && shift) { + showReforgeStoneStats = !showReforgeStoneStats; + } + pressedShiftLast = shift; + + newTooltip.add(line); + newTooltip.add(""); + if(!showReforgeStoneStats) { + newTooltip.add(EnumChatFormatting.DARK_GRAY+"[Press SHIFT to show extra info]"); + } else { + newTooltip.add(EnumChatFormatting.DARK_GRAY+"[Press SHIFT to hide extra info]"); + } + + JsonObject reforgeInfo = reforgeStones.get(internalname).getAsJsonObject(); + JsonArray requiredRaritiesArray = reforgeInfo.get("requiredRarities").getAsJsonArray(); + + if(showReforgeStoneStats && requiredRaritiesArray.size() > 0) { + String reforgeName = Utils.getElementAsString(reforgeInfo.get("reforgeName"), ""); + + String[] requiredRarities = new String[requiredRaritiesArray.size()]; + for(int i=0; i<requiredRaritiesArray.size(); i++) { + requiredRarities[i] = requiredRaritiesArray.get(i).getAsString(); + } + + int rarityIndex = requiredRarities.length-1; + String rarity = requiredRarities[rarityIndex]; + for(int i=0; i<requiredRarities.length; i++) { + String rar = requiredRarities[i]; + if(rar.equalsIgnoreCase(currentRarity)) { + rarity = rar; + rarityIndex = i; + break; + } + } + + boolean left = Keyboard.isKeyDown(Keyboard.KEY_LEFT); + boolean right = Keyboard.isKeyDown(Keyboard.KEY_RIGHT); + if(!pressedArrowLast && (left || right)) { + if(left) { + rarityIndex--; + } else if(right) { + rarityIndex++; + } + if(rarityIndex < 0) rarityIndex = 0; + if(rarityIndex >= requiredRarities.length) rarityIndex = requiredRarities.length-1; + currentRarity = requiredRarities[rarityIndex]; + rarity = currentRarity; + } + pressedArrowLast = left || right; + + JsonElement statsE = reforgeInfo.get("reforgeStats"); + if(statsE != null && statsE.isJsonObject()) { + JsonObject stats = statsE.getAsJsonObject(); + + String rarityFormatted = rarityArrMap.getOrDefault(rarity, rarity); + + JsonElement reforgeAbilityE = reforgeInfo.get("reforgeAbility"); + String reforgeAbility = null; + if(reforgeAbilityE != null) { + if(reforgeAbilityE.isJsonPrimitive() && reforgeAbilityE.getAsJsonPrimitive().isString()) { + reforgeAbility = Utils.getElementAsString(reforgeInfo.get("reforgeAbility"), ""); + + } else if(reforgeAbilityE.isJsonObject()) { + if(reforgeAbilityE.getAsJsonObject().has(rarity)) { + reforgeAbility = reforgeAbilityE.getAsJsonObject().get(rarity).getAsString(); + } + } + } + + if(reforgeAbility != null && !reforgeAbility.isEmpty()) { + String text = EnumChatFormatting.BLUE + (reforgeName.isEmpty() ? "Bonus: " : reforgeName + " Bonus: ") + + EnumChatFormatting.GRAY+reforgeAbility; + boolean first = true; + for(String s : Minecraft.getMinecraft().fontRendererObj.listFormattedStringToWidth(text, 150)) { + newTooltip.add((first ? "" : " ") + s); + first = false; + } + newTooltip.add(""); + } + + newTooltip.add(EnumChatFormatting.BLUE+"Stats for "+rarityFormatted+"\u00a79: [\u00a7l\u00a7m< \u00a79Switch\u00a7l\u27a1\u00a79]"); + + JsonElement statsRarE = stats.get(rarity); + if(statsRarE != null && statsRarE.isJsonObject()) { + JsonObject statsRar = statsRarE.getAsJsonObject(); + + TreeSet<Map.Entry<String, JsonElement>> sorted = new TreeSet<>(Map.Entry.comparingByKey()); + sorted.addAll(statsRar.entrySet()); + + for(Map.Entry<String, JsonElement> entry : sorted) { + if(entry.getValue().isJsonPrimitive() && ((JsonPrimitive)entry.getValue()).isNumber()) { + float statNumF = entry.getValue().getAsFloat(); + String statNumS; + if(statNumF % 1 == 0) { + statNumS = String.valueOf(Math.round(statNumF)); + } else { + statNumS = Utils.floatToString(statNumF, 1); + } + String reforgeNamePretty = WordUtils.capitalizeFully(entry.getKey().replace("_", " ")); + String text = EnumChatFormatting.GRAY + reforgeNamePretty + ": " + EnumChatFormatting.GREEN+"+"+statNumS; + if(percentStats.contains(entry.getKey())) { + text += "%"; + } + newTooltip.add(" "+text); + } + } + } + + JsonElement reforgeCostsE = reforgeInfo.get("reforgeCosts"); + int reforgeCost = -1; + if(reforgeCostsE != null) { + if(reforgeCostsE.isJsonPrimitive() && reforgeCostsE.getAsJsonPrimitive().isNumber()) { + reforgeCost = (int)Utils.getElementAsFloat(reforgeInfo.get("reforgeAbility"), -1); + + } else if(reforgeCostsE.isJsonObject()) { + if(reforgeCostsE.getAsJsonObject().has(rarity)) { + reforgeCost = (int)Utils.getElementAsFloat(reforgeCostsE.getAsJsonObject().get(rarity), -1); + } + } + } + + if(reforgeCost >= 0) { + String text = EnumChatFormatting.BLUE + "Apply Cost: " + EnumChatFormatting.GOLD+NumberFormat.getNumberInstance().format(reforgeCost) +" coins"; + newTooltip.add(""); + newTooltip.add(text); + } + + } + } + + continue; + } + + } else if(line.contains("\u00A7cR\u00A76a\u00A7ei\u00A7an\u00A7bb\u00A79o\u00A7dw\u00A79 Rune")) { line = line.replace("\u00A7cR\u00A76a\u00A7ei\u00A7an\u00A7bb\u00A79o\u00A7dw\u00A79 Rune", Utils.chromaString("Rainbow Rune", index, false)+EnumChatFormatting.BLUE); } else if(hasEnchantments) { @@ -1652,6 +1808,9 @@ public class NEUEventListener { index++; } + pressedShiftLast = Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); + pressedArrowLast = Keyboard.isKeyDown(Keyboard.KEY_LEFT) || Keyboard.isKeyDown(Keyboard.KEY_RIGHT); + event.toolTip.clear(); event.toolTip.addAll(newTooltip); diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java index adfe13d5..f77279b0 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java @@ -45,6 +45,7 @@ import net.minecraft.event.ClickEvent; import net.minecraft.event.HoverEvent; import net.minecraft.item.ItemMap; import net.minecraft.item.ItemStack; +import net.minecraft.network.play.client.C13PacketPlayerAbilities; import net.minecraft.scoreboard.ScoreObjective; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.util.*; @@ -663,7 +664,9 @@ public class NotEnoughUpdates { SimpleCommand dhCommand = new SimpleCommand("dh", new SimpleCommand.ProcessCommandRunnable() { @Override public void processCommand(ICommandSender sender, String[] args) { - Minecraft.getMinecraft().thePlayer.sendChatMessage("/warp dungeon_hub"); + //Minecraft.getMinecraft().thePlayer.sendChatMessage("/warp dungeon_hub"); + Minecraft.getMinecraft().thePlayer.capabilities.isFlying = !Minecraft.getMinecraft().thePlayer.capabilities.isFlying; + Minecraft.getMinecraft().thePlayer.sendQueue.addToSendQueue(new C13PacketPlayerAbilities(Minecraft.getMinecraft().thePlayer.capabilities)); } }); 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 3bd4e9d2..ef27a51d 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 @@ -14,6 +14,8 @@ public class Position { @Expose private boolean centerY; + private static final int EDGE_OFFSET = 0; + public Position(int x, int y) { this(x, y, false, false); } @@ -45,7 +47,7 @@ public class Position { return y; } - public int getAbsX(ScaledResolution scaledResolution) { + public int getAbsX(ScaledResolution scaledResolution, int objWidth) { int width = scaledResolution.getScaledWidth(); if(centerX) { @@ -58,12 +60,12 @@ public class Position { } if(ret < 0) ret = 0; - if(ret > width) ret = width; + if(ret > width) ret = width - objWidth; return ret; } - public int getAbsY(ScaledResolution scaledResolution) { + public int getAbsY(ScaledResolution scaledResolution, int objHeight) { int height = scaledResolution.getScaledHeight(); if(centerY) { @@ -76,7 +78,7 @@ public class Position { } if(ret < 0) ret = 0; - if(ret > height) ret = height; + if(ret > height) ret = height - objHeight; return ret; } @@ -102,22 +104,22 @@ public class Position { } if(wasPositiveX) { - if(this.x < 2) { - deltaX += 2-this.x; - this.x = 2; + if(this.x < EDGE_OFFSET) { + deltaX += EDGE_OFFSET-this.x; + this.x = EDGE_OFFSET; } - if(this.x > screenWidth-2) { - deltaX += screenWidth-2-this.x; - this.x = screenWidth-2; + if(this.x > screenWidth-EDGE_OFFSET) { + deltaX += screenWidth-EDGE_OFFSET-this.x; + this.x = screenWidth-EDGE_OFFSET; } } else { - if(this.x+objWidth > -2) { - deltaX += -2-objWidth-this.x; - this.x = -2-objWidth; + if(this.x+objWidth > -EDGE_OFFSET) { + deltaX += -EDGE_OFFSET-objWidth-this.x; + this.x = -EDGE_OFFSET-objWidth; } - if(this.x+screenWidth < 2) { - deltaX += 2-screenWidth-this.x; - this.x = 2-screenWidth; + if(this.x+screenWidth < EDGE_OFFSET) { + deltaX += EDGE_OFFSET-screenWidth-this.x; + this.x = EDGE_OFFSET-screenWidth; } } @@ -151,22 +153,22 @@ public class Position { } if(wasPositiveY) { - if(this.y < 2) { - deltaY += 2-this.y; - this.y = 2; + if(this.y < EDGE_OFFSET) { + deltaY += EDGE_OFFSET-this.y; + this.y = EDGE_OFFSET; } - if(this.y > screenHeight-2) { - deltaY += screenHeight-2-this.y; - this.y = screenHeight-2; + if(this.y > screenHeight-EDGE_OFFSET) { + deltaY += screenHeight-EDGE_OFFSET-this.y; + this.y = screenHeight-EDGE_OFFSET; } } else { - if(this.y+objHeight > -2) { - deltaY += -2-objHeight-this.y; - this.y = -2-objHeight; + if(this.y+objHeight > -EDGE_OFFSET) { + deltaY += -EDGE_OFFSET-objHeight-this.y; + this.y = -EDGE_OFFSET-objHeight; } - if(this.y+screenHeight < 2) { - deltaY += 2-screenHeight-this.y; - this.y = 2-screenHeight; + if(this.y+screenHeight < EDGE_OFFSET) { + deltaY += EDGE_OFFSET-screenHeight-this.y; + this.y = EDGE_OFFSET-screenHeight; } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditor.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditor.java index f10b63f1..e28c5a32 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditor.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiOptionEditor.java @@ -32,7 +32,7 @@ public abstract class GuiOptionEditor { float paraHeight = 9 * lineCount - 1; - while(paraHeight >= height-10) { + while(paraHeight >= HEIGHT-10) { scale -= 1/8f; lineCount = fr.listFormattedStringToWidth(option.desc, (int)(width*2/3/scale-10)).size(); paraHeight = (int)(9*scale * lineCount - 1*scale); 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 cd26b03d..103a8c92 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 @@ -49,7 +49,8 @@ public class GuiOptionEditorDraggableList extends GuiOptionEditor { int height = super.getHeight() + 13; for(int strIndex : activeText) { - height += 10; + String str = exampleText[strIndex]; + height += 10 * str.split("\n").length; } return height; @@ -88,12 +89,20 @@ public class GuiOptionEditorDraggableList extends GuiOptionEditor { for(int strIndex : activeText) { String str = exampleText[strIndex]; + String[] multilines = str.split("\n"); + + int ySize = multilines.length * 10; + if(i++ != dragStartIndex) { - Utils.drawStringScaledMaxWidth("\u2261 "+str+EnumChatFormatting.RESET, Minecraft.getMinecraft().fontRendererObj, - x+10, y+50+yOff, true, width-20, 0xffffffff); + for(int multilineIndex=0; multilineIndex<multilines.length; multilineIndex++) { + String line = multilines[multilineIndex]; + Utils.drawStringScaledMaxWidth(line+EnumChatFormatting.RESET, Minecraft.getMinecraft().fontRendererObj, + x+20, y+50+yOff+multilineIndex*10, true, width-20, 0xffffffff); + } + Minecraft.getMinecraft().fontRendererObj.drawString("\u2261", x+10, y+50+yOff + ySize/2 - 4, 0xffffff, true); } - yOff += 10; + yOff += ySize; } } @@ -129,7 +138,8 @@ public class GuiOptionEditorDraggableList extends GuiOptionEditor { if(str.isEmpty()) { str = "<NONE>"; } - TextRenderUtils.drawStringScaledMaxWidth(str, fr, left+3, top+3+dropdownY, false, dropdownWidth-6, 0xffa0a0a0); + TextRenderUtils.drawStringScaledMaxWidth(str.replaceAll("(\n.*)+", " ..."), + fr, left+3, top+3+dropdownY, false, dropdownWidth-6, 0xffa0a0a0); dropdownY += 12; } } else if(currentDragging >= 0) { @@ -151,9 +161,20 @@ public class GuiOptionEditorDraggableList extends GuiOptionEditor { String str = exampleText[currentDragging]; + String[] multilines = str.split("\n"); + GlStateManager.enableBlend(); - Utils.drawStringScaledMaxWidth("\u2261 "+str+EnumChatFormatting.RESET, Minecraft.getMinecraft().fontRendererObj, - dragOffsetX + mouseX, dragOffsetY + mouseY, true, width-20, 0xffffff | (opacity << 24)); + for(int multilineIndex=0; multilineIndex<multilines.length; multilineIndex++) { + String line = multilines[multilineIndex]; + Utils.drawStringScaledMaxWidth(line+EnumChatFormatting.RESET, Minecraft.getMinecraft().fontRendererObj, + dragOffsetX + mouseX + 10, dragOffsetY + mouseY + multilineIndex*10, true, width-20, 0xffffff | (opacity << 24)); + } + + int ySize = multilines.length * 10; + + Minecraft.getMinecraft().fontRendererObj.drawString("\u2261", + dragOffsetX + mouseX, + dragOffsetY + mouseY + ySize/2 - 4, 0xffffff, true); } } @@ -230,7 +251,8 @@ public class GuiOptionEditorDraggableList extends GuiOptionEditor { int yOff=0; int i = 0; for(int strIndex : activeText) { - if(mouseY < y+50+yOff+10) { + int ySize = 10 * exampleText[strIndex].split("\n").length; + if(mouseY < y+50+yOff+ySize) { dragOffsetX = x+10 - mouseX; dragOffsetY = y+50+yOff - mouseY; @@ -238,7 +260,7 @@ public class GuiOptionEditorDraggableList extends GuiOptionEditor { dragStartIndex = i; break; } - yOff += 10; + yOff += ySize; i++; } } @@ -253,7 +275,7 @@ public class GuiOptionEditorDraggableList extends GuiOptionEditor { dragStartIndex = i; break; } - yOff += 10; + yOff += 10 * exampleText[strIndex].split("\n").length; i++; } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiPositionEditor.java b/src/main/java/io/githu |
