KeyframeAPI | Cutscenes and Animations

devo

Premium
Feedback score
33
Posts
354
Reactions
194
Resources
1
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:
  • 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
  1. Non-exclusive
Server software
  1. Spigot
  2. Paper
Supported versions
  1. 1.8
  2. 1.9
  3. 1.10
  4. 1.11
  5. 1.12
  6. 1.13
  7. 1.14
  8. 1.15
  9. 1.16
  10. 1.17
  11. 1.18
  12. 1.19
  13. 1.20
Last edited:
PebbleHost
High performance, consistent uptime and fast support. Minecraft hosting that just works.
Top