Welcome to AnimatedMOTD’s documentation!

Contents:

Introduction

Have you seen other servers that have moving MOTDs? Animated Favicons? What about a flashy player count? You’re at the right place!

Whether you’re running a major network, or a single server, this plugin covers it all. From Bukkit and Spigot (1.7-1.8), to Bungee, and even Cauldron

Features

  • Animate your MOTD with a variety of effects
  • Animate your server icon using a GIF
  • Animate your player count with placeholders
  • Animate your player sample (hover) with even more text
  • No ”... and x more...” message in player sample
  • Allows optimized GIFs - any 64x64 GIF will work
  • A huge list of placeholders, and more if you need it
  • Player-based animations, with player face, etc
  • Blacklist IPs of voting websites you use (a default list is included)
  • Frequent updates and bugfixes
  • Easy method of support with one command: /animatedmotd debug

Configuration

config.yml

config.yml represents basic configuration of plugin. Player caching, database management and fallback motd are here.


settings

settings:
  animations:
    default:
      dynamic: generic_dynamic
      static: generic_static
    host.macizun.me:
      dynamic: generic_dynamic
      static: generic_static
  caching:
    time: 604800000
    parts:
      face: 'http://cravatar.eu/avatar/<player value="name">/64.png'
  fallback:
    motd: "This is the fallback MOTD It will be used: \nWhen the duration is reached, or an animation fails"
    favicon: favicon.png
    #status-bar: "&7Players: {server:onlineplayers}/{server:maxplayers}" #Uncomment if you want custom status-bar on failsafe
    player-sample:
    - "&7Here is the static player sample"
    - "&7It is &ac&bo&cl&1o&2r&3a&db&el&4e"
    - "&7One frame only"
  debug: false
  max-connections-per-ip: 5
  formatting:
    time-format: '{0} days {1}:{2}:{3}'
    date-format: 'MM-dd-yyyy h:mm a'

animations

Warning

Do not remove default key You can assign STATIC variable to dynamic field, but never DYNAMIC to static.

This section holds list of animations assigned to forced hosts.

    default:
      dynamic: generic_dynamic
      static: generic_static
    host.macizun.me:
      dynamic: generic_dynamic
      static: generic_static
caching
  caching:
    time: 604800000
    parts:
      face: 'http://cravatar.eu/avatar/<player value="name">/64.png'
time
Specify time after which cache files will be regenerated for certain players
parts

Note

Removing parts will result in no caching, so your best bet if you are not using player parts is just to remove it.

Key is used for file name and <player> variable in animation

fallback
  fallback:
    motd: "This is the fallback MOTD It will be used: \nWhen the duration is reached, or an animation fails"
    favicon: favicon.png
    #status-bar: "&7Players: {server:onlineplayers}/{server:maxplayers}" #Uncomment if you want custom status-bar on failsafe
    player-sample:
    - "&7Here is the static player sample"
    - "&7It is &ac&bo&cl&1o&2r&3a&db&el&4e"
    - "&7One frame only"

This section holds fallback motd that is being sent to clients under specific circumstances:

  • Animation passes duration threshold
  • Connection exceeds see max-connection-per-ip
  • Connection address is specified in blacklist.yml
motd
It is basically a description, it contains two lines (they have to be separated with n though)
favicon

Warning

Don’t put animated icon, it will not work.

Favicon that will be displayed next to fallback motd.

status-bar

Warning

Uncommenting status-bar will result in red cross in fallback motd.

Status bar is a line displayed on player count slot.

player-sample

Warning

Player sample will display x and more.. if status-bar is disabled

Holds list of strings displayed when client hovers over status-bar.

debug
  debug: false

This boolean will help you determinate what ips are pinging your server. It’s especially helpful for looking for server list’s ips.

max-connection-per-ip

Warning

Don’t go lower than 1, it will cause your animatedmotd to stop working.

  max-connections-per-ip: 5

This variable prevents abuse regarding bandwidth usage, connections exceeding this limit will be given see fallback motd.

formatting
  formatting:
    time-format: '{0} days {1}:{2}:{3}'
    date-format: 'MM-dd-yyyy h:mm a'

Formatting is used for formatting countdowns and some bukkit sided variables.

time-format
Is used for countdowns where {0} are days, {1} hours, {2} minutes and {3} seconds
date-format
Is used for bukkit variables: first-played and last-played

database

Database is used for storing player data for DYNAMIC animations. Currently AnimatedMOTD supports sqlite, flatfile and mysql.

