internal static World LoadWorld(string worldName, string fileName, WorldDataCategory cats) { if (fileName == null) { throw new ArgumentNullException("fileName"); } NbtFile file = new NbtFile(); file.LoadFromFile(fileName, NbtCompression.None, null); NbtCompound root = file.RootTag; Map map = LoadHeaderInternal(root); if ((cats & WorldDataCategory.MapData) != 0) { map.Blocks = root["MapData"]["Blocks"].ByteArrayValue; } World world = new World(worldName) { Map = map }; NbtCompound backupSettingsTag = root.Get <NbtCompound>("BackupSettings"); if ((cats & WorldDataCategory.BackupSettings) != 0 && backupSettingsTag != null) { YesNoAuto backupMode; if (!Enum.TryParse(backupSettingsTag["EnabledState"].StringValue, out backupMode)) { throw new MapFormatException("Could not parse BackupEnabledState."); } world.BackupInterval = TimeSpan.FromSeconds(backupSettingsTag["Interval"].IntValue); world.BackupEnabledState = backupMode; } NbtCompound accessSecurityTag = root.Get <NbtCompound>("AccessSecurity"); if ((cats & WorldDataCategory.AccessPermissions) != 0 && accessSecurityTag != null) { world.AccessSecurity = new SecurityController(accessSecurityTag); } NbtCompound buildSecurityTag = root.Get <NbtCompound>("BuildSecurity"); if ((cats & WorldDataCategory.BuildPermissions) != 0 && buildSecurityTag != null) { world.BuildSecurity = new SecurityController(buildSecurityTag); } NbtCompound envTag = root.Get <NbtCompound>("Environment"); if ((cats & WorldDataCategory.Environment) != 0 && envTag != null) { world.CloudColor = envTag["CloudColor"].IntValue; world.FogColor = envTag["FogColor"].IntValue; world.SkyColor = envTag["SkyColor"].IntValue; world.EdgeLevel = envTag["EdgeLevel"].ShortValue; world.EdgeBlock = (Block)envTag["EdgeBlock"].ByteValue; } NbtCompound blockDBSettingsTag = root.Get <NbtCompound>("BlockDBSettings"); if ((cats & WorldDataCategory.BlockDBSettings) != 0 && blockDBSettingsTag != null) { world.BlockDB.LoadSettings(blockDBSettingsTag); } NbtCompound worldEventsTag = root.Get <NbtCompound>("WorldEvents"); if ((cats & WorldDataCategory.WorldEvents) != 0 && worldEventsTag != null) { world.LoadedBy = worldEventsTag["LoadedBy"].StringValue; world.LoadedOn = DateTimeUtil.TryParseDateTime(worldEventsTag["LoadedOn"].LongValue); // TODO: UnloadedBy/UnloadedOn world.MapChangedBy = worldEventsTag["MapChangedBy"].StringValue; world.MapChangedOn = DateTimeUtil.TryParseDateTime(worldEventsTag["MapChangedOn"].LongValue); world.LockedBy = worldEventsTag["LockedBy"].StringValue; world.LockedOn = DateTimeUtil.TryParseDateTime(worldEventsTag["LockedOn"].LongValue); world.UnlockedBy = worldEventsTag["UnlockedBy"].StringValue; world.UnlockedOn = DateTimeUtil.TryParseDateTime(worldEventsTag["UnlockedOn"].LongValue); } return(world); }
internal static World LoadWorld( string worldName, string fileName, WorldDataCategory cats ) { if( fileName == null ) throw new ArgumentNullException( "fileName" ); NbtFile file = new NbtFile(); file.LoadFromFile( fileName, NbtCompression.None, null ); NbtCompound root = file.RootTag; Map map = LoadHeaderInternal( root ); if( ( cats & WorldDataCategory.MapData ) != 0 ) { map.Blocks = root["MapData"]["Blocks"].ByteArrayValue; } World world = new World( worldName ) { Map = map }; NbtCompound backupSettingsTag = root.Get<NbtCompound>( "BackupSettings" ); if( ( cats & WorldDataCategory.BackupSettings ) != 0 && backupSettingsTag != null ) { YesNoAuto backupMode; if( !Enum.TryParse( backupSettingsTag["EnabledState"].StringValue, out backupMode ) ) { throw new MapFormatException( "Could not parse BackupEnabledState." ); } world.BackupInterval = TimeSpan.FromSeconds( backupSettingsTag["Interval"].IntValue ); world.BackupEnabledState = backupMode; } NbtCompound accessSecurityTag = root.Get<NbtCompound>( "AccessSecurity" ); if( ( cats & WorldDataCategory.AccessPermissions ) != 0 && accessSecurityTag != null ) { world.AccessSecurity = new SecurityController( accessSecurityTag ); } NbtCompound buildSecurityTag = root.Get<NbtCompound>( "BuildSecurity" ); if( ( cats & WorldDataCategory.BuildPermissions ) != 0 && buildSecurityTag != null ) { world.BuildSecurity = new SecurityController( buildSecurityTag ); } NbtCompound envTag = root.Get<NbtCompound>( "Environment" ); if( ( cats & WorldDataCategory.Environment ) != 0 && envTag != null ) { world.CloudColor = envTag["CloudColor"].IntValue; world.FogColor = envTag["FogColor"].IntValue; world.SkyColor = envTag["SkyColor"].IntValue; world.EdgeLevel = envTag["EdgeLevel"].ShortValue; world.EdgeBlock = (Block)envTag["EdgeBlock"].ByteValue; } NbtCompound blockDBSettingsTag = root.Get<NbtCompound>( "BlockDBSettings" ); if( ( cats & WorldDataCategory.BlockDBSettings ) != 0 && blockDBSettingsTag != null ) { world.BlockDB.LoadSettings( blockDBSettingsTag ); } NbtCompound worldEventsTag = root.Get<NbtCompound>( "WorldEvents" ); if( ( cats & WorldDataCategory.WorldEvents ) != 0 && worldEventsTag != null ) { world.LoadedBy = worldEventsTag["LoadedBy"].StringValue; world.LoadedOn = DateTimeUtil.TryParseDateTime( worldEventsTag["LoadedOn"].LongValue ); // TODO: UnloadedBy/UnloadedOn world.MapChangedBy = worldEventsTag["MapChangedBy"].StringValue; world.MapChangedOn = DateTimeUtil.TryParseDateTime( worldEventsTag["MapChangedOn"].LongValue ); world.LockedBy = worldEventsTag["LockedBy"].StringValue; world.LockedOn = DateTimeUtil.TryParseDateTime( worldEventsTag["LockedOn"].LongValue ); world.UnlockedBy = worldEventsTag["UnlockedBy"].StringValue; world.UnlockedOn = DateTimeUtil.TryParseDateTime( worldEventsTag["UnlockedOn"].LongValue ); } return world; }