diff --git a/README.md b/README.md index c2e0dd78..1c6ee8d3 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ All changes are toggleable via config files. ### **🔧 TWEAKS** * **Accurate Potion Duration:** Always displays the actual potion duration instead of `**:**` +* **Advancement Screenshot:** Silently takes a screenshot every time an advancement is achieved * **Advancement GUI** * Allows increasing the Advancement GUI to scale with the screen size * Moves the page buttons to in-line with the rest of the GUI instead of hovering significantly diff --git a/src/main/java/mod/acgaming/universaltweaks/config/UTConfigTweaks.java b/src/main/java/mod/acgaming/universaltweaks/config/UTConfigTweaks.java index 4d467ac4..94e65968 100644 --- a/src/main/java/mod/acgaming/universaltweaks/config/UTConfigTweaks.java +++ b/src/main/java/mod/acgaming/universaltweaks/config/UTConfigTweaks.java @@ -1471,6 +1471,10 @@ public static class MiscCategory @Config.Comment("Always displays the actual potion duration instead of `**:**`") public boolean utPotionDurationToggle = true; + @Config.Name("Advancement Screenshot") + @Config.Comment("Silently takes a screenshot every time an advancement is achieved") + public boolean utAdvancementScreenshotToggle = false; + @Config.RequiresMcRestart @Config.Name("Always Return to Main Menu") @Config.Comment("Always returns the player to the main menu when quitting the game") diff --git a/src/main/java/mod/acgaming/universaltweaks/tweaks/misc/advancements/screenshot/UTAdvancementScreenshot.java b/src/main/java/mod/acgaming/universaltweaks/tweaks/misc/advancements/screenshot/UTAdvancementScreenshot.java new file mode 100644 index 00000000..3d529dfa --- /dev/null +++ b/src/main/java/mod/acgaming/universaltweaks/tweaks/misc/advancements/screenshot/UTAdvancementScreenshot.java @@ -0,0 +1,32 @@ +package mod.acgaming.universaltweaks.tweaks.misc.advancements.screenshot; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraftforge.event.entity.player.AdvancementEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; + +import mod.acgaming.universaltweaks.UniversalTweaks; +import mod.acgaming.universaltweaks.config.UTConfigGeneral; +import mod.acgaming.universaltweaks.config.UTConfigTweaks; +import mod.acgaming.universaltweaks.util.UTPacketHandler; + +@Mod.EventBusSubscriber(modid = UniversalTweaks.MODID, value = Side.CLIENT) +public class UTAdvancementScreenshot +{ + private static long lastScreenshotTick = 0; + + @SubscribeEvent + public static void utAdvancementScreenshot(AdvancementEvent event) + { + if (!UTConfigTweaks.MISC.utAdvancementScreenshotToggle) return; + if (UTConfigGeneral.DEBUG.utDebugToggle) UniversalTweaks.LOGGER.debug("UTAdvancementScreenshot ::: Advancement event"); + long currentTick = Minecraft.getMinecraft().world.getTotalWorldTime(); + if (currentTick - lastScreenshotTick > 20) + { + UTPacketHandler.instance.sendTo(new UTAdvancementScreenshotMessage(), (EntityPlayerMP) event.getEntityPlayer()); + lastScreenshotTick = currentTick; + } + } +} diff --git a/src/main/java/mod/acgaming/universaltweaks/tweaks/misc/advancements/screenshot/UTAdvancementScreenshotMessage.java b/src/main/java/mod/acgaming/universaltweaks/tweaks/misc/advancements/screenshot/UTAdvancementScreenshotMessage.java new file mode 100644 index 00000000..63c285be --- /dev/null +++ b/src/main/java/mod/acgaming/universaltweaks/tweaks/misc/advancements/screenshot/UTAdvancementScreenshotMessage.java @@ -0,0 +1,33 @@ +package mod.acgaming.universaltweaks.tweaks.misc.advancements.screenshot; + +import net.minecraft.client.Minecraft; +import net.minecraft.util.ScreenShotHelper; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + +import io.netty.buffer.ByteBuf; + +public class UTAdvancementScreenshotMessage implements IMessage +{ + public UTAdvancementScreenshotMessage() {} + + @Override + public void fromBytes(ByteBuf buf) {} + + @Override + public void toBytes(ByteBuf buf) {} + + public static class Handler implements IMessageHandler + { + @Override + public IMessage onMessage(UTAdvancementScreenshotMessage message, MessageContext ctx) + { + Minecraft.getMinecraft().addScheduledTask(() -> { + Minecraft mc = Minecraft.getMinecraft(); + ScreenShotHelper.saveScreenshot(mc.gameDir, mc.displayWidth, mc.displayHeight, mc.getFramebuffer()); + }); + return null; + } + } +} diff --git a/src/main/java/mod/acgaming/universaltweaks/util/UTPacketHandler.java b/src/main/java/mod/acgaming/universaltweaks/util/UTPacketHandler.java index efb7db61..f1b92d44 100644 --- a/src/main/java/mod/acgaming/universaltweaks/util/UTPacketHandler.java +++ b/src/main/java/mod/acgaming/universaltweaks/util/UTPacketHandler.java @@ -5,6 +5,7 @@ import net.minecraftforge.fml.relauncher.Side; import mod.acgaming.universaltweaks.UniversalTweaks; +import mod.acgaming.universaltweaks.tweaks.misc.advancements.screenshot.UTAdvancementScreenshotMessage; import mod.acgaming.universaltweaks.tweaks.misc.damagetilt.UTDamageTiltMessage; import mod.acgaming.universaltweaks.util.particle.UTParticleSpawnerMessage; @@ -18,5 +19,6 @@ public static void init() { instance.registerMessage(UTDamageTiltMessage.Handler.class, UTDamageTiltMessage.class, id++, Side.CLIENT); instance.registerMessage(UTParticleSpawnerMessage.Handler.class, UTParticleSpawnerMessage.class, id++, Side.CLIENT); + instance.registerMessage(UTAdvancementScreenshotMessage.Handler.class, UTAdvancementScreenshotMessage.class, id++, Side.CLIENT); } -} \ No newline at end of file +}