# SPDX-FileCopyrightText: 2019 DamianX <DamianX@users.noreply.github.com>
# SPDX-FileCopyrightText: 2019 L.E.D <10257081+unusualcrow@users.noreply.github.com>
# SPDX-FileCopyrightText: 2020 Decappi <kit0001@gmail.com>
# SPDX-FileCopyrightText: 2020 Exp <theexp111@gmail.com>
# SPDX-FileCopyrightText: 2020 Hugo Laloge <hugo.laloge@gmail.com>
# SPDX-FileCopyrightText: 2020 Paul <ritter.paul1+git@googlemail.com>
# SPDX-FileCopyrightText: 2020 Vera Aguilera Puerto <6766154+Zumorica@users.noreply.github.com>
# SPDX-FileCopyrightText: 2020 Víctor Aguilera Puerto <6766154+Zumorica@users.noreply.github.com>
# SPDX-FileCopyrightText: 2020 Víctor Aguilera Puerto <zddm@outlook.es>
# SPDX-FileCopyrightText: 2020 lajolico <55922029+lajolico@users.noreply.github.com>
# SPDX-FileCopyrightText: 2020 py01 <60152240+collinlunn@users.noreply.github.com>
# SPDX-FileCopyrightText: 2020 py01 <pyronetics01@gmail.com>
# SPDX-FileCopyrightText: 2020 windarkata <windarkata@gmail.com>
# SPDX-FileCopyrightText: 2021 20kdc <asdd2808@gmail.com>
# SPDX-FileCopyrightText: 2021 Acruid <shatter66@gmail.com>
# SPDX-FileCopyrightText: 2021 Alex Evgrashin <aevgrashin@yandex.ru>
# SPDX-FileCopyrightText: 2021 MehimoNemo <22804739+MehimoNemo@users.noreply.github.com>
# SPDX-FileCopyrightText: 2021 Metal Gear Sloth <metalgearsloth@gmail.com>
# SPDX-FileCopyrightText: 2021 SETh lafuente <cetaciocascarudo@gmail.com>
# SPDX-FileCopyrightText: 2021 SethLafuente <84478872+SethLafuente@users.noreply.github.com>
# SPDX-FileCopyrightText: 2021 Swept <sweptwastaken@protonmail.com>
# SPDX-FileCopyrightText: 2021 Vera Aguilera Puerto <zddm@outlook.es>
# SPDX-FileCopyrightText: 2021 iczero <iczero4@gmail.com>
# SPDX-FileCopyrightText: 2022 0x6273 <0x40@keemail.me>
# SPDX-FileCopyrightText: 2022 Andreas Kämper <andreas@kaemper.tech>
# SPDX-FileCopyrightText: 2022 Anthemic <93178783+jproads@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 August Eymann <august.eymann@gmail.com>
# SPDX-FileCopyrightText: 2022 BubblegumBlue <63939723+BubblegumBlue@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Chris V <HoofedEar@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 CrzyPotato <75244093+CrzyPotato@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 EmoGarbage404 <98561806+EmoGarbage404@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Fishfish458 <47410468+Fishfish458@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Flipp Syder <76629141+vulppine@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Francesco <frafonia@gmail.com>
# SPDX-FileCopyrightText: 2022 Jack Fox <35575261+DubiousDoggo@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Jacob Tong <10494922+ShadowCommander@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Justin Trotter <trotter.justin@gmail.com>
# SPDX-FileCopyrightText: 2022 Lamrr <96937466+Lamrr@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Lucas <luc4s.rib3iro@gmail.com>
# SPDX-FileCopyrightText: 2022 Moony <moonheart08@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Paul Ritter <ritter.paul1@googlemail.com>
# SPDX-FileCopyrightText: 2022 Peptide90 <78795277+Peptide90@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Rane <60792108+Elijahrane@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Ripmorld <60119809+UKNOWH@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Snowni <101532866+Snowni@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Starm4ncer <63939723+Starm4ncer@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 T-Stalker <43253663+DogZeroX@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 T-Stalker <le0nel_1van@hotmail.com>
# SPDX-FileCopyrightText: 2022 ZeroDayDaemon <60460608+ZeroDayDaemon@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 ZeroDiamond <zxdwareisbroken@gmail.com>
# SPDX-FileCopyrightText: 2022 fishfish458 <fishfish458>
# SPDX-FileCopyrightText: 2022 metalgearsloth <metalgearsloth@gmail.com>
# SPDX-FileCopyrightText: 2022 mirrorcult <lunarautomaton6@gmail.com>
# SPDX-FileCopyrightText: 2022 zero <ribeirolucasdev@gmail.com>
# SPDX-FileCopyrightText: 2023 AJCM-git <60196617+AJCM-git@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 AjexRose <112997230+AjexRose@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 ChilbroBaggins <107660393+ChilbroBaggins@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Doru991 <75124791+Doru991@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 ElectroJr <leonsfriedrich@gmail.com>
# SPDX-FileCopyrightText: 2023 HerCoyote23 <131214189+HerCoyote23@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 IntegerTempest <30300017+IntegerTempest@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Jeff <velcroboy333@hotmail.com>
# SPDX-FileCopyrightText: 2023 KingFroozy <140668342+KingFroozy@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Lei Yunxing <lyx2020@sjtu.edu.cn>
# SPDX-FileCopyrightText: 2023 MishaUnity <81403616+MishaUnity@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Morb <14136326+Morb0@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Nim <128169402+Nimfar11@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 OttoMaticode <124523848+OttoMaticode@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Puro <103608145+PuroSlavKing@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Scribbles0 <91828755+Scribbles0@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Segonist <74138556+Segonist@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Slava0135 <40753025+Slava0135@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 SpartanKadence <113391284+SpartanKadence@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Stanislav4ix <124695665+Stanislav4ix@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Tunguso4ka <71643624+Tunguso4ka@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Visne <39844191+Visne@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Vordenburg <114301317+Vordenburg@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Whisper <121047731+QuietlyWhisper@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 brainfood1183 <113240905+brainfood1183@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 c4llv07e <38111072+c4llv07e@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 chromiumboy <50505512+chromiumboy@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 coolmankid12345 <55817627+coolmankid12345@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 coolmankid12345 <coolmankid12345@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 iller_saver <55444968+illersaver@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 keronshb <54602815+keronshb@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 liltenhead <104418166+liltenhead@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 lzk228 <124214523+lzk228@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 nmajask <nmajask@gmail.com>
# SPDX-FileCopyrightText: 2023 ubis1 <140386474+ubis1@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 12rabbits <53499656+12rabbits@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Adrian16199 <144424013+Adrian16199@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Alice "Arimah" Heurlin <30327355+arimah@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Alpaccalypse <llamageddon@llamageddon.net>
# SPDX-FileCopyrightText: 2024 Alzore <140123969+Blackern5000@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 ArZarLordOfMango <96249677+ArZarLordOfMango@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Armok <155400926+ARMOKS@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Boaz1111 <149967078+Boaz1111@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 BramvanZijp <56019239+BramvanZijp@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Brandon Hu <103440971+Brandon-Huu@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 CaasGit <87243814+CaasGit@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Cojoke <83733158+Cojoke-dot@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Debug <49997488+DebugOk@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 DieselMohawk <gavin.drinka@gmail.com>
# SPDX-FileCopyrightText: 2024 Dimastra <65184747+Dimastra@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Dimastra <dimastra@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 DrSmugleaf <10968691+DrSmugleaf@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 DrSmugleaf <DrSmugleaf@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ed <96445749+TheShuEd@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Emisse <99158783+Emisse@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 EmoGarbage404 <retron404@gmail.com>
# SPDX-FileCopyrightText: 2024 Eoin Mcloughlin <helloworld@eoinrul.es>
# SPDX-FileCopyrightText: 2024 Errant <35878406+Errant-4@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Flareguy <78941145+Flareguy@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 FungiFellow <151778459+FungiFellow@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ghagliiarghii <68826635+Ghagliiarghii@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 GitHubUser53123 <110841413+GitHubUser53123@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 GreyMario <mariomister541@gmail.com>
# SPDX-FileCopyrightText: 2024 HS <81934438+HolySSSS@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Hannah Giovanna Dawson <karakkaraz@gmail.com>
# SPDX-FileCopyrightText: 2024 Hanz <41141796+Hanzdegloker@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Hrosts <35345601+Hrosts@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ian <ignaz.k@live.de>
# SPDX-FileCopyrightText: 2024 JIPDawg <51352440+JIPDawg@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 JIPDawg <JIPDawg93@gmail.com>
# SPDX-FileCopyrightText: 2024 Joel Zimmerman <JoelZimmerman@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Julian Giebel <juliangiebel@live.de>
# SPDX-FileCopyrightText: 2024 JustCone <141039037+JustCone14@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Kara <lunarautomaton6@gmail.com>
# SPDX-FileCopyrightText: 2024 Kevin Zheng <kevinz5000@gmail.com>
# SPDX-FileCopyrightText: 2024 Killerqu00 <47712032+Killerqu00@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ko4ergaPunk <62609550+Ko4ergaPunk@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Krunklehorn <42424291+Krunklehorn@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Kukutis96513 <146854220+Kukutis96513@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Leon Friedrich <60421075+ElectroJr@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Lumminal <81829924+Lumminal@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Lye <128915833+Lyroth001@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 MACMAN2003 <macman2003c@gmail.com>
# SPDX-FileCopyrightText: 2024 Menshin <Menshin@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 MerrytheManokit <167581110+MerrytheManokit@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Mervill <mervills.email@gmail.com>
# SPDX-FileCopyrightText: 2024 Minty642 <42335609+Minty642@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 MisterMecky <mrmecky@hotmail.com>
# SPDX-FileCopyrightText: 2024 Moomoobeef <62638182+Moomoobeef@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Mr. 27 <45323883+Dutch-VanDerLinde@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 MureixloI <132683811+MureixloI@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 NULL882 <gost6865@yandex.ru>
# SPDX-FileCopyrightText: 2024 Nairod <110078045+Nairodian@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 NakataRin <45946146+NakataRin@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Neptune <Captain03chaos@gmail.com>
# SPDX-FileCopyrightText: 2024 OrangeMoronage9622 <whyteterry0092@gmail.com>
# SPDX-FileCopyrightText: 2024 PJBot <pieterjan.briers+bot@gmail.com>
# SPDX-FileCopyrightText: 2024 Partmedia <kevinz5000@gmail.com>
# SPDX-FileCopyrightText: 2024 Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
# SPDX-FileCopyrightText: 2024 Pieter-Jan Briers <pieterjan.briers@gmail.com>
# SPDX-FileCopyrightText: 2024 Piras314 <92357316+Piras314@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Plykiya <58439124+Plykiya@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Plykiya <plykiya@protonmail.com>
# SPDX-FileCopyrightText: 2024 PopGamer46 <yt1popgamer@gmail.com>
# SPDX-FileCopyrightText: 2024 Preston Smith <92108534+thetolbean@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Psychpsyo <60073468+Psychpsyo@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 PursuitInAshes <pursuitinashes@gmail.com>
# SPDX-FileCopyrightText: 2024 QueerNB <176353696+QueerNB@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Remuchi <72476615+Remuchi@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Repo <47093363+Titian3@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 RiceMar1244 <138547931+RiceMar1244@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Rouge2t7 <81053047+Sarahon@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 RumiTiger <154005209+RumiTiger@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Saphire Lattice <lattice@saphi.re>
# SPDX-FileCopyrightText: 2024 ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Scruq445 <storchdamien@gmail.com>
# SPDX-FileCopyrightText: 2024 ShadowCommander <10494922+ShadowCommander@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Simon <63975668+Simyon264@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Spessmann <156740760+Spessmann@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Stalen <33173619+stalengd@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 TakoDragon <69509841+BackeTako@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Tayrtahn <tayrtahn@gmail.com>
# SPDX-FileCopyrightText: 2024 Teemu Kauhanen <SHOTbyGUN@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Truoizys <153248924+Truoizys@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 TsjipTsjip <19798667+TsjipTsjip@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ubaser <134914314+UbaserB@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Unisol <1929445+Unisol@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Unkn0wn_Gh0st <shadowstalkermll@gmail.com>
# SPDX-FileCopyrightText: 2024 VMSolidus <evilexecutive@gmail.com>
# SPDX-FileCopyrightText: 2024 Vasilis <vasilis@pikachu.systems>
# SPDX-FileCopyrightText: 2024 Vigers Ray <60344369+VigersRay@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Winkarst <74284083+Winkarst-cpu@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 a_person <40855173+a-person5660@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 amatwiedle <amatwiedle@gmail.com>
# SPDX-FileCopyrightText: 2024 beck-thompson <107373427+beck-thompson@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 coolboy911 <85909253+coolboy911@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 deathride58 <deathride58@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 deepdarkdepths <155149356+deepdarkdepths@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 dffdff2423 <dffdff2423@gmail.com>
# SPDX-FileCopyrightText: 2024 eoineoineoin <github@eoinrul.es>
# SPDX-FileCopyrightText: 2024 foboscheshir <156405958+foboscheshir@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 iNVERTED <alextjorgensen@gmail.com>
# SPDX-FileCopyrightText: 2024 icekot8 <93311212+icekot8@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 lapatison <100279397+lapatison@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 lunarcomets <140772713+lunarcomets@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 lzk <124214523+lzk228@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 metalgearsloth <comedian_vs_clown@hotmail.com>
# SPDX-FileCopyrightText: 2024 nikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 ninruB <38016303+asperger-sind@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 osjarw <62134478+osjarw@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 osjarw <oskariwjarvinen@gmail.com>
# SPDX-FileCopyrightText: 2024 plykiya <plykiya@protonmail.com>
# SPDX-FileCopyrightText: 2024 saintmuntzer <47153094+saintmuntzer@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 shamp <140359015+shampunj@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 stellar-novas <stellar_novas@riseup.net>
# SPDX-FileCopyrightText: 2024 strO0pwafel <153459934+strO0pwafel@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 stroopwafel <j.o.luijkx@student.tudelft.nl>
# SPDX-FileCopyrightText: 2024 takemysoult <143123247+takemysoult@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 themias <89101928+themias@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 to4no_fix <156101927+chavonadelal@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 unknown <Administrator@DESKTOP-PMRIVVA.kommune.indresogn.no>
# SPDX-FileCopyrightText: 2024 voidnull000 <18663194+voidnull000@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 yglop <95057024+yglop@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Арт <123451459+JustArt1m@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aiden <aiden@djkraz.com>
# SPDX-FileCopyrightText: 2025 Aidenkrz <aiden@djkraz.com>
# SPDX-FileCopyrightText: 2025 Aineias1 <dmitri.s.kiselev@gmail.com>
# SPDX-FileCopyrightText: 2025 ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aviu00 <aviu00@protonmail.com>
# SPDX-FileCopyrightText: 2025 BombasterDS <115770678+BombasterDS@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 BombasterDS <deniskaporoshok@gmail.com>
# SPDX-FileCopyrightText: 2025 BombasterDS2 <shvalovdenis.workmail@gmail.com>
# SPDX-FileCopyrightText: 2025 CometVoid <cometsstrile@gmail.com>
# SPDX-FileCopyrightText: 2025 FaDeOkno <143940725+FaDeOkno@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Fishbait <Fishbait@git.ml>
# SPDX-FileCopyrightText: 2025 GoobBot <uristmchands@proton.me>
# SPDX-FileCopyrightText: 2025 Ilya246 <57039557+Ilya246@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 IrisTheAmped <iristheamped@gmail.com>
# SPDX-FileCopyrightText: 2025 JoeHammad1844 <130668733+JoeHammad1844@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 JoeHammad1844 <finiansalas2@gmail.com>
# SPDX-FileCopyrightText: 2025 John Willis <143434770+CerberusWolfie@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 K-Dynamic <20566341+K-Dynamic@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 McBosserson <148172569+McBosserson@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Milon <plmilonpl@gmail.com>
# SPDX-FileCopyrightText: 2025 Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 OnyxTheBrave <131422822+OnyxTheBrave@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Perry Fraser <perryprog@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Piras314 <p1r4s@proton.me>
# SPDX-FileCopyrightText: 2025 RatherUncreative <RatherUncreativeName@proton.me>
# SPDX-FileCopyrightText: 2025 Rouden <149893554+Roudenn@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 SX-7 <92227810+SX-7@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 SX-7 <sn1.test.preria.2002@gmail.com>
# SPDX-FileCopyrightText: 2025 SX_7 <sn1.test.preria.2002@gmail.com>
# SPDX-FileCopyrightText: 2025 Solstice <solsticeofthewinter@gmail.com>
# SPDX-FileCopyrightText: 2025 SomethingUnbearable <mewatcher102@gmail.com>
# SPDX-FileCopyrightText: 2025 Southbridge <7013162+southbridge-fur@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Spatison <137375981+Spatison@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Speebro <100388782+Speebr0@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Speebro <speebro@notreal.com>
# SPDX-FileCopyrightText: 2025 Ted Lukin <66275205+pheenty@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 TheBorzoiMustConsume <197824988+TheBorzoiMustConsume@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Theodore Lukin <66275205+pheenty@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Thom <119594676+ItsMeThom@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Thomas <87614336+Aeshus@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Unlumination <144041835+Unlumy@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Velken <8467292+Velken@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 deltanedas <39013340+deltanedas@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 deltanedas <@deltanedas:kde.org>
# SPDX-FileCopyrightText: 2025 fishbait <gnesse@gmail.com>
# SPDX-FileCopyrightText: 2025 gluesniffler <159397573+gluesniffler@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 gluesniffler <linebarrelerenthusiast@gmail.com>
# SPDX-FileCopyrightText: 2025 kosticia <kosticia46@gmail.com>
# SPDX-FileCopyrightText: 2025 pathetic meowmeow <uhhadd@gmail.com>
# SPDX-FileCopyrightText: 2025 pheenty <fedorlukin2006@gmail.com>
# SPDX-FileCopyrightText: 2025 slarticodefast <161409025+slarticodefast@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 username <113782077+whateverusername0@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 whateverusername0 <whateveremail>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

