This commit is contained in:
shenjack 2024-01-12 20:37:01 +08:00
parent 8a5e7a7bde
commit f558216d3c
Signed by: shenjack
GPG Key ID: 7B1134A979775551

View File

@ -1,3 +1,4 @@
use core::slice::SlicePattern;
use std::collections::HashMap; use std::collections::HashMap;
/// NBT 里除了字符串的长度量都是 i32 /// NBT 里除了字符串的长度量都是 i32
@ -83,10 +84,10 @@ impl NbtData {
self.head += 8; self.head += 8;
value value
} }
pub fn read_bytes(&mut self, length: usize) -> &[u8] { pub fn read_bytes(&mut self, length: usize) -> Vec<u8> {
let (_, data) = self.data.split_at_mut(self.head); let value = self.data[self.head..self.head + length].to_vec();
self.head += length; self.head += length;
data value
} }
} }
@ -164,7 +165,7 @@ impl<'value> Value<'value> {
pub fn read_string(data: &mut NbtData) -> Self { pub fn read_string(data: &mut NbtData) -> Self {
let length = data.read_short(); let length = data.read_short();
let value = data.read_bytes(length as usize); let value = data.read_bytes(length as usize);
Self::String(std::str::from_utf8(value).unwrap()) Self::String(std::str::from_utf8(value.as_slice()).unwrap())
} }
pub fn read_list(data: &mut NbtData) -> Self { pub fn read_list(data: &mut NbtData) -> Self {
// 内容类型 // 内容类型
@ -221,7 +222,7 @@ impl<'value> Value<'value> {
let length = data.read_int(); let length = data.read_int();
let value = data.read_bytes(length as usize); let value = data.read_bytes(length as usize);
list.push(RawData { list.push(RawData {
raw_data: value, raw_data: value.as_slice(),
length: length as usize, length: length as usize,
}); });
} }
@ -232,7 +233,7 @@ impl<'value> Value<'value> {
for _ in 0..length { for _ in 0..length {
let length = data.read_int(); let length = data.read_int();
let value = data.read_bytes(length as usize); let value = data.read_bytes(length as usize);
let value = std::str::from_utf8(value).unwrap(); let value = std::str::from_utf8(value.as_slice()).unwrap();
list.push(value); list.push(value);
} }
Self::List(ListContent::StringList(list)) Self::List(ListContent::StringList(list))