Exemple #1
0
        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);
        }
Exemple #2
0
        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;
        }