Skins and Face Controls - clockworktownsmp/clockwork-bosses GitHub Wiki

Skins and face controls

Open Skin preview / eyes to change how your boss looks. The in-game model preview lets you line up its face before you test it in the world.

Skin types

skin.type Result
default Minecraft's normal Warden texture.
player Maps the named account's 64×64 Minecraft skin onto the Warden.
custom Uses a server-supplied 128×128 PNG in the vanilla Warden atlas layout.

Player skins are resolved by each client through Minecraft/Mojang services. The mapping uses nearest-neighbor scaling without a vanilla base-texture overlay. The moving chest rib plates retain their original Warden pixels, keeping the torso and opening ribs distinct.

Normal Wardens keep their original textures and emissive rendering.

Custom PNG setup

Place the file here:

config/clockwork-bosses/boss-templates/my_boss/skins/clockwork_warden.png

Use these settings in the template:

{
  "skin": {
    "type": "custom",
    "name": "",
    "file": "clockwork_warden.png"
  }
}

Custom files must be:

  • PNG, exactly 128×128 pixels
  • In the vanilla Warden texture-atlas layout
  • 512 KiB or smaller
  • A lowercase .png basename without spaces, capitals, or a directory path

Custom PNGs are loaded as-is, without scaling or remapping. A player-skin PNG won't automatically become a custom Warden atlas.

The server sends a custom skin to clients tracking a boss that uses it. Players don't need to copy the file onto their clients. After replacing a PNG, run /boss reload to refresh the server cache and tracking clients.

Preview controls

Enter your player/default/custom settings, then press Load / refresh skin preview.

  • Drag the model to rotate it.
  • Switch between the full-body view and head zoom.
  • Reset it to face forward.
  • Choose a preview phase to check its glow tint.

For presets, custom preview files come from that preset's own skins/ folder. The preview only renders the model. It doesn't enter the world or run AI.

Eyes and eyebrows

The page has separate Skin and Glowing eyes sections, plus face controls:

  • Choose Both / Left / Right eyes.
  • Move selected eyes by one atlas pixel with the direction pad, or edit coordinates.
  • Use Narrower / Wider to adjust spacing.
  • Adjust eye and eyebrow positions separately.
  • Use independent eye Scale X / Y controls from 0.5–4, rounded to 1–8 atlas pixels. Scale 1 gives a 2×2 eye. The static eyebrow source mask is 4×4; beta.6 rotation can extend pixels beyond it before clipping to the face.

Coordinates are atlas pixels measured from the 16×16 front face's top-left.

  • skin.glowing_eyes stores integer left_x, left_y, right_x, and right_y. The editor accepts 0–15. Rendering clamps X to 0 through 16 minus eye width, and Y to 0 through 16 minus eye height, so scaled eyes stay inside the face.
  • Eye scale_x and scale_y accept 0.5–4, default 1. Default eye positions are (3,7) and (11,7). A default 2×2 eye therefore renders at coordinates no greater than 14, even though the editor accepts 15.
  • skin.glowing_eyebrows stores integer left_x, left_y, right_x, and right_y from 0–12 for the 4×4 source masks. Beta.6 rotates around each mask's center and clips resulting pixels to the face. Default positions are (2,2) and (10,2).

This partial template uses the default face positions and eye scale:

{
  "skin": {
    "glowing_eyes": {
      "left_x": 3,
      "left_y": 7,
      "right_x": 11,
      "right_y": 7,
      "scale_x": 1,
      "scale_y": 1
    },
    "glowing_eyebrows": {
      "left_x": 2,
      "left_y": 2,
      "right_x": 10,
      "right_y": 2
    }
  }
}

The eyes include darker pupil pixels. To move the eyebrows, use the separate brow controls; moving the eyes won't move them.

Alignment preview uses stronger, steady face glow and the selected phase hue at full saturation and brightness. The live boss uses your configured RGB color and the native pulse, so expect a different brightness in-world.

If the preview fails, refresh once and check the client log for its actionable warning. See Troubleshooting for file and version checks.

Development source: pupil controls

The later source adds skin.glowing_pupils to both editors and their model previews. These are darker rectangles inside each glowing eye. They keep the phase hue; the pupil pixels are 40% as bright as the surrounding eye.

Field Meaning
enabled Show pupils; false leaves the eye bright. Default true.
scale_x, scale_y Independent size, 0.5–8. Scale 1 = one atlas pixel; sizes round to 1–8 pixels.
left_x, left_y, right_x, right_y Whole offsets inside that eye, -1–7. Zero is its top-left. -1 follows the inner X or bottom Y edge automatically.

