diff --git a/Content.Server/Chemistry/ReagentEffects/WearableReaction.cs b/Content.Server/Chemistry/ReagentEffects/WearableReaction.cs
new file mode 100644
index 0000000000..d9f8414995
--- /dev/null
+++ b/Content.Server/Chemistry/ReagentEffects/WearableReaction.cs
@@ -0,0 +1,42 @@
+using Content.Shared.Inventory;
+using Content.Shared.Chemistry.Reagent;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server.Chemistry.ReagentEffects;
+
+///
+/// A reaction effect that consumes the required amount of reagent and spawns PrototypeID in the
+/// entity's Slot. Used to implement the water droplet effect for arachnids.
+///
+public sealed partial class WearableReaction : ReagentEffect
+{
+ ///
+ /// Minimum quantity of reagent required to trigger this effect.
+ ///
+ [DataField]
+ public float AmountThreshold = 1f;
+
+ ///
+ /// Slot to spawn the item into.
+ ///
+ [DataField(required: true)]
+ public string Slot;
+
+ ///
+ /// Prototype ID of item to spawn.
+ ///
+ [DataField(required: true)]
+ public string PrototypeID;
+
+ protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => null;
+
+ public override void Effect(ReagentEffectArgs args)
+ {
+ if (args.Reagent == null || args.Quantity < AmountThreshold)
+ return;
+
+ // SpawnItemInSlot returns false if slot is already occupied
+ if (args.EntityManager.System().SpawnItemInSlot(args.SolutionEntity, Slot, PrototypeID))
+ args.Source?.RemoveReagent(args.Reagent.ID, AmountThreshold);
+ }
+}
diff --git a/Resources/Prototypes/Entities/Clothing/Head/misc.yml b/Resources/Prototypes/Entities/Clothing/Head/misc.yml
index 7b93e83cd9..9826da57b7 100644
--- a/Resources/Prototypes/Entities/Clothing/Head/misc.yml
+++ b/Resources/Prototypes/Entities/Clothing/Head/misc.yml
@@ -224,3 +224,61 @@
sprite: Clothing/Head/Misc/red_racoon.rsi
- type: Clothing
sprite: Clothing/Head/Misc/red_racoon.rsi
+
+- type: entity
+ parent: Clothing
+ id: WaterDropletHat
+ name: water droplet
+ description: Makes 8-eyed friends 8 times more adorable!
+ components:
+ - type: Sprite
+ sprite: Clothing/Head/Misc/waterdroplet.rsi
+ state: icon
+ - type: Item
+ sprite: Clothing/Head/Misc/waterdroplet.rsi
+ size: Tiny
+ storedRotation: -90
+ - type: Clothing
+ slots:
+ - HEAD
+ - type: Food
+ solution: drink
+ useSound: /Audio/Items/drink.ogg
+ eatMessage: drink-component-try-use-drink-success-slurp
+ delay: 0.5
+ forceFeedDelay: 1.5
+ - type: FlavorProfile
+ flavors:
+ - water
+ - type: SolutionContainerManager
+ solutions:
+ drink:
+ maxVol: 2
+ reagents:
+ - ReagentId: Water
+ Quantity: 2
+ - type: DamageOnHighSpeedImpact
+ minimumSpeed: 0.1
+ damage:
+ types:
+ Blunt: 1
+ - type: Damageable
+ damageContainer: Biological
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 1
+ behaviors:
+ - !type:PlaySoundBehavior
+ sound:
+ collection: desecration
+ - !type:SpillBehavior
+ solution: drink
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - type: Tag
+ tags:
+ - WhitelistChameleon
+ - type: StaticPrice
+ price: 1
diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml
index b49029f791..703345dae2 100644
--- a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml
+++ b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml
@@ -34,6 +34,14 @@
amount: 5
- type: Inventory
templateId: arachnid
+ - type: Reactive
+ reactions:
+ - reagents: [Water]
+ methods: [Touch]
+ effects:
+ - !type:WearableReaction
+ slot: head
+ prototypeID: WaterDropletHat
# Damage (Self)
- type: Bloodstream
bloodReagent: CopperBlood
diff --git a/Resources/Textures/Clothing/Head/Misc/waterdroplet.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Misc/waterdroplet.rsi/equipped-HELMET.png
new file mode 100644
index 0000000000..9759d202a2
Binary files /dev/null and b/Resources/Textures/Clothing/Head/Misc/waterdroplet.rsi/equipped-HELMET.png differ
diff --git a/Resources/Textures/Clothing/Head/Misc/waterdroplet.rsi/icon.png b/Resources/Textures/Clothing/Head/Misc/waterdroplet.rsi/icon.png
new file mode 100644
index 0000000000..964a74ec9e
Binary files /dev/null and b/Resources/Textures/Clothing/Head/Misc/waterdroplet.rsi/icon.png differ
diff --git a/Resources/Textures/Clothing/Head/Misc/waterdroplet.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Misc/waterdroplet.rsi/inhand-left.png
new file mode 100644
index 0000000000..eb7f81e9bc
Binary files /dev/null and b/Resources/Textures/Clothing/Head/Misc/waterdroplet.rsi/inhand-left.png differ
diff --git a/Resources/Textures/Clothing/Head/Misc/waterdroplet.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Misc/waterdroplet.rsi/inhand-right.png
new file mode 100644
index 0000000000..bab564c5fe
Binary files /dev/null and b/Resources/Textures/Clothing/Head/Misc/waterdroplet.rsi/inhand-right.png differ
diff --git a/Resources/Textures/Clothing/Head/Misc/waterdroplet.rsi/meta.json b/Resources/Textures/Clothing/Head/Misc/waterdroplet.rsi/meta.json
new file mode 100644
index 0000000000..77d5e14760
--- /dev/null
+++ b/Resources/Textures/Clothing/Head/Misc/waterdroplet.rsi/meta.json
@@ -0,0 +1,26 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by SlamBamActionman",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-HELMET",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}