- type: entity
  id: BaseLathe
  parent: [ BaseMachinePowered, ConstructibleMachine, BaseAutomatedMachine ] # Goob: Automation
  abstract: true
  name: lathe
  components:
  - type: Appearance
  - type: WiresVisuals
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeAabb
          bounds: "-0.4,-0.4,0.4,0.4"
        density: 190
        mask:
        - MachineMask
        layer:
          - MachineLayer
  - type: Lathe
  - type: MaterialStorage
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTrigger
        damage: 100
      behaviors:
      - !type:PlaySoundBehavior
        sound:
          collection: MetalBreak
      - !type:ChangeConstructionNodeBehavior
        node: machineFrame
      - !type:DoActsBehavior
        acts: ["Destruction"]
  - type: WiresPanel
  - type: ActivatableUI
    key: enum.LatheUiKey.Key
  - type: ActivatableUIRequiresPower
  - type: UserInterface
    interfaces:
      enum.LatheUiKey.Key:
        type: LatheBoundUserInterface
      enum.ResearchClientUiKey.Key:
        type: ResearchClientBoundUserInterface
  - type: Transform
    anchored: true
  - type: Pullable
  - type: StaticPrice
    price: 800
  - type: ResearchClient
  - type: TechnologyDatabase
  - type: Speech # Goobstation - Lathe message on recipes update
    speechSounds: Lathe
  - type: AutomationSlots # Goobstation
    slots:
    - !type:AutomatedMaterialStorage
      input: AutomationSlotMaterials
      output: null
    - !type:AutomatedPorts
      sinks:
      - LathePrint
  - type: LatheAutomation # Goobstation
  - type: SpamEmitSound # Goobstation - random lathe sounds
    minInterval: 300
    maxInterval: 900
    sound:
      collection: RandomLatheSounds
      params:
        volume: -12 # Ambient
        maxDistance: 10
        variation: 0.05
  - type: SpamEmitSoundRequirePower # Goobstation

