Описание
# ScreenText
Display **text, timers, counters, textures and GIFs** anywhere on your screen, with backgrounds, animations, movement, live placeholders and more. Works on its own with client commands, or controlled from a server with **ScreenTextPlugin**.
## **Supported versions**
| Loader | Versions |
|---|---|
| **Fabric** | 1.20.1 · 1.20.4 · 1.21.1 · 1.21.4 · 1.21.5 · 1.21.8 · 1.21.11 · 26.2 |
| **NeoForge** | 1.20.1 · 1.20.4 · 1.21.1 · 1.21.4 · 1.21.5 · 1.21.8 · 1.21.11 · 26.2 |
| **Forge** | 1.20.1 · 1.20.4 |
## **Features**
- Display **text** on the screen at any position, scale and rotation
- Display **timers** (countdown) and **counters** (count up, optional decimals) with tick sounds
- Display **textures and GIFs** anywhere, even **fullscreen**
- **Backgrounds**: solid color with 4 styles, or your own **custom background texture** *(NEW)*
- **Entry / exit animations**: scale, slide, pixelate, glitch, bounce, spin...
- **Move** any display to another position with easing, looping **animation presets**, custom time and text color transitions
- **Opacity** control for every display and background
- **Inline items and textures** inside text, **HEX colors**, multiline text
- **Letter-by-letter delay** with optional typing sound
- **Placeholders** (`%stp_...%`): player stats, items, effects, world time, FPS and more *(NEW)*
- **Tab completion** for everything, including texture paths from your resource packs *(NEW)*
- Local displays are **saved** and come back after restarting the game
- **Server control** with ScreenTextPlugin (Spigot/Paper 1.20.1 → 26.2): displays for all players, persistence for players who join later, synced timers and timer actions
## **Texture folders**
- Resource pack: **`assets/screentext/`** → use as `assets/screentext/my_texture.png`
- Config folder: **`config/screentext/textures/`** → use as `screentext:my_texture.png` (or just `my_texture.png`)
- Vanilla textures also work: `assets/minecraft/textures/...`
Use `/screentext reload` to reload textures after changing them.
## **Examples**
**Timer with a sound at 50% volume:**
```
/screentext timer ronda1_starting_timer CENTER TOP 1 0 disablebackground 0 1 none glitch_out "block.note_block.hat;vol:50" #BAFF60ʟᴀ ʀᴏɴᴅᴀ ɪ ɪɴɪᴄɪᴀ ᴇɴ: &f"00:00:11"
```
**GIF texture that plays once:**
```
/screentext texture test 50 50 1.6 0 0 1 none none 1 false assets/screentext/cortinas_overlay.gif
```
**Text with a 2 second delay:**
```
/screentext display ronda1_timer_text CENTER TOP 1 0 disablebackground 0 1 up_in up_out {"d:2"}#BAFF60ʀᴏɴᴅᴀ ɪ - ᴏᴠᴇʀᴡᴏʀʟᴅ
```
**Text with a colored rounded background:**
```
/screentext display welcome CENTER CENTER 2 0 enablebackground BLACK 0.6 ROUNDED 1.2 10 1 scale_in scale_out &eWelcome, &f%stp_player_level% levels!
```
**Text with a custom background texture** *(NEW)*:
```
/screentext display banner CENTER 20 1.5 0 backgroundtexture assets/screentext/banner_bg.png 0.9 1.5 10 1 left_in right_out #FFD700Boss incoming!
```
**Live coordinates HUD:**
```
/screentext display coords LEFT TOP 1 0 enablebackground BLACK 0.4 SQUARE_SMALL 1 0 1 none none XYZ: %stp_player_x% %stp_player_y% %stp_player_z%/n%stp_player_biome% | %stp_fps% FPS
```
**Counter with decimals:**
```
/screentext counter speedrun RIGHT TOP 1 0 disablebackground 0 1 none none none true &aTime: "timer"
```
**Fullscreen overlay:**
```
/screentext texture overlay CENTER CENTER fullscreen 0 20 0.8 none none 1 true assets/screentext/vignette.png
```
**Move a display with a looping preset and color change:**
```
/screentext move welcome CENTER 80 1.5 0 SMOOTH PULSE 1.5 #FF5555
/screentext move_reset welcome BOUNCE NONE 1
```
## **Commands**
```
Base command: /screentext
Text:
/screentext display enablebackground
/screentext display backgroundtexture
/screentext display disablebackground
Timer (counts down):
/screentext timer enablebackground
/screentext timer backgroundtexture
/screentext timer disablebackground
/screentext stoptimer
/screentext resumetimer
Counter (counts up):
/screentext counter enablebackground
/screentext counter backgroundtexture
/screentext counter disablebackground
/screentext stoptimer
/screentext resumetimer
Texture / GIF:
/screentext texture
Move:
/screentext move [movetype] [animationpreset] [time] [color]
/screentext move_reset [movetype] [animationpreset] [time]
Other:
/screentext remove [fadeOutTicks]
/screentext list
/screentext reload
```
## **Options**
| Option | Values |
|---|---|
| **posX / posY** | `0`–`100` (percent of the screen) or `LEFT` `CENTER` `RIGHT` / `TOP` `CENTER` `DOWN` |
| **scale** | `0.01`–`1000` (textures also accept `fullscreen`) |
| **rotation** | `-360`–`360` |
| **background** | `enablebackground` (color) · `backgroundtexture` (custom texture) · `disablebackground` |
| **backcolor** | `BLACK` `DARK_BLUE` `DARK_GREEN` `DARK_CYAN` `DARK_RED` `PURPLE` `ORANGE` `LIGHT_GRAY` `GRAY` `DARK_GRAY` `BLUE` `GREEN` `CYAN` `RED` `PINK` `YELLOW` `WHITE` or HEX `#RRGGBB` |
| **backstyle** | `SQUARE` `ROUNDED` `SQUARE_SMALL` `ROUNDED_SMALL` |
| **backopacity / bgopacity / opacity** | `0`–`1` |
| **bgscale** | `0`–`10` (size of the background around the text) |
| **fadeIn** | `0`–`100` ticks |
| **animationIn** | `none` `scale_in` `left_in` `right_in` `up_in` `down_in` `pixelate_in` `glitch_in` `bounce_in` `spin_in` |
| **animationOut** | `none` `scale_out` `left_out` `right_out` `up_out` `down_out` `pixelate_out` `glitch_out` `bounce_out` `spin_out` |
| **sound** | `none` or any sound id, e.g. `"block.note_block.pling"`, `"block.note_block.pling;vol:50"` |
| **decimals** | `true` / `false` |
| **gifspeed** | `0`–`2` |
| **gifloop** | `true` / `false` (with `false` the GIF plays once and disappears) |
| **movetype** | `LINEAR` `SMOOTH` `STEP` `BOUNCE` |
| **animationpreset** | `NONE` `SHAKE` `WIGGLE` `PULSE` `X_CYCLE` `Y_CYCLE` `SPIN` `CIRCLE` `FLOAT` `SWING` `HEARTBEAT` `BREATHE` `GLITCH` `WAVE` `BOUNCE` `PENDULUM` `VIBRATE` `SWAY` |
| **time** (move) | `0.1`–`60` seconds |
| **color** (move) | `none`, a color name or HEX `#RRGGBB` (text only) |
## **Tips**
**Text formatting**
- `&a`, `&l`... = Minecraft color and format codes
- `#RRGGBB` = HEX color, e.g. `#BAFF60Hello`
- `\n` or `/n` = new line
- `|` = space
**Timers and counters**
- Timer time goes in quotes: `"00:05:00"`, `"05:00"`. Text around it is kept: `&cEnds in &f"00:01:30"`
- In counters, `"timer"` marks where the counter goes: `&aTime: "timer" seconds`
- Sound volume: add `;vol:(0-100)` → `"customsound;vol:30"`
**Delay (letter by letter)**
```
{"delay:"}
{"d:"}
{"delay:;sound:"}
{"d:;s:"}
```
**Inline items**
```
{"diamond"}
{"diamond,scale:1.5"}
{"diamond,scale:1.5,nbt:3"} ← nbt = CustomModelData
{"%stp_player_item_mainhand_id%"} ← shows the item you are holding
```
**Inline textures**
```
{"assets/screentext/icon.png"}
{"assets/minecraft/textures/gui/sprites/hud/heart/full.png,scale:2"}
```
**Background textures** *(NEW)*
- The texture is stretched over the area a normal background would cover, so `bgscale` makes it bigger or smaller.
- Press **Tab** after `backgroundtexture` to see every texture found in your resource packs and in `config/screentext/textures/`.
- PNG and GIF both work.
## **Placeholders**
Placeholders update live. Use them in any text, timer or counter.
**Client placeholders** work in `/screentext` commands and in server commands from ScreenTextPlugin.
**[S] Server placeholders** only work in server commands (`/stp`), because the client can't know them.
### Player – position
| Placeholder | Description |
|---|---|
| `%stp_player_x%` `%stp_player_y%` `%stp_player_z%` | Block coordinates |
| `%stp_player_x_exact%` `%stp_player_y_exact%` `%stp_player_z_exact%` | Coordinates with 2 decimals |
| `%stp_player_world%` | World / dimension |
| `%stp_player_biome%` | Biome |
| `%stp_player_direction%` | Cardinal direction (N, NE, E...) |
| `%stp_player_yaw%` `%stp_player_pitch%` | Camera rotation |
### Player – health, food and XP
| Placeholder | Description |
|---|---|
| `%stp_player_health%` `%stp_player_maxhealth%` | Health / max health |
| `%stp_player_health_percent%` | Health 0–100 |
| `%stp_player_food%` `%stp_player_saturation%` | Food / saturation |
| `%stp_player_absorption%` | Absorption hearts |
| `%stp_player_level%` | XP level |
| `%stp_player_xp_progress%` | Progress to next level 0–100 |
| `%stp_player_total_xp%` | Total XP |
### Player – combat and movement
| Placeholder | Description |
|---|---|
| `%stp_player_armor%` `%stp_player_armor_toughness%` | Armor points / toughness |
| `%stp_player_attack_speed%` | Attack speed |
| `%stp_player_attack_damage%` **[S]** | Attack damage |
| `%stp_player_speed%` `%stp_player_speed_vertical%` | Speed in blocks/second |
| `%stp_player_walk_speed%` `%stp_player_fly_speed%` | Speed multipliers |
### Player – status (true / false)
`%stp_player_is_flying%` `%stp_player_is_sneaking%` `%stp_player_is_sprinting%` `%stp_player_is_swimming%` `%stp_player_is_blocking%` `%stp_player_is_gliding%` `%stp_player_is_sleeping%` `%stp_player_is_dead%` `%stp_player_is_on_fire%` `%stp_player_is_in_water%` `%stp_player_is_on_ground%` · `%stp_player_is_op%` **[S]**
### Player – items
| Placeholder | Description |
|---|---|
| `%stp_player_item_mainhand%` `%stp_player_item_offhand%` | Item name |
| `%stp_player_item_mainhand_id%` `%stp_player_item_offhand_id%` | Item id (with `:CustomModelData`) |
| `%stp_player_item_mainhand_amount%` `%stp_player_item_offhand_amount%` | Stack amount |
| `%stp_player_item_mainhand_durability%` `%stp_player_item_offhand_durability%` | Durability, e.g. `1561/1561` |
| `%stp_player_item_helmet%` `_chestplate%` `_leggings%` `_boots%` (+ `_id`) | Armor |
| `%stp_player_item_slot_%` (+ `_id`, `_amount`, `_durability`) | Any slot: 0–8 hotbar, 9–35 inventory, 36 boots, 37 leggings, 38 chestplate, 39 helmet, 40 offhand |
### Player – potion effects
| Placeholder | Description |
|---|---|
| `%stp_player_effect_list%` | Active effects |
| `%stp_player_effect_count%` | Number of active effects |
| `%stp_player_effect_%` | Effect name if active |
| `%stp_player_effect__active%` | true / false |
| `%stp_player_effect__level%` | Level (1, 2, 3...) |
| `%stp_player_effect__duration%` | Seconds left |
Effect names: `speed`, `slowness`, `haste`, `strength`, `jump_boost`, `regeneration`, `resistance`, `fire_resistance`, `water_breathing`, `invisibility`, `night_vision`, `poison`, `wither`, `absorption`, `glowing`, `levitation`, `slow_falling`, `darkness`...
### Player – misc
| Placeholder | Description |
|---|---|
| `%stp_player_gamemode%` | Game mode |
| `%stp_player_ping%` | Ping in ms |
| `%stp_player_air%` `%stp_player_max_air%` | Air in seconds |
| `%stp_player_freeze_ticks%` | Powder snow freeze |
| `%stp_player_online_survival%` `_creative%` `_adventure%` `_spectator%` | Players in each game mode |
| `%stp_player_fire_ticks%` **[S]** | Fire time left |
| `%stp_player_bed_exists%` `%stp_player_bed_x%` `_y%` `_z%` **[S]** | Bed spawn |
| `%stp_player_stat_kills%` `_mob_kills%` `_deaths%` `_damage_dealt%` `_damage_taken%` `_jumps%` **[S]** | Statistics |
| `%stp_player_stat_playtime%` `_playtime_hours%` `_playtime_minutes%` **[S]** | Play time |
| `%stp_player_stat_distance_walked%` `_sprinted%` `_flown%` `_swum%` **[S]** | Distances in blocks |
### Timers and displays
| Placeholder | Description |
|---|---|
| `%stp_timer_%` | Formatted time |
| `%stp_timer__hours%` `_minutes%` `_seconds%` `_total_seconds%` | Time parts |
| `%stp_timer__active%` `_finished%` `_stopped%` | true / false |
| `%stp_timer__progress%` | Progress 0–100 |
| `%stp_timer__text%` | Timer text |
| `%stp_timer_count%` | Active timers |
| `%stp_display__active%` | true / false |
| `%stp_display_count%` `%stp_display_list%` | Active displays |
### World, server and time
| Placeholder | Description |
|---|---|
| `%stp_fps%` | Your FPS (client only) |
| `%stp_server_online%` | Online players |
| `%stp_server_weather%` | Clear / Rain / Thunder |
| `%stp_server_world_time%` | In-game time (HH:MM) |
| `%stp_server_day%` | In-game day |
| `%stp_server_max%` **[S]** | Max players |
| `%stp_server_tps%` `%stp_server_mspt%` **[S]** | Server performance |
| `%stp_server_uptime%` **[S]** | Server uptime |
| `%stp_time%` `%stp_date%` `%stp_datetime%` | Real date and time |
## **ScreenTextPlugin (servers)**
With the plugin installed on a Spigot/Paper server (1.20.1 → 26.2), use the same commands as `/stp ...`. One plugin works with Fabric, Forge and NeoForge clients.
- `@a` displays are saved and shown to players who join later; removed displays are removed for them too
- Timers stay in sync after reconnecting, and paused timers stay paused
- Timer actions: run console commands when a timer ends or reaches a time (`/stp timerconfig`)
- PlaceholderAPI support (including all `%stp_...%` server placeholders)