This library will help create animations through the use of Keyframes.
Source Code
Commands:
/keyframe create <animationName> - Create an animation
/keyframe start <animationName> - Start selecting keyframes
/keyframe play <animationName> - Start playing animation
/keyframe stop - Stop selecting keyframes
/keyframe delete <animationName> - Delete an animation
/keyframe list - View all animations
Permissions:
/keyframe - keyframeapi.command
Features:
Example Video:
Tutorial:
Source Code
Commands:
/keyframe create <animationName> - Create an animation
/keyframe start <animationName> - Start selecting keyframes
/keyframe play <animationName> - Start playing animation
/keyframe stop - Stop selecting keyframes
/keyframe delete <animationName> - Delete an animation
/keyframe list - View all animations
Permissions:
/keyframe - keyframeapi.command
Features:
- Create Keyframe animations
- Combine multiple Keyframe animations into a sequence forming a cutscene
Java:
/**
* KeyframeAPI - Public API Methods
*
* Use these static and instance methods to interact with keyframe animations.
*/
// Core Plugin Access
KeyframeAPI.getInstance();
// Returns the main plugin instance.
// Animation Management
KeyframeAPI.keyframeAnimationExists(String name);
// Checks if a keyframe animation with the given name exists.
KeyframeAPI.createKeyframeAnimation(String name);
// Creates a new KeyframeAnimation with the given name.
KeyframeAPI.getKeyframeAnimation(String name);
// Retrieves an existing KeyframeAnimation by name.
KeyframeAPI.deleteKeyframeAnimation(KeyframeAnimation animation);
// Deletes the given keyframe animation and removes it from the handler.
KeyframeAPI.getKeyframeAnimations();
// Returns a list of all registered KeyframeAnimations.
// Playback Control
KeyframeAPI.playKeyframeAnimation(Player player, KeyframeAnimation animation);
// Plays the specified keyframe animation for the given player.
// Playback Status
KeyframeAPI.getInstance().isPlayingAnimation(Player player);
// Returns true if the specified player is currently playing a keyframe animation.
KeyframeAPI.getInstance().isRecordingAnimation(Player player);
// Returns true if the specified player is currently recording an animation.
Code:
/**
* KeyframeAPI - Animation Event Reference
*
* These events are part of the keyframe animation lifecycle and can be listened to using Bukkit's event system.
* They allow plugins to hook into various stages of keyframe animation playback and control.
*/
// Called when a keyframe animation is cancelled for a player.
KeyframeCancelEvent
// Called when a keyframe animation ends for a player.
KeyframeEndEvent
// Called when a keyframe sequence (a series of animations) finishes playing.
KeyframeSequenceEndEvent
// Called when a keyframe sequence starts for a player.
KeyframeSequenceStartEvent
// Called when the sequence switches from one animation to the next in a sequence.
KeyframeSequenceSwitchEvent
// Called when a keyframe animation starts for a player.
KeyframeStartEvent
// Called every tick during an active keyframe animation (can be used for syncing or effects).
KeyframeTickEvent
Code:
package me.abhi.keyframeapi;
import me.abhi.keyframeapi.keyframe.KeyframeAnimationSequence;
import me.abhi.keyframeapi.keyframe.event.*;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
public class KeyframeAPIExample implements Listener {
public KeyframeAPIExample() {
Bukkit.getPluginManager().registerEvents(this, KeyframeAPI.getInstance());
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
if (!KeyframeAPI.keyframeAnimationExists("join1") || !KeyframeAPI.keyframeAnimationExists("join2")) return;
KeyframeAnimationSequence keyframeAnimationSequence = new KeyframeAnimationSequence(
"join",
player,
KeyframeAPI.getKeyframeAnimation("join1"),
KeyframeAPI.getKeyframeAnimation("join2"));
keyframeAnimationSequence.play();
}
@EventHandler
public void onKeyframeStart(KeyframeStartEvent event) {
Player player = event.getPlayer();
player.sendMessage(ChatColor.GREEN + "Keyframe Animation Started");
}
@EventHandler
public void onKeyframeEnd(KeyframeEndEvent event) {
Player player = event.getPlayer();
player.sendMessage(ChatColor.GREEN + "Keyframe Animation Ended");
}
@EventHandler
public void onKeyframeCancel(KeyframeCancelEvent event) {
Player player = event.getPlayer();
player.sendMessage(ChatColor.GREEN + "Keyframe Animation Cancelled");
}
@EventHandler
public void onSequenceStart(KeyframeSequenceStartEvent event) {
Player player = event.getPlayer();
player.sendTitle(ChatColor.GOLD + "Welcome to the first scene!", null, 10, 40, 20);
}
@EventHandler
public void onSequenceSwitch(KeyframeSequenceSwitchEvent event) {
Player player = event.getPlayer();
player.sendTitle(ChatColor.GOLD + "Welcome to the next scene!", null, 10, 40, 20);
}
@EventHandler
public void onSequenceEnd(KeyframeSequenceEndEvent event) {
Player player = event.getPlayer();
player.teleport(Bukkit.getWorlds().get(0).getSpawnLocation());
player.sendMessage(ChatColor.GOLD + "Have fun!");
}
}
Example Video:
Tutorial:
- Type
- Offering
- Exclusivity
-
- Non-exclusive
- Server software
-
- Spigot
- Paper
- Supported versions
-
- 1.8
- 1.9
- 1.10
- 1.11
- 1.12
- 1.13
- 1.14
- 1.15
- 1.16
- 1.17
- 1.18
- 1.19
- 1.20
Last edited:
