MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / tryCreateItem

Method tryCreateItem

source/game/StarItemDatabase.cpp:510–540  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

508}
509
510ItemPtr 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
542ItemDatabase::ItemData const& ItemDatabase::itemData(String const& name) const {
543 if (auto p = m_items.ptr(name))

Callers

nothing calls this directly

Calls 10

errorFunction · 0.85
getStringMethod · 0.80
outputExceptionFunction · 0.50
nameMethod · 0.45
parametersMethod · 0.45
containsMethod · 0.45
getMethod · 0.45
toJsonMethod · 0.45
setCountMethod · 0.45
countMethod · 0.45

Tested by

no test coverage detected