| 508 | } |
| 509 | |
| 510 | ItemPtr ItemDatabase::tryCreateItem(ItemDescriptor const& descriptor, Maybe<float> level, Maybe<uint64_t> seed, bool ignoreInvalid) const { |
| 511 | ItemPtr result; |
| 512 | String name = descriptor.name(); |
| 513 | Json parameters = descriptor.parameters(); |
| 514 | |
| 515 | try { |
| 516 | if ((name == "perfectlygenericitem") && parameters.contains("genericItemStorage")) { |
| 517 | Json storage = parameters.get("genericItemStorage"); |
| 518 | name = storage.getString("name"); |
| 519 | parameters = storage.get("parameters"); |
| 520 | } |
| 521 | result = createItem(m_items.get(name).type, itemConfig(name, parameters, level, seed)); |
| 522 | } |
| 523 | catch (std::exception const& e) { |
| 524 | if (descriptor.name() == "perfectlygenericitem") { |
| 525 | Logger::error("Could not re-instantiate item '{}'. {}", descriptor, outputException(e, false)); |
| 526 | result = createItem(m_items.get("perfectlygenericitem").type, itemConfig("perfectlygenericitem", descriptor.parameters(), level, seed)); |
| 527 | } else if (!ignoreInvalid) { |
| 528 | Logger::error("Could not instantiate item '{}'. {}", descriptor, outputException(e, false)); |
| 529 | result = createItem(m_items.get("perfectlygenericitem").type, itemConfig("perfectlygenericitem", JsonObject({ |
| 530 | {"genericItemStorage", descriptor.toJson()}, |
| 531 | {"shortdescription", descriptor.name()}, |
| 532 | {"description", "Reinstall the parent mod to return this item to normal\n^red;(to retain data, do not place as object)"} |
| 533 | }), {}, {})); |
| 534 | } else |
| 535 | throw e; |
| 536 | } |
| 537 | result->setCount(descriptor.count()); |
| 538 | |
| 539 | return result; |
| 540 | } |
| 541 | |
| 542 | ItemDatabase::ItemData const& ItemDatabase::itemData(String const& name) const { |
| 543 | if (auto p = m_items.ptr(name)) |
nothing calls this directly
no test coverage detected