Skip to content

Commit

Permalink
feat: Copy screenshot when taken (and config!)
Browse files Browse the repository at this point in the history
  • Loading branch information
worldwidepixel committed Sep 16, 2024
1 parent 8b8a9c5 commit 19d2e8b
Show file tree
Hide file tree
Showing 8 changed files with 40 additions and 6 deletions.
6 changes: 3 additions & 3 deletions src/client/java/dev/spiritstudios/snapper/Snapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
import dev.spiritstudios.snapper.gui.ScreenshotScreen;
import dev.spiritstudios.snapper.gui.ScreenshotViewerScreen;
import dev.spiritstudios.snapper.util.*;
import dev.spiritstudios.specter.api.ModMenuHelper;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.text.Text;
import net.minecraft.util.Util;
Expand All @@ -16,8 +16,6 @@
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.*;

public class Snapper implements ClientModInitializer {
Expand Down Expand Up @@ -49,6 +47,8 @@ public class Snapper implements ClientModInitializer {

@Override
public void onInitializeClient() {
ModMenuHelper.addConfig(Snapper.MODID, SnapperConfig.INSTANCE.getId());

ClientTickEvents.END_CLIENT_TICK.register(client -> {
while (SCREENSHOT_MENU_KEY.wasPressed()) client.setScreen(new ScreenshotScreen(null));
while (PANORAMA_KEY.wasPressed()) {
Expand Down
15 changes: 15 additions & 0 deletions src/client/java/dev/spiritstudios/snapper/SnapperConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package dev.spiritstudios.snapper;

import dev.spiritstudios.specter.api.config.Config;
import net.minecraft.util.Identifier;

public class SnapperConfig extends Config<SnapperConfig> {
public static final SnapperConfig INSTANCE = create(SnapperConfig.class);

@Override
public Identifier getId() { return Identifier.of(Snapper.MODID, "snapper"); }

public Value<Boolean> copyTakenScreenshot = booleanValue(false)
.comment("Whether to copy screenshots to clipboard when taken.")
.build();
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package dev.spiritstudios.snapper.gui;

import dev.spiritstudios.snapper.Snapper;
import dev.spiritstudios.snapper.SnapperConfig;
import dev.spiritstudios.snapper.gui.widget.ScreenshotListWidget;
import dev.spiritstudios.snapper.util.ScreenshotActions;
import dev.spiritstudios.specter.impl.config.gui.ConfigScreen;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
Expand All @@ -22,6 +24,7 @@

public class ScreenshotScreen extends Screen {
private static final Identifier PANORAMA_BUTTON_ICON = Identifier.of(MODID, "screenshots/panorama");
private static final Identifier SETTINGS_ICON = Identifier.of(MODID, "screenshots/settings");
private final Screen parent;
ScreenshotListWidget screenshotList;
private ButtonWidget deleteButton;
Expand Down Expand Up @@ -116,6 +119,15 @@ protected void init() {
verticalButtonLayout.refreshPositions();
SimplePositioningWidget.setPos(verticalButtonLayout, 0, this.height - 66, this.width, 64);

TextIconButtonWidget settings_button = addDrawableChild(
TextIconButtonWidget.builder(
Text.translatable("config.snapper.snapper.title"),
button -> this.client.setScreen(new ConfigScreen(SnapperConfig.INSTANCE, this)),
true
).width(20).texture(SETTINGS_ICON, 15, 15).build()
);
settings_button.setPosition(width / 2 - 178, height - 32);

TextIconButtonWidget panorama_button = addDrawableChild(
TextIconButtonWidget.builder(
Text.translatable("button.snapper.screenshots"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;

import static dev.spiritstudios.snapper.Snapper.MODID;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.spiritstudios.snapper.mixin;

import dev.spiritstudios.snapper.Snapper;
import dev.spiritstudios.snapper.SnapperConfig;
import net.minecraft.client.Keyboard;
import net.minecraft.client.MinecraftClient;
import net.minecraft.text.MutableText;
Expand All @@ -21,6 +22,8 @@ public class KeyboardMixin {
@Overwrite
private void method_1464(Text text) {
MutableText message = Text.translatable("text.snapper.screenshot_instructions", text, Snapper.RECENT_SCREENSHOT_KEY.getBoundKeyLocalizedText());
MutableText message_copy = Text.translatable("text.snapper.screenshot_instructions_copy", text, Snapper.RECENT_SCREENSHOT_KEY.getBoundKeyLocalizedText());
if (SnapperConfig.INSTANCE.copyTakenScreenshot.get()) { this.client.inGameHud.setOverlayMessage(message_copy, false); return;}
this.client.inGameHud.setOverlayMessage(message, false);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package dev.spiritstudios.snapper.mixin;

import dev.spiritstudios.snapper.Snapper;
import dev.spiritstudios.snapper.SnapperConfig;
import dev.spiritstudios.snapper.mixinsupport.ImageTransferable;
import net.minecraft.client.texture.NativeImage;
import net.minecraft.client.util.ScreenshotRecorder;
Expand Down Expand Up @@ -36,7 +38,7 @@ private static void lookBeforeYouLeap(NativeImage nativeImage, File screenshotFi
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/")) {
if (!screenshotFile.getAbsolutePath().contains("/panorama/") && SnapperConfig.INSTANCE.copyTakenScreenshot.get()) {
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(new ImageTransferable(ImageIO.read(screenshotFile)), null);
}
Expand Down
5 changes: 4 additions & 1 deletion src/client/resources/assets/snapper/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@
"text.snapper.rename_invalid": "New name for screenshot invalid",
"text.snapper.rename_invalid_png": "Name must end with '.png'",
"text.snapper.screenshot_instructions": "%s. View by pressing %s",
"text.snapper.screenshot_instructions_copy": "%s. Automagically copied to clipboard.",
"text.snapper.screenshot_failure_open": "Take a screenshot in order to view it",
"panorama.snapper.failure": "Couldn't save panorama: %s",
"panorama.snapper.success": "Saved screenshot as %s"
"panorama.snapper.success": "Saved screenshot as %s",
"config.snapper.snapper.title": "Snapper Settings",
"config.snapper.snapper.copyTakenScreenshot": "Copy screenshot to clipboard when taken"
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 19d2e8b

Please sign in to comment.