예제 #1
0
        private static object CreateListFromNbt(NbtList list, NbtEntryType entryType)
        {
            switch (entryType.NestedType.Type)
            {
            case NbtTagType.Byte:
                if (entryType.NestedType.FwType == typeof(bool))
                {
                    return(new List <bool>(list.OfType <NbtByte>().Select(x => x.Value == 1)));
                }
                else
                {
                    return(new List <byte>(list.OfType <NbtByte>().Select(x => x.Value)));
                }

            case NbtTagType.Short:
                return(new List <short>(list.OfType <NbtShort>().Select(x => x.Value)));

            case NbtTagType.Int:
                return(new List <int>(list.OfType <NbtInt>().Select(x => x.Value)));

            case NbtTagType.Long:
                return(new List <long>(list.OfType <NbtLong>().Select(x => x.Value)));

            case NbtTagType.Float:
                return(new List <float>(list.OfType <NbtFloat>().Select(x => x.Value)));

            case NbtTagType.Double:
                return(new List <double>(list.OfType <NbtDouble>().Select(x => x.Value)));

            case NbtTagType.ByteArray:
                return(new List <byte[]>(list.OfType <NbtByteArray>().Select(x => x.Value)));

            case NbtTagType.String:
                return(new List <string>(list.OfType <NbtString>().Select(x => x.Value)));

            case NbtTagType.IntArray:
                return(new List <int[]>(list.OfType <NbtIntArray>().Select(x => x.Value)));

            case NbtTagType.LongArray:
                return(new List <long[]>(list.OfType <NbtLongArray>().Select(x => x.Value)));

            case NbtTagType.List:
            case NbtTagType.Compound:
                var inst = (IList)Activator.CreateInstance(entryType.FwType);
                foreach (var it in list.Select(t => CreateValueFromNbtTag(t, entryType.NestedType)))
                {
                    inst.Add(it);
                }
                return(inst);

            default:
                throw new NotSupportedException();
            }
        }