# a lathe that can be sped up with space lube / slowed down with glue
- type: entity
  abstract: true
  parent: BaseLathe
  id: BaseLatheLube
  components:
  - type: ReagentSpeed
    solution: lube
    modifiers:
      SpaceLube: 0.25
      SpaceGlue: 5
  - type: SolutionContainerManager
    solutions:
      lube:
        maxVol: 250
  - type: Spillable
    solution: lube
  - type: RefillableSolution
    solution: lube
  - type: ExaminableSolution
    solution: lube

- type: entity
  abstract: true
  id: BaseHyperlathe
  components:
  - type: Lathe
    materialUseMultiplier: 0.5
    timeMultiplier: 1.5
  - type: LatheHeatProducing
  - type: ReagentSpeed
    modifiers:
      SpaceLube: 0.8 # being faster means less heat so lube needs to be nerfed
      SpaceGlue: 5 # no change from normal lathe, overheat!!!

- type: entity
  id: Autolathe
  parent: [BaseLatheLube]
  name: autolathe
  description: It produces basic items using metal and glass. Has the ability to process blueprints to print new recipes.
  components:
  - type: Sprite
    sprite: Structures/Machines/autolathe.rsi
    snapCardinals: true
    layers:
    - state: icon
      map: ["enum.LatheVisualLayers.IsRunning"]
    - state: unlit
      shader: unshaded
      map: ["enum.PowerDeviceVisualLayers.Powered"]
    - state: inserting
      map: ["enum.MaterialStorageVisualLayers.Inserting"]
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Machine
    board: AutolatheMachineCircuitboard
  - type: MaterialStorage
    whitelist: &StandardMaterialWhitelist
      tags:
        - Sheet
        - RawMaterial
        - Ingot
        - Metal # Goobstation Start
        - Wooden
        - SheetPlasma
        - Plastic # Goobstation End
  - type: Lathe
    idleState: icon
    runningState: building
    unlitIdleState: unlit
    unlitRunningState: unlit-building
    staticPacks:
    - ToolsStatic
    - PartsStatic
    - AtmosStatic
    - CablesStatic
    - PaperworkStatic
    - TowelsStatic
    #- CargoStatic Goob edit - Moved to Cargo fab
    - MaterialsStatic
    - BasicChemistryStatic
    - RollerBedsStatic
    - LightsStatic
    - ServiceStatic
    - PowerCellsStatic
    - ElectronicsStatic
    # Goobstation
    - NailsStatic
    - LatheMiscStatic
    - MedicalVehiclesStatic
    - GrenadeTriggersStatic
    - TapeRecorderStatic
    - MiscSignallersStatic
  - type: EmagLatheRecipes
    emagStaticPacks:
    - SecurityWeaponsStatic
    - SecurityAmmoStatic
    - SyndicateAmmoStatic
    # Goobstation
    - SecurityWeaponsStaticGoob
    - SecurityAmmoStaticGoob
    - SyndicateAmmoLightStatic
    - ScienceExplosives
  - type: BlueprintReceiver
    whitelist:
      tags:
      - BlueprintAutolathe
  - type: ContainerContainer
    containers:
      machine_board: !type:Container
      machine_parts: !type:Container
      blueprint: !type:Container
  - type: EmptyOnMachineDeconstruct
    containers:
    - blueprint

