public static ThingPayload FromThing(Thing prefab) { var item = new ThingPayload(); item.name = prefab.name; item.hash = prefab.GetPrefabHash; if (prefab is IQuantity quantity) { item.stackSize = (int)quantity.GetMaxQuantity; } else { item.stackSize = 1; } if (prefab is INutrition nutrition) { item.nutrition = Nutrition.FromINutrition(nutrition); } if (prefab is Ice ice) { item.meltable = Meltable.FromIce(ice); } if (prefab is ILogicable iLogicable) { item.logicTypes = LogicTypes.FromILogicable(iLogicable); } // TODO: Paintable item.temperatureLimits = TemperatureLimits.FromThing(prefab); if (prefab.Slots.Count > 0) { item.slots = SlotsFromThing(prefab); } if (prefab is Item thingItem) { item.createdReagents = ReagentsFromItem(thingItem); } if (prefab is Ore ore) { item.spawnedGases = SpawnedGasFromOre(ore); } if (prefab.HasModeState && prefab.ModeStrings != null) { item.modes = new List <string>(prefab.ModeStrings); } if (prefab is IConstructionKit kit) { item.constructs = ConstructsFromKit(kit); } item.flags = FlagsFromThing(prefab); return(item); }