private static (string, Dictionary <string, Object>) GetNbtVal(MemoryStream ms) { string name = ""; var nbt = new NbtReader(ms, false); var dictParams = new Dictionary <string, Object>(); nbt.ReadToFollowing(); if (!nbt.IsCompound) { throw new Exception("Could not read nbt"); } if (nbt.ReadToDescendant("name")) { name = nbt.ReadValueAs <string>(); nbt.ReadToNextSibling(); while (nbt.TagType != NbtTagType.End) { fNbt.Tags.NbtTag tag = nbt.ReadAsTag(); switch (tag.Name) { case "version": continue; case "states": IEnumerable <fNbt.Tags.NbtTag> enumTag = (IEnumerable <fNbt.Tags.NbtTag>)tag; foreach (var subtag in enumTag) { if ((subtag.Name == "direction") || (subtag.Name == "facing_direction") || (subtag.Name == "open_bit")) { int subtagvalue = GetTagValue(subtag); dictParams.Add(subtag.Name, subtagvalue); } if ((subtag.Name == "color") || (subtag.Name == "lever_direction")) { if (subtag.TagType == NbtTagType.String) { dictParams.Add(subtag.Name, subtag.StringValue); } } } break; case "val": int value = GetTagValue(tag); dictParams.Add(tag.Name, value); break; } } } while (!nbt.IsAtStreamEnd) { nbt.ReadToFollowing(); } return(name, dictParams); }
private static (string, Dictionary <string, Object>) GetNbtVal(MemoryStream ms) { string name = ""; var nbt = new NbtReader(ms, false); var dictParams = new Dictionary <string, Object>(); nbt.ReadToFollowing(); if (!nbt.IsCompound) { throw new Exception("Could not read nbt"); } if (nbt.ReadToDescendant("name")) { name = nbt.ReadValueAs <string>(); nbt.ReadToNextSibling(); while (nbt.TagType != NbtTagType.End) { fNbt.Tags.NbtTag tag = nbt.ReadAsTag(); switch (tag.Name) { case "version": continue; case "states": IEnumerable <fNbt.Tags.NbtTag> enumTag = (IEnumerable <fNbt.Tags.NbtTag>)tag; foreach (var subtag in enumTag) { if ((subtag.Name == "direction") || (subtag.Name == "facing_direction") || (subtag.Name == "open_bit") || (subtag.Name == "multi_face_direction_bits") || (subtag.Name == "stripped_bit") || (subtag.Name == "wall_post_bit") || (subtag.Name == "button_pressed_bit") || (subtag.Name == "rail_direction") || (subtag.Name == "rail_data_bit") || (subtag.Name == "bite_counter") || (subtag.Name == "respawn_anchor_charge") || (subtag.Name == "growth") || (subtag.Name == "powered_bit") || (subtag.Name == "upper_block_bit") || (subtag.Name == "hanging") || (subtag.Name == "coral_direction") || (subtag.Name == "coral_hang_type_bit") || (subtag.Name == "dead_bit") || (subtag.Name == "end_portal_eye_bit") || (subtag.Name == "head_piece_bit") || (subtag.Name == "age")) { int subtagvalue = GetTagValue(subtag); dictParams.Add(subtag.Name, subtagvalue); } if ((subtag.Name == "color") || (subtag.Name == "lever_direction") || (subtag.Name == "wall_block_type") || (subtag.Name == "pillar_axis") || (subtag.Name == "wood_type") || (subtag.Name == "old_log_type") || (subtag.Name == "new_log_type") || (subtag.Name == "old_leaf_type") || (subtag.Name == "new_leaf_type") || (subtag.Name == "sapling_type") || subtag.Name.StartsWith("wall_connection_type_") || (subtag.Name == "chisel_type") || subtag.Name.StartsWith("stone_slab_type") || (subtag.Name == "sponge_type") || (subtag.Name == "double_plant_type") || (subtag.Name == "flower_type") || (subtag.Name == "sand_type") || (subtag.Name == "stone_type") || (subtag.Name == "damage") || (subtag.Name == "dripstone_thickness") || (subtag.Name == "coral_color") || (subtag.Name == "monster_egg_stone_type") || (subtag.Name == "stone_brick_type")) { dictParams.Add(subtag.Name, subtag.StringValue); } } break; case "val": int value = GetTagValue(tag); dictParams.Add(tag.Name, value); break; } } } while (!nbt.IsAtStreamEnd) { nbt.ReadToFollowing(); } return(name, dictParams); }
private static int GetTagValue(fNbt.Tags.NbtTag tag) { switch (tag.TagType) { case NbtTagType.Byte: return(tag.ByteValue); case NbtTagType.Int: return(tag.IntValue); case NbtTagType.Short: return(tag.ShortValue); case NbtTagType.Long: return((int)tag.LongValue); default: return(0); } }