Dynamic Skins

Quick rating

Dynamic Skins

No reviews yet

Set your skin dynamically based on conditions (client-only for now)

Mod Loaders
Fabric
Quilt
Minecraft

Community voices

Reviews

Versions
Loading versions…
Match includes

Click once to include, again to exclude, again to clear

Rating Any
Any 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
Min
Max
Play Status
Reviews
Time Played
hrs+
Verified developers only
Has developer response
List view
Grid view
Compact view
Sort by
Date
Rating
Helpful
Unhelpful
Edited
Sort ascending
Delete this review?

This removes your review from the project. You can write a new review after.

Review submitted for moderation

Your review has been sent to moderators, who will check that it meets our guidelines before it appears publicly.

No reviews yet. Be the first to review this project!

Get it on

Available Platforms

Compatibility

Supported Environments

Dev Environment
Client Required
Server Unsupported

About

Project Details

Type
Mod
License
MIT License
Latest Version
1.2.1
Authors

For authors

Embed Badge

If you're the author of this project, you can embed a live badge anywhere that supports HTML or Markdown. It updates automatically whenever ratings change.

Custom banner text
ModDex rating badge preview

Use HTML for any page that supports it, or Markdown for README files and Markdown-based descriptions.

Identifiers

Platform IDs

Modrinth ID

Resources

External Links

Source Issues Wiki Discord

About

Description

Dynamic Skins

Set your skin dynamically based on conditions (client-only for now)

Getting Started

After installing the mod and launching the game once, a file called dynamic-skins.js will be written to the configuration folder (if you don't know where that is, Dynamic Skins will helpfully tell you the file path in the logs on the first launch).

Dynamic Skins exposes a very simple JavaScript API that allows you to replace player skins based on conditions that you define. Note that the skin replacement only takes place on your client. Only you will see the modified skins. Also note that this only changes skins in-game, so skin selector mods or the tab list/social interactions screen will not be affected.

Example configuration:

if (
  data.target.player.profile.username === data.client.player.profile.username && // Only replace your own skin - without this, you'll see that everyone's skin changes when you swim
  data.client.player.isTouchingWater &&
  data.client.player.isSwimming
) {
  skin.set("minecraft:textures/entity/zombie/drowned_outer_layer.png");
}

Another:

// When anyone holds a trident, their skin will be changed
if (data.target.player.equipment.mainhand === "minecraft:trident") {
  skin.set("minecraft:textures/entity/zombie/drowned_outer_layer.png");
}

This configuration will be run once per player rendered per frame.

Configuration Cache

The configuration is read once on mod initialisation and cached in memory, and updates to it will not be read unless you run /dynamic-skins cache reload. Alternatively, you can open the Mod Menu configuration page for Dynamic Skins and click "Reload configuration". Every time you update the configuration, you must reload it for it to apply.

Errors

If an error is encountered when Dynamic Skins executes the configuration, the error and a message stating that Dynamic Skins has stopped will be logged. You can run the command /dynamic-skins error to display the error. To start it again, you must either run /dynamic-skins error reset or open the Mod Menu page (reopen if it was already open) and click the "Restart" button that should now be visible. Note that restarting will reload the configuration.

Custom Skins

For now, Dynamic Skins only allows you to set a skin via a resource location (of the form namespace:path/to/image.png). To use custom skins, you can create a resource pack.

Example resource pack structure:

|- pack.mcmeta
|- pack.png
|- assets
   |- skins
      |- my_skin.png

You could then use skin.set('skins:my_skin.png').

Advanced Usage

Dynamic Skins allows you to set a state that persists across both players and frames. This allows you to make animated skins by cycling through different frames. Please note that framerates drop significantly with long cycles.

Example:

if (
  data.target.player.profile.username === data.client.player.profile.username
) {
  state.set(
    "cycle",
    ((state.get("cycle") === null ? 0 : state.get("cycle")) % 32) + 1
  );

  const s = state.get("cycle").toString();

  skin.set(`skins:skin${"0".repeat(2 - s.length)}${s}.png`);
}

The above example will cycle your skin continuously from skins:01.png through skins:32.png

It is possible to cycle skins without state by using skin.value, but it will be much more tedious and will still have a performance impact.

a gif of the skin cycling through different gradients

API

Skin

value: string

set(value: string): void


Data

client: ClientData

target: TargetData


ClientData

player: PlayerData


TargetData

player: PlayerData


PlayerData

profile: ProfileData

equipment: EquipmentData

isTouchingWater: boolean

isClimbing: boolean

isSwimming: boolean

isSneaking: boolean

isOnFire: boolean

isInLava: boolean

isSprinting: boolean


ProfileData

username: string


EquipmentData

head: string

chest: string

legs: string

feet: string

mainhand: string

offhand: string


State

set(key: string, value: any): void

get(key: string): any

Screenshots

Gallery

This project has no gallery images yet.

Versions

Files

Relations

Project Relations

More like this

Similar Mods

Suggestions use data such as tags, dependencies, dependents, descriptions, titles, and more to rank how much they overlap with this mod.

On ModDex

Community snapshot

0
Ratings
0
Followers
0
In stacks

By the numbers

Statistics

<1,000
Downloads
Last Updated
CurseForge
Modrinth
Created
Last synced
When ModDex last fetched this project from CurseForge or Modrinth. Every project is re-checked on a schedule, and any project that ships a new file is synced automatically within hours of the release.
New file updates sync automatically
How syncing works