Skip to content

Commit

Permalink
feat: copy screenshot image to clipboard
Browse files Browse the repository at this point in the history
  • Loading branch information
HamaIndustries committed Sep 7, 2024
1 parent b1ce4b5 commit 96cc791
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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<Text> messageReceiver, CallbackInfo ci) throws IOException {
if (!screenshotFile.getAbsolutePath().contains("/panorama/")) {
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(new ImageTransferable(ImageIO.read(screenshotFile)), null);
}
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
}

0 comments on commit 96cc791

Please sign in to comment.