AnimatedFrames allows you to play animations on item frames!
- Tested Minecraft Versions:
- 1.8
- 1.9
- 1.10
- 1.11
- 1.12
- 1.13
- 1.14
- 1.15
- 1.16
- Source Code:
- https://github.com/InventivetalentDev/AnimatedFrames
- Languages Supported:
- Custom
- Donation Link:
- https://www.patreon.com/inventivetalent
If you find this plugin useful, feel free to throw over a donation
Depends on PacketListenerAPI & MapManager
Commands
- /afhelp - Get a list of the commands below
- /afcreate <Name> <Image> - Creates a new image with the specified name
- /afremove <Name> - Removes the specified image
- /aflist - Get a list of already created images
- /afplace - Command to place down multiple item frames for you
- /afpause - pauses a running frame
- /afstop - stops a running frame (same as pause, but resets to first image of the animation)
- /afplay - starts/resumes a stopped/paused frame
Permissions
- animatedframes.create - Permission to create images
- animatedframes.remove - Permission to remove images
- animatedframes.list - Permission to list images
- animatedframes.pause - Permission to pause frames
- animatedframes.stop - Permission to stop frames
- animatedframes.play - Permission to play frames
Config
Code (YAML):
# Make sure all animations are started at the same time on startup (useful if you usethe same image on multiple frames)
synchronizedStart: false
# Enable this to not start any frames automatically on server start & if you'd like to start them manually instead
doNotStartAutomatically: false
# This is a (slightly hacky) fix for images which Java interpretes as the wrong image type
# You should enable this if you get this error when creating a image: "java.lang.IllegalArgumentException: Unknown image type 0"
fixImageTypes: false
# Maximum distance for frames to be animated to players
# Note: Increasing this only has an effect if your server's rendering distance for entities is also increased (i.e. spigot.yml entity-tracking-range)
maxAnimateDistance: 32
# (ms) Default delay for GIFs with missing delay information (Time for each frame to be displayed)
defaultDelay: 50
message:
command:
create:
setup:
first: "&ePlease right-click the &abottom-left corner &eof the frame"
second: "&ePlease right-click the &atop-right corner &eof the frame"
set:
first: "&aFirst corner set"
second: "&aSecond corner set"
complete: "&aSetup complete! &eCreating frame '%s' with image '%s'..."
loading: "&7Loading image & generating maps..."
saving: "&7Saving frame data to file..."
starting: "&7Starting playback... (This might take a while - See console for progress)"
started: "&aAnimation started!"
error:
exists: "&cFrame already exists"
invalidImage: "&cInvalid image path specified"
unknownType: "&cCould not identify the image type. Please make sure you are using the correct link. (Generating anyway, check console for errors)"
delete:
stopping: "&eStopping animation..."
removed: "&aFrame removed."
error:
notFound: "&cFrame not found"
start:
starting: "&eStarting animation..."
error:
notFound: "&cFrame not found"
playing: "&cFrame is already playing"
stop:
stopping: "&Stopping animation..."
error:
notFound: "&cFrame not found"
notPlaying: "&cFrame is not playing"
pause:
pausing: "&ePausing animation..."
error:
notFound: "&cFrame not found"
notPlaying: "&cFrame is not playing"
next:
success: "&eSkipped to next frame"
error:
notFound: "&cFrame not found"
notPause: "&cFrame is not paused"
previous:
success: "&eSkipped to previous frame"
error:
notFound: "&cFrame not found"
notPause: "&cFrame is not paused"
click:
setup:
first: "&ePlease right-click the &abottom-left corner &eof the frame"
second: "&ePlease right-click the &atop-right corner &eof the frame"
set:
first: "&aFirst corner set"
second: "&aSecond corner set"
complete: "&aAdded click event %s"
remove: "&ePlease click inside the action you want to remove"
removed: "&eAction removed"
error:
notFound: "&cFrame not found"
place:
first: "&ePlease right-click the &abottom-left&e block"
second: "&ePlease right-click the &atop-right&e block"
set:
first: "&aFirst corner set"
second: "&aSecond corner set"
done: "&aFrames placed!"
error:
face: "&cFirst clicked side does not match the second side"
Tutorials
ServerMiner
Note: The tutorials below use commands from an older version. Please use the similar commands listed above.
(German)
How to create a screen
- Place down blocks to hold your item frames
- Place down the item frames you want to use for the image
- Upload an animation or image (.GIF | .PNG) or find one online. It should be rectangular or it will be stretched. Note: Due to a bug in some Java versions, JPEG images might not look like the original image
- For local image files, just specify the full file path (e.g. C:\\Users\\Me\\myImage.png)
- Run the create command above with a custom name and the url to the image. You can also specify the path to a local file.
- Use shorteners like bitly if the link to your image is too long.
- Follow the instructions you get in the chat:
- Right click the bottom-left item frame and wait
- Right click the top-right item frame and wait for your image to load
Note: For GIPHY images, replace the 'media.giphy.com' domain with 'i.giphy.com'
How to remove a screen
To remove a screen, run the remove command and specify the name
How it works - No lags
This plugin does not cause the expected lag/framerate issues you would expect.
It doesn't update the picture every frame (doing that would cause a lot of frame rate issues), it only updates the map item contained in the item frame.
The actual frames of the animation are only sent once with a little delay to prevent any lag issues.
Links
Please leave a rating if you like this resource.
Donations to support me or this resource are also very much appreciated.

