OSDN Git Service

Additional Map metadata
authormelchior <melchior@users.osdn.me>
Wed, 23 Dec 2020 22:09:09 +0000 (17:09 -0500)
committermelchior <melchior@users.osdn.me>
Wed, 23 Dec 2020 22:09:09 +0000 (17:09 -0500)
Automap/Helpers.cs
Automap/Subsystems/AutomapSystem.cs

index 52fd3f7..2d387aa 100644 (file)
@@ -160,7 +160,11 @@ namespace Automap
             return arbBlockIDTable;
         }
 
-
+               public static Mod Self(this ICoreClientAPI ownApi)
+               {
+               AutomapMod ownMod = ownApi.ModLoader.GetModSystem<AutomapMod>( );
+               return ownMod.Mod;
+               }
                       
     }
 }
index 04db4c2..4e85a7e 100644 (file)
@@ -39,6 +39,7 @@ namespace Automap
                private const string poiFileName = @"poi_binary";
                private const string eoiFileName = @"eoi_binary";
                private const string pointsTsvFileName = @"points_of_interest.tsv";
+               private const string plainMetadataFileName = @"map_metadata.txt";
                private static Regex chunkShardRegex = new Regex(@"(?<X>[\d]+)_(?<Z>[\d]+)\.png", RegexOptions.Singleline);
 
                private ConcurrentDictionary<Vec2i, ColumnCounter> columnCounters = new ConcurrentDictionary<Vec2i, ColumnCounter>(3, 150);
@@ -295,6 +296,7 @@ namespace Automap
                                Logger.VerboseDebug("Thread '{0}' executing finally block.", Thread.CurrentThread.Name);
 #endif
                                PersistPointsData();
+                               Write_PlainMetadata( );
                        }
                }
 
@@ -447,6 +449,29 @@ namespace Automap
 
                }
 
+               private void Write_PlainMetadata( )
+               { 
+               string metaPath = Path.Combine(path, plainMetadataFileName);
+
+               using (var metaDataFile = File.Open(metaPath,FileMode.Create)) {
+               using (var mdWriter = new StreamWriter(metaDataFile, Encoding.ASCII)) 
+                       {
+                               mdWriter.WriteLine("WorldSeed {0}", ClientAPI.World.Seed);
+                               mdWriter.WriteLine("PlayerCoords {0:D} {1:D}", startChunkColumn.X, startChunkColumn.Y);
+                               mdWriter.WriteLine("DefaultSpawnPos {0:D} {1:D} {2:D}", ClientAPI.World.DefaultSpawnPosition.AsBlockPos.X,ClientAPI.World.DefaultSpawnPosition.AsBlockPos.Y,ClientAPI.World.DefaultSpawnPosition.AsBlockPos.Z);
+                               mdWriter.WriteLine("ChunkSize {0}", chunkSize);
+                               mdWriter.WriteLine("SeaLevel {0:D}", ClientAPI.World.SeaLevel);
+                               mdWriter.WriteLine("WorldSize {0:D} {1:D} {2:D}", ClientAPI.World.BulkBlockAccessor.MapSizeX, ClientAPI.World.BulkBlockAccessor.MapSizeY,ClientAPI.World.BulkBlockAccessor.MapSizeZ);
+                               mdWriter.WriteLine("RegionSize {0:D}", ClientAPI.World.BulkBlockAccessor.RegionSize);
+                               mdWriter.WriteLine("Version '{0}'", ClientAPI.Self().Info.Version);
+                               mdWriter.WriteLine("PlayTime {0:F1}", ClientAPI.InWorldEllapsedMilliseconds / 1000);
+                               mdWriter.WriteLine("GameDate {0}", ClientAPI.World.Calendar.PrettyDate());
+                               mdWriter.Flush( );
+                       }
+               }
+               }
+                       
+
                private ColumnMeta CreateColumnMetadata(KeyValuePair<Vec2i, ColumnCounter> mostActiveCol, IMapChunk mapChunk)
                {
                        ColumnMeta data = new ColumnMeta(mostActiveCol.Key.Copy(), ClientAPI, (byte) chunkSize, (ClientAPI.World.BlockAccessor.MapSizeY / chunkSize));