- type: entity
  id: AutolatheHyperConvection
  parent: [Autolathe, BaseHyperlathe]
  name: hyper convection autolathe
  description: A highly-experimental autolathe that harnesses the power of extreme heat to slowly create objects more cost-effectively.
  components:
  - type: Sprite
    sprite: Structures/Machines/autolathe_hypercon.rsi
  - type: Machine
    board: AutolatheHyperConvectionMachineCircuitboard

- type: entity
  id: Protolathe
  parent: [BaseLatheLube]
  name: protolathe
  description: Converts raw materials into advanced items.
  components:
  - type: Sprite
    sprite: Structures/Machines/protolathe.rsi
    snapCardinals: true
    layers:
    - state: icon
      map: ["enum.LatheVisualLayers.IsRunning"]
    - state: unlit
      shader: unshaded
      map: ["enum.PowerDeviceVisualLayers.Powered"]
    - state: inserting
      map: ["enum.MaterialStorageVisualLayers.Inserting"]
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Machine
    board: ProtolatheMachineCircuitboard
  - type: MaterialStorage
    whitelist: *StandardMaterialWhitelist
  - type: OreSiloClient
  - type: Lathe
    idleState: icon
    runningState: building
    unlitIdleState: unlit
    unlitRunningState: unlit-building
    #staticPacks: - Goobstation - Move static recipes to autolathe
    #- ChemistryStatic
    #- SurgeryStatic
    dynamicPacks:
    - AdvancedTools
    #- ScienceEquipment - Goobstation - Moved to Scifab
    #- ScienceExplosives - Goobstation - Moved to Scifab
    - ScienceClothing
    - PowerCells
    #- ScienceWeapons - Goobstation - Moved to Scifab
    #- Mining - Goobstation - Moved to Cargofab
    #- AtmosTools - Goobstation - Moved to Engifab
    #- EngineeringWeapons - Goobstation - Moved to Scifab and Engifab
    #- Chemistry - Goobstation
    - Janitor
    - Instruments
    - Equipment # Goobstation note: handheld mass scanner is removed
    - FauxTiles
    # Goobstation Packs
    # - ServiceWeapons
    - SpecOpsGoogles
    - MedicalMisc
    - MedicalVehiclesAdvanced
    - UpgradeKits
    - ConstructionBagOfHolding
    # Einstein Engines Packs
    - Translators
  - type: EmagLatheRecipes
    emagDynamicPacks:
    - SecurityAmmo
    - SecurityExplosives
    #- SecurityEquipment # Goobstation
    - SecurityWeapons
    # Goobstation Packs
    - SecurityAmmoGoob
    - SecurityWeaponsGoob
    - RestraintTechnology
    - MiningWeapons