database:
    type: sqlite
    mysql:
      host: localhost
      port: 3306
      username: user
      password: pass
      database: animatedmotd
    sqlite:
      file: players.db
type
    type: sqlite

There are three options available:

  • sqlite (default)
  • mysql
  • flatfile - May be the fastest
  • none - Completely disables database, if you are not using DYNAMIC animations it will speed up things for you.

Plugin will automatically create tables for your database.

mysql

Warning

Specyfing wrong connection details may cause lag or unexpected breakage.

    mysql:
      host: localhost
      port: 3306
      username: user
      password: pass
      database: animatedmotd

If you want to use mysql you probably know how to set this up.

sqlite
    sqlite:
      file: players.db

Sqlite is a reliable and fast flat-file database.

file
If for whatever reason you want to change file where player data is stored you can change it here.

blacklist.yml

blacklist.yml holds ip addresses that animation is disabled for, they will receive fallback motd specified in config.yml This is useful for some server listing sites that wait for proper protocol or pong packet.

It’s really hard to keep track of all ip changes those sites make, if it’s not working on your web-listing use config.yml debug.

Example blacklist.yml

blacklist:
- 104.200.31.26 #minecraft-server-list.com PINGER
- 198.41.188.52 #minecraft-server-list.com WEBSITE
- 23.239.10.44 #minecraftservers.org PINGER
- 23.239.10.74 #minecraftservers.org PINGER
- 173.255.233.106 #minecraftservers.org PINGER
- 66.175.208.209 #minecraftservers.org PINGER
- 23.239.10.76 #minecraftservers.org PINGER
- 50.116.54.77 #minecraftservers.org PINGER
- 173.255.228.22 #minecraftservers.org PINGER
- 23.239.10.77 #minecraftservers.org PINGER
- 141.101.112.15 #minecraftservers.org WEBSITE
- 91.121.222.149 #minecraft-list.pl PINGER / WEBSITE
- 37.59.35.201 #minecraft-mp.com PINGER
- 37.187.79.210 #minecraft-mp.com PINGER
- 94.23.233.30 #minecraft-mp.com PINGER
- 37.187.56.174 #minecraft-mp.com PINGER
- 91.122.183.105 #minecraft-mp.com PINGER
- 162.159.251.155 #serverpact.com WEBSITE
- 107.170.91.81 #minetrack.net PINGER
- 104.28.15.2 #minetrack.net WEBSITE
- 46.116.142.198 #minestatus.net PINGER 
- 107.21.105.33 #minestatus.net WEBSITE
- 104.28.25.41 #topg.org WEBSITE
- 50.28.6.244 #PlanetMinecraft.com PINGER
- 69.172.201.208 #PlanetMinecraft.com WEBSITE

