Skip to content

Commit 8cf39ae

Browse files
authored
multiple things (see extended description)
remove MixinExtras (sadpag) fix savelock not applying on old worlds dont show savelock screen if savelock isnt active move savelock until right before new server creation to save time on resets
1 parent 15c2d06 commit 8cf39ae

File tree

8 files changed

+55
-18
lines changed

8 files changed

+55
-18
lines changed

build.gradle

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,6 @@ dependencies {
1616
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
1717
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
1818

19-
// Mixin Extras
20-
modImplementation include("com.github.LlamaLad7:MixinExtras:${project.mixinextras_version}")
21-
implementation("com.github.LlamaLad7:MixinExtras:${project.mixinextras_version}")
22-
annotationProcessor("com.github.LlamaLad7:MixinExtras:${project.mixinextras_version}")
23-
2419
// Fabric API. This is technically optional, but you probably want it anyway.
2520
// modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
2621

gradle.properties

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ org.gradle.jvmargs=-Xmx1G
55
minecraft_version=1.16.1
66
yarn_mappings=1.16.1+build.21
77
loader_version=0.11.3
8-
mixinextras_version=0.0.12
98
# Mod Properties
109
mod_version=1.5
1110
maven_group=fast-reset-1.16.1-v

src/main/java/fast_reset/client/FastReset.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public class FastReset implements ClientModInitializer {
1414
private static final File configurationFile = FabricLoader.getInstance().getConfigDir().resolve("fastReset").resolve("settings.txt").toFile();
1515

1616
public static boolean saveOnQuit = true;
17+
public static Boolean saving = false;
1718
public static final Object saveLock = new Object();
1819

1920
public static int buttonLocation = 0;
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package fast_reset.client.mixin;
2+
3+
import fast_reset.client.FastReset;
4+
import net.minecraft.client.MinecraftClient;
5+
import net.minecraft.client.gui.screen.SaveLevelScreen;
6+
import net.minecraft.client.gui.screen.Screen;
7+
import net.minecraft.text.TranslatableText;
8+
import org.spongepowered.asm.mixin.Mixin;
9+
import org.spongepowered.asm.mixin.Shadow;
10+
import org.spongepowered.asm.mixin.injection.At;
11+
import org.spongepowered.asm.mixin.injection.Inject;
12+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
13+
14+
@Mixin(MinecraftClient.class)
15+
public abstract class MinecraftClientMixin {
16+
17+
@Shadow public abstract void method_29970(Screen screen);
18+
19+
@Inject(method = "startIntegratedServer(Ljava/lang/String;Lnet/minecraft/util/registry/RegistryTracker$Modifiable;Ljava/util/function/Function;Lcom/mojang/datafixers/util/Function4;ZLnet/minecraft/client/MinecraftClient$WorldLoadAction;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/MinecraftServer;startServer(Ljava/util/function/Function;)Lnet/minecraft/server/MinecraftServer;"))
20+
private void worldWait(CallbackInfo ci) {
21+
synchronized (FastReset.saving) {
22+
if (!FastReset.saving) {
23+
FastReset.LOGGER.info("no save lock active");
24+
return;
25+
}
26+
}
27+
28+
this.method_29970(new SaveLevelScreen(new TranslatableText("still saving the last world")));
29+
30+
synchronized(FastReset.saveLock) {
31+
FastReset.LOGGER.info("done waiting for save lock");
32+
}
33+
}
34+
}

src/main/java/fast_reset/client/mixin/ResetMixin.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package fast_reset.client.mixin;
22

3-
import com.llamalad7.mixinextras.injector.WrapWithCondition;
43
import fast_reset.client.FastReset;
54
import net.minecraft.server.MinecraftServer;
65
import net.minecraft.server.PlayerManager;
@@ -36,6 +35,10 @@ private boolean closeWorldsRedirect(Iterator<ServerWorld> iterator) {
3635

3736
new Thread(() -> {
3837
synchronized(FastReset.saveLock) {
38+
synchronized (FastReset.saving) {
39+
FastReset.saving = true;
40+
}
41+
3942
while(iterator.hasNext()) {
4043
ServerWorld world = iterator.next();
4144
if (world != null) {
@@ -49,13 +52,19 @@ private boolean closeWorldsRedirect(Iterator<ServerWorld> iterator) {
4952
this.session.deleteSessionLock();
5053
} catch (IllegalStateException | IOException ignored) {
5154
}
55+
56+
synchronized (FastReset.saving) {
57+
FastReset.saving = false;
58+
}
5259
}
5360
}).start();
5461
return false;
5562
}
5663

57-
@WrapWithCondition(method = "shutdown", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;saveAllPlayerData()V"))
58-
private boolean disablePlayerSaving(PlayerManager playerManager) {
59-
return FastReset.saveOnQuit;
64+
@Redirect(method = "shutdown", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;saveAllPlayerData()V"))
65+
private void disablePlayerSaving(PlayerManager playerManager) {
66+
if (FastReset.saveOnQuit) {
67+
playerManager.saveAllPlayerData();
68+
}
6069
}
6170
}
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
package fast_reset.client.mixin;
22

3-
import com.llamalad7.mixinextras.injector.WrapWithCondition;
43
import fast_reset.client.FastReset;
54
import net.minecraft.server.world.ServerChunkManager;
65
import org.spongepowered.asm.mixin.Mixin;
76
import org.spongepowered.asm.mixin.injection.At;
7+
import org.spongepowered.asm.mixin.injection.Redirect;
88

99
@Mixin(ServerChunkManager.class)
1010
public class ServerChunkManagerMixin {
1111

12-
@WrapWithCondition(method = "close", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/world/ServerChunkManager;save(Z)V"))
13-
private boolean closeRedirect(ServerChunkManager serverChunkManager, boolean flush) {
14-
return FastReset.saveOnQuit;
12+
@Redirect(method = "close", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/world/ServerChunkManager;save(Z)V"))
13+
private void closeRedirect(ServerChunkManager serverChunkManager, boolean flush) {
14+
if (FastReset.saveOnQuit) {
15+
serverChunkManager.save(flush);
16+
}
1517
}
1618
}

src/main/resources/fabric.mod.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@
1111
"license": "MIT",
1212
"environment": "client",
1313
"entrypoints": {
14-
"preLaunch": [
15-
"com.llamalad7.mixinextras.MixinExtrasBootstrap::init"
16-
],
1714
"client": [
1815
"fast_reset.client.FastReset"
1916
]

src/main/resources/fast_reset.mixins.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
"package": "fast_reset.client.mixin",
55
"compatibilityLevel": "JAVA_8",
66
"client": [
7-
"CreateWorldScreenMixin",
87
"GameMenuMixin",
8+
"MinecraftClientMixin",
99
"OptionsScreenMixin",
1010
"ResetMixin",
1111
"ServerChunkManagerMixin"

0 commit comments

Comments
 (0)