diff --git a/src/client/java/dev/spiritstudios/snapper/mixin/ScreenshotRecorderMixin.java b/src/client/java/dev/spiritstudios/snapper/mixin/ScreenshotRecorderMixin.java index c6413a3..252ac83 100644 --- a/src/client/java/dev/spiritstudios/snapper/mixin/ScreenshotRecorderMixin.java +++ b/src/client/java/dev/spiritstudios/snapper/mixin/ScreenshotRecorderMixin.java @@ -1,15 +1,26 @@ package dev.spiritstudios.snapper.mixin; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import dev.spiritstudios.snapper.mixinsupport.ImageTransferable; +import net.minecraft.client.gl.Framebuffer; import net.minecraft.client.texture.NativeImage; import net.minecraft.client.util.ScreenshotRecorder; import net.minecraft.text.Text; +import net.minecraft.util.Util; +import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.datatransfer.Clipboard; +//import java.awt.datatransfer.Tra +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; import java.io.File; import java.io.IOException; import java.util.function.Consumer; @@ -28,4 +39,15 @@ private static void lookBeforeYouLeap(NativeImage nativeImage, File screenshotFi screenshotFile.getParentFile().mkdirs(); screenshotFile.createNewFile(); } + + @Inject( + method = "method_1661", + at = @At(value = "INVOKE", target = "Lnet/minecraft/text/Text;literal(Ljava/lang/String;)Lnet/minecraft/text/MutableText;", shift = At.Shift.AFTER) + ) + private static void saveWrittenFileToClipboard(NativeImage nativeImage, File screenshotFile, Consumer messageReceiver, CallbackInfo ci) throws IOException { + if (!screenshotFile.getAbsolutePath().contains("/panorama/")) { + Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + clipboard.setContents(new ImageTransferable(ImageIO.read(screenshotFile)), null); + } + } } diff --git a/src/client/java/dev/spiritstudios/snapper/mixinsupport/ImageTransferable.java b/src/client/java/dev/spiritstudios/snapper/mixinsupport/ImageTransferable.java new file mode 100644 index 0000000..dfb9d02 --- /dev/null +++ b/src/client/java/dev/spiritstudios/snapper/mixinsupport/ImageTransferable.java @@ -0,0 +1,36 @@ +package dev.spiritstudios.snapper.mixinsupport; + +import org.jetbrains.annotations.NotNull; + +import java.awt.*; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.io.IOException; + +public class ImageTransferable implements Transferable { + private static final DataFlavor[] flavors = {DataFlavor.imageFlavor}; + + private final Image image; + + public ImageTransferable(Image im) { + this.image = im; + } + + @Override + public DataFlavor[] getTransferDataFlavors() { + return flavors; + } + + @Override + public boolean isDataFlavorSupported(DataFlavor flavor) { + return flavor.equals(DataFlavor.imageFlavor); + } + + @NotNull + @Override + public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { + if (!isDataFlavorSupported(flavor)) throw new UnsupportedFlavorException(flavor); + return image; + } +} \ No newline at end of file