MaintenanceMode - Bungee AND Spigot support! [1.8-1.13] 2.4

Lets you activate a maintenance mode on your BungeeCord as well as Spigot server!

  1. KennyTV
    Tested Minecraft Versions:
    • 1.8
    • 1.9
    • 1.10
    • 1.11
    • 1.12
    • 1.13
    Source Code:
    https://github.com/KennyTV/Maintenance
    Contributors:
    KennyTV
    This plugin lets you activate a maintenance mode on your BungeeCord as well as Spigot server, which will prevent players without a permission to join the server.
    Whatever version you want to use, just place the plugin inside your plugin folder of your server running Spigot or BungeeCord! (the BungeeCord version will manage maintenance for the whole proxyserver, putting it on single Spigot servers will only activate it on the specific ones).
    You can choose, how long you want maintenance mode to be enabled or start a timer to enable it after a certain amount of minutes with global broadcasts in between.
    Messages are customizable, you can also customize the playercount and even the server-icon (with a "maintenance-icon.png" in the server directory, not the plugin directory). It could look like this:


    Screenshot_1.jpg

    ... You can also start timers, which will enable or disable maintenance mode after the time is up! And if you want to, you can even have the time until maintenance is disabled again shown in your maintenance motd by including the '%TIMER%' variable into the pingmessage!
    Other variables and tricks are explained in the configuration file shown below, so have a look at it!
    Furthermore, you can add players to a maintenance whitelist, to have them join while you're working on your server!
    Nearly all messages are changeable via the language.yml and the maintenance motd can be edited via ingame commands, so you won't have to go to the config every time!


    IMPORTANT: If using the plugin on a Spigot server, the plugin ProtocolLib is required to use MaintenanceMode to its full extend.

    Found any bugs or want a new feature?
    > Use the issue tracker


    generatedtext.png

    • /maintenance <on/off> will set the status of the maintenance mode
    • /maintenance reload reloads the config and maintenance-icon file
    • /maintenace <add/remove> <player> allows specific players to join on the server when maintenance is enabled
    • /maintenance whitelist returns a list of all players on the
    • maintenance whitelist
    • /maintenance starttimer <minutes> will enable maintenance mode after the time is up
    • /maintenance endtimer <minutes> will enable maintenance mode for the given time in minutes. After the time is up, it'll be disabled again
    • /maintenance timer abort cancels a running start-/endtimer
    • /maintenance setmotd <index> <1/2> <message> sets a motd for maintenance mode
    • /maintenance motd lists the currently set maintenance motds
    • /maintenance update remotely downloads the newest version of the plugin onto your server
    On BungeeCord you can only add players to the whitelist via adding their UUID to the config or by using the add command while they are online, because BungeeCord doesn't have OfflinePlayer support as Spigot has.


    generatedtext (1).png

    • maintenance.command - use the "/maintenance" command (also required to use the subcommands)
    • maintenance.toggle - use the "/maintenance <on/off>" commands
    • maintenance.reload - use the "/maintenance reload" command
    • maintenance.update - use the "/maintenance <update/forceupdate>" commands
    • maintenance.timer - use the "/maintenance <starttimer/endtimer> <minutes>" and "/maintenance timer abort" commands
    • maintenance.whitelist.add - use the "/maintenance add <player>" command
    • maintenance.whitelist.remove - use the "/maintenance remove <player>" command
    • maintenance.whitelist.list - use the "/maintenance whitelist" command
    • maintenance.setmotd - use the "/maintenance setmotd <index> <1/2> <message>" command
    • maintenance.motd - use the "/maintenance motd" command
    • maintenance.bypass - join the server during maintenance
    • maintenance.joinnotification - if enabled: sends a notification to you if a player tries to join the server while maintenance is enabled

    IMPORTANT - If you are using the plugin on your proxyserver: You have to have these permissions on the proxy, not on the Spigot servers! This can be done by putting them into the Bungee config.yml as seen here:
    ciwvo.png
    This or you have a permissions plugin, which also works across the Proxy/Bungee.
    If you use it on a Spigot server, normal permission plugins should work (as well as being an operator).


    generatedtext (2).png

    If you are using the Spigot version of the plugin, you have to have ProtocolLib installed to use the custom server-icon and the playercount-messages! The rest however is also without it accessable.
    For the Bungee version you don't need to have any other plugins installed.

    Note that the Spigot version doesn't have MySQL support.
    Code (Text):
    # MaintenanceBungee Plugin by KennyTV
    # Version 2.4

    # Enables maintenance-mode.
    enable-maintenance-mode: false

    # The message shown in the multiplayer server list motd.
    # If you put in multiple entries, one of them will be chosen randomly on every ping.
    pingmessages:
      - "&cMaintenance mode!%NEWLINE%&6We will be back soon!"
    #- "Another entry"

    # If set to true, the message below will be shown at the top right corner of the server in the serverlist,
    # where the playercount would normally be displayed.
    # If set to false, the normal playercount will be shown.
    # Alternatively you can use '%ONLINE%' and '%MAX% if you want to include the playercount in a custom message (e.g. '&cMaintenance &7%ONLINE%&8/&7%MAX%').
    enable-playercountmessage: true
    playercountmessage: "&4Maintenance"

    # Is shown when you move your mouse above the text at the top right corner of the server in the serverlist,
    # where the playercount would normally be displayed.
    playercounthovermessage: "&cCurrently under%NEWLINE%&cmaintenance"

    # Is shown when a player tries to join while maintenance is enabled and they don't have the permission to bypass it.
    kickmessage: "&cThe server is currently under maintenance!%NEWLINE%Try again later!"

    # If using the timer command: In what intervalls before enabling/disabling maintenance there will be a broadcast.
    timer-broadcast-for-seconds: [1200, 900, 600, 300, 120, 60, 30, 20, 10, 5, 4, 3, 2, 1]

    # If set to true, players with the maintenance.joinnotification permission will receive a message,
    # that a player tried to join the server while maintenance is enabled.
    send-join-notification: false

    # If set to true, the server icon will be changed to maintenance-icon.png in the Bungee main/base-folder.
    custom-maintenance-icon: false

    # Only available in the Bungee version of the plugin.
    # Only enable MySQL if you really know what you are doing.
    mysql:
      use-mysql: false
      host: host
      port: 3306
      database: database
      username: username
      password: password
      # A new table with this name will be created on first startup when 'use-mysql' is set to true.
      table: maintenance_settings
      # Requests to the database will only be made at least x seconds after the last request,
      # so there won't be a request on every single ping on a server with many players.
      # Set this to 0 to make a database request on every single ping.
      update-interval: 15
    Code (Text):
    # Maintenance Plugin by KennyTV
    # Don't remove words inbetween the '%' if you don't exactly know why you're doing it

    noPermission: "&cYou do not have the permission to execute that command."
    reload: "&8[&eMaintenance&8] &aReloaded config, whitelistedplayers, language file and the maintenance icon."
    alreadyEnabled: "&8[&eMaintenance&8] &cMaintenance already is enabled!"
    alreadyDisabled: "&8[&eMaintenance&8] &cMaintenance already is disabled!"
    maintenanceActivated: "&8[&eMaintenance&8] &6Maintenance mode is now activated."
    maintenanceDeactivated: "&8[&eMaintenance&8] &6Maintenance mode is now deactivated."
    starttimerUsage: "&8[&eMaintenance&8] &c/maintenance starttimer <minutes>"
    starttimerStarted: "&8[&eMaintenance&8] &aStarted timer: &7Maintenance mode will be activated in &6%TIME%&7."
    starttimerBroadcast: "&8[&eMaintenance&8] &7Maintenance mode will be enabled in &6%TIME%&7."
    endtimerUsage: "&8[&eMaintenance&8] &c/maintenance endtimer <minutes>"
    endtimerStarted: "&8[&eMaintenance&8] &aStarted timer: &7Maintenance mode will be deactivated in &6%TIME%&7."
    endtimerBroadcast: "&8[&eMaintenance&8] &7Maintenance mode will be disabled in &6%TIME%&7."
    timerTooLong: "&8[&eMaintenance&8] &cThe number has to be less than 40320 (28 days)!"
    timerAlreadyRunning: "&8[&eMaintenance&8] &cThere's already a starttimer scheduled!"
    timerNotRunning: "&8[&eMaintenance&8] &cThere's currently no running timer."
    timerCancelled: "&8[&eMaintenance&8] &cThe current timer has been disabled."
    joinNotification: "&8[&eMaintenance&8] &e%PLAYER% &ctried to join the server."
    updateDownloading: "&8[&eMaintenance&8] &c&lDownloading update..."
    updateFinished: "&8[&eMaintenance&8] &a&lThe update was successful! To prevent issues with tasks and to complete the update, you have to restart the server!"
    updateFailed: "&8[&eMaintenance&8] &4&lUpdate failed!"
    setMotdUsage: "&8[&eMaintenance&8] &c/maintenance setmotd <index> <1/2> <message>"
    setMotdLineError: "&8[&eMaintenance&8] &cThe second argument has to be the line number (1 or 2)!"
    setMotdIndexError: "&8[&eMaintenance&8] §cYou currently have %MOTDS% motds, so you have to pick a number between 1 and %NEWAMOUNT%."
    setMotd: "&8[&eMaintenance&8] &aSet line %LINE% of the %INDEX%. maintenance motd to %MOTD%"
    removeMotdUsage: "&8[&eMaintenance&8] &c/maintenance removemotd <index>"
    removeMotdError: "&8[&eMaintenance&8] &cYou only have one motd, so you can't remove any!"
    removedMotd: "&8[&eMaintenance&8] &aRemoved motd number %INDEX%."
    motdList: "&8[&eMaintenance&8] &7List of your maintenance motds:"
    whitelistEmtpy: "&8[&eMaintenance&8] &cThe maintenance whitelist is empty! Use '/maintenance add <player>' to add someone!"
    whitelistEmptyDefault: "&8[&eMaintenance&8] &cUse '/maintenance add <player>' to add someone. Alternatively, you can add the uuid of a player to the WhitelistedPlayers.yml as seen in the example in the file!"
    whitelistedPlayers: "&8[&eMaintenance&8] &6Whitelisted players for maintenance:"
    whitelistedPlayersFormat: "&8- &e%NAME% &8(&7%UUID%&8)"
    whitelistNotFound: "&8[&eMaintenance&8] &cThis player is not in the maintenance whitelist!"
    whitelistAlreadyAdded: "&8[&eMaintenance&8] &b%PLAYER% &calready is in the maintenance whitelist!"
    whitelistAdded: "&8[&eMaintenance&8] &aAdded &b%PLAYER% &ato the maintenance whitelist!"
    whitelistRemoved: "&8[&eMaintenance&8] &aRemoved &b%PLAYER% &afrom the maintenance whitelist!"
    playerNotOnline: "&8[&eMaintenance&8] &cThere's no player online with that name."
    playerNotFound: "&8[&eMaintenance&8] &cNo player with this name has played on this server before."

    second: "second"
    seconds: "seconds"
    minute: "minute"
    minutes: "minutes"
    hour: "hour"
    hours: "hours"


    generatedtext.png
    If you have the ServerListPlus plugin on your BungeeCord/Spigot server, MaintenanceMode will toggle its status. If you enable maintenance, the ServerListPlus motd will be disabled and then reenabled, when you disable maintenance to prevent any issues with them overriding each other.


    generatedtext.png
    Only available for the BungeeCord version!
    By enabling MySQL in the config, you can even connect multiple proxy-servers to a set value in your database, so you won't have to enable/disable maintenance on each proxy by hand!
    The table will be automatically created by the plugin.



    A rating or a review would be highly appreciated and a creation of one (and also for a spigot account) is fairly easy! :)

