Fix mapwriter crash when opening replay for <MC1.12 (fixes #96)

This commit is contained in:
Jonas Herzig
2017-10-27 14:21:12 +02:00
parent 5fb1cf34e2
commit 10ce71efe3
3 changed files with 47 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
package com.replaymod.compat.mapwriter.mixin;
import com.replaymod.replay.ReplayModReplay;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ServerData;
import net.minecraftforge.fml.common.Loader;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
/**
* Approximately this for <1.12: https://github.com/Vectron/mapwriter/commit/68234520c7a3a0ae8201a085d7e66369900586ac
*/
@Mixin(Minecraft.class)
public abstract class MixinMinecraft {
@Shadow
private ServerData currentServerData;
@Inject(method = "getCurrentServerData", cancellable = true, at = @At("HEAD"))
private void replayModCompat_fixBug96(CallbackInfoReturnable<ServerData> ci) {
if (currentServerData == null
&& (Loader.isModLoaded("mapwriter") || Loader.isModLoaded("MapWriter"))
&& ReplayModReplay.instance.getReplayHandler() != null) {
for (StackTraceElement elem : Thread.currentThread().getStackTrace()) {
if ("mapwriter.util.Utils".equals(elem.getClassName()) && "getWorldName".equals(elem.getMethodName())) {
ci.setReturnValue(new ServerData(null, "replay"));
return;
}
}
}
}
}

View File

@@ -19,6 +19,7 @@ public class LoadingPlugin implements IFMLLoadingPlugin {
Mixins.addConfiguration("mixins.recording.replaymod.json");
Mixins.addConfiguration("mixins.render.replaymod.json");
Mixins.addConfiguration("mixins.replay.replaymod.json");
Mixins.addConfiguration("mixins.compat.mapwriter.replaymod.json");
Mixins.addConfiguration("mixins.compat.shaders.replaymod.json");
Mixins.addConfiguration("mixins.extras.playeroverview.replaymod.json");

View File

@@ -0,0 +1,11 @@
{
"required": false,
"package": "com.replaymod.compat.mapwriter.mixin",
"mixins": [],
"server": [],
"client": [
"MixinMinecraft"
],
"compatibilityLevel": "JAVA_8",
"refmap": "mixins.replaymod.refmap.json"
}