animations/*.yml

You can create as many animation configurations as you like, resulting in possibility to hot-swap them or create animation per forced host.


Example file

type: STATIC
settings:
  interval: 100
  delay: 0
  duration: 1000
favicon:
  animation: "animation.gif"
  loop: true
  style: optimized
  intervals-per-frame: 1
motd:
  first:
    intervals-per-frame: 2
    text:
    - '<scroller spacing="20" width="50" value="&3New updates: &eParkour, Factions, Survival">'
    - '<scroller spacing="20" width="50" direction="right" value="&4Visit our website: &cmacizun.me">'
  second:
    intervals-per-frame: 1
    text:
    - '<typewriter pause="20" delimiter="&r&l\>\>" frequency="4" value="&6Nothing is impossible!">'
    - '<typewriter pause="20" delimiter="&r&l\>\>" frequency="4" value="&7New gamemodes: &8Survival, Hunger Games">'
    - '<typewriter pause="20" delimiter="&r&l\>\>" frequency="4" value="&eNew packages in store! &6Check it out!">'
status-bar:
  enabled: true
  intervals-per-frame: 1
  text:
  - 'Players: &7<server value="onlineplayers">&6/&7<server value="maxplayers">'
player-data:
  enabled: true
  '1':
    intervals-per-frame: 4
    text:
    - '&7Animated MOTD'
    - '&cAnimated MOTD'
  '2':
    intervals-per-frame: 4
    text:
    - '&cCreated by:'
    - '&4Created by:'
  '3':
    intervals-per-frame: 4
    text:
    - '&3maciekmm <maciekmm.net>'
    - '&amaciekmm <maciekmm.net>'
  '4':
    intervals-per-frame: 4
    text:
    - '&3samczsun <samczsun.com>'
    - '&asamczsun <samczsun.com>'
  '5':
    intervals-per-frame: 4
    text:
    - '&7Ping: <server value="ping">ms'
    - '&7Ping: <server value="ping">ms'
  '6':
    intervals-per-frame: 4
    text:
    - '<scroller spacing="5" width="20" value="This is some &ascrolling &rtext">'

type
type: STATIC

There are two types of animation:

  • STATIC - Does not support player-based variables, is mostly used for players for which player data has not been collected yet. You can use STATIC animation in dynamic as stated in config.yml
  • DYNAMIC- Does support player-based variables, but is limited to players that have already been on server (counting from plugin installation). You cannot use DYNAMIC in static field as stated in config.yml
settings
settings:
  interval: 100
  delay: 0
  duration: 1000
interval

Warning

Lowering interval might cause performance issues

Interval is represented in milliseconds (1 second = 1000 milliseconds), value 100 means that motd will be updated 10 times a second.

delay
Delay after animation will start.
duration
Amount of intervals after which animation stops.
favicon
favicon:
  animation: "animation.gif"
  loop: true
  style: optimized
  intervals-per-frame: 1
animation
Favicon files used in animation. Using .gif will result in animated icon, .png will result in static one. Files have to be placed in main plugin folder.
loop
Whether animation should loop or only be played once
style
There are two styles normal and optimized, you have to choose one that corresponds to process how your .gif was built. If your icon does not animate properly switch to other mode.
intervals-per-frame
Defines how fast gif will update, as we can’t rely on .gif frames properties you have to specify fixed framerate here, setting it to 1 with interval in settings set to 100 results in 10fps.
section
status-bar:
  enabled: true
  intervals-per-frame: 1
  text:

Every animation part has a section where you can specify how animation looks like.

intervals-per-frame
Defines how fast text line will update, setting it to 2 will result in update every second interval.
text
Defines what text will show, you can use placeholders, animation tags and own text here, you are only limited by your imagination.
enabled

Note

Enabled option does not work in motd lines.

Specify whether or not change default value at all.

motd
  intervals-per-frame: 1
motd:
  first:
    intervals-per-frame: 2
    text:
    - '<scroller spacing="20" width="50" value="&3New updates: &eParkour, Factions, Survival">'
    - '<scroller spacing="20" width="50" direction="right" value="&4Visit our website: &cmacizun.me">'
  second:
    intervals-per-frame: 1
    text:
    - '<typewriter pause="20" delimiter="&r&l\>\>" frequency="4" value="&6Nothing is impossible!">'
    - '<typewriter pause="20" delimiter="&r&l\>\>" frequency="4" value="&7New gamemodes: &8Survival, Hunger Games">'

Motd divides in two similar sections first and second corresponding to lines. See section.

status-bar
    - '<typewriter pause="20" delimiter="&r&l\>\>" frequency="4" value="&eNew packages in store! &6Check it out!">'
status-bar:
  enabled: true
  intervals-per-frame: 1
  text:

Status bar is the place where normally player count is shown, you can put whatever you want there! See section.

player-data:
  - 'Players: &7<server value="onlineplayers">&6/&7<server value="maxplayers">'
player-data:
  enabled: true
  '1':
    intervals-per-frame: 4
    text:
    - '&7Animated MOTD'
    - '&cAnimated MOTD'
  '2':
    intervals-per-frame: 4
    text:
    - '&cCreated by:'
    - '&4Created by:'
  '3':
    intervals-per-frame: 4
    text:
    - '&3maciekmm <maciekmm.net>'
    - '&amaciekmm <maciekmm.net>'
  '4':
    intervals-per-frame: 4
    text:
    - '&3samczsun <samczsun.com>'

Player data divides into sections enumerated by line number, See section.

Variables

Variables are the most powerful configuration options in AnimatedMOTD, giving you ability to animate text using built-in frame generators.


Structure

<variablename value="value" setting="setting">

Variables are represented by non-closed xml tags with value option being required by default.

Variables are divided into:

Placeholders

Platform wide placeholders
<server value=”?”>
justonemore

Adds 1 to player count.

<server value="justonemore" arg="world/server">
arg (Optional)
World (Spigot) or server (BungeeCord) to take slots from. If not set, sums players online from worlds/servers.

onlineplayers

Player count globally or on specific world/server.

<server value="onlineplayers" arg="world/server">
arg (Optional)
World (Spigot) or server (BungeeCord) to take slots from. If not set, sums players online from worlds/servers.

maxplayers

Maximum player cap

<server value="maxplayers">

ping

Connection ping

<server value="ping">
Bukkit placeholders
<player value=”?”>

Warning

You can only use these placeholders in DYNAMIC animations.

name

Name (IGN) of player.

<player value="name">

displayname

Displayname (set by permission plugin or essentials) of player.

<player value="displayname">

listname

Name of player shown in tab.

<player value="listname">

world

World in which player currently is or is about to respawn in.

<player value="world">

x

X axi of location player has logged off from.

<player value="x">

y

Y axi of location player has logged off from.

<player value="y">

z

Z axi of location player has logged off from.

<player value="z">

yaw

yaw of location player has logged off from.

<player value="yaw">

pitch

pitch of location player has logged off from.

<player value="pitch">

firstplayed

Date when place has logged on to the server for the first time, uses config.yml formatting for style formatting.

<player value="firstplayed">

lastplayed

Date when place has logged on to the server lately, uses config.yml for style formatting.

<player value="lastplayed">

health

Current health of player’s character.

<player value="health">

hunger

Current hunger of player’s character.

<player value="hunger">

totalxp

Total experience amount of player’s character.

<player value="totalxp">

levelxp

Current level experience of player’s character.

<player value="levelxp">

ip

IP address of current connection.

<player value="ip">

gamemode

Current gamemode of player’s character.

<player value="gamemode">

<stats value=”?”>

Warning

You can only use these placeholders in DYNAMIC animations.

If you are interested in using these placeholders take a look at Statistic and simply lowercase them.

Example
<stats value="leave_game">

Gives you number of rage quits.

Bungee placeholders
<player value=”?”>

Warning

You can only use these placeholders in DYNAMIC animations.

name

Name (IGN) of player.

<player value="name">

reconnect_server

Name of server player is about to connect to.

<player value="reconnect_server">

Animations

Animations are simply shortcuts for creating multiple frames.

Table of Contents


typewriter

Typewriter gives you nice writing effect.

<typewriter pause="20" value="Text" delimiter=">>" frequency="3">
pause
Pause that occurs after type writing completes.
value
Text to typewrite.
delimiter
“Cursor” attached to the end of string while typewriting.
frequency
Blinking frequency of delimiter in intervals, giving real cursor feeling.
Example:
//Image will be here

scroller

Scroller scrolls a text, imagine news bar when watching TV, it’s exactly like that!

<scroller value="text" spacing="10" width="30" direction="right">
value
Text to scroll.
spacing
Amount of spaces attached to the end of value.
direction
Direction to which text scrolls.
width

Warning

Setting width too high may cause line glitches.

Width of scroller in characters.

Example:
//Image will be here

for

For is basically loop or code executed x times. Our animation gives you access to index, so you can make countdowns for example.

<for length="3" value="Counting $x">
<for start="2" end="10" value="Counting $x">
length

Warning

Specifying length precludes start and end.

Specifying length causes animation to count from 0 to value length was set.

start
end

Warning

You have to specify both of these options in order to make it work correctly.

Defines start and end index for animation.

Example:
//Image will be here

Commands

There’s not many commands at the moment, we plan on introducing commands changing motd on the fly, but making them user-friendly with current setup is challenging. We only provide admin commands, all of them can be used from console.


/animatedmotd reload

Permission: animatedmotd.reload

Reload command is used for reloading:

Output:
[AnimatedMOTD] Config reloaded

/animatedmotd debug

Permission: animatedmotd.debug

The command is used for debugging, it’s required to use this command and provide it’s outcome in order to ask for help. It scans your logs and looks for exceptions, it also includes your current plugin version as well as configuration.

Example output:
http://paste.ubuntu.com/9956527/

/animatedmotd troubleshoot

Warning

This command is experimental

Permission: animatedmotd.troubleshoot

This command helps you troubleshoot your errors based on frequent mistakes people make when configuring our plugin.

Terms of Service

By buying this plugin, you state you agree with our terms of service. Furthermore, you imply that you will at least attempt some avenue of support such as a private message or our helpdesk before leaving a stupid review. The review section is not the first step in getting a bug fixed. It is the last.

  1. You are not permitted to redistribute this plugin in any form.
  2. You are not permitted to decompile or modify the plugin in any form.
  3. You will not be given any refunds. What you see is what you get.
    1. The exception to this are bugs, which we will fix free-of-charge.
  4. You will not file a chargeback, dispute, or perform any similar action. Doing so will result in your licence revoked along with further action from SpigotMC
    1. The exception to this is if you have already contacted SpigotMC, and they have approved a chargeback. If this is the case, we will gladly refund your money
  5. We reserve the right to change the price whenever we wish.
  6. We are not responsible for future versions (>1.8.2-pre1) which may disable this feature.

Indices and tables