763 Commits over 457 Days - 0.07cph!
New "Blocked by industrial piping" error when building is blocked by an industrial pipe (before it would say blocked by the entity the pipe is connected to, which could be far away)
Phrases
Add UI section in the keybind settings, add clan menu and contacts menu bind options, move crafting menu option to it
Enable clan name tag color accessibility option
merge from automated_testing
Fix military silencer not spawning in loot
When opening the spraycan reskin menu, the currently applied skin object you are looking at is now greyed out, instead of always being accessible and confusing - works with wallpaper too
https://files.facepunch.com/cipeaX/2026/June/17_19-28-ScratchyBass.mp4
Further spraycan refactor progress
Entities restrict whether they are in a valid state for reskinning by overriding CanBeReskinned / CanBeRedirectSwapped
Unified the way the reskin error toasts are sent, added 2 more - getting toasts when a reskin failed is now more consistent vs just not being able to open the menu
Fixed not seeing the amount of seconds you need to wait when trying to reskin a recently damaged entity
Some cleanup, moved BaseEntity.Reskinning to its own file
Add storage adaptor sorting to vending machines, fridges, wall cabinet
They previously didn't support it since they aren't regular storage containers
merge from quarry_speed_fix
Set belt scroll speed multiplier to 0.63 so the speed of the belt visually matches the speed of the other rotating parts
Fix broken materials on the mining quarry top engine with LOD1
merge from vending_purchase_clamping_fix
Another vending machine clamping consistency fix
merge from videoplayer_fix
Fix new mountable tests having the "Deployables" category, breaking deployable tests
Minor cleanup, testlist
merge from sprinting_footsteps_update
merge from player_corpse_no_buoyancy_assigned_fix
merge from bowless_crossbow
merge from parent_projectile_validation_on_default
merge from clothing_mannequin_wearable_fix
merge from vending_purchase_clamping_fix
merge from demo_window_auto_refresh
merge from pool_analyzer_non_caching_methods
The Demos window refreshes automatically when opened so you dont have to press the refresh button every time
Update Rust.CodeAnalyzer - bring back .editorconfig list as a secondary way of marking methods as non caching - fall back to allow tagging unity / third party methods that we can't easily add the attribute to, like GameObject.GetComponentsInChildren<T>(List<T>)
Apply amount clamping in the vending machine purchase UI on value changed instead of end edit to match how it was before the ui refresh
Fix 4 pool leaks that got flagged
Move the attribute to Facepunch.System so it can be used in more places
Apply it to 42 more suitable methods across the project
merge from water_splash_sound_fix
Restore movement sounds reference on the player model
Fixes water impact splash sounds not playing
merge from spraycan_reskin_refactor
Fix an edge case of errors when reskinning snowmobiles after they were saveloaded
Child entity (fuel tank, storage) spawn order can vary after a server restart, causing a mismatch when trying to restore inventories using the child indices - add fallback to match by just prefab id
For extra safety add more logging, and a fallback for the fallback - should anything go wrong with restoring containers, drop any leftover items instead of leaking them
merge from vending_mapmarker_pooling_fix
Fix a vending machine map marker pooling bug that causes markers to appear in wrong locations on the map when some are merged into clusters
Enable RW on all meshes currently used for collision in the apartments monument
merge from mfm2 (merge from main)
More manual fixes after merge
merge from main
manually resolve Elevator and VendingMachine conflicts