diff --git a/Content.Server/GameObjects/Components/Botany/PlantHolderComponent.cs b/Content.Server/GameObjects/Components/Botany/PlantHolderComponent.cs index 6d481b80ed..ec9fa8b951 100644 --- a/Content.Server/GameObjects/Components/Botany/PlantHolderComponent.cs +++ b/Content.Server/GameObjects/Components/Botany/PlantHolderComponent.cs @@ -639,6 +639,13 @@ namespace Content.Server.GameObjects.Components.Botany Seed = Seed.Diverge(modified); } + private void ForceUpdateByExternalCause() + { + SkipAging++; // We're forcing an update cycle, so one age hasn't passed. + ForceUpdate = true; + Update(); + } + public async Task InteractUsing(InteractUsingEventArgs eventArgs) { var user = eventArgs.User; @@ -695,6 +702,22 @@ namespace Content.Server.GameObjects.Components.Botany return true; } + if (usingItem.HasComponent()) + { + if (Seed != null) + { + user.PopupMessageCursor(Loc.GetString("You remove the plant from the {0}.", Owner.Name)); + user.PopupMessageOtherClients(Loc.GetString("{0} removes the plant.", user.Name)); + RemovePlant(); + } + else + { + user.PopupMessageCursor(Loc.GetString("There is no plant to remove.")); + } + + return true; + } + if (usingItem.TryGetComponent(out SolutionContainerComponent? solution) && solution.CanRemoveSolutions) { var amount = 5f; @@ -715,9 +738,7 @@ namespace Content.Server.GameObjects.Components.Botany _solutionContainer?.TryAddSolution(split); - SkipAging++; // We're forcing an update cycle, so one age hasn't passed. - ForceUpdate = true; - Update(); + ForceUpdateByExternalCause(); return true; } @@ -752,9 +773,7 @@ namespace Content.Server.GameObjects.Components.Botany // Just in case. CheckLevelSanity(); - SkipAging++; // We're forcing an update cycle, so one age hasn't passed. - ForceUpdate = true; - Update(); + ForceUpdateByExternalCause(); return true; } @@ -764,6 +783,24 @@ namespace Content.Server.GameObjects.Components.Botany return DoHarvest(user); } + if (usingItem.HasComponent()) + { + user.PopupMessageCursor(Loc.GetString("You compost {1:theName} into {0:theName}.", Owner, usingItem)); + user.PopupMessageOtherClients(Loc.GetString("{0:TheName} composts {1:theName} into {2:theName}.", user, usingItem, Owner)); + + if (usingItem.TryGetComponent(out SolutionContainerComponent? solution2)) + { + // This deliberately discards overfill. + _solutionContainer?.TryAddSolution(solution2.SplitSolution(solution2.Solution.TotalVolume)); + + ForceUpdateByExternalCause(); + } + + usingItem.Delete(); + + return true; + } + return false; } diff --git a/Content.Server/GameObjects/Components/Botany/ShovelComponent.cs b/Content.Server/GameObjects/Components/Botany/ShovelComponent.cs new file mode 100644 index 0000000000..be6afbb8a1 --- /dev/null +++ b/Content.Server/GameObjects/Components/Botany/ShovelComponent.cs @@ -0,0 +1,11 @@ +#nullable enable +using Robust.Shared.GameObjects; + +namespace Content.Server.GameObjects.Components.Botany +{ + [RegisterComponent] + public class ShovelComponent : Component + { + public override string Name => "Shovel"; + } +} diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index 6ec3a2cf13..a97f8ac388 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -48835,4 +48835,18 @@ entities: type: PowerConsumer - supplyRate: 6000 type: PowerSupplier +- uid: 4717 + type: Spade + components: + - parent: 853 + pos: -20.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 4718 + type: Bucket + components: + - parent: 853 + pos: -20.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform ... diff --git a/Resources/Prototypes/Catalog/LatheRecipes/botany.yml b/Resources/Prototypes/Catalog/LatheRecipes/botany.yml index 57d7115d1c..d011c676da 100644 --- a/Resources/Prototypes/Catalog/LatheRecipes/botany.yml +++ b/Resources/Prototypes/Catalog/LatheRecipes/botany.yml @@ -30,3 +30,26 @@ materials: steel: 60 glass: 10 + +- type: latheRecipe + id: Shovel + icon: + sprite: Constructible/Hydroponics/hydro_tools.rsi + state: shovel + result: Shovel + completetime: 500 + materials: + steel: 60 + glass: 10 + +- type: latheRecipe + id: Spade + icon: + sprite: Constructible/Hydroponics/hydro_tools.rsi + state: spade + result: Spade + completetime: 500 + materials: + steel: 30 + glass: 10 + diff --git a/Resources/Prototypes/Entities/Constructible/Power/lathe.yml b/Resources/Prototypes/Entities/Constructible/Power/lathe.yml index 16c48e451f..9bfa935619 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/lathe.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/lathe.yml @@ -77,6 +77,11 @@ - CableStack - Crowbar - Multitool + - MiniHoe + - Scythe + - Hatchet + - Shovel + - Spade - type: Appearance visuals: - type: AutolatheVisualizer diff --git a/Resources/Prototypes/Entities/Objects/Tools/botany_tools.yml b/Resources/Prototypes/Entities/Objects/Tools/botany_tools.yml index b4dceedbf2..1d1025be6e 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/botany_tools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/botany_tools.yml @@ -98,3 +98,32 @@ - type: MeleeWeapon - type: BotanySharp - type: Item + +- type: entity + name: spade + parent: BaseItem + id: Spade + description: A small tool for digging and moving dirt. + components: + - type: Sprite + sprite: Constructible/Hydroponics/hydro_tools.rsi + state: spade + - type: ItemCooldown + - type: MeleeWeapon + - type: Shovel + - type: Item + +- type: entity + name: shovel + parent: BaseItem + id: Shovel + description: A large tool for digging and moving dirt. + components: + - type: Sprite + sprite: Constructible/Hydroponics/hydro_tools.rsi + state: shovel + - type: ItemCooldown + - type: MeleeWeapon + - type: Shovel + - type: Item + diff --git a/Resources/Textures/Constructible/Hydroponics/hydro_tools.rsi/meta.json b/Resources/Textures/Constructible/Hydroponics/hydro_tools.rsi/meta.json index 7c0496334f..8fd6d66a8e 100644 --- a/Resources/Textures/Constructible/Hydroponics/hydro_tools.rsi/meta.json +++ b/Resources/Textures/Constructible/Hydroponics/hydro_tools.rsi/meta.json @@ -1 +1 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA 3.0", "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 1dbcf389b0ec6b2c51b002df5fef8dd1519f8068", "states": [{"name": "claypot", "delays": [[1.0]]}, {"name": "claypot-item", "delays": [[1.0]]}, {"name": "claypot-large", "delays": [[1.0]]}, {"name": "cyan", "delays": [[1.0]]}, {"name": "cyan black stripe", "delays": [[1.0]]}, {"name": "cyan blue stripe", "delays": [[1.0]]}, {"name": "cyan lime stripe", "delays": [[1.0]]}, {"name": "cyan purple stripe", "delays": [[1.0]]}, {"name": "cyan red stripe", "delays": [[1.0]]}, {"name": "cyan white stripe", "delays": [[1.0]]}, {"name": "cyan yellow stripe", "delays": [[1.0]]}, {"name": "deathspray", "delays": [[1.0]]}, {"name": "disk", "delays": [[0.1, 0.1, 0.1]]}, {"name": "green black stripe", "delays": [[1.0]]}, {"name": "green blue stripe", "delays": [[1.0]]}, {"name": "green lime stripe", "delays": [[1.0]]}, {"name": "green purple stripe", "delays": [[1.0]]}, {"name": "green red stripe", "delays": [[1.0]]}, {"name": "green white stripe", "delays": [[1.0]]}, {"name": "green yellow stripe", "delays": [[1.0]]}, {"name": "hydrocover", "delays": [[1.0]]}, {"name": "hydrotray", "delays": [[1.0]]}, {"name": "hydrotray2", "delays": [[1.0]]}, {"name": "hydrotray3", "delays": [[1.0]]}, {"name": "moldcreep0", "delays": [[1.0]]}, {"name": "moldcreep1", "delays": [[1.0]]}, {"name": "moldcreep2", "delays": [[1.0]]}, {"name": "nolabelspray", "delays": [[1.0]]}, {"name": "over_alert3", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "over_harvest3", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "over_lowhealth3", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "over_lownutri", "delays": [[1.0]]}, {"name": "over_lownutri3", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "over_lowwater3", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "pestspray", "delays": [[1.0]]}, {"name": "plantbag", "delays": [[1.0]]}, {"name": "plantbgone", "delays": [[1.0]]}, {"name": "portaseeder", "delays": [[1.0]]}, {"name": "seedbag", "delays": [[1.0]]}, {"name": "sextractor", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "soil", "delays": [[1.0]]}, {"name": "spaceworms", "delays": [[0.4, 0.4, 0.4, 0.4]]}, {"name": "spawner", "delays": [[1.0]]}, {"name": "sprayparts", "delays": [[1.0]]}, {"name": "traitcopier", "delays": [[1.0]]}, {"name": "traitgun", "delays": [[1.0]]}, {"name": "traitscanner", "delays": [[1.0]]}, {"name": "vine_flowers", "delays": [[1.0]]}, {"name": "vine_fruit", "delays": [[1.0]]}, {"name": "weedspray", "delays": [[1.0]]}, {"name": "scythe", "delays": [[1.0]]}, {"name": "hoe", "delays": [[1.0]]}, {"name": "hatchet", "delays": [[1.0]]}]} +{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA 3.0", "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 1dbcf389b0ec6b2c51b002df5fef8dd1519f8068", "states": [{"name": "claypot", "delays": [[1.0]]}, {"name": "claypot-item", "delays": [[1.0]]}, {"name": "claypot-large", "delays": [[1.0]]}, {"name": "cyan", "delays": [[1.0]]}, {"name": "cyan black stripe", "delays": [[1.0]]}, {"name": "cyan blue stripe", "delays": [[1.0]]}, {"name": "cyan lime stripe", "delays": [[1.0]]}, {"name": "cyan purple stripe", "delays": [[1.0]]}, {"name": "cyan red stripe", "delays": [[1.0]]}, {"name": "cyan white stripe", "delays": [[1.0]]}, {"name": "cyan yellow stripe", "delays": [[1.0]]}, {"name": "deathspray", "delays": [[1.0]]}, {"name": "disk", "delays": [[0.1, 0.1, 0.1]]}, {"name": "green black stripe", "delays": [[1.0]]}, {"name": "green blue stripe", "delays": [[1.0]]}, {"name": "green lime stripe", "delays": [[1.0]]}, {"name": "green purple stripe", "delays": [[1.0]]}, {"name": "green red stripe", "delays": [[1.0]]}, {"name": "green white stripe", "delays": [[1.0]]}, {"name": "green yellow stripe", "delays": [[1.0]]}, {"name": "hydrocover", "delays": [[1.0]]}, {"name": "hydrotray", "delays": [[1.0]]}, {"name": "hydrotray2", "delays": [[1.0]]}, {"name": "hydrotray3", "delays": [[1.0]]}, {"name": "moldcreep0", "delays": [[1.0]]}, {"name": "moldcreep1", "delays": [[1.0]]}, {"name": "moldcreep2", "delays": [[1.0]]}, {"name": "nolabelspray", "delays": [[1.0]]}, {"name": "over_alert3", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "over_harvest3", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "over_lowhealth3", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "over_lownutri", "delays": [[1.0]]}, {"name": "over_lownutri3", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "over_lowwater3", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "pestspray", "delays": [[1.0]]}, {"name": "plantbag", "delays": [[1.0]]}, {"name": "plantbgone", "delays": [[1.0]]}, {"name": "portaseeder", "delays": [[1.0]]}, {"name": "seedbag", "delays": [[1.0]]}, {"name": "sextractor", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "soil", "delays": [[1.0]]}, {"name": "spaceworms", "delays": [[0.4, 0.4, 0.4, 0.4]]}, {"name": "spawner", "delays": [[1.0]]}, {"name": "sprayparts", "delays": [[1.0]]}, {"name": "traitcopier", "delays": [[1.0]]}, {"name": "traitgun", "delays": [[1.0]]}, {"name": "traitscanner", "delays": [[1.0]]}, {"name": "vine_flowers", "delays": [[1.0]]}, {"name": "vine_fruit", "delays": [[1.0]]}, {"name": "weedspray", "delays": [[1.0]]}, {"name": "scythe", "delays": [[1.0]]}, {"name": "hoe", "delays": [[1.0]]}, {"name": "hatchet", "delays": [[1.0]]}, {"name": "shovel", "delays": [[1.0]]}, {"name": "spade", "delays": [[1.0]]}]} diff --git a/Resources/Textures/Constructible/Hydroponics/hydro_tools.rsi/shovel.png b/Resources/Textures/Constructible/Hydroponics/hydro_tools.rsi/shovel.png new file mode 100644 index 0000000000..c7eed38171 Binary files /dev/null and b/Resources/Textures/Constructible/Hydroponics/hydro_tools.rsi/shovel.png differ diff --git a/Resources/Textures/Constructible/Hydroponics/hydro_tools.rsi/spade.png b/Resources/Textures/Constructible/Hydroponics/hydro_tools.rsi/spade.png new file mode 100644 index 0000000000..d76bc3de57 Binary files /dev/null and b/Resources/Textures/Constructible/Hydroponics/hydro_tools.rsi/spade.png differ