aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/cowtipper/cowlection/util
diff options
context:
space:
mode:
authorCow <cow@volloeko.de>2021-06-30 15:00:51 +0200
committerCow <cow@volloeko.de>2021-06-30 15:00:51 +0200
commit8f365a40219f468b094c22dc9736ca8eacbd6fcc (patch)
treee1c5efa39a59b8d4598dd4e532583298e717f357 /src/main/java/de/cowtipper/cowlection/util
parentb2e1c53efabf3fc1d46f36feb674b615425d0b54 (diff)
downloadCowlection-8f365a40219f468b094c22dc9736ca8eacbd6fcc.tar.gz
Cowlection-8f365a40219f468b094c22dc9736ca8eacbd6fcc.tar.bz2
Cowlection-8f365a40219f468b094c22dc9736ca8eacbd6fcc.zip
Added keybindings to copy features
- /moo waila - copy single item - new toggle: copy output to clipboard or save to file
Diffstat (limited to 'src/main/java/de/cowtipper/cowlection/util')
-rw-r--r--src/main/java/de/cowtipper/cowlection/util/ImageUtils.java23
-rw-r--r--src/main/java/de/cowtipper/cowlection/util/Utils.java61
2 files changed, 63 insertions, 21 deletions
diff --git a/src/main/java/de/cowtipper/cowlection/util/ImageUtils.java b/src/main/java/de/cowtipper/cowlection/util/ImageUtils.java
index 1d6820f..f96b439 100644
--- a/src/main/java/de/cowtipper/cowlection/util/ImageUtils.java
+++ b/src/main/java/de/cowtipper/cowlection/util/ImageUtils.java
@@ -13,8 +13,6 @@ import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
public class ImageUtils {
public static int getTierFromTexture(String minionSkinId) {
@@ -131,12 +129,10 @@ public class ImageUtils {
}
}
try {
- File cowlectionImagePath = new File(Minecraft.getMinecraft().mcDataDir, "cowlection_images");
- if (!cowlectionImagePath.exists() && !cowlectionImagePath.mkdirs()) {
- // dir didn't exist and couldn't be created
+ File imageFile = Utils.getTimestampedFileForDirectory("map", "png");
+ if(imageFile == null) {
return null;
}
- File imageFile = getTimestampedPngFileForDirectory(cowlectionImagePath, "map");
ImageIO.write(image, "png", imageFile);
return imageFile.getCanonicalFile();
} catch (IOException e) {
@@ -179,19 +175,4 @@ public class ImageUtils {
return new Color((shadeMul * c.getRed()) / 255, (shadeMul * c.getGreen()) / 255, (shadeMul * c.getBlue()) / 255, c.getAlpha());
}
- /**
- * Based on ScreenShotHelper#getTimestampedPNGFileForDirectory
- */
- private static File getTimestampedPngFileForDirectory(File directory, String prefix) {
- String currentDateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd_HH.mm.ss"));
- int i = 1;
-
- while (true) {
- File timestampedFile = new File(directory, prefix + "_" + currentDateTime + (i == 1 ? "" : "_" + i) + ".png");
- if (!timestampedFile.exists()) {
- return timestampedFile;
- }
- ++i;
- }
- }
}
diff --git a/src/main/java/de/cowtipper/cowlection/util/Utils.java b/src/main/java/de/cowtipper/cowlection/util/Utils.java
index 4b5c73c..dccf911 100644
--- a/src/main/java/de/cowtipper/cowlection/util/Utils.java
+++ b/src/main/java/de/cowtipper/cowlection/util/Utils.java
@@ -1,6 +1,11 @@
package de.cowtipper.cowlection.util;
import com.mojang.realmsclient.util.Pair;
+import de.cowtipper.cowlection.Cowlection;
+import de.cowtipper.cowlection.config.MooConfig;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
import org.apache.commons.lang3.StringUtils;
@@ -10,9 +15,14 @@ import org.apache.commons.lang3.time.DurationFormatUtils;
import java.io.File;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
@@ -365,4 +375,55 @@ public final class Utils {
hit = sb.indexOf(search);
}
}
+
+ public static void copyToClipboardOrSaveAsFile(String what, String fileName, NBTBase data, boolean sortData) {
+ String nbt = GsonUtils.toJson(data, sortData);
+ if (MooConfig.copyWailaAndInventoryDataToClipboard()) {
+ GuiScreen.setClipboardString(nbt);
+ Cowlection.getInstance().getChatHelper().sendMessage(EnumChatFormatting.GREEN, "Copied " + what + " to clipboard.");
+ } else {
+ try {
+ File target = getTimestampedFileForDirectory(fileName, "json");
+ if (target == null) {
+ return;
+ }
+ Files.write(target.toPath(), nbt.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE_NEW);
+
+ File targetNormalized = target.getCanonicalFile();
+
+ Cowlection.getInstance().getChatHelper().sendMessage(new MooChatComponent("Saved " + what).green()
+ .appendSibling(new MooChatComponent(" [open file]").gold().setOpenFile(targetNormalized))
+ .appendSibling(new MooChatComponent(" [open folder]").darkAqua().setOpenFile(targetNormalized.getParentFile())));
+ } catch (IOException | UnsupportedOperationException e) {
+ e.printStackTrace();
+ Cowlection.getInstance().getChatHelper().sendMessage(EnumChatFormatting.RED, "Couldn't save " + what + ": " + e.toString());
+ }
+ }
+ }
+
+ /**
+ * Based on ScreenShotHelper#getTimestampedPNGFileForDirectory
+ */
+ static File getTimestampedFileForDirectory(String suffix, String fileType) {
+ File cowlectionOutPath = new File(Minecraft.getMinecraft().mcDataDir, Cowlection.MODID.toLowerCase() + "_out");
+ if (!cowlectionOutPath.exists() && !cowlectionOutPath.mkdirs()) {
+ // dir didn't exist and couldn't be created
+ return null;
+ }
+
+ String currentDateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd_HH.mm.ss"));
+ String sanitizedSuffix = StringUtils.replaceEach(EnumChatFormatting.getTextWithoutFormattingCodes(suffix).trim(),
+ // replacement characters from https://stackoverflow.com/a/61448658
+ new String[]{"\\", "/", ":", "*", "?", "\"", "<", ">", "|"},
+ new String[]{"⧵", "∕", "∶", "∗", "?", "“", "‹", "›", "∣"});
+ String baseName = currentDateTime + "_" + sanitizedSuffix;
+ int i = 1;
+ while (true) {
+ File timestampedFile = new File(cowlectionOutPath, baseName + (i == 1 ? "" : "_" + i) + "." + fileType);
+ if (!timestampedFile.exists()) {
+ return timestampedFile;
+ }
+ ++i;
+ }
+ }
}