Custom Routines

Custom Routines

Warning

Custom routines are only available in AstroModLoader Classic v1.8.0.0 or later.

Note

This is an advanced topic, so it is preferred that you already have some experience modding Astroneer.

This guide is designed to help you create custom integrator routines. Custom routines are a relative new feature, and are only available in AstroModLoader Classic v1.8.0.0 or later.

Custom routines are segments of C# code that you can include with your mod to be executed at integration time. This allows your mod to make automatic dynamic modifications to game assets; this is similar to what can be done in UAssetGUI, but with improved power, stability, and precision. Custom routines can also read other mods’ metadata, meaning that you can define your own metadata entries and modify assets on behalf of other mods, if desired.

Custom routines are executed within a same-process sandbox layer and are also executed within an isolated low-integrity process in AstroModLoader Classic. This is intended to make it difficult to execute malicious code within a custom routine, but this also reduces the range of things that custom routines can do; for example, custom routines are not allowed to access the Internet, or modify arbitrary files on disk.

Prerequisites

To develop custom routines, you will need to have the following things installed:

  • Visual Studio 2022, version 17.8 or later

  • .NET SDK, 8.0 or later

Setup

First, you will need to download two DLL files, which we will later use in our project. You can download these files at the following links:

https://github.com/atenfyr/AstroModLoader-Classic/raw/refs/tags/v1.8.2.0/AstroModIntegrator/CustomRoutineDevKit/AstroModIntegrator.dll https://github.com/atenfyr/AstroModLoader-Classic/raw/refs/tags/v1.8.2.0/AstroModIntegrator/CustomRoutineDevKit/UAssetAPI.dll

Download these two files to whatever directory you would like.

Open Visual Studio and select “Create a new project”. Choose the “Class library” C# project template. Name your project “AMLCustomRoutines”, and target .NET 8.0.

Once you have created the new project, you should be met with a blank class and the Solution Explorer (if not, select View -> Solution Explorer). Under the “AMLCustomRoutines” project, right-click on “Dependencies” and click “Add Project Reference…”.

../_images/CR-1.png

Click on “Browse” and browse to the AstroModIntegrator.dll file that was downloaded earlier. Then, click on “Browse” again, and browse to the UAssetAPI.dll file that was downloaded earlier.

../_images/CR-2.png ../_images/CR-3.png

Ensure that both .dll files appear in the window and are checked. Then, press “OK”.

You are now ready to begin developing your custom routine. Copy and paste the example code below into your new Class1.cs file (or similarly named).

using AstroModIntegrator;
using UAssetAPI;
using UAssetAPI.ExportTypes;
using UAssetAPI.PropertyTypes.Objects;
using UAssetAPI.PropertyTypes.Structs;

namespace AMLCustomRoutines
{
    // This routine modifies the Floodlight to require organic instead of tungsten
    // You can name the class whatever you like, as long as it inherits from AstroModIntegrator.CustomRoutine
    public class Class1 : CustomRoutine
    {
        // RoutineID can be any string, it is used for display and identification purposes
        public override string RoutineID => "ExampleCustomRoutine1";
        // Set Enabled to true
        public override bool Enabled => true;
        // Set APIVersion to 1
        public override int APIVersion => 1;

        // This method will be executed by the mod integrator, after all main routines have finished
        public override void Execute(ICustomRoutineAPI api)
        {
            // we fetch the file with the package name "/Game/Items/ItemTypes/FloodLight_IT"
            // you can also pass a raw path here, e.g. "Astro/Content/Items/ItemTypes/FloodLight_IT.uasset"
            UAsset floodlightAsset = api.FindFile("/Game/Items/ItemTypes/FloodLight_IT");

            // we now use UAssetAPI to find ConstructionRecipe.Ingredients[0].ItemType in the Class Default Object export and modify it
            // you can try following along in UAssetGUI; for ItemType assets like this one, the Class Default Object is typically Export 2

            // we fetch the CDO and cast it to a NormalExport
            // a NormalExport is any export with typical tagged property data, like you might see in UAssetGUI (containing properties like ObjectProperty, FloatProperty, etc.)
            NormalExport exp = (NormalExport)(floodlightAsset.GetClassExport().ClassDefaultObject.ToExport(floodlightAsset));
            StructPropertyData constructionRecipe = exp["ConstructionRecipe"] as StructPropertyData; // ConstructionRecipe
            ArrayPropertyData ingredients = constructionRecipe["Ingredients"] as ArrayPropertyData; // ConstructionRecipe.Ingredients
            StructPropertyData ingredient0 = ingredients.Value[0] as StructPropertyData; // ConstructionRecipe.Ingredients[0]
            ObjectPropertyData ingredient0type = ingredient0["ItemType"] as ObjectPropertyData; // ConstructionRecipe.Ingredients[0].ItemType
            // we now set ConstructionRecipe.Ingredients[0].ItemType to a new resource
            // UAsset.AddItemTypeImport adds a new import into the asset, pointing to the item type at "/Game/Items/ItemTypes/Minables/Organic"
            // this will still work even if the resource already is imported by the asset
            ingredient0type.Value = floodlightAsset.AddItemTypeImport("/Game/Items/ItemTypes/Minables/Organic");

            // Save the asset to the final integrator pak
            api.AddFile("/Game/Items/ItemTypes/FloodLight_IT", floodlightAsset);

            // Log some text to the integrator log file (optional, but may help debugging)
            api.LogToDisk("Completed " + RoutineID);
        }
    }
}

This is a simple example of a custom routine that modifies the Floodlight to instead require 1 Organic to print instead of 1 Tungsten. If you are overwhelmed by this source code, don’t worry! This source code heavily relies on atenfyr’s UAssetAPI, which can take some time and exposure to get a hang of. You can find further documentation and examples on using UAssetAPI here: https://atenfyr.github.io/UAssetAPI/index.html

We can now build our custom routine. Select the “Release” configuration at the top of the Visual Studio window, right click on the Solution in the Solution Explorer, and click “Build Solution”.

Now, right click on the “AMLCustomRoutines” project in the Solution Explorer, and click “Open Folder in File Explorer”. Your output file, which is named AMLCustomRoutines.dll will be located within the bin\Release directory.

We will now package our custom routine into our mod’s .pak file. Create a new folder wherever you would like, and name the folder 000-MyCustomRoutine-0.1.0_P.

Copy your built AMLCustomRoutines.dll file into the new 000-MyCustomRoutine-0.1.0_P folder. You do not need to copy any of the other files that are located in the bin\Release directory.

Create a new metadata.json file in your 000-MyCustomRoutine-0.1.0_P folder with the following contents:

{
    "schema_version": 2,
    "name": "My Custom Routine",
    "mod_id": "MyCustomRoutine",
    "author": "YOUR_NAME",
    "description": "A tutorial mod, containing a custom routine!",
    "version": "0.1.0",
    "sync": "serverclient",
    "integrator": {
        "path_to_custom_routines_dll": "AMLCustomRoutines.dll"
    }
}

The path_to_custom_routines_dll field contains the raw path within your folder. If you would like, you can move this DLL to any folder within your pak file, and rename the file to whatever you would like, as long as the “path_to_custom_routines_dll” path is updated. If unspecified, this field defaults to “AMLCustomRoutines.dll”.

Now, package the 000-MyCustomRoutine-0.1.0_P folder. (If you followed the Setting up Modding Tools guide, you would do this by right-clicking on the folder and selecting “Send to” -> “Repack folder with repak”).

Load your new 000-MyCustomRoutine-0.1.0_P.pak file into AstroModLoader Classic. Ensure that “Enable custom integrator routines” is checked under “Settings…” within AstroModLoader Classic.

You can view the integrator’s output log by opening the %localappdata%\AstroModLoader\ModIntegrator.log file in any text editor. You should be able to see the following lines near the bottom of the log file, or similar:

[2026-01-10 22:11:10] Executing 1 custom routines
[2026-01-10 22:11:10] Executing custom routine ExampleCustomRoutine1 for mod MyCustomRoutine
[2026-01-10 22:11:10] [MyCustomRoutine] Completed ExampleCustomRoutine1
[2026-01-10 22:11:10] Writing final integrator .pak file

If everything went right, you should now be able to launch the game and see the modified recipe for the Floodlight.

../_images/CR-4.png

Advanced usage: ICustomRoutineAPI

You can interface with the mod integrator by executing methods implemented by the ICustomRoutineAPI interface, an instance of which is passed into the custom routine’s Execute method.

Most methods that construct UAsset instances or attempt to write to files are blocked by the sandbox, so this is the primary way that most custom routines should interface with the outside world. For example, if you want to include additional resource files with your mod, you may wish to package them in your .pak file and use the ICustomRoutineAPI.FindFileRaw(string target) method.

using System.Collections.Generic;
using UAssetAPI;
using UAssetAPI.UnrealTypes;

namespace AstroModIntegrator
{
    /// <summary>
    /// API for custom routines.
    /// Version 1.
    /// Custom routines always execute in the defined mod load order.
    /// </summary>
    public interface ICustomRoutineAPI
    {
        /// <summary>
        /// Find a specific asset.
        /// <para>This operation searches .pak files in the following order:</para>
        /// <para>1st. assets already added to the deployment pak</para>
        /// <para>2nd. mod assets</para>
        /// <para>3rd. base game assets</para>
        /// </summary>
        /// <param name="target">The package name or raw file path to fetch.</param>
        /// <returns>A UAsset containing the desired asset, or null if it could not be found.</returns>
        public UAsset FindFile(string target);

        /// <summary>
        /// Find a specific file.
        /// <para>This operation searches .pak files in the following order:</para>
        /// <para>1st. assets already added to the deployment pak</para>
        /// <para>2nd. mod assets</para>
        /// <para>3rd. base game assets</para>
        /// </summary>
        /// <param name="target">The raw file path to fetch.</param>
        /// <returns>A byte array containing the raw binary data of the file that was fetched, or null if it could not be found.</returns>
        public byte[] FindFileRaw(string target);

        /// <summary>
        /// Find a specific file.
        /// <para>This operation searches .pak files in the following order:</para>
        /// <para>1st. assets already added to the deployment pak</para>
        /// <para>2nd. mod assets</para>
        /// <para>3rd. base game assets</para>
        /// </summary>
        /// <param name="target">The raw file path to fetch.</param>
        /// <param name="engVer">An output variable containing the engine version of the asset, if appropriate.</param>
        /// <returns>A byte array containing the raw binary data of the file that was fetched, or null if it could not be found.</returns>
        public byte[] FindFileRaw(string target, out EngineVersion engVer);

        /// <summary>
        /// Add an asset to be deployed in the integrator pak. Overrides any asset at the same path that have already been added to the integrator pak.
        /// <para/>
        /// This method will immediately serialize the asset so that outAsset can be modified after the method is called without changing the file at outPath.
        /// </summary>
        /// <param name="outPath">The desired output package name or raw file path of the asset.</param>
        /// <param name="outAsset">The asset to deploy.</param>
        public void AddFile(string outPath, UAsset outAsset);

        /// <summary>
        /// Add a raw file to be deployed in the integrator pak. Overrides any file at the same path that have already been added to the integrator pak.
        /// </summary>
        /// <param name="outPath">The desired output raw file path of the file.</param>
        /// <param name="rawData">The raw binary data of the file to deploy.</param>
        public void AddFileRaw(string outPath, byte[] rawData);

        /// <summary>
        /// Get the current mod being integrated. May return null.
        /// </summary>
        /// <returns>The Metadata class corresponding to the current mod being integrated.</returns>
        public Metadata GetCurrentMod();

