From 54087103bf26cddfb59b410ab94ef096bb2fc6f7 Mon Sep 17 00:00:00 2001 From: CHOMPStation2StaffMirrorBot <94713762+CHOMPStation2StaffMirrorBot@users.noreply.github.com> Date: Mon, 17 Nov 2025 17:18:14 -0700 Subject: [PATCH] [MIRROR] fix some bad material handling (#11997) Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com> --- .../binary_devices/algae_generator_vr.dm | 4 ++-- code/game/machinery/autolathe.dm | 11 +++++---- code/modules/reagents/reagents/_helpers.dm | 18 +++++++-------- .../research/tg/machinery/_production.dm | 9 ++++++-- .../research/tg/machinery/mech_fabricator.dm | 10 ++++++-- tgui/packages/tgui/interfaces/Autolathe.tsx | 23 ++++++++++--------- .../tgui/interfaces/ExosuitFabricatorTg.tsx | 6 ++--- .../tgui/interfaces/Fabrication/Types.ts | 4 ++-- tgui/packages/tgui/interfaces/Fabricator.tsx | 13 ++++++++--- 9 files changed, 60 insertions(+), 38 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm b/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm index ac22d2db69..952ebf8df9 100644 --- a/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm +++ b/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm @@ -172,10 +172,10 @@ ui.open() /obj/machinery/atmospherics/binary/algae_farm/tgui_data(mob/user) - var/data[0] + var/list/data = list() data["panelOpen"] = panel_open - var/materials_ui[0] + var/list/materials_ui = list() for(var/M in stored_material) materials_ui[++materials_ui.len] = list( "name" = M, diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 3ecd960dde..adb3d9b1c9 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -66,8 +66,6 @@ /obj/machinery/autolathe/tgui_static_data(mob/user) var/list/data = ..() - data += rmat.mat_container.tgui_static_data(user) - var/list/categories = list() var/list/recipes = list() for(var/datum/category_group/autolathe/A in autolathe_recipes.categories) @@ -89,7 +87,9 @@ data["recipes"] = recipes data["categories"] = categories - data += rmat.mat_container.tgui_static_data(user) + var/list/material_data = rmat.mat_container?.tgui_static_data(user) + if(material_data) + data += material_data return data @@ -101,7 +101,10 @@ /obj/machinery/autolathe/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() data["busy"] = busy - data["materials"] = rmat.mat_container.tgui_data(user, TRUE) + + var/list/material_data = rmat.mat_container?.tgui_data(user, TRUE) + if(material_data) + data["materials"] = material_data data["mat_efficiency"] = mat_efficiency return data diff --git a/code/modules/reagents/reagents/_helpers.dm b/code/modules/reagents/reagents/_helpers.dm index 6c4553fc9a..43cf483363 100644 --- a/code/modules/reagents/reagents/_helpers.dm +++ b/code/modules/reagents/reagents/_helpers.dm @@ -7,6 +7,15 @@ return FALSE return TRUE +// Helper for anything checking if it can inject a container like a syringe. +/atom/movable/proc/is_injectable_container() + return is_open_container() || \ + istype(src, /obj/item/reagent_containers/food) || \ + istype(src, /obj/item/slime_extract) || \ + istype(src, /obj/item/clothing/mask/smokable/cigarette) || \ + istype(src, /obj/item/storage/fancy/cigarettes) || \ + istype(src, /obj/item/clothing/mask/chewable) // CHOMPEdit + /obj/can_be_injected_by(var/atom/injector) if(!..()) return FALSE @@ -15,12 +24,3 @@ /mob/living/can_be_injected_by(var/atom/injector) return ..() && (can_inject(null, 0, BP_TORSO) || can_inject(null, 0, BP_GROIN)) - -// Helper for anything checking if it can inject a container like a syringe. -/obj/proc/is_injectable_container() - return is_open_container() || \ - istype(src, /obj/item/reagent_containers/food) || \ - istype(src, /obj/item/slime_extract) || \ - istype(src, /obj/item/clothing/mask/smokable/cigarette) || \ - istype(src, /obj/item/storage/fancy/cigarettes) || \ - istype(src, /obj/item/clothing/mask/chewable) // CHOMPEdit diff --git a/code/modules/research/tg/machinery/_production.dm b/code/modules/research/tg/machinery/_production.dm index e25288c567..1973daa2d0 100644 --- a/code/modules/research/tg/machinery/_production.dm +++ b/code/modules/research/tg/machinery/_production.dm @@ -254,14 +254,19 @@ data["designs"] = designs data["fabName"] = name - data += materials.mat_container.tgui_static_data() + + var/list/material_data = materials.mat_container?.tgui_static_data(user) + if(material_data) + data += material_data return data /obj/machinery/rnd/production/tgui_data(mob/user) var/list/data = list() - data["materials"] = materials.mat_container.tgui_data() + var/list/material_data = materials.mat_container?.tgui_data(user) + if(material_data) + data["materials"] = material_data data["onHold"] = FALSE //materials.on_hold() data["busy"] = busy data["materialMaximum"] = materials.local_size diff --git a/code/modules/research/tg/machinery/mech_fabricator.dm b/code/modules/research/tg/machinery/mech_fabricator.dm index 0b2d24bd9b..7d316a7613 100644 --- a/code/modules/research/tg/machinery/mech_fabricator.dm +++ b/code/modules/research/tg/machinery/mech_fabricator.dm @@ -379,7 +379,7 @@ ui.open() /obj/machinery/mecha_part_fabricator_tg/tgui_static_data(mob/user) - var/list/data = rmat.mat_container.tgui_static_data(user) + var/list/data = ..() var/list/designs = list() @@ -405,12 +405,18 @@ data["designs"] = designs + var/list/material_data = rmat.mat_container?.tgui_static_data(user) + if(material_data) + data += material_data + return data /obj/machinery/mecha_part_fabricator_tg/tgui_data(mob/user) var/list/data = list() - data["materials"] = rmat.mat_container.tgui_data(user) + var/list/material_data =rmat.mat_container?.tgui_data(user) + if(material_data) + data["materials"] = material_data data["queue"] = list() data["processing"] = process_queue diff --git a/tgui/packages/tgui/interfaces/Autolathe.tsx b/tgui/packages/tgui/interfaces/Autolathe.tsx index 4d1fd1b512..52aaf55880 100644 --- a/tgui/packages/tgui/interfaces/Autolathe.tsx +++ b/tgui/packages/tgui/interfaces/Autolathe.tsx @@ -37,15 +37,15 @@ type RecipeData = { type Data = { busy: string; - materials: Material[]; + materials?: Material[]; mat_efficiency: number; recipes: RecipeData[]; - SHEET_MATERIAL_AMOUNT: number; + SHEET_MATERIAL_AMOUNT?: number; }; export const Autolathe = (props) => { const { act, data } = useBackend(); - const { SHEET_MATERIAL_AMOUNT } = data; + const { materials = [], SHEET_MATERIAL_AMOUNT = 0 } = data; return ( @@ -57,7 +57,7 @@ export const Autolathe = (props) => {
act('remove_mat', { @@ -76,6 +76,7 @@ export const Autolathe = (props) => { const Designs = (props) => { const { act, data } = useBackend(); + const { materials = [] } = data; const [selectedCategory, setSelectedCategory] = useSharedState( 'selected_category', @@ -83,13 +84,13 @@ const Designs = (props) => { ); const [searchText, setSearchText] = useSharedState('search_text', ''); - const materials = useMemo(() => { - const materials = {}; - for (const material of data.materials) { - materials[material.name] = material.amount; + const materialRecord = useMemo(() => { + const materialRecord = {}; + for (const material of materials) { + materialRecord[material.name] = material.amount; } - return materials; - }, [data.materials]); + return materialRecord; + }, [materials]); const categories = {}; @@ -155,7 +156,7 @@ const Designs = (props) => { ))} diff --git a/tgui/packages/tgui/interfaces/ExosuitFabricatorTg.tsx b/tgui/packages/tgui/interfaces/ExosuitFabricatorTg.tsx index b76f06c114..574bde0dc1 100644 --- a/tgui/packages/tgui/interfaces/ExosuitFabricatorTg.tsx +++ b/tgui/packages/tgui/interfaces/ExosuitFabricatorTg.tsx @@ -40,7 +40,7 @@ type ExosuitFabricatorData = FabricatorData & export const ExosuitFabricatorTg = (props) => { const { act, data } = useBackend(); - const { materials, SHEET_MATERIAL_AMOUNT } = data; + const { materials = [], SHEET_MATERIAL_AMOUNT = 0, designs } = data; const availableMaterials: MaterialMap = {}; @@ -56,7 +56,7 @@ export const ExosuitFabricatorTg = (props) => { ( {
act('remove_mat', { diff --git a/tgui/packages/tgui/interfaces/Fabrication/Types.ts b/tgui/packages/tgui/interfaces/Fabrication/Types.ts index f3285d33fd..5342a9da82 100644 --- a/tgui/packages/tgui/interfaces/Fabrication/Types.ts +++ b/tgui/packages/tgui/interfaces/Fabrication/Types.ts @@ -77,12 +77,12 @@ export type FabricatorData = { /** * The materials available to the fabricator, via ore silo or local storage. */ - materials: Material[]; + materials?: Material[]; /** * Definition of how much units 1 sheet has. */ - SHEET_MATERIAL_AMOUNT: number; + SHEET_MATERIAL_AMOUNT?: number; /** * The name of the fabricator, as displayed on the title bar. diff --git a/tgui/packages/tgui/interfaces/Fabricator.tsx b/tgui/packages/tgui/interfaces/Fabricator.tsx index ebbd9ed944..9c681aa37c 100644 --- a/tgui/packages/tgui/interfaces/Fabricator.tsx +++ b/tgui/packages/tgui/interfaces/Fabricator.tsx @@ -22,12 +22,19 @@ import type { export const Fabricator = (props) => { const { act, data } = useBackend(); - const { fabName, onHold, designs, busy, SHEET_MATERIAL_AMOUNT } = data; + const { + fabName, + onHold, + designs, + busy, + SHEET_MATERIAL_AMOUNT = 0, + materials = [], + } = data; // Reduce the material count array to a map of actually available materials. const availableMaterials: MaterialMap = {}; - for (const material of data.materials) { + for (const material of materials) { availableMaterials[material.name] = material.amount; } @@ -52,7 +59,7 @@ export const Fabricator = (props) => {
act('remove_mat', {