diff --git a/README.md b/README.md index 55aa71a5..c6dc3063 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,9 @@ A self-hosted Discord bot for the Rust+ companion app. The bot is live: it pairs with Rust+ over FCM, holds a socket per server, and auto-provisions its own Discord channels. Pairing/connection, the chat bridge, -in-game `!commands` and slash surfaces, live map events, and map rendering are all -shipped. Smart devices and cameras are next. +in-game `!commands` and slash surfaces, live map events, map rendering, smart +devices (switches, alarms, storage monitors), and an offline item database with +recycle/craft/research calculators are all shipped. Cameras are next. ## Features @@ -47,12 +48,14 @@ configurable per-server prefix (default `!`) and per-command cooldowns: - **Server** — `!pop`, `!time`, `!wipe` - **Team** — `!online`, `!offline`, `!team`, `!alive`, `!steamid [name]`, `!prox [name]` - **Live events** — `!cargo`, `!heli`, `!chinook`, `!small`, `!large`, `!events` +- **Items** — `!item`, `!recycle`, `!craft`, `!research` (name or id) - **Control** — `!mute` / `!unmute` (gate all bot→game output) ### Slash commands - **Server data** (ephemeral, with a `server` selector when several are paired) — `/pop`, `/time`, `/wipe`, `/online`, `/offline`, `/team`, `/alive`, `/small`, `/large` +- **Items** (ephemeral) — `/item`, `/recycle`, `/craft`, `/research` (name or id) - **Utility** — `/help`, `/uptime`, `/leader` (Manage Server — transfer in-game team leadership) - **Admin** — `/setup`, `/workspace reset`, `/workspace simulate-server` @@ -69,6 +72,17 @@ configurable per-server prefix (default `!`) and per-command cooldowns: layers — **Grid**, **Markers**, **Monuments**, **Vendor**, **Players**, **Rigs** — controlled from a Manage-Server-gated control message. +### Item database & calculators + +- An **offline, versioned item dataset** (bundled, ~1200 items) behind one + lookup seam, exposing four calculators both in-game and as ephemeral slash + commands: item info, recycler yields, craft recipes, and research scrap cost. +- **Name-or-id lookup** — type a name (case-insensitive, partial), an exact name, + or a numeric id; multiple matches return a short "did you mean" list. +- **Provenance-aware** — each result footers the date its data was sourced, and a + maintainer [generator tool](tools/RustPlusBot.ItemData.Generator) regenerates the + bundle from upstream (with strict validation) so it never silently rots. + ### Foundation - Multi-guild, self-hosted, per-guild isolation everywhere; SQLite persistence; @@ -113,8 +127,14 @@ See [docs/development/running-locally.md](docs/development/running-locally.md). | `RustPlusBot.Features.Commands` | In-game `!commands`, slash surfaces, `/help`/`/leader` | | `RustPlusBot.Features.Events` | Live map-event classification + `#events` feed | | `RustPlusBot.Features.Map` | Map image rendering with toggleable layers | +| `RustPlusBot.Features.ItemData` | Bundled item dataset, lookup seam, recycle/craft/research data | | `RustPlusBot.Host` | Generic Host entry point, DI wiring, startup validation | +The `tools/` folder holds maintainer utilities that are not part of the running +bot — currently +[`RustPlusBot.ItemData.Generator`](tools/RustPlusBot.ItemData.Generator), which +regenerates the embedded item dataset. + ## Roadmap Subsystems are built in order; each has its own spec → plan → build cycle. @@ -125,8 +145,9 @@ Subsystems are built in order; each has its own spec → plan → build cycle. | 1 | Pairing & connection (FCM, credential pool, hot-swap, auto-failover) | Done | | 2 | Map + live events (events feed, oil-rig detection, map render + layers) | Done | | 3 | Chat bridge + `!commands` + slash surfaces | Done | -| 4 | Smart devices | Planned | +| 4 | Smart devices (switches, alarms, storage monitors) | Done | | 5 | Cameras | Planned | +| 6 | Item database & calculators (recycle/craft/research) | In progress | ## License diff --git a/RustPlusBot.slnx b/RustPlusBot.slnx index d4f64b76..53eb82f3 100644 --- a/RustPlusBot.slnx +++ b/RustPlusBot.slnx @@ -12,12 +12,16 @@ + + + + @@ -25,6 +29,7 @@ + @@ -33,5 +38,6 @@ + diff --git a/src/RustPlusBot.Features.Commands/CommandServiceCollectionExtensions.cs b/src/RustPlusBot.Features.Commands/CommandServiceCollectionExtensions.cs index fd24d928..c38507c6 100644 --- a/src/RustPlusBot.Features.Commands/CommandServiceCollectionExtensions.cs +++ b/src/RustPlusBot.Features.Commands/CommandServiceCollectionExtensions.cs @@ -6,6 +6,7 @@ using RustPlusBot.Features.Commands.Hosting; using RustPlusBot.Features.Commands.Leader; using RustPlusBot.Features.Commands.Servers; +using RustPlusBot.Features.ItemData; using RustPlusBot.Localization; namespace RustPlusBot.Features.Commands; @@ -23,6 +24,7 @@ public static IServiceCollection AddCommands(this IServiceCollection services) services.AddSingleton(); services.AddSingleton(); services.AddRustPlusBotLocalization(); + services.AddItemData(); services.AddScoped(); services.AddScoped(); @@ -43,6 +45,10 @@ public static IServiceCollection AddCommands(this IServiceCollection services) services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddHostedService(); diff --git a/src/RustPlusBot.Features.Commands/Formatting/CraftLine.cs b/src/RustPlusBot.Features.Commands/Formatting/CraftLine.cs new file mode 100644 index 00000000..917256eb --- /dev/null +++ b/src/RustPlusBot.Features.Commands/Formatting/CraftLine.cs @@ -0,0 +1,22 @@ +using System.Globalization; +using RustPlusBot.Features.ItemData.Data; +using RustPlusBot.Features.ItemData.Naming; + +namespace RustPlusBot.Features.Commands.Formatting; + +/// Formats the one-line craft-recipe reply. +internal static class CraftLine +{ + /// Formats the ingredients and craft time for an item. + /// The item (must have non-null ). + /// Resolves ingredient item ids to names. + public static string Format(ItemRecord item, IItemNameResolver names) + { + ArgumentNullException.ThrowIfNull(item); + ArgumentNullException.ThrowIfNull(names); + ArgumentNullException.ThrowIfNull(item.Craft); + var parts = item.Craft.Ingredients + .Select(g => string.Create(CultureInfo.InvariantCulture, $"{names.Resolve(g.ItemId)} ×{g.Quantity}")); + return string.Create(CultureInfo.InvariantCulture, $"{item.Name}: {string.Join(", ", parts)}"); + } +} diff --git a/src/RustPlusBot.Features.Commands/Formatting/ItemLine.cs b/src/RustPlusBot.Features.Commands/Formatting/ItemLine.cs new file mode 100644 index 00000000..0ee675ca --- /dev/null +++ b/src/RustPlusBot.Features.Commands/Formatting/ItemLine.cs @@ -0,0 +1,20 @@ +using System.Globalization; +using RustPlusBot.Features.ItemData.Data; + +namespace RustPlusBot.Features.Commands.Formatting; + +/// Formats the one-line item lookup card. +internal static class ItemLine +{ + /// Formats name, id, stack size, and despawn time. + /// The item to describe. + public static string Format(ItemRecord item) + { + ArgumentNullException.ThrowIfNull(item); + var despawn = item.DespawnSeconds is { } seconds + ? DurationFormat.Compact(TimeSpan.FromSeconds(seconds)) + : "—"; + return string.Create(CultureInfo.InvariantCulture, + $"{item.Name} (id {item.Id}) · stack {item.StackSize} · despawn {despawn}"); + } +} diff --git a/src/RustPlusBot.Features.Commands/Formatting/RecycleLine.cs b/src/RustPlusBot.Features.Commands/Formatting/RecycleLine.cs new file mode 100644 index 00000000..15aa95c8 --- /dev/null +++ b/src/RustPlusBot.Features.Commands/Formatting/RecycleLine.cs @@ -0,0 +1,22 @@ +using System.Globalization; +using RustPlusBot.Features.ItemData.Data; +using RustPlusBot.Features.ItemData.Naming; + +namespace RustPlusBot.Features.Commands.Formatting; + +/// Formats the one-line recycler-yield reply. +internal static class RecycleLine +{ + /// Formats the recycler outputs for an item, or a "not recyclable" sentinel via the caller. + /// The item (must have non-null ). + /// Resolves output item ids to names. + public static string Format(ItemRecord item, IItemNameResolver names) + { + ArgumentNullException.ThrowIfNull(item); + ArgumentNullException.ThrowIfNull(names); + ArgumentNullException.ThrowIfNull(item.Recycle); + var parts = item.Recycle.Recycler + .Select(y => string.Create(CultureInfo.InvariantCulture, $"{names.Resolve(y.ItemId)} ×{y.Quantity}")); + return string.Create(CultureInfo.InvariantCulture, $"{item.Name} → {string.Join(", ", parts)}"); + } +} diff --git a/src/RustPlusBot.Features.Commands/Formatting/ResearchLine.cs b/src/RustPlusBot.Features.Commands/Formatting/ResearchLine.cs new file mode 100644 index 00000000..cea156af --- /dev/null +++ b/src/RustPlusBot.Features.Commands/Formatting/ResearchLine.cs @@ -0,0 +1,17 @@ +using System.Globalization; +using RustPlusBot.Features.ItemData.Data; + +namespace RustPlusBot.Features.Commands.Formatting; + +/// Formats the one-line research-cost reply. +internal static class ResearchLine +{ + /// Formats the scrap research cost for an item. + /// The item (must have non-null ). + public static string Format(ItemRecord item) + { + ArgumentNullException.ThrowIfNull(item); + ArgumentNullException.ThrowIfNull(item.Research); + return string.Create(CultureInfo.InvariantCulture, $"{item.Name}: {item.Research.Scrap} scrap"); + } +} diff --git a/src/RustPlusBot.Features.Commands/Handlers/CraftCommandHandler.cs b/src/RustPlusBot.Features.Commands/Handlers/CraftCommandHandler.cs new file mode 100644 index 00000000..0d9c706b --- /dev/null +++ b/src/RustPlusBot.Features.Commands/Handlers/CraftCommandHandler.cs @@ -0,0 +1,36 @@ +using RustPlusBot.Features.Commands.Dispatching; +using RustPlusBot.Features.Commands.Formatting; +using RustPlusBot.Features.ItemData; +using RustPlusBot.Features.ItemData.Lookup; +using RustPlusBot.Features.ItemData.Naming; +using RustPlusBot.Localization; + +namespace RustPlusBot.Features.Commands.Handlers; + +/// !craft — shows the craft recipe for an item. +/// The item database. +/// Resolves ingredient item ids to names. +/// The reply localizer. +internal sealed class CraftCommandHandler(IItemDatabase database, IItemNameResolver names, ILocalizer localizer) + : ICommandHandler +{ + /// + public string Name => "craft"; + + /// + public Task ExecuteAsync(CommandContext context, CancellationToken cancellationToken) + { + ArgumentNullException.ThrowIfNull(context); + var query = string.Join(' ', context.Args); + var reply = database.Resolve(query) switch + { + ItemMatch.Found { Item.Craft: not null } f => + localizer.Get("command.craft.ok", context.Culture, CraftLine.Format(f.Item, names)), + ItemMatch.Found f => localizer.Get("command.craft.none", context.Culture, f.Item.Name), + ItemMatch.Ambiguous a => localizer.Get("command.item.ambiguous", context.Culture, + string.Join(", ", a.Candidates.Select(c => c.Name))), + _ => localizer.Get("command.item.notfound", context.Culture, query), + }; + return Task.FromResult(reply); + } +} diff --git a/src/RustPlusBot.Features.Commands/Handlers/ItemCommandHandler.cs b/src/RustPlusBot.Features.Commands/Handlers/ItemCommandHandler.cs new file mode 100644 index 00000000..536ec326 --- /dev/null +++ b/src/RustPlusBot.Features.Commands/Handlers/ItemCommandHandler.cs @@ -0,0 +1,31 @@ +using RustPlusBot.Features.Commands.Dispatching; +using RustPlusBot.Features.Commands.Formatting; +using RustPlusBot.Features.ItemData; +using RustPlusBot.Features.ItemData.Lookup; +using RustPlusBot.Localization; + +namespace RustPlusBot.Features.Commands.Handlers; + +/// !item — looks up an item's name, id, stack size, and despawn time. +/// The item database. +/// The reply localizer. +internal sealed class ItemCommandHandler(IItemDatabase database, ILocalizer localizer) : ICommandHandler +{ + /// + public string Name => "item"; + + /// + public Task ExecuteAsync(CommandContext context, CancellationToken cancellationToken) + { + ArgumentNullException.ThrowIfNull(context); + var query = string.Join(' ', context.Args); + var reply = database.Resolve(query) switch + { + ItemMatch.Found f => localizer.Get("command.item.ok", context.Culture, ItemLine.Format(f.Item)), + ItemMatch.Ambiguous a => localizer.Get("command.item.ambiguous", context.Culture, + string.Join(", ", a.Candidates.Select(c => c.Name))), + _ => localizer.Get("command.item.notfound", context.Culture, query), + }; + return Task.FromResult(reply); + } +} diff --git a/src/RustPlusBot.Features.Commands/Handlers/RecycleCommandHandler.cs b/src/RustPlusBot.Features.Commands/Handlers/RecycleCommandHandler.cs new file mode 100644 index 00000000..28195967 --- /dev/null +++ b/src/RustPlusBot.Features.Commands/Handlers/RecycleCommandHandler.cs @@ -0,0 +1,36 @@ +using RustPlusBot.Features.Commands.Dispatching; +using RustPlusBot.Features.Commands.Formatting; +using RustPlusBot.Features.ItemData; +using RustPlusBot.Features.ItemData.Lookup; +using RustPlusBot.Features.ItemData.Naming; +using RustPlusBot.Localization; + +namespace RustPlusBot.Features.Commands.Handlers; + +/// !recycle — shows the recycler output for an item. +/// The item database. +/// Resolves output item ids to names. +/// The reply localizer. +internal sealed class RecycleCommandHandler(IItemDatabase database, IItemNameResolver names, ILocalizer localizer) + : ICommandHandler +{ + /// + public string Name => "recycle"; + + /// + public Task ExecuteAsync(CommandContext context, CancellationToken cancellationToken) + { + ArgumentNullException.ThrowIfNull(context); + var query = string.Join(' ', context.Args); + var reply = database.Resolve(query) switch + { + ItemMatch.Found { Item.Recycle: not null } f => + localizer.Get("command.recycle.ok", context.Culture, RecycleLine.Format(f.Item, names)), + ItemMatch.Found f => localizer.Get("command.recycle.none", context.Culture, f.Item.Name), + ItemMatch.Ambiguous a => localizer.Get("command.item.ambiguous", context.Culture, + string.Join(", ", a.Candidates.Select(c => c.Name))), + _ => localizer.Get("command.item.notfound", context.Culture, query), + }; + return Task.FromResult(reply); + } +} diff --git a/src/RustPlusBot.Features.Commands/Handlers/ResearchCommandHandler.cs b/src/RustPlusBot.Features.Commands/Handlers/ResearchCommandHandler.cs new file mode 100644 index 00000000..a3352db4 --- /dev/null +++ b/src/RustPlusBot.Features.Commands/Handlers/ResearchCommandHandler.cs @@ -0,0 +1,33 @@ +using RustPlusBot.Features.Commands.Dispatching; +using RustPlusBot.Features.Commands.Formatting; +using RustPlusBot.Features.ItemData; +using RustPlusBot.Features.ItemData.Lookup; +using RustPlusBot.Localization; + +namespace RustPlusBot.Features.Commands.Handlers; + +/// !research — shows the scrap research cost for an item. +/// The item database. +/// The reply localizer. +internal sealed class ResearchCommandHandler(IItemDatabase database, ILocalizer localizer) : ICommandHandler +{ + /// + public string Name => "research"; + + /// + public Task ExecuteAsync(CommandContext context, CancellationToken cancellationToken) + { + ArgumentNullException.ThrowIfNull(context); + var query = string.Join(' ', context.Args); + var reply = database.Resolve(query) switch + { + ItemMatch.Found { Item.Research: not null } f => + localizer.Get("command.research.ok", context.Culture, ResearchLine.Format(f.Item)), + ItemMatch.Found f => localizer.Get("command.research.none", context.Culture, f.Item.Name), + ItemMatch.Ambiguous a => localizer.Get("command.item.ambiguous", context.Culture, + string.Join(", ", a.Candidates.Select(c => c.Name))), + _ => localizer.Get("command.item.notfound", context.Culture, query), + }; + return Task.FromResult(reply); + } +} diff --git a/src/RustPlusBot.Features.Commands/Help/CommandGroup.cs b/src/RustPlusBot.Features.Commands/Help/CommandGroup.cs index eb38943e..180398ca 100644 --- a/src/RustPlusBot.Features.Commands/Help/CommandGroup.cs +++ b/src/RustPlusBot.Features.Commands/Help/CommandGroup.cs @@ -14,4 +14,7 @@ internal enum CommandGroup /// Bot-meta commands (uptime). Bot = 3, + + /// Item-database commands (item/recycle/craft/research). + ItemDb = 4, } diff --git a/src/RustPlusBot.Features.Commands/Help/CommandHelpCatalog.cs b/src/RustPlusBot.Features.Commands/Help/CommandHelpCatalog.cs index 94e2a263..7f2b0a2a 100644 --- a/src/RustPlusBot.Features.Commands/Help/CommandHelpCatalog.cs +++ b/src/RustPlusBot.Features.Commands/Help/CommandHelpCatalog.cs @@ -25,6 +25,10 @@ internal static class CommandHelpCatalog new("afk", CommandGroup.TeamIntel, "help.afk"), new("prox", CommandGroup.TeamIntel, "help.prox"), new("uptime", CommandGroup.Bot, "help.uptime"), + new("item", CommandGroup.ItemDb, "help.item"), + new("recycle", CommandGroup.ItemDb, "help.recycle"), + new("craft", CommandGroup.ItemDb, "help.craft"), + new("research", CommandGroup.ItemDb, "help.research"), ]; /// The Discord slash commands, in display order. @@ -33,5 +37,9 @@ internal static class CommandHelpCatalog new("help", CommandGroup.Bot, "help.slash.help"), new("uptime", CommandGroup.Bot, "help.slash.uptime"), new("leader", CommandGroup.Bot, "help.slash.leader"), + new("item", CommandGroup.ItemDb, "help.slash.item"), + new("recycle", CommandGroup.ItemDb, "help.slash.recycle"), + new("craft", CommandGroup.ItemDb, "help.slash.craft"), + new("research", CommandGroup.ItemDb, "help.slash.research"), ]; } diff --git a/src/RustPlusBot.Features.Commands/Help/HelpEmbedRenderer.cs b/src/RustPlusBot.Features.Commands/Help/HelpEmbedRenderer.cs index a50f3435..663adaff 100644 --- a/src/RustPlusBot.Features.Commands/Help/HelpEmbedRenderer.cs +++ b/src/RustPlusBot.Features.Commands/Help/HelpEmbedRenderer.cs @@ -8,12 +8,13 @@ namespace RustPlusBot.Features.Commands.Help; /// Resolves the title, group headings, and per-command descriptions. internal sealed class HelpEmbedRenderer(ILocalizer localizer) { - private static readonly (CommandGroup Group, string HeadingKey)[] GroupOrder = + internal static readonly (CommandGroup Group, string HeadingKey)[] GroupOrder = [ (CommandGroup.Control, "help.group.control"), (CommandGroup.Server, "help.group.server"), (CommandGroup.TeamIntel, "help.group.teamintel"), (CommandGroup.Bot, "help.group.bot"), + (CommandGroup.ItemDb, "help.group.itemdb"), ]; /// Renders the help embed. diff --git a/src/RustPlusBot.Features.Commands/Modules/ItemCommandModule.cs b/src/RustPlusBot.Features.Commands/Modules/ItemCommandModule.cs new file mode 100644 index 00000000..ae2c3f0a --- /dev/null +++ b/src/RustPlusBot.Features.Commands/Modules/ItemCommandModule.cs @@ -0,0 +1,84 @@ +using Discord; +using Discord.Interactions; +using Microsoft.Extensions.DependencyInjection; +using RustPlusBot.Features.Commands.Formatting; +using RustPlusBot.Features.ItemData; +using RustPlusBot.Features.ItemData.Data; +using RustPlusBot.Features.ItemData.Lookup; +using RustPlusBot.Features.ItemData.Naming; +using RustPlusBot.Localization; +using RustPlusBot.Persistence.Workspace; + +namespace RustPlusBot.Features.Commands.Modules; + +/// The /item, /recycle, /craft, and /research slash commands. +/// Creates a short-lived DI scope per interaction. +public sealed class ItemCommandModule(IServiceScopeFactory scopeFactory) + : InteractionModuleBase +{ + /// Looks up an item's name, id, stack size, and despawn time. + /// The item name or id. + [SlashCommand("item", "Look up an item")] + public Task ItemAsync([Summary("item", "Item name or id")] string item) => + RespondForAsync(item, (_, _, rec, loc, culture) => + loc.Get("command.item.ok", culture, ItemLine.Format(rec))); + + /// Shows recycler output for an item. + /// The item name or id. + [SlashCommand("recycle", "Show recycler output for an item")] + public Task RecycleAsync([Summary("item", "Item name or id")] string item) => + RespondForAsync(item, (_, names, rec, loc, culture) => rec.Recycle is not null + ? loc.Get("command.recycle.ok", culture, RecycleLine.Format(rec, names)) + : loc.Get("command.recycle.none", culture, rec.Name)); + + /// Shows an item's craft recipe. + /// The item name or id. + [SlashCommand("craft", "Show an item's craft recipe")] + public Task CraftAsync([Summary("item", "Item name or id")] string item) => + RespondForAsync(item, (_, names, rec, loc, culture) => rec.Craft is not null + ? loc.Get("command.craft.ok", culture, CraftLine.Format(rec, names)) + : loc.Get("command.craft.none", culture, rec.Name)); + + /// Shows an item's research scrap cost. + /// The item name or id. + [SlashCommand("research", "Show an item's research scrap cost")] + public Task ResearchAsync([Summary("item", "Item name or id")] string item) => + RespondForAsync(item, (_, _, rec, loc, culture) => rec.Research is not null + ? loc.Get("command.research.ok", culture, ResearchLine.Format(rec)) + : loc.Get("command.research.none", culture, rec.Name)); + + private async Task RespondForAsync( + string query, + Func onFound) + { + if (Context.Guild is null) + { + await RespondAsync("This command must be used in a server.", ephemeral: true).ConfigureAwait(false); + return; + } + + var scope = scopeFactory.CreateAsyncScope(); + await using (scope.ConfigureAwait(false)) + { + var db = scope.ServiceProvider.GetRequiredService(); + var names = scope.ServiceProvider.GetRequiredService(); + var loc = scope.ServiceProvider.GetRequiredService(); + var workspace = scope.ServiceProvider.GetRequiredService(); + var culture = await workspace.GetCultureAsync(Context.Guild.Id).ConfigureAwait(false); + + var text = db.Resolve(query) switch + { + ItemMatch.Found f => onFound(db, names, f.Item, loc, culture), + ItemMatch.Ambiguous a => loc.Get("command.item.ambiguous", culture, + string.Join(", ", a.Candidates.Select(c => c.Name))), + _ => loc.Get("command.item.notfound", culture, query), + }; + + var embed = new EmbedBuilder() + .WithDescription(text) + .WithFooter($"data as of {db.Sources.NamesAsOf:yyyy-MM-dd}") + .Build(); + await RespondAsync(ephemeral: true, embed: embed).ConfigureAwait(false); + } + } +} diff --git a/src/RustPlusBot.Features.Commands/RustPlusBot.Features.Commands.csproj b/src/RustPlusBot.Features.Commands/RustPlusBot.Features.Commands.csproj index 28eb3106..e7664987 100644 --- a/src/RustPlusBot.Features.Commands/RustPlusBot.Features.Commands.csproj +++ b/src/RustPlusBot.Features.Commands/RustPlusBot.Features.Commands.csproj @@ -11,6 +11,7 @@ + diff --git a/src/RustPlusBot.Features.ItemData/Data/ItemDataset.cs b/src/RustPlusBot.Features.ItemData/Data/ItemDataset.cs new file mode 100644 index 00000000..553d3a7d --- /dev/null +++ b/src/RustPlusBot.Features.ItemData/Data/ItemDataset.cs @@ -0,0 +1,60 @@ +namespace RustPlusBot.Features.ItemData.Data; + +/// The full bundled item dataset. Deserialized from the embedded item-data.json. +/// The schema version; the loader rejects a mismatched bundle. +/// Per-section provenance dates. +/// Every known item, one record each. +public sealed record ItemDataset(int SchemaVersion, DatasetSources Sources, IReadOnlyList Items); + +/// When each section of the dataset was last sourced, for "data as of" display. +/// Names/ids/stack source date. +/// Recycle data source date. +/// Craft data source date. +/// Research data source date. +public sealed record DatasetSources( + DateOnly NamesAsOf, + DateOnly RecycleAsOf, + DateOnly CraftAsOf, + DateOnly ResearchAsOf); + +/// One item, with all 6a calculator data inlined (null where not applicable). +/// The Rust item id. +/// The display name. +/// Max stack size. +/// Despawn time in seconds, or null if it does not despawn / unknown. +/// Recycler yield, or null if not recyclable. +/// Craft recipe, or null if not craftable. +/// Research cost, or null if not researchable. +public sealed record ItemRecord( + int Id, + string Name, + int StackSize, + int? DespawnSeconds, + RecycleYield? Recycle, + CraftRecipe? Craft, + ResearchCost? Research); + +/// Recycler output for an item (6a covers the standard recycler only). +/// The yield entries produced by the standard recycler. +public sealed record RecycleYield(IReadOnlyList Recycler); + +/// One recycler output entry. +/// The produced item id. +/// The produced quantity. +/// The probability (0..1) of receiving this output. +public sealed record YieldEntry(int ItemId, int Quantity, double Probability); + +/// A craft recipe. +/// The required ingredients. +/// The craft time in seconds. +/// Required workbench level (1-3), or null if none. +public sealed record CraftRecipe(IReadOnlyList Ingredients, double TimeSeconds, int? WorkbenchLevel); + +/// One craft ingredient. +/// The ingredient item id. +/// The required quantity. +public sealed record Ingredient(int ItemId, int Quantity); + +/// The research cost for an item. +/// The scrap cost to research. +public sealed record ResearchCost(int Scrap); diff --git a/src/RustPlusBot.Features.ItemData/Data/item-data.json b/src/RustPlusBot.Features.ItemData/Data/item-data.json new file mode 100644 index 00000000..bcde8f0d --- /dev/null +++ b/src/RustPlusBot.Features.ItemData/Data/item-data.json @@ -0,0 +1,24898 @@ +{ + "schemaVersion": 1, + "sources": { + "namesAsOf": "2026-04-08", + "recycleAsOf": "2024-09-07", + "craftAsOf": "2024-09-07", + "researchAsOf": "2024-09-07" + }, + "items": [ + { + "id": 3222790, + "name": "Hide Halterneck", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1381010055, + "quantity": 10 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 3380160, + "name": "Card Movember Moustache", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 4384538, + "name": "Apple Pie", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 14241751, + "name": "Fire Arrow", + "stackSize": 64, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 6, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 20 + }, + { + "itemId": -858312878, + "quantity": 2 + }, + { + "itemId": -946369541, + "quantity": 10 + } + ], + "timeSeconds": 1.875, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 15388698, + "name": "Stone Barricade", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -2099697608, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -2099697608, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": 20489901, + "name": "Purple Sunglasses", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 30 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 21402876, + "name": "Burlap Gloves", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 5 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 22947882, + "name": "White ID Tag", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 23352662, + "name": "Large Banner Hanging", + "stackSize": 5, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 20 + }, + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 23391694, + "name": "Bunny Hat", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 3.125, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 28201841, + "name": "M39 Rifle", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -1021495308, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 176787552, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 37122747, + "name": "Green Keycard", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 39600618, + "name": "Microphone Stand", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 42535890, + "name": "Medium Animated Neon Sign", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 180, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 300 + }, + { + "itemId": 317398316, + "quantity": 2 + } + ], + "timeSeconds": 11.25, + "workbenchLevel": 2 + }, + "research": null + }, + { + "id": 51984655, + "name": "Incendiary Pistol Bullet", + "stackSize": 128, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -1581843485, + "quantity": 1, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 10 + }, + { + "itemId": -265876753, + "quantity": 10 + }, + { + "itemId": -1581843485, + "quantity": 5 + } + ], + "timeSeconds": 2.25, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 54265286, + "name": "Crocodile Pie", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 54436981, + "name": "Fairy Lights", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 60528587, + "name": "Roadsign Horse Armor", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 1199391518, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1199391518, + "quantity": 4 + }, + { + "itemId": 1234880403, + "quantity": 2 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 62577426, + "name": "Photograph", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 69511070, + "name": "Metal Fragments", + "stackSize": 1000, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 70102328, + "name": "Red ID Tag", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 73681876, + "name": "Tech Trash", + "stackSize": 50, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 24, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 81423963, + "name": "Yellow ID Tag", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 82772055, + "name": "Horse", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 86840834, + "name": "NVGM Scientist Suit", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 2019042823, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 5, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 94971664, + "name": "Stone Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 95950017, + "name": "Metal Pipe", + "stackSize": 20, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 2 + }, + { + "itemId": -932201673, + "quantity": 20 + } + ], + "timeSeconds": 1, + "workbenchLevel": 3 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 97903330, + "name": "Pure Crafting Quality Tea", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 98508942, + "name": "XXL Picture Frame", + "stackSize": 5, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 105, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 175 + }, + { + "itemId": -858312878, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 99588025, + "name": "High External Wooden Wall", + "stackSize": 10, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 900, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 1500 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 104856514, + "name": "Bulb String Lights", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 106959911, + "name": "Light Frankenstein Legs", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -1709878924, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -1018587433, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 1719978075, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 110116923, + "name": "Ice Metal Facemask", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 120820987, + "name": "Chicken Pie", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 121049755, + "name": "Tall Picture Frame", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 90, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 150 + }, + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 122783240, + "name": "Black Berry Clone", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 140006625, + "name": "PTZ CCTV Camera", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + }, + { + "itemId": 634478325, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 634478325, + "quantity": 1 + }, + { + "itemId": 69511070, + "quantity": 150 + } + ], + "timeSeconds": 0.75, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 143803535, + "name": "F1 Grenade", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -265876753, + "quantity": 18, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -265876753, + "quantity": 30 + }, + { + "itemId": 69511070, + "quantity": 25 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 146221721, + "name": "Heavy Scientist Plushie", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 158303804, + "name": "Obsidian Bone Knife", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 162882477, + "name": "#50cal", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 170758448, + "name": "Cockpit With Engine Vehicle Module", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 150 + }, + { + "itemId": 317398316, + "quantity": 5 + }, + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 171931394, + "name": "Stone Pickaxe", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": -2099697608, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + }, + { + "itemId": -2099697608, + "quantity": 100 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 174866732, + "name": "Variable Zoom Scope", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 48, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 176787552, + "name": "Rifle Body", + "stackSize": 10, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 177226991, + "name": "Scarecrow", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + }, + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 180752235, + "name": "Pink ID Tag", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 184516676, + "name": "Beehive", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 185586769, + "name": "Inner Tube", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 190184021, + "name": "Kayak", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + }, + { + "itemId": -151838493, + "quantity": 200 + }, + { + "itemId": -858312878, + "quantity": 50 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 192249897, + "name": "Green", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 196700171, + "name": "Hide Vest", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1381010055, + "quantity": 10 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 196784377, + "name": "Improvised Shield", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 198438816, + "name": "Vending Machine", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 20 + }, + { + "itemId": 479143914, + "quantity": 3 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 10 + } + }, + { + "id": 200773292, + "name": "Hammer", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 204391461, + "name": "Coal :(", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -321733511, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -2099697608, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 204970153, + "name": "Wrapped Gift", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 209218760, + "name": "Head Bag", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 210787554, + "name": "Engineering Workbench", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 215754713, + "name": "Bone Arrow", + "stackSize": 64, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 5, + "probability": 1 + }, + { + "itemId": 1719978075, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 25 + }, + { + "itemId": 1719978075, + "quantity": 10 + } + ], + "timeSeconds": 1.875, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 223891266, + "name": "T-Shirt", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 25 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 236677901, + "name": "Prototype Pickaxe", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 237239288, + "name": "Pants", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 24, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 40 + }, + { + "itemId": 1234880403, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 240752557, + "name": "Tall Weapon Rack", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 105, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 175 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 242421166, + "name": "Light-Up Frame Large", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 242933621, + "name": "Frontier Mirror Large", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 248643189, + "name": "Spoiled Big Cat Meat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 254522515, + "name": "Large Medkit", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 1079279582, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1079279582, + "quantity": 2 + }, + { + "itemId": -946369541, + "quantity": 10 + } + ], + "timeSeconds": 11.25, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 255305250, + "name": "Wooden Boat Ladder", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 261913429, + "name": "White Volcano Firework", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 12, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 9, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 20 + }, + { + "itemId": -265876753, + "quantity": 15 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 263834859, + "name": "Basic Scrap Tea", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 268565518, + "name": "Storage Vehicle Module", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 75, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + }, + { + "itemId": -151838493, + "quantity": 125 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 271048478, + "name": "Rat Mask", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 2048317869, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + }, + { + "itemId": 2048317869, + "quantity": 1 + } + ], + "timeSeconds": 3.125, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 273172220, + "name": "Plumber\u0027s Trumpet", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 273951840, + "name": "Scarecrow Suit", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 277730763, + "name": "Mummy Suit", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 281099360, + "name": "Bread Loaf", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 282103175, + "name": "Giant Lollipop Decor", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 20 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 286193827, + "name": "Pickles", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 286648290, + "name": "Disco Floor", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 296519935, + "name": "Diving Fins", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 301063058, + "name": "Wanted Poster 2", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 304481038, + "name": "Flare", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -265876753, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -265876753, + "quantity": 10 + }, + { + "itemId": 69511070, + "quantity": 10 + } + ], + "timeSeconds": 0.625, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 309017792, + "name": "Big Cat Pie", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 317398316, + "name": "High Quality Metal", + "stackSize": 100, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 320438357, + "name": "Hunters Pie", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 340210699, + "name": "Frontier Mirror Small", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 342438846, + "name": "Anchovy", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 343045591, + "name": "MLRS Aiming Module", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 349762871, + "name": "40mm HE Grenade", + "stackSize": 12, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": -265876753, + "quantity": 9, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.3 + }, + { + "itemId": -592016202, + "quantity": 1, + "probability": 0.3 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 352130972, + "name": "Rotten Apple", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 352321488, + "name": "Sunglasses", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 30 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 352499047, + "name": "Shotgun Trap", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 300, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 150, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 1414245522, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 500 + }, + { + "itemId": 69511070, + "quantity": 250 + }, + { + "itemId": 479143914, + "quantity": 2 + }, + { + "itemId": 1414245522, + "quantity": 2 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 355877490, + "name": "Minigun Ammo Pack", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 359723196, + "name": "Chippy Arcade Game", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 10 + }, + { + "itemId": 479143914, + "quantity": 2 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 362863314, + "name": "Heart Balloon", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 363163265, + "name": "Hose Tool", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 2 + } + ], + "timeSeconds": 0.625, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 368008432, + "name": "Basic Crafting Quality Tea", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 375473148, + "name": "Scrap Transport Helicopter", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 377750553, + "name": "Pure Harvesting Tea", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 381595627, + "name": "Twitch Rivals Neon Sign", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 385099196, + "name": "4 Module Car Chassis", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 385645417, + "name": "Paintball", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 390728933, + "name": "Yellow Berry Clone", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 392828520, + "name": "Cooked Crocodile Meat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 405904531, + "name": "Soccer Ball", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 405905095, + "name": "Sail", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 418081930, + "name": "Wood Chestplate", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 180, + "probability": 1 + }, + { + "itemId": 1414245522, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1414245522, + "quantity": 1 + }, + { + "itemId": -151838493, + "quantity": 300 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 442289265, + "name": "Holosight", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 8, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 12 + }, + { + "itemId": 73681876, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 442886268, + "name": "Rocket Launcher", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 24, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 40 + }, + { + "itemId": 95950017, + "quantity": 4 + } + ], + "timeSeconds": 45, + "workbenchLevel": 2 + }, + "research": { + "scrap": 500 + } + }, + { + "id": 443432036, + "name": "Fluid Switch \u0026 Pump", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": null, + "research": { + "scrap": 20 + } + }, + { + "id": 445662288, + "name": "Scientist Plushie", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 446206234, + "name": "Torch Holder", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 24, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 40 + }, + { + "itemId": 69511070, + "quantity": 10 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 450531685, + "name": "Light-Up Mirror Large", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 468313189, + "name": "Twitch Rivals Hazmat Suit", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 472505338, + "name": "Medieval AR", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 476066818, + "name": "Cassette - Long", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 3.125, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 479143914, + "name": "Gears", + "stackSize": 20, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + }, + { + "itemId": -932201673, + "quantity": 100 + } + ], + "timeSeconds": 1, + "workbenchLevel": 3 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 479292118, + "name": "Large Loot Bag", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 486661382, + "name": "Clan Table", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 240, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 240, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 491263800, + "name": "Nomad Suit", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 492357192, + "name": "RAND Switch", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 494161326, + "name": "RPG Launcher", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 504109620, + "name": "Ice Sculpture", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 507284030, + "name": "Coconut Armor Pants", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 524678627, + "name": "Advanced Scrap Tea", + "stackSize": 10, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 528668503, + "name": "Flame Turret", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + }, + { + "itemId": -1673693549, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 200 + }, + { + "itemId": -1673693549, + "quantity": 2 + }, + { + "itemId": 479143914, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 533993281, + "name": "Space LR-300 Assault Rifle", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 537946062, + "name": "Flight Recorder Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 547862680, + "name": "Knights armour cuirass", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 550753330, + "name": "Snowball Gun Ammo", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 553270375, + "name": "Large Rechargeable Battery", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 10 + }, + { + "itemId": 73681876, + "quantity": 2 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 553887414, + "name": "Skull Fire Pit", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 996293980, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 996293980, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 553967074, + "name": "Wallpaper Wall", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 559147458, + "name": "Survival Fish Trap", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + }, + { + "itemId": -858312878, + "quantity": 5 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 567235583, + "name": "8x Zoom Scope", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 50 + } + ], + "timeSeconds": 30, + "workbenchLevel": 3 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 567871954, + "name": "Secretlab Chair", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 50 + }, + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 571949408, + "name": "Clump of Mixed Balloons", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 573676040, + "name": "Coffin", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 480, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 573926264, + "name": "Semi Automatic Body", + "stackSize": 10, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 18, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 574701440, + "name": "Scrap Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 576509618, + "name": "Portable Boom Box", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 72, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 120 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 588596902, + "name": "Handmade Shell", + "stackSize": 64, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -2099697608, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -2099697608, + "quantity": 5 + }, + { + "itemId": -265876753, + "quantity": 5 + } + ], + "timeSeconds": 1.875, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 593465182, + "name": "Table", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": 594041190, + "name": "Compass", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 596469572, + "name": "RF Transmitter", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 602628465, + "name": "Parachute", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 2019042823, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 2019042823, + "quantity": 2 + }, + { + "itemId": 1234880403, + "quantity": 2 + }, + { + "itemId": -858312878, + "quantity": 50 + } + ], + "timeSeconds": 11.25, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 602741290, + "name": "Burlap Shirt", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 20 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 603811464, + "name": "Advanced Max Health Tea", + "stackSize": 10, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 605467368, + "name": "Incendiary 5.56 Rifle Ammo", + "stackSize": 128, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -1581843485, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 10 + }, + { + "itemId": -265876753, + "quantity": 10 + }, + { + "itemId": -1581843485, + "quantity": 5 + } + ], + "timeSeconds": 3, + "workbenchLevel": 3 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 607400343, + "name": "Legacy Wood Shelter", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 360, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 600 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 607785075, + "name": "Armored Ladder Hatch", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 609049394, + "name": "Battery - Small", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 610102428, + "name": "Industrial Conveyor", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 613961768, + "name": "Bota Bag", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 615112838, + "name": "Rail Road Planter", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 2019042823, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + }, + { + "itemId": 2019042823, + "quantity": 2 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 621915341, + "name": "Raw Pork", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 625599716, + "name": "Metal Shield", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 634478325, + "name": "CCTV Camera", + "stackSize": 64, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 73681876, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 640470230, + "name": "Ceiling Fluorescent Light", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 642482233, + "name": "Sticks", + "stackSize": 100, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 647240052, + "name": "Triangle Rail Road Planter", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 649912614, + "name": "Revolver", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 15, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 75, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 95950017, + "quantity": 1 + }, + { + "itemId": -858312878, + "quantity": 25 + }, + { + "itemId": 69511070, + "quantity": 125 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 652793345, + "name": "Krieg Storage Crates", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 656371026, + "name": "High Quality Carburetor", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 102, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 170 + } + ], + "timeSeconds": 10, + "workbenchLevel": 3 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 656371027, + "name": "Medium Quality Carburetor", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 656371028, + "name": "Low Quality Carburetor", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 24, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 40 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 656829501, + "name": "Wall Cabinet", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 657352755, + "name": "Beach Table", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 665332906, + "name": "Timer", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 671063303, + "name": "Riot Helmet", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + }, + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 671706427, + "name": "Reinforced Glass Window", + "stackSize": 10, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 4 + } + ], + "timeSeconds": 15, + "workbenchLevel": 3 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 674734128, + "name": "Festive Doorway Garland", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 25 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 678698219, + "name": "M4 Shotgun", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -1021495308, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 679690962, + "name": "Tools Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 680234026, + "name": "Yellow Perch", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 695450239, + "name": "Lunar New Year Spear", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 696029452, + "name": "Paper Map", + "stackSize": 1, + "despawnSeconds": 30, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 696029539, + "name": "Hot Air Balloon", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 699075597, + "name": "Wooden Cross", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 240, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 703057617, + "name": "Military Flame Thrower", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 21, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 5, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -1673693549, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 709206314, + "name": "Tiger Mask", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 2048317869, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + }, + { + "itemId": 2048317869, + "quantity": 1 + } + ], + "timeSeconds": 3.125, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 721798950, + "name": "Car Radio", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 722955039, + "name": "Water Gun", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 75, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 125 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 723407026, + "name": "Wood Mirror Standing", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 734320711, + "name": "Orchid", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 738611016, + "name": "Paintable Window", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 742745918, + "name": "Industrial Splitter", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 755224797, + "name": "Vodka Bottle", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 756125481, + "name": "Wood Mirror Medium", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 756517185, + "name": "Medium Present", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 756890702, + "name": "High External Adobe Wall", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 762289806, + "name": "Siren Light", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 72, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 120 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 782422285, + "name": "Sofa - Pattern", + "stackSize": 2, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": -858312878, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 785728077, + "name": "Pistol Bullet", + "stackSize": 128, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 1, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 10 + }, + { + "itemId": -265876753, + "quantity": 5 + } + ], + "timeSeconds": 1.875, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 789333045, + "name": "Sunken Combat Knife", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 794356786, + "name": "Hide Boots", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1381010055, + "quantity": 10 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 794443127, + "name": "Christmas Tree", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 795236088, + "name": "Torch", + "stackSize": 1, + "despawnSeconds": 30, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 18, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": -946369541, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 30 + }, + { + "itemId": -858312878, + "quantity": 1 + }, + { + "itemId": -946369541, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 795371088, + "name": "Pump Shotgun", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 9, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -1021495308, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 15 + }, + { + "itemId": 95950017, + "quantity": 2 + }, + { + "itemId": -1021495308, + "quantity": 1 + } + ], + "timeSeconds": 30, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 803222026, + "name": "Repair Bench", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 75, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 125 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 10 + } + }, + { + "id": 803954639, + "name": "Blue Berry Seed", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 809199956, + "name": "Gravestone", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 240, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 809689733, + "name": "Mummy Mask", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 809942731, + "name": "Scarecrow Wrap", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 813023040, + "name": "Cooked Wolf Meat", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 814297925, + "name": "Medieval Large Wood Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 818733919, + "name": "Industrial Door", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 818877484, + "name": "Semi-Automatic Pistol", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 573926264, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 573926264, + "quantity": 1 + }, + { + "itemId": 317398316, + "quantity": 4 + }, + { + "itemId": 95950017, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 821588319, + "name": "Bicycle", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 826309791, + "name": "Two Sided Town Sign Post", + "stackSize": 5, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 829641693, + "name": "Anchor", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 830839496, + "name": "Red Berry Seed", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 831955134, + "name": "Sky Lantern - Purple", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 832133926, + "name": "Wood Armor Pants", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 1414245522, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1414245522, + "quantity": 1 + }, + { + "itemId": -151838493, + "quantity": 200 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 833533164, + "name": "Large Wood Box", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 150, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 250 + }, + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 835042040, + "name": "Medium Frankenstein Legs", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -1709878924, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -1018587433, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 1719978075, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 838308300, + "name": "Burst Module", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 838831151, + "name": "Blue Berry Clone", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 839738457, + "name": "Scrap Mirror Medium", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 844440409, + "name": "Bronze Egg", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 850280505, + "name": "Bucket Helmet", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 21, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 35 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 853471967, + "name": "Laser Light", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 854447607, + "name": "White Berry", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 858486327, + "name": "Green Berry", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 861513346, + "name": "Lumberjack Suit", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 866332017, + "name": "Large Neon Sign", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 150, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 250 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 866889860, + "name": "Wooden Barricade", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 180, + "probability": 1 + }, + { + "itemId": 1414245522, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 300 + }, + { + "itemId": 1414245522, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": 878301596, + "name": "Generic vehicle module", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 882559853, + "name": "Spider Webs", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 884424049, + "name": "Compound Bow", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + }, + { + "itemId": 1414245522, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 75 + }, + { + "itemId": 1414245522, + "quantity": 2 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 888415708, + "name": "RF Receiver", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 150 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 895374329, + "name": "Passenger Vehicle Module", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 105, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 75, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 175 + }, + { + "itemId": -151838493, + "quantity": 125 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 912235912, + "name": "Sunflower Clone", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 915408809, + "name": "40mm Smoke Grenade", + "stackSize": 12, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -265876753, + "quantity": 9, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.3 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 920930831, + "name": "Blue Industrial Wall Light", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 924598634, + "name": "Wheat Clone", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 926800282, + "name": "Medium Quality Valves", + "stackSize": 15, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 42, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 70 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 935606207, + "name": "Minigun", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 176787552, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -1021495308, + "quantity": 4, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 8, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 935692442, + "name": "Longsleeve T-Shirt", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 936496778, + "name": "Floor grill", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 952603248, + "name": "Weapon flashlight", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 3 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 960673498, + "name": "Large Hunting Trophy", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 150 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 962186730, + "name": "Tin Can Alarm", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -1557377697, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 1414245522, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 1414245522, + "quantity": 1 + }, + { + "itemId": -1557377697, + "quantity": 2 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 963400638, + "name": "Speech Bubble Balloon", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 963906841, + "name": "Rock", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -2099697608, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -2099697608, + "quantity": 10 + } + ], + "timeSeconds": 3.125, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 968019378, + "name": "Clatter Helmet", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 21, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 35 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 968421290, + "name": "Connected Speaker", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 969768382, + "name": "Reinforced Wooden Shield", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 971362526, + "name": "Skull Trophy", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 972302244, + "name": "Kick Hazmat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 975983052, + "name": "Twitch Rivals Trophy", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 980333378, + "name": "Hide Poncho", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 9, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1381010055, + "quantity": 15 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 988652725, + "name": "Smart Switch", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 3 + }, + { + "itemId": 73681876, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 989925924, + "name": "Raw Fish", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 992944937, + "name": "Ore Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 996293980, + "name": "Human Skull", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 996757362, + "name": "Wagon", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 998894949, + "name": "Corn Seed", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 999690781, + "name": "Geiger Counter", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1004843240, + "name": "Orchid Seed", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1015352446, + "name": "Duo Submarine", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1023919015, + "name": "Food Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1028889957, + "name": "Light-Up Mirror Medium", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1036321299, + "name": "Blue Dog Tags", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1044081720, + "name": "Wood Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1046904719, + "name": "Abyss Metal Hatchet", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1052926200, + "name": "Mining Quarry", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1055319033, + "name": "40mm Shotgun Round", + "stackSize": 24, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 5, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1058261682, + "name": "Christmas Lights", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + }, + { + "itemId": -946369541, + "quantity": 20 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1065594600, + "name": "Pilot Hazmat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1072924620, + "name": "High Quality Spark Plugs", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 72, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 120 + } + ], + "timeSeconds": 10, + "workbenchLevel": 3 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1079279582, + "name": "Medical Syringe", + "stackSize": 2, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 9, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 6, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 15 + }, + { + "itemId": 69511070, + "quantity": 10 + }, + { + "itemId": -946369541, + "quantity": 10 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1081315464, + "name": "Nest Hat", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 2048317869, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + }, + { + "itemId": 2048317869, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1081921512, + "name": "Card Table", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1090916276, + "name": "Pitchfork", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 180, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1094293920, + "name": "Wrapping Paper", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1099314009, + "name": "Barbeque", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 24, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 40 + }, + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1099611828, + "name": "Metal Armor Insert", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1103488722, + "name": "Snowball Gun", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 15, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1104520648, + "name": "Chainsaw", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 1882709339, + "quantity": 4, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 5 + }, + { + "itemId": 479143914, + "quantity": 2 + }, + { + "itemId": 1882709339, + "quantity": 6 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1107575710, + "name": "Arctic Scientist Suit", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 2019042823, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 5, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1110385766, + "name": "Metal Chest Plate", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 11, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 5, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1381010055, + "quantity": 50 + }, + { + "itemId": 317398316, + "quantity": 18 + }, + { + "itemId": 1234880403, + "quantity": 8 + } + ], + "timeSeconds": 45, + "workbenchLevel": 3 + }, + "research": { + "scrap": 500 + } + }, + { + "id": 1112162468, + "name": "Blue Berry", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1113514903, + "name": "Attack Helicopter", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1115193056, + "name": "Wall Divider Pack", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1121416193, + "name": "Pure Cooling Tea", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1121925526, + "name": "Candy Cane", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1127417055, + "name": "Armoured Ladder Hatch", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1130729138, + "name": "Spoiled Fish Meat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1132603396, + "name": "Weapon Rack Stand", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + }, + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1142993169, + "name": "Ceiling Light", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1145722690, + "name": "Catapult", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1149964039, + "name": "Storage Monitor", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 3 + }, + { + "itemId": 73681876, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1153652756, + "name": "Large Wooden Sign", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 150 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1158340331, + "name": "Medium Quality Crankshaft", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 42, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 70 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1158340332, + "name": "High Quality Crankshaft", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 72, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 120 + } + ], + "timeSeconds": 10, + "workbenchLevel": 3 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1158340334, + "name": "Low Quality Crankshaft", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1159991980, + "name": "Code Lock", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1160881421, + "name": "Hitch \u0026 Trough", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1168856825, + "name": "Metal Detector", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 1414245522, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1414245522, + "quantity": 2 + }, + { + "itemId": 69511070, + "quantity": 200 + }, + { + "itemId": 317398316, + "quantity": 5 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1168916338, + "name": "Bee Grenade", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1171735914, + "name": "AND Switch", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1174484438, + "name": "Mini Fridge", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1174957864, + "name": "Shockbyte Tool Cupboard", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1176355476, + "name": "Concrete Hatchet", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1177596584, + "name": "Elevator", + "stackSize": 5, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 3 + }, + { + "itemId": 69511070, + "quantity": 200 + }, + { + "itemId": 479143914, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1178325727, + "name": "Wheat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1181207482, + "name": "Heavy Plate Helmet", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -1994909036, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -1994909036, + "quantity": 1 + }, + { + "itemId": 317398316, + "quantity": 4 + } + ], + "timeSeconds": 33.75, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1184215560, + "name": "Spoiled Produce", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1186655046, + "name": "Fuel Tank Vehicle Module", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 105, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 175 + }, + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1189981699, + "name": "Crate Costume", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1199391518, + "name": "Road Signs", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 2 + }, + { + "itemId": -932201673, + "quantity": 20 + } + ], + "timeSeconds": 1, + "workbenchLevel": 3 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1205084994, + "name": "Large Photo Frame", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1205607945, + "name": "Two Sided Hanging Sign", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 150 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1221063409, + "name": "Armored Double Door", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 15, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 25 + }, + { + "itemId": 479143914, + "quantity": 5 + } + ], + "timeSeconds": 30, + "workbenchLevel": 3 + }, + "research": { + "scrap": 500 + } + }, + { + "id": 1223729384, + "name": "Lavender ID Tag", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1223900335, + "name": "Dog Tag", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1230323789, + "name": "SMG Body", + "stackSize": 10, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 18, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1230691307, + "name": "Captain\u0027s Log", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1234878710, + "name": "Telephone", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 50 + }, + { + "itemId": 69511070, + "quantity": 100 + }, + { + "itemId": 73681876, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1234880403, + "name": "Sewing Kit", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 1414245522, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 20 + }, + { + "itemId": 1414245522, + "quantity": 3 + } + ], + "timeSeconds": 1, + "workbenchLevel": 3 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1242482355, + "name": "Jack O Lantern Angry", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -567909622, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -567909622, + "quantity": 2 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1242522330, + "name": "Cursed Cauldron", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 15.625, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1248356124, + "name": "Timed Explosive Charge", + "stackSize": 10, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": -592016202, + "quantity": 12, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -592016202, + "quantity": 20 + }, + { + "itemId": -858312878, + "quantity": 5 + }, + { + "itemId": 73681876, + "quantity": 2 + } + ], + "timeSeconds": 30, + "workbenchLevel": 3 + }, + "research": { + "scrap": 500 + } + }, + { + "id": 1248383659, + "name": "#50cal", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1254295946, + "name": "Armor Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1258768145, + "name": "Sunglasses", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1259919256, + "name": "Mixing Table", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + }, + { + "itemId": -2099697608, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 200 + }, + { + "itemId": -2099697608, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1263920163, + "name": "Smoke Grenade", + "stackSize": 3, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -265876753, + "quantity": 21, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -265876753, + "quantity": 35 + }, + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1266491000, + "name": "Hazmat Suit", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 2019042823, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 5, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 2019042823, + "quantity": 5 + }, + { + "itemId": 1234880403, + "quantity": 2 + }, + { + "itemId": 317398316, + "quantity": 8 + } + ], + "timeSeconds": 15, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1268178466, + "name": "Green Industrial Wall Light", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 1272194103, + "name": "Red Berry", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1272430949, + "name": "Wheelbarrow Piano", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + }, + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 1272768630, + "name": "Spoiled Human Meat", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1277159544, + "name": "Weapon Rack Double Light", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1285226495, + "name": "Bunny Costume", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1293102274, + "name": "XOR Switch", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1295301598, + "name": "Latex Balloon", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1296788329, + "name": "Homing Missile", + "stackSize": 4, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": -265876753, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": 73681876, + "quantity": 1, + "probability": 0.3 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 95950017, + "quantity": 2 + }, + { + "itemId": -265876753, + "quantity": 100 + }, + { + "itemId": 73681876, + "quantity": 1 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1305578813, + "name": "Small Neon Sign", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 150 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 1305765685, + "name": "Krieg Storage Barrel", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1307626005, + "name": "Storage Barrel Vertical", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 180, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 300 + }, + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1312679249, + "name": "Wood Mirror Large", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1312843609, + "name": "Skull", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1315082560, + "name": "Ox Mask", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 2048317869, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + }, + { + "itemId": 2048317869, + "quantity": 1 + } + ], + "timeSeconds": 3.125, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1318558775, + "name": "MP5A4", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 9, + "probability": 1 + }, + { + "itemId": -1021495308, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 1230323789, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 15 + }, + { + "itemId": 1230323789, + "quantity": 1 + }, + { + "itemId": -1021495308, + "quantity": 2 + } + ], + "timeSeconds": 30, + "workbenchLevel": 3 + }, + "research": { + "scrap": 500 + } + }, + { + "id": 1319617282, + "name": "Small Loot Bag", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1324203999, + "name": "Champagne Boomer", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 18, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 45, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 30 + }, + { + "itemId": -265876753, + "quantity": 75 + }, + { + "itemId": -946369541, + "quantity": 30 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1326180354, + "name": "Salvaged Sword", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 9, + "probability": 1 + }, + { + "itemId": 1882709339, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 15 + }, + { + "itemId": 1882709339, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1327005675, + "name": "Short Ice Wall", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -2099697608, + "quantity": 180, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1330084809, + "name": "Low Quality Valves", + "stackSize": 15, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1346158228, + "name": "Pumpkin Basket", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 18, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1348294923, + "name": "Spoiled Bear Meat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1350707894, + "name": "Jungle Rock", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1353298668, + "name": "Armored Door", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 20 + }, + { + "itemId": 479143914, + "quantity": 5 + } + ], + "timeSeconds": 30, + "workbenchLevel": 3 + }, + "research": { + "scrap": 500 + } + }, + { + "id": 1358643074, + "name": "Snow Machine", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 75, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 18, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 125 + }, + { + "itemId": -946369541, + "quantity": 30 + }, + { + "itemId": 95950017, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 1361520181, + "name": "Minecart Planter", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1364514421, + "name": "Blue ID Tag", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1365234594, + "name": "Gold Mirror large", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1366282552, + "name": "Leather Gloves", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1381010055, + "quantity": 20 + }, + { + "itemId": 1234880403, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1367190888, + "name": "Corn", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1371909803, + "name": "Tesla Coil", + "stackSize": 3, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 3 + }, + { + "itemId": 73681876, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1373240771, + "name": "Wooden Barricade Cover", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 150, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 250 + } + ], + "timeSeconds": 15.625, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1373971859, + "name": "Python Revolver", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 95950017, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 6, + "probability": 1 + }, + { + "itemId": -1021495308, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 95950017, + "quantity": 3 + }, + { + "itemId": -1021495308, + "quantity": 1 + }, + { + "itemId": 317398316, + "quantity": 10 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1376065505, + "name": "Rear Seats Vehicle Module", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 150 + }, + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1381010055, + "name": "Leather", + "stackSize": 1000, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1382263453, + "name": "Barbed Wooden Barricade", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 180, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 1414245522, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 300 + }, + { + "itemId": 69511070, + "quantity": 50 + }, + { + "itemId": 1414245522, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1390353317, + "name": "Sheet Metal Double Door", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 200 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1391703481, + "name": "Burnt Pork", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1394042569, + "name": "RHIB", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1397052267, + "name": "Supply Signal", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1400460850, + "name": "Saddle bag", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1381010055, + "quantity": 20 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 1401987718, + "name": "Duct Tape", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -1899491405, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": null, + "research": { + "scrap": 75 + } + }, + { + "id": 1409529282, + "name": "Door Closer", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + }, + { + "itemId": -1021495308, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1412103380, + "name": "Sunflower Seed", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1413014235, + "name": "Fridge", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1414245162, + "name": "Note", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 10 + } + ], + "timeSeconds": 3.125, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1414245519, + "name": "Rose", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1414245522, + "name": "Rope", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1420547167, + "name": "Horse Costume", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1422530437, + "name": "Raw Deer Meat", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1424075905, + "name": "Water Bucket", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 20 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1426097945, + "name": "Coconut Armor Chestplate", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1426574435, + "name": "Minicopter", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1428574144, + "name": "Hopper", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1430085198, + "name": "Industrial Crafter", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 3 + }, + { + "itemId": 73681876, + "quantity": 2 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1443579727, + "name": "Hunting Bow", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + }, + { + "itemId": -858312878, + "quantity": 50 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1447138977, + "name": "Light-Up Frame XXL", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1451568081, + "name": "Chainlink Fence Gate", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1456143403, + "name": "Cooking Workbench", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1463862472, + "name": "Wanted Poster 4", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1465782238, + "name": "Metal Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1467878256, + "name": "Pork Pie", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1478091698, + "name": "Muzzle Brake", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 5, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 8 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1480022580, + "name": "Basic Ore Tea", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1482871705, + "name": "3 Module Car Chassis", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1488606552, + "name": "Retro Tool Cupboard", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1488979457, + "name": "Jackhammer", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 36, + "probability": 1 + }, + { + "itemId": 1882709339, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1491189398, + "name": "Paddle", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 9, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 1882709339, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 15 + }, + { + "itemId": 1882709339, + "quantity": 1 + }, + { + "itemId": -151838493, + "quantity": 200 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1491753484, + "name": "Medium Frankenstein Torso", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -1709878924, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -1018587433, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 1719978075, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1494014226, + "name": "Discord Trophy", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1512054436, + "name": "Potato Clone", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1516531815, + "name": "Basic Harvesting Tea", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1516985844, + "name": "Netting", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1414245522, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1414245522, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1521286012, + "name": "Double Sign Post", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1523195708, + "name": "Targeting Computer", + "stackSize": 64, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 73681876, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1523403414, + "name": "Cassette - Short", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 3.125, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1524187186, + "name": "Workbench Level 1", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 300, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 500 + }, + { + "itemId": 69511070, + "quantity": 100 + }, + { + "itemId": -932201673, + "quantity": 50 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1524980732, + "name": "Carvable Pumpkin", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -567909622, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -567909622, + "quantity": 1 + } + ], + "timeSeconds": 0.625, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1525520776, + "name": "Building Plan", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 20 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1533551194, + "name": "White Berry Clone", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1534542921, + "name": "Chair", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 50 + }, + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1536610005, + "name": "Cooked Human Meat", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1538126328, + "name": "Industrial Combiner", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1540934679, + "name": "Wooden Spear", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 180, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 300 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1542290441, + "name": "Single Sign Post", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1545779598, + "name": "Assault Rifle", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 30, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": -1021495308, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 176787552, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 50 + }, + { + "itemId": -151838493, + "quantity": 200 + }, + { + "itemId": 176787552, + "quantity": 1 + }, + { + "itemId": -1021495308, + "quantity": 4 + } + ], + "timeSeconds": 45, + "workbenchLevel": 3 + }, + "research": { + "scrap": 500 + } + }, + { + "id": 1548091822, + "name": "Apple", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1553078977, + "name": "Bleach", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1556365900, + "name": "Molotov Cocktail", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + }, + { + "itemId": -946369541, + "quantity": 50 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1557173737, + "name": "Sunglasses", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1559779253, + "name": "Engine Vehicle Module", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + }, + { + "itemId": 317398316, + "quantity": 3 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1559915778, + "name": "Single Horse Saddle", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1199391518, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1561022037, + "name": "Abyss Metal Pickaxe", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1562867678, + "name": "Artist Canvas XL", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1568388703, + "name": "Diesel Fuel", + "stackSize": 20, + "despawnSeconds": 3600, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1569882109, + "name": "Handmade Fishing Rod", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1414245522, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1414245522, + "quantity": 2 + }, + { + "itemId": -151838493, + "quantity": 200 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1572152877, + "name": "Mint ID Tag", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1575635062, + "name": "Frankenstein Table", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1578317134, + "name": "Hazmat Plushy", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1581210395, + "name": "Large Planter Box", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 2019042823, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + }, + { + "itemId": 2019042823, + "quantity": 2 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1586884551, + "name": "Flight Control Codelock", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1588298435, + "name": "Bolt Action Rifle", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 176787552, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": -1021495308, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 20 + }, + { + "itemId": 176787552, + "quantity": 1 + }, + { + "itemId": 95950017, + "quantity": 3 + }, + { + "itemId": -1021495308, + "quantity": 1 + } + ], + "timeSeconds": 45, + "workbenchLevel": 3 + }, + "research": { + "scrap": 500 + } + }, + { + "id": 1588492232, + "name": "Drone", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 634478325, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 200 + }, + { + "itemId": 634478325, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1601468620, + "name": "Blue Jumpsuit", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1601800933, + "name": "Jar of Honey", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1602646136, + "name": "Stone Spear", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -2099697608, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 1540934679, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1540934679, + "quantity": 1 + }, + { + "itemId": -2099697608, + "quantity": 20 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1603174987, + "name": "Confetti Cannon", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 45, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1604092540, + "name": "Twitch Rivals 2025 Sofa", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1604837581, + "name": "Wooden Shield", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1608640313, + "name": "Tank Top", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 20 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1609921845, + "name": "Artist Canvas Small", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1614528785, + "name": "Heavy Frankenstein Torso", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -1709878924, + "quantity": 4, + "probability": 1 + }, + { + "itemId": -1018587433, + "quantity": 9, + "probability": 1 + }, + { + "itemId": 1719978075, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1619039771, + "name": "Digital Clock", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1621942085, + "name": "Outbreak Sprayer", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1623701499, + "name": "Industrial Wall Light", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 1629293099, + "name": "Snowman", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -1938052175, + "quantity": 30, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -1938052175, + "quantity": 50 + }, + { + "itemId": -858312878, + "quantity": 20 + }, + { + "itemId": 69511070, + "quantity": 20 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1629564540, + "name": "Wallpaper Tool", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1633553557, + "name": "Birthday Candle Hat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1638322904, + "name": "Incendiary Rocket", + "stackSize": 3, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 95950017, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 90, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 95950017, + "quantity": 2 + }, + { + "itemId": -265876753, + "quantity": 150 + }, + { + "itemId": -946369541, + "quantity": 75 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1643667218, + "name": "Large Animated Neon Sign", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 210, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 350 + }, + { + "itemId": 317398316, + "quantity": 5 + } + ], + "timeSeconds": 11.25, + "workbenchLevel": 2 + }, + "research": null + }, + { + "id": 1655650836, + "name": "Metal Barricade", + "stackSize": 10, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 1882709339, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 200 + }, + { + "itemId": 1882709339, + "quantity": 2 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1655979682, + "name": "Empty Can Of Beans", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1658229558, + "name": "Lantern", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 9, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + }, + { + "itemId": -946369541, + "quantity": 15 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1659114910, + "name": "Gas Mask", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 21, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1659447559, + "name": "Wooden Horse Armor", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1414245522, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 180, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1414245522, + "quantity": 2 + }, + { + "itemId": -151838493, + "quantity": 300 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1660145984, + "name": "Yellow Berry", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1668129151, + "name": "Cooked Fish", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1668858301, + "name": "Small Stocking", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1673224590, + "name": "M15 Semi-Automatic Pistol", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1675639563, + "name": "Beenie Hat", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 9, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 15 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1680793490, + "name": "Boomerang", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1686524871, + "name": "Decorative Gingerbread Men", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1691223771, + "name": "Light-Up Frame Small", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1696050067, + "name": "Modular Car Lift", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 200 + }, + { + "itemId": 317398316, + "quantity": 5 + }, + { + "itemId": 479143914, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1697996440, + "name": "Landscape Photo Frame", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1711033574, + "name": "Bone Club", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1719978075, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1719978075, + "quantity": 20 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1712070256, + "name": "HV 5.56 Rifle Ammo", + "stackSize": 128, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 10 + }, + { + "itemId": -265876753, + "quantity": 10 + } + ], + "timeSeconds": 3, + "workbenchLevel": 3 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1712261904, + "name": "Pure Max Health Tea", + "stackSize": 10, + "despawnSeconds": 3600, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1714496074, + "name": "Candle Hat", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 9, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 15 + }, + { + "itemId": -946369541, + "quantity": 5 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1714509152, + "name": "Ballista", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1717250161, + "name": "Electric Table Lamp", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1719587208, + "name": "Targeting Attachment", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1719978075, + "name": "Bone Fragments", + "stackSize": 1000, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1722154847, + "name": "Hide Pants", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1381010055, + "quantity": 10 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1723747470, + "name": "Tree Lights", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1729120840, + "name": "Wooden Door", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 180, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 300 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1729374708, + "name": "Pure Ore Tea", + "stackSize": 10, + "despawnSeconds": 3600, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1729712564, + "name": "Portrait Photo Frame", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1730664641, + "name": "Wallpaper Ceiling", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1732236518, + "name": "Caboose", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1735402444, + "name": "Disco Floor", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1736620421, + "name": "Clothing Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1744298439, + "name": "Blue Boomer", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 18, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 9, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + }, + { + "itemId": -265876753, + "quantity": 30 + }, + { + "itemId": -946369541, + "quantity": 15 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1746956556, + "name": "Bone Armor", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 9, + "probability": 1 + }, + { + "itemId": 1719978075, + "quantity": 42, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 15 + }, + { + "itemId": 1719978075, + "quantity": 70 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1751045826, + "name": "Hoodie", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 24, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 40 + }, + { + "itemId": 1234880403, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1757265204, + "name": "Silver Egg", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1758333838, + "name": "Teal", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1762167092, + "name": "Green ID Tag", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1768112091, + "name": "Tomaha Snowmobile", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1769475390, + "name": "Wood Frame Standing", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1770475779, + "name": "Worm", + "stackSize": 25, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1770744540, + "name": "Generic vehicle chassis", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1771755747, + "name": "Black Berry", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1776460938, + "name": "Blood", + "stackSize": 1000, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1783512007, + "name": "Cactus Flesh", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1784005657, + "name": "Parachute (Deployed)", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1784406797, + "name": "Sousaphone", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1787198294, + "name": "Frontier Mirror Standing", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1789825282, + "name": "Candy Cane Club", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1796682209, + "name": "Custom SMG", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 5, + "probability": 1 + }, + { + "itemId": 1230323789, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": -1021495308, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 8 + }, + { + "itemId": 1230323789, + "quantity": 1 + }, + { + "itemId": -1021495308, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1801656689, + "name": "Light-Up Frame XL", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1803831286, + "name": "Garry\u0027s Mod Tool Gun", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 20 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1811780502, + "name": "Radioactive Water", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1814288539, + "name": "Bone Knife", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1719978075, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1719978075, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1819863051, + "name": "Sky Lantern", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + }, + { + "itemId": -946369541, + "quantity": 5 + } + ], + "timeSeconds": 1.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1827479659, + "name": "Burnt Wolf Meat", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1831249347, + "name": "Scattershot", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1835946060, + "name": "Cable Tunnel", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1840570710, + "name": "Above Ground Pool", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 2019042823, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 300, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 200 + }, + { + "itemId": 2019042823, + "quantity": 3 + }, + { + "itemId": -151838493, + "quantity": 500 + } + ], + "timeSeconds": 37.5, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 1840822026, + "name": "Beancan Grenade", + "stackSize": 5, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -265876753, + "quantity": 36, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -265876753, + "quantity": 60 + }, + { + "itemId": 69511070, + "quantity": 20 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1846605708, + "name": "Abyss Torch", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1849409072, + "name": "Silly Horse Mask", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1849887541, + "name": "Small Generator", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 5 + }, + { + "itemId": 479143914, + "quantity": 2 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1850456855, + "name": "Road Sign Kilt", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 1199391518, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1381010055, + "quantity": 10 + }, + { + "itemId": 1199391518, + "quantity": 1 + }, + { + "itemId": 1234880403, + "quantity": 2 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1856217390, + "name": "Egg Basket", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 18, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1858828593, + "name": "Egg", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1865253052, + "name": "Dracula Mask", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1869224826, + "name": "Motorbike With Sidecar", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1873004466, + "name": "Coconut Armor Gloves", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1873897110, + "name": "Cooked Bear Meat", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1874610722, + "name": "Armored Cockpit Vehicle Module", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 150 + }, + { + "itemId": 317398316, + "quantity": 5 + } + ], + "timeSeconds": 30, + "workbenchLevel": 3 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1877339384, + "name": "Burlap Headwrap", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1878053256, + "name": "Rowboat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1882709339, + "name": "Metal Blade", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 30 + }, + { + "itemId": -932201673, + "quantity": 10 + } + ], + "timeSeconds": 0.75, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1883981798, + "name": "Low Quality Pistons", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1883981800, + "name": "High Quality Pistons", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 72, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 120 + } + ], + "timeSeconds": 10, + "workbenchLevel": 3 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1883981801, + "name": "Medium Quality Pistons", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 42, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 70 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1884461210, + "name": "Charcoal Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1885488976, + "name": "Spooky Speaker", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 240, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 400 + }, + { + "itemId": 69511070, + "quantity": 100 + }, + { + "itemId": -858312878, + "quantity": 20 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1892536031, + "name": "Fluorescent Light", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1895235349, + "name": "Disco Ball", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 1898094925, + "name": "Pumpkin Plant Clone", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1899610628, + "name": "Medium Loot Bag", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1903654061, + "name": "Small Planter Box", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 2019042823, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 2019042823, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 1905387657, + "name": "Pure Rad. Removal Tea", + "stackSize": 10, + "despawnSeconds": 3600, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1911552868, + "name": "Black Berry Seed", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1914691295, + "name": "Prototype 17", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 838308300, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 573926264, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 1916016738, + "name": "Light-Up Mirror Standing", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1917703890, + "name": "Burnt Horse Meat", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1925646349, + "name": "Spoiled Pork Meat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1931713481, + "name": "Black Raspberries", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1933140008, + "name": "PT Boat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1937380239, + "name": "Frontier Hatchet", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1946219319, + "name": "Camp Fire", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1948067030, + "name": "Ladder Hatch", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 180, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -316250604, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -316250604, + "quantity": 1 + }, + { + "itemId": 69511070, + "quantity": 300 + }, + { + "itemId": 479143914, + "quantity": 3 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 1950013766, + "name": "Light-Up Frame Standing", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1950721418, + "name": "Salvaged Shelves", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1951603367, + "name": "Switch", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 1953903201, + "name": "Nailgun", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + }, + { + "itemId": -932201673, + "quantity": 15 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 1954597876, + "name": "Bee Catapult Bomb", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1965232394, + "name": "Crossbow", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + }, + { + "itemId": 1414245522, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + }, + { + "itemId": 69511070, + "quantity": 75 + }, + { + "itemId": 1414245522, + "quantity": 2 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1973165031, + "name": "Birthday Cake", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1973684065, + "name": "Burnt Chicken", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1973949960, + "name": "Frontier Bolts Single Item Rack", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 50 + }, + { + "itemId": 69511070, + "quantity": 20 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 1975934948, + "name": "Survey Charge", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -265876753, + "quantity": 18, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 6, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -265876753, + "quantity": 30 + }, + { + "itemId": -858312878, + "quantity": 5 + }, + { + "itemId": 69511070, + "quantity": 10 + }, + { + "itemId": -946369541, + "quantity": 20 + } + ], + "timeSeconds": 11.25, + "workbenchLevel": 2 + }, + "research": { + "scrap": 500 + } + }, + { + "id": 1983621560, + "name": "Floor triangle grill", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1989785143, + "name": "High Quality Horse Shoes", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 4 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 1991794121, + "name": "Trike", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 1992974553, + "name": "Burlap Trousers", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 20 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 1993693904, + "name": "Boat Building Station", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2005491391, + "name": "Extended Magazine", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 10 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 2009734114, + "name": "Christmas Door Wreath", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 20 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 2019042823, + "name": "Tarp", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 2021351233, + "name": "Advanced Rad. Removal Tea", + "stackSize": 10, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2023888403, + "name": "Medium Rechargeable Battery", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 5 + }, + { + "itemId": 73681876, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 2024467711, + "name": "Pure Scrap Tea", + "stackSize": 10, + "despawnSeconds": 3600, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2036395619, + "name": "Scatter Dart", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2039177180, + "name": "Bear Pie", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2040726127, + "name": "Combat Knife", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + }, + { + "itemId": 317398316, + "quantity": 1 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 2041899972, + "name": "Triangle Ladder Hatch", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 180, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -316250604, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -316250604, + "quantity": 1 + }, + { + "itemId": 69511070, + "quantity": 300 + }, + { + "itemId": 479143914, + "quantity": 3 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": 2047789913, + "name": "Lead Armor Insert", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2048317869, + "name": "Wolf Skull", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2052270186, + "name": "Inner Tube", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2054391128, + "name": "Factory Door", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2054929933, + "name": "Jungle Relic Assault Rifle", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2055695285, + "name": "Frontier Mirror Medium", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2063916636, + "name": "Advanced Ore Tea", + "stackSize": 10, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2068884361, + "name": "Small Backpack", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 1234880403, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1234880403, + "quantity": 5 + }, + { + "itemId": -858312878, + "quantity": 50 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": 2070189026, + "name": "Large Banner on pole", + "stackSize": 5, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 50 + }, + { + "itemId": -858312878, + "quantity": 20 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 2083256995, + "name": "Handmade SMG", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2087678962, + "name": "Search Light", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 300, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 500 + }, + { + "itemId": 69511070, + "quantity": 200 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 2090395347, + "name": "Large Solar Panel", + "stackSize": 3, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 5 + }, + { + "itemId": 73681876, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": 2100007442, + "name": "Audio Alarm", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": 2104517339, + "name": "Strobe Light", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + }, + { + "itemId": 317398316, + "quantity": 2 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 2106561762, + "name": "Decorative Tinsel", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": 2114754781, + "name": "Water Purifier", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 9, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + }, + { + "itemId": -1673693549, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -1673693549, + "quantity": 1 + }, + { + "itemId": 69511070, + "quantity": 15 + }, + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": 2120241887, + "name": "Gold Mirror Standing", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2126889441, + "name": "Santa Beard", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 0.625, + "workbenchLevel": null + }, + "research": null + }, + { + "id": 2130820932, + "name": "Cancer Research UK Plushie", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2130820933, + "name": "Ronald McDonald House UK Plushie", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": 2133269020, + "name": "Red Berry Clone", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -226151558, + "name": "2 Module Car Chassis", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -866121090, + "name": "2 Module Car", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -831725027, + "name": "3 Module Car", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -935322684, + "name": "4 Module Car", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1467876094, + "name": "#50cal", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -880494890, + "name": "Abyss Horizontal Storage Tank", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -919882824, + "name": "Abyss Vertical Storage Tank", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1896395719, + "name": "Advanced Blueprint Fragment", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1498613415, + "name": "Advanced Cooling Tea", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -652889722, + "name": "Advanced Crafting Quality Tea", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -334418777, + "name": "Advanced Warming Tea", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1385721419, + "name": "Advanced Harvesting Tea", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2097376851, + "name": "Nailgun Nails", + "stackSize": 64, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 1, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 8 + } + ], + "timeSeconds": 1.25, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -1691396643, + "name": "HV Pistol Ammo", + "stackSize": 128, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 10 + }, + { + "itemId": -265876753, + "quantity": 10 + } + ], + "timeSeconds": 2.25, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -1321651331, + "name": "Explosive 5.56 Rifle Ammo", + "stackSize": 128, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 6, + "probability": 1 + }, + { + "itemId": -1581843485, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 10 + }, + { + "itemId": -265876753, + "quantity": 20 + }, + { + "itemId": -1581843485, + "quantity": 10 + } + ], + "timeSeconds": 3, + "workbenchLevel": 3 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -1211166256, + "name": "5.56 Rifle Ammo", + "stackSize": 128, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 1, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 10 + }, + { + "itemId": -265876753, + "quantity": 5 + } + ], + "timeSeconds": 2.25, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -742865266, + "name": "Rocket", + "stackSize": 3, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 95950017, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 90, + "probability": 1 + }, + { + "itemId": -592016202, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 95950017, + "quantity": 2 + }, + { + "itemId": -265876753, + "quantity": 150 + }, + { + "itemId": -592016202, + "quantity": 10 + } + ], + "timeSeconds": 10, + "workbenchLevel": 3 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -1841918730, + "name": "High Velocity Rocket", + "stackSize": 3, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": -265876753, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 95950017, + "quantity": 1 + }, + { + "itemId": -265876753, + "quantity": 100 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -1843426638, + "name": "MLRS Rocket", + "stackSize": 6, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 95950017, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -384243979, + "name": "SAM Ammo", + "stackSize": 1000, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -265876753, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 95950017, + "quantity": 1 + }, + { + "itemId": -265876753, + "quantity": 30 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -17123659, + "name": "Smoke Rocket WIP!!!!", + "stackSize": 3, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 48, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 120, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1036635990, + "name": "12 Gauge Incendiary Shell", + "stackSize": 64, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -1581843485, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 5 + }, + { + "itemId": -265876753, + "quantity": 10 + }, + { + "itemId": -1581843485, + "quantity": 20 + } + ], + "timeSeconds": 2.25, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1685290200, + "name": "12 Gauge Buckshot", + "stackSize": 64, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 5 + }, + { + "itemId": -265876753, + "quantity": 10 + } + ], + "timeSeconds": 2.25, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -727717969, + "name": "12 Gauge Slug", + "stackSize": 32, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 5 + }, + { + "itemId": -265876753, + "quantity": 10 + } + ], + "timeSeconds": 2.25, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1432674913, + "name": "Anti-Radiation Pills", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -601133933, + "name": "Armoured Triangle Laddder Hatch", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1023065463, + "name": "High Velocity Arrow", + "stackSize": 64, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 20 + }, + { + "itemId": 69511070, + "quantity": 5 + } + ], + "timeSeconds": 1.875, + "workbenchLevel": 1 + }, + "research": { + "scrap": 10 + } + }, + { + "id": -1234735557, + "name": "Wooden Arrow", + "stackSize": 64, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 8, + "probability": 1 + }, + { + "itemId": -2099697608, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 25 + }, + { + "itemId": -2099697608, + "quantity": 10 + } + ], + "timeSeconds": 1.875, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -1622110948, + "name": "Bandit Guard Gear", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 2019042823, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 5, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1266045928, + "name": "Bunny Onesie", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 24, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1004426654, + "name": "Bunny Ears", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -747743875, + "name": "Egg Suit", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 36, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 60 + }, + { + "itemId": 1234880403, + "quantity": 2 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1773144852, + "name": "Hide Skirt", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1381010055, + "quantity": 10 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -1506417026, + "name": "Ninja Suit", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 36, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 60 + }, + { + "itemId": 1234880403, + "quantity": 2 + } + ], + "timeSeconds": 0.625, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -324675402, + "name": "Reindeer Antlers", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -842267147, + "name": "Snowman Helmet", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -2139580305, + "name": "Auto Turret", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 1523195708, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": 634478325, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1523195708, + "quantity": 1 + }, + { + "itemId": 634478325, + "quantity": 1 + }, + { + "itemId": 317398316, + "quantity": 10 + } + ], + "timeSeconds": 33.75, + "workbenchLevel": 2 + }, + "research": { + "scrap": 500 + } + }, + { + "id": -262590403, + "name": "Salvaged Axe", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 1882709339, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 95950017, + "quantity": 1 + }, + { + "itemId": 1882709339, + "quantity": 5 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -19318653, + "name": "Hammerhead Bolt", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1987565603, + "name": "Incendiary Bolt", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1127003365, + "name": "Piercer Bolt", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -357442017, + "name": "Pitchfork Bolt", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -759279626, + "name": "Mounted Ballista", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1652561344, + "name": "Bamboo Barrel", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2072273936, + "name": "Bandage", + "stackSize": 3, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 4 + } + ], + "timeSeconds": 3.125, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -1215166612, + "name": "A Barrel Costume", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1950721390, + "name": "Concrete Barricade", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -2099697608, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -2099697608, + "quantity": 200 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -424687710, + "name": "Medieval Barricade", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -559599960, + "name": "Sandbag Barricade", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -2099697608, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -2099697608, + "quantity": 100 + }, + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -143481979, + "name": "Basic Blueprint Fragment", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1274093662, + "name": "Bath Tub Planter", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -479314201, + "name": "Battering Ram Head", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -187304968, + "name": "Battering Ram", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -321431890, + "name": "Beach Chair", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 50 + }, + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -1621539785, + "name": "Beach Parasol", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 20 + }, + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -8312704, + "name": "Beach Towel", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -576866254, + "name": "Fabric Beanbag Seat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1220928936, + "name": "Leather Beanbag Seat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -989755543, + "name": "Burnt Bear Meat", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1520560807, + "name": "Raw Bear Meat", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1273339005, + "name": "Bed", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 36, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 60 + }, + { + "itemId": 69511070, + "quantity": 100 + }, + { + "itemId": 1234880403, + "quantity": 2 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1318837358, + "name": "Cooked Big Cat Meat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2095813057, + "name": "Raw Big Cat Meat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -851288382, + "name": "Blow Pipe", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -586342290, + "name": "Blueberries", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -996920608, + "name": "Blueprint", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -880412831, + "name": "Blunderbuss", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -321247698, + "name": "Boat Building Plan", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1478094705, + "name": "Boogie Board", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + }, + { + "itemId": 2019042823, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + }, + { + "itemId": 2019042823, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -1113501606, + "name": "Boom Box", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + }, + { + "itemId": 69511070, + "quantity": 100 + }, + { + "itemId": -858312878, + "quantity": 20 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -1000573653, + "name": "Frog Boots", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 2019042823, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 2019042823, + "quantity": 1 + } + ], + "timeSeconds": 0.625, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -180129657, + "name": "Wood Storage Box", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -761829530, + "name": "Burlap Shoes", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -700591459, + "name": "Can of Beans", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1557377697, + "name": "Empty Tuna Can", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 10, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1941646328, + "name": "Can of Tuna", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -34498533, + "name": "Cannon", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -411735114, + "name": "Cannonball", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -912398867, + "name": "Cassette - Medium", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 3.125, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1827561369, + "name": "Propane Explosive Bomb", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -484006286, + "name": "Firebomb", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -463012608, + "name": "Salvaged Ejector Seat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1944704288, + "name": "Ice Throne", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1938052175, + "name": "Charcoal", + "stackSize": 1000, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1848736516, + "name": "Cooked Chicken", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -152332823, + "name": "Chicken Costume", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 15, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 25 + }, + { + "itemId": -151838493, + "quantity": 200 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1440987069, + "name": "Raw Chicken Breast", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -751151717, + "name": "Spoiled Chicken", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2018158920, + "name": "Chicken Coop", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1916473915, + "name": "Chinese Lantern", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 15, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 25 + }, + { + "itemId": -946369541, + "quantity": 5 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -770304148, + "name": "Chinese Lantern White", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 15, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 25 + }, + { + "itemId": -946369541, + "quantity": 5 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -965336208, + "name": "Chocolate Bar", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -105343718, + "name": "Circle Balloon", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -778875547, + "name": "Corn Clone", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1305326964, + "name": "Green Berry Clone", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -886280491, + "name": "Hemp Clone", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -798662404, + "name": "Orchid Clone", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -19360132, + "name": "Rose Clone", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -858312878, + "name": "Cloth", + "stackSize": 1000, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -606898372, + "name": "#clothingmannequin", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -903796529, + "name": "Asbestos Armor Insert", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -593892112, + "name": "Wooden Armor Insert", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -582467439, + "name": "Coconut Armor Helmet", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -24571537, + "name": "Coconut", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -803263829, + "name": "Coffee Can Helmet", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 9, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 36, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 15 + }, + { + "itemId": 69511070, + "quantity": 60 + }, + { + "itemId": 1234880403, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1247485104, + "name": "Command Block", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1593678393, + "name": "Ammo Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -413663149, + "name": "Comps Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1998423571, + "name": "Explosives Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -544295594, + "name": "Guns Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -800824218, + "name": "Meds Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -10594280, + "name": "Sulfur Storage Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1488398114, + "name": "Composter", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 2019042823, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 2019042823, + "quantity": 2 + }, + { + "itemId": -151838493, + "quantity": 200 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -1588628467, + "name": "Computer Station", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 1523195708, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": -1044468317, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": 888415708, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 5 + }, + { + "itemId": 1523195708, + "quantity": 1 + }, + { + "itemId": -1044468317, + "quantity": 1 + }, + { + "itemId": 888415708, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1360171080, + "name": "Concrete Pickaxe", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1260229965, + "name": "Basic Cooling Tea", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1081599445, + "name": "Raw Crocodile Meat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1796837031, + "name": "Spoiled Crocodile Meat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -321733511, + "name": "Crude Oil", + "stackSize": 500, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -97956382, + "name": "Tool Cupboard", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 600, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 1000 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -963819285, + "name": "Incapacitate Dart", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -594596146, + "name": "Radiation Dart", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -274709858, + "name": "Wood Dart", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1903165497, + "name": "Bone Helmet", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 9, + "probability": 1 + }, + { + "itemId": 1719978075, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 15 + }, + { + "itemId": 1719978075, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -78533081, + "name": "Burnt Deer Meat", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1509851560, + "name": "Cooked Deer Meat", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2035449523, + "name": "Spoiled Deer Meat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -113413047, + "name": "Diving Mask", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 42, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1559420426, + "name": "Double Diving Tank", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2022172587, + "name": "Diving Tank", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 4, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1101924344, + "name": "Wetsuit", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -451310088, + "name": "Documents", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1151332840, + "name": "Wooden Frontier Bar Doors", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1336109173, + "name": "Wood Double Door", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 210, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 350 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -1063073030, + "name": "Wooden Boat Door", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2067472972, + "name": "Sheet Metal Door", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 150 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -1112793865, + "name": "Door Key", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -258574361, + "name": "Dracula Cape", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -854270928, + "name": "Dragon Door Knocker", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 20 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1519126340, + "name": "Drop Box", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 200 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1330640246, + "name": "Junkyard Drum Kit", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + }, + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -1779203452, + "name": "Portable Easel", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1002156085, + "name": "Gold Egg", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -126305173, + "name": "Painted Egg", + "stackSize": 1000, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -979302481, + "name": "Easter Door Wreath", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 20 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -692338819, + "name": "Small Rechargeable Battery", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 5 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -690968985, + "name": "Blocker", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1778897469, + "name": "Button", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1510616686, + "name": "Chandelier", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -216999575, + "name": "Counter", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -502177121, + "name": "Door Controller", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -939424778, + "name": "Flasher Light", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 72, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 120 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1196547867, + "name": "Electric Furnace", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 5 + }, + { + "itemId": 69511070, + "quantity": 200 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -295829489, + "name": "Test Generator", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 15, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -629028935, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1507239837, + "name": "HBHF Sensor", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -784870360, + "name": "Electric Heater", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 200 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -44876289, + "name": "Igniter", + "stackSize": 3, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": -798293154, + "name": "Laser Detector", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1286302544, + "name": "OR Switch", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -2049214035, + "name": "Pressure Pad", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 90, + "probability": 1 + }, + { + "itemId": -1021495308, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": 479143914, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 150 + }, + { + "itemId": -1021495308, + "quantity": 1 + }, + { + "itemId": 479143914, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1044468317, + "name": "RF Broadcaster", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 150 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -948291630, + "name": "Seismic Sensor", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 3 + }, + { + "itemId": 73681876, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -282113991, + "name": "Simple Light", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -563624462, + "name": "Splitter", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1258821205, + "name": "Spot Light", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2134097299, + "name": "Tripod Spot Light", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -781014061, + "name": "Sprinkler", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1448252298, + "name": "Electrical Branch", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -458565393, + "name": "Root Combiner", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -746647361, + "name": "Memory Cell", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1878475007, + "name": "Satchel Charge", + "stackSize": 10, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 1840822026, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -369760990, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": 1414245522, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1840822026, + "quantity": 4 + }, + { + "itemId": -369760990, + "quantity": 1 + }, + { + "itemId": 1414245522, + "quantity": 1 + } + ], + "timeSeconds": 3.125, + "workbenchLevel": 1 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -592016202, + "name": "Explosives", + "stackSize": 100, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": -265876753, + "quantity": 30, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -1581843485, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -265876753, + "quantity": 50 + }, + { + "itemId": -946369541, + "quantity": 3 + }, + { + "itemId": -1581843485, + "quantity": 10 + }, + { + "itemId": 69511070, + "quantity": 10 + } + ], + "timeSeconds": 5, + "workbenchLevel": 3 + }, + "research": { + "scrap": 500 + } + }, + { + "id": -1018587433, + "name": "Animal Fat", + "stackSize": 1000, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -930193596, + "name": "Fertilizer", + "stackSize": 1000, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1535621066, + "name": "Stone Fireplace", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -2099697608, + "quantity": 300, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -2099697608, + "quantity": 500 + }, + { + "itemId": -151838493, + "quantity": 200 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": -656349006, + "name": "Green Boomer", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 18, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 9, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + }, + { + "itemId": -265876753, + "quantity": 30 + }, + { + "itemId": -946369541, + "quantity": 15 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -7270019, + "name": "Orange Boomer", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 18, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 9, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + }, + { + "itemId": -265876753, + "quantity": 30 + }, + { + "itemId": -946369541, + "quantity": 15 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -379734527, + "name": "Pattern Boomer", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 18, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 9, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + }, + { + "itemId": -265876753, + "quantity": 30 + }, + { + "itemId": -946369541, + "quantity": 15 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1553999294, + "name": "Red Boomer", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 18, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 9, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + }, + { + "itemId": -265876753, + "quantity": 30 + }, + { + "itemId": -946369541, + "quantity": 15 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -280223496, + "name": "Violet Boomer", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 18, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 9, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + }, + { + "itemId": -265876753, + "quantity": 30 + }, + { + "itemId": -946369541, + "quantity": 15 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -515830359, + "name": "Blue Roman Candle", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + }, + { + "itemId": -946369541, + "quantity": 10 + } + ], + "timeSeconds": 37.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1306288356, + "name": "Green Roman Candle", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + }, + { + "itemId": -946369541, + "quantity": 10 + } + ], + "timeSeconds": 37.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1486461488, + "name": "Red Roman Candle", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + }, + { + "itemId": -946369541, + "quantity": 10 + } + ], + "timeSeconds": 37.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -99886070, + "name": "Violet Roman Candle", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + }, + { + "itemId": -946369541, + "quantity": 10 + } + ], + "timeSeconds": 37.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -454370658, + "name": "Red Volcano Firework", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 12, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 9, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 20 + }, + { + "itemId": -265876753, + "quantity": 15 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1538109120, + "name": "Violet Volcano Firework", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 12, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 9, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 20 + }, + { + "itemId": -265876753, + "quantity": 15 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -587989372, + "name": "Catfish", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1698937385, + "name": "Herring", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -542577259, + "name": "Minnows", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1904821376, + "name": "Orange Roughy", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -851988960, + "name": "Salmon", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1654233406, + "name": "Sardine", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1768880890, + "name": "Small Shark", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1878764039, + "name": "Small Trout", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1707425764, + "name": "Fishing Tackle", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1913996738, + "name": "Fish Trophy", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 75 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1215753368, + "name": "Flame Thrower", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 9, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 4, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -1673693549, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 15 + }, + { + "itemId": 95950017, + "quantity": 6 + }, + { + "itemId": -946369541, + "quantity": 100 + }, + { + "itemId": -1673693549, + "quantity": 2 + } + ], + "timeSeconds": 30, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -196667575, + "name": "Flashlight", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 10 + } + }, + { + "id": -478923685, + "name": "Armored Triangle Ladder Hatch", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -265292885, + "name": "Fluid Combiner", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1166712463, + "name": "Fluid Splitter", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1973785141, + "name": "Fogger-3000", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 18, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + }, + { + "itemId": -946369541, + "quantity": 30 + }, + { + "itemId": 95950017, + "quantity": 1 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1647389398, + "name": "Frankenstein Mask", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -134959124, + "name": "Light Frankenstein Head", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -1709878924, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -1018587433, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 1719978075, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1624770297, + "name": "Light Frankenstein Torso", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -1709878924, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -1018587433, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 1719978075, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1732475823, + "name": "Medium Frankenstein Head", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -1709878924, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -1018587433, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 1719978075, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -297099594, + "name": "Heavy Frankenstein Head", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -1709878924, + "quantity": 4, + "probability": 1 + }, + { + "itemId": -1018587433, + "quantity": 9, + "probability": 1 + }, + { + "itemId": 1719978075, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -2024549027, + "name": "Heavy Frankenstein Legs", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -1709878924, + "quantity": 4, + "probability": 1 + }, + { + "itemId": -1018587433, + "quantity": 9, + "probability": 1 + }, + { + "itemId": 1719978075, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -2107018088, + "name": "Shovel Bass", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 50 + }, + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1530414568, + "name": "Cassette Recorder", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -1049881973, + "name": "Cowbell", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 21, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 35 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -2040817543, + "name": "Pan Flute", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 12, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 20 + }, + { + "itemId": -858312878, + "quantity": 5 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -2124352573, + "name": "Acoustic Guitar", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": -979951147, + "name": "Jerry Can Guitar", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 15, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 25 + }, + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1379036069, + "name": "Canbourine", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1999722522, + "name": "Furnace", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -2099697608, + "quantity": 120, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -2099697608, + "quantity": 200 + }, + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": -946369541, + "quantity": 50 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -1992717673, + "name": "Large Furnace", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -2099697608, + "quantity": 300, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 360, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -2099697608, + "quantity": 500 + }, + { + "itemId": -151838493, + "quantity": 600 + }, + { + "itemId": -946369541, + "quantity": 75 + } + ], + "timeSeconds": 30, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -629028935, + "name": "Electric Fuse", + "stackSize": 10, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 24, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -401905610, + "name": "High External Adobe Gate", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1442339204, + "name": "High External Legacy Gate", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -691113464, + "name": "High External Stone Gate", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": -2099697608, + "quantity": 1800, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -2099697608, + "quantity": 3000 + }, + { + "itemId": 479143914, + "quantity": 5 + } + ], + "timeSeconds": 26.25, + "workbenchLevel": 2 + }, + "research": { + "scrap": 500 + } + }, + { + "id": -335089230, + "name": "High External Wooden Gate", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 1800, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 3000 + }, + { + "itemId": 479143914, + "quantity": 2 + } + ], + "timeSeconds": 21.875, + "workbenchLevel": 1 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -379403794, + "name": "Water Wheel", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1819763926, + "name": "Wind Turbine", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 300, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -1994909036, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 500 + }, + { + "itemId": 317398316, + "quantity": 10 + }, + { + "itemId": 479143914, + "quantity": 3 + }, + { + "itemId": -1994909036, + "quantity": 3 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -1043618880, + "name": "Ghost Costume", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -695124222, + "name": "Giant Candy Decor", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -558880549, + "name": "Gingerbread Suit", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -690276911, + "name": "Glowing Eyes", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1899491405, + "name": "Glue", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -996235148, + "name": "Ornate Frame large", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1901993050, + "name": "Ornate Frame Medium", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1836526520, + "name": "Ornate Frame Small", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1528767189, + "name": "Ornate Frame Standing", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1430299277, + "name": "Ornate Frame XL", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1322332389, + "name": "Ornate Frame XXL", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1804515496, + "name": "Gold Mirror Medium", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1444650226, + "name": "Gold Mirror Small", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -746030907, + "name": "Granola Bar", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -455286320, + "name": "Gray ID Tag", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -936921910, + "name": "Flashbang", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -265876753, + "quantity": 15, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -265876753, + "quantity": 25 + }, + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -568419968, + "name": "Grub", + "stackSize": 25, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -265876753, + "name": "Gun Powder", + "stackSize": 1000, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": -1938052175, + "quantity": 2, + "probability": 1 + }, + { + "itemId": -1581843485, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -1938052175, + "quantity": 30 + }, + { + "itemId": -1581843485, + "quantity": 20 + } + ], + "timeSeconds": 1.25, + "workbenchLevel": 1 + }, + "research": { + "scrap": 10 + } + }, + { + "id": -246672609, + "name": "Horizontal Weapon Rack", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 72, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 120 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -849373693, + "name": "Frontier Horseshoe Single Item Rack", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -52398594, + "name": "Frontier Horns Single Item Rack", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1719978075, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1719978075, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -96256997, + "name": "Wide Weapon Rack", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 105, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 175 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -1989600732, + "name": "Hot Air Balloon Armor", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 200 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1923843855, + "name": "Half Height Bamboo Shelves", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -888153050, + "name": "Halloween Candy", + "stackSize": 1000, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1785231475, + "name": "Surgeon Scrubs", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 36, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 60 + }, + { + "itemId": 1234880403, + "quantity": 2 + } + ], + "timeSeconds": 0.625, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -1506397857, + "name": "Salvaged Hammer", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 95950017, + "quantity": 1 + }, + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -839576748, + "name": "Handcuffs", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 42, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 70 + } + ], + "timeSeconds": 11.25, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -23994173, + "name": "Boonie Hat", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1022661119, + "name": "Baseball Cap", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 5 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -22883916, + "name": "Dragon Mask", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 2048317869, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + }, + { + "itemId": 2048317869, + "quantity": 1 + } + ], + "timeSeconds": 3.125, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -418359052, + "name": "Horse Mask", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1539025626, + "name": "Miners Hat", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 9, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 15 + }, + { + "itemId": -946369541, + "quantity": 10 + }, + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -986782031, + "name": "Rabbit Mask", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 2048317869, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + }, + { + "itemId": 2048317869, + "quantity": 1 + } + ], + "timeSeconds": 3.125, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1314079879, + "name": "Snake mask", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -507248640, + "name": "Wellipets Hat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1478212975, + "name": "Wolf Headdress", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 2048317869, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + }, + { + "itemId": 2048317869, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -1252059217, + "name": "Hatchet", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -902423513, + "name": "Krieg Hazmat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -470439097, + "name": "Arctic Suit", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -797592358, + "name": "Abyss Pack", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -105415879, + "name": "Frontier Suit", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -560304835, + "name": "Space Suit", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -253079493, + "name": "Scientist Suit", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1937799374, + "name": "Naval Scientist Suit", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1958316066, + "name": "Scientist Suit", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 2019042823, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 5, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1696379844, + "name": "Hazmat Youtooz", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -2123125470, + "name": "Advanced Healing Tea", + "stackSize": 10, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -929092070, + "name": "Basic Healing Tea", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1677315902, + "name": "Pure Healing Tea", + "stackSize": 10, + "despawnSeconds": 3600, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1102429027, + "name": "Heavy Plate Jacket", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -1994909036, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -1994909036, + "quantity": 2 + }, + { + "itemId": 317398316, + "quantity": 4 + } + ], + "timeSeconds": 33.75, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -1778159885, + "name": "Heavy Plate Pants", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -1994909036, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -1994909036, + "quantity": 1 + }, + { + "itemId": 317398316, + "quantity": 4 + } + ], + "timeSeconds": 33.75, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -722629980, + "name": "Heavy Scientist Youtooz", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1214542497, + "name": "HMLMG", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 36, + "probability": 1 + }, + { + "itemId": -1021495308, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 176787552, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 60 + }, + { + "itemId": 176787552, + "quantity": 1 + }, + { + "itemId": -1021495308, + "quantity": 3 + }, + { + "itemId": 479143914, + "quantity": 2 + } + ], + "timeSeconds": 30, + "workbenchLevel": 3 + }, + "research": { + "scrap": 500 + } + }, + { + "id": -1442559428, + "name": "Hobo Barrel", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -218009552, + "name": "Homing Missile Launcher", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": 634478325, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 20 + }, + { + "itemId": 95950017, + "quantity": 3 + }, + { + "itemId": 73681876, + "quantity": 1 + }, + { + "itemId": 634478325, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -1513203236, + "name": "Honeycomb", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2068194497, + "name": "Lunar New Year Horse Armor", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1323101799, + "name": "Double Horse Saddle", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1199391518, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1997543660, + "name": "Horse Saddle", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1211268013, + "name": "Basic Horse Shoes", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -1579932985, + "name": "Horse Dung", + "stackSize": 100, + "despawnSeconds": 3600, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1162759543, + "name": "Cooked Horse Meat", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1130350864, + "name": "Raw Horse Meat", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -724146494, + "name": "Spoiled Horse Meat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1982036270, + "name": "High Quality Metal Ore", + "stackSize": 100, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -682687162, + "name": "Burnt Human Meat", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1709878924, + "name": "Raw Human Meat", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -869598982, + "name": "Small Hunting Trophy", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1780802565, + "name": "Salvaged Icepick", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 1882709339, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 95950017, + "quantity": 1 + }, + { + "itemId": 1882709339, + "quantity": 5 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -1160621614, + "name": "Red Industrial Wall Light", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -697981032, + "name": "Inner Tube", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + }, + { + "itemId": 2019042823, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + }, + { + "itemId": 2019042823, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -1163532624, + "name": "Jacket", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 50 + }, + { + "itemId": 1234880403, + "quantity": 2 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -48090175, + "name": "Snow Jacket", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 36, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 60 + }, + { + "itemId": 1234880403, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1824943010, + "name": "Jack O Lantern Happy", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -567909622, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -567909622, + "quantity": 2 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -97459906, + "name": "Jumpsuit", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -874908751, + "name": "Waterwell NPC Jumpsuit", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -484206264, + "name": "Blue Keycard", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1880870149, + "name": "Red Keycard", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -194509282, + "name": "Butcher Knife", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -2073432256, + "name": "Skinning Knife", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -427072335, + "name": "Knights armour helmet", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -945708533, + "name": "Knights armour skirt plates", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1770281406, + "name": "Krieg chainsword", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -420889602, + "name": "Krieg Shotgun", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -874650016, + "name": "Krieg Large Backpack", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -316250604, + "name": "Wooden Ladder", + "stackSize": 5, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 180, + "probability": 1 + }, + { + "itemId": 1414245522, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 300 + }, + { + "itemId": 1414245522, + "quantity": 3 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -907422733, + "name": "Large Backpack", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 12, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -489848205, + "name": "Large Candle Set", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -1018587433, + "quantity": 12, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -1018587433, + "quantity": 20 + }, + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1440443161, + "name": "Clump of Latex Balloons", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -73195037, + "name": "Legacy Bow", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1310391395, + "name": "Legacy Furnace", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1294739579, + "name": "Light-Up Frame Medium", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -389796733, + "name": "Light-Up Mirror Small", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2069578888, + "name": "M249", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 24, + "probability": 1 + }, + { + "itemId": -1021495308, + "quantity": 4, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 4, + "probability": 1 + }, + { + "itemId": 176787552, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -850982208, + "name": "Key Lock", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 75 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -110921842, + "name": "Locker", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + }, + { + "itemId": -151838493, + "quantity": 50 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -2027988285, + "name": "Locomotive", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1469578201, + "name": "Longsword", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 1882709339, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1882709339, + "quantity": 2 + }, + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -946369541, + "name": "Low Grade Fuel", + "stackSize": 500, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -1018587433, + "quantity": 1, + "probability": 0.45 + }, + { + "itemId": -858312878, + "quantity": 1, + "probability": 0.15 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -1018587433, + "quantity": 3 + }, + { + "itemId": -858312878, + "quantity": 1 + } + ], + "timeSeconds": 3.125, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -763071910, + "name": "Lumberjack Hoodie", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 24, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -399173933, + "name": "Prototype Hatchet", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1961560162, + "name": "Firecracker String", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -265876753, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -2026042603, + "name": "Baseball Bat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1966748496, + "name": "Mace", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1137865085, + "name": "Machete", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 24, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 40 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -586784898, + "name": "Mail Box", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 25 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1035206446, + "name": "Clothing Mannequin", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2012470695, + "name": "Improvised Balaclava", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 9, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 15 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": -702051347, + "name": "Bandana Mask", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 5 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1184406448, + "name": "Basic Max Health Tea", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -242084766, + "name": "Cooked Pork", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -380502678, + "name": "Medieval Sheet Metal Double Door", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1654401345, + "name": "Medieval Sheet Metal Door", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -583379016, + "name": "Megaphone", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 50 + }, + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -1334569149, + "name": "Hockey Mask", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -194953424, + "name": "Metal Facemask", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 9, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 4, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1381010055, + "quantity": 50 + }, + { + "itemId": 317398316, + "quantity": 15 + }, + { + "itemId": 1234880403, + "quantity": 6 + } + ], + "timeSeconds": 45, + "workbenchLevel": 3 + }, + "research": { + "scrap": 500 + } + }, + { + "id": -4031221, + "name": "Metal Ore", + "stackSize": 1000, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1478855279, + "name": "Ice Metal Chest Plate", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1021495308, + "name": "Metal Spring", + "stackSize": 20, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 2 + }, + { + "itemId": -932201673, + "quantity": 50 + } + ], + "timeSeconds": 1, + "workbenchLevel": 3 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -1334255764, + "name": "Minicopter", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -482348853, + "name": "Mini Crossbow", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1130709577, + "name": "Pump Jack", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1449152644, + "name": "MLRS", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -20045316, + "name": "Mobile Phone", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 75, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 125 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -1417478274, + "name": "Motorbike", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2047081330, + "name": "Movember Moustache", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 0.625, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -648077743, + "name": "Mr Spice Can", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1123473824, + "name": "Multiple Grenade Launcher", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 15, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1962971928, + "name": "Mushroom", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -961457160, + "name": "New Year Gong", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1518883088, + "name": "Night Vision Goggles", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 6, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 10 + }, + { + "itemId": 73681876, + "quantity": 2 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -1811234677, + "name": "Beehive Nucleus", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -282193997, + "name": "Orange ID Tag", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2133781216, + "name": "Outbreak Scientist Suit", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -733625651, + "name": "Paddling Pool", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 2019042823, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 100 + }, + { + "itemId": 2019042823, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1039234836, + "name": "Paintable Reactive Target", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -707792719, + "name": "Paintball Gun", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1014934560, + "name": "Paintball Overalls", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1695367501, + "name": "Shorts", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1779183908, + "name": "Paper", + "stackSize": 1000, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -575744869, + "name": "Party Hat", + "stackSize": 1, + "despawnSeconds": 30, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1302129395, + "name": "Pickaxe", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 75, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 125 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1785248332, + "name": "Fish Pie", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1488408786, + "name": "Pumpkin Pie", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -963820355, + "name": "Survivor\u0027s Pie", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1442496789, + "name": "Pinata", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 300, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -144513264, + "name": "Pipe Tool", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 2 + } + ], + "timeSeconds": 0.625, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -75944661, + "name": "Eoka Pistol", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 45, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 75 + }, + { + "itemId": 69511070, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -852563019, + "name": "M92 Pistol", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 15, + "probability": 1 + }, + { + "itemId": 573926264, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": -1021495308, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1815301988, + "name": "Water Pistol", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -952411326, + "name": "Plank", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -280812482, + "name": "Triangle Planter Box", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -804769727, + "name": "Plant Fiber", + "stackSize": 1000, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -430416124, + "name": "Single Plant Pot", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1651220691, + "name": "Pookie Bear", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2086926071, + "name": "Potato", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -365097295, + "name": "Powered Water Purifier", + "stackSize": 3, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 180, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 300 + }, + { + "itemId": -858312878, + "quantity": 20 + }, + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -892718768, + "name": "Prisoner Hood", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 20 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1673693549, + "name": "Empty Propane Tank", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 1, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + }, + { + "itemId": -932201673, + "quantity": 10 + } + ], + "timeSeconds": 0.75, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -567909622, + "name": "Pumpkin", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1476814093, + "name": "Pure Warming Tea", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1386082991, + "name": "Purple ID Tag", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -496584751, + "name": "Rad. Removal Tea", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1729415579, + "name": "Advanced Anti-Rad Tea", + "stackSize": 10, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -487356515, + "name": "Basic Anti-Rad Tea", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -33009419, + "name": "Pure Anti-Rad Tea", + "stackSize": 10, + "despawnSeconds": 3600, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -602717596, + "name": "Red Dog Tags", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1861522751, + "name": "Research Table", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 200 + }, + { + "itemId": -932201673, + "quantity": 20 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -544317637, + "name": "Research Paper", + "stackSize": 1000, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -92315244, + "name": "High Caliber Revolver", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -566907190, + "name": "RF Pager", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 15, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -139037392, + "name": "Abyss Assault Rifle", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1335497659, + "name": "Ice Assault Rifle", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -778367295, + "name": "L96 Rifle", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 24, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 4, + "probability": 1 + }, + { + "itemId": -1021495308, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 176787552, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1812555177, + "name": "LR-300 Assault Rifle", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 24, + "probability": 1 + }, + { + "itemId": -1021495308, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 838308300, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 176787552, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -904863145, + "name": "Semi-Automatic Rifle", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 270, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 573926264, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": -1021495308, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 573926264, + "quantity": 1 + }, + { + "itemId": -1021495308, + "quantity": 1 + }, + { + "itemId": 69511070, + "quantity": 450 + }, + { + "itemId": 317398316, + "quantity": 4 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -348232115, + "name": "SKS", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -699558439, + "name": "Road Sign Gloves", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 1199391518, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1381010055, + "quantity": 20 + }, + { + "itemId": 1199391518, + "quantity": 1 + }, + { + "itemId": 1234880403, + "quantity": 2 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -2002277461, + "name": "Road Sign Jacket", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 1199391518, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1381010055, + "quantity": 20 + }, + { + "itemId": 1199391518, + "quantity": 2 + }, + { + "itemId": 1234880403, + "quantity": 2 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1315992997, + "name": "Dragon Rocket Launcher", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1863063690, + "name": "Rocking Chair", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 78, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 130 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -1104881824, + "name": "Bear Skin Rug", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1381010055, + "quantity": 20 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1985799200, + "name": "Rug", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 25 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": -173268129, + "name": "Rustig\u00E9 Egg - Red", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 2 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -173268132, + "name": "Rustig\u00E9 Egg - Blue", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 2 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -173268131, + "name": "Rustig\u00E9 Egg - Purple", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 2 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -173268126, + "name": "Rustig\u00E9 Egg - Ivory", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 2 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -173268125, + "name": "Rustig\u00E9 Egg - Green", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 2 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -173268128, + "name": "Rustig\u00E9 Egg - White", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 2 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -173268127, + "name": "Rustig\u00E9 Egg - Cerulean", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -173268138, + "name": "Rustig\u00E9 Egg - Amethyst", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2110553371, + "name": "Bamboo Salvaged Shelves", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1978999529, + "name": "Salvaged Cleaver", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 1199391518, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + }, + { + "itemId": 1199391518, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1009359066, + "name": "SAM Site", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -575483084, + "name": "Santa Hat", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1772746857, + "name": "Heavy Scientist Suit", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 2019042823, + "quantity": 3, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 5, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -932201673, + "name": "Scrap", + "stackSize": 1000, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1094453063, + "name": "Shutter Frame large", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1060567807, + "name": "Shutter Frame Medium", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -498301781, + "name": "Shutter Frame Small", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1774190142, + "name": "Shutter Frame Standing", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1244287686, + "name": "Shutter Frame XL", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1211801774, + "name": "Shutter Frame XXL", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -82758111, + "name": "Scrap Mirror Large", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1050697733, + "name": "Scrap Mirror Small", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1380144986, + "name": "Scrap Mirror Standing", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -374457631, + "name": "Sedan", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1776128552, + "name": "Green Berry Seed", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -237809779, + "name": "Hemp Seed", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2084071424, + "name": "Potato Seed", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1511285251, + "name": "Pumpkin Seed", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1037472336, + "name": "Rose Seed", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1790885730, + "name": "Wheat Seed", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -992286106, + "name": "White Berry Seed", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -520133715, + "name": "Yellow Berry Seed", + "stackSize": 50, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1994909036, + "name": "Sheet Metal", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 9, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -2025184684, + "name": "Shirt", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 25 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1549739227, + "name": "Boots", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 9, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1381010055, + "quantity": 20 + }, + { + "itemId": 69511070, + "quantity": 15 + }, + { + "itemId": 1234880403, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -765183617, + "name": "Double Barrel Shotgun", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 105, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 175 + }, + { + "itemId": 95950017, + "quantity": 2 + } + ], + "timeSeconds": 25, + "workbenchLevel": 1 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -41440462, + "name": "Spas-12 Shotgun", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 3, + "probability": 1 + }, + { + "itemId": -1021495308, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1367281941, + "name": "Waterpipe Shotgun", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 90, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 150 + }, + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1536855921, + "name": "Shovel", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1199897169, + "name": "Metal horizontal embrasure", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1199897172, + "name": "Metal Vertical embrasure", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1023374709, + "name": "Wood Shutters", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1368584029, + "name": "Sickle", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1290278434, + "name": "Siege Tower", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -946599114, + "name": "Artist Canvas Standing", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -946599113, + "name": "Artist Canvas Large", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -946599131, + "name": "Artist Canvas Medium", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -816769770, + "name": "Artist Canvas XXL", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1647846966, + "name": "Two Sided Ornate Hanging Sign", + "stackSize": 5, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1423304443, + "name": "Medium Neon Sign", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 200 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -845557339, + "name": "Landscape Picture Frame", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1370759135, + "name": "Portrait Picture Frame", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -996185386, + "name": "XL Picture Frame", + "stackSize": 5, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 90, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 9, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 150 + }, + { + "itemId": -858312878, + "quantity": 15 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1832422579, + "name": "One Sided Town Sign Post", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -143132326, + "name": "Huge Wooden Sign", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 150, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 250 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1819233322, + "name": "Medium Wooden Sign", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -1138208076, + "name": "Small Wooden Sign", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -193519904, + "name": "Single Shallow Wall Shelves", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1056824343, + "name": "Diver propulsion vehicle", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -924959988, + "name": "Skull Trophy", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -769647921, + "name": "Skull Trophy", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 25 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -156748077, + "name": "Skull Trophy", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -216116642, + "name": "Skull Door Knocker", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 20 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -25740268, + "name": "Skull Spikes", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1073015016, + "name": "Skull Spikes", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 90, + "probability": 1 + }, + { + "itemId": 996293980, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 150 + }, + { + "itemId": 996293980, + "quantity": 1 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1078639462, + "name": "Skull Spikes", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1770889433, + "name": "Sky Lantern - Green", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1824770114, + "name": "Sky Lantern - Orange", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1433390281, + "name": "Sky Lantern - Red", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -333406828, + "name": "Sled", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 300, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -135252633, + "name": "Sled", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1754948969, + "name": "Sleeping Bag", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -1293296287, + "name": "Small Oil Refinery", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 300, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 150, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + }, + { + "itemId": 69511070, + "quantity": 500 + }, + { + "itemId": -946369541, + "quantity": 250 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -2058362263, + "name": "Small Candle Set", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -1018587433, + "quantity": 6, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -1018587433, + "quantity": 10 + }, + { + "itemId": -858312878, + "quantity": 5 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -2115299615, + "name": "Small Boat Engine", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1039528932, + "name": "Small Water Bottle", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -158718378, + "name": "Small Ramp", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -695978112, + "name": "Smart Alarm", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 3 + }, + { + "itemId": 73681876, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1758372725, + "name": "Thompson", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 6, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 1230323789, + "quantity": 1, + "probability": 0.6 + }, + { + "itemId": -1021495308, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 10 + }, + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 1230323789, + "quantity": 1 + }, + { + "itemId": -1021495308, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -170436364, + "name": "Cooked Snake Meat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2100458529, + "name": "Raw Snake Meat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1616704051, + "name": "Spoiled Snake Meat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -363689972, + "name": "Snowball", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1364246987, + "name": "Snowmobile", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -555122905, + "name": "Sofa", + "stackSize": 2, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": -858312878, + "quantity": 30 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -343857907, + "name": "Sound Light", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -89874794, + "name": "Low Quality Spark Plugs", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -493159321, + "name": "Medium Quality Spark Plugs", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 42, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 70 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1517740219, + "name": "Speargun", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + }, + { + "itemId": -1673693549, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + }, + { + "itemId": -1673693549, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1800345240, + "name": "Speargun Spear", + "stackSize": 64, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 10, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 1.875, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -92759291, + "name": "Wooden Floor Spikes", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 150 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1850297170, + "name": "Small Spike Trap", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1100422738, + "name": "Spinning Wheel", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 150 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": -596876839, + "name": "Spray Can", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1366326648, + "name": "Spray Can Decal", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1782127806, + "name": "Star Balloon", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -369760990, + "name": "Small Stash", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1866909924, + "name": "Steering Wheel", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -465682601, + "name": "SUPER Stocking", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1583967946, + "name": "Stone Hatchet", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + }, + { + "itemId": -2099697608, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 200 + }, + { + "itemId": -2099697608, + "quantity": 100 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -2099697608, + "name": "Stones", + "stackSize": 1000, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1049172752, + "name": "Storage Adaptor", + "stackSize": 5, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -258457936, + "name": "Unused Storage Barrel Vertical", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1421257350, + "name": "Storage Barrel Horizontal", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 180, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 300 + }, + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1671551935, + "name": "Torpedo", + "stackSize": 100, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -265876753, + "quantity": 4, + "probability": 1 + }, + { + "itemId": 95950017, + "quantity": 1, + "probability": 0.12 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 95950017, + "quantity": 1 + }, + { + "itemId": -265876753, + "quantity": 30 + } + ], + "timeSeconds": 7.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -187031121, + "name": "Solo Submarine", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1581843485, + "name": "Sulfur", + "stackSize": 1000, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1157596551, + "name": "Sulfur Ore", + "stackSize": 1000, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -611118083, + "name": "Sunflower", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2103694546, + "name": "Sunglasses", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -176608084, + "name": "Sunglasses", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1997698639, + "name": "Sunglasses", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1408336705, + "name": "Sunglasses", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1003665711, + "name": "Super Serum", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1108136649, + "name": "Tactical Gloves", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 1381010055, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 1234880403, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1736356576, + "name": "Reactive Target", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 150 + }, + { + "itemId": 479143914, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1262185308, + "name": "Binoculars", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 24, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 40 + }, + { + "itemId": 479143914, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1316706473, + "name": "Camera", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2001260025, + "name": "Instant Camera", + "stackSize": 1, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 479143914, + "quantity": 1 + }, + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1175656359, + "name": "Cultist Deer Torch", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -582782051, + "name": "Snap Trap", + "stackSize": 3, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + }, + { + "itemId": 479143914, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1663759755, + "name": "Homemade Landmine", + "stackSize": 5, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + }, + { + "itemId": -265876753, + "quantity": 18, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + }, + { + "itemId": -265876753, + "quantity": 30 + } + ], + "timeSeconds": 15, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -901370585, + "name": "Twitch Rivals Trophy 2023", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -561148628, + "name": "Tugboat", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1478445584, + "name": "Tuna Can Lamp", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 12, + "probability": 1 + }, + { + "itemId": -946369541, + "quantity": 6, + "probability": 1 + }, + { + "itemId": -1557377697, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -1557377697, + "quantity": 1 + }, + { + "itemId": -151838493, + "quantity": 20 + }, + { + "itemId": -946369541, + "quantity": 10 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1569700847, + "name": "Headset", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 10 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -243540612, + "name": "Twitch Rivals Desk", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -739993590, + "name": "Twitch Rivals Flag", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1802083073, + "name": "High Quality Valves", + "stackSize": 15, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 72, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 120 + } + ], + "timeSeconds": 10, + "workbenchLevel": 3 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -885833256, + "name": "Vampire Stake", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1501451746, + "name": "Cockpit Vehicle Module", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 150 + }, + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -1880231361, + "name": "Flatbed Vehicle Module", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 100 + }, + { + "itemId": -151838493, + "quantity": 100 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -1615281216, + "name": "Armored Passenger Vehicle Module", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 150 + }, + { + "itemId": 317398316, + "quantity": 5 + } + ], + "timeSeconds": 30, + "workbenchLevel": 3 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -626174997, + "name": "Taxi Vehicle Module", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 105, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 75, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 175 + }, + { + "itemId": -151838493, + "quantity": 125 + }, + { + "itemId": 317398316, + "quantity": 5 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -1040518150, + "name": "Camper Vehicle Module", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 105, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 75, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 175 + }, + { + "itemId": -151838493, + "quantity": 125 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -1693832478, + "name": "Large Flatbed Vehicle Module", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 150 + }, + { + "itemId": -151838493, + "quantity": 150 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -44066600, + "name": "Small Chassis", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -44066823, + "name": "Medium Chassis", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -44066790, + "name": "Large Chassis", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -870140677, + "name": "Snake Venom", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1416322465, + "name": "Walkie Talkie", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -985781766, + "name": "High Ice Wall", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -2099697608, + "quantity": 900, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1993883724, + "name": "High External Legacy Wall", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -967648160, + "name": "High External Stone Wall", + "stackSize": 10, + "despawnSeconds": 3600, + "recycle": { + "recycler": [ + { + "itemId": -2099697608, + "quantity": 900, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -2099697608, + "quantity": 1500 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 500 + } + }, + { + "id": -956706906, + "name": "Prison Cell Gate", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 150 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1429456799, + "name": "Prison Cell Wall", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 150 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1117626326, + "name": "Chainlink Fence", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 75 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -148794216, + "name": "Garage Door", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 180, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 300 + }, + { + "itemId": 479143914, + "quantity": 2 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -450890885, + "name": "Wall Divider Pack", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2016974826, + "name": "Wall Divider Pack", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -796583652, + "name": "Shop Front", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 150 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -148229307, + "name": "Metal Shop Front", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 150, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 250 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 10 + } + }, + { + "id": -1679267738, + "name": "Graveyard Fence", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -2099697608, + "quantity": 150, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 45, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -819720157, + "name": "Metal Window Bars", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 25 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1183726687, + "name": "Wooden Window Bars", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 50 + } + ], + "timeSeconds": 9.375, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -1614955425, + "name": "Strengthened Glass Window", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 11.25, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -551431036, + "name": "Wallpaper Flooring", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1344017968, + "name": "Wanted Poster", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 20 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1265020883, + "name": "Wanted Poster 3", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1142222427, + "name": "Basic Warming Tea", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -463122489, + "name": "Watch Tower", + "stackSize": 5, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 150, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 250 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1863559151, + "name": "Water Barrel", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 150, + "probability": 1 + }, + { + "itemId": 2019042823, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 250 + }, + { + "itemId": 2019042823, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1100168350, + "name": "Large Water Catcher", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 300, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 2019042823, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 500 + }, + { + "itemId": 69511070, + "quantity": 200 + }, + { + "itemId": 2019042823, + "quantity": 2 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -132247350, + "name": "Small Water Catcher", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 30, + "probability": 1 + }, + { + "itemId": 2019042823, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 100 + }, + { + "itemId": 69511070, + "quantity": 50 + }, + { + "itemId": 2019042823, + "quantity": 1 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 20 + } + }, + { + "id": -1779180711, + "name": "Water", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -277057363, + "name": "Salt Water", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -119235651, + "name": "Water Jug", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1284169891, + "name": "Water Pump", + "stackSize": 3, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 150, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 120, + "probability": 1 + }, + { + "itemId": 479143914, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -151838493, + "quantity": 250 + }, + { + "itemId": 69511070, + "quantity": 200 + }, + { + "itemId": 479143914, + "quantity": 1 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -1767794021, + "name": "Gas Compression Overdrive", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 10 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -132516482, + "name": "Weapon Lasersight", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 73681876, + "quantity": 1, + "probability": 0.6 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 3 + }, + { + "itemId": 73681876, + "quantity": 1 + } + ], + "timeSeconds": 30, + "workbenchLevel": 3 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -1405508498, + "name": "Muzzle Boost", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 6, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 10 + } + ], + "timeSeconds": 22.5, + "workbenchLevel": 2 + }, + "research": { + "scrap": 125 + } + }, + { + "id": -781866273, + "name": "Oil Filter Silencer", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1850571427, + "name": "Military Silencer", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 5 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 75 + } + }, + { + "id": -855748505, + "name": "Simple Handmade Sight", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 4, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 6 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": { + "scrap": 10 + } + }, + { + "id": -1659598760, + "name": "Soda Can Silencer", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1163943815, + "name": "Weapon Rack Light", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -526026171, + "name": "Wicker Barrel", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -144417939, + "name": "Wire Tool", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 317398316, + "quantity": 2, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 317398316, + "quantity": 2 + } + ], + "timeSeconds": 0.625, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -395377963, + "name": "Raw Wolf Meat", + "stackSize": 20, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1167031859, + "name": "Spoiled Wolf Meat", + "stackSize": 20, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2094954543, + "name": "Wood Armor Helmet", + "stackSize": 1, + "despawnSeconds": 1200, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 9, + "probability": 1 + }, + { + "itemId": -151838493, + "quantity": 120, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 15 + }, + { + "itemId": -151838493, + "quantity": 200 + } + ], + "timeSeconds": 12.5, + "workbenchLevel": null + }, + "research": { + "scrap": 10 + } + }, + { + "id": -151838493, + "name": "Wood", + "stackSize": 1000, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -459159118, + "name": "Wood Armor Gloves", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -635951327, + "name": "Wood Frame Large", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1541706279, + "name": "Wood Frame Medium", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1476278729, + "name": "Wood Frame Small", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1497205569, + "name": "Wood Mirror Small", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -541206665, + "name": "Advanced Wood Tea", + "stackSize": 10, + "despawnSeconds": 2400, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -649128577, + "name": "Basic Wood Tea", + "stackSize": 10, + "despawnSeconds": 1200, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -557539629, + "name": "Pure Wood Tea", + "stackSize": 10, + "despawnSeconds": 3600, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -41896755, + "name": "Workbench Level 2", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 300, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 500 + }, + { + "itemId": 317398316, + "quantity": 20 + }, + { + "itemId": -932201673, + "quantity": 500 + } + ], + "timeSeconds": 28.125, + "workbenchLevel": 1 + }, + "research": null + }, + { + "id": -1607980696, + "name": "Workbench Level 3", + "stackSize": 1, + "despawnSeconds": 2400, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 600, + "probability": 1 + }, + { + "itemId": 317398316, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 1000 + }, + { + "itemId": 317398316, + "quantity": 100 + }, + { + "itemId": -932201673, + "quantity": 1250 + } + ], + "timeSeconds": 45, + "workbenchLevel": 2 + }, + "research": null + }, + { + "id": -810326667, + "name": "Work Cart", + "stackSize": 1, + "despawnSeconds": null, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -2027793839, + "name": "Advent Calendar", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + }, + { + "itemId": -858312878, + "quantity": 12, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1667224349, + "name": "Decorative Baubels", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 2, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -209869746, + "name": "Decorative Plastic Candy Canes", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -129230242, + "name": "Decorative Pinecones", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -151838493, + "quantity": 60, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1331212963, + "name": "Star Tree Topper", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -932201673, + "quantity": 12, + "probability": 1 + }, + { + "itemId": 69511070, + "quantity": 90, + "probability": 1 + } + ] + }, + "craft": null, + "research": null + }, + { + "id": -1230433643, + "name": "Festive Double Doorway Garland", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 25 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -151387974, + "name": "Deluxe Christmas Lights", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 69511070, + "quantity": 3, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 69511070, + "quantity": 50 + } + ], + "timeSeconds": 6.25, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -1622660759, + "name": "Large Present", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -722241321, + "name": "Small Present", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": null, + "craft": null, + "research": null + }, + { + "id": -1379835144, + "name": "Festive Window Garland", + "stackSize": 10, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": -858312878, + "quantity": 15, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": -858312878, + "quantity": 25 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": null + }, + "research": null + }, + { + "id": -211235948, + "name": "Xylobone", + "stackSize": 1, + "despawnSeconds": 300, + "recycle": { + "recycler": [ + { + "itemId": 1719978075, + "quantity": 30, + "probability": 1 + } + ] + }, + "craft": { + "ingredients": [ + { + "itemId": 1719978075, + "quantity": 50 + } + ], + "timeSeconds": 18.75, + "workbenchLevel": 1 + }, + "research": null + } + ] +} \ No newline at end of file diff --git a/src/RustPlusBot.Features.ItemData/EmbeddedItemDatabase.cs b/src/RustPlusBot.Features.ItemData/EmbeddedItemDatabase.cs new file mode 100644 index 00000000..db693a98 --- /dev/null +++ b/src/RustPlusBot.Features.ItemData/EmbeddedItemDatabase.cs @@ -0,0 +1,74 @@ +using System.Collections.Frozen; +using System.Text.Json; +using System.Text.Json.Serialization; +using RustPlusBot.Features.ItemData.Data; +using RustPlusBot.Features.ItemData.Lookup; + +namespace RustPlusBot.Features.ItemData; + +/// Loads the embedded item-data.json once and serves lookups. Singleton. +public sealed class EmbeddedItemDatabase : IItemDatabase +{ + private const int ExpectedSchemaVersion = 1; + + private static readonly JsonSerializerOptions JsonOptions = new(JsonSerializerDefaults.Web) + { + PropertyNameCaseInsensitive = true, NumberHandling = JsonNumberHandling.AllowReadingFromString, + }; + + private static readonly ItemDataset Dataset = Load(); + + private static readonly FrozenDictionary ById = IndexById(Dataset.Items); + + /// + public DatasetSources Sources => Dataset.Sources; + + /// + public ItemRecord? GetById(int id) => ById.GetValueOrDefault(id); + + /// + public ItemMatch Resolve(string query) => ItemLookup.Resolve(query, GetById, Dataset.Items); + + /// + /// Deserializes and validates an item dataset from . + /// Throws when the schema version does not match + /// . + /// + /// A readable stream containing the JSON dataset. + /// The schema version the caller expects. + /// The validated . + /// + /// The stream deserializes to null, or the schema version does not match . + /// + internal static ItemDataset Parse(Stream stream, int expectedSchemaVersion) + { + var dataset = JsonSerializer.Deserialize(stream, JsonOptions) + ?? throw new InvalidOperationException("item-data.json deserialized to null."); + if (dataset.SchemaVersion != expectedSchemaVersion) + { + throw new InvalidOperationException( + $"item-data.json schema version {dataset.SchemaVersion} != expected {expectedSchemaVersion}."); + } + + return dataset; + } + + /// + /// Builds a frozen id→item index from . + /// When the same id appears more than once the last entry wins. + /// + /// The full item list. + /// A frozen dictionary keyed by item id. + internal static FrozenDictionary IndexById(IReadOnlyList items) => + items.GroupBy(i => i.Id).ToFrozenDictionary(g => g.Key, g => g.Last()); + + private static ItemDataset Load() + { + var assembly = typeof(EmbeddedItemDatabase).Assembly; + var resourceName = assembly.GetManifestResourceNames() + .Single(n => n.EndsWith("item-data.json", StringComparison.Ordinal)); + using var stream = assembly.GetManifestResourceStream(resourceName) + ?? throw new InvalidOperationException("Embedded item-data.json not found."); + return Parse(stream, ExpectedSchemaVersion); + } +} diff --git a/src/RustPlusBot.Features.ItemData/IItemDatabase.cs b/src/RustPlusBot.Features.ItemData/IItemDatabase.cs new file mode 100644 index 00000000..a1842b58 --- /dev/null +++ b/src/RustPlusBot.Features.ItemData/IItemDatabase.cs @@ -0,0 +1,20 @@ +using RustPlusBot.Features.ItemData.Data; +using RustPlusBot.Features.ItemData.Lookup; + +namespace RustPlusBot.Features.ItemData; + +/// The single source of truth for bundled Rust item data. Singleton. +public interface IItemDatabase +{ + /// Per-section provenance dates, for "data as of" display. + DatasetSources Sources { get; } + + /// Gets the record for an item id, or null if unknown. + /// The Rust item id. + ItemRecord? GetById(int id); + + /// Resolves a user query (name or id) to an item. + /// The raw user input. + /// A match describing the outcome. + ItemMatch Resolve(string query); +} diff --git a/src/RustPlusBot.Features.ItemData/ItemDataServiceCollectionExtensions.cs b/src/RustPlusBot.Features.ItemData/ItemDataServiceCollectionExtensions.cs new file mode 100644 index 00000000..f955aaae --- /dev/null +++ b/src/RustPlusBot.Features.ItemData/ItemDataServiceCollectionExtensions.cs @@ -0,0 +1,19 @@ +using Microsoft.Extensions.DependencyInjection; +using RustPlusBot.Features.ItemData.Naming; + +namespace RustPlusBot.Features.ItemData; + +/// DI registration for the item database. +public static class ItemDataServiceCollectionExtensions +{ + /// Registers the item database and name resolver as singletons. + /// The service collection to add to. + /// The same service collection, for chaining. + public static IServiceCollection AddItemData(this IServiceCollection services) + { + ArgumentNullException.ThrowIfNull(services); + services.AddSingleton(); + services.AddSingleton(); + return services; + } +} diff --git a/src/RustPlusBot.Features.ItemData/Lookup/ItemLookup.cs b/src/RustPlusBot.Features.ItemData/Lookup/ItemLookup.cs new file mode 100644 index 00000000..86b85d89 --- /dev/null +++ b/src/RustPlusBot.Features.ItemData/Lookup/ItemLookup.cs @@ -0,0 +1,63 @@ +using System.Globalization; +using RustPlusBot.Features.ItemData.Data; + +namespace RustPlusBot.Features.ItemData.Lookup; + +/// Pure name-or-id resolution. Exact name beats substring; ambiguous results are ranked and capped. +public static class ItemLookup +{ + /// Resolves a user query to an item. + /// The raw user input (name or id). + /// Looks up an item by id. + /// All known items, for name matching. + /// The maximum number of ambiguous candidates to return. + /// A describing the outcome. + public static ItemMatch Resolve(string query, + Func byId, + IReadOnlyList all, + int cap = 10) + { + ArgumentNullException.ThrowIfNull(byId); + ArgumentNullException.ThrowIfNull(all); + + var trimmed = (query ?? string.Empty).Trim(); + if (trimmed.Length == 0) + { + return new ItemMatch.NotFound(); + } + + if (int.TryParse(trimmed, NumberStyles.Integer, CultureInfo.InvariantCulture, out var id) + && byId(id) is { } byIdHit) + { + return new ItemMatch.Found(byIdHit); + } + + var exactMatches = all + .Where(i => string.Equals(i.Name, trimmed, StringComparison.OrdinalIgnoreCase)) + .OrderBy(i => i.Id) + .ToList(); + if (exactMatches.Count == 1) + { + return new ItemMatch.Found(exactMatches[0]); + } + + if (exactMatches.Count > 1) + { + return new ItemMatch.Ambiguous([.. exactMatches.Take(cap)]); + } + + var matches = all + .Where(i => i.Name.Contains(trimmed, StringComparison.OrdinalIgnoreCase)) + .OrderByDescending(i => i.Name.StartsWith(trimmed, StringComparison.OrdinalIgnoreCase)) + .ThenBy(i => i.Name.Length) + .ThenBy(i => i.Name, StringComparer.OrdinalIgnoreCase) + .ToList(); + + return matches.Count switch + { + 0 => new ItemMatch.NotFound(), + 1 => new ItemMatch.Found(matches[0]), + _ => new ItemMatch.Ambiguous([.. matches.Take(cap)]), + }; + } +} diff --git a/src/RustPlusBot.Features.ItemData/Lookup/ItemMatch.cs b/src/RustPlusBot.Features.ItemData/Lookup/ItemMatch.cs new file mode 100644 index 00000000..ed926251 --- /dev/null +++ b/src/RustPlusBot.Features.ItemData/Lookup/ItemMatch.cs @@ -0,0 +1,23 @@ +using System.Diagnostics.CodeAnalysis; +using RustPlusBot.Features.ItemData.Data; + +namespace RustPlusBot.Features.ItemData.Lookup; + +/// The outcome of resolving a user query to an item. +[SuppressMessage("Design", "CA1034:Nested types should not be visible", + Justification = "Discriminated-union pattern: nested sealed records are the intended public surface.")] +public abstract record ItemMatch +{ + private ItemMatch() { } + + /// Exactly one item resolved. + /// The resolved item. + public sealed record Found(ItemRecord Item) : ItemMatch; + + /// Several items matched; present candidates for disambiguation. + /// The candidate items, capped and ranked. + public sealed record Ambiguous(IReadOnlyList Candidates) : ItemMatch; + + /// No item matched. + public sealed record NotFound : ItemMatch; +} diff --git a/src/RustPlusBot.Features.StorageMonitors/Naming/IItemNameResolver.cs b/src/RustPlusBot.Features.ItemData/Naming/IItemNameResolver.cs similarity index 88% rename from src/RustPlusBot.Features.StorageMonitors/Naming/IItemNameResolver.cs rename to src/RustPlusBot.Features.ItemData/Naming/IItemNameResolver.cs index bbe9a013..6ed3d87b 100644 --- a/src/RustPlusBot.Features.StorageMonitors/Naming/IItemNameResolver.cs +++ b/src/RustPlusBot.Features.ItemData/Naming/IItemNameResolver.cs @@ -1,4 +1,4 @@ -namespace RustPlusBot.Features.StorageMonitors.Naming; +namespace RustPlusBot.Features.ItemData.Naming; /// Resolves a Rust item id to a human-readable display name. public interface IItemNameResolver diff --git a/src/RustPlusBot.Features.ItemData/Naming/ItemDatabaseNameResolver.cs b/src/RustPlusBot.Features.ItemData/Naming/ItemDatabaseNameResolver.cs new file mode 100644 index 00000000..354a867c --- /dev/null +++ b/src/RustPlusBot.Features.ItemData/Naming/ItemDatabaseNameResolver.cs @@ -0,0 +1,12 @@ +using System.Globalization; + +namespace RustPlusBot.Features.ItemData.Naming; + +/// Resolves item names from the . Singleton. +/// The item database. +public sealed class ItemDatabaseNameResolver(IItemDatabase database) : IItemNameResolver +{ + /// + public string Resolve(int itemId) => + database.GetById(itemId)?.Name ?? "Item " + itemId.ToString(CultureInfo.InvariantCulture); +} diff --git a/src/RustPlusBot.Features.ItemData/RustPlusBot.Features.ItemData.csproj b/src/RustPlusBot.Features.ItemData/RustPlusBot.Features.ItemData.csproj new file mode 100644 index 00000000..fc2ab692 --- /dev/null +++ b/src/RustPlusBot.Features.ItemData/RustPlusBot.Features.ItemData.csproj @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/RustPlusBot.Features.StorageMonitors/Naming/EmbeddedItemNameResolver.cs b/src/RustPlusBot.Features.StorageMonitors/Naming/EmbeddedItemNameResolver.cs deleted file mode 100644 index cbfed0a7..00000000 --- a/src/RustPlusBot.Features.StorageMonitors/Naming/EmbeddedItemNameResolver.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Collections.Frozen; -using System.Globalization; -using System.Text.Json; - -namespace RustPlusBot.Features.StorageMonitors.Naming; - -/// Resolves item ids from the bundled items.json (Facepunch's published item names). Singleton. -public sealed class EmbeddedItemNameResolver : IItemNameResolver -{ - private static readonly FrozenDictionary Names = Load(); - - /// - public string Resolve(int itemId) => - Names.TryGetValue(itemId, out var name) - ? name - : "Item " + itemId.ToString(CultureInfo.InvariantCulture); - - private static FrozenDictionary Load() - { - var assembly = typeof(EmbeddedItemNameResolver).Assembly; - var resourceName = assembly.GetManifestResourceNames() - .Single(n => n.EndsWith("items.json", StringComparison.Ordinal)); - using var stream = assembly.GetManifestResourceStream(resourceName) - ?? throw new InvalidOperationException("Embedded items.json not found."); - var raw = JsonSerializer.Deserialize>(stream) - ?? throw new InvalidOperationException("items.json deserialized to null."); - // Group by the parsed id (last wins) before freezing: two distinct string keys can parse to the - // same int (NumberStyles.Integer allows leading sign/whitespace), and ToFrozenDictionary throws on a - // duplicate key — which, in a static initializer, would hard-fault the feature. Degrade, never crash. - return raw - .Select(kvp => (Parsed: int.TryParse(kvp.Key, NumberStyles.Integer, CultureInfo.InvariantCulture, - out var id), Id: id, kvp.Value)) - .Where(x => x.Parsed) - .GroupBy(x => x.Id, x => x.Value) - .ToFrozenDictionary(g => g.Key, g => g.Last()); - } -} diff --git a/src/RustPlusBot.Features.StorageMonitors/Naming/items.json b/src/RustPlusBot.Features.StorageMonitors/Naming/items.json deleted file mode 100644 index 531d7b06..00000000 --- a/src/RustPlusBot.Features.StorageMonitors/Naming/items.json +++ /dev/null @@ -1,1207 +0,0 @@ -{ -"-2139580305":"Auto Turret", -"-2134097299":"Tripod Spot Light", -"-2133781216":"Outbreak Scientist Suit", -"-2124352573":"Acoustic Guitar", -"-2123125470":"Advanced Healing Tea", -"-2115299615":"Small Boat Engine", -"-2110553371":"Bamboo Salvaged Shelves", -"-2107018088":"Shovel Bass", -"-2103694546":"Sunglasses", -"-2100458529":"Raw Snake Meat", -"-2099697608":"Stones", -"-2097376851":"Nailgun Nails", -"-2095813057":"Raw Big Cat Meat", -"-2094954543":"Wood Armor Helmet", -"-2086926071":"Potato", -"-2084071424":"Potato Seed", -"-2073432256":"Skinning Knife", -"-2072273936":"Bandage", -"-2069578888":"M249", -"-2068194497":"Lunar New Year Horse Armor", -"-2067472972":"Sheet Metal Door", -"-2058362263":"Small Candle Set", -"-2049214035":"Pressure Pad", -"-2047081330":"Movember Moustache", -"-2040817543":"Pan Flute", -"-2035449523":"Spoiled Deer Meat", -"-2027988285":"Locomotive", -"-2027793839":"Advent Calendar", -"-2026042603":"Baseball Bat", -"-2025184684":"Shirt", -"-2024549027":"Heavy Frankenstein Legs", -"-2022172587":"Diving Tank", -"-2018158920":"Chicken Coop", -"-2016974826":"Wall Divider Pack", -"-2012470695":"Improvised Balaclava", -"-2002277461":"Road Sign Jacket", -"-2001260025":"Instant Camera", -"-1999722522":"Furnace", -"-1998423571":"Explosives Storage Box", -"-1997698639":"Sunglasses", -"-1997543660":"Horse Saddle", -"-1994909036":"Sheet Metal", -"-1993883724":"High External Legacy Wall", -"-1992717673":"Large Furnace", -"-1989600732":"Hot Air Balloon Armor", -"-1987565603":"Incendiary Bolt", -"-1985799200":"Rug", -"-1982036270":"High Quality Metal Ore", -"-1978999529":"Salvaged Cleaver", -"-1973785141":"Fogger-3000", -"-1966748496":"Mace", -"-1962971928":"Mushroom", -"-1961560162":"Firecracker String", -"-1958316066":"Scientist Suit", -"-1950721390":"Concrete Barricade", -"-1944704288":"Ice Throne", -"-1941646328":"Can of Tuna", -"-1938052175":"Charcoal", -"-1937799374":"Naval Scientist Suit", -"-1923843855":"Half Height Bamboo Shelves", -"-1916473915":"Chinese Lantern", -"-1913996738":"Fish Trophy", -"-1904821376":"Orange Roughy", -"-1903165497":"Bone Helmet", -"-1901993050":"Ornate Frame Medium", -"-1899491405":"Glue", -"-1896395719":"Advanced Blueprint Fragment", -"-1880870149":"Red Keycard", -"-1880231361":"Flatbed Vehicle Module", -"-1878764039":"Small Trout", -"-1878475007":"Satchel Charge", -"-1866909924":"Steering Wheel", -"-1863559151":"Water Barrel", -"-1863063690":"Rocking Chair", -"-1861522751":"Research Table", -"-1850571427":"Military Silencer", -"-1850297170":"Small Spike Trap", -"-1848736516":"Cooked Chicken", -"-1843426638":"MLRS Rocket", -"-1841918730":"High Velocity Rocket", -"-1836526520":"Ornate Frame Small", -"-1832422579":"One Sided Town Sign Post", -"-1827561369":"Propane Explosive Bomb", -"-1824943010":"Jack O Lantern Happy", -"-1824770114":"Sky Lantern - Orange", -"-1819763926":"Wind Turbine", -"-1819233322":"Medium Wooden Sign", -"-1815301988":"Water Pistol", -"-1812555177":"LR-300 Assault Rifle", -"-1811234677":"Beehive Nucleus", -"-1804515496":"Gold Mirror Medium", -"-1802083073":"High Quality Valves", -"-1800345240":"Speargun Spear", -"-1796837031":"Spoiled Crocodile Meat", -"-1790885730":"Wheat Seed", -"-1785248332":"Fish Pie", -"-1785231475":"Surgeon Scrubs", -"-1782127806":"Star Balloon", -"-1780802565":"Salvaged Icepick", -"-1779203452":"Portable Easel", -"-1779183908":"Paper", -"-1779180711":"Water", -"-1778897469":"Button", -"-1778159885":"Heavy Plate Pants", -"-1776128552":"Green Berry Seed", -"-1774190142":"Shutter Frame Standing", -"-1773144852":"Hide Skirt", -"-1772746857":"Heavy Scientist Suit", -"-1770889433":"Sky Lantern - Green", -"-1770281406":"Krieg chainsword", -"-1768880890":"Small Shark", -"-1767794021":"Gas Compression Overdrive", -"-1758372725":"Thompson", -"-1754948969":"Sleeping Bag", -"-1736356576":"Reactive Target", -"-1732475823":"Medium Frankenstein Head", -"-1729415579":"Advanced Anti-Rad Tea", -"-1709878924":"Raw Human Meat", -"-1707425764":"Fishing Tackle", -"-1698937385":"Herring", -"-1696379844":"Hazmat Youtooz", -"-1695367501":"Shorts", -"-1693832478":"Large Flatbed Vehicle Module", -"-1691396643":"HV Pistol Ammo", -"-1685290200":"12 Gauge Buckshot", -"-1679267738":"Graveyard Fence", -"-1677315902":"Pure Healing Tea", -"-1673693549":"Empty Propane Tank", -"-1671551935":"Torpedo", -"-1667224349":"Decorative Baubels", -"-1663759755":"Homemade Landmine", -"-1659598760":"Soda Can Silencer", -"-1654401345":"Medieval Sheet Metal Door", -"-1654233406":"Sardine", -"-1652561344":"Bamboo Barrel", -"-1651220691":"Pookie Bear", -"-1647846966":"Two Sided Ornate Hanging Sign", -"-1647389398":"Frankenstein Mask", -"-1624770297":"Light Frankenstein Torso", -"-1622660759":"Large Present", -"-1622110948":"Bandit Guard Gear", -"-1621539785":"Beach Parasol", -"-1616704051":"Spoiled Snake Meat", -"-1615281216":"Armored Passenger Vehicle Module", -"-1614955425":"Strengthened Glass Window", -"-1607980696":"Workbench Level 3", -"-1593678393":"Ammo Storage Box", -"-1588628467":"Computer Station", -"-1583967946":"Stone Hatchet", -"-1581843485":"Sulfur", -"-1579932985":"Horse Dung", -"-1569700847":"Headset", -"-1559420426":"Double Diving Tank", -"-1557377697":"Empty Tuna Can", -"-1553999294":"Red Boomer", -"-1549739227":"Boots", -"-1541706279":"Wood Frame Medium", -"-1539025626":"Miners Hat", -"-1538109120":"Violet Volcano Firework", -"-1536855921":"Shovel", -"-1535621066":"Stone Fireplace", -"-1530414568":"Cassette Recorder", -"-1528767189":"Ornate Frame Standing", -"-1520560807":"Raw Bear Meat", -"-1519126340":"Drop Box", -"-1518883088":"Night Vision Goggles", -"-1517740219":"Speargun", -"-1513203236":"Honeycomb", -"-1511285251":"Pumpkin Seed", -"-1510616686":"Chandelier", -"-1509851560":"Cooked Deer Meat", -"-1507239837":"HBHF Sensor", -"-1506417026":"Ninja Suit", -"-1506397857":"Salvaged Hammer", -"-1501451746":"Cockpit Vehicle Module", -"-1498613415":"Advanced Cooling Tea", -"-1497205569":"Wood Mirror Small", -"-1488408786":"Pumpkin Pie", -"-1488398114":"Composter", -"-1486461488":"Red Roman Candle", -"-1478855279":"Ice Metal Chest Plate", -"-1478445584":"Tuna Can Lamp", -"-1478212975":"Wolf Headdress", -"-1478094705":"Boogie Board", -"-1476814093":"Pure Warming Tea", -"-1476278729":"Wood Frame Small", -"-1469578201":"Longsword", -"-1467876094":"#50cal", -"-1449152644":"MLRS", -"-1448252298":"Electrical Branch", -"-1444650226":"Gold Mirror Small", -"-1442559428":"Hobo Barrel", -"-1442496789":"Pinata", -"-1442339204":"High External Legacy Gate", -"-1440987069":"Raw Chicken Breast", -"-1440443161":"Clump of Latex Balloons", -"-1433390281":"Sky Lantern - Red", -"-1432674913":"Anti-Radiation Pills", -"-1430299277":"Ornate Frame XL", -"-1429456799":"Prison Cell Wall", -"-1423304443":"Medium Neon Sign", -"-1421257350":"Storage Barrel Horizontal", -"-1417478274":"Motorbike", -"-1416322465":"Walkie Talkie", -"-1408336705":"Sunglasses", -"-1405508498":"Muzzle Boost", -"-1386082991":"Purple ID Tag", -"-1385721419":"Advanced Harvesting Tea", -"-1380144986":"Scrap Mirror Standing", -"-1379835144":"Festive Window Garland", -"-1379036069":"Canbourine", -"-1370759135":"Portrait Picture Frame", -"-1368584029":"Sickle", -"-1367281941":"Waterpipe Shotgun", -"-1366326648":"Spray Can Decal", -"-1364246987":"Snowmobile", -"-1360171080":"Concrete Pickaxe", -"-1344017968":"Wanted Poster", -"-1336109173":"Wood Double Door", -"-1335497659":"Ice Assault Rifle", -"-1334569149":"Hockey Mask", -"-1334255764":"Minicopter", -"-1331212963":"Star Tree Topper", -"-1330640246":"Junkyard Drum Kit", -"-1323101799":"Double Horse Saddle", -"-1322332389":"Ornate Frame XXL", -"-1321651331":"Explosive 5.56 Rifle Ammo", -"-1318837358":"Cooked Big Cat Meat", -"-1316706473":"Camera", -"-1315992997":"Dragon Rocket Launcher", -"-1314079879":"Snake mask", -"-1310391395":"Legacy Furnace", -"-1306288356":"Green Roman Candle", -"-1305326964":"Green Berry Clone", -"-1302129395":"Pickaxe", -"-1294739579":"Light-Up Frame Medium", -"-1293296287":"Small Oil Refinery", -"-1290278434":"Siege Tower", -"-1286302544":"OR Switch", -"-1284169891":"Water Pump", -"-1274093662":"Bath Tub Planter", -"-1273339005":"Bed", -"-1266045928":"Bunny Onesie", -"-1265020883":"Wanted Poster 3", -"-1262185308":"Binoculars", -"-1260229965":"Basic Cooling Tea", -"-1258821205":"Spot Light", -"-1252059217":"Hatchet", -"-1247485104":"Command Block", -"-1244287686":"Shutter Frame XL", -"-1234735557":"Wooden Arrow", -"-1230433643":"Festive Double Doorway Garland", -"-1220928936":"Leather Beanbag Seat", -"-1215753368":"Flame Thrower", -"-1215166612":"A Barrel Costume", -"-1214542497":"HMLMG", -"-1211801774":"Shutter Frame XXL", -"-1211268013":"Basic Horse Shoes", -"-1211166256":"5.56 Rifle Ammo", -"-1199897172":"Metal Vertical embrasure", -"-1199897169":"Metal horizontal embrasure", -"-1196547867":"Electric Furnace", -"-1184406448":"Basic Max Health Tea", -"-1183726687":"Wooden Window Bars", -"-1175656359":"Cultist Deer Torch", -"-1167031859":"Spoiled Wolf Meat", -"-1166712463":"Fluid Splitter", -"-1163943815":"Weapon Rack Light", -"-1163532624":"Jacket", -"-1162759543":"Cooked Horse Meat", -"-1160621614":"Red Industrial Wall Light", -"-1157596551":"Sulfur Ore", -"-1151332840":"Wooden Frontier Bar Doors", -"-1142222427":"Basic Warming Tea", -"-1138208076":"Small Wooden Sign", -"-1137865085":"Machete", -"-1130709577":"Pump Jack", -"-1130350864":"Raw Horse Meat", -"-1127003365":"Piercer Bolt", -"-1123473824":"Multiple Grenade Launcher", -"-1117626326":"Chainlink Fence", -"-1113501606":"Boom Box", -"-1112793865":"Door Key", -"-1108136649":"Tactical Gloves", -"-1104881824":"Bear Skin Rug", -"-1102429027":"Heavy Plate Jacket", -"-1101924344":"Wetsuit", -"-1100422738":"Spinning Wheel", -"-1100168350":"Large Water Catcher", -"-1094453063":"Shutter Frame large", -"-1081599445":"Raw Crocodile Meat", -"-1078639462":"Skull Spikes", -"-1073015016":"Skull Spikes", -"-1063073030":"Wooden Boat Door", -"-1060567807":"Shutter Frame Medium", -"-1056824343":"Diver propulsion vehicle", -"-1050697733":"Scrap Mirror Small", -"-1049881973":"Cowbell", -"-1049172752":"Storage Adaptor", -"-1044468317":"RF Broadcaster", -"-1043618880":"Ghost Costume", -"-1040518150":"Camper Vehicle Module", -"-1039528932":"Small Water Bottle", -"-1039234836":"Paintable Reactive Target", -"-1037472336":"Rose Seed", -"-1036635990":"12 Gauge Incendiary Shell", -"-1035206446":"Clothing Mannequin", -"-1023374709":"Wood Shutters", -"-1023065463":"High Velocity Arrow", -"-1022661119":"Baseball Cap", -"-1021495308":"Metal Spring", -"-1018587433":"Animal Fat", -"-1014934560":"Paintball Overalls", -"-1009359066":"SAM Site", -"-1004426654":"Bunny Ears", -"-1003665711":"Super Serum", -"-1002156085":"Gold Egg", -"-1000573653":"Frog Boots", -"-996920608":"Blueprint", -"-996235148":"Ornate Frame large", -"-996185386":"XL Picture Frame", -"-992286106":"White Berry Seed", -"-989755543":"Burnt Bear Meat", -"-986782031":"Rabbit Mask", -"-985781766":"High Ice Wall", -"-979951147":"Jerry Can Guitar", -"-979302481":"Easter Door Wreath", -"-967648160":"High External Stone Wall", -"-965336208":"Chocolate Bar", -"-963820355":"Survivor's Pie", -"-963819285":"Incapacitate Dart", -"-961457160":"New Year Gong", -"-956706906":"Prison Cell Gate", -"-952411326":"Plank", -"-948291630":"Seismic Sensor", -"-946599131":"Artist Canvas Medium", -"-946599114":"Artist Canvas Standing", -"-946599113":"Artist Canvas Large", -"-946369541":"Low Grade Fuel", -"-945708533":"Knights armour skirt plates", -"-939424778":"Flasher Light", -"-936921910":"Flashbang", -"-935322684":"4 Module Car", -"-932201673":"Scrap", -"-930193596":"Fertilizer", -"-929092070":"Basic Healing Tea", -"-924959988":"Skull Trophy", -"-919882824":"Abyss Vertical Storage Tank", -"-912398867":"Cassette - Medium", -"-907422733":"Large Backpack", -"-904863145":"Semi-Automatic Rifle", -"-903796529":"Asbestos Armor Insert", -"-902423513":"Krieg Hazmat", -"-901370585":"Twitch Rivals Trophy 2023", -"-892718768":"Prisoner Hood", -"-888153050":"Halloween Candy", -"-886280491":"Hemp Clone", -"-885833256":"Vampire Stake", -"-880494890":"Abyss Horizontal Storage Tank", -"-880412831":"Blunderbuss", -"-874908751":"Waterwell NPC Jumpsuit", -"-874650016":"Krieg Large Backpack", -"-870140677":"Snake Venom", -"-869598982":"Small Hunting Trophy", -"-866121090":"2 Module Car", -"-858312878":"Cloth", -"-855748505":"Simple Handmade Sight", -"-854270928":"Dragon Door Knocker", -"-852563019":"M92 Pistol", -"-851988960":"Salmon", -"-851288382":"Blow Pipe", -"-850982208":"Key Lock", -"-849373693":"Frontier Horseshoe Single Item Rack", -"-845557339":"Landscape Picture Frame", -"-842267147":"Snowman Helmet", -"-839576748":"Handcuffs", -"-831725027":"3 Module Car", -"-819720157":"Metal Window Bars", -"-816769770":"Artist Canvas XXL", -"-810326667":"Work Cart", -"-804769727":"Plant Fiber", -"-803263829":"Coffee Can Helmet", -"-800824218":"Meds Storage Box", -"-798662404":"Orchid Clone", -"-798293154":"Laser Detector", -"-797592358":"Abyss Pack", -"-796583652":"Shop Front", -"-784870360":"Electric Heater", -"-781866273":"Oil Filter Silencer", -"-781014061":"Sprinkler", -"-778875547":"Corn Clone", -"-778367295":"L96 Rifle", -"-770304148":"Chinese Lantern White", -"-769647921":"Skull Trophy", -"-765183617":"Double Barrel Shotgun", -"-763071910":"Lumberjack Hoodie", -"-761829530":"Burlap Shoes", -"-759279626":"Mounted Ballista", -"-751151717":"Spoiled Chicken", -"-747743875":"Egg Suit", -"-746647361":"Memory Cell", -"-746030907":"Granola Bar", -"-742865266":"Rocket", -"-739993590":"Twitch Rivals Flag", -"-733625651":"Paddling Pool", -"-727717969":"12 Gauge Slug", -"-724146494":"Spoiled Horse Meat", -"-722629980":"Heavy Scientist Youtooz", -"-722241321":"Small Present", -"-707792719":"Paintball Gun", -"-702051347":"Bandana Mask", -"-700591459":"Can of Beans", -"-699558439":"Road Sign Gloves", -"-697981032":"Inner Tube", -"-695978112":"Smart Alarm", -"-695124222":"Giant Candy Decor", -"-692338819":"Small Rechargeable Battery", -"-691113464":"High External Stone Gate", -"-690968985":"Blocker", -"-690276911":"Glowing Eyes", -"-682687162":"Burnt Human Meat", -"-656349006":"Green Boomer", -"-652889722":"Advanced Crafting Quality Tea", -"-649128577":"Basic Wood Tea", -"-648077743":"Mr Spice Can", -"-635951327":"Wood Frame Large", -"-629028935":"Electric Fuse", -"-626174997":"Taxi Vehicle Module", -"-611118083":"Sunflower", -"-606898372":"#clothingmannequin", -"-602717596":"Red Dog Tags", -"-601133933":"Armoured Triangle Laddder Hatch", -"-596876839":"Spray Can", -"-594596146":"Radiation Dart", -"-593892112":"Wooden Armor Insert", -"-592016202":"Explosives", -"-587989372":"Catfish", -"-586784898":"Mail Box", -"-586342290":"Blueberries", -"-583379016":"Megaphone", -"-582782051":"Snap Trap", -"-582467439":"Coconut Armor Helmet", -"-576866254":"Fabric Beanbag Seat", -"-575744869":"Party Hat", -"-575483084":"Santa Hat", -"-568419968":"Grub", -"-567909622":"Pumpkin", -"-566907190":"RF Pager", -"-563624462":"Splitter", -"-561148628":"Tugboat", -"-560304835":"Space Suit", -"-559599960":"Sandbag Barricade", -"-558880549":"Gingerbread Suit", -"-557539629":"Pure Wood Tea", -"-555122905":"Sofa", -"-551431036":"Wallpaper Flooring", -"-544317637":"Research Paper", -"-544295594":"Guns Storage Box", -"-542577259":"Minnows", -"-541206665":"Advanced Wood Tea", -"-526026171":"Wicker Barrel", -"-520133715":"Yellow Berry Seed", -"-515830359":"Blue Roman Candle", -"-507248640":"Wellipets Hat", -"-502177121":"Door Controller", -"-498301781":"Shutter Frame Small", -"-496584751":"Rad. Removal Tea", -"-493159321":"Medium Quality Spark Plugs", -"-489848205":"Large Candle Set", -"-487356515":"Basic Anti-Rad Tea", -"-484206264":"Blue Keycard", -"-484006286":"Firebomb", -"-482348853":"Mini Crossbow", -"-479314201":"Battering Ram Head", -"-478923685":"Armored Triangle Ladder Hatch", -"-470439097":"Arctic Suit", -"-465682601":"SUPER Stocking", -"-463122489":"Watch Tower", -"-463012608":"Salvaged Ejector Seat", -"-459159118":"Wood Armor Gloves", -"-458565393":"Root Combiner", -"-455286320":"Gray ID Tag", -"-454370658":"Red Volcano Firework", -"-451310088":"Documents", -"-450890885":"Wall Divider Pack", -"-430416124":"Single Plant Pot", -"-427072335":"Knights armour helmet", -"-424687710":"Medieval Barricade", -"-420889602":"Krieg Shotgun", -"-418359052":"Horse Mask", -"-413663149":"Comps Storage Box", -"-411735114":"Cannonball", -"-401905610":"High External Adobe Gate", -"-399173933":"Prototype Hatchet", -"-395377963":"Raw Wolf Meat", -"-389796733":"Light-Up Mirror Small", -"-384243979":"SAM Ammo", -"-380502678":"Medieval Sheet Metal Double Door", -"-379734527":"Pattern Boomer", -"-379403794":"Water Wheel", -"-374457631":"Sedan", -"-369760990":"Small Stash", -"-365097295":"Powered Water Purifier", -"-363689972":"Snowball", -"-357442017":"Pitchfork Bolt", -"-348232115":"SKS", -"-343857907":"Sound Light", -"-335089230":"High External Wooden Gate", -"-334418777":"Advanced Warming Tea", -"-333406828":"Sled", -"-324675402":"Reindeer Antlers", -"-321733511":"Crude Oil", -"-321431890":"Beach Chair", -"-321247698":"Boat Building Plan", -"-316250604":"Wooden Ladder", -"-297099594":"Heavy Frankenstein Head", -"-295829489":"Test Generator", -"-282193997":"Orange ID Tag", -"-282113991":"Simple Light", -"-280812482":"Triangle Planter Box", -"-280223496":"Violet Boomer", -"-277057363":"Salt Water", -"-274709858":"Wood Dart", -"-265876753":"Gun Powder", -"-265292885":"Fluid Combiner", -"-262590403":"Salvaged Axe", -"-258574361":"Dracula Cape", -"-258457936":"Unused Storage Barrel Vertical", -"-253079493":"Scientist Suit", -"-246672609":"Horizontal Weapon Rack", -"-243540612":"Twitch Rivals Desk", -"-242084766":"Cooked Pork", -"-237809779":"Hemp Seed", -"-226151558":"2 Module Car Chassis", -"-218009552":"Homing Missile Launcher", -"-216999575":"Counter", -"-216116642":"Skull Door Knocker", -"-211235948":"Xylobone", -"-209869746":"Decorative Plastic Candy Canes", -"-196667575":"Flashlight", -"-194953424":"Metal Facemask", -"-194509282":"Butcher Knife", -"-193519904":"Single Shallow Wall Shelves", -"-187304968":"Battering Ram", -"-187031121":"Solo Submarine", -"-180129657":"Wood Storage Box", -"-176608084":"Sunglasses", -"-173268138":"Rustigé Egg - Amethyst", -"-173268132":"Rustigé Egg - Blue", -"-173268131":"Rustigé Egg - Purple", -"-173268129":"Rustigé Egg - Red", -"-173268128":"Rustigé Egg - White", -"-173268127":"Rustigé Egg - Cerulean", -"-173268126":"Rustigé Egg - Ivory", -"-173268125":"Rustigé Egg - Green", -"-170436364":"Cooked Snake Meat", -"-158718378":"Small Ramp", -"-156748077":"Skull Trophy", -"-152332823":"Chicken Costume", -"-151838493":"Wood", -"-151387974":"Deluxe Christmas Lights", -"-148794216":"Garage Door", -"-148229307":"Metal Shop Front", -"-144513264":"Pipe Tool", -"-144417939":"Wire Tool", -"-143481979":"Basic Blueprint Fragment", -"-143132326":"Huge Wooden Sign", -"-139037392":"Abyss Assault Rifle", -"-135252633":"Sled", -"-134959124":"Light Frankenstein Head", -"-132516482":"Weapon Lasersight", -"-132247350":"Small Water Catcher", -"-129230242":"Decorative Pinecones", -"-126305173":"Painted Egg", -"-119235651":"Water Jug", -"-113413047":"Diving Mask", -"-110921842":"Locker", -"-105415879":"Frontier Suit", -"-105343718":"Circle Balloon", -"-99886070":"Violet Roman Candle", -"-97956382":"Tool Cupboard", -"-97459906":"Jumpsuit", -"-96256997":"Wide Weapon Rack", -"-92759291":"Wooden Floor Spikes", -"-92315244":"High Caliber Revolver", -"-89874794":"Low Quality Spark Plugs", -"-82758111":"Scrap Mirror Large", -"-78533081":"Burnt Deer Meat", -"-75944661":"Eoka Pistol", -"-73195037":"Legacy Bow", -"-52398594":"Frontier Horns Single Item Rack", -"-48090175":"Snow Jacket", -"-44876289":"Igniter", -"-44066823":"Medium Chassis", -"-44066790":"Large Chassis", -"-44066600":"Small Chassis", -"-41896755":"Workbench Level 2", -"-41440462":"Spas-12 Shotgun", -"-34498533":"Cannon", -"-33009419":"Pure Anti-Rad Tea", -"-25740268":"Skull Spikes", -"-24571537":"Coconut", -"-23994173":"Boonie Hat", -"-22883916":"Dragon Mask", -"-20045316":"Mobile Phone", -"-19360132":"Rose Clone", -"-19318653":"Hammerhead Bolt", -"-17123659":"Smoke Rocket WIP!!!!", -"-10594280":"Sulfur Storage Box", -"-8312704":"Beach Towel", -"-7270019":"Orange Boomer", -"-4031221":"Metal Ore", -"3222790":"Hide Halterneck", -"3380160":"Card Movember Moustache", -"4384538":"Apple Pie", -"14241751":"Fire Arrow", -"15388698":"Stone Barricade", -"20489901":"Purple Sunglasses", -"21402876":"Burlap Gloves", -"22947882":"White ID Tag", -"23352662":"Large Banner Hanging", -"23391694":"Bunny Hat", -"28201841":"M39 Rifle", -"37122747":"Green Keycard", -"39600618":"Microphone Stand", -"42535890":"Medium Animated Neon Sign", -"51984655":"Incendiary Pistol Bullet", -"54265286":"Crocodile Pie", -"54436981":"Fairy Lights", -"60528587":"Roadsign Horse Armor", -"62577426":"Photograph", -"69511070":"Metal Fragments", -"70102328":"Red ID Tag", -"73681876":"Tech Trash", -"81423963":"Yellow ID Tag", -"82772055":"Horse", -"86840834":"NVGM Scientist Suit", -"94971664":"Stone Storage Box", -"95950017":"Metal Pipe", -"97903330":"Pure Crafting Quality Tea", -"98508942":"XXL Picture Frame", -"99588025":"High External Wooden Wall", -"104856514":"Bulb String Lights", -"106959911":"Light Frankenstein Legs", -"110116923":"Ice Metal Facemask", -"120820987":"Chicken Pie", -"121049755":"Tall Picture Frame", -"122783240":"Black Berry Clone", -"140006625":"PTZ CCTV Camera", -"143803535":"F1 Grenade", -"146221721":"Heavy Scientist Plushie", -"158303804":"Obsidian Bone Knife", -"162882477":"#50cal", -"170758448":"Cockpit With Engine Vehicle Module", -"171931394":"Stone Pickaxe", -"174866732":"Variable Zoom Scope", -"176787552":"Rifle Body", -"177226991":"Scarecrow", -"180752235":"Pink ID Tag", -"184516676":"Beehive", -"185586769":"Inner Tube", -"190184021":"Kayak", -"192249897":"Green", -"196700171":"Hide Vest", -"196784377":"Improvised Shield", -"198438816":"Vending Machine", -"200773292":"Hammer", -"204391461":"Coal :(", -"204970153":"Wrapped Gift", -"209218760":"Head Bag", -"210787554":"Engineering Workbench", -"215754713":"Bone Arrow", -"223891266":"T-Shirt", -"236677901":"Prototype Pickaxe", -"237239288":"Pants", -"240752557":"Tall Weapon Rack", -"242421166":"Light-Up Frame Large", -"242933621":"Frontier Mirror Large", -"248643189":"Spoiled Big Cat Meat", -"254522515":"Large Medkit", -"255305250":"Wooden Boat Ladder", -"261913429":"White Volcano Firework", -"263834859":"Basic Scrap Tea", -"268565518":"Storage Vehicle Module", -"271048478":"Rat Mask", -"273172220":"Plumber's Trumpet", -"273951840":"Scarecrow Suit", -"277730763":"Mummy Suit", -"281099360":"Bread Loaf", -"282103175":"Giant Lollipop Decor", -"286193827":"Pickles", -"286648290":"Disco Floor", -"296519935":"Diving Fins", -"301063058":"Wanted Poster 2", -"304481038":"Flare", -"309017792":"Big Cat Pie", -"317398316":"High Quality Metal", -"320438357":"Hunters Pie", -"340210699":"Frontier Mirror Small", -"342438846":"Anchovy", -"343045591":"MLRS Aiming Module", -"349762871":"40mm HE Grenade", -"352130972":"Rotten Apple", -"352321488":"Sunglasses", -"352499047":"Shotgun Trap", -"355877490":"Minigun Ammo Pack", -"359723196":"Chippy Arcade Game", -"362863314":"Heart Balloon", -"363163265":"Hose Tool", -"368008432":"Basic Crafting Quality Tea", -"375473148":"Scrap Transport Helicopter", -"377750553":"Pure Harvesting Tea", -"381595627":"Twitch Rivals Neon Sign", -"385099196":"4 Module Car Chassis", -"385645417":"Paintball", -"390728933":"Yellow Berry Clone", -"392828520":"Cooked Crocodile Meat", -"405904531":"Soccer Ball", -"405905095":"Sail", -"418081930":"Wood Chestplate", -"442289265":"Holosight", -"442886268":"Rocket Launcher", -"443432036":"Fluid Switch & Pump", -"445662288":"Scientist Plushie", -"446206234":"Torch Holder", -"450531685":"Light-Up Mirror Large", -"468313189":"Twitch Rivals Hazmat Suit", -"472505338":"Medieval AR", -"476066818":"Cassette - Long", -"479143914":"Gears", -"479292118":"Large Loot Bag", -"486661382":"Clan Table", -"491263800":"Nomad Suit", -"492357192":"RAND Switch", -"494161326":"RPG Launcher", -"504109620":"Ice Sculpture", -"507284030":"Coconut Armor Pants", -"524678627":"Advanced Scrap Tea", -"528668503":"Flame Turret", -"533993281":"Space LR-300 Assault Rifle", -"537946062":"Flight Recorder Box", -"547862680":"Knights armour cuirass", -"550753330":"Snowball Gun Ammo", -"553270375":"Large Rechargeable Battery", -"553887414":"Skull Fire Pit", -"553967074":"Wallpaper Wall", -"559147458":"Survival Fish Trap", -"567235583":"8x Zoom Scope", -"567871954":"Secretlab Chair", -"571949408":"Clump of Mixed Balloons", -"573676040":"Coffin", -"573926264":"Semi Automatic Body", -"574701440":"Scrap Storage Box", -"576509618":"Portable Boom Box", -"588596902":"Handmade Shell", -"593465182":"Table", -"594041190":"Compass", -"596469572":"RF Transmitter", -"602628465":"Parachute", -"602741290":"Burlap Shirt", -"603811464":"Advanced Max Health Tea", -"605467368":"Incendiary 5.56 Rifle Ammo", -"607400343":"Legacy Wood Shelter", -"607785075":"Armored Ladder Hatch", -"609049394":"Battery - Small", -"610102428":"Industrial Conveyor", -"613961768":"Bota Bag", -"615112838":"Rail Road Planter", -"621915341":"Raw Pork", -"625599716":"Metal Shield", -"634478325":"CCTV Camera", -"640470230":"Ceiling Fluorescent Light", -"642482233":"Sticks", -"647240052":"Triangle Rail Road Planter", -"649912614":"Revolver", -"652793345":"Krieg Storage Crates", -"656371026":"High Quality Carburetor", -"656371027":"Medium Quality Carburetor", -"656371028":"Low Quality Carburetor", -"656829501":"Wall Cabinet", -"657352755":"Beach Table", -"665332906":"Timer", -"671063303":"Riot Helmet", -"671706427":"Reinforced Glass Window", -"674734128":"Festive Doorway Garland", -"678698219":"M4 Shotgun", -"679690962":"Tools Storage Box", -"680234026":"Yellow Perch", -"695450239":"Lunar New Year Spear", -"696029452":"Paper Map", -"696029539":"Hot Air Balloon", -"699075597":"Wooden Cross", -"703057617":"Military Flame Thrower", -"709206314":"Tiger Mask", -"721798950":"Car Radio", -"722955039":"Water Gun", -"723407026":"Wood Mirror Standing", -"734320711":"Orchid", -"738611016":"Paintable Window", -"742745918":"Industrial Splitter", -"755224797":"Vodka Bottle", -"756125481":"Wood Mirror Medium", -"756517185":"Medium Present", -"756890702":"High External Adobe Wall", -"762289806":"Siren Light", -"782422285":"Sofa - Pattern", -"785728077":"Pistol Bullet", -"789333045":"Sunken Combat Knife", -"794356786":"Hide Boots", -"794443127":"Christmas Tree", -"795236088":"Torch", -"795371088":"Pump Shotgun", -"803222026":"Repair Bench", -"803954639":"Blue Berry Seed", -"809199956":"Gravestone", -"809689733":"Mummy Mask", -"809942731":"Scarecrow Wrap", -"813023040":"Cooked Wolf Meat", -"814297925":"Medieval Large Wood Box", -"818733919":"Industrial Door", -"818877484":"Semi-Automatic Pistol", -"821588319":"Bicycle", -"826309791":"Two Sided Town Sign Post", -"829641693":"Anchor", -"830839496":"Red Berry Seed", -"831955134":"Sky Lantern - Purple", -"832133926":"Wood Armor Pants", -"833533164":"Large Wood Box", -"835042040":"Medium Frankenstein Legs", -"838308300":"Burst Module", -"838831151":"Blue Berry Clone", -"839738457":"Scrap Mirror Medium", -"844440409":"Bronze Egg", -"850280505":"Bucket Helmet", -"853471967":"Laser Light", -"854447607":"White Berry", -"858486327":"Green Berry", -"861513346":"Lumberjack Suit", -"866332017":"Large Neon Sign", -"866889860":"Wooden Barricade", -"878301596":"Generic vehicle module", -"882559853":"Spider Webs", -"884424049":"Compound Bow", -"888415708":"RF Receiver", -"895374329":"Passenger Vehicle Module", -"912235912":"Sunflower Clone", -"915408809":"40mm Smoke Grenade", -"920930831":"Blue Industrial Wall Light", -"924598634":"Wheat Clone", -"926800282":"Medium Quality Valves", -"935606207":"Minigun", -"935692442":"Longsleeve T-Shirt", -"936496778":"Floor grill", -"952603248":"Weapon flashlight", -"960673498":"Large Hunting Trophy", -"962186730":"Tin Can Alarm", -"963400638":"Speech Bubble Balloon", -"963906841":"Rock", -"968019378":"Clatter Helmet", -"968421290":"Connected Speaker", -"969768382":"Reinforced Wooden Shield", -"971362526":"Skull Trophy", -"972302244":"Kick Hazmat", -"975983052":"Twitch Rivals Trophy", -"980333378":"Hide Poncho", -"988652725":"Smart Switch", -"989925924":"Raw Fish", -"992944937":"Ore Storage Box", -"996293980":"Human Skull", -"996757362":"Wagon", -"998894949":"Corn Seed", -"999690781":"Geiger Counter", -"1004843240":"Orchid Seed", -"1015352446":"Duo Submarine", -"1023919015":"Food Storage Box", -"1028889957":"Light-Up Mirror Medium", -"1036321299":"Blue Dog Tags", -"1044081720":"Wood Storage Box", -"1046904719":"Abyss Metal Hatchet", -"1052926200":"Mining Quarry", -"1055319033":"40mm Shotgun Round", -"1058261682":"Christmas Lights", -"1065594600":"Pilot Hazmat", -"1072924620":"High Quality Spark Plugs", -"1079279582":"Medical Syringe", -"1081315464":"Nest Hat", -"1081921512":"Card Table", -"1090916276":"Pitchfork", -"1094293920":"Wrapping Paper", -"1099314009":"Barbeque", -"1099611828":"Metal Armor Insert", -"1103488722":"Snowball Gun", -"1104520648":"Chainsaw", -"1107575710":"Arctic Scientist Suit", -"1110385766":"Metal Chest Plate", -"1112162468":"Blue Berry", -"1113514903":"Attack Helicopter", -"1115193056":"Wall Divider Pack", -"1121416193":"Pure Cooling Tea", -"1121925526":"Candy Cane", -"1127417055":"Armoured Ladder Hatch", -"1130729138":"Spoiled Fish Meat", -"1132603396":"Weapon Rack Stand", -"1142993169":"Ceiling Light", -"1145722690":"Catapult", -"1149964039":"Storage Monitor", -"1153652756":"Large Wooden Sign", -"1158340331":"Medium Quality Crankshaft", -"1158340332":"High Quality Crankshaft", -"1158340334":"Low Quality Crankshaft", -"1159991980":"Code Lock", -"1160881421":"Hitch & Trough", -"1168856825":"Metal Detector", -"1168916338":"Bee Grenade", -"1171735914":"AND Switch", -"1174484438":"Mini Fridge", -"1174957864":"Shockbyte Tool Cupboard", -"1176355476":"Concrete Hatchet", -"1177596584":"Elevator", -"1178325727":"Wheat", -"1181207482":"Heavy Plate Helmet", -"1184215560":"Spoiled Produce", -"1186655046":"Fuel Tank Vehicle Module", -"1189981699":"Crate Costume", -"1199391518":"Road Signs", -"1205084994":"Large Photo Frame", -"1205607945":"Two Sided Hanging Sign", -"1221063409":"Armored Double Door", -"1223729384":"Lavender ID Tag", -"1223900335":"Dog Tag", -"1230323789":"SMG Body", -"1230691307":"Captain's Log", -"1234878710":"Telephone", -"1234880403":"Sewing Kit", -"1242482355":"Jack O Lantern Angry", -"1242522330":"Cursed Cauldron", -"1248356124":"Timed Explosive Charge", -"1248383659":"#50cal", -"1254295946":"Armor Storage Box", -"1258768145":"Sunglasses", -"1259919256":"Mixing Table", -"1263920163":"Smoke Grenade", -"1266491000":"Hazmat Suit", -"1268178466":"Green Industrial Wall Light", -"1272194103":"Red Berry", -"1272430949":"Wheelbarrow Piano", -"1272768630":"Spoiled Human Meat", -"1277159544":"Weapon Rack Double Light", -"1285226495":"Bunny Costume", -"1293102274":"XOR Switch", -"1295301598":"Latex Balloon", -"1296788329":"Homing Missile", -"1305578813":"Small Neon Sign", -"1305765685":"Krieg Storage Barrel", -"1307626005":"Storage Barrel Vertical", -"1312679249":"Wood Mirror Large", -"1312843609":"Skull", -"1315082560":"Ox Mask", -"1318558775":"MP5A4", -"1319617282":"Small Loot Bag", -"1324203999":"Champagne Boomer", -"1326180354":"Salvaged Sword", -"1327005675":"Short Ice Wall", -"1330084809":"Low Quality Valves", -"1346158228":"Pumpkin Basket", -"1348294923":"Spoiled Bear Meat", -"1350707894":"Jungle Rock", -"1353298668":"Armored Door", -"1358643074":"Snow Machine", -"1361520181":"Minecart Planter", -"1364514421":"Blue ID Tag", -"1365234594":"Gold Mirror large", -"1366282552":"Leather Gloves", -"1367190888":"Corn", -"1371909803":"Tesla Coil", -"1373240771":"Wooden Barricade Cover", -"1373971859":"Python Revolver", -"1376065505":"Rear Seats Vehicle Module", -"1381010055":"Leather", -"1382263453":"Barbed Wooden Barricade", -"1390353317":"Sheet Metal Double Door", -"1391703481":"Burnt Pork", -"1394042569":"RHIB", -"1397052267":"Supply Signal", -"1400460850":"Saddle bag", -"1401987718":"Duct Tape", -"1409529282":"Door Closer", -"1412103380":"Sunflower Seed", -"1413014235":"Fridge", -"1414245162":"Note", -"1414245519":"Rose", -"1414245522":"Rope", -"1420547167":"Horse Costume", -"1422530437":"Raw Deer Meat", -"1424075905":"Water Bucket", -"1426097945":"Coconut Armor Chestplate", -"1426574435":"Minicopter", -"1428574144":"Hopper", -"1430085198":"Industrial Crafter", -"1443579727":"Hunting Bow", -"1447138977":"Light-Up Frame XXL", -"1451568081":"Chainlink Fence Gate", -"1456143403":"Cooking Workbench", -"1463862472":"Wanted Poster 4", -"1465782238":"Metal Storage Box", -"1467878256":"Pork Pie", -"1478091698":"Muzzle Brake", -"1480022580":"Basic Ore Tea", -"1482871705":"3 Module Car Chassis", -"1488606552":"Retro Tool Cupboard", -"1488979457":"Jackhammer", -"1491189398":"Paddle", -"1491753484":"Medium Frankenstein Torso", -"1494014226":"Discord Trophy", -"1512054436":"Potato Clone", -"1516531815":"Basic Harvesting Tea", -"1516985844":"Netting", -"1521286012":"Double Sign Post", -"1523195708":"Targeting Computer", -"1523403414":"Cassette - Short", -"1524187186":"Workbench Level 1", -"1524980732":"Carvable Pumpkin", -"1525520776":"Building Plan", -"1533551194":"White Berry Clone", -"1534542921":"Chair", -"1536610005":"Cooked Human Meat", -"1538126328":"Industrial Combiner", -"1540934679":"Wooden Spear", -"1542290441":"Single Sign Post", -"1545779598":"Assault Rifle", -"1548091822":"Apple", -"1553078977":"Bleach", -"1556365900":"Molotov Cocktail", -"1557173737":"Sunglasses", -"1559779253":"Engine Vehicle Module", -"1559915778":"Single Horse Saddle", -"1561022037":"Abyss Metal Pickaxe", -"1562867678":"Artist Canvas XL", -"1568388703":"Diesel Fuel", -"1569882109":"Handmade Fishing Rod", -"1572152877":"Mint ID Tag", -"1575635062":"Frankenstein Table", -"1578317134":"Hazmat Plushy", -"1581210395":"Large Planter Box", -"1586884551":"Flight Control Codelock", -"1588298435":"Bolt Action Rifle", -"1588492232":"Drone", -"1601468620":"Blue Jumpsuit", -"1601800933":"Jar of Honey", -"1602646136":"Stone Spear", -"1603174987":"Confetti Cannon", -"1604092540":"Twitch Rivals 2025 Sofa", -"1604837581":"Wooden Shield", -"1608640313":"Tank Top", -"1609921845":"Artist Canvas Small", -"1614528785":"Heavy Frankenstein Torso", -"1619039771":"Digital Clock", -"1621942085":"Outbreak Sprayer", -"1623701499":"Industrial Wall Light", -"1629293099":"Snowman", -"1629564540":"Wallpaper Tool", -"1633553557":"Birthday Candle Hat", -"1638322904":"Incendiary Rocket", -"1643667218":"Large Animated Neon Sign", -"1655650836":"Metal Barricade", -"1655979682":"Empty Can Of Beans", -"1658229558":"Lantern", -"1659114910":"Gas Mask", -"1659447559":"Wooden Horse Armor", -"1660145984":"Yellow Berry", -"1668129151":"Cooked Fish", -"1668858301":"Small Stocking", -"1673224590":"M15 Semi-Automatic Pistol", -"1675639563":"Beenie Hat", -"1680793490":"Boomerang", -"1686524871":"Decorative Gingerbread Men", -"1691223771":"Light-Up Frame Small", -"1696050067":"Modular Car Lift", -"1697996440":"Landscape Photo Frame", -"1711033574":"Bone Club", -"1712070256":"HV 5.56 Rifle Ammo", -"1712261904":"Pure Max Health Tea", -"1714496074":"Candle Hat", -"1714509152":"Ballista", -"1717250161":"Electric Table Lamp", -"1719587208":"Targeting Attachment", -"1719978075":"Bone Fragments", -"1722154847":"Hide Pants", -"1723747470":"Tree Lights", -"1729120840":"Wooden Door", -"1729374708":"Pure Ore Tea", -"1729712564":"Portrait Photo Frame", -"1730664641":"Wallpaper Ceiling", -"1732236518":"Caboose", -"1735402444":"Disco Floor", -"1736620421":"Clothing Storage Box", -"1744298439":"Blue Boomer", -"1746956556":"Bone Armor", -"1751045826":"Hoodie", -"1757265204":"Silver Egg", -"1758333838":"Teal", -"1762167092":"Green ID Tag", -"1768112091":"Tomaha Snowmobile", -"1769475390":"Wood Frame Standing", -"1770475779":"Worm", -"1770744540":"Generic vehicle chassis", -"1771755747":"Black Berry", -"1776460938":"Blood", -"1783512007":"Cactus Flesh", -"1784005657":"Parachute (Deployed)", -"1784406797":"Sousaphone", -"1787198294":"Frontier Mirror Standing", -"1789825282":"Candy Cane Club", -"1796682209":"Custom SMG", -"1801656689":"Light-Up Frame XL", -"1803831286":"Garry's Mod Tool Gun", -"1811780502":"Radioactive Water", -"1814288539":"Bone Knife", -"1819863051":"Sky Lantern", -"1827479659":"Burnt Wolf Meat", -"1831249347":"Scattershot", -"1835946060":"Cable Tunnel", -"1840570710":"Above Ground Pool", -"1840822026":"Beancan Grenade", -"1846605708":"Abyss Torch", -"1849409072":"Silly Horse Mask", -"1849887541":"Small Generator", -"1850456855":"Road Sign Kilt", -"1856217390":"Egg Basket", -"1858828593":"Egg", -"1865253052":"Dracula Mask", -"1869224826":"Motorbike With Sidecar", -"1873004466":"Coconut Armor Gloves", -"1873897110":"Cooked Bear Meat", -"1874610722":"Armored Cockpit Vehicle Module", -"1877339384":"Burlap Headwrap", -"1878053256":"Rowboat", -"1882709339":"Metal Blade", -"1883981798":"Low Quality Pistons", -"1883981800":"High Quality Pistons", -"1883981801":"Medium Quality Pistons", -"1884461210":"Charcoal Storage Box", -"1885488976":"Spooky Speaker", -"1892536031":"Fluorescent Light", -"1895235349":"Disco Ball", -"1898094925":"Pumpkin Plant Clone", -"1899610628":"Medium Loot Bag", -"1903654061":"Small Planter Box", -"1905387657":"Pure Rad. Removal Tea", -"1911552868":"Black Berry Seed", -"1914691295":"Prototype 17", -"1916016738":"Light-Up Mirror Standing", -"1917703890":"Burnt Horse Meat", -"1925646349":"Spoiled Pork Meat", -"1931713481":"Black Raspberries", -"1933140008":"PT Boat", -"1937380239":"Frontier Hatchet", -"1946219319":"Camp Fire", -"1948067030":"Ladder Hatch", -"1950013766":"Light-Up Frame Standing", -"1950721418":"Salvaged Shelves", -"1951603367":"Switch", -"1953903201":"Nailgun", -"1954597876":"Bee Catapult Bomb", -"1965232394":"Crossbow", -"1973165031":"Birthday Cake", -"1973684065":"Burnt Chicken", -"1973949960":"Frontier Bolts Single Item Rack", -"1975934948":"Survey Charge", -"1983621560":"Floor triangle grill", -"1989785143":"High Quality Horse Shoes", -"1991794121":"Trike", -"1992974553":"Burlap Trousers", -"1993693904":"Boat Building Station", -"2005491391":"Extended Magazine", -"2009734114":"Christmas Door Wreath", -"2019042823":"Tarp", -"2021351233":"Advanced Rad. Removal Tea", -"2023888403":"Medium Rechargeable Battery", -"2024467711":"Pure Scrap Tea", -"2036395619":"Scatter Dart", -"2039177180":"Bear Pie", -"2040726127":"Combat Knife", -"2041899972":"Triangle Ladder Hatch", -"2047789913":"Lead Armor Insert", -"2048317869":"Wolf Skull", -"2052270186":"Inner Tube", -"2054391128":"Factory Door", -"2054929933":"Jungle Relic Assault Rifle", -"2055695285":"Frontier Mirror Medium", -"2063916636":"Advanced Ore Tea", -"2068884361":"Small Backpack", -"2070189026":"Large Banner on pole", -"2083256995":"Handmade SMG", -"2087678962":"Search Light", -"2090395347":"Large Solar Panel", -"2100007442":"Audio Alarm", -"2104517339":"Strobe Light", -"2106561762":"Decorative Tinsel", -"2114754781":"Water Purifier", -"2120241887":"Gold Mirror Standing", -"2126889441":"Santa Beard", -"2130820932":"Cancer Research UK Plushie", -"2130820933":"Ronald McDonald House UK Plushie", -"2133269020":"Red Berry Clone" -} diff --git a/src/RustPlusBot.Features.StorageMonitors/Rendering/StorageMonitorEmbedRenderer.cs b/src/RustPlusBot.Features.StorageMonitors/Rendering/StorageMonitorEmbedRenderer.cs index 2f0a5b8d..ccc60c71 100644 --- a/src/RustPlusBot.Features.StorageMonitors/Rendering/StorageMonitorEmbedRenderer.cs +++ b/src/RustPlusBot.Features.StorageMonitors/Rendering/StorageMonitorEmbedRenderer.cs @@ -3,7 +3,7 @@ using Discord; using RustPlusBot.Abstractions.Connections; using RustPlusBot.Domain.StorageMonitors; -using RustPlusBot.Features.StorageMonitors.Naming; +using RustPlusBot.Features.ItemData.Naming; using RustPlusBot.Localization; namespace RustPlusBot.Features.StorageMonitors.Rendering; diff --git a/src/RustPlusBot.Features.StorageMonitors/RustPlusBot.Features.StorageMonitors.csproj b/src/RustPlusBot.Features.StorageMonitors/RustPlusBot.Features.StorageMonitors.csproj index c04677de..a33a6f99 100644 --- a/src/RustPlusBot.Features.StorageMonitors/RustPlusBot.Features.StorageMonitors.csproj +++ b/src/RustPlusBot.Features.StorageMonitors/RustPlusBot.Features.StorageMonitors.csproj @@ -13,6 +13,7 @@ + @@ -20,8 +21,4 @@ - - - - diff --git a/src/RustPlusBot.Features.StorageMonitors/StorageMonitorServiceCollectionExtensions.cs b/src/RustPlusBot.Features.StorageMonitors/StorageMonitorServiceCollectionExtensions.cs index 3d7efe85..0e249144 100644 --- a/src/RustPlusBot.Features.StorageMonitors/StorageMonitorServiceCollectionExtensions.cs +++ b/src/RustPlusBot.Features.StorageMonitors/StorageMonitorServiceCollectionExtensions.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.DependencyInjection; using RustPlusBot.Discord; using RustPlusBot.Features.StorageMonitors.Hosting; -using RustPlusBot.Features.StorageMonitors.Naming; +using RustPlusBot.Features.ItemData; using RustPlusBot.Features.StorageMonitors.Pairing; using RustPlusBot.Features.StorageMonitors.Posting; using RustPlusBot.Features.StorageMonitors.Relaying; @@ -21,7 +21,7 @@ public static IServiceCollection AddStorageMonitors(this IServiceCollection serv ArgumentNullException.ThrowIfNull(services); services.AddRustPlusBotLocalization(); - services.AddSingleton(); + services.AddItemData(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); diff --git a/src/RustPlusBot.Localization/Strings.fr.resx b/src/RustPlusBot.Localization/Strings.fr.resx index 7745fac4..63461ff7 100644 --- a/src/RustPlusBot.Localization/Strings.fr.resx +++ b/src/RustPlusBot.Localization/Strings.fr.resx @@ -249,6 +249,33 @@ Heure de wipe inconnue. + + {0} n'est pas fabricable. + + + {0} + + + Vouliez-vous dire : {0} ? + + + Aucun objet correspondant à « {0} ». + + + {0} + + + {0} n'est pas recyclable. + + + {0} + + + {0} ne peut pas être recherché. + + + {0} + 🚢 Cargo Ship arrivé en {0} @@ -324,12 +351,18 @@ Afficher depuis combien de temps chaque coéquipier survit. + + Afficher la recette de fabrication d'un objet + Bot Contrôle + + Base de données d'objets + Serveur @@ -339,6 +372,9 @@ Équipe + + Afficher le nom, l'id, la pile et la disparition d'un objet + Couper toute sortie du bot vers le jeu. @@ -357,12 +393,30 @@ Afficher la distance à chaque coéquipier. + + Afficher le recyclage d'un objet + + + Afficher le coût de recherche (ferraille) d'un objet + Afficher ce message d'aide. Transférer le rôle de chef d'équipe en jeu. + + Afficher la recette de fabrication d'un objet. + + + Rechercher un objet par nom ou identifiant. + + + Afficher le recyclage d'un objet. + + + Afficher le coût de recherche (ferraille) d'un objet. + Afficher la disponibilité du bot. diff --git a/src/RustPlusBot.Localization/Strings.resx b/src/RustPlusBot.Localization/Strings.resx index b3192928..7aa5e0b8 100644 --- a/src/RustPlusBot.Localization/Strings.resx +++ b/src/RustPlusBot.Localization/Strings.resx @@ -249,6 +249,33 @@ Wipe time is unknown. + + {0} is not craftable. + + + {0} + + + Did you mean: {0}? + + + No item matching '{0}'. + + + {0} + + + {0} is not recyclable. + + + {0} + + + {0} cannot be researched. + + + {0} + 🚢 Cargo Ship entered at {0} @@ -324,12 +351,18 @@ Show how long each teammate has survived. + + Show an item's craft recipe + Bot Control + + Item Database + Server @@ -339,6 +372,9 @@ Team + + Look up an item's name, id, stack, and despawn + Silence all bot output to the game. @@ -357,12 +393,30 @@ Show distance to each teammate. + + Show recycler output for an item + + + Show an item's research scrap cost + Show this help message. Transfer in-game team leadership. + + Show an item's craft recipe. + + + Look up an item by name or id. + + + Show recycler output for an item. + + + Show an item's research scrap cost. + Show the bot's uptime. diff --git a/tests/RustPlusBot.Features.Commands.Tests/CommandRegistrationTests.cs b/tests/RustPlusBot.Features.Commands.Tests/CommandRegistrationTests.cs index bc744d37..9e3011c7 100644 --- a/tests/RustPlusBot.Features.Commands.Tests/CommandRegistrationTests.cs +++ b/tests/RustPlusBot.Features.Commands.Tests/CommandRegistrationTests.cs @@ -10,6 +10,7 @@ using RustPlusBot.Features.Commands.Servers; using RustPlusBot.Features.Connections.Listening; using RustPlusBot.Features.Events.State; +using RustPlusBot.Features.ItemData; using RustPlusBot.Localization; using RustPlusBot.Persistence.Commands; using RustPlusBot.Persistence.Servers; @@ -35,6 +36,7 @@ public void Dispatcher_and_handlers_resolve() services.AddScoped(_ => Substitute.For()); services.AddScoped(_ => Substitute.For()); services.AddOptions(); + services.AddItemData(); services.AddCommands(); using var provider = services.BuildServiceProvider(validateScopes: true); @@ -49,7 +51,7 @@ public void Dispatcher_and_handlers_resolve() using var scope = provider.CreateScope(); Assert.NotNull(scope.ServiceProvider.GetRequiredService()); var handlers = scope.ServiceProvider.GetServices().ToList(); - Assert.Equal(19, handlers.Count); + Assert.Equal(23, handlers.Count); Assert.Contains(handlers, h => h.Name == "mute"); Assert.Contains(handlers, h => h.Name == "pop"); Assert.Contains(handlers, h => h.Name == "time"); @@ -87,6 +89,7 @@ public void Commands_contribute_an_interaction_module_assembly() services.AddScoped(_ => Substitute.For()); services.AddScoped(_ => Substitute.For()); services.AddOptions(); + services.AddItemData(); services.AddCommands(); using var provider = services.BuildServiceProvider(validateScopes: true); diff --git a/tests/RustPlusBot.Features.Commands.Tests/Formatting/ItemFormatterTests.cs b/tests/RustPlusBot.Features.Commands.Tests/Formatting/ItemFormatterTests.cs new file mode 100644 index 00000000..475af99c --- /dev/null +++ b/tests/RustPlusBot.Features.Commands.Tests/Formatting/ItemFormatterTests.cs @@ -0,0 +1,47 @@ +using RustPlusBot.Features.Commands.Formatting; +using RustPlusBot.Features.ItemData; +using RustPlusBot.Features.ItemData.Data; +using RustPlusBot.Features.ItemData.Naming; + +namespace RustPlusBot.Features.Commands.Tests.Formatting; + +public sealed class ItemFormatterTests +{ + private readonly IItemNameResolver _names = new ItemDatabaseNameResolver(new EmbeddedItemDatabase()); + + [Fact] + public void ItemLine_IncludesNameAndStack() + { + var item = new ItemRecord(1, "AK-47", 1, 3600, null, null, null); + var line = ItemLine.Format(item); + Assert.Contains("AK-47", line, StringComparison.Ordinal); + Assert.Contains("1", line, StringComparison.Ordinal); + } + + [Fact] + public void RecycleLine_ListsYields() + { + var item = new ItemRecord(1, "AK-47", 1, null, + new RecycleYield([new YieldEntry(-1059362949, 4, 1.0)]), null, null); + var line = RecycleLine.Format(item, _names); + Assert.Contains("AK-47", line, StringComparison.Ordinal); + Assert.Contains("4", line, StringComparison.Ordinal); + } + + [Fact] + public void CraftLine_ListsIngredients() + { + var item = new ItemRecord(1, "AK-47", 1, null, null, + new CraftRecipe([new Ingredient(-1059362949, 200)], 30.0, 3), null); + var line = CraftLine.Format(item, _names); + Assert.Contains("200", line, StringComparison.Ordinal); + } + + [Fact] + public void ResearchLine_ShowsScrap() + { + var item = new ItemRecord(1, "AK-47", 1, null, null, null, new ResearchCost(500)); + var line = ResearchLine.Format(item); + Assert.Contains("500", line, StringComparison.Ordinal); + } +} diff --git a/tests/RustPlusBot.Features.Commands.Tests/Handlers/ItemCommandHandlersTests.cs b/tests/RustPlusBot.Features.Commands.Tests/Handlers/ItemCommandHandlersTests.cs new file mode 100644 index 00000000..b1317462 --- /dev/null +++ b/tests/RustPlusBot.Features.Commands.Tests/Handlers/ItemCommandHandlersTests.cs @@ -0,0 +1,55 @@ +using RustPlusBot.Features.Commands.Dispatching; +using RustPlusBot.Features.Commands.Handlers; +using RustPlusBot.Features.ItemData; +using RustPlusBot.Features.ItemData.Naming; +using RustPlusBot.Localization; + +namespace RustPlusBot.Features.Commands.Tests.Handlers; + +public sealed class ItemCommandHandlersTests +{ + private readonly IItemDatabase _db = new EmbeddedItemDatabase(); + private readonly ILocalizer _loc = new ResxLocalizer(); + private readonly IItemNameResolver _names = new ItemDatabaseNameResolver(new EmbeddedItemDatabase()); + + private static CommandContext Ctx(params string[] args) => new(1, Guid.NewGuid(), "en", 99, "Caller", args); + + [Fact] + public void Names_areCorrect() + { + Assert.Equal("item", new ItemCommandHandler(_db, _loc).Name); + Assert.Equal("recycle", new RecycleCommandHandler(_db, _names, _loc).Name); + Assert.Equal("craft", new CraftCommandHandler(_db, _names, _loc).Name); + Assert.Equal("research", new ResearchCommandHandler(_db, _loc).Name); + } + + [Fact] + public async Task Item_Found_returnsCard() + { + var reply = await new ItemCommandHandler(_db, _loc).ExecuteAsync(Ctx("Assault Rifle"), CancellationToken.None); + Assert.Contains("Assault Rifle", reply, StringComparison.Ordinal); + } + + [Fact] + public async Task Item_NotFound_returnsMessage() + { + var reply = await new ItemCommandHandler(_db, _loc).ExecuteAsync(Ctx("zzzzz"), CancellationToken.None); + Assert.Contains("zzzzz", reply, StringComparison.Ordinal); + } + + [Fact] + public async Task Recycle_NotRecyclable_returnsNone() + { + // "Wood" is in the seed with null recycle. + var reply = await new RecycleCommandHandler(_db, _names, _loc).ExecuteAsync(Ctx("Wood"), + CancellationToken.None); + Assert.Contains("Wood", reply, StringComparison.Ordinal); + } + + [Fact] + public async Task Empty_args_returnsNotFound() + { + var reply = await new ItemCommandHandler(_db, _loc).ExecuteAsync(Ctx(), CancellationToken.None); + Assert.NotNull(reply); + } +} diff --git a/tests/RustPlusBot.Features.Commands.Tests/Help/CommandHelpCatalogTests.cs b/tests/RustPlusBot.Features.Commands.Tests/Help/CommandHelpCatalogTests.cs index ddedcd8c..ff298d07 100644 --- a/tests/RustPlusBot.Features.Commands.Tests/Help/CommandHelpCatalogTests.cs +++ b/tests/RustPlusBot.Features.Commands.Tests/Help/CommandHelpCatalogTests.cs @@ -5,11 +5,12 @@ namespace RustPlusBot.Features.Commands.Tests.Help; public sealed class CommandHelpCatalogTests { - /// The 13 registered in-game handler names (see AddCommands / CommandRegistrationTests). + /// The 17 registered in-game handler names (see AddCommands / CommandRegistrationTests). private static readonly string[] HandlerNames = [ "mute", "unmute", "uptime", "pop", "wipe", "time", "online", "offline", "team", "steamid", "alive", "afk", "prox", + "item", "recycle", "craft", "research", ]; [Fact] @@ -42,4 +43,14 @@ public void EveryDescriptionKeyResolvesInEnglishAndFrench() Assert.NotEqual(entry.DescriptionKey, loc.Get(entry.DescriptionKey, "fr")); } } + + [Fact] + public void EveryInGameGroupIsCoveredByHelpEmbedRenderer() + { + var coveredGroups = HelpEmbedRenderer.GroupOrder.Select(g => g.Group).ToHashSet(); + foreach (var group in CommandHelpCatalog.InGame.Select(e => e.Group).Distinct()) + { + Assert.Contains(group, coveredGroups); + } + } } diff --git a/tests/RustPlusBot.Features.ItemData.Tests/EmbeddedItemDatabaseTests.cs b/tests/RustPlusBot.Features.ItemData.Tests/EmbeddedItemDatabaseTests.cs new file mode 100644 index 00000000..15f8c0e8 --- /dev/null +++ b/tests/RustPlusBot.Features.ItemData.Tests/EmbeddedItemDatabaseTests.cs @@ -0,0 +1,58 @@ +using System.Text; +using RustPlusBot.Features.ItemData; +using RustPlusBot.Features.ItemData.Data; + +namespace RustPlusBot.Features.ItemData.Tests; + +public sealed class EmbeddedItemDatabaseTests +{ + private readonly EmbeddedItemDatabase _db = new(); + + [Fact] + public void GetById_ReturnsKnownItem() + { + var ak = _db.GetById(1545779598); + Assert.NotNull(ak); + Assert.Equal("Assault Rifle", ak!.Name); + } + + [Fact] + public void GetById_ReturnsNullForUnknown() + { + Assert.Null(_db.GetById(123456789)); + } + + [Fact] + public void Sources_ArePopulated() + { + Assert.Equal(new DateOnly(2026, 4, 8), _db.Sources.NamesAsOf); + } + + [Fact] + public void Parse_ThrowsOnSchemaVersionMismatch() + { + const string json = + """{"schemaVersion":999,"sources":{"namesAsOf":"2026-04-08","recycleAsOf":"2024-09-07","craftAsOf":"2024-09-07","researchAsOf":"2024-09-07"},"items":[]}"""; + using var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)); + Assert.Throws(() => EmbeddedItemDatabase.Parse(stream, 1)); + } + + [Fact] + public void Parse_SucceedsOnMatchingSchemaVersion() + { + const string json = + """{"schemaVersion":1,"sources":{"namesAsOf":"2026-04-08","recycleAsOf":"2024-09-07","craftAsOf":"2024-09-07","researchAsOf":"2024-09-07"},"items":[]}"""; + using var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)); + var dataset = EmbeddedItemDatabase.Parse(stream, 1); + Assert.Equal(1, dataset.SchemaVersion); + } + + [Fact] + public void IndexById_DuplicateId_LastWins() + { + var first = new ItemRecord(42, "First", 1, null, null, null, null); + var last = new ItemRecord(42, "Last", 1, null, null, null, null); + var index = EmbeddedItemDatabase.IndexById([first, last]); + Assert.Equal("Last", index[42].Name); + } +} diff --git a/tests/RustPlusBot.Features.ItemData.Tests/ItemDatabaseNameResolverTests.cs b/tests/RustPlusBot.Features.ItemData.Tests/ItemDatabaseNameResolverTests.cs new file mode 100644 index 00000000..d84687a1 --- /dev/null +++ b/tests/RustPlusBot.Features.ItemData.Tests/ItemDatabaseNameResolverTests.cs @@ -0,0 +1,21 @@ +using RustPlusBot.Features.ItemData; +using RustPlusBot.Features.ItemData.Naming; + +namespace RustPlusBot.Features.ItemData.Tests; + +public sealed class ItemDatabaseNameResolverTests +{ + private readonly IItemNameResolver _resolver = new ItemDatabaseNameResolver(new EmbeddedItemDatabase()); + + [Fact] + public void Resolve_ReturnsName_ForKnownId() + { + Assert.Equal("Assault Rifle", _resolver.Resolve(1545779598)); + } + + [Fact] + public void Resolve_FallsBack_ForUnknownId() + { + Assert.Equal("Item 999999", _resolver.Resolve(999999)); + } +} diff --git a/tests/RustPlusBot.Features.ItemData.Tests/ItemDatasetTests.cs b/tests/RustPlusBot.Features.ItemData.Tests/ItemDatasetTests.cs new file mode 100644 index 00000000..8c9e15c4 --- /dev/null +++ b/tests/RustPlusBot.Features.ItemData.Tests/ItemDatasetTests.cs @@ -0,0 +1,14 @@ +using RustPlusBot.Features.ItemData.Data; + +namespace RustPlusBot.Features.ItemData.Tests; + +public sealed class ItemDatasetTests +{ + [Fact] + public void ItemRecord_AllowsNullCalculatorData() + { + var record = new ItemRecord(1, "Wood", 1000, null, null, null, null); + Assert.Equal("Wood", record.Name); + Assert.Null(record.Recycle); + } +} diff --git a/tests/RustPlusBot.Features.ItemData.Tests/ItemLookupTests.cs b/tests/RustPlusBot.Features.ItemData.Tests/ItemLookupTests.cs new file mode 100644 index 00000000..9e1e181c --- /dev/null +++ b/tests/RustPlusBot.Features.ItemData.Tests/ItemLookupTests.cs @@ -0,0 +1,123 @@ +using RustPlusBot.Features.ItemData.Data; +using RustPlusBot.Features.ItemData.Lookup; + +namespace RustPlusBot.Features.ItemData.Tests; + +public sealed class ItemLookupTests +{ + private static readonly ItemRecord Ak = new(1, "AK-47", 1, null, null, null, null); + private static readonly ItemRecord Semi = new(2, "Semi-Automatic Rifle", 1, null, null, null, null); + private static readonly ItemRecord Wood = new(3, "Wood", 1000, null, null, null, null); + private static readonly ItemRecord Bag = new(4, "Sleeping Bag", 1, null, null, null, null); + private static readonly IReadOnlyList All = [Ak, Semi, Wood, Bag]; + + private static ItemMatch Resolve(string q) => + ItemLookup.Resolve(q, id => All.FirstOrDefault(i => i.Id == id), All); + + [Fact] + public void NumericInput_ResolvesById() + { + var match = Resolve("3"); + var found = Assert.IsType(match); + Assert.Equal("Wood", found.Item.Name); + } + + [Fact] + public void NumericMiss_FallsThroughToNameMatch() + { + // "47" is not an id but is a substring of "AK-47". + var match = Resolve("47"); + var found = Assert.IsType(match); + Assert.Equal("AK-47", found.Item.Name); + } + + [Fact] + public void ExactName_BeatsSubstring() + { + var match = Resolve("wood"); + var found = Assert.IsType(match); + Assert.Equal("Wood", found.Item.Name); + } + + [Fact] + public void SingleSubstring_Found() + { + var match = Resolve("sleep"); + var found = Assert.IsType(match); + Assert.Equal("Sleeping Bag", found.Item.Name); + } + + [Fact] + public void MultipleSubstring_AmbiguousPrefixFirst() + { + // Query "a": "AK-47" starts with 'A' (prefix match); "Semi-Automatic Rifle" and + // "Sleeping Bag" only contain 'a' as an interior character (substring matches). + // Ranking: OrderByDescending(StartsWith) → "AK-47" must be at index 0. + var match = ItemLookup.Resolve("a", id => All.FirstOrDefault(i => i.Id == id), All); + var amb = Assert.IsType(match); + Assert.True(amb.Candidates.Count >= 2); + Assert.Equal("AK-47", amb.Candidates[0].Name); + Assert.DoesNotContain(amb.Candidates.Skip(1), c => c.Name.StartsWith('A') || c.Name.StartsWith('a')); + } + + [Fact] + public void ExactNameCollision_ReturnsAmbiguousOrderedById() + { + // Two items share the same case-insensitive name; the one with the lower id should be first. + var recyclable = new ItemRecord(10, "Sunglasses", 1, null, new RecycleYield([]), null, null); + var notRecyclable = new ItemRecord(5, "Sunglasses", 1, null, null, null, null); + IReadOnlyList items = [recyclable, notRecyclable]; + var match = ItemLookup.Resolve("sunglasses", id => items.FirstOrDefault(i => i.Id == id), items); + var amb = Assert.IsType(match); + Assert.Equal(2, amb.Candidates.Count); + // Deterministic order: ascending by Id. + Assert.Equal(5, amb.Candidates[0].Id); + Assert.Equal(10, amb.Candidates[1].Id); + } + + [Fact] + public void ExactNameCollision_DoesNotFallThroughToSubstring() + { + // Even though there are 2 exact matches, the result must be Ambiguous (not a substring-ranked list). + var a = new ItemRecord(1, "Sunglasses", 1, null, null, null, null); + var b = new ItemRecord(2, "Sunglasses", 1, null, null, null, null); + var extra = new ItemRecord(3, "Cool Sunglasses", 1, null, null, null, null); + IReadOnlyList items = [a, b, extra]; + var match = ItemLookup.Resolve("Sunglasses", id => items.FirstOrDefault(i => i.Id == id), items); + var amb = Assert.IsType(match); + // Must contain only the 2 exact matches, not the substring hit. + Assert.Equal(2, amb.Candidates.Count); + } + + [Fact] + public void SingleExactMatch_StillReturnsFound() + { + var match = Resolve("AK-47"); + var found = Assert.IsType(match); + Assert.Equal("AK-47", found.Item.Name); + } + + [Fact] + public void NoMatch_NotFound() + { + Assert.IsType(Resolve("zzzzz")); + } + + [Theory] + [InlineData("")] + [InlineData(" ")] + public void EmptyOrWhitespace_NotFound(string q) + { + Assert.IsType(Resolve(q)); + } + + [Fact] + public void Ambiguous_RespectsCap() + { + var many = Enumerable.Range(1, 50).Select(i => new ItemRecord(i, $"Gun {i}", 1, null, null, null, null)) + .ToList(); + var match = ItemLookup.Resolve("gun", id => many.FirstOrDefault(x => x.Id == id), many, cap: 10); + var amb = Assert.IsType(match); + Assert.Equal(10, amb.Candidates.Count); + } +} diff --git a/tests/RustPlusBot.Features.ItemData.Tests/RustPlusBot.Features.ItemData.Tests.csproj b/tests/RustPlusBot.Features.ItemData.Tests/RustPlusBot.Features.ItemData.Tests.csproj new file mode 100644 index 00000000..3871c597 --- /dev/null +++ b/tests/RustPlusBot.Features.ItemData.Tests/RustPlusBot.Features.ItemData.Tests.csproj @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/tests/RustPlusBot.Features.StorageMonitors.Tests/EmbeddedItemNameResolverTests.cs b/tests/RustPlusBot.Features.StorageMonitors.Tests/EmbeddedItemNameResolverTests.cs index 026dfc59..762a5e50 100644 --- a/tests/RustPlusBot.Features.StorageMonitors.Tests/EmbeddedItemNameResolverTests.cs +++ b/tests/RustPlusBot.Features.StorageMonitors.Tests/EmbeddedItemNameResolverTests.cs @@ -1,4 +1,5 @@ -using RustPlusBot.Features.StorageMonitors.Naming; +using RustPlusBot.Features.ItemData; +using RustPlusBot.Features.ItemData.Naming; namespace RustPlusBot.Features.StorageMonitors.Tests; @@ -7,14 +8,15 @@ public sealed class EmbeddedItemNameResolverTests [Fact] public void Resolve_KnownId_ReturnsDisplayName() { - var resolver = new EmbeddedItemNameResolver(); + // -151838493 is "Wood" — present in the bundled item data. + var resolver = new ItemDatabaseNameResolver(new EmbeddedItemDatabase()); Assert.Equal("Wood", resolver.Resolve(-151838493)); } [Fact] public void Resolve_UnknownId_ReturnsFallback() { - var resolver = new EmbeddedItemNameResolver(); + var resolver = new ItemDatabaseNameResolver(new EmbeddedItemDatabase()); Assert.Equal("Item 123456789", resolver.Resolve(123456789)); } } diff --git a/tests/RustPlusBot.Features.StorageMonitors.Tests/RustPlusBot.Features.StorageMonitors.Tests.csproj b/tests/RustPlusBot.Features.StorageMonitors.Tests/RustPlusBot.Features.StorageMonitors.Tests.csproj index 21fca2b5..cc1f03b0 100644 --- a/tests/RustPlusBot.Features.StorageMonitors.Tests/RustPlusBot.Features.StorageMonitors.Tests.csproj +++ b/tests/RustPlusBot.Features.StorageMonitors.Tests/RustPlusBot.Features.StorageMonitors.Tests.csproj @@ -14,6 +14,7 @@ + diff --git a/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorEmbedRendererTests.cs b/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorEmbedRendererTests.cs index 0a1dd950..158acdc3 100644 --- a/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorEmbedRendererTests.cs +++ b/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorEmbedRendererTests.cs @@ -2,7 +2,7 @@ using NSubstitute; using RustPlusBot.Abstractions.Connections; using RustPlusBot.Domain.StorageMonitors; -using RustPlusBot.Features.StorageMonitors.Naming; +using RustPlusBot.Features.ItemData.Naming; using RustPlusBot.Features.StorageMonitors.Rendering; using RustPlusBot.Localization; diff --git a/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorPairingCoordinatorTests.cs b/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorPairingCoordinatorTests.cs index 51c33a43..191157ef 100644 --- a/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorPairingCoordinatorTests.cs +++ b/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorPairingCoordinatorTests.cs @@ -2,7 +2,7 @@ using NSubstitute; using RustPlusBot.Abstractions.Events; using RustPlusBot.Domain.StorageMonitors; -using RustPlusBot.Features.StorageMonitors.Naming; +using RustPlusBot.Features.ItemData.Naming; using RustPlusBot.Features.StorageMonitors.Pairing; using RustPlusBot.Features.StorageMonitors.Posting; using RustPlusBot.Features.StorageMonitors.Rendering; diff --git a/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorRegistrationTests.cs b/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorRegistrationTests.cs index 6affb83e..bddac3f2 100644 --- a/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorRegistrationTests.cs +++ b/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorRegistrationTests.cs @@ -1,6 +1,6 @@ using Microsoft.Extensions.DependencyInjection; using RustPlusBot.Features.StorageMonitors; -using RustPlusBot.Features.StorageMonitors.Naming; +using RustPlusBot.Features.ItemData.Naming; using RustPlusBot.Features.StorageMonitors.Pairing; using RustPlusBot.Features.StorageMonitors.Relaying; using RustPlusBot.Features.StorageMonitors.Rendering; diff --git a/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorStateRelayTests.cs b/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorStateRelayTests.cs index 96365c0b..27f1ceea 100644 --- a/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorStateRelayTests.cs +++ b/tests/RustPlusBot.Features.StorageMonitors.Tests/StorageMonitorStateRelayTests.cs @@ -4,7 +4,7 @@ using RustPlusBot.Abstractions.Events; using RustPlusBot.Domain.Connections; using RustPlusBot.Domain.StorageMonitors; -using RustPlusBot.Features.StorageMonitors.Naming; +using RustPlusBot.Features.ItemData.Naming; using RustPlusBot.Features.StorageMonitors.Posting; using RustPlusBot.Features.StorageMonitors.Relaying; using RustPlusBot.Features.StorageMonitors.Rendering; diff --git a/tests/RustPlusBot.ItemData.Generator.Tests/DatasetValidatorTests.cs b/tests/RustPlusBot.ItemData.Generator.Tests/DatasetValidatorTests.cs new file mode 100644 index 00000000..e1b1685c --- /dev/null +++ b/tests/RustPlusBot.ItemData.Generator.Tests/DatasetValidatorTests.cs @@ -0,0 +1,58 @@ +using RustPlusBot.Features.ItemData.Data; +using RustPlusBot.ItemData.Generator.Validation; + +namespace RustPlusBot.ItemData.Generator.Tests; + +/// Unit tests for . +public sealed class DatasetValidatorTests +{ + private static ItemDataset Good() => new(1, + new DatasetSources(new(2026, 4, 8), new(2024, 9, 7), new(2024, 9, 7), new(2024, 9, 7)), + [ + new ItemRecord(1, "AK-47", 1, 3600, + new RecycleYield([new YieldEntry(2, 4, 1.0)]), null, null), + new ItemRecord(2, "Metal Fragments", 1000, null, null, null, null), + ]); + + /// A dataset with all referential constraints satisfied should produce no errors. + [Fact] + public void Good_dataset_hasNoErrors() + { + var errors = DatasetValidator.Validate(Good(), new ValidationOptions(MinItemCount: 1)); + Assert.Empty(errors); + } + + /// A dataset with fewer items than the minimum should produce an error. + [Fact] + public void TooFewItems_isError() + { + var errors = DatasetValidator.Validate(Good(), new ValidationOptions(MinItemCount: 5000)); + Assert.Contains(errors, e => e.Contains("item count", StringComparison.OrdinalIgnoreCase)); + } + + /// A recycle yield that references an unknown item id should produce an error. + [Fact] + public void UnresolvableYieldId_isError() + { + var bad = new ItemDataset(1, Good().Sources, + [ + new ItemRecord(1, "AK-47", 1, null, + new RecycleYield([new YieldEntry(99999, 4, 1.0)]), null, null), + ]); + var errors = DatasetValidator.Validate(bad, new ValidationOptions(MinItemCount: 1)); + Assert.Contains(errors, e => e.Contains("99999", StringComparison.Ordinal)); + } + + /// A craft ingredient that references an unknown item id should produce an error. + [Fact] + public void UnresolvableCraftIngredientId_isError() + { + var bad = new ItemDataset(1, Good().Sources, + [ + new ItemRecord(1, "AK-47", 1, null, null, + new CraftRecipe([new Ingredient(88888, 100)], 30.0, 3), null), + ]); + var errors = DatasetValidator.Validate(bad, new ValidationOptions(MinItemCount: 1)); + Assert.Contains(errors, e => e.Contains("88888", StringComparison.Ordinal)); + } +} diff --git a/tests/RustPlusBot.ItemData.Generator.Tests/RustPlusBot.ItemData.Generator.Tests.csproj b/tests/RustPlusBot.ItemData.Generator.Tests/RustPlusBot.ItemData.Generator.Tests.csproj new file mode 100644 index 00000000..b033b92f --- /dev/null +++ b/tests/RustPlusBot.ItemData.Generator.Tests/RustPlusBot.ItemData.Generator.Tests.csproj @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/tests/RustPlusBot.Localization.Tests/StringsResourceParityTests.cs b/tests/RustPlusBot.Localization.Tests/StringsResourceParityTests.cs index 843f8baf..18f44407 100644 --- a/tests/RustPlusBot.Localization.Tests/StringsResourceParityTests.cs +++ b/tests/RustPlusBot.Localization.Tests/StringsResourceParityTests.cs @@ -42,6 +42,6 @@ public void English_covers_every_french_key() [Fact] public void Catalog_has_expected_key_count() { - Assert.Equal(212, EnglishKeys().Count); + Assert.Equal(230, EnglishKeys().Count); } } diff --git a/tools/RustPlusBot.ItemData.Generator/Program.cs b/tools/RustPlusBot.ItemData.Generator/Program.cs new file mode 100644 index 00000000..bc5ba72c --- /dev/null +++ b/tools/RustPlusBot.ItemData.Generator/Program.cs @@ -0,0 +1,132 @@ +using System.Text.Json; +using RustPlusBot.Features.ItemData.Data; +using RustPlusBot.ItemData.Generator.Sources; +using RustPlusBot.ItemData.Generator.Validation; + +namespace RustPlusBot.ItemData.Generator; + +/// Entry point for the item-data generator tool. +internal static class Program +{ + private static readonly DateOnly NamesAsOf = new(2026, 4, 8); + private static readonly DateOnly RecycleAsOf = new(2024, 9, 7); + private static readonly DateOnly CraftAsOf = new(2024, 9, 7); + private static readonly DateOnly ResearchAsOf = new(2024, 9, 7); + + private static readonly JsonSerializerOptions JsonOptions = new(JsonSerializerDefaults.Web) + { + WriteIndented = true, + }; + + /// Main entry point. + /// Command-line arguments. + /// 0 on success, 1 on validation failure. + internal static int Main(string[] args) + { + string? outPath = null; + var rustplusDir = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), + "Dev/rustplusplus/src/staticFiles"); + var minItems = 1000; + + var argList = args.ToList(); + var outIdx = argList.IndexOf("--out"); + if (outIdx >= 0 && outIdx + 1 < argList.Count) + { + outPath = argList[outIdx + 1]; + } + + var rustIdx = argList.IndexOf("--rustplusplus"); + if (rustIdx >= 0 && rustIdx + 1 < argList.Count) + { + rustplusDir = ExpandHome(argList[rustIdx + 1]); + } + + var minIdx = argList.IndexOf("--min-items"); + if (minIdx >= 0 && minIdx + 1 < argList.Count) + { + minItems = int.Parse(argList[minIdx + 1], System.Globalization.CultureInfo.InvariantCulture); + } + + if (outPath is null) + { + Console.Error.WriteLine("Usage: generator --out [--rustplusplus ] [--min-items ]"); + return 1; + } + + var namesSource = new OfflineNamesSource(Path.Combine(rustplusDir, "items.json")); + var stackSource = new OfflineStackSource(Path.Combine(rustplusDir, "rustlabsStackData.json")); + var despawnSource = new OfflineDespawnSource(Path.Combine(rustplusDir, "rustlabsDespawnData.json")); + var rustLabsSource = new OfflineRustLabsSource( + Path.Combine(rustplusDir, "rustlabsRecycleData.json"), + Path.Combine(rustplusDir, "rustlabsCraftData.json"), + Path.Combine(rustplusDir, "rustlabsResearchData.json")); + + var names = namesSource.LoadNames(); + Console.WriteLine($"Loaded {names.Count} names from items.json"); + + var stackSizes = stackSource.LoadStackSizes(); + var despawnSeconds = despawnSource.LoadDespawnSeconds(); + var recycleYields = rustLabsSource.LoadRecycleYields(); + var craftRecipes = rustLabsSource.LoadCraftRecipes(); + var researchCosts = rustLabsSource.LoadResearchCosts(); + + var nameIds = new HashSet(names.Keys); + + var orphanRecycle = recycleYields.Keys.Count(k => !nameIds.Contains(k)); + var orphanCraft = craftRecipes.Keys.Count(k => !nameIds.Contains(k)); + var orphanResearch = researchCosts.Keys.Count(k => !nameIds.Contains(k)); + + Console.WriteLine($"dropped {orphanRecycle} orphan recycle entries with no item name"); + Console.WriteLine($"dropped {orphanCraft} orphan craft entries with no item name"); + Console.WriteLine($"dropped {orphanResearch} orphan research entries with no item name"); + + var items = names + .Select(kv => + { + var id = kv.Key; + var name = kv.Value; + var stackSize = stackSizes.TryGetValue(id, out var ss) ? ss : 1; + var despawn = despawnSeconds.TryGetValue(id, out var ds) ? (int?)ds : null; + var recycle = recycleYields.TryGetValue(id, out var ry) ? ry : null; + var craft = craftRecipes.TryGetValue(id, out var cr) ? cr : null; + var research = researchCosts.TryGetValue(id, out var rc) ? rc : null; + return new ItemRecord(id, name, stackSize, despawn, recycle, craft, research); + }) + .ToList(); + + var dataset = new ItemDataset( + 1, + new DatasetSources(NamesAsOf, RecycleAsOf, CraftAsOf, ResearchAsOf), + items); + + var validationOptions = new ValidationOptions(MinItemCount: minItems); + var errors = DatasetValidator.Validate(dataset, validationOptions); + if (errors.Count > 0) + { + foreach (var error in errors) + { + Console.Error.WriteLine($"Validation error: {error}"); + } + + return 1; + } + + var json = JsonSerializer.Serialize(dataset, JsonOptions); + File.WriteAllText(outPath, json); + Console.WriteLine($"Emitted {items.Count} items to {outPath}"); + return 0; + } + + private static string ExpandHome(string path) + { + if (path.StartsWith("~/", StringComparison.Ordinal) || path == "~") + { + return Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), + path[2..]); + } + + return path; + } +} diff --git a/tools/RustPlusBot.ItemData.Generator/README.md b/tools/RustPlusBot.ItemData.Generator/README.md new file mode 100644 index 00000000..39d8af1d --- /dev/null +++ b/tools/RustPlusBot.ItemData.Generator/README.md @@ -0,0 +1,101 @@ +# RustPlusBot.ItemData.Generator + +A maintainer CLI that regenerates the embedded Rust item dataset +(`src/RustPlusBot.Features.ItemData/Data/item-data.json`) consumed by the bot's +`/item`, `/recycle`, `/craft`, and `/research` calculators. + +This tool is **not** part of the running bot — it is referenced by nothing in +the application graph. It exists so the bundled item data can be refreshed when +Rust updates, rather than shipping a frozen copy that silently rots. + +## Why it exists + +The reference data has two very different freshness profiles: + +- **Item names / ids** are well maintained and current. +- **Calculator data** (recycle yields, craft recipes, research costs) is sourced + from rustlabs and tends to lag game updates. + +So the dataset carries per-section provenance dates (`Sources.NamesAsOf`, +`RecycleAsOf`, `CraftAsOf`, `ResearchAsOf`), surfaced to users as a +"data as of ``" footer, and this tool can re-emit a fresh snapshot on +demand. It **validates loudly and refuses to overwrite a good bundle with +garbage** if the upstream shape drifts. + +## What it does + +1. Reads the [rustplusplus](https://github.com/alexemanuelol/rustplusplus) static + data files (offline transform — no network): + + | File | Provides | + | --- | --- | + | `items.json` | id → display name (the item spine) | + | `rustlabsStackData.json` | stack size | + | `rustlabsDespawnData.json` | despawn time | + | `rustlabsRecycleData.json` | recycler yields | + | `rustlabsCraftData.json` | craft ingredients + time | + | `rustlabsResearchData.json` | research scrap cost | + +2. Projects them into our own typed schema (`ItemDataset` / + `ItemRecord` / …, defined in `RustPlusBot.Features.ItemData`), keyed by item id, + with calculator data inlined per item (null where an item has none). +3. **Validates** the result (`DatasetValidator`): a minimum item-count floor and + that every recycle-yield / craft-ingredient id resolves to a known item. +4. On any validation error, prints the errors to stderr and exits non-zero + **without writing** — the existing good bundle is never clobbered. +5. On success, writes the dataset as indented JSON and exits 0. + +Items present in a rustlabs file but absent from `items.json` (no name) are +dropped, and the dropped counts are logged — never silent. + +## Usage + +```bash +dotnet run --project tools/RustPlusBot.ItemData.Generator -- \ + --out src/RustPlusBot.Features.ItemData/Data/item-data.json \ + --rustplusplus ~/Dev/rustplusplus/src/staticFiles \ + --min-items 1000 +``` + +| Argument | Required | Default | Meaning | +| --- | --- | --- | --- | +| `--out ` | yes | — | Where to write `item-data.json` | +| `--rustplusplus ` | no | `~/Dev/rustplusplus/src/staticFiles` | Directory holding the source JSON files | +| `--min-items ` | no | `1000` | Validation floor; fewer items than this fails the run | + +Exit code `0` on success, `1` on a usage error or validation failure. + +After regenerating, rebuild and run the test suite — the runtime loader +(`EmbeddedItemDatabase`) deserializes this file at startup, and the `ItemData` +tests assert known items resolve correctly. + +## Refreshing the dataset + +1. Update your local rustplusplus checkout so its `src/staticFiles` is current. +2. Run the command above. +3. If validation fails, the bundle is left untouched — investigate the reported + drift (an upstream file that changed shape, or a count below the floor) + before re-running. +4. Bump the relevant `Sources.*AsOf` dates in + [`Program.cs`](Program.cs) to reflect the new source dates, re-run, then + commit the regenerated `item-data.json`. + +## Provenance dates + +The source dates stamped into the dataset are currently hard-coded constants in +[`Program.cs`](Program.cs) (`NamesAsOf`, `RecycleAsOf`, `CraftAsOf`, +`ResearchAsOf`). Update them when you refresh from newer upstream data. + +## Notes + +- 6a ships the **offline transform** only. A live-scrape source adapter + (`IRustLabsSource`) is sketched as a seam for a future slice; for now the tool + transforms a local rustplusplus checkout. +- Recycle data covers the standard **recycler** only; safe-zone recycler and + shredder yields are out of scope for this slice. + +## Attribution + +Item names/ids originate from Facepunch's published item list; recycle/craft/ +research data originates from [rustlabs](https://rustlabs.com/) via the +rustplusplus static files. diff --git a/tools/RustPlusBot.ItemData.Generator/RustPlusBot.ItemData.Generator.csproj b/tools/RustPlusBot.ItemData.Generator/RustPlusBot.ItemData.Generator.csproj new file mode 100644 index 00000000..64384322 --- /dev/null +++ b/tools/RustPlusBot.ItemData.Generator/RustPlusBot.ItemData.Generator.csproj @@ -0,0 +1,15 @@ + + + + Exe + + + + + + + + + + + diff --git a/tools/RustPlusBot.ItemData.Generator/Sources/IDespawnSource.cs b/tools/RustPlusBot.ItemData.Generator/Sources/IDespawnSource.cs new file mode 100644 index 00000000..49e4081b --- /dev/null +++ b/tools/RustPlusBot.ItemData.Generator/Sources/IDespawnSource.cs @@ -0,0 +1,8 @@ +namespace RustPlusBot.ItemData.Generator.Sources; + +/// Provides item despawn times. +internal interface IDespawnSource +{ + /// Loads despawn seconds keyed by item id. + IReadOnlyDictionary LoadDespawnSeconds(); +} diff --git a/tools/RustPlusBot.ItemData.Generator/Sources/INamesSource.cs b/tools/RustPlusBot.ItemData.Generator/Sources/INamesSource.cs new file mode 100644 index 00000000..a1ab2599 --- /dev/null +++ b/tools/RustPlusBot.ItemData.Generator/Sources/INamesSource.cs @@ -0,0 +1,8 @@ +namespace RustPlusBot.ItemData.Generator.Sources; + +/// Provides item names, stack sizes, and despawn times. +internal interface INamesSource +{ + /// Loads item names keyed by item id. + IReadOnlyDictionary LoadNames(); +} diff --git a/tools/RustPlusBot.ItemData.Generator/Sources/IRustLabsSource.cs b/tools/RustPlusBot.ItemData.Generator/Sources/IRustLabsSource.cs new file mode 100644 index 00000000..3a0b89b5 --- /dev/null +++ b/tools/RustPlusBot.ItemData.Generator/Sources/IRustLabsSource.cs @@ -0,0 +1,16 @@ +using RustPlusBot.Features.ItemData.Data; + +namespace RustPlusBot.ItemData.Generator.Sources; + +/// Provides recycle, craft, and research data from RustLabs. +internal interface IRustLabsSource +{ + /// Loads recycle yields keyed by item id. + IReadOnlyDictionary LoadRecycleYields(); + + /// Loads craft recipes keyed by item id. + IReadOnlyDictionary LoadCraftRecipes(); + + /// Loads research costs keyed by item id. + IReadOnlyDictionary LoadResearchCosts(); +} diff --git a/tools/RustPlusBot.ItemData.Generator/Sources/IStackSource.cs b/tools/RustPlusBot.ItemData.Generator/Sources/IStackSource.cs new file mode 100644 index 00000000..82d39ec0 --- /dev/null +++ b/tools/RustPlusBot.ItemData.Generator/Sources/IStackSource.cs @@ -0,0 +1,8 @@ +namespace RustPlusBot.ItemData.Generator.Sources; + +/// Provides item stack sizes. +internal interface IStackSource +{ + /// Loads stack sizes keyed by item id. + IReadOnlyDictionary LoadStackSizes(); +} diff --git a/tools/RustPlusBot.ItemData.Generator/Sources/OfflineDespawnSource.cs b/tools/RustPlusBot.ItemData.Generator/Sources/OfflineDespawnSource.cs new file mode 100644 index 00000000..9443f48e --- /dev/null +++ b/tools/RustPlusBot.ItemData.Generator/Sources/OfflineDespawnSource.cs @@ -0,0 +1,34 @@ +using System.Globalization; +using System.Text.Json; + +namespace RustPlusBot.ItemData.Generator.Sources; + +/// Reads despawn times from the offline rustlabsDespawnData.json file. +/// Path to the rustlabsDespawnData.json file. +internal sealed class OfflineDespawnSource(string FilePath) : IDespawnSource +{ + /// + public IReadOnlyDictionary LoadDespawnSeconds() + { + using var stream = File.OpenRead(FilePath); + using var doc = JsonDocument.Parse(stream); + + var result = new Dictionary(); + foreach (var prop in doc.RootElement.EnumerateObject()) + { + if (!int.TryParse(prop.Name, NumberStyles.Integer, CultureInfo.InvariantCulture, out var id)) + { + continue; + } + + if (prop.Value.TryGetProperty("time", out var timeEl) && + timeEl.ValueKind == JsonValueKind.Number && + timeEl.TryGetInt32(out var time)) + { + result[id] = time; + } + } + + return result; + } +} diff --git a/tools/RustPlusBot.ItemData.Generator/Sources/OfflineNamesSource.cs b/tools/RustPlusBot.ItemData.Generator/Sources/OfflineNamesSource.cs new file mode 100644 index 00000000..3216a159 --- /dev/null +++ b/tools/RustPlusBot.ItemData.Generator/Sources/OfflineNamesSource.cs @@ -0,0 +1,36 @@ +using System.Globalization; +using System.Text.Json; + +namespace RustPlusBot.ItemData.Generator.Sources; + +/// Reads item names from the offline items.json file. +/// Path to the items.json file. +internal sealed class OfflineNamesSource(string FilePath) : INamesSource +{ + /// + public IReadOnlyDictionary LoadNames() + { + using var stream = File.OpenRead(FilePath); + using var doc = JsonDocument.Parse(stream); + + var result = new Dictionary(); + foreach (var prop in doc.RootElement.EnumerateObject()) + { + if (!int.TryParse(prop.Name, NumberStyles.Integer, CultureInfo.InvariantCulture, out var id)) + { + continue; + } + + if (prop.Value.TryGetProperty("name", out var nameEl)) + { + var name = nameEl.GetString(); + if (name is not null) + { + result[id] = name; + } + } + } + + return result; + } +} diff --git a/tools/RustPlusBot.ItemData.Generator/Sources/OfflineRustLabsSource.cs b/tools/RustPlusBot.ItemData.Generator/Sources/OfflineRustLabsSource.cs new file mode 100644 index 00000000..667a8452 --- /dev/null +++ b/tools/RustPlusBot.ItemData.Generator/Sources/OfflineRustLabsSource.cs @@ -0,0 +1,163 @@ +using System.Globalization; +using System.Text.Json; +using RustPlusBot.Features.ItemData.Data; + +namespace RustPlusBot.ItemData.Generator.Sources; + +/// Reads recycle, craft, and research data from the offline RustLabs JSON files. +/// Path to the rustlabsRecycleData.json file. +/// Path to the rustlabsCraftData.json file. +/// Path to the rustlabsResearchData.json file. +internal sealed class OfflineRustLabsSource( + string RecycleFilePath, + string CraftFilePath, + string ResearchFilePath) : IRustLabsSource +{ + private static readonly Dictionary WorkbenchLevels = new() + { + ["1524187186"] = 1, ["-41896755"] = 2, ["-1607980696"] = 3, + }; + + /// + public IReadOnlyDictionary LoadRecycleYields() + { + using var stream = File.OpenRead(RecycleFilePath); + using var doc = JsonDocument.Parse(stream); + + var result = new Dictionary(); + foreach (var prop in doc.RootElement.EnumerateObject()) + { + if (!int.TryParse(prop.Name, NumberStyles.Integer, CultureInfo.InvariantCulture, out var id)) + { + continue; + } + + if (!prop.Value.TryGetProperty("recycler", out var recyclerEl) || + recyclerEl.ValueKind == JsonValueKind.Null) + { + continue; + } + + if (!recyclerEl.TryGetProperty("yield", out var yieldEl) || + yieldEl.ValueKind == JsonValueKind.Null) + { + continue; + } + + var entries = new List(); + foreach (var entry in yieldEl.EnumerateArray()) + { + var entryIdStr = entry.GetProperty("id").GetString(); + if (entryIdStr is null || + !int.TryParse(entryIdStr, NumberStyles.Integer, CultureInfo.InvariantCulture, out var entryId)) + { + continue; + } + + var probability = entry.GetProperty("probability").GetDouble(); + var quantity = entry.GetProperty("quantity").GetInt32(); + entries.Add(new YieldEntry(entryId, quantity, probability)); + } + + if (entries.Count > 0) + { + result[id] = new RecycleYield(entries); + } + } + + return result; + } + + /// + public IReadOnlyDictionary LoadCraftRecipes() + { + using var stream = File.OpenRead(CraftFilePath); + using var doc = JsonDocument.Parse(stream); + + var result = new Dictionary(); + foreach (var prop in doc.RootElement.EnumerateObject()) + { + if (!int.TryParse(prop.Name, NumberStyles.Integer, CultureInfo.InvariantCulture, out var id)) + { + continue; + } + + if (!prop.Value.TryGetProperty("ingredients", out var ingredientsEl) || + ingredientsEl.ValueKind == JsonValueKind.Null) + { + continue; + } + + var ingredients = new List(); + foreach (var entry in ingredientsEl.EnumerateArray()) + { + var entryIdStr = entry.GetProperty("id").GetString(); + if (entryIdStr is null || + !int.TryParse(entryIdStr, NumberStyles.Integer, CultureInfo.InvariantCulture, out var entryId)) + { + continue; + } + + var quantity = entry.GetProperty("quantity").GetInt32(); + ingredients.Add(new Ingredient(entryId, quantity)); + } + + if (ingredients.Count == 0) + { + continue; + } + + var timeEl = prop.Value.GetProperty("time"); + if (timeEl.ValueKind != JsonValueKind.Number) + { + continue; + } + + var timeSeconds = timeEl.GetDouble(); + + int? workbenchLevel = null; + if (prop.Value.TryGetProperty("workbench", out var workbenchEl) && + workbenchEl.ValueKind == JsonValueKind.String) + { + var wbStr = workbenchEl.GetString(); + if (wbStr is not null && WorkbenchLevels.TryGetValue(wbStr, out var level)) + { + workbenchLevel = level; + } + } + + result[id] = new CraftRecipe(ingredients, timeSeconds, workbenchLevel); + } + + return result; + } + + /// + public IReadOnlyDictionary LoadResearchCosts() + { + using var stream = File.OpenRead(ResearchFilePath); + using var doc = JsonDocument.Parse(stream); + + var result = new Dictionary(); + foreach (var prop in doc.RootElement.EnumerateObject()) + { + if (!int.TryParse(prop.Name, NumberStyles.Integer, CultureInfo.InvariantCulture, out var id)) + { + continue; + } + + if (!prop.Value.TryGetProperty("researchTable", out var researchTableEl) || + researchTableEl.ValueKind == JsonValueKind.Null) + { + continue; + } + + if (researchTableEl.TryGetInt32(out var scrap)) + { + result[id] = new ResearchCost(scrap); + } + } + + return result; + } +} diff --git a/tools/RustPlusBot.ItemData.Generator/Sources/OfflineStackSource.cs b/tools/RustPlusBot.ItemData.Generator/Sources/OfflineStackSource.cs new file mode 100644 index 00000000..969fc5c4 --- /dev/null +++ b/tools/RustPlusBot.ItemData.Generator/Sources/OfflineStackSource.cs @@ -0,0 +1,39 @@ +using System.Globalization; +using System.Text.Json; + +namespace RustPlusBot.ItemData.Generator.Sources; + +/// Reads stack sizes from the offline rustlabsStackData.json file. +/// Path to the rustlabsStackData.json file. +internal sealed class OfflineStackSource(string FilePath) : IStackSource +{ + /// + public IReadOnlyDictionary LoadStackSizes() + { + using var stream = File.OpenRead(FilePath); + using var doc = JsonDocument.Parse(stream); + + var result = new Dictionary(); + foreach (var prop in doc.RootElement.EnumerateObject()) + { + if (!int.TryParse(prop.Name, NumberStyles.Integer, CultureInfo.InvariantCulture, out var id)) + { + continue; + } + + if (!prop.Value.TryGetProperty("quantity", out var quantityEl)) + { + continue; + } + + var quantityStr = quantityEl.GetString(); + if (quantityStr is not null && + int.TryParse(quantityStr, NumberStyles.Integer, CultureInfo.InvariantCulture, out var quantity)) + { + result[id] = quantity; + } + } + + return result; + } +} diff --git a/tools/RustPlusBot.ItemData.Generator/Validation/DatasetValidator.cs b/tools/RustPlusBot.ItemData.Generator/Validation/DatasetValidator.cs new file mode 100644 index 00000000..e4b2192a --- /dev/null +++ b/tools/RustPlusBot.ItemData.Generator/Validation/DatasetValidator.cs @@ -0,0 +1,51 @@ +using RustPlusBot.Features.ItemData.Data; + +namespace RustPlusBot.ItemData.Generator.Validation; + +/// Options that control dataset validation thresholds. +/// The minimum number of items the dataset must contain. +internal sealed record ValidationOptions(int MinItemCount); + +/// Validates an for structural integrity. +internal static class DatasetValidator +{ + /// + /// Validates the given against the supplied . + /// + /// The dataset to validate. + /// Thresholds that control which checks are performed. + /// + /// An empty list when the dataset is valid; otherwise a list of human-readable error messages. + /// + public static IReadOnlyList Validate(ItemDataset dataset, ValidationOptions options) + { + var errors = new List(); + var ids = new HashSet(dataset.Items.Select(i => i.Id)); + + if (dataset.Items.Count < options.MinItemCount) + { + errors.Add( + $"item count {dataset.Items.Count} below minimum {options.MinItemCount}"); + } + + foreach (var item in dataset.Items.Where(i => i.Recycle is not null)) + { + foreach (var entry in item.Recycle!.Recycler.Where(e => !ids.Contains(e.ItemId))) + { + errors.Add( + $"item {item.Id} ({item.Name}): recycle yield references unknown id {entry.ItemId}"); + } + } + + foreach (var item in dataset.Items.Where(i => i.Craft is not null)) + { + foreach (var ingredient in item.Craft!.Ingredients.Where(ing => !ids.Contains(ing.ItemId))) + { + errors.Add( + $"item {item.Id} ({item.Name}): craft ingredient references unknown id {ingredient.ItemId}"); + } + } + + return errors; + } +}