        /// <summary>
        /// Get a list of all mods being integrated. Will never return null.
        /// </summary>
        /// <returns>A list of Metadata classes corresponding to every mod being integrated.</returns>
        public IReadOnlyList<Metadata> GetAllMods();

        /// <summary>
        /// Get the mod corresponding to a specific custom routine. May return null.
        /// </summary>
        /// <param name="routine">The routine for which the current mod should be obtained.</param>
        /// <returns>The Metadata class corresponding to the desired mod.</returns>
        public Metadata GetModFromRoutine(CustomRoutine routine);

        /// <summary>
        /// Fetch a specific custom routine from its ID. May return null.
        /// </summary>
        /// <param name="routineID">The ID of the custom routine to fetch</param>
        /// <returns>The requested CustomRoutine, or null if it could not be found.</returns>
        public CustomRoutine GetCustomRoutineFromID(string routineID);

        /// <summary>
        /// Log some text to disk.
        /// </summary>
        /// <param name="text">The text to log to disk. The text will automatically be suffixed with a newline character.</param>
        /// <param name="prefixWithMod">Whether or not to prefix the message with the current mod name. Defaults to true.</param>
        /// <returns>Whether or not the operation succeeded.</returns>
        public bool LogToDisk(string text, bool prefixWithMod = true);

        /// <summary>
        /// Whether or not the custom routine should exit immediately. It is a good idea to check this method occasionally when executing large tasks.
        /// </summary>
        /// <returns>Whether or not the custom routine should exit immediately.</returns>
        public bool ShouldExitNow();
    }
}

Advanced usage: JSON

Below is an advanced example of a custom routine that defines a new metadata entry called trade_platform, under integrator within metadata.json. It makes extensive use of the Newtonsoft.Json library, which can be installed via NuGet. As of 2026-01-10, UAssetAPI uses Newtonsoft.Json version 13.0.3.

The custom routine is implemented using the ICustomRoutineAPI.GetAllMods() method, which returns a list of Metadata instances. Custom JSON entries will be entered into the ExtraFields property of the Metadata class and the IntegratorEntries struct.

ExampleCustomRoutineTradePlatform.cs
using AstroModIntegrator;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using UAssetAPI;
using UAssetAPI.ExportTypes;
using UAssetAPI.PropertyTypes.Objects;
using UAssetAPI.PropertyTypes.Structs;
using UAssetAPI.UnrealTypes;

namespace AMLCustomRoutines
{
    // This routine adds a new "trade_platform" entry in the "integrator" field of the metadata.json, for changing or adding Trade Platform trades
    // "trade_platform": { "Scrap": { "Compound": 1, "Resin": 2 }, "Astronium": {"Dynamite": 8, "Leveling Block": 0.5}, "/Game/Items/Snails/TerrariumSnail_Glacio_IT": {"Leveling Block": 1} }
    // references a fixed JSON list of item types; if an item is not available on that list, you can pass an item type's package path instead
    public class ExampleCustomRoutineTradePlatform : CustomRoutine
    {
        public override string RoutineID => "ExampleCustomRoutineTradePlatform";
        public override bool Enabled => true;
        public override int APIVersion => 1;
        public override bool RequestNoSandbox => false;
        // "RequestNoSandbox => true" disables the sandbox if and only if AstroModLoader/AstroModIntegrator is in the Debug_CustomRoutineTest configuration
        // this lets the debugger read symbols and stop at breakpoints, but also allows code that may be blocked if executed on the client
        // so, you should always test (and publish) your final routine with RequestNoSandbox = false