- type: entity
  id: ProtolatheHyperConvection
  parent: [Protolathe, BaseHyperlathe]
  name: hyper convection protolathe
  description: A highly-experimental protolathe that harnesses the power of extreme heat to slowly create objects more cost-effectively.
  components:
  - type: Sprite
    sprite: Structures/Machines/protolathe_hypercon.rsi
  - type: Machine
    board: ProtolatheHyperConvectionMachineCircuitboard

- type: entity
  id: CircuitImprinter
  parent: [BaseLatheLube]
  name: circuit imprinter
  description: Prints circuit boards for machines.
  components:
  - type: Sprite
    sprite: Structures/Machines/circuit_imprinter.rsi
    snapCardinals: true
    layers:
    - state: icon
      map: ["enum.LatheVisualLayers.IsRunning"]
    - state: unlit
      shader: unshaded
      map: ["enum.PowerDeviceVisualLayers.Powered"]
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Machine
    board: CircuitImprinterMachineCircuitboard
  - type: Lathe
    producingSound: /Audio/Machines/circuitprinter.ogg
    idleState: icon
    runningState: building
    staticPacks:
    #- ScienceBoardsStatic - Goobstation - Moved to Scifab
    - ServiceBoardsStatic
    - CargoBoardsStatic
    #- MedicalBoardsStatic - Goobstation - Moved to Scifab and Medfab
    #- EngineeringBoardsStatic - Goobstation - Moved to Scifab and Engifab
    - CircuitFloorsStatic
    # Goobstation Packs
    - SharedBoardsStatic
    - MedicalBoardsStaticGoob
    - SecurityBoardsStaticGoob
    - ServiceBoardsStaticGoob
    dynamicPacks:
    - EngineeringBoards
    - CargoBoards
    - MedicalBoards
    - ServiceBoards
    #- ScienceBoards - Goobstation - Moved to Scifab
    - CameraBoards
    #- MechBoards - Goobstation - split between departmental lathes
    - ShuttleBoards
    # Goobstation Packs
    - SharedBoards
    - ShuttleBoardsGoob
  - type: MaterialStorage
    whitelist: *StandardMaterialWhitelist
  - type: OreSiloClient
  - type: RequireProjectileTarget

