aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/cowtipper/cowlection/util
diff options
context:
space:
mode:
authorCow <cow@volloeko.de>2020-09-24 18:41:22 +0200
committerCow <cow@volloeko.de>2020-09-24 18:41:22 +0200
commitf6d584431f878b931bf9f745a02b43dd8035cb44 (patch)
tree06607d9f47346cc77ce083dfadefa1fb45b5e3c6 /src/main/java/de/cowtipper/cowlection/util
parent7d4f2b900254d961b847f573237e3e6f40bff8e9 (diff)
downloadCowlection-f6d584431f878b931bf9f745a02b43dd8035cb44.tar.gz
Cowlection-f6d584431f878b931bf9f745a02b43dd8035cb44.tar.bz2
Cowlection-f6d584431f878b931bf9f745a02b43dd8035cb44.zip
Config (gui) rework #2
somehow missed these files ¯\_(ツ)_/¯
Diffstat (limited to 'src/main/java/de/cowtipper/cowlection/util')
-rw-r--r--src/main/java/de/cowtipper/cowlection/util/ApiUtils.java13
-rw-r--r--src/main/java/de/cowtipper/cowlection/util/GuiHelper.java198
-rw-r--r--src/main/java/de/cowtipper/cowlection/util/Utils.java5
3 files changed, 208 insertions, 8 deletions
diff --git a/src/main/java/de/cowtipper/cowlection/util/ApiUtils.java b/src/main/java/de/cowtipper/cowlection/util/ApiUtils.java
index 442c940..03e4a14 100644
--- a/src/main/java/de/cowtipper/cowlection/util/ApiUtils.java
+++ b/src/main/java/de/cowtipper/cowlection/util/ApiUtils.java
@@ -6,11 +6,8 @@ import com.google.gson.JsonSyntaxException;
import com.mojang.util.UUIDTypeAdapter;
import de.cowtipper.cowlection.Cowlection;
import de.cowtipper.cowlection.command.exception.ThrowingConsumer;
-import de.cowtipper.cowlection.config.MooConfig;
-import de.cowtipper.cowlection.data.Friend;
-import de.cowtipper.cowlection.data.HyPlayerData;
-import de.cowtipper.cowlection.data.HySkyBlockStats;
-import de.cowtipper.cowlection.data.HyStalkingData;
+import de.cowtipper.cowlection.config.CredentialStorage;
+import de.cowtipper.cowlection.data.*;
import de.cowtipper.cowlection.event.ApiErrorEvent;
import net.minecraftforge.common.MinecraftForge;
import org.apache.http.HttpStatus;
@@ -79,7 +76,7 @@ public class ApiUtils {
}
private static HyStalkingData stalkPlayer(Friend friend) {
- try (BufferedReader reader = makeApiCall(String.format(ONLINE_STATUS_URL, MooConfig.moo, UUIDTypeAdapter.fromUUID(friend.getUuid())))) {
+ try (BufferedReader reader = makeApiCall(String.format(ONLINE_STATUS_URL, CredentialStorage.moo, UUIDTypeAdapter.fromUUID(friend.getUuid())))) {
if (reader != null) {
return GsonUtils.fromJson(reader, HyStalkingData.class);
}
@@ -94,7 +91,7 @@ public class ApiUtils {
}
private static HySkyBlockStats stalkSkyBlockStats(Friend friend) {
- try (BufferedReader reader = makeApiCall(String.format(SKYBLOCK_STATS_URL, MooConfig.moo, UUIDTypeAdapter.fromUUID(friend.getUuid())))) {
+ try (BufferedReader reader = makeApiCall(String.format(SKYBLOCK_STATS_URL, CredentialStorage.moo, UUIDTypeAdapter.fromUUID(friend.getUuid())))) {
if (reader != null) {
return GsonUtils.fromJson(reader, HySkyBlockStats.class);
}
@@ -109,7 +106,7 @@ public class ApiUtils {
}
private static HyPlayerData stalkHyPlayer(Friend stalkedPlayer) {
- try (BufferedReader reader = makeApiCall(String.format(PLAYER_URL, MooConfig.moo, UUIDTypeAdapter.fromUUID(stalkedPlayer.getUuid())))) {
+ try (BufferedReader reader = makeApiCall(String.format(PLAYER_URL, CredentialStorage.moo, UUIDTypeAdapter.fromUUID(stalkedPlayer.getUuid())))) {
if (reader != null) {
return GsonUtils.fromJson(reader, HyPlayerData.class);
}
diff --git a/src/main/java/de/cowtipper/cowlection/util/GuiHelper.java b/src/main/java/de/cowtipper/cowlection/util/GuiHelper.java
new file mode 100644
index 0000000..a80b1ba
--- /dev/null
+++ b/src/main/java/de/cowtipper/cowlection/util/GuiHelper.java
@@ -0,0 +1,198 @@
+package de.cowtipper.cowlection.util;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.RenderHelper;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraftforge.common.ForgeVersion;
+import net.minecraftforge.fml.client.config.GuiUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public final class GuiHelper extends GuiScreen {
+ private static GuiHelper instance;
+
+ private GuiHelper() {
+ this.mc = Minecraft.getMinecraft();
+ this.fontRendererObj = mc.fontRendererObj;
+ this.itemRender = mc.getRenderItem();
+ }
+
+ private static GuiHelper getInstance() {
+ if (instance == null) {
+ instance = new GuiHelper();
+ }
+ return instance;
+ }
+
+ /**
+ * Draw a 1 pixel wide horizontal line. Args: startX, endX, y, color
+ */
+ public static void drawThinHorizontalLine(int startX, int endX, int y, int color) {
+ if (endX < startX) {
+ int i = startX;
+ startX = endX;
+ endX = i;
+ }
+ GlStateManager.pushMatrix();
+ int scaleDivisor = 2;
+ GlStateManager.scale(1f / scaleDivisor, 1f / scaleDivisor, 0);
+ Gui.drawRect(startX * scaleDivisor, y * scaleDivisor, (endX + 1) * scaleDivisor, y * scaleDivisor + 1, color);
+ GlStateManager.popMatrix();
+ }
+
+ /**
+ * Draws a sprite from assets/textures/gui/container/stats_icons.png
+ * <p>
+ * from: GuiStats#drawSprite
+ */
+ public static void drawSprite(int x, int y, int width, int height, float zLevel) {
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ Minecraft.getMinecraft().getTextureManager().bindTexture(statIcons);
+ float magicNumber = 0.0078125F;
+ int iconSize = 18;
+ Tessellator tessellator = Tessellator.getInstance();
+ WorldRenderer worldrenderer = tessellator.getWorldRenderer();
+ worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
+ worldrenderer.pos(x, y + iconSize, zLevel).tex((float) (width) * magicNumber, (float) (height + iconSize) * magicNumber).endVertex();
+ worldrenderer.pos(x + iconSize, y + iconSize, zLevel).tex((float) (width + iconSize) * magicNumber, (float) (height + iconSize) * magicNumber).endVertex();
+ worldrenderer.pos(x + iconSize, y, zLevel).tex((float) (width + iconSize) * magicNumber, (float) (height) * magicNumber).endVertex();
+ worldrenderer.pos(x, y, zLevel).tex((float) (width) * magicNumber, (float) (height) * magicNumber).endVertex();
+ tessellator.draw();
+ }
+
+ public static void drawHoveringText(List<String> textLines, int mouseX, int mouseY, int screenWidth, int screenHeight, int maxTextWidth) {
+ if (ForgeVersion.getBuildVersion() < 1808) {
+ // we're running a forge version from before 24 March 2016 (http://files.minecraftforge.net/maven/net/minecraftforge/forge/index_1.8.9.html for reference)
+ // using mc built-in method
+ getInstance().width = screenWidth;
+ getInstance().height = screenHeight;
+ drawHoveringText(textLines, mouseX, mouseY, screenWidth, screenHeight, maxTextWidth, getInstance().fontRendererObj);
+ } else {
+ // we're on a newer forge version, so we can use the improved tooltip rendering directly added in 1.8.9-11.15.1.1808 (released 03/24/16 09:25 PM) in this pull request: https://github.com/MinecraftForge/MinecraftForge/pull/2649
+ GuiUtils.drawHoveringText(textLines, mouseX, mouseY, screenWidth, screenHeight, maxTextWidth, getInstance().fontRendererObj);
+ }
+ }
+
+ /**
+ * Fixed method for forge versions older than 1.8.9-11.15.1.1808
+ *
+ * @see GuiUtils#drawHoveringText
+ */
+ public static void drawHoveringText(List<String> textLines, final int mouseX, final int mouseY, final int screenWidth, final int screenHeight, final int maxTextWidth, FontRenderer font) {
+ if (!textLines.isEmpty()) {
+ GlStateManager.disableRescaleNormal();
+ RenderHelper.disableStandardItemLighting();
+ GlStateManager.disableLighting();
+ GlStateManager.disableDepth();
+ int tooltipTextWidth = 0;
+
+ for (String textLine : textLines) {
+ int textLineWidth = font.getStringWidth(textLine);
+
+ if (textLineWidth > tooltipTextWidth) {
+ tooltipTextWidth = textLineWidth;
+ }
+ }
+
+ boolean needsWrap = false;
+
+ int titleLinesCount = 1;
+ int tooltipX = mouseX + 12;
+ if (tooltipX + tooltipTextWidth + 4 > screenWidth) {
+ tooltipX = mouseX - 16 - tooltipTextWidth;
+ if (tooltipX < 4) { // if the tooltip doesn't fit on the screen
+ if (mouseX > screenWidth / 2) {
+ tooltipTextWidth = mouseX - 12 - 8;
+ } else {
+ tooltipTextWidth = screenWidth - 16 - mouseX;
+ }
+ needsWrap = true;
+ }
+ }
+
+ if (maxTextWidth > 0 && tooltipTextWidth > maxTextWidth) {
+ tooltipTextWidth = maxTextWidth;
+ needsWrap = true;
+ }
+
+ if (needsWrap) {
+ int wrappedTooltipWidth = 0;
+ List<String> wrappedTextLines = new ArrayList<>();
+ for (int i = 0; i < textLines.size(); i++) {
+ String textLine = textLines.get(i);
+ List<String> wrappedLine = font.listFormattedStringToWidth(textLine, tooltipTextWidth);
+ if (i == 0) {
+ titleLinesCount = wrappedLine.size();
+ }
+
+ for (String line : wrappedLine) {
+ int lineWidth = font.getStringWidth(line);
+ if (lineWidth > wrappedTooltipWidth) {
+ wrappedTooltipWidth = lineWidth;
+ }
+ wrappedTextLines.add(line);
+ }
+ }
+ tooltipTextWidth = wrappedTooltipWidth;
+ textLines = wrappedTextLines;
+
+ if (mouseX > screenWidth / 2) {
+ tooltipX = mouseX - 16 - tooltipTextWidth;
+ } else {
+ tooltipX = mouseX + 12;
+ }
+ }
+
+ int tooltipY = mouseY - 12;
+ int tooltipHeight = 8;
+
+ if (textLines.size() > 1) {
+ tooltipHeight += (textLines.size() - 1) * 10;
+ if (textLines.size() > titleLinesCount) {
+ tooltipHeight += 2; // gap between title lines and next lines
+ }
+ }
+
+ if (tooltipY + tooltipHeight + 6 > screenHeight) {
+ tooltipY = screenHeight - tooltipHeight - 6;
+ }
+
+ final int zLevel = 300;
+ final int backgroundColor = 0xF0100010;
+ Gui.drawRect(tooltipX - 3, tooltipY - 4, tooltipX + tooltipTextWidth + 3, tooltipY - 3, backgroundColor);
+ Gui.drawRect(tooltipX - 3, tooltipY + tooltipHeight + 3, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 4, backgroundColor);
+ Gui.drawRect(tooltipX - 3, tooltipY - 3, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3, backgroundColor);
+ Gui.drawRect(tooltipX - 4, tooltipY - 3, tooltipX - 3, tooltipY + tooltipHeight + 3, backgroundColor);
+ Gui.drawRect(tooltipX + tooltipTextWidth + 3, tooltipY - 3, tooltipX + tooltipTextWidth + 4, tooltipY + tooltipHeight + 3, backgroundColor);
+ final int borderColorStart = 0x505000FF;
+ final int borderColorEnd = (borderColorStart & 0xFEFEFE) >> 1 | borderColorStart & 0xFF000000;
+ Gui.drawRect(tooltipX - 3, tooltipY - 3 + 1, tooltipX - 3 + 1, tooltipY + tooltipHeight + 3 - 1, borderColorStart);
+ Gui.drawRect(tooltipX + tooltipTextWidth + 2, tooltipY - 3 + 1, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3 - 1, borderColorStart);
+ Gui.drawRect(tooltipX - 3, tooltipY - 3, tooltipX + tooltipTextWidth + 3, tooltipY - 3 + 1, borderColorStart);
+ Gui.drawRect(tooltipX - 3, tooltipY + tooltipHeight + 2, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3, borderColorEnd);
+
+ for (int lineNumber = 0; lineNumber < textLines.size(); ++lineNumber) {
+ String line = textLines.get(lineNumber);
+ font.drawStringWithShadow(line, (float) tooltipX, (float) tooltipY, -1);
+
+ if (lineNumber + 1 == titleLinesCount) {
+ tooltipY += 2;
+ }
+
+ tooltipY += 10;
+ }
+
+ GlStateManager.enableLighting();
+ GlStateManager.enableDepth();
+ RenderHelper.enableStandardItemLighting();
+ GlStateManager.enableRescaleNormal();
+ }
+ }
+}
diff --git a/src/main/java/de/cowtipper/cowlection/util/Utils.java b/src/main/java/de/cowtipper/cowlection/util/Utils.java
index 24e6b7b..3cf77b5 100644
--- a/src/main/java/de/cowtipper/cowlection/util/Utils.java
+++ b/src/main/java/de/cowtipper/cowlection/util/Utils.java
@@ -250,4 +250,9 @@ public final class Utils {
}
return tierColor;
}
+
+
+ public static String booleanToSymbol(boolean value) {
+ return value ? EnumChatFormatting.GREEN + "✔" : EnumChatFormatting.RED + "✘";
+ }
}