        private static readonly string LookupTableIT_JSON = "{\r\n  \"\\\"Bestefar\\\"\": \"/Game/Items/Snails/TerrariumSnail_Glacio_IT\",\r\n  \"\\\"Enoki\\\"\": \"/Game/Items/Snails/TerrariumSnail_Atrox_IT\",\r\n  \"\\\"Princess\\\"\": \"/Game/Items/Snails/TerrariumSnail_Vesania_IT\",\r\n  \"\\\"Rogal\\\"\": \"/Game/Items/Snails/TerrariumSnail_Novus_IT\",\r\n  \"\\\"Stilgar\\\"\": \"/Game/Items/Snails/TerrariumSnail_Calidor_IT\",\r\n  \"\\\"Sylvie\\\"\": \"/Game/Items/Snails/TerrariumSnail_Sylva_IT\",\r\n  \"\\\"Usagi\\\"\": \"/Game/Items/Snails/TerrariumSnail_Desolo_IT\",\r\n  \"“Misplaced” Cargo\": \"/Game/Items/ItemTypes/Events/EXO_Cares/ItemType_Wrecked_HazardousContainer_A\",\r\n  \"[[/-&>++/\\\\\": \"/Game/Items/ItemTypes/Missions/RiftAnchor_RailsA_IT\",\r\n  \"[]0]\\\\ ==~|}/! ]{ \\\\\": \"/Game/Items/ItemTypes/Missions/RiftAnchor_RailsC_IT\",\r\n  \"{(}]]~]]&/-% %/~^#)\": \"/Game/Items/ItemTypes/Missions/RiftAnchor_RailsB_IT\",\r\n  \"{*^]<}/?@(!]]\": \"/Game/Items/Snails/MissionItems/Snails_RiftAnchor_IT\",\r\n  \"</-/4|\\\\|4>\": \"/Game/Scenarios/Limited/2024_LTE_Spring/Spring_EventItem1_IT\",\r\n  \"Aeoluz\": [\r\n    \"/Game/U32_Expansion/Planets/GlitchPlanet/GlitchPlanet_IT\",\r\n    \"/Game/Items/ItemTypes/Intangibles/Planets/Aeoluz\"\r\n  ],\r\n  \"Aero\": \"/Game/Items/ItemTypes/CreativeDroneIT\",\r\n  \"Alignment Mod\": \"/Game/Items/ItemTypes/Components/Augment_FixedAlignment\",\r\n  \"Alpha Gateway Terminal Access Slot\": \"/Game/U32_Expansion/Puzzles/CounterhackKeyhole_BASE_IT\",\r\n  \"Alpha Rootkit\": \"/Game/U32_Expansion/Items/RootKit/GW_RootKit_Base_IT\",\r\n  \"Alpha Shard\": \"/Game/U32_Expansion/ProceduralGenerationAssets/PlacementActors/Gateways/ChamberRepair_Fragment_Base_IT\",\r\n  \"Alpha Storm Data\": \"/Game/U32_Expansion/Items/Resources/ResourceNugget_StormData_01_IT\",\r\n  \"Alpha Vault\": [\r\n    \"/Game/U32_Expansion/Puzzles/RootAccessVaultComplete_BASE_IT\",\r\n    \"/Game/U32_Expansion/Puzzles/RootAccessVault_BASE_IT\"\r\n  ],\r\n  \"Alpha Vault Key\": \"/Game/U32_Expansion/Puzzles/VaultPartBase_IT\",\r\n  \"Aluminum\": \"/Game/Items/ItemTypes/Intermediates/Aluminum\",\r\n  \"Aluminum Alloy\": \"/Game/Items/ItemTypes/Composites/AluminumAlloy\",\r\n  \"Amaize Seed\": \"/Game/Scenarios/Limited/2024_LTE_Fall/Fall_2024_Seed_Resipound_IT\",\r\n  \"Ammonium\": \"/Game/Items/ItemTypes/Minables/Ammonium\",\r\n  \"Arctichoke Seed\": \"/Game/U36_Expansion/Items/Seeds/ItemType_Seed_Harvestable_Artichoke\",\r\n  \"Argon\": \"/Game/Items/ItemTypes/Gases/Argon\",\r\n  \"Asteroid\": [\r\n    \"/Game/U36_Expansion/Planets/OrbitalPlatformMiniPlanet/IT_MiniPlanet_Asteroid\",\r\n    \"/Game/U36_Expansion/Planets/OrbitalPlatformMiniPlanet/IT_MiniPlanet_Asteroid_02\"\r\n  ],\r\n  \"Asteroid Field\": \"/Game/U36_Expansion/Planets/OrbitalPlatformMiniPlanet/IT_MiniPlanet_AsteroidField\",\r\n  \"Astral Figurine\": \"/Game/Items/ItemTypes/Limited/Holiday/Holiday_Figurine1_IT\",\r\n  \"Astronium\": \"/Game/Items/ItemTypes/Minables/Astronium\",\r\n  \"Atmospheric Condenser\": \"/Game/Items/ItemTypes/Components/AtmosphericCondenser\",\r\n  \"Atrox\": \"/Game/Items/ItemTypes/Intangibles/Planets/Radiated\",\r\n  \"Attactus Sample\": \"/Game/Items/ItemTypes/Researchables/Hazards/ItemType_Researchable_Shooter_02\",\r\n  \"Attapetrol\": \"/Game/Scenarios/Limited/2020_LTE_Halloween/ItemDrive_Resource2_2020_LTE_Halloween\",\r\n  \"Auto Arm\": \"/Game/Items/ItemTypes/Components/AutoCraneMedium_IT\",\r\n  \"Auto Extractor\": \"/Game/Items/ItemTypes/Components/ResourceExtractorLarge_IT\",\r\n  \"Auto-Fertilizer\": \"/Game/U36_Expansion/PROTO_ASSETS/Biodome/IT_Biodome_Fertiliser\",\r\n  \"Auto-Harvester\": \"/Game/U36_Expansion/PROTO_ASSETS/Biodome/IT_Biodome_Harvester\",\r\n  \"Auto-Planter\": \"/Game/U36_Expansion/PROTO_ASSETS/Biodome/IT_Biodome_SeedLauncher\",\r\n  \"Automaton 001\": \"/Game/Items/ItemTypes/HolidayLTE_2019/Holiday_Robot1_IT\",\r\n  \"Automaton 002\": \"/Game/Items/ItemTypes/HolidayLTE_2019/Holiday_Robot2_IT\",\r\n  \"Automaton 009\": \"/Game/Scenarios/Limited/2024_LTE_Anniversary/Anniversary_Item7_IT\",\r\n  \"Backpack Printer Plinth\": \"/Game/Items/ItemTypes/Components/CheatPlinthBackpackPrinter\",\r\n  \"Battery Sensor\": \"/Game/Items/ItemTypes/Actuators/Actuator_Battery_IT\",\r\n  \"Beach Ball\": \"/Game/Items/ItemTypes/Components/Object_Ball_Beach_LargeB_IT\",\r\n  \"Beacon\": \"/Game/Items/ItemTypes/Components/Beacon\",\r\n  \"Biodome\": \"/Game/U36_Expansion/PROTO_ASSETS/Biodome/IT_MS_Biodome\",\r\n  \"Biodome Expansion\": [\r\n    \"/Game/U36_Expansion/PROTO_ASSETS/Biodome/IT_Biodome_Expansion\",\r\n    \"/Game/U36_Expansion/PROTO_ASSETS/Biodome/IT_Biodome_ExpansionSlotIndicator\"\r\n  ],\r\n  \"Blue Firework\": \"/Game/Items/ItemTypes/Fireworks/ItemType_Firework_Rocket_Base_Blue\",\r\n  \"Boost Mod\": \"/Game/Items/ItemTypes/Components/Augment_PerformanceBoost\",\r\n  \"Bouncevine Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Bouncer_Vines_01\",\r\n  \"Bubbulb Seed\": \"/Game/U36_Expansion/Items/Seeds/ItemType_Seed_Harvestable_Bubbulb\",\r\n  \"Buggy\": \"/Game/Items/ItemTypes/Components/RoverT2\",\r\n  \"Burn Book\": \"/Game/U32_Expansion/Items/LynLogs/LynLog1_IT\",\r\n  \"Burrito?\": \"/Game/Scenarios/Limited/2024_LTE_Anniversary/Anniversary_Item5_IT\",\r\n  \"Button Repeater\": \"/Game/Items/ItemTypes/Actuators/Actuator_Button_IT\",\r\n  \"C.O.L.E.\": [\r\n    \"/Game/Vehicles/Rails/PackagedItem_T2_RailCar_EnginePersonal_IT\",\r\n    \"/Game/Vehicles/Rails/RailCar_Engine_Personal_ItemType\"\r\n  ],\r\n  \"Cable Splitter\": \"/Game/Items/ItemTypes/Components/Transformer_Tier1\",\r\n  \"Cactile Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Tappable_Arid_Cactus_a\",\r\n  \"Calidor\": \"/Game/Items/ItemTypes/Intangibles/Planets/Arid\",\r\n  \"Carbon\": \"/Game/Items/ItemTypes/Intermediates/Carbon\",\r\n  \"Cassiterite\": \"/Game/Items/ItemTypes/Minables/Cassiterite\",\r\n  \"Cauldrangea Roots\": [\r\n    \"/Game/Scenarios/Limited/2020_LTE_Halloween/Platform_2020_LTE_Halloween_T3x1_P4_ColorVar0_IT\",\r\n    \"/Game/Scenarios/Limited/2020_LTE_Halloween/Platform_2020_LTE_Halloween_T3x1_P4_IT\",\r\n    \"/Game/Scenarios/Limited/2021_LTE_Halloween/Platform_2021_LTE_Halloween_T3x1_P4_ColorVar1_IT\",\r\n    \"/Game/Scenarios/Limited/2021_LTE_Halloween/Platform_2021_LTE_Halloween_T3x1_P4_ColorVar2_IT\"\r\n  ],\r\n  \"Ceramic\": \"/Game/Items/ItemTypes/Intermediates/Ceramic\",\r\n  \"Chemistry Lab\": \"/Game/Items/ItemTypes/Components/ResourceCombiner_IT\",\r\n  \"Clay\": \"/Game/Items/ItemTypes/Minables/Clay\",\r\n  \"Coal\": \"/Game/Items/ItemTypes/Minables/Coal\",\r\n  \"Compound\": [\r\n    \"/Game/Items/ItemTypes/Minables/Compound\",\r\n    \"/Game/U36_Expansion/Planets/OrbitalPlatformMiniPlanet/IT_MiniPlanet_Compound\"\r\n  ],\r\n  \"Conepod Seed\": \"/Game/U36_Expansion/Items/Seeds/ItemType_Seed_Harvestable_Conepod\",\r\n  \"Construction Anchor Landing Pad\": \"/Game/U36_Expansion/PROTO_ASSETS/Wreck/IT_MS_AnchorLandingPad\",\r\n  \"Copper\": \"/Game/Items/ItemTypes/Intermediates/Copper\",\r\n  \"Cosmic Automaton\": \"/Game/Scenarios/Limited/2024_LTE_Anniversary/Anniversary_Item1_IT\",\r\n  \"Cosmic Bauble\": \"/Game/Items/ItemTypes/Limited/Holiday/Holiday_Bauble1_IT\",\r\n  \"Cosmic Squash\": \"/Game/Scenarios/Limited/2024_LTE_Anniversary/Anniversary_Item3_IT\",\r\n  \"Count Repeater\": \"/Game/Items/ItemTypes/Actuators/Actuator_Counter_IT\",\r\n  \"Counterhack Key Alpha\": \"/Game/U32_Expansion/Items/CounterHackKey/GW_CounterHackKey_Base_IT\",\r\n  \"Crane\": \"/Game/Items/ItemTypes/Components/Crane_Large\",\r\n  \"Crumbling Stone\": \"/Game/Items/ItemTypes/Destructibles/Destructible_PlacementActor_BoulderStone_IT\",\r\n  \"Cubic Object\": \"/Game/Items/ItemTypes/HolidayLTE_2019/Holiday_Block1_IT\",\r\n  \"Curious Item\": \"/Game/Items/ItemTypes/Collectibles/Skybreaker_IT\",\r\n  \"Curious Sturdysquash\": \"/Game/Scenarios/Limited/Pumpkins/Pumpkin_Offspring_01_ColorVar4_IT\",\r\n  \"Daggeroot Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Spiker_01\",\r\n  \"Data Circuit Model A 1/5\": \"/Game/Scenarios/Limited/2024_LTE_Anniversary/Anniversary_Lore1_IT\",\r\n  \"Debris Bundle\": \"/Game/Items/ItemTypes/Components/DebrisBundle-ItemType\",\r\n  \"Delay Repeater\": \"/Game/Items/ItemTypes/Actuators/Actuator_Timer_IT\",\r\n  \"Delta Storm Data\": \"/Game/U32_Expansion/Items/Resources/ResourceNugget_StormData_02_IT\",\r\n  \"Desolo\": \"/Game/Items/ItemTypes/Intangibles/Planets/Barren\",\r\n  \"Dewtrunk Seed\": \"/Game/U36_Expansion/Items/Seeds/ItemType_Seed_Harvestable_Dewtrunk\",\r\n  \"Diamond\": \"/Game/Items/ItemTypes/Composites/Diamond\",\r\n  \"Display Case\": [\r\n    \"/Game/U36_Expansion/MegaStructures/Museum/IT_MuseumDisplayCaseShelf_T1\",\r\n    \"/Game/U36_Expansion/MegaStructures/Museum/IT_MuseumDisplayCaseShelf_T2\"\r\n  ],\r\n  \"Display Case Platform\": \"/Game/U36_Expansion/MegaStructures/Museum/IT_MuseumDisplayCase\",\r\n  \"Distribution Launcher System (DLS) \": \"/Game/U36_Expansion/PROTO_ASSETS/Wreck/IT_MS_Wreck\",\r\n  \"DLS Construction Anchor\": \"/Game/U36_Expansion/MegaStructures/Anchor/IT_MS_Anchor\",\r\n  \"Donut\": \"/Game/U36_Expansion/Planets/OrbitalPlatformMiniPlanet/IT_MiniPlanet_Torus\",\r\n  \"Drill Head\": \"/Game/Items/ItemTypes/Components/DrillHead\",\r\n  \"Drill Mod 1\": \"/Game/Items/ItemTypes/Components/Augment_HardTerrain_1\",\r\n  \"Drill Mod 2\": \"/Game/Items/ItemTypes/Components/Augment_HardTerrain_2\",\r\n  \"Drill Mod 3\": \"/Game/Items/ItemTypes/Components/Augment_HardTerrain_3\",\r\n  \"Drill Strength 1\": \"/Game/Items/ItemTypes/Components/DrillHead_T2_Strength_1\",\r\n  \"Drill Strength 2\": \"/Game/Items/ItemTypes/Components/DrillHead_T2_Strength_2\",\r\n  \"Drill Strength 3\": \"/Game/Items/ItemTypes/Components/DrillHead_T2_Strength_3\",\r\n  \"Dropship\": \"/Game/Items/ItemTypes/Components/Dropship_IT\",\r\n  \"Dynamite\": \"/Game/Items/ItemTypes/Components/Dynamite\",\r\n  \"Empty Terrarium\": [\r\n    \"/Game/Items/Snails/MissionItems/TerrariumEmpty_Atrox_IT\",\r\n    \"/Game/Items/Snails/MissionItems/TerrariumEmpty_Calidor_IT\",\r\n    \"/Game/Items/Snails/MissionItems/TerrariumEmpty_Desolo_IT\",\r\n    \"/Game/Items/Snails/MissionItems/TerrariumEmpty_Glacio_IT\",\r\n    \"/Game/Items/Snails/MissionItems/TerrariumEmpty_Novus_IT\",\r\n    \"/Game/Items/Snails/MissionItems/TerrariumEmpty_Sylva_IT\",\r\n    \"/Game/Items/Snails/MissionItems/TerrariumEmpty_Vesania_IT\"\r\n  ],\r\n  \"EVA\": [\r\n    \"/Game/Items/Snails/TerrariumFox_EvaCM_IT\",\r\n    \"/Game/Items/Snails/TerrariumFox_Eva_IT\"\r\n  ],\r\n  \"EXO Cache\": [\r\n    \"/Game/Items/ItemTypes/Destructibles/Destructible_PlacementActor_DataCache_EXOChip_IT\",\r\n    \"/Game/Scenarios/Limited/2024_LTE_Anniversary/PlacementObjects/DataCaches/Destructible_PlacementActor_ALTE_DataCache_IT\"\r\n  ],\r\n  \"EXO Chip\": \"/Game/Items/ItemTypes/Collectibles/EXO_Chip_IT\",\r\n  \"EXO Dynamics Research Aid\": [\r\n    \"/Game/Items/ItemTypes/Puzzles/ItemType_Puzzlebox_Base_Consume\",\r\n    \"/Game/Items/ItemTypes/Puzzles/ItemType_Puzzlebox_Base_PowerLimit\",\r\n    \"/Game/Items/ItemTypes/Puzzles/ItemType_Puzzlebox_Base_PowerMax\"\r\n  ],\r\n  \"EXO Request Platform\": \"/Game/Items/ItemTypes/Components/ItemType_ExoRequestModule\",\r\n  \"Explosive Powder\": \"/Game/Items/ItemTypes/Composites/ExplosivePowder\",\r\n  \"Extra Large Curved Platform\": \"/Game/Items/ItemTypes/Components/platfrom_curve_t3x2_t2x1_P4_IT\",\r\n  \"Extra Large Platform A\": \"/Game/Items/ItemTypes/Components/Platform_Standard_T4x1_P8\",\r\n  \"Extra Large Platform B\": \"/Game/Items/ItemTypes/Components/Platform_Standard_T2x10_P4\",\r\n  \"Extra Large Platform C\": \"/Game/Items/ItemTypes/Components/Platform_Standard_T4x1_T3x2_P4\",\r\n  \"Extra Large Resource Canister\": \"/Game/Items/ItemTypes/Components/ExtraLargeResourceCanister_IT\",\r\n  \"Extra Large Shredder\": \"/Game/Items/ItemTypes/Components/Shredder_T4\",\r\n  \"Extra Large Storage\": \"/Game/Items/ItemTypes/Components/StorageRack_XL\",\r\n  \"Fault Finder\": [\r\n    \"/Game/Items/FaultFinder/FaultFinder_Align_IT\",\r\n    \"/Game/Items/FaultFinder/FaultFinder_Full_Align_IT\"\r\n  ],\r\n  \"Field Shelter\": \"/Game/Items/ItemTypes/Components/Shelter_T2_IT\",\r\n  \"Figurine Platform\": \"/Game/Items/ItemTypes/Components/Platform_Standard_T1x64\",\r\n  \"Finwheel Seed\": \"/Game/U36_Expansion/Items/Seeds/ItemType_Seed_Harvestable_FinWheel\",\r\n  \"Fireworks\": [\r\n    \"/Game/Items/ItemTypes/Fireworks\",\r\n    \"/Game/U36_Expansion/Items/Missions/IT_Firework_FinalReward\"\r\n  ],\r\n  \"Flat Platform\": \"/Game/U36_Expansion/Planets/OrbitalPlatformMiniPlanet/IT_MiniPlanet_FlatBox\",\r\n  \"Floodlight\": \"/Game/Items/ItemTypes/FloodLight_IT\",\r\n  \"Fractal Rose Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_FractalRose\",\r\n  \"Fuel Condenser\": \"/Game/Items/ItemTypes/Components/Condenser\",\r\n  \"Geometric Triptych\": [\r\n    \"/Game/Items/ItemTypes/GateTech/GatewayKey\",\r\n    \"/Game/Items/ItemTypes/GateTech/GatewayKey_Arid\",\r\n    \"/Game/Items/ItemTypes/GateTech/GatewayKey_Exotic\",\r\n    \"/Game/Items/ItemTypes/GateTech/GatewayKey_ExoticMoon\",\r\n    \"/Game/Items/ItemTypes/GateTech/GatewayKey_Radiated\",\r\n    \"/Game/Items/ItemTypes/GateTech/GatewayKey_Terran\",\r\n    \"/Game/Items/ItemTypes/GateTech/GatewayKey_TerranMoon\",\r\n    \"/Game/Items/ItemTypes/GateTech/GatewayKey_Tundra\"\r\n  ],\r\n  \"Geothermal\": \"/Game/Items/ItemTypes/Components/Geothermal\",\r\n  \"Glacio\": \"/Game/Items/ItemTypes/Intangibles/Planets/Tundra\",\r\n  \"Glass\": \"/Game/Items/ItemTypes/Intermediates/Glass\",\r\n  \"Glitch Portal\": \"/Game/GlitchwalkerPortal_IT\",\r\n  \"Glitch Portal Anchor\": \"/Game/U32_Expansion/Items/PortalSpawner/GlitchwalkerPortalSpawner_IT\",\r\n  \"Glitch Shelter\": [\r\n    \"/Game/U32_Expansion/Items/GlitchShelter/GlitchShelter_T4_Starter_Cosmetic_IT\",\r\n    \"/Game/U32_Expansion/Items/GlitchShelter/GlitchShelter_T4_Starter_IT\"\r\n  ],\r\n  \"Glowstick\": \"/Game/Items/ItemTypes/Components/ItemType_Glowstick_Single\",\r\n  \"Glowsticks\": \"/Game/Items/ItemTypes/Components/ItemType_Glowstick_Bundle\",\r\n  \"Graphene\": \"/Game/Items/ItemTypes/Composites/Graphene\",\r\n  \"Graphene Alloy\": \"/Game/Items/ItemTypes/Composites/GrapheneAlloy\",\r\n  \"Graphite\": \"/Game/Items/ItemTypes/Minables/Graphite\",\r\n  \"Gravity Globe\": \"/Game/Vehicles/GravitySphere/GravitySphere_Large_IT\",\r\n  \"Green Firework\": \"/Game/Items/ItemTypes/Fireworks/ItemType_Firework_Rocket_Base_Green\",\r\n  \"Helium\": \"/Game/Items/ItemTypes/Gases/Helium\",\r\n  \"Helmet Lava Lamp\": \"/Game/U36_Expansion/Items/Decorations/LavaLamp/IT_Deco_LavaLamp_Helmet\",\r\n  \"Hematite\": \"/Game/Items/ItemTypes/Minables/Hematite\",\r\n  \"Holographic Figurine\": \"/Game/Items/ItemTypes/Collectibles/EXO_Chesspiece_IT\",\r\n  \"Honeypot Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Tappable_Radiated_Tree_a\",\r\n  \"Hornstalk Seed\": \"/Game/U36_Expansion/Items/Seeds/ItemType_Seed_Harvestable_HornStalk\",\r\n  \"Hoverboard\": \"/Game/Vehicles/Hoverboard_IT\",\r\n  \"Hubble Space Telescope\": \"/Game/Items/ItemTypes/WandererProbes/WandererProbe_HST\",\r\n  \"Hybrid Rose Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_SuperRose\",\r\n  \"Hydrazine\": [\r\n    \"/Game/Items/ItemTypes/Intermediates/Fuel\",\r\n    \"/Game/Items/ItemTypes/Intermediates/FuelStored\"\r\n  ],\r\n  \"Hydrazine Catalyzer\": \"/Game/Items/ItemTypes/Components/CrystalRefinery\",\r\n  \"Hydrazine Jet Pack\": \"/Game/Items/ItemTypes/Components/HydrazineJetpack_IT\",\r\n  \"Hydrazine Thruster\": \"/Game/Items/ItemTypes/Components/Thruster\",\r\n  \"Hydrogen\": \"/Game/Items/ItemTypes/Gases/Hydrogen\",\r\n  \"Ice Chunk\": \"/Game/Items/ItemTypes/Destructibles/Destructible_PlacementActor_BoulderIce_IT\",\r\n  \"Icon Sign\": \"/Game/U36_Expansion/Items/IconSignPost/IT_IconSignPost\",\r\n  \"Ingredient Plinth\": \"/Game/Items/ItemTypes/Components/IngredientPlinth\",\r\n  \"Inhibitor Mod\": \"/Game/Items/ItemTypes/Components/Augment_Inhibitor\",\r\n  \"Intermodal Terminal\": \"/Game/U36_Expansion/MegaStructures/Logistics_Complex/IT_LogisticsComplex\",\r\n  \"Iron\": \"/Game/Items/ItemTypes/Intermediates/Iron\",\r\n  \"Jasper Bishop\": \"/Game/Items/ItemTypes/Collectibles/World_Chesspiece_Bishop02_IT\",\r\n  \"Jasper King\": \"/Game/Items/ItemTypes/Collectibles/World_Chesspiece_King02_IT\",\r\n  \"Jasper Knight\": \"/Game/Items/ItemTypes/Collectibles/World_Chesspiece_Knight02_IT\",\r\n  \"Jasper Pawn\": \"/Game/Items/ItemTypes/Collectibles/World_Chesspiece_Pawn02_IT\",\r\n  \"Jasper Queen\": \"/Game/Items/ItemTypes/Collectibles/World_Chesspiece_Queen02_IT\",\r\n  \"Jasper Rook\": \"/Game/Items/ItemTypes/Collectibles/World_Chesspiece_Rook02_IT\",\r\n  \"Kepler Space Telescope\": \"/Game/Items/ItemTypes/WandererProbes/WandererProbe_KST\",\r\n  \"Knobbly Sturdysquash\": \"/Game/Scenarios/Limited/Pumpkins/Pumpkin_Mega_IT\",\r\n  \"Landing Pad\": \"/Game/Items/ItemTypes/Components/DeployableLandingPad\",\r\n  \"Lapis Bishop\": \"/Game/Items/ItemTypes/Collectibles/World_Chesspiece_Bishop01_IT\",\r\n  \"Lapis King\": \"/Game/Items/ItemTypes/Collectibles/World_Chesspiece_King01_IT\",\r\n  \"Lapis Knight\": \"/Game/Items/ItemTypes/Collectibles/World_Chesspiece_Knight01_IT\",\r\n  \"Lapis Pawn\": \"/Game/Items/ItemTypes/Collectibles/World_Chesspiece_Pawn01_IT\",\r\n  \"Lapis Queen\": \"/Game/Items/ItemTypes/Collectibles/World_Chesspiece_Queen01_IT\",\r\n  \"Lapis Rook\": \"/Game/Items/ItemTypes/Collectibles/World_Chesspiece_Rook01_IT\",\r\n  \"Large Active Storage\": \"/Game/Items/ItemTypes/Components/Storage_rack_T2_T1x15_a1x16_IT\",\r\n  \"Large Battery\": \"/Game/Items/ItemTypes/Components/Battery_RealLarge\",\r\n  \"Large Canister Ingredient Plinth\": \"/Game/Items/ItemTypes/Components/LargeResourceCanisterPlinth_IT\",\r\n  \"Large Curved Platform\": \"/Game/Items/ItemTypes/Components/Platfrom_Curve_T3x1P4_IT\",\r\n  \"Large Extended Platform\": \"/Game/Items/ItemTypes/Components/Platform_Long_T2x2_P6_IT\",\r\n  \"Large Fluid & Soil Canister\": [\r\n    \"/Game/Items/ItemTypes/Components/LiquidCanister_Fixed_T3_IT\",\r\n    \"/Game/Items/ItemTypes/Components/LiquidCanister_T3_IT\"\r\n  ],\r\n  \"Large Fog Horn\": \"/Game/Items/ItemTypes/Components/Horn_T3-01_IT\",\r\n  \"Large Gas Canister\": \"/Game/Items/ItemTypes/Components/LargeGasCanister_IT\",\r\n  \"Large Platform A\": \"/Game/Items/ItemTypes/Components/Platform_Standard_T3x1_P4\",\r\n  \"Large Platform B\": [\r\n    \"/Game/Items/ItemTypes/Components/Breadboard_Tier3\",\r\n    \"/Game/Items/ItemTypes/POI_Elements/ItemType_SemiWrecked_T3_Platform_Base\"\r\n  ],\r\n  \"Large Platform C\": \"/Game/Items/ItemTypes/Components/Platform_Standard_T3x1_T1x20_P4\",\r\n  \"Large Print Filter\": \"/Game/Items/ItemTypes/Components/PrinterCatagoryFilter_Plinth_T3_IT\",\r\n  \"Large Printer\": \"/Game/Items/ItemTypes/Components/BreadboardPrinter_T3\",\r\n  \"Large Printer Plinth\": \"/Game/Items/ItemTypes/Components/CheatPlinthT3Printer\",\r\n  \"Large Resource Canister\": \"/Game/Items/ItemTypes/Components/LargeResourceCanister_IT\",\r\n  \"Large Rover\": \"/Game/Items/ItemTypes/Components/Rover_XL\",\r\n  \"Large Rover Seat\": \"/Game/Items/ItemTypes/Components/Seat_Large\",\r\n  \"Large Rover Seat B\": \"/Game/Items/ItemTypes/Components/Seat_Large_B\",\r\n  \"Large Sensor Hoop A\": \"/Game/Items/ItemTypes/Components/Platform_Ring_t1x6_p2\",\r\n  \"Large Sensor Hoop B\": \"/Game/Items/ItemTypes/Components/Platform_Ring_t1x6_p4\",\r\n  \"Large Sensor Ring\": \"/Game/Items/ItemTypes/Components/Storage_Ring_T2_T1x6\",\r\n  \"Large Shredder\": \"/Game/Items/ItemTypes/Components/Shredder_T3\",\r\n  \"Large Shuttle\": \"/Game/Items/ItemTypes/Components/Shuttle_Large\",\r\n  \"Large Shuttle Seat\": \"/Game/Items/ItemTypes/Components/Seat_Large_SS\",\r\n  \"Large Solar Panel\": \"/Game/Items/ItemTypes/Solar_Large_IT\",\r\n  \"Large Stacked Platform\": \"/Game/Items/ItemTypes/Components/Platform_Standard_T3x1x2_IT\",\r\n  \"Large Starship Horn\": \"/Game/Items/ItemTypes/Components/Horn_T3-02_IT\",\r\n  \"Large Storage\": \"/Game/Items/ItemTypes/Components/StorageRack_Large\",\r\n  \"Large Storage Silo A\": \"/Game/Items/ItemTypes/Components/Storage_Tall_T3_T2x8_IT\",\r\n  \"Large Storage Silo B\": \"/Game/Items/ItemTypes/Components/Storage_Tall_T3_T2x12_IT\",\r\n  \"Large T-Platform\": \"/Game/Items/ItemTypes/Components/Platform_T_T3x2_IT\",\r\n  \"Large Wind Turbine\": \"/Game/Items/ItemTypes/Components/Wind_Large_IT\",\r\n  \"Lashleaf Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Bouncer_Tongue_01\",\r\n  \"Laterite\": \"/Game/Items/ItemTypes/Minables/Laterite\",\r\n  \"Lava Lamp\": \"/Game/U36_Expansion/Items/Decorations/LavaLamp/IT_Deco_LavaLamp\",\r\n  \"Leek\": \"/Game/Scenarios/Limited/2024_LTE_Anniversary/Anniversary_Ingredient2_IT\",\r\n  \"Leisurely Cauldrangea\": \"/Game/Scenarios/Limited/2020_LTE_Halloween/ItemConverter_2020_LTE_Halloween_IT\",\r\n  \"Leveling Block\": \"/Game/Items/ItemTypes/Components/LevelingBlock\",\r\n  \"Lithium\": \"/Game/Items/ItemTypes/Minables/Lithium\",\r\n  \"Logistics Depot: Calidor\": \"/Game/Items/ItemTypes/Missions/RailDepotB_IT\",\r\n  \"Logistics Depot: Glacio\": \"/Game/Items/ItemTypes/Missions/RailDepotA_IT\",\r\n  \"Logistics Depot: Sylva\": \"/Game/Items/ItemTypes/Missions/RailDepotC_IT\",\r\n  \"LRD Zebra\": \"/Game/Items/ItemTypes/ItemType_ZebraBall\",\r\n  \"Malachite\": \"/Game/Items/ItemTypes/Minables/Malachite\",\r\n  \"Mariner X Probe\": \"/Game/Items/ItemTypes/WandererProbes/WandererProbe_MX\",\r\n  \"MAT\": [\r\n    \"/Game/Items/ItemTypes/Puzzles/PuzzleCommTower_Request_BASE_IT\",\r\n    \"/Game/Items/ItemTypes/Puzzles/PuzzleCommTower_Request_MissionA_IT\",\r\n    \"/Game/Items/ItemTypes/Puzzles/PuzzleCommTower_Request_MissionB_IT\"\r\n  ],\r\n  \"Medium Battery\": \"/Game/Items/ItemTypes/Components/Battery_Large\",\r\n  \"Medium Buggy Horn\": \"/Game/Items/ItemTypes/Components/Horn_T2-01_IT\",\r\n  \"Medium Canister Ingredient Plinth\": \"/Game/Items/ItemTypes/Components/MediumResourceCanisterPlinth_IT\",\r\n  \"Medium Fluid & Soil Canister\": \"/Game/Items/ItemTypes/Components/LiquidCanister_T2_IT\",\r\n  \"Medium Gas Canister\": \"/Game/Items/ItemTypes/Components/MediumGasCanister_IT\",\r\n  \"Medium Generator\": \"/Game/Items/ItemTypes/Components/Generator\",\r\n  \"Medium Platform A\": \"/Game/Items/ItemTypes/Components/Platform_Standard_T2x1_P4\",\r\n  \"Medium Platform B\": \"/Game/Items/ItemTypes/Components/Breadboard_Tier2\",\r\n  \"Medium Platform C\": \"/Game/Items/ItemTypes/Components/Platform_Standard_T2x1_P3_IT\",\r\n  \"Medium Print Filter\": \"/Game/Items/ItemTypes/Components/PrinterCatagoryFilter_Plinth_T2_IT\",\r\n  \"Medium Printer\": \"/Game/Items/ItemTypes/Components/BreadboardPrinter_T2\",\r\n  \"Medium Printer Plinth\": \"/Game/Items/ItemTypes/Components/CheatPlinthT2Printer\",\r\n  \"Medium Resource Canister\": \"/Game/Items/ItemTypes/Components/MediumResourceCanister_IT\",\r\n  \"Medium Rover\": \"/Game/Items/ItemTypes/Components/Rover_Large\",\r\n  \"Medium Sensor Arch\": \"/Game/Items/ItemTypes/Components/Platform_Arch_t1x6_IT\",\r\n  \"Medium Shredder\": \"/Game/Items/ItemTypes/Components/Shredder_T2\",\r\n  \"Medium Shuttle\": \"/Game/Items/ItemTypes/Components/Shuttle\",\r\n  \"Medium Solar Panel\": \"/Game/Items/ItemTypes/Components/Solar_Medium\",\r\n  \"Medium Stacked Platform\": \"/Game/Items/ItemTypes/Components/Platform_Standard_T2x1x2_IT\",\r\n  \"Medium Storage\": \"/Game/Items/ItemTypes/Components/StorageRack_Medium\",\r\n  \"Medium Storage Silo\": \"/Game/Items/ItemTypes/Components/Storage_Tall_T2_T1x24_IT\",\r\n  \"Medium T-Platform\": \"/Game/Items/ItemTypes/Components/Platform_T_T2x2_IT\",\r\n  \"Medium Truck Horn\": \"/Game/Items/ItemTypes/Components/Horn_T2-02_IT\",\r\n  \"Medium Wind Turbine\": \"/Game/Items/ItemTypes/Components/Wind_Medium\",\r\n  \"Mega-Arctichoke Seed\": \"/Game/U36_Expansion/Items/Seeds/MegaSeeds/ItemType_Seed_Harvestable_Artichoke_Mega\",\r\n  \"Mega-Bubbulb Seed\": \"/Game/U36_Expansion/Items/Seeds/MegaSeeds/ItemType_Seed_Harvestable_Bubbulb_Mega\",\r\n  \"Mega-Conepod Seed\": \"/Game/U36_Expansion/Items/Seeds/MegaSeeds/ItemType_Seed_Harvestable_Conepod_Mega\",\r\n  \"Mega-Deconstructor\": \"/Game/U36_Expansion/Items/Megadeconstructor/IT_MegastructureDeconstructor\",\r\n  \"Mega-Dewtrunk Seed\": \"/Game/U36_Expansion/Items/Seeds/MegaSeeds/ItemType_Seed_Harvestable_Dewtrunk_Mega\",\r\n  \"Mega-Finwheel Seed\": \"/Game/U36_Expansion/Items/Seeds/MegaSeeds/ItemType_Seed_Harvestable_FinWheel_Mega\",\r\n  \"Mega-Hornstalk Seed\": \"/Game/U36_Expansion/Items/Seeds/MegaSeeds/ItemType_Seed_Harvestable_HornStalk_Mega\",\r\n  \"Mega-Mini Asteroid Simulator Control Panel\": \"/Game/U36_Expansion/MegaStructures/OrbitalPlatform/ControlPanels/IT_MiniPlanetSelector\",\r\n  \"Mega-Mini Training Shuttle\": \"/Game/U36_Expansion/Items/Shuttle/IT_PersonalBeepyShuttle\",\r\n  \"Mega-Nubcap Seed\": \"/Game/U36_Expansion/Items/Seeds/MegaSeeds/ItemType_Seed_Harvestable_Nubcap_Mega\",\r\n  \"Mega-Oxygenator\": \"/Game/U36_Expansion/PROTO_ASSETS/Biodome/IT_Biodome_OxygenExtractor\",\r\n  \"Mega-Printer Drone\": \"/Game/U36_Expansion/MegaStructures/Anchor/IT_MS_Anchor_DronePrinter\",\r\n  \"Mega-Printer Platform\": \"/Game/U36_Expansion/MegaStructures/Anchor/IT_MS_Anchor_BuildingPlatform\",\r\n  \"Mega-Terrain Platform\": \"/Game/U36_Expansion/MegaStructures/OrbitalPlatform/IT_OrbitalPlatform_TrueFlatPlatform\",\r\n  \"Megastructure Component Printer\": \"/Game/U36_Expansion/MegaStructures/Vending_Machine/IT_VendingMachine\",\r\n  \"Melodic Mushroom\": \"/Game/U36_Expansion/Items/MusicalMushroom/IT_MusicalMushroom\",\r\n  \"Methane\": \"/Game/Items/ItemTypes/Gases/Methane\",\r\n  \"Mineral Extractor\": \"/Game/Items/ItemTypes/Components/SedimentFilter\",\r\n  \"Model Planet\": \"/Game/U36_Expansion/Items/Decorations/globes/IT_Deco_ModelPlanet\",\r\n  \"Museum\": \"/Game/U36_Expansion/MegaStructures/Museum/IT_Museum\",\r\n  \"Mutant Boomalloon Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Harmless_ProxPopper\",\r\n  \"Mutant Elegant Spewflower Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Harmless_Spewer02\",\r\n  \"Mutant Hissbine Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Harmless_Gasbag\",\r\n  \"Mutant Noxious Cataplant Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Harmless_Lobber\",\r\n  \"Mutant Noxious Spewflower Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Harmless_Spewer01\",\r\n  \"Mutant Spiny Attactus Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Harmless_Shooter\",\r\n  \"Mutant Volatile Attactus Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Harmless_ExplodeShooter\",\r\n  \"Mutant Volatile Cataplant Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Harmless_ExplodeLobber\",\r\n  \"Nanocarbon Alloy\": \"/Game/Items/ItemTypes/Composites/NanoCarbonAlloy\",\r\n  \"Narrow Mod\": \"/Game/Items/ItemTypes/Components/Augment_PrecisionBrush\",\r\n  \"New Horizons Probe\": \"/Game/Items/ItemTypes/WandererProbes/WandererProbe_NH\",\r\n  \"Nitrogen\": \"/Game/Items/ItemTypes/Gases/Nitrogen\",\r\n  \"Novus\": \"/Game/Items/ItemTypes/Intangibles/Planets/Exotic_Moon_IT\",\r\n  \"Noxomaton 002\": \"/Game/Scenarios/Limited/2024_LTE_Anniversary/Anniversary_Item4_IT\",\r\n  \"Noxothane\": \"/Game/Scenarios/Limited/2020_LTE_Halloween/ItemDrive_Resource3_2020_LTE_Halloween\",\r\n  \"Nubcap Seed\": \"/Game/U36_Expansion/Items/Seeds/ItemType_Seed_Harvestable_Nubcap\",\r\n  \"Omnugget\": \"/Game/Scenarios/Limited/2024_LTE_Anniversary/Anniversary_Item6_IT\",\r\n  \"Orange Firework\": \"/Game/Items/ItemTypes/Fireworks/ItemType_Firework_Rocket_Base_Orange\",\r\n  \"Orbital Platform\": \"/Game/U36_Expansion/Items/TEMP/IT_OPSpawner\",\r\n  \"Orbital Platform Launch Tube\": \"/Game/U36_Expansion/PROTO_ASSETS/Wreck/IT_MS_WreckOPDoor\",\r\n  \"Orbital Platform Stage 1 Package\": \"/Game/U36_Expansion/MegaStructures/OrbitalPlatform/IT_OrbitalPlatform_Package1\",\r\n  \"Orbital Platform Stage 2 Package\": \"/Game/U36_Expansion/MegaStructures/OrbitalPlatform/IT_OrbitalPlatform_Package2\",\r\n  \"Orbital Platform Stage 3 Package\": \"/Game/U36_Expansion/MegaStructures/OrbitalPlatform/IT_OrbitalPlatform_Package3\",\r\n  \"Organic\": \"/Game/Items/ItemTypes/Minables/Organic\",\r\n  \"Oxygen\": [\r\n    \"/Game/Items/ItemTypes/Intermediates/Stored_Oxygen\",\r\n    \"/Game/Items/ItemTypes/Minables/Oxygen\"\r\n  ],\r\n  \"Oxygen Filters\": \"/Game/Items/ItemTypes/Components/Filter\",\r\n  \"Oxygen Tank\": \"/Game/Items/ItemTypes/Components/Oxygen_Tank_Small\",\r\n  \"Oxygenator\": [\r\n    \"/Game/Items/ItemTypes/Components/Oxygenator_T2\",\r\n    \"/Game/Items/ItemTypes/Components/Oxygenator_T2_Starter_IT\"\r\n  ],\r\n  \"Packager\": \"/Game/Items/ItemTypes/Components/Repackager_T1\",\r\n  \"Paver\": \"/Game/Items/ItemTypes/Components/Paver_T2_IT\",\r\n  \"Pioneer I Spacecraft\": \"/Game/Items/ItemTypes/WandererProbes/WandererProbe_P1\",\r\n  \"Plastic\": \"/Game/Items/ItemTypes/Intermediates/Plastic\",\r\n  \"Plumefir Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Tappable_Terran_Tree_a\",\r\n  \"Plump Sturdysquash\": \"/Game/Scenarios/Limited/Pumpkins/Pumpkin_Offspring_03_IT\",\r\n  \"Plump Sturdysquash Seed\": \"/Game/Scenarios/Limited/Pumpkins/Pumpkin_Seed_Offspring_03_IT\",\r\n  \"Popcoral Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Popper_01\",\r\n  \"Portable D-Cipher\": \"/Game/U32_Expansion/Items/GlitchShelter/DCipher/GW_DCipher_IT\",\r\n  \"Portable Oxygenator\": \"/Game/Items/ItemTypes/Components/Oxygenator_T1\",\r\n  \"Portable Smelting Furnace\": \"/Game/Items/ItemTypes/Components/SmelterSmall\",\r\n  \"Power\": \"/Game/Items/ItemTypes/Minables/Power\",\r\n  \"Power Cells\": \"/Game/Items/ItemTypes/Components/Power_Cells\",\r\n  \"Power Extender\": \"/Game/Items/ItemTypes/Components/Extender_Tier1\",\r\n  \"Power Extenders\": \"/Game/Items/ItemTypes/Components/ExtenderBundle\",\r\n  \"Power Sensor\": \"/Game/Items/ItemTypes/Actuators/Actuator_Power_IT\",\r\n  \"Power Switch\": \"/Game/Items/ItemTypes/Power_Items/PowerSwitch_IT\",\r\n  \"Pricklepod Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Tappable_Tundra_a\",\r\n  \"Probe Scanner\": \"/Game/Items/ItemTypes/Components/ItemType_Scanner_Probe\",\r\n  \"Proximity Repeater\": \"/Game/Items/ItemTypes/Actuators/Actuator_Proximity_IT\",\r\n  \"PUM-KN Shelter\": \"/Game/Scenarios/Limited/2020_LTE_Halloween/Shelter_T4_Cosmetic_A_IT\",\r\n  \"QT-RTG\": \"/Game/Items/ItemTypes/Components/RTG_T1_IT\",\r\n  \"Quartz\": \"/Game/Items/ItemTypes/Minables/Quartz\",\r\n  \"Rail Car\": \"/Game/Vehicles/Rails/RailCar_ItemType\",\r\n  \"Rail Engine\": \"/Game/Vehicles/Rails/RailCar_Engine_ItemType\",\r\n  \"Rail Junction\": \"/Game/Vehicles/Rails/RailPost_Junction_ItemType\",\r\n  \"Rail Junction Bundle\": \"/Game/Vehicles/Rails/RailPost_JunctionBundle_ItemType\",\r\n  \"Rail Post\": \"/Game/Vehicles/Rails/RailPost_Short_ItemType\",\r\n  \"Rail Post Bundle\": \"/Game/Vehicles/Rails/RailPost_ShortBundle_ItemType\",\r\n  \"Rail Station\": \"/Game/Vehicles/Rails/RailPost_Station_ItemType\",\r\n  \"Recreational Sphere\": \"/Game/Items/ItemTypes/Components/Object_Ball_Beach_LargeA_IT\",\r\n  \"Red Firework\": \"/Game/Items/ItemTypes/Fireworks/ItemType_Firework_Rocket_Base_Red\",\r\n  \"Research\": \"/Game/UX/Research_Indicator\",\r\n  \"Research Chamber\": \"/Game/Items/ItemTypes/Components/ResearchModule_Tier2\",\r\n  \"Research Station\": \"/Game/Items/ItemTypes/Components/Research_Station\",\r\n  \"Resin\": [\r\n    \"/Game/Items/ItemTypes/Minables/Resin\",\r\n    \"/Game/U36_Expansion/Planets/OrbitalPlatformMiniPlanet/IT_MiniPlanet_Resin\"\r\n  ],\r\n  \"Resipound\": \"/Game/Scenarios/Limited/2024_LTE_Anniversary/Anniversary_Ingredient1_IT\",\r\n  \"Resource Pod\": \"/Game/U36_Expansion/PROTO_ASSETS/Biodome/IT_Biodome_ResourceStorage\",\r\n  \"Robo Bonsai\": \"/Game/U36_Expansion/Items/Decorations/RoboBonsai/IT_Deco_Bonsai\",\r\n  \"Rosin\": \"/Game/Items/ItemTypes/Intermediates/Rosin\",\r\n  \"Round Sturdysquash\": \"/Game/Scenarios/Limited/Pumpkins/Pumpkin_Offspring_01_IT\",\r\n  \"Rover Seat\": \"/Game/Items/ItemTypes/Components/Seat_Medium\",\r\n  \"RTG\": \"/Game/Items/ItemTypes/Components/RTG_T2\",\r\n  \"Rubber\": \"/Game/Items/ItemTypes/Composites/Rubber\",\r\n  \"RUBY\": \"/Game/U32_Expansion/Items/Ruby/Ruby_IT\",\r\n  \"S.O.U.P.\": \"/Game/Items/ItemTypes/Intermediates/Fall_Biofuel2024_IT\",\r\n  \"Scrap\": \"/Game/Items/ItemTypes/Minables/Scrap\",\r\n  \"Seed\": \"/Game/Items/ItemTypes/Components/Spiker_Seed\",\r\n  \"Shell\": \"/Game/Items/Snails/ShellSnail_BASE_IT\",\r\n  \"Shelter\": [\r\n    \"/Game/Items/ItemTypes/Components/Shelter_T4\",\r\n    \"/Game/Items/ItemTypes/Components/Shelter_T4_Starter\"\r\n  ],\r\n  \"Shiny Byte\": \"/Game/U36_Expansion/Items/Missions/IT_GoldendISK\",\r\n  \"Shiny Resource Nugget\": \"/Game/U36_Expansion/Items/Missions/IT_GoldenNugget\",\r\n  \"Shiny Seed\": \"/Game/U36_Expansion/Items/Missions/IT_GoldenSeed\",\r\n  \"Ship in a Bottle\": \"/Game/U36_Expansion/Items/Decorations/BottledItems/IT_Deco_BottleShip\",\r\n  \"Shuttle Seat\": \"/Game/Items/ItemTypes/Components/Seat_Medium_SS\",\r\n  \"Silicone\": \"/Game/Items/ItemTypes/Composites/Silicone\",\r\n  \"Simulated Aquarium\": \"/Game/U36_Expansion/Items/Decorations/FakeAquarium/IT_Deco_FakeAquarium\",\r\n  \"Site Pylon\": [\r\n    \"/Game/Items/ItemTypes/Missions/PlacementActor_RailItem_PylonA2_IT\",\r\n    \"/Game/Items/ItemTypes/Missions/PlacementActor_RailItem_PylonA_IT\",\r\n    \"/Game/Items/ItemTypes/Missions/PlacementActor_RailItem_PylonB2_IT\",\r\n    \"/Game/Items/ItemTypes/Missions/PlacementActor_RailItem_PylonB_IT\"\r\n  ],\r\n  \"Small Battery\": [\r\n    \"/Game/Items/ItemTypes/Components/Battery\",\r\n    \"/Game/U36_Expansion/Items/Missions/IT_GoldenBattery\"\r\n  ],\r\n  \"Small Camera\": \"/Game/Items/ItemTypes/Components/ItemType_Camera_T1\",\r\n  \"Small Canister\": \"/Game/Items/ItemTypes/Minables/LiquidCanister\",\r\n  \"Small Generator\": \"/Game/Items/ItemTypes/Components/Generator_Small\",\r\n  \"Small Geothermal\": \"/Game/Items/ItemTypes/Components/Geothermal_Small\",\r\n  \"Small Print Filter\": \"/Game/Items/ItemTypes/Components/PrinterCatagoryFilter_Plinth_T1_IT\",\r\n  \"Small Printer\": \"/Game/Items/ItemTypes/Components/BreadboardPrinter_T1\",\r\n  \"Small Printer Plinth\": \"/Game/Items/ItemTypes/Components/CheatPlinthT1Printer\",\r\n  \"Small Seat\": \"/Game/Items/ItemTypes/Components/Seat_Small_Cab\",\r\n  \"Small Shuttle\": \"/Game/Items/ItemTypes/Components/Shuttle_T2_ThrusterSlot\",\r\n  \"Small Solar\": \"/Game/Items/ItemTypes/Components/Solar_Small\",\r\n  \"Small Squeaker Horn\": \"/Game/Items/ItemTypes/Components/Horn_T1-02_IT\",\r\n  \"Small Trumpet Horn\": \"/Game/Items/ItemTypes/Components/Horn_T1-01_IT\",\r\n  \"Small Wind Turbine\": \"/Game/Items/ItemTypes/Components/Wind_Small_\",\r\n  \"Smelting Furnace\": \"/Game/Items/ItemTypes/Components/Smelter\",\r\n  \"Smiling Spookyseed\": \"/Game/Scenarios/Limited/Pumpkins/Pumpkin_Seed_Offspring_02_IT\",\r\n  \"Smiling Spookysquash\": \"/Game/Scenarios/Limited/Pumpkins/Pumpkin_Offspring_02_IT\",\r\n  \"Snow Globe\": \"/Game/U36_Expansion/Items/Decorations/BottledItems/IT_Deco_BottleOP\",\r\n  \"Soil\": \"/Game/Items/ItemTypes/Minables/Sediment\",\r\n  \"Soil Centrifuge\": \"/Game/Items/ItemTypes/Components/MineralExtractor\",\r\n  \"Solar Array\": \"/Game/Items/ItemTypes/Components/Solar_Array_T4\",\r\n  \"Solid-Fuel Jump Jet\": \"/Game/Items/ItemTypes/Components/ConsumableJumpjet_IT\",\r\n  \"Solid-Fuel Thruster\": \"/Game/Items/ItemTypes/Components/Thruster_Consumable\",\r\n  \"Spewflower Sample\": \"/Game/Items/ItemTypes/Researchables/Hazards/ItemType_Researchable_Spewer_01\",\r\n  \"Sphalerite\": \"/Game/Items/ItemTypes/Minables/Sphalerite\",\r\n  \"Sphere\": \"/Game/U36_Expansion/Planets/OrbitalPlatformMiniPlanet/IT_MiniPlanet_Sphere\",\r\n  \"Spinelily Seed\": [\r\n    \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Bouncer_Lily_01\",\r\n    \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Bouncer_Lily_02\",\r\n    \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Bouncer_Lily_03\"\r\n  ],\r\n  \"Splitter\": \"/Game/Items/ItemTypes/Components/Splitter_3Way_IT\",\r\n  \"Sputnik Satellite\": \"/Game/Items/ItemTypes/WandererProbes/WandererProbe_Sputnik\",\r\n  \"Squasholine\": \"/Game/Scenarios/Limited/2020_LTE_Halloween/ItemDrive_Resource1_2020_LTE_Halloween\",\r\n  \"Squashothane\": \"/Game/Scenarios/Limited/2024_LTE_Anniversary/Anniversary_Item2_IT\",\r\n  \"Starting Medium Printer\": \"/Game/Items/ItemTypes/Components/BreadboardPrinter_T2_Starter\",\r\n  \"Starting Platform\": \"/Game/Items/ItemTypes/Components/Breadboard_Tier2_Starter\",\r\n  \"Steel\": \"/Game/Items/ItemTypes/Composites/Steel\",\r\n  \"Stellar Object\": \"/Game/Items/ItemTypes/HolidayLTE_2019/Holiday_Star1_IT\",\r\n  \"Storage Sensor\": \"/Game/Items/ItemTypes/Actuators/Actuator_Storage_IT\",\r\n  \"STORM DATA\": \"/Game/U32_Expansion/Items/Resources/ResourceNugget_StormData_04_IT\",\r\n  \"Stretchpetal Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Tappable_Exotic_Tree_a\",\r\n  \"Stunted Spookyseed\": \"/Game/Scenarios/Limited/Pumpkins/Pumpkin_Seed_Offspring_04_IT\",\r\n  \"Stunted Spookysquash\": \"/Game/Scenarios/Limited/Pumpkins/Pumpkin_Offspring_04_IT\",\r\n  \"Sturdysquash Sample\": \"/Game/Scenarios/Limited/Pumpkins/Pumpkin_Research_IT\",\r\n  \"Sturdysquash Seed\": [\r\n    \"/Game/Scenarios/Limited/Pumpkins/Pumpkin_Seed_Mega_IT\",\r\n    \"/Game/Scenarios/Limited/Pumpkins/Pumpkin_Seed_Offspring_01_IT\"\r\n  ],\r\n  \"Sulfur\": \"/Game/Items/ItemTypes/Gases/Sulfur\",\r\n  \"Sylva\": \"/Game/Items/ItemTypes/Intangibles/Planets/Terran\",\r\n  \"Tall Platform\": \"/Game/Items/ItemTypes/Components/Platform_Tall_T2x1_T1x4_P3_IT\",\r\n  \"Tall Rail Post\": \"/Game/Vehicles/Rails/RailPost_Tall_ItemType\",\r\n  \"Tall Rail Post Bundle\": \"/Game/Vehicles/Rails/RailPost_TallBundle_ItemType\",\r\n  \"Tall Storage\": \"/Game/Items/ItemTypes/Components/Storage_Tall_T2_T1x3_IT\",\r\n  \"Tapper\": \"/Game/Items/ItemTypes/Components/ResourceTapper\",\r\n  \"Teal Firework\": \"/Game/Items/ItemTypes/Fireworks/ItemType_Firework_Rocket_Base_Teal\",\r\n  \"Terrain Analyzer\": \"/Game/Items/ItemTypes/Components/TerrainAnalyzer\",\r\n  \"Terrain Anchor\": \"/Game/Items/ItemTypes/Components/LodAnchorPost\",\r\n  \"Terrarium\": [\r\n    \"/Game/Items/Snails/MissionItems/Terrarium_Snail_Capture_Atrox_IT\",\r\n    \"/Game/Items/Snails/MissionItems/Terrarium_Snail_Capture_Calidor_IT\",\r\n    \"/Game/Items/Snails/MissionItems/Terrarium_Snail_Capture_Desolo_IT\",\r\n    \"/Game/Items/Snails/MissionItems/Terrarium_Snail_Capture_Glacio_IT\",\r\n    \"/Game/Items/Snails/MissionItems/Terrarium_Snail_Capture_Novus_IT\",\r\n    \"/Game/Items/Snails/MissionItems/Terrarium_Snail_Capture_Sylva_IT\",\r\n    \"/Game/Items/Snails/MissionItems/Terrarium_Snail_Capture_Vesania_IT\"\r\n  ],\r\n  \"Tether Dropper\": \"/Game/U36_Expansion/Items/TetherBooper/IT_TetherBooper\",\r\n  \"Tethers\": [\r\n    \"/Game/Items/ItemTypes/Components/TetherBundle\",\r\n    \"/Game/Items/ItemTypes/Components/TetherPost\"\r\n  ],\r\n  \"Thistlewhip Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Knocker_Flower_01\",\r\n  \"Tin\": \"/Game/Items/ItemTypes/Intermediates/Tin\",\r\n  \"Titanite\": \"/Game/Items/ItemTypes/Minables/Titanite\",\r\n  \"Titanium\": \"/Game/Items/ItemTypes/Intermediates/Titanium\",\r\n  \"Titanium Alloy\": \"/Game/Items/ItemTypes/Composites/TitaniumAlloy\",\r\n  \"Tractor\": \"/Game/Items/ItemTypes/Components/RoverT1\",\r\n  \"Trade Platform\": \"/Game/Items/ItemTypes/Components/Trade_Module\",\r\n  \"Trailer\": \"/Game/Items/ItemTypes/Components/RoverT2B\",\r\n  \"TROPHY\": \"/Game/U36_Expansion/Items/Missions/IT_GoldenAstro\",\r\n  \"Tuberyl Seed\": \"/Game/Scenarios/Limited/2024_LTE_Fall/Fall_2024_Seed_Leek_IT\",\r\n  \"Tungsten\": \"/Game/Items/ItemTypes/Intermediates/Tungsten\",\r\n  \"Tungsten Carbide\": \"/Game/Items/ItemTypes/Composites/TungstenCarbide\",\r\n  \"Unknown Biofuel\": \"/Game/Scenarios/Limited/2024_LTE_Anniversary/Anniversary_Item8_IT\",\r\n  \"Used Solid-Fuel Thruster\": \"/Game/Items/ItemTypes/POI_Elements/ItemType_Wrecked_ConsumableThrusterT2\",\r\n  \"Vault Seeker\": \"/Game/Items/ItemTypes/Components/ItemType_Scanner_Vault\",\r\n  \"Vehicle Bay\": \"/Game/Items/ItemTypes/Components/Printer_Vehicles\",\r\n  \"Vehicle Data Recorder\": [\r\n    \"/Game/Items/ItemTypes/Destructibles/Destructible_PlacementActor_MissionA_IT\",\r\n    \"/Game/Items/ItemTypes/Destructibles/Destructible_PlacementActor_MissionB_IT\"\r\n  ],\r\n  \"Vesania\": \"/Game/Items/ItemTypes/Intangibles/Planets/Exotic\",\r\n  \"Violet Firework\": \"/Game/Items/ItemTypes/Fireworks/ItemType_Firework_Rocket_Base_Violet\",\r\n  \"Voyager 2 Probe\": \"/Game/Items/ItemTypes/WandererProbes/WandererProbe_Voy2\",\r\n  \"VTOL\": \"/Game/Vehicles/VTOL/VTOL_IT\",\r\n  \"Walkway\": [\r\n    \"/Game/U36_Expansion/Items/Splines/IT_SplinePost_Short\",\r\n    \"/Game/U36_Expansion/Items/Splines/IT_SplinePost_Tall\"\r\n  ],\r\n  \"Walkway Bundle\": [\r\n    \"/Game/U36_Expansion/Items/Splines/IT_SplinePost_ShortBundle\",\r\n    \"/Game/U36_Expansion/Items/Splines/IT_SplinePost_TallBundle\"\r\n  ],\r\n  \"Wheezeweed Seed\": \"/Game/Items/ItemTypes/Seeds/ItemType_Seed_Knocker_Whoop_01\",\r\n  \"Wide Mod\": \"/Game/Items/ItemTypes/Components/Augment_BroadBrush\",\r\n  \"Wild Sturdysquash\": \"/Game/Scenarios/Limited/Pumpkins/Pumpkin_Parent_IT\",\r\n  \"Winch\": \"/Game/Items/ItemTypes/Components/Winch\",\r\n  \"Wolframite\": \"/Game/Items/ItemTypes/Minables/Wolframite\",\r\n  \"Worklight\": \"/Game/Items/ItemTypes/WorkLight\",\r\n  \"Xenobiology Lab Wreckage\": \"/Game/Items/Snails/MissionItems/Snails_MissionsHub_IT\",\r\n  \"XL Extended Platform\": \"/Game/Items/ItemTypes/Components/Platform_Long_T3x1_T2x2_P4_IT\",\r\n  \"XL Sensor Arch\": \"/Game/Items/ItemTypes/Components/Platform_Arch_t2x3_t1x3_p2\",\r\n  \"XL Sensor Canopy\": \"/Game/Items/ItemTypes/Components/Platform_Net_T2x6_T1x1_P4_IT\",\r\n  \"XL Sensor Hoop A\": \"/Game/Items/ItemTypes/Components/Platform_Ring_t2x3_t1x3_p3_IT\",\r\n  \"XL Sensor Hoop B\": \"/Game/Items/ItemTypes/Components/Platform_Ring_t2x6_t1x6_p3_IT\",\r\n  \"XL Wind Turbine\": \"/Game/Items/ItemTypes/Components/Wind_XL_IT\",\r\n  \"Yellow Firework\": \"/Game/Items/ItemTypes/Fireworks/ItemType_Firework_Rocket_Base_Yellow\",\r\n  \"Zeta Storm Data\": \"/Game/U32_Expansion/Items/Resources/ResourceNugget_StormData_03_IT\",\r\n  \"Zinc\": \"/Game/Items/ItemTypes/Intermediates/Zinc\"\r\n}";