- type: entity
  id: CircuitImprinterHyperConvection
  parent: [CircuitImprinter, BaseHyperlathe]
  name: hyper convection circuit imprinter
  description: A highly-experimental circuit imprinter that harnesses the power of extreme heat to slowly create objects more cost-effectively.
  components:
  - type: Sprite
    sprite: Structures/Machines/circuit_imprinter_hypercon.rsi
  - type: Machine
    board: CircuitImprinterHyperConvectionMachineCircuitboard

- type: entity
  id: ExosuitFabricator
  parent: [BaseLatheLube]
  name: exosuit fabricator
  description: Creates parts for robotics and other mechanical needs.
  components:
  - type: Sprite
    sprite: Structures/Machines/exosuit_fabricator.rsi
    layers:
    - state: fab-idle
      map: ["enum.LatheVisualLayers.IsRunning"]
    - state: fab-load
      map: ["enum.MaterialStorageVisualLayers.Inserting"]
    - state: fab-o
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Machine
    board: ExosuitFabricatorMachineCircuitboard
  - type: Lathe
    idleState: fab-idle
    runningState: fab-active
    staticPacks:
    - RoboticsStatic
    - BorgModulesStatic
    - BorgLimbsStatic
    # Goobstation Packs
    - MechPartsStatic
    # - BorgModulesStaticGoob #Removes surgery module, medical cyborgs start with them
    - IPCPartsStatic
    - PowerCagesStatic
    - PartsStatic
    - CablesStatic
    - PowerCellsStatic
    dynamicPacks:
    - Robotics
    - BorgModules
    - MechParts
    - MechEquipment
    # Goobstation Packs
    - MechPartsGoob
    - Modsuits
    - PowerCages
    - BorgModulesGoob
    - BasicCybernetics
    - MedicalCybernetics
    - AdvancedCybernetics
    - PowerAugments
    - ToolAugments
    - PowerCells
  - type: EmagLatheRecipes # Goobstation
    emagStaticPacks:
    - MechWeaponsSecurityStatic
    emagDynamicPacks:
    - MechWeaponsSalvage
    - MechWeaponsSecurityLight
  - type: MaterialStorage
    whitelist: *StandardMaterialWhitelist
  - type: OreSiloClient
  - type: GuideHelp
    guides:
    - Robotics

- type: entity
  id: Biofabricator
  parent: BaseLatheLube
  name: biocube fabricator
  description: Produces animal cubes using biomass.
  components:
  - type: Sprite
    sprite: Structures/Machines/biofabricator.rsi
    snapCardinals: true
    layers:
    - state: icon
      map: ["enum.LatheVisualLayers.IsRunning"]
      color: "#ffaa99"
    - state: unlit
      shader: unshaded
      map: ["enum.PowerDeviceVisualLayers.Powered"]
      color: "#ffaaaa"
    - state: inserting
      map: ["enum.MaterialStorageVisualLayers.Inserting"]
      color: "#ffaaaa"
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Machine
    board: BiofabricatorMachineCircuitboard
  - type: MaterialStorage
    ignoreColor: true
    whitelist:
      tags:
        - Sheet
        - RawMaterial
        - SheetPlasma # Goob
  - type: Lathe
    idleState: icon
    runningState: building
    staticPacks:
    - FriendlyCubesStatic
    # Goobstation Packs
    - HumanoidCubesStatic
  - type: EmagLatheRecipes
    emagStaticPacks:
    - HostileCubesStatic
    # Goobstation Packs
    - EmagCubesStatic

- type: entity
  id: SecurityTechFab
  parent: [BaseLatheLube]
  name: security techfab
  description: Prints equipment and circuitboards for use by security crew. #Goobstation - Circuitboards description
  components:
  - type: Sprite
    sprite: Structures/Machines/techfab.rsi
    layers:
    - state: icon
      map: ["enum.LatheVisualLayers.IsRunning"]
    - state: sec
    - state: unlit
      shader: unshaded
      map: ["enum.PowerDeviceVisualLayers.Powered"]
    - state: inserting
      map: ["enum.MaterialStorageVisualLayers.Inserting"]
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Machine
    board: SecurityTechFabCircuitboard
  - type: Lathe
    idleState: icon
    runningState: icon
    staticPacks:
    - SecurityEquipmentStatic
    - SecurityPracticeStatic
    - SecurityAmmoStatic
    - SecurityWeaponsStatic
    # Goobstation
    - SecurityAmmoStaticGoob
    - SecurityEquipmentStaticGoob
    - SecurityHypoStatic
    - MechWeaponsSecurityStatic
    - SecurityBoardsStaticGoob
    - SecurityBoardsStaticGoob
    - PowerCellsStatic
    - ScienceExplosives
    - GrenadeTriggersStatic
    - SecurityWeaponsStaticGoob
    dynamicPacks:
    - SalvageSecurityBoards
    - SalvageSecurityWeapons
    - SecurityEquipment
    - SecurityBoards
    - SecurityExplosives
    - SecurityAmmo
    - SecurityWeapons
    - SecurityDisablers
    # Goobstation
    - SecurityWeaponsGoob
    - RestraintTechnology
    - MechBoardsSecurity
    - MechWeaponsSecurityLight
    - MechWeaponsSecurityHeavy
    - SecurityAmmoGoob
    - SecurityCybernetics
    # - ServiceWeapons
    - SpecOpsGoogles
    - PowerCells
  - type: EmagLatheRecipes
    emagStaticPacks:
    - SyndicateAmmoStatic
    - SyndicateAmmoLightStatic # Goobstation
    - SyndicateAmmoHeavyStatic # Goobstation
  - type: MaterialStorage
    whitelist: *StandardMaterialWhitelist
  - type: OreSiloClient
  - type: LatheAnnouncing
    channels: [Security]

