Skip to content

Commit 7a00fc7

Browse files
authored
Merge pull request #23 from atenfyr/bgikil-fix
BaseGameInitialKnownItemList backwards compatibility hotfix
2 parents 87145c9 + 832aa77 commit 7a00fc7

File tree

2 files changed

+35
-16
lines changed

2 files changed

+35
-16
lines changed

about.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ accepted = [
1111
"CC0-1.0",
1212
"MPL-2.0",
1313
"BSD-3-Clause",
14-
"ISC"
14+
"ISC",
15+
"Unicode-3.0"
1516
]
1617

1718
[unreal_asset.clarify]

astro_mod_integrator/src/handlers/item_list_entries.rs

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,27 +41,45 @@ pub(crate) fn handle_item_list_entries(
4141
.as_object()
4242
.ok_or_else(|| io::Error::new(ErrorKind::Other, "Invalid item_list_entries"))?;
4343

44+
// we duplicate /Game/Items/ItemTypes/MasterItemList entries into /Game/Items/ItemTypes/BaseGameInitialKnownItemList, if the latter list is not specified
45+
// this provides backwards compatibility for older mods
46+
// this can just be suppressed by specifying an entry for /Game/Items/ItemTypes/BaseGameInitialKnownItemList in metadata
47+
let exists_bgikil = item_list_entries_map.contains_key("/Game/Items/ItemTypes/BaseGameInitialKnownItemList");
48+
4449
for (name, item_list_entries) in item_list_entries_map {
4550
let item_list_entries = item_list_entries
4651
.as_object()
4752
.ok_or_else(|| io::Error::new(ErrorKind::Other, "Invalid item_list_entries"))?;
48-
let new_items_entry = new_items.entry(name.clone()).or_insert_with(HashMap::new);
49-
50-
for (item_name, entries) in item_list_entries {
51-
let entries = entries
52-
.as_array()
53-
.ok_or_else(|| io::Error::new(ErrorKind::Other, "Invalid item_list_entries"))?;
54-
55-
let new_items_entry_map = new_items_entry
56-
.entry(item_name.clone())
57-
.or_insert_with(Vec::new);
58-
for entry in entries {
59-
let entry = entry.as_str().ok_or_else(|| {
60-
io::Error::new(ErrorKind::Other, "Invalid item_list_entries")
61-
})?;
62-
new_items_entry_map.push(String::from(entry));
53+
54+
{
55+
let new_items_entry = new_items.entry(name.clone()).or_insert_with(HashMap::new);
56+
57+
for (item_name, entries) in item_list_entries {
58+
let entries = entries
59+
.as_array()
60+
.ok_or_else(|| io::Error::new(ErrorKind::Other, "Invalid item_list_entries"))?;
61+
62+
let new_items_entry_map = new_items_entry
63+
.entry(item_name.clone())
64+
.or_insert_with(Vec::new);
65+
for entry in entries {
66+
let entry = entry.as_str().ok_or_else(|| {
67+
io::Error::new(ErrorKind::Other, "Invalid item_list_entries")
68+
})?;
69+
new_items_entry_map.push(String::from(entry));
70+
}
6371
}
6472
}
73+
74+
// duplicate to BaseGameInitialKnownItemList appropriately, if applicable
75+
if name == "/Game/Items/ItemTypes/MasterItemList" && !exists_bgikil {
76+
let orig_entry = new_items.entry(name.clone()).or_insert_with(HashMap::new).clone();
77+
78+
new_items
79+
.entry(String::from("/Game/Items/ItemTypes/BaseGameInitialKnownItemList"))
80+
.or_insert_with(HashMap::new)
81+
.extend(orig_entry);
82+
}
6583
}
6684
}
6785

0 commit comments

Comments
 (0)