Moving an eye moves its pupil too. Size and offset clip to the eye; the saved value stays intact if the eye becomes smaller. Defaults retain the original one-pixel inner/bottom pupil. Automatic one-pixel pupils remain hidden on one-pixel-wide/high eyes; explicitly positioning/sizing them can fill those eyes.

In Skin preview / eyes → Pupils, the native cross pad selects Both, Left or Right. Reset restores automatic positions without changing size/visibility. The website's Skin & glowing face → Pupils exposes the same fields and preview rules. An older connected server schema hides unsupported controls without dropping imported pupil data. New/default presets include the section; existing templates can omit it and keep their appearance.

Pupil controls are included in stable 0.2.0 and beta.6. The connected Workshop needs a server schema that exposes them. Beta.6 includes native face/atlas/editor checks; real multiplayer visual checks remain pending. Earlier 0.2.beta.1 jars lack these controls. Normal Wardens retain their original rendering; clients without the core retain the native fallback.

Development source: eyebrow expressions and combat events

The current development source adds Angry, Neutral, Curious and Sad eyebrow shapes, with independent left/right rotation in whole degrees from -45 to 45. Positive rotates clockwise around each brow's center. The source mask is still 4×4, but rotated pixels can extend one pixel beyond it; everything clips to the 16×16 face. Shape selection preserves saved positions. Reset restores selected positions and zero rotation while keeping the expression. Small angle changes can look identical on the pixel grid.

Under Glowing eyebrows → Encounter expressions, enable event rules to choose a shape and angle overrides for melee, sonic boom, roar, getting hit and a new target. Rules affect only the glow face. Native attacks, damage, movement and animations continue to run through their existing paths.

Setting Meaning
Base expression angry, neutral, curious or sad; default angry.
Base left_rotation, right_rotation Independent integer angles -45–45; default 0.
events.enabled Enables the event rules; default false. Missing/disabled keeps the static face.
Rule expression inherit = base shape; angry/neutral/curious/sad = fixed shape; random = one draw from random_pool.
Rule rotations Null/missing keeps the corresponding base rotation; an integer -45–45 overrides it.
hit_duration_ticks, target_duration_ticks Temporary reaction length, whole ticks 1–12000; default 20.
hit_cooldown_ticks, target_cooldown_ticks Minimum time between reactions, 0–12000; default 20. Extra events during cooldown do not extend a reaction.
random_between_attacks Choose a new resting shape after each completed melee swing/sonic beam; default false. Cancelled attempts do not roll.
random_pool Four booleans: angry, neutral, curious, sad. Default all true. An empty pool uses the base shape; explicit rule angles still apply.

Priority: getting hit → attack/roar → new target → resting face. A hit briefly overrides the current attack expression, then returns to it if the attack/recovery is still running. The hit rule observes accepted nonfatal player-owned damage, including player-owned projectiles. It does not react to vetoed attempts, environmental damage or fatal hits.

Twenty game ticks equal one second at normal tick speed. Reactions and recovery expiry share the existing ten-tick boss watcher, so a pose can last up to nine extra ticks. There is no independent random timer. Reload, health-phase changes and encounter end discard transient poses. Attack interruption clears that attack pose; an old stop callback cannot clear a newer attack's face.

For example, this partial section keeps angry attacks and briefly shows sad eyebrows when a player hits the boss:

{
  "skin": {
    "glowing_eyebrows": {
      "expression": "angry",
      "left_rotation": 0,
      "right_rotation": 0,
      "events": {
        "enabled": true,
        "hit_duration_ticks": 20,
        "hit_cooldown_ticks": 20,
        "melee": { "expression": "angry" },
        "sonic_boom": { "expression": "curious" },
        "hurt": { "expression": "sad" }
      }
    }
  }
}

Both editors offer a local Preview expression/pose selector and a still random sample; these selectors are not template settings and are never saved. The preview does not simulate event timing. Older connected schemas hide unsupported controls while preserving imported data. Normal Wardens and unmodded clients keep vanilla rendering; older Clockwork clients retain their old eyebrow shape.

Status, October 13, 2026: packaged in the local 0.3.0-beta.6 checkpoint. Native server hooks/priority/cleanup, client atlases and editor controls at three sizes passed automated checks; the detached Warden preview rendered. Real multiplayer, latency and rendering under load remain unverified. No deployment occurred. At that checkpoint, hosted beta declared only beta.4, beta.3 and 0.2.0 and did not contain these face controls; beta.6 edits/publishing were correctly blocked. Recheck the hosted declaration before using it as a current support claim. The standalone website source passed regression and browser roundtrip checks. See Compatibility and testing for checkpoint limits.