- type: entity
  id: AmmoTechFab
  parent: [BaseLatheLube]
  name: ammo techfab
  description: Prints the bare minimum of bullets that any budget military or armory could need. Nothing fancy.
  components:
    - type: Sprite
      sprite: Structures/Machines/techfab.rsi
      layers:
        - state: icon
          map: ["enum.LatheVisualLayers.IsRunning"]
        - state: ammo
        - state: unlit
          shader: unshaded
          map: ["enum.PowerDeviceVisualLayers.Powered"]
        - state: inserting
          map: ["enum.MaterialStorageVisualLayers.Inserting"]
        - state: panel
          map: ["enum.WiresVisualLayers.MaintenancePanel"]
    - type: Machine
      board: AmmoTechFabCircuitboard
    - type: Lathe
      idleState: icon
      runningState: icon
      staticPacks:
      - SecurityAmmoStatic
      - SecurityAmmoStaticGoob # Gooob
    - type: EmagLatheRecipes
      emagStaticPacks:
      - SyndicateAmmoStatic
      - SyndicateAmmoLightStatic # Goobstation Packs
      - SyndicateAmmoHeavyStatic # Goobstation Packs
    - type: MaterialStorage
      whitelist: *StandardMaterialWhitelist
    - type: OreSiloClient

- type: entity
  id: MedicalTechFab
  parent: [BaseLatheLube] #Goobstation - Circuitboards description
  name: medical techfab
  description: Prints equipment and circuitboards for use by the medbay.
  components:
  - type: Sprite
    sprite: Structures/Machines/techfab.rsi
    layers:
    - state: icon
      map: ["enum.LatheVisualLayers.IsRunning"]
    - state: med
    - state: unlit
      shader: unshaded
      map: ["enum.PowerDeviceVisualLayers.Powered"]
    - state: inserting
      map: ["enum.MaterialStorageVisualLayers.Inserting"]
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Lathe
    idleState: icon
    runningState: icon
    staticPacks:
    - TopicalsStatic
    - ChemistryStatic
    - MedicalStatic
    - RollerBedsStatic
    - MedicalClothingStatic
    - EmptyMedkitsStatic
    - SurgeryStatic
    # Goobstation Packs
    - ParamedHypoStatic
    - MedicalPatchesStatic
    - SurgeryStaticGoob
    - MedicalVehiclesStatic
    - MedicalBoardsStatic
    - MedicalBoardsStaticGoob
    - PowerCellsStatic
    - GrenadeTriggersStatic
    # Einstein Engines Packs
    - SyringeCase
    dynamicPacks:
    - Chemistry
    # Goobstation Packs
    - Surgery
    - MedicalCybernetics
    - EnvirosuitExtinguisherRefill
    - MedicalMisc
    - MedicalMiscRestricted
    - MedicalVehiclesAdvanced
    - MedicalBoards
    - Janitor
    - Genetics
    - MedicalCloning
    # Einstein Engines Packs
    - Translators # Language
    - TranslatorImplanters # Language
  - type: Machine
    board: MedicalTechFabCircuitboard
  - type: EmagLatheRecipes # Goobstation Packs
    emagStaticPacks:
    - SyndicateCatridgesStatic
  - type: StealTarget
    stealGroup: MedicalTechFabCircuitboard
  - type: MaterialStorage
    whitelist: *StandardMaterialWhitelist
  - type: OreSiloClient
  - type: LatheAnnouncing
    channels: [Medical]

- type: entity
  parent: [BaseLatheLube]
  id: UniformPrinter
  name: uniform printer
  description: Prints new or replacement uniforms.
  components:
  - type: Transform
    noRot: false
  - type: Sprite
    sprite: Structures/Machines/uniform_printer.rsi
    snapCardinals: false
    layers:
    - state: icon
      map: ["enum.LatheVisualLayers.IsRunning"]
  - type: Machine
    board: UniformPrinterMachineCircuitboard
  - type: Lathe
    producingSound: /Audio/Machines/uniformprinter.ogg
    idleState: icon
    runningState: building
    staticPacks:
    - TowelsStatic
    - ClothingCivilian
    - ClothingCargo
    - ClothingCommand
    - ClothingEngineering
    - ClothingMedical
    - ClothingScience
    - ClothingSecurity
    - ClothingService
    - WinterCoats
    - Ties
    - Scarves
    - Carpets
    - Bedsheets
    # Goobstation Packs
    - ClothingCasualJumpsuits
    - ClothingCommandSummer
  - type: EmagLatheRecipes
    emagStaticPacks:
    - ClothingCentComm
    - ClothingSyndie
    # Goobstation Packs
    - ClothingDurathreadArmoured
    - ClothingCasualContrabandJumpsuits
  - type: MaterialStorage
    whitelist: *StandardMaterialWhitelist
  - type: OreSiloClient

