PaintSaver ($20)

Paid PaintSaver ($20) V1

This resource is paid, and requires to be purchased
PaintSaver Plugin Description

Features

PaintSaver is a player paint-profile plugin that lets players save color layouts from their gear and automatically reapply those saved paint schemes later. It supports individual items, equipped gear, or whole sets, along with profile management, auto-apply behavior, and group-based profile limits.

  • Paint profile system – players can create and manage named paint profiles
  • Save held item paint – save the paint layout from the currently held item into a profile
  • Save equipped item paint – save paint from equipped gear into a profile
  • Save full set paint – save a combined set of supported painted items from equipped, inventory, and hotbar items
  • Remove saved entries – remove held, equipped, or set-based saved entries from a profile
  • Load / unload profiles – choose which profile is active for applying paint
  • Auto-apply system – automatically reapplies saved paint layouts when conditions are met
  • Apply on equip/login/respawn – supports automatic paint reapplication during normal gameplay events
  • Item matching rules – matches saved entries back onto later items using configurable class-based matching rules
  • Duplicate handling – supports overwrite and deduplication rules for saved entries
  • Group-based limits – different permission groups can have different profile counts and saved-item slot limits
  • Admin management commands – admins can inspect, clear, load, unload, delete, and toggle auto-apply for other players
  • Optional database storage – supports persistent storage with MySQL

What It Does

PaintSaver lets players build reusable paint presets from their actual painted gear.

A player can:
  • create a profile
  • save a painted held item into that profile
  • save equipped items into that profile
  • save an entire supported item set into that profile
  • load that profile as their active one

Once a profile is active, the plugin can automatically reapply the saved paint layout to matching supported items when the player equips items, logs in, or respawns.

This makes it possible to keep consistent paint schemes across gear without manually repainting every item each time.

Supported Behavior

The plugin is built around paint-region saving and reapplication.

It stores:
  • per-region color values
  • which paint regions are actually used
  • item identity information for matching later items back to the saved paint entry

It can be configured to:
  • require that an item is already painted before it can be saved
  • reject empty-region saves
  • save only supported/valid paint regions
  • overwrite an existing saved entry for the same item
  • reject or deduplicate oversized set saves
  • skip reapplying paint if an item already matches the saved profile
  • force overwrite existing colors when applying

Item Scope Control

PaintSaver can be limited to specific item categories.

The included configuration supports control over:
  • armor
  • weapons
  • shields
  • saddles
  • tools
  • skins
  • costumes

It also supports whitelist and blacklist filters so only specific classes, or classes containing certain text, are eligible.

Profile / Limit System

Players can have different limits depending on their permission group.

The provided setup includes group-based limits such as:
  • Default
  • VIP
  • Elite
  • Admin

These limits can control:
  • max number of profiles
  • max saved item slots per profile

It also supports:
  • one active profile at a time
  • optional case-sensitive or case-insensitive profile naming
  • optional profile overwrite behavior
  • optional profile rename behavior
  • automatic deactivation of the previous profile when another is loaded

Auto-Apply Behavior

When enabled, PaintSaver can automatically apply the active profile:

  • on equip
  • on login
  • on respawn

The auto-apply system also supports:
  • delay before applying
  • cooldown per item
  • equipped-only application mode
  • requiring an active profile before auto-apply runs
  • optional auto-enable behavior when a profile is loaded

Commands

Player commands include:
  • create profile
  • delete profile
  • rename profile
  • list profiles
  • show profile info
  • load profile
  • unload profile
  • save held item
  • save equipped items
  • save a full set
  • remove held item
  • remove equipped items
  • remove a full set
  • check auto-paint status
  • turn auto-paint on or off

Admin commands include:
  • paintsaver.reload
  • inspect a player
  • list a player's profiles
  • clear a player's data
  • delete a player profile
  • load or unload a player profile
  • enable or disable auto-paint for a player

Config