Recent Updates

  1. Version 2.4 Changelog
  2. Version 2.3.1 Changelog
  3. Version 2.3 Changelog

Recent Reviews

  1. Zuish
    Zuish
    5/5,
    Version: 2.4
    Me encanto este plugin unos de los mejores! tengo una pregunta..
    ¿Si es para bungee hay que ponerlo ahí? o en cada servidor??
    1. KennyTV
      Author's Response
      Thanks I guess
      (With the power of Google Translator) En bungee, entonces el modo se activa para todos los servidores
  2. FernPlayzYT
    FernPlayzYT
    5/5,
    Version: 2.4
    Just spam to send this review, dont mind me. Great plugin btw, its really great let me just write this amount of letters.
    1. KennyTV
      Author's Response
      Thank you :p
  3. raphigames31
    raphigames31
    4/5,
    Version: 2.3.1
    hello please fix that in the futur update ;)

    > 10:06:07 [SEVERE] [n1776] <-> ServerConnector [Lobby01] - encountered exception
    java.lang.IllegalArgumentException: Unexpected packet received during server login process!
    4100
    at net.md_5.bungee.ServerConnector.handle(ServerConnector.java:130)
    at net.md_5.bungee.netty.HandlerBoss.channelRead(HandlerBoss.java:111)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:297)
    at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:413)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:265)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965)
    at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:808)
    at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:408)
    at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:308)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
    at java.lang.Thread.run(Thread.java:748)
    > 10:06:07 [INFO] [n1776] <-> ServerConnector [Lobby01] has disconnected
    1. KennyTV
      Author's Response
      Please use the issue tracker or at least the discussion section for bugs.
      This error message also doesnt seem to have any trace to my plugin, are you shure it is the full error? Maintenance version? Bungee version? (-> Discussion section)
  4. Flash08
    Flash08
    5/5,
    Version: 2.3.1
    This Plugin is very good but i have a bug for you:

    if the Maintenance mode is already on you can start a timer and you can enable/disable the mode if it is already on/off
    1. KennyTV
      Author's Response
      Thanks, but please describe the bug with a chain of commands/more detailled in the discussion section, please :p
  5. Nickoos
    Nickoos
    5/5,
    Version: 2.3
    Awesome work.
    Work fine in 1.13 :)
    ---------------------------------------------------
    1. KennyTV
      Author's Response
      Thanks. :D
  6. Auntex
    Auntex
    5/5,
    Version: 2.3
    Excellent plugin! I'm using this plugin over a year without bugs =).
    ======================================================
    1. KennyTV
      Author's Response
      Thanks <3
  7. victoret7
    victoret7
    5/5,
    Version: 2.3
    Over a year from my last review and a lot of updates i'm still using this plugin that works like a charm and only improves with a lot of updates. Developer could actually make this resource premium because of the support that gives to the plugin. I would consider donating again :)
    1. KennyTV
      Author's Response
      Thank you! Means a lot :D
  8. FlenscrafterHD
    FlenscrafterHD
    5/5,
    Version: 2.3
    Mega geiles Plugin! Der Versioncheck (/maintenance update)gefällt mir sehr gut!
    Ich würde sowas auch gerne in meine Plugins einbauen... Kannst du mit erklären wie?
    Ansonsten mach weiter so!
    1. KennyTV
  9. Commanderblue1
    Commanderblue1
    5/5,
    Version: 2.3
    Gutes Plugin, aber ich muss was ScienceCode geschrieben hat auch noch etwas gestehen. Ich weiss das dieses Thema hier nichts zu verloren hat aber bitte lies es trotzdem.
    Immer wenn ich auf dem Netzwerk Hackern reporte die ZB. Flyhack verwenden werden diese immer abgelehnt, von dieser Zeit wusste ich nicht wie dumm man sein muss, um einen Flyhack zu entdecken. Ein Report wurde von mir angenommen und ein bestimmter Supporter nahm natürlich den Report an. Ab dieser sah ich wie der Hacker einfach zu meinem Bett flog und der Supporter reagierte nicht und lehnte den Support ab!!! Ab diesem Zeitpunkt gab ich auf und schwörte nun niemals auf diesem Netzwerk zu spielen. Nun nur als Info, ob du es gelesen hast oder nicht juckt mich nicht, den ich will nur das ihr euren Support verbessert und das in einer geweissene Zeit.

    Ansonsten mit Grüssen.
    Commanderblue1
    1. KennyTV
      Author's Response
      Danke für die Review. ^^
      Ich werd mal gucken was ich machen kann
  10. Minestick
    Minestick
    5/5,
    Version: 2.2.2
    Very nice maintenance plugin!
    May we customize the server icon shown during maintenance?