- type: entity
  id: Biogenerator
  parent: BaseLathe
  name: biogenerator
  description: Converts plants into biomass, which can be used to construct useful items.
  components:
  - type: Sprite
    sprite: Structures/Machines/biofabricator.rsi
    snapCardinals: true
    layers:
    - state: icon
      map: ["enum.LatheVisualLayers.IsRunning"]
    - state: unlit
      shader: unshaded
      map: ["enum.PowerDeviceVisualLayers.Powered"]
    - state: inserting
      map: ["enum.MaterialStorageVisualLayers.Inserting"]
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Machine
    board: BiogeneratorMachineCircuitboard
  - type: MaterialStorage
  - type: ProduceMaterialExtractor
  - type: ItemSlots
    slots:
      beaker_slot:
        name: lathe-component-output-slot-beaker-name
        whitelist:
          components:
          - FitsInDispenser
  - type: ContainerContainer
    containers:
      machine_board: !type:Container
      machine_parts: !type:Container
      beaker_slot: !type:ContainerSlot
  - type: Lathe
    reagentOutputSlotId: beaker_slot
    idleState: icon
    runningState: building
    staticPacks:
    - BioGenIngredientsStatic
    - BioGenMaterialsStatic
  - type: EmagLatheRecipes
    emagStaticPacks:
    - BioGenEmagStatic
    - HostileCubesStatic

- type: entity
  parent: [BaseLathe]
  id: OreProcessor
  name: ore processor
  description: It produces sheets and ingots using ores.
  components:
    - type: Sprite
      sprite: Structures/Machines/ore_processor.rsi
      layers:
        - state: icon
          map: ["enum.LatheVisualLayers.IsRunning"]
        - state: unlit
          shader: unshaded
          map: ["enum.PowerDeviceVisualLayers.Powered"]
        - state: inserting
          map: ["enum.MaterialStorageVisualLayers.Inserting"]
        - state: panel
          map: ["enum.WiresVisualLayers.MaintenancePanel"]
    - type: Machine
      board: OreProcessorMachineCircuitboard
    - type: MaterialStorage
      ignoreMaterialWhiteList: true # Goob edit
      connectToSilo: true # Goob edit
      disconnectSiloOffMap: true # Goob edit
      disallowOreEjection: false # Goob edit
      ignoreColor: true
      whitelist:
        tags:
          - Ore
          - Sheet
          - RawMaterial
          - Ingot
    - type: Lathe
      idleState: icon
      runningState: building
      defaultProductionAmount: 10
      outputToStorage: true # Goob edit
      staticPacks:
      - OreSmelting
      - RGlassSmelting
    - type: MiningPoints # DeltaV - Source of mining points for miners
    - type: MiningPointsLathe # DeltaV
    - type: MaterialStorageMagnetPickup # Frontier
    - type: OreSiloClient

- type: entity
  parent: OreProcessor
  id: OreProcessorIndustrial
  name: industrial ore processor
  description: An ore processor specifically designed for mass-producing metals in industrial applications.
  components:
  - type: Sprite
    sprite: Structures/Machines/ore_processor_industrial.rsi
  - type: Machine
    board: OreProcessorIndustrialMachineCircuitboard
  - type: Lathe
    materialUseMultiplier: 0.75
    timeMultiplier: 0.5
    staticPacks:
    - OreSmelting
    - RGlassSmelting
    - AdvancedSmelting

- type: entity
  parent: BaseLathe
  id: Sheetifier
  name: sheet-meister 2000
  description: A very sheety machine.
  components:
  - type: Sprite
    sprite: Structures/Machines/sheetifier.rsi
    layers:
    - state: base_machine
      map: ["enum.LatheVisualLayers.IsRunning"]
    - state: buttons_on
      shader: unshaded
      map: ["enum.PowerDeviceVisualLayers.Powered"]
  - type: Machine
    board: SheetifierMachineCircuitboard
  - type: MaterialStorage
    dropOnDeconstruct: false #should drop ores instead of ingots/sheets
    ignoreColor: true
    canEjectStoredMaterials: false
    whitelist:
      tags:
      - Raw
      - Wooden
      - Boll
  - type: Lathe
    idleState: base_machine
    runningState: base_machine_processing
    staticPacks:
    - SheetifierStatic

- type: entity
  parent: BaseLathe
  id: CutterMachine
  name: cutter machine
  description: This is a cutter. It cuts. Add variety to your station floor with eye-pleasing patterns! Don't stick your fingers in.
  components:
  - type: Transform
    noRot: false
  - type: Sprite
    sprite: Structures/Machines/cuttermachine.rsi
    snapCardinals: true
    layers:
    - state: icon
      map: ["enum.LatheVisualLayers.IsRunning"]
    - state: unlit
      shader: unshaded
      map: ["enum.PowerDeviceVisualLayers.Powered"]
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Machine
    board: CutterMachineCircuitboard
  - type: Lathe
    producingSound: /Audio/Machines/cutter.ogg
    idleState: icon
    runningState: building
    staticPacks:
    - FloorDarkTilesStatic
    - FloorSteelTilesStatic
    - FloorWhiteTilesStatic
    - FloorMaintsTilesStatic
    - FloorWoodTilesStatic
    - FloorConcreteTilesStatic
    - CircuitFloorsStatic
    - FloorMarbleTilesStatic
    dynamicPacks:
    - FauxTiles
  - type: MaterialStorage
    whitelist: *StandardMaterialWhitelist
  - type: OreSiloClient
