Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
VersionConverter10To14.cs
浏览该文件的文档.
1using System.Globalization;
2using System.Xml.Linq;
3using Engine;
4using XmlUtilities;
5
6namespace Game {
8 public override string SourceVersion => "1.0";
9
10 public override string TargetVersion => "1.4";
11
12 public override void ConvertProjectXml(XElement projectNode) {
13 XmlUtils.SetAttributeValue(projectNode, "Version", TargetVersion);
14 }
15
16 public override void ConvertWorld(string directoryName) {
17 string[] array = Storage.ListFileNames(Storage.CombinePaths(directoryName, "Chunks")).ToArray();
18 string[] array2;
19 using (Stream stream = Storage.OpenFile(Storage.CombinePaths(directoryName, "Chunks.dat"), OpenFileMode.Create)) {
20 for (int i = 0; i < 65537; i++) {
21 TerrainSerializer14.WriteTOCEntry(stream, 0, 0, 0);
22 }
23 int num = 0;
24 array2 = array;
25 foreach (string text in array2) {
26 try {
27 if (num >= 65536) {
28 throw new InvalidOperationException("Too many chunks.");
29 }
30 string[] array3 = Storage.GetFileNameWithoutExtension(text).Split('_');
31 int cx = int.Parse(array3[1], CultureInfo.InvariantCulture);
32 int cz = int.Parse(array3[2], CultureInfo.InvariantCulture);
33 using (Stream stream2 = Storage.OpenFile(
34 Storage.CombinePaths(directoryName, Storage.CombinePaths("Chunks", text)),
35 OpenFileMode.Read
36 )) {
37 byte[] array4 = new byte[stream2.Length];
38 stream2.ReadExactly(array4);
39 int num2 = (int)stream.Length;
40 stream.Position = num2;
42 stream.Write(array4, 0, array4.Length);
43 stream.Position = num * 4 * 3;
44 TerrainSerializer14.WriteTOCEntry(stream, cx, cz, num2);
45 num++;
46 }
47 }
48 catch (Exception ex) {
49 Log.Error($"Error converting chunk file \"{text}\". Skipping chunk. Reason: {ex.Message}");
50 }
51 }
52 stream.Flush();
53 Log.Information($"Converted {num} chunk(s).");
54 }
55 string path = Storage.CombinePaths(directoryName, "Project.xml");
56 XElement xElement;
57 using (Stream stream3 = Storage.OpenFile(path, OpenFileMode.Read)) {
58 xElement = XmlUtils.LoadXmlFromStream(stream3, null, true);
59 }
60 ConvertProjectXml(xElement);
61 using (Stream stream4 = Storage.OpenFile(path, OpenFileMode.Create)) {
62 XmlUtils.SaveXmlToStream(xElement, stream4, null, true);
63 }
64 array2 = array;
65 foreach (string text2 in array2) {
66 Storage.DeleteFile(Storage.CombinePaths(directoryName, Storage.CombinePaths("Chunks", text2)));
67 }
68 Storage.DeleteDirectory(Storage.CombinePaths(directoryName, "Chunks"));
69 }
70 }
71}
static void Error(object message)
定义 Log.cs:80
static void Information(object message)
定义 Log.cs:56
static IEnumerable< string > ListFileNames(string path)
static Stream OpenFile(string path, OpenFileMode openFileMode)
static string GetFileNameWithoutExtension(string path)
static void DeleteDirectory(string path)
static void DeleteFile(string path)
static string CombinePaths(params string[] paths)
static void WriteChunkHeader(Stream stream, int cx, int cz)
static void WriteTOCEntry(Stream stream, int cx, int cz, int offset)
override void ConvertWorld(string directoryName)
override void ConvertProjectXml(XElement projectNode)
static void SetAttributeValue(XElement node, string attributeName, object value)
static XElement LoadXmlFromStream(Stream stream, Encoding encoding, bool throwOnError)
static void SaveXmlToStream(XElement node, Stream stream, Encoding encoding, bool throwOnError)