AnimatedFrames 4.12.1-SNAPSHOT
Animated images on item frames!
-
Ansandr, Chacos5, cslabzsmile0 and 42 others like this.
Recent Updates
- 1.16.4 support Nov 15, 2020
- 1.16 support Jul 21, 2020
- Config update Mar 29, 2020
Recent Reviews
-
mohteshamjibran
- 5/5,
Amazing content as always!
Keep up the good work for this community Mr. Dev!
Sincerely,
Veltabex -
Carl0Jonshon
- 1/5,
[11:49:56 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing 'afcreate 1 1\' in org.inventivetalent.pluginannotations.command.AnnotatedCommand$BukkitCommand(framecreate)
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:169) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchCommand(CraftServer.java:802) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.PlayerConnection.handleCommand(PlayerConnection.java:2032) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.PlayerConnection.c(PlayerConnection.java:1843) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:1796) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:47) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:5) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:43) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:151) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:114) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1205) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1198) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:125) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1174) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1018) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:179) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_275]
Caused by: org.inventivetalent.pluginannotations.command.exception.UnhandledCommandException: Unhandled exception in [email protected]#frameCreate
at org.inventivetalent.pluginannotations.command.AnnotatedCommand.onCommand(AnnotatedCommand.java:169) ~[?:?]
at org.inventivetalent.pluginannotations.command.AnnotatedCommand$BukkitCommand.execute(AnnotatedCommand.java:401) ~[?:?]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
... 18 more
Caused by: java.lang.IllegalStateException: zip file closed
at java.util.zip.ZipFile.ensureOpen(ZipFile.java:686) ~[?:1.8.0_275]
at java.util.zip.ZipFile.getEntry(ZipFile.java:315) ~[?:1.8.0_275]
at java.util.jar.JarFile.getEntry(JarFile.java:240) ~[?:1.8.0_275]
at java.util.jar.JarFile.getJarEntry(JarFile.java:223) ~[?:1.8.0_275]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:133) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at org.bukkit.plugin.java.JavaPluginLoader.getClassByName(JavaPluginLoader.java:216) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:111) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:100) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_275]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_275]
at org.inventivetalent.pluginannotations.command.AnnotatedCommand.onCommand(AnnotatedCommand.java:134) ~[?:?]
at org.inventivetalent.pluginannotations.command.AnnotatedCommand$BukkitCommand.execute(AnnotatedCommand.java:401) ~[?:?]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[patched_1.16.4.jar:git-Yatopia-"37e61be"]
... 18 more -
tryit163281
- 5/5,
hello bro, I think it's a good plugin for us. I like it all. But I have a question. Can I copy the object that is used by animatedframe? Just like i build the object in world A and I want to copy that to world B. How should I do?
-
MAGd_
- 5/5,
amazing plugin
----------------------------------------------------------------- -
daonlee
- 5/5,
Good plugin, but not working with 1.16.4! Is there a problem? This is a very needed plugin for me! Update to 1.16.4. Thank you:)
-
PluginDownloader
- 2/5,
tried running on spigot 1.16.2 and paper 1.16.2 and it literally spammed errors... please fix this
-
LukaPix
- 2/5,
"Tested MC Versions 1.16"
- throws errors when running on PaperMC 1.15 or higher. -
Mathayus_X
- 4/5,
Good plugin.
But how can I increase the map limit?
I don't find any setting for. -
RakutenZetsu
- 5/5,
Brilliant! it works with my own banners, all be it a little slow to load but it definitely works! I'm running paper 1.15.2 (play.rakutenzetsu.net)
-
Noplix
- 5/5,
Great plugin, used it a lot on 1.14 but right now it's unusable on 1.16 :/
Hope this is going to be update soonish <3!