MCPcopy Create free account
hub / github.com/HairlessVillager/minecommit / flatten

Method flatten

minecommit/src/handler/gzip_nbt.rs:23–104  ·  view source on GitHub ↗
(self, save: &impl OdbReader, storage: &mut impl OdbWriter)

Source from the content-addressed store, hash-verified

21 }
22
23 fn flatten(self, save: &impl OdbReader, storage: &mut impl OdbWriter) -> Result<Vec<String>> {
24 let mut processed = Vec::new();
25 for pattern in GZIP_NBT_GLOB_PATTERNS {
26 for key in save.glob(pattern)? {
27 log::info!("Process gzip nbt file {key}");
28 let compressed = save.get(&key)?;
29 let mut decoder = GzDecoder::new(compressed.as_slice());
30 let decompressed = if decoder.header().is_some() {
31 let mut decompressed = Vec::new();
32 decoder
33 .read_to_end(&mut decompressed)
34 .context("failed to decompress gzip data")?;
35 decompressed
36 } else {
37 log::info!(
38 "Failed to decompress because header is invalid, treat as uncompressed"
39 );
40 compressed
41 };
42 let sorted = {
43 let nbt = load_nbt(Cursor::new(&decompressed))?;
44 let nbt = sort_nbt(nbt);
45
46 // Sort recipe book for player data
47 let nbt = {
48 let match_file_old = glob::Pattern::new("playerdata/*.dat")
49 .context("failed to compile glob pattern")?
50 .matches(&key);
51 let match_file_new = glob::Pattern::new("players/data/*.dat")
52 .context("failed to compile glob pattern")?
53 .matches(&key);
54 if match_file_old || match_file_new {
55 let name = nbt.name().to_owned();
56 let mut comp = nbt.as_compound();
57 sort_recipe_book(&mut comp);
58 BaseNbt::new(name, comp)
59 } else {
60 nbt
61 }
62 };
63
64 // Sort recipe book for player data in level.dat
65 let nbt = {
66 if key == "level.dat" || key == "level.dat_old" {
67 let name = nbt.name().to_owned();
68 let mut comp = nbt.as_compound();
69 if let Some(data) = comp.compound_mut("Data")
70 && let Some(player) = data.compound_mut("Player")
71 {
72 sort_recipe_book(player);
73 }
74 BaseNbt::new(name, comp)
75 } else {
76 nbt
77 }
78 };
79
80 // Sort player attributes in level.dat

Callers

nothing calls this directly

Calls 8

load_nbtFunction · 0.85
sort_nbtFunction · 0.85
sort_recipe_bookFunction · 0.85
sort_player_attributesFunction · 0.85
dump_nbtFunction · 0.85
globMethod · 0.45
getMethod · 0.45
putMethod · 0.45

Tested by

no test coverage detected