214 if (type.IsInstanceOfType(tag))
217 TagSerializer serializer;
218 if (TagSerializer.TryGetSerializer(type, out serializer)) {
222 return serializer.Deserialize(tag);
227 if (type.GetGenericArguments().Length == 0)
230 if (type.GetGenericTypeDefinition() == typeof(Nullable<>))
235 if ((tag == null || tag is IList) &&
236 type.GetGenericArguments().Length == 1) {
237 var elemType = type.GetGenericArguments()[0];
238 var newListType = typeof(List<>).MakeGenericType(elemType);
239 if (type.IsAssignableFrom(newListType)) {
241 return newListType.GetConstructor(
new Type[0]).Invoke(
new object[0]);
243 if (TagSerializer.TryGetSerializer(elemType, out serializer))
244 return serializer.DeserializeList((IList)tag);
247 var oldList = (IList)tag;
248 var newList = (IList)newListType.GetConstructor(
new[] { typeof(int) }).Invoke(
new object[] { oldList.Count });
249 foreach (var elem
in oldList)
257 throw new IOException($
"Invalid NBT payload type '{type}'");
259 throw new InvalidCastException($
"Unable to cast object of type '{tag.GetType()}' to type '{type}'");
static int GetPayloadId(Type t)
static object Deserialize(Type type, object tag)
static PayloadHandler GetHandler(int id)