From 8f365a40219f468b094c22dc9736ca8eacbd6fcc Mon Sep 17 00:00:00 2001 From: Cow Date: Wed, 30 Jun 2021 15:00:51 +0200 Subject: Added keybindings to copy features - /moo waila - copy single item - new toggle: copy output to clipboard or save to file --- .../de/cowtipper/cowlection/util/ImageUtils.java | 23 +------- .../java/de/cowtipper/cowlection/util/Utils.java | 61 ++++++++++++++++++++++ 2 files changed, 63 insertions(+), 21 deletions(-) (limited to 'src/main/java/de/cowtipper/cowlection/util') 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; + } + } } -- cgit