Skip to content

Commit c863487

Browse files
ScribblePancakeTAS
authored andcommitted
More savestate shenanigans and more updates
-Make a savestate with `J` -Load the latest savestate with `K` -Added folder command to open either the savestate folder or tasfiles folder
1 parent b2acadb commit c863487

File tree

10 files changed

+113
-52
lines changed

10 files changed

+113
-52
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ Let's you record and play back tickperfect inputs.
44
Author of the original mod: tr7zw
55
Author: ScribbleLP
66

7-
Contributions by: Famous1622, MGW14
7+
Contributions by: Famous1622, MGW14(MCPfannenkuchenYT)
88

99
Tickratechanger: [Guichaguri](https://github.com/Guichaguri/TickrateChanger)
1010
Tickrate 0 idea: [Cubitect](https://github.com/Cubitect/Cubitick)
11+
Savestate idea: [bspkrs, MightyPork](https://github.com/bspkrs-mods/WorldStateCheckpoints), also used in [TASTools](https://github.com/ScribbleLP/MC-TASTools)
1112

1213
RNG Math: [Admiral_Stapler](https://www.youtube.com/channel/UCB4XuRBJZBOpnoJSWekMohw)
1314

src/main/java/de/scribble/lp/tasmod/ClientProxy.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package de.scribble.lp.tasmod;
22

3+
import java.io.File;
4+
35
import org.lwjgl.input.Keyboard;
46

57
import de.pfannekuchen.tasmod.events.AimAssistEvents;
8+
import de.scribble.lp.tasmod.savestates.SavestateEvents;
69
import de.scribble.lp.tasmod.savestates.SavestateHandlerClient;
710
import de.scribble.lp.tasmod.tutorial.TutorialHandler;
11+
import net.minecraft.client.Minecraft;
812
import net.minecraft.client.settings.KeyBinding;
913
import net.minecraft.launchwrapper.Launch;
1014
import net.minecraftforge.common.MinecraftForge;
@@ -32,6 +36,10 @@ public class ClientProxy extends CommonProxy{
3236

3337
public static KeyBinding stopkey= new KeyBinding("Recording/Playback Stop", Keyboard.KEY_F10, "TASmod");
3438

39+
public static KeyBinding savestateSaveKey = new KeyBinding("Create Savestate", Keyboard.KEY_J, "TASmod");
40+
41+
public static KeyBinding SavestateLoadKey = new KeyBinding("Load Latest Savestate", Keyboard.KEY_K, "TASmod");
42+
3543

3644
public void preInit(FMLPreInitializationEvent ev) {
3745
isDevEnvironment=(Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment");
@@ -45,13 +53,16 @@ public void init(FMLInitializationEvent ev) {
4553
MinecraftForge.EVENT_BUS.register(new InfoGui());
4654
MinecraftForge.EVENT_BUS.register(playbackTutorial);
4755
MinecraftForge.EVENT_BUS.register(new AimAssistEvents());
56+
MinecraftForge.EVENT_BUS.register(new SavestateEvents());
4857

4958
saveHandler=new SavestateHandlerClient();
5059

5160
ClientRegistry.registerKeyBinding(tickratezeroKey);
5261
ClientRegistry.registerKeyBinding(tickAdvance);
5362
ClientRegistry.registerKeyBinding(stopkey);
5463
ClientRegistry.registerKeyBinding(showNextLocation);
64+
65+
new File (Minecraft.getMinecraft().mcDataDir,"saves"+File.separator+"savestates").mkdir();
5566
super.init(ev);
5667
}
5768
public void postInit(FMLPostInitializationEvent ev) {

src/main/java/de/scribble/lp/tasmod/ModLoader.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.apache.logging.log4j.LogManager;
44
import org.apache.logging.log4j.Logger;
55

6+
import de.scribble.lp.tasmod.misc.CommandFolder;
67
import de.scribble.lp.tasmod.playback.CommandPlay;
78
import de.scribble.lp.tasmod.recording.CommandRecord;
89
import de.scribble.lp.tasmod.tickratechanger.CommandTickrate;
@@ -61,6 +62,7 @@ public void serverStart(FMLServerStartingEvent ev) {
6162
ev.registerServerCommand(new CommandRecord());
6263
ev.registerServerCommand(new CommandPlay());
6364
ev.registerServerCommand(new CommandPlaybacktutorial());
65+
ev.registerServerCommand(new CommandFolder());
6466
}
6567
public static ModLoader getInstance() {
6668
return instance;
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package de.scribble.lp.tasmod.misc;
2+
3+
import java.awt.Desktop;
4+
import java.io.File;
5+
import java.io.IOException;
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
import de.scribble.lp.tasmod.CommonProxy;
10+
import net.minecraft.client.Minecraft;
11+
import net.minecraft.command.CommandBase;
12+
import net.minecraft.command.CommandException;
13+
import net.minecraft.command.ICommandSender;
14+
import net.minecraft.server.MinecraftServer;
15+
import net.minecraft.util.math.BlockPos;
16+
17+
public class CommandFolder extends CommandBase{
18+
19+
@Override
20+
public String getName() {
21+
return "folder";
22+
}
23+
24+
@Override
25+
public String getUsage(ICommandSender sender) {
26+
return "/folder <type>";
27+
}
28+
29+
@Override
30+
public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
31+
if(args.length==1) {
32+
if(args[0].equalsIgnoreCase("savestates")) {
33+
File file = new File(Minecraft.getMinecraft().mcDataDir, "saves" + File.separator + "savestates");
34+
try {
35+
if(!file.exists())file.mkdir();
36+
Desktop.getDesktop().open(file);
37+
} catch (IOException e) {
38+
CommonProxy.logger.fatal("Something went wrong while opening ", new File(Minecraft.getMinecraft().mcDataDir, "saves" + File.separator + "savestates").getPath());
39+
e.printStackTrace();
40+
}
41+
}else if(args[0].equalsIgnoreCase("tasfiles")){
42+
File file = new File(Minecraft.getMinecraft().mcDataDir, "saves" + File.separator + "tasfiles");
43+
try {
44+
if(!file.exists())file.mkdir();
45+
Desktop.getDesktop().open(file);
46+
} catch (IOException e) {
47+
CommonProxy.logger.fatal("Something went wrong while opening ", new File(Minecraft.getMinecraft().mcDataDir, "saves" + File.separator + "savestates").getPath());
48+
e.printStackTrace();
49+
}
50+
}
51+
}
52+
}
53+
@Override
54+
public List<String> getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args,
55+
BlockPos targetPos) {
56+
List<String> tab=new ArrayList<String>();
57+
if(args.length==1) {
58+
tab.addAll(getListOfStringsMatchingLastWord(args, new String[] {"savestates","tasfiles"}));
59+
}else {
60+
tab.clear();
61+
}
62+
return tab;
63+
}
64+
65+
}

src/main/java/de/scribble/lp/tasmod/playback/CommandFolder.java

Lines changed: 0 additions & 41 deletions
This file was deleted.

src/main/java/de/scribble/lp/tasmod/recording/InputRecorder.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.apache.commons.lang3.StringUtils;
88
import org.apache.logging.log4j.LogManager;
99
import org.apache.logging.log4j.Logger;
10+
import org.lwjgl.input.Keyboard;
1011
import org.lwjgl.opengl.Display;
1112

1213
import de.scribble.lp.tasmod.ClientProxy;
@@ -118,12 +119,15 @@ private static String getStartLocation() {
118119
*/
119120
public static void recordTick() {
120121
if(recording) {
121-
if(!Display.isActive()) {
122-
stopRecording();
123-
}
122+
// if(!Display.isActive()) {
123+
// stopRecording();
124+
// }
124125
if(VirtualKeybindings.isKeyDown(ClientProxy.stopkey)) {
125126
stopRecording();
126127
}
128+
if(Keyboard.isKeyDown(Keyboard.KEY_P)) {
129+
pauseRecording=!pauseRecording;
130+
}
127131
if (pauseRecording) {
128132
return;
129133
}

src/main/java/de/scribble/lp/tasmod/savestates/GuiSavestateLoadingScreen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
1818
int width = scaled.getScaledWidth();
1919
int height = scaled.getScaledHeight();
2020

21-
drawCenteredString(fontRenderer,I18n.format("gui.savestate.loadingscreen.msg"), width / 2, height / 4 + 50 + -16, 0xFFFFFF); //Loading a savestate!
21+
drawCenteredString(fontRenderer,I18n.format("Loading a savestate!"), width / 2, height / 4 + 50 + -16, 0xFFFFFF); //Loading a savestate!
2222

2323
super.drawScreen(mouseX, mouseY, partialTicks);
2424
}

src/main/java/de/scribble/lp/tasmod/savestates/GuiSavestateSavingScreen.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
1616
int width = scaled.getScaledWidth();
1717
int height = scaled.getScaledHeight();
1818

19-
drawCenteredString(fontRenderer,I18n.format("gui.savestate.savingscreen.msg"),width / 2,height / 4 + 34 + -16, 0xFFFFFF); //Making a savestate, please wait!
20-
drawCenteredString(fontRenderer, I18n.format("gui.savestate.savingscreen.credit"), width / 2, height / 4 + 165 -16, 0xFFB238); //Idea and code from MightyPork and bspkrs' WorldStateCheckpoints!
19+
drawCenteredString(fontRenderer,I18n.format("Making a savestate, please wait!"),width / 2,height / 4 + 34 + -16, 0xFFFFFF); //Making a savestate, please wait!
2120
super.drawScreen(mouseX, mouseY, partialTicks);
2221
}
2322

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package de.scribble.lp.tasmod.savestates;
2+
3+
import de.scribble.lp.tasmod.ClientProxy;
4+
import de.scribble.lp.tasmod.virtual.VirtualKeybindings;
5+
import net.minecraft.client.Minecraft;
6+
import net.minecraftforge.common.MinecraftForge;
7+
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
8+
import net.minecraftforge.fml.common.gameevent.TickEvent;
9+
10+
public class SavestateEvents {
11+
@SubscribeEvent
12+
public void onRender(TickEvent.RenderTickEvent ev) {
13+
if(VirtualKeybindings.isKeyDown(ClientProxy.savestateSaveKey)){
14+
Minecraft.getMinecraft().displayGuiScreen(new GuiSavestateSavingScreen());
15+
ClientProxy.getSaveHandler().saveState();
16+
}else if(VirtualKeybindings.isKeyDown(ClientProxy.SavestateLoadKey)){
17+
ClientProxy.getSaveHandler().loadLastSavestate();
18+
}
19+
}
20+
}

src/main/java/de/scribble/lp/tasmod/savestates/SavestateHandlerClient.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ public class SavestateHandlerClient {
3737
Minecraft mc=Minecraft.getMinecraft();
3838
public static boolean isSaving=false;
3939
public static boolean isLoading=false;
40-
public static int savetimer;
41-
public static int loadtimer;
40+
public static int savetimer=5000;
41+
public static int loadtimer=100;
4242

4343
private File currentworldfolder;
4444
private File targetsavefolder=null;
@@ -108,8 +108,7 @@ public void loadLastSavestate() {
108108
if(!isSaving&&!isLoading) {
109109
isLoading=true;
110110
currentworldfolder = new File(Minecraft.getMinecraft().mcDataDir, "saves" + File.separator + mc.getIntegratedServer().getFolderName());
111-
foldername=mc.getIntegratedServer().getFolderName();
112-
worldname=Minecraft.getMinecraft().getIntegratedServer().getFolderName();
111+
worldname=foldername=mc.getIntegratedServer().getFolderName();
113112
//getting latest savestate
114113
int i=1;
115114
while(i<=300) {
@@ -322,6 +321,7 @@ public void run() {
322321
+ targetsavefolder.getPath() + " for some reason (Savestate save)");
323322
e.printStackTrace();
324323
} finally {
324+
displayIngameMenu();
325325
isSaving = false;
326326
}
327327
}

0 commit comments

Comments
 (0)