        private string GetPathToItemType(string englishName, Dictionary<string, string> LookupTableIT)
        {
            if (englishName.StartsWith("/Game")) return englishName;
            if (!LookupTableIT.ContainsKey(englishName)) return null;
            return LookupTableIT[englishName];
        }

        private string RemoveTrailingC(string str)
        {
            if (str.EndsWith("_C")) return str.Substring(0, str.Length - 2);
            return str;
        }

        public struct TradePlatformIntegratorField
        {
            [JsonExtensionData]
            public IDictionary<string, JToken> InputResourceToEntries;
        }

        public override void Execute(ICustomRoutineAPI api)
        {
            // parse LookupTableIT JSON
            Dictionary<string, string> LookupTableIT = new Dictionary<string, string>();
            JObject lookupTableObj = JObject.Parse(LookupTableIT_JSON);
            foreach (KeyValuePair<string, JToken?> token in lookupTableObj)
            {
                if (token.Value == null) continue;
                if (token.Value.Type == JTokenType.String)
                {
                    if (!token.Value.ToString().Contains("_Expansion")) LookupTableIT[token.Key] = token.Value.ToString();
                }
                else if (token.Value.Type == JTokenType.Array)
                {
                    JToken[] tokens = token.Value.ToArray<JToken>();
                    foreach (JToken token2 in tokens)
                    {
                        if (token2.Type == JTokenType.String && !token2.ToString().Contains("_Expansion")) // block DLC types
                        {
                            LookupTableIT[token.Key] = token2.ToString();
                            break;
                        }
                    }
                }
            }

            api.LogToDisk("Parsed LookupTableIT.json, " + LookupTableIT.Count + " entries");
            //if (LookupTableIT.Count > 0) api.LogToDisk(LookupTableIT.Values.First());

            // parse mod metadata
            IReadOnlyList<Metadata> allMods = api.GetAllMods();
            IDictionary<string, IDictionary<string, float>> collatedEntries = new Dictionary<string, IDictionary<string, float>>();
            foreach (Metadata mod in allMods)
            {
                if (api.ShouldExitNow()) return;

                api.LogToDisk("Parsing " + mod?.ModID ?? "null");
                if (mod?.IntegratorEntries.ExtraFields != null && mod.IntegratorEntries.ExtraFields.TryGetValue("trade_platform", out JToken val))
                {
                    try
                    {
                        TradePlatformIntegratorField integratorEntry = val.ToObject<TradePlatformIntegratorField>();
                        if (integratorEntry.InputResourceToEntries != null && integratorEntry.InputResourceToEntries.Count > 0)
                        {
                            foreach (KeyValuePair<string, JToken> entry1 in integratorEntry.InputResourceToEntries)
                            {
                                Dictionary<string, float>? entry1val = entry1.Value?.ToObject<Dictionary<string, float>>();
                                if (entry1val == null || entry1.Key == null) continue;

                                if (!collatedEntries.ContainsKey(entry1.Key)) collatedEntries[entry1.Key] = new Dictionary<string, float>();

                                foreach (KeyValuePair<string, float> entry2 in entry1val)
                                {
                                    if (entry2.Key == null) continue;
                                    if (entry2.Key.Contains("_Expansion")) continue; // block DLC types (only from output, OK if DLC item is input)
                                    collatedEntries[entry1.Key][entry2.Key] = entry2.Value;
                                }
                            }
                        }
                    }
                    catch
                    {
                        continue;
                    }
                }
            }

            api.LogToDisk("Integrator entries collated. " + collatedEntries.Count + " top-level entries");

            UAsset asset = api.FindFile("/Game/Globals/ItemTradeValueTable");
            MapPropertyData ItemTradeValueTable = (MapPropertyData)(((NormalExport)asset.Exports[0])[0]);

            foreach (KeyValuePair<string, IDictionary<string, float>> entry1 in collatedEntries)
            {
                if (api.ShouldExitNow()) return;

                if (entry1.Key == null) continue;

                // find top-level struct for input resource
                StructPropertyData? targetInputResource = null;
                try
                {
                    foreach (KeyValuePair<PropertyData, PropertyData> entry in ItemTradeValueTable.Value)
                    {
                        if (api.ShouldExitNow()) return;

                        ObjectPropertyData key = (ObjectPropertyData)(entry.Key);
                        string keyName = RemoveTrailingC(key.ToImport(asset).ObjectName.ToString());
                        string keyPathName = key.ToImport(asset).OuterIndex.ToImport(asset).ObjectName.ToString();
                        if (keyName == entry1.Key || keyPathName == entry1.Key)
                        {
                            targetInputResource = (StructPropertyData)(entry.Value);
                            continue;
                        }
                    }

                    // add to the map if couldn't find it
                    if (targetInputResource == null)
                    {
                        // I make these names dummy because they aren't actually serialized, but it's 100% OK to use FromString here too
                        targetInputResource = new StructPropertyData(FName.DefineDummy(asset, "Value"), FName.DefineDummy(asset, "Generic"));
                        targetInputResource["OutputTypes"] = new MapPropertyData(FName.FromString(asset, "OutputTypes")) { KeyType = FName.FromString(asset, "ObjectProperty"), ValueType = FName.FromString(asset, "FloatProperty") };

                        ObjectPropertyData keyProp = new ObjectPropertyData(FName.DefineDummy(asset, "Key")) { Value = asset.AddItemTypeImport(GetPathToItemType(entry1.Key, LookupTableIT)) };
                        ItemTradeValueTable.Value.Add(keyProp, targetInputResource);
                    }
                }
                catch (Exception ex)
                {
                    api.LogToDisk("Exception while attempting to find/add input resource entry \"" + entry1.Key + "\": " + ex.Message + "\n" + ex.StackTrace);
                    continue;
                }

                // now add entries to the output types map (which we can assume is always present)
                MapPropertyData OutputTypes = (MapPropertyData)(targetInputResource["OutputTypes"]);
                HashSet<string> stringTypesToAdd = entry1.Value.Keys.ToHashSet();
                foreach (KeyValuePair<PropertyData, PropertyData> entry in OutputTypes.Value)
                {
                    if (api.ShouldExitNow()) return;

                    ObjectPropertyData key = (ObjectPropertyData)(entry.Key);
                    FloatPropertyData value = (FloatPropertyData)(entry.Value);
                    string keyName = RemoveTrailingC(key.ToImport(asset).ObjectName.ToString());
                    string keyPathName = key.ToImport(asset).OuterIndex.ToImport(asset).ObjectName.ToString();

                    if (stringTypesToAdd.Contains(keyName))
                    {
                        value.Value = entry1.Value[keyName];
                        stringTypesToAdd.Remove(keyName);
                    }
                    else if (stringTypesToAdd.Contains(keyPathName))
                    {
                        value.Value = entry1.Value[keyPathName];
                        stringTypesToAdd.Remove(keyPathName);
                    }
                }

                // any remaining entries in stringTypesToAdd need to be added separately
                foreach (string keyToAdd in stringTypesToAdd)
                {
                    if (api.ShouldExitNow()) return;

                    try
                    {
                        ObjectPropertyData key = new ObjectPropertyData(FName.DefineDummy(asset, "Key")) { Value = asset.AddItemTypeImport(GetPathToItemType(keyToAdd, LookupTableIT)) };
                        FloatPropertyData value = new FloatPropertyData(FName.DefineDummy(asset, "Value")) { Value = entry1.Value[keyToAdd] };
                        OutputTypes.Value.Add(key, value);
                    }
                    catch (Exception ex)
                    {
                        api.LogToDisk("Exception while attempting to add output resource entry \"" + keyToAdd + "\": " + ex.Message + "\n" + ex.StackTrace);
                        continue;
                    }
                }
            }

            api.AddFile("/Game/Globals/ItemTradeValueTable", asset);

            api.LogToDisk("Completed " + RoutineID);
        }
    }
}

