branchrust_reboot/main/spraycan_reskin_refactorcancel
19 Commits over 31 Days - 0.03cph!
Fixed not being able to reskin large furnace while there's storage adaptors attached
Fixed reskinning regular furnace <-> legacy furnace not preserving attached storage adaptor
Fix electric furnace reskin not preserving attached storage adaptors
Re-enable PreserveChildrenWhenReskinning but manually kill the child io entity so it gets recreated
Fix a IOEntity.Reskin_Restore NRE when reskinning to paintable window
Minor cleanup
Move CanBuild check further down
Fix spray fail response logging to console of the whole net group
Remove rundant codelock parent field
Disallow reskinning turrets if not authed
Disallow reskinning Busy doors
Prevent potential error when reskinning io with mismatched slot counts
Improved way to reposition socketed child entities when reskinning - look for the matching female socket on the new entity with the same name, fall back to the closest if needed
Fixes door controller attached to an high external gate swapping sides when reskinned
Add StringEx.EqualsAfterLastSeparator
Refactored the entire method / file now that reskinning is feature complete and all on the new system
Clear steps, organized validation logic, comments, ripped out redundant stuff, etc.
Allow reskinning while noclip flying
Add computer station reskinning
Now preserves all the saved cctv codes and wire stays connected to the sub io entity, snapping to the new handle position
Fix an NRE when trying to control drones on playground
merge from mfm (merge from main)
Add autoturret reskinning
Preserves loaded ammo, authlist, rc identifier and peacekeeper setting
Implement IO entity reskinning with the new system, will now always nicely adjust any connected wires / pipes to the new positions:
https://files.facepunch.com/cipeaX/2026/May/21_01-08-RightBighorn.mp4
Fix a bug causing io lines to not update correctly when multiple storage adaptors on the same barrel have connections between themselves
Integrate item container and child item container preserving into the new system
Re-implement entity children preserving, with attachments repositioning if their sockets shifted, child io entity also have their connected lines update correctly
Fixes various current bugs with storage adaptors / door controllers when their parent is reskinned
Make ceilinglight reskinnable again, will fix reskinning io entities themselves next
Fix not being able to skin snowmobile back to default
Improve the building of the PreserveInfo
Initial wip on an attempt to refactor the beast that is SprayCan.ChangeItemSkin
The idea is that entities handle things they need to persist through reskinning themselves via Preserve and Restore methods