Parse Minecraft version from CrashReport instead of using Minecraft.getVersion()

Using the getVersion() method doesn't produce consistent results (e.g. MultiMC5 changes the value). The Minecraft version in the CrashReport is hard-coded and should therefore be rather consistent.
This commit is contained in:
johni0702
2015-08-30 14:57:06 +02:00
parent 5d921fbb58
commit 2bc79c0140
5 changed files with 25 additions and 18 deletions

View File

@@ -33,6 +33,8 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.entity.RenderPlayer;
import net.minecraft.client.resources.IResourcePack;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.crash.CrashReport;
import net.minecraft.crash.CrashReportCategory;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.client.FMLClientHandler;
@@ -66,6 +68,20 @@ public class ReplayMod {
return Loader.instance().getIndexedModList().get(MODID);
}
@Getter(lazy = true)
private static final String minecraftVersion = parseMinecraftVersion();
private static String parseMinecraftVersion() {
CrashReport crashReport = new CrashReport("", new Throwable());
@SuppressWarnings("unchecked")
List<CrashReportCategory.Entry> list = crashReport.getCategory().children;
for (CrashReportCategory.Entry entry : list) {
if ("Minecraft Version".equals(entry.getKey())) {
return entry.getValue();
}
}
return "Unknown";
}
public static final String MODID = "replaymod";
public static final ApiClient apiClient = new ApiClient();
private static final Minecraft mc = Minecraft.getMinecraft();

View File

@@ -5,6 +5,7 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonParser;
import com.mojang.authlib.exceptions.AuthenticationException;
import eu.crushedpixel.replaymod.ReplayMod;
import eu.crushedpixel.replaymod.api.replay.ReplayModApiMethods;
import eu.crushedpixel.replaymod.api.replay.SearchQuery;
import eu.crushedpixel.replaymod.api.replay.holders.*;
@@ -208,12 +209,9 @@ public class ApiClient {
//in a development environment, getContainer().getVersion() will return ${version}
if(versionIdentifier.equals("${version}")) return true;
//get the Minecraft Version String
String mcversion = mc.getVersion();
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.up_to_date);
builder.put("version", versionIdentifier);
builder.put("minecraft", mcversion);
builder.put("minecraft", ReplayMod.getMinecraftVersion());
return invokeAndReturn(builder, Success.class).isSuccess();
}

View File

@@ -10,7 +10,6 @@ import eu.crushedpixel.replaymod.utils.ReplayFile;
import eu.crushedpixel.replaymod.utils.ReplayFileIO;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import net.minecraft.client.Minecraft;
import org.apache.commons.io.FileUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -169,11 +168,7 @@ public abstract class DataListener extends ChannelInboundHandlerAdapter {
ReplayMod.replayFileAppender.startNewReplayFileWriting();
saveState = 1;
String mcversion = Minecraft.getMinecraft().getVersion();
String[] split = mcversion.split("-");
if(split.length > 0) {
mcversion = split[0];
}
String mcversion = ReplayMod.getMinecraftVersion();
String[] pl = players.toArray(new String[players.size()]);

View File

@@ -8,7 +8,7 @@ import de.johni0702.replaystudio.filter.StreamFilter;
import de.johni0702.replaystudio.replay.ReplayFile;
import de.johni0702.replaystudio.replay.ReplayMetaData;
import de.johni0702.replaystudio.stream.PacketStream;
import net.minecraft.client.Minecraft;
import eu.crushedpixel.replaymod.ReplayMod;
import org.apache.commons.io.IOUtils;
import org.spacehq.mc.protocol.packet.ingame.server.ServerResourcePackSendPacket;
import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnPlayerPacket;
@@ -111,17 +111,11 @@ public class ConnectMetadataFilter implements StreamFilter {
}
public void writeTo(ReplayFile output) throws IOException {
String mcVersion = Minecraft.getMinecraft().getVersion();
String[] split = mcVersion.split("-");
if(split.length > 0) {
mcVersion = split[0];
}
ReplayMetaData metaData = new ReplayMetaData();
metaData.setDuration((int) duration);
metaData.setSingleplayer(false);
metaData.setServerName("Multiple worlds");
metaData.setMcVersion(mcVersion);
metaData.setMcVersion(ReplayMod.getMinecraftVersion());
metaData.setDate(System.currentTimeMillis());
metaData.setPlayers(players.toArray(new String[players.size()]));
output.writeMetaData(metaData);

View File

@@ -97,5 +97,9 @@ public net.minecraft.client.settings.GameSettings field_151446_aD # mapSoundLeve
# Frustum
public net.minecraft.client.renderer.culling.Frustum field_78552_a # clippingHelper
# CrashReportCategory
public net.minecraft.crash.CrashReportCategory field_85077_c # children
public net.minecraft.crash.CrashReportCategory$Entry
# Example
# public net.minecraft.package.ClassName func_some_id(Ljava/lang/Class;IZS)V # methodName