JSON:
{
  "LicenseKey": "PUT-YOUR-LICENSE-KEY-HERE",
  "_LicenseKey": "Your license key used for API authorization. PaintSaver will not load if this is missing or still set to the placeholder value."

  "General": {
    "Enabled": true,
    "_Enabled": "Master plugin toggle.",
    "Debug": false,
    "_Debug": "Writes extra PaintSaver log output to help debug issues.",
    "HighestGroupWins": true,
    "_HighestGroupWins": "If a player matches multiple groups, use the group with the highest limits.",
    "OneActiveProfileOnly": true,
    "_OneActiveProfileOnly": "Only one profile may be active at a time.",
    "ProfileNameCaseSensitive": false,
    "_ProfileNameCaseSensitive": "If false, profile name comparisons ignore case.",
    "AllowProfileOverwrite": true,
    "_AllowProfileOverwrite": "Allows replacing an existing profile name during create/rename flows.",
    "PluginName": "PaintSaver",
    "_PluginName": "Sent to the auth API.",
    "PluginVersion": "1.0.0",
    "_PluginVersion": "Sent to the auth API.",
    "LicenseKey": "PUT-YOUR-LICENSE-KEY-HERE",
    "_LicenseKey": "Your license key used for API authorization. PaintSaver will not load if this is missing or still set to the placeholder value."
  },

  "Commands": {
    "PlayerCommand": "paint",
    "_PlayerCommand": "Chat command root for player commands. Example: /paint",
    "AdminCommand": "paintadmin",
    "_AdminCommand": "Chat command root for admin commands. Example: /paintadmin",
    "ReloadConsoleCommand": "PaintSaver.Reload",
    "_ReloadConsoleCommand": "Console and RCON command used to reload PaintSaver."
  },

  "AutoApply": {
    "Enabled": true,
    "_Enabled": "Master toggle for all auto-apply behavior.",
    "ApplyOnEquip": true,
    "_ApplyOnEquip": "Attempts to apply the active profile when an item is equipped.",
    "ApplyOnLogin": true,
    "_ApplyOnLogin": "Attempts to apply the active profile after login.",
    "ApplyOnRespawn": true,
    "_ApplyOnRespawn": "Attempts to apply the active profile after respawn/possess.",
    "ApplyDelaySeconds": 0.5,
    "_ApplyDelaySeconds": "Delay used before apply attempts when needed.",
    "RequireActiveProfile": true,
    "_RequireActiveProfile": "Auto-apply only runs if the player has an active profile selected.",
    "OnlyApplyToEquippedItems": true,
    "_OnlyApplyToEquippedItems": "Auto-apply only affects equipped items.",
    "ForceOverwriteExistingColors": true,
    "_ForceOverwriteExistingColors": "If true, saved colors replace whatever is already on the item.",
    "SkipIfItemAlreadyMatchesProfile": true,
    "_SkipIfItemAlreadyMatchesProfile": "Skips an apply if the item already has the same saved colors.",
    "CooldownSecondsPerItem": 1.0,
    "_CooldownSecondsPerItem": "Cooldown between repeated apply attempts on the same item.",
    "LoadingProfileEnablesAutoApply": false,
    "_LoadingProfileEnablesAutoApply": "If true, loading a profile automatically turns auto-paint on."
  },

  "Saving": {
    "RequireItemToBePainted": true,
    "_RequireItemToBePainted": "Only allows saving items that already have painted/color data.",
    "OverwriteExistingEntryInProfile": true,
    "_OverwriteExistingEntryInProfile": "Saving the same item class again updates the existing slot instead of failing.",
    "AllowEmptyRegionSave": false,
    "_AllowEmptyRegionSave": "Allows saving entries even if no paint regions are used.",
    "SaveOnlySupportedRegions": true,
    "_SaveOnlySupportedRegions": "Only stores valid supported paint regions.",
    "AllowSaveItem": true,
    "_AllowSaveItem": "Enables /paint saveitem <profile>.",
    "AllowSaveEquipped": true,
    "_AllowSaveEquipped": "Enables /paint saveequipped <profile>.",
    "AllowSaveSet": true,
    "_AllowSaveSet": "Enables /paint saveset <profile>.",
    "SaveSetIncludesEquippedItems": true,
    "_SaveSetIncludesEquippedItems": "saveset scans equipped items.",
    "SaveSetIncludesInventoryItems": true,
    "_SaveSetIncludesInventoryItems": "saveset scans inventory items.",
    "SaveSetIncludesHotbarItems": true,
    "_SaveSetIncludesHotbarItems": "saveset scans hotbar items.",
    "RejectSaveSetIfNotEnoughSlots": true,
    "_RejectSaveSetIfNotEnoughSlots": "If the profile does not have enough free slots, saveset fails instead of partially saving.",
    "DeduplicateByItemClass": true,
    "_DeduplicateByItemClass": "Only one saved entry per item class is counted during saveset."
  },

  "Scopes": {
    "Armor": true,
    "_Armor": "Allow armor items.",
    "Weapons": true,
    "_Weapons": "Allow weapon items.",
    "Shields": true,
    "_Shields": "Allow shield items.",
    "Saddles": false,
    "_Saddles": "Allow saddle items.",
    "Tools": false,
    "_Tools": "Allow tool items.",
    "Skins": true,
    "_Skins": "Allow skin items if they behave like paintable items.",
    "Costumes": true,
    "_Costumes": "Allow costume items if they behave like paintable items."
  },

  "Limits": {
    "DefaultMaxProfiles": 1,
    "_DefaultMaxProfiles": "Fallback max profile count if no configured group matches.",
    "DefaultMaxItemSlotsPerProfile": 5,
    "_DefaultMaxItemSlotsPerProfile": "Fallback number of saved item slots allowed inside each profile.",
    "DefaultMaxProfileNameLength": 24,
    "_DefaultMaxProfileNameLength": "Maximum allowed profile name length."
  },

  "GroupLimits": [
    {
      "Group": "Default",
      "_Group": "Permissions group name to check.",
      "MaxProfiles": 1,
      "_MaxProfiles": "How many profiles players in this group can have.",
      "MaxItemSlotsPerProfile": 5,
      "_MaxItemSlotsPerProfile": "How many saved items can exist inside one profile."
    },
    {
      "Group": "VIP",
      "_Group": "Permissions group name to check.",
      "MaxProfiles": 2,
      "_MaxProfiles": "How many profiles players in this group can have.",
      "MaxItemSlotsPerProfile": 10,
      "_MaxItemSlotsPerProfile": "How many saved items can exist inside one profile."
    },
    {
      "Group": "Elite",
      "_Group": "Permissions group name to check.",
      "MaxProfiles": 5,
      "_MaxProfiles": "How many profiles players in this group can have.",
      "MaxItemSlotsPerProfile": 25,
      "_MaxItemSlotsPerProfile": "How many saved items can exist inside one profile."
    },
    {
      "Group": "Admin",
      "_Group": "Permissions group name to check.",
      "MaxProfiles": -1,
      "_MaxProfiles": "-1 means unlimited.",
      "MaxItemSlotsPerProfile": -1,
      "_MaxItemSlotsPerProfile": "-1 means unlimited."
    }
  ],

  "Matching": {
    "MatchByExactItemClass": true,
    "_MatchByExactItemClass": "Saved entries match by exact item class.",
    "AllowParentClassMatch": false,
    "_AllowParentClassMatch": "Reserved for broader matching later.",
    "IgnoreItemQuality": true,
    "_IgnoreItemQuality": "Saved paint ignores quality differences.",
    "IgnoreDurability": true,
    "_IgnoreDurability": "Saved paint ignores durability differences.",
    "IgnoreCustomName": true,
    "_IgnoreCustomName": "Saved paint ignores custom item names.",
    "IgnoreItemRating": true,
    "_IgnoreItemRating": "Saved paint ignores item rating differences.",
    "IgnoreStatValues": true,
    "_IgnoreStatValues": "Saved paint ignores stat roll differences."
  },

  "Whitelist": {
    "Enabled": false,
    "_Enabled": "If true, items must match the whitelist to be supported.",
    "ItemClasses": [],
    "_ItemClasses": "Exact item class names allowed.",
    "ClassNameContains": [],
    "_ClassNameContains": "Partial class-name matches allowed."
  },

  "Blacklist": {
    "Enabled": false,
    "_Enabled": "If true, any blacklist match blocks the item even if it would otherwise be supported.",
    "ItemClasses": [],
    "_ItemClasses": "Exact item class names blocked.",
    "ClassNameContains": [],
    "_ClassNameContains": "Partial class-name matches blocked."
  },

  "RegionHandling": {
    "MaxRegionsPerItem": 6,
    "_MaxRegionsPerItem": "Maximum number of paint regions read/written per item.",
    "UnsetRegionValue": -1,
    "_UnsetRegionValue": "Value used for an unset paint region.",
    "SkipUnsetRegionsOnApply": true,
    "_SkipUnsetRegionsOnApply": "Skips unset regions when applying paint.",
    "ValidateRegionBounds": true,
    "_ValidateRegionBounds": "Validates region indexes before applying."
  },

  "Profiles": {
    "AutoDeactivatePreviousProfileOnLoad": true,
    "_AutoDeactivatePreviousProfileOnLoad": "Loading a new profile clears the previous active profile.",
    "DeleteProfileAlsoDeletesSavedEntries": true,
    "_DeleteProfileAlsoDeletesSavedEntries": "Deleting a profile also deletes its saved item slots.",
    "AllowRenameProfile": true,
    "_AllowRenameProfile": "Enables profile rename support.",
    "AllowDuplicateItemClassInDifferentProfiles": true,
    "_AllowDuplicateItemClassInDifferentProfiles": "The same item class may be saved in multiple profiles.",
    "AllowDuplicateItemClassInSameProfile": false,
    "_AllowDuplicateItemClassInSameProfile": "The same item class may not consume multiple slots inside the same profile."
  },

  "Storage": {
    "UseMysql": true,
    "_UseMysql": "Enables MySQL-backed profile storage.",
    "MysqlUseSSL": false,
    "_MysqlUseSSL": "Reserved for future SSL handling.",
    "MysqlHost": "",
    "_MysqlHost": "MySQL host.",
    "MysqlUser": "",
    "_MysqlUser": "MySQL username.",
    "MysqlPass": "",
    "_MysqlPass": "MySQL password.",
    "MysqlDB": "",
    "_MysqlDB": "MySQL database name.",
    "MysqlPort": 3306,
    "_MysqlPort": "MySQL port."
  },

  "Messages": {
    "Prefix": "[PaintSaver]",
    "_Prefix": "Chat prefix used by PaintSaver messages.",
    "NoPermission": "You do not have permission.",
    "_NoPermission": "Shown when a player lacks permission.",
    "ProfileCreated": "Profile '{name}' created.",
    "_ProfileCreated": "Shown after profile creation.",
    "ProfileDeleted": "Profile '{name}' deleted.",
    "_ProfileDeleted": "Shown after profile deletion.",
    "ProfileLoaded": "Profile '{name}' loaded.",
    "_ProfileLoaded": "Shown after loading a profile.",
    "ProfileUnloaded": "Profile unloaded.",
    "_ProfileUnloaded": "Shown after unloading the active profile.",
    "ProfileLimitReached": "You reached profile limit.",
    "_ProfileLimitReached": "Shown when a player cannot create more profiles.",
    "ItemSaved": "Saved item to profile.",
    "_ItemSaved": "Shown when an item save succeeds.",
    "ItemRemoved": "Removed item from profile.",
    "_ItemRemoved": "Shown when an item removal succeeds.",
    "ItemLimitReached": "Profile is full.",
    "_ItemLimitReached": "Shown when a profile has no free item slots.",
    "UnsupportedItem": "Item not supported.",
    "_UnsupportedItem": "Shown when the target item is not supported by PaintSaver rules.",
    "NoActiveProfile": "No active profile.",
    "_NoActiveProfile": "Shown when an action requires an active profile.",
    "AutoApplyEnabled": "Auto paint ON.",
    "_AutoApplyEnabled": "Shown when auto-paint is enabled.",
    "AutoApplyDisabled": "Auto paint OFF.",
    "_AutoApplyDisabled": "Shown when auto-paint is disabled.",
    "ProfileNotFound": "Profile not found.",
    "_ProfileNotFound": "Shown when the requested profile does not exist.",
    "Reloaded": "Config reloaded.",
    "_Reloaded": "Shown after a successful reload.",
    "SaveSetInsufficientSlots": "Not enough free item slots in that profile.",
    "_SaveSetInsufficientSlots": "Shown when saveset needs more slots than the profile has free.",
    "InvalidHeldItem": "You must hold a supported painted item.",
    "_InvalidHeldItem": "Shown when saveitem/removeitem cannot use the held item."
  },

  "Logging": {
    "LogProfileCreate": true,
    "_LogProfileCreate": "Logs profile creation events.",
    "LogProfileDelete": true,
    "_LogProfileDelete": "Logs profile deletion events.",
    "LogItemSave": true,
    "_LogItemSave": "Logs item save events.",
    "LogItemApply": false,
    "_LogItemApply": "Logs auto-apply events.",
    "LogGroupResolution": false,
    "_LogGroupResolution": "Logs which group and limits were resolved for a player.",
    "LogRejectedItems": false,
    "_LogRejectedItems": "Logs why items were rejected from save/apply operations."
  }
}

Requirements

  • ARK: Survival Evolved Dedicated Server
  • Ark Server API 3.56







JOIN DISCORD

Author
Tazz
Downloads
163
Views
560
First release
Last update

Ratings

0.00 star(s) 0 ratings

More resources from Tazz

Back
Top