ScreenEffects by Trplnr
A small flexible library for showing animated screen overlays to the user.
Download the datapack and resource pack!
Demo
This is a YouTube video, click to play.
Usage
[!IMPORTANT] Using this method requires the following to be installed in your system: Deno, ffmpeg. After getting those, restart your computer.
A screen effect is composed of multiple font frames that the datapack uses to show the animation.
A utility Deno JS file is provided with the resource pack inside the screen_effects
folder to make this process easier.
[!NOTE]
- You can use any image editing software you like as long as it can export your animation into a spritesheet. Aseprite has this functionality.
- It is recommended to make a 256x256 .png file for the best results.
screen_effects
folder.screen_effects
folder if you want more screen effects.buildScreenEffects.js
folder and adjust these configs.// -------------CONFIGS---------------
// Replace with the namespace you use!
const NAMESPACE = "example";
// This logs what the builder is currently doing.
// If compiling is taking a while, disabling this will improve compilation time.
const debugMode = false;
// If you want the font JSON files to be formatted, make this boolean true.
const prettyPrintFontFiles = false;
// If you want to see the ffmpeg logs, make this boolean true.
// If compiling is taking a while, disabling this will improve compilation time.
const showFFMPEGLogs = false;
// -----------------------------------
screen_effects
folder.deno run --allow-all .\buildScreenEffects.js
Congrats! You've successfully turned your wonderful animations into frames! :tada:
If you only want to to compile 1 spritesheet, simply run
deno run --allow-all .\buildScreenEffects.js filename.png
The datapack needs to have data to know what a screen effect is so you have to register it.
Here is an example on how you can register one.
ScreenEffect schema shown below this section.
# To add your own screen effects to the global registry,
# simply copy what is shown here.
data modify storage example:scrfx_data screen_effects set value { \
"examples:toast": { \
tps: 1, \
frame_count: 31, \
path: "example:scrfx/exampletoast" \
}, \
"examples:transition": { \
tps: 1, \
frame_count: 69, \
path: "example:scrfx/exampletransition", \
callbacks: { \
"26": "say This frame covers the whole screen" \
} \
}, \
}
function scrfx:add_screen_effects {storage: "example:scrfx_data", path: "screen_effects"}
This is the definition of a ScreenEffect.
{
/**
* The name of the screen effect,
* preferrably namespaced.
*/
"ns:identifier": {
/**
* How fast each frame
* shows up measured in ticks.
*
* Just like fps but well in ticks.
*
* Must be above zero.
*/
tps: <int>,
/**
* How many frames are in the animation.
*/
frame_count: <int>,
/**
* The font resource location
* of the animation with the
* number at the end removed.
*/
path: <resource_location>,
/**
* Defines what commands run in a certain frame.
*
* Optional.
*/
callbacks?: {
"<frame_number>": "<command>",
...
}
}
}
scrfx:in id
storage.scrfx:play
!Example:
data modify storage scrfx:in id set value "ns:identifier"
execute as Trplnr run function scrfx:play