As another example, below is provided a copy of the source code of the custom routine used internally by AstroModIntegrator Classic to implement the crate_overlay_textures integrator routine. This routine is built into the mod integrator and is always enabled, but it would also be valid if implemented as a separate mod (as long as the namespace were to be changed).

CrateOverlayTexturesCustomRoutine.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UAssetAPI;
using UAssetAPI.ExportTypes;
using UAssetAPI.PropertyTypes.Objects;
using UAssetAPI.UnrealTypes;

namespace AstroModIntegrator
{
    public class CrateOverlayTexturesCustomRoutine : CustomRoutine
    {
        public override string RoutineID => "CrateOverlayTexturesCustomRoutine";
        public override bool Enabled => true;
        public override int APIVersion => 1;

        public static readonly string TemplatePath = "/Game/Materials/modules/CrateMaterialInstances/CrateMaterialLogo_Empty";
        public static readonly string TemplateName = "CrateMaterialLogo_Empty";
        public static readonly string TemplateTexturePath = "/Game/UI/Textures/Icons/Packages/ui_icon_package_empty";
        public static readonly string TemplateTextureName = "ui_icon_package_empty";
        public override void Execute(ICustomRoutineAPI api)
        {
            api.LogToDisk("Starting built-in routine " + RoutineID, false);

            UAsset crateMaterialTemplate = api.FindFile(TemplatePath);
            var crateMaterialTemplateNameMap = crateMaterialTemplate.GetNameMapIndexList();

            // locate relevant name map entries
            int miPath = -1;
            int miName = -1;
            int texturePath = -1;
            int textureName = -1;

            for (int i = 0; i < crateMaterialTemplateNameMap.Count; i++)
            {
                string nameEntry = crateMaterialTemplateNameMap[i].ToString();
                if (nameEntry.ToLowerInvariant() == TemplatePath.ToLowerInvariant())
                {
                    miPath = i;
                }
                else if (nameEntry == TemplateName)
                {
                    miName = i;
                }
                else if (nameEntry.ToLowerInvariant() == TemplateTexturePath.ToLowerInvariant())
                {
                    texturePath = i;
                }
                else if (nameEntry == TemplateTextureName)
                {
                    textureName = i;
                }
            }

            if (miPath == -1 || miName == -1 || texturePath == -1 || textureName == -1) throw new IOException("Failed to find all the required name map entries in template asset " + TemplatePath);

            // get all entries to add from metadata
            IReadOnlyList<Metadata> allMods = api.GetAllMods();
            List<string> texturePathsToAdd = new List<string>();
            foreach (Metadata mod in allMods)
            {
                if (api.ShouldExitNow()) return;
                if (mod?.IntegratorEntries.CrateOverlayTextures == null) continue;
                texturePathsToAdd.AddRange(mod.IntegratorEntries.CrateOverlayTextures);
            }
            texturePathsToAdd = texturePathsToAdd.Distinct().ToList();

            // add entries to AstroGameSingletonInstance
            UAsset singletonInstance = api.FindFile("/Game/Globals/AstroGameSingletonInstance");
            NormalExport cdo = singletonInstance?.GetClassExport()?.ClassDefaultObject?.ToExport(singletonInstance) as NormalExport;
            if (cdo == null) throw new IOException("Failed to find CDO of AstroGameSingletonInstance");

            MapPropertyData crateLogoMaterialInstances = cdo["CrateLogoMaterialInstances"] as MapPropertyData;
            int desiredTextureIdx = 0;
            HashSet<string> alreadyUsedTextureNames = new HashSet<string>();
            foreach (string desiredTexturePath in texturePathsToAdd)
            {
                try
                {
                    // modify asset
                    string newMIName = "CrateMaterialLogo_Modded" + desiredTextureIdx;
                    string newMIPath = "/Game/Integrator/CrateMaterialInstances/" + newMIName;
                    string desiredTextureName = desiredTexturePath.Split("/").Last();

                    if (alreadyUsedTextureNames.Contains(desiredTextureName))
                    {
                        api.LogToDisk("Duplicate texture name " + desiredTextureName + " found; skipping", false);
                        continue;
                    }
                    alreadyUsedTextureNames.Add(desiredTextureName);

                    crateMaterialTemplate.SetNameReference(miPath, FString.FromString(newMIPath));
                    crateMaterialTemplate.SetNameReference(miName, FString.FromString(newMIName));
                    crateMaterialTemplate.SetNameReference(texturePath, FString.FromString(desiredTexturePath));
                    crateMaterialTemplate.SetNameReference(textureName, FString.FromString(desiredTextureName));

                    api.AddFile(newMIPath, crateMaterialTemplate); // AddFile is guaranteed to immediately serialize the asset, so we are OK to continue modifying it afterwards

                    // add new imports to singletonInstance
                    FPackageIndex imp1 = singletonInstance.AddImport(new Import("/Script/CoreUObject", "Package", FPackageIndex.FromRawIndex(0), newMIPath, false, singletonInstance));
                    FPackageIndex imp2 = singletonInstance.AddImport(new Import("/Script/Engine", "MaterialInstanceConstant", imp1, newMIName, false, singletonInstance));

                    // add to crateLogoMaterialInstances
                    // Name is not serialized for map entries
                    var keyProp = new StrPropertyData() { Name = FName.DefineDummy(singletonInstance, "Key"), Value = FString.FromString(desiredTextureName) };
                    var valProp = new ObjectPropertyData() { Name = FName.DefineDummy(singletonInstance, "Value"), Value = imp2 };
                    crateLogoMaterialInstances.Value[keyProp] = valProp;
                }
                catch (Exception ex)
                {
                    api.LogToDisk("Failed to add texture path \"" + desiredTexturePath + "\": " + ex.Message + "\n" + ex.StackTrace, false);
                    desiredTextureIdx++;
                    continue;
                }

                desiredTextureIdx++;
            }

            if (texturePathsToAdd.Count > 0) api.AddFile("/Game/Globals/AstroGameSingletonInstance", singletonInstance);

            api.LogToDisk("Completed built-in routine " + RoutineID, false);
        }
    }
}