Compare commits

...
32 Commits
Author SHA1 Message Date
KennyTV eecd59b387 2.2.1 release 2018-04-17 04:46:22 +02:00
KennyTV ff7d8e0293 Project/pom changes 2018-04-16 20:54:21 +02:00
KennyTV 19c6d77a2c Updated API 2018-04-16 19:50:50 +02:00
KennyTV e002aa34e9 Comment line change 2018-04-16 16:35:13 +02:00
KennyTV 865e53a4a8 MySQL change 2018-04-16 15:31:50 +02:00
KennyTV b8c652b7fb MySQL fix 2018-04-16 14:39:40 +02:00
KennyTV c4080f82dc More cleanup 2018-04-16 14:18:19 +02:00
KennyTV 1a33497e8f Fixed doc typo 2018-04-15 15:07:19 +02:00
KennyTV f8353b8eda Various stuff 2018-04-15 13:53:42 +02:00
KennyTV 4980ad54ec Setmotd fixes 2018-04-15 13:38:21 +02:00
KennyTV 5363305411 Setmotd fixes 2018-04-15 13:37:07 +02:00
KennyTV 6ff47619ad Added setmotd command 2018-04-15 13:17:58 +02:00
KennyTV 69315a3f74 Create ISSUE_TEMPLATE.md 2018-04-14 19:09:34 +02:00
KennyTV 8b1ddba672 Added import 2018-04-14 18:46:24 +02:00
KennyTV bf63f0e209 MySQL improvements 2018-04-14 12:25:57 +02:00
KennyTV 450c923d24 Fixes 2018-04-14 12:06:29 +02:00
KennyTV 9a922a6df5 Small ServerListPlus integration and command fix 2018-04-14 12:00:46 +02:00
KennyTV 08a5a9a021 Fixes 2018-04-13 23:28:15 +02:00
KennyTV 61ad7d8533 Code cleanup 2018-04-13 22:56:41 +02:00
KennyTV 52d2b3c096 Automatically create sql table if non existing 2018-04-13 20:12:32 +02:00
KennyTV b0a69cc048 Moved resources 2018-04-13 19:26:45 +02:00
KennyTV 74e445a62e Added license and bumped version to 2.2.1-SNAPSHOT 2018-04-13 19:24:16 +02:00
KennyTV 91219202b2 Updated README 2018-04-05 23:50:36 +02:00
KennyTV a3545c83a0 Removed first commit errors 2018-04-05 23:45:39 +02:00
KennyTV 31baf91e8f Code commit 2018-04-05 23:43:25 +02:00
KennyTV 214cd53751 Update README.md 2018-03-17 11:43:36 +01:00
KennyTV 2be16882c7 Update README.md 2018-03-17 10:30:46 +01:00
KennyTV 75e2264b44 Update README.md 2018-03-06 21:53:08 +01:00
KennyTV fd7a0eb6a5 Update README.md 2018-03-06 21:52:14 +01:00
KennyTV 177115f144 Add files via upload 2018-03-06 21:39:49 +01:00
KennyTV edbe31dc9c Create README.md 2018-03-06 21:39:02 +01:00
KennyTV 21a2f9ef2f Init 2018-02-16 18:39:21 +01:00
44 changed files with 434 additions and 362 deletions

No files matched your search

+13
View File
@@ -0,0 +1,13 @@
## Issue
Include here how the problem occured and how it's reproduceable.
If present, also paste the entire error message from the console, preferably via a https://hastebin.com/ link.
## Necessary server information
**Running on**: <BungeeCord/Bukkit>
**Maintenance version**: <>
## Other information
**Other motd changing plugins**: <>
**ProtocolLib version**: <>
+2 -2
View File
@@ -1,4 +1,4 @@
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
@@ -671,4 +671,4 @@ into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
Binary file not shown.
+1 -1
View File
@@ -6,7 +6,7 @@
<parent>
<artifactId>maintenance-base</artifactId>
<groupId>eu.kennytv</groupId>
<version>2.2</version>
<version>2.2.1</version>
</parent>
<artifactId>maintenance-api</artifactId>
@@ -3,7 +3,7 @@ package eu.kennytv.maintenance.api;
public interface IMaintenance {
/**
* Enabled/disabled maintenance mode.
* Enables/disables maintenance mode.
* If enabled, all non-permitted players will be kicked.
* <p>
* If using the BungeeCord version and MySQL is enabled,
@@ -40,7 +40,9 @@ public interface ISettings {
*
* @param name name of the player to remove in lowercase letters
* @return true if removing the player was successful
* @deprecated if a player changes their name, the list will still contain their old one
*/
@Deprecated
boolean removeWhitelistedPlayer(String name);
/**
@@ -1,6 +1,7 @@
package eu.kennytv.maintenance.api;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
/**
* Utility class to get the {@link IMaintenance} instance for the Spigot/Bukkit version of the plugin.
@@ -19,7 +20,7 @@ public final class MaintenanceSpigotAPI {
* @return {@link IMaintenance} instance
*/
public static IMaintenance getAPI() {
final org.bukkit.plugin.Plugin maintenance = Bukkit.getPluginManager().getPlugin("MaintenanceSpigot");
final Plugin maintenance = Bukkit.getPluginManager().getPlugin("MaintenanceSpigot");
if (maintenance == null)
Bukkit.getLogger().warning("Could not get instance of MaintenanceSpigot!");
@@ -7,10 +7,10 @@
<parent>
<groupId>eu.kennytv</groupId>
<artifactId>maintenance-base</artifactId>
<version>2.2</version>
<version>2.2.1</version>
</parent>
<artifactId>maintenancebungee</artifactId>
<artifactId>maintenance-bungee</artifactId>
<name>MaintenanceBungee</name>
<repositories>
@@ -24,7 +24,7 @@
<dependency>
<groupId>eu.kennytv</groupId>
<artifactId>maintenance-core</artifactId>
<version>2.2</version>
<version>${parent.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -42,7 +42,7 @@
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.7.8</version>
<version>3.1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
@@ -9,16 +9,10 @@ import java.io.File;
* @since 2.1
*/
public final class MaintenanceBungeeBase extends Plugin {
private MaintenanceBungeePlugin plugin;
@Override
public void onEnable() {
plugin = new MaintenanceBungeePlugin(this);
}
@Override
public void onDisable() {
plugin.onDisable();
new MaintenanceBungeePlugin(this);
}
File getPluginFile() {
@@ -4,6 +4,7 @@ import eu.kennytv.maintenance.api.IMaintenance;
import eu.kennytv.maintenance.api.ISettings;
import eu.kennytv.maintenance.api.MaintenanceBungeeAPI;
import eu.kennytv.maintenance.bungee.command.MaintenanceBungeeCommand;
import eu.kennytv.maintenance.bungee.command.MaintenanceBungeeCommandBase;
import eu.kennytv.maintenance.bungee.listener.PostLoginListener;
import eu.kennytv.maintenance.bungee.listener.ProxyPingListener;
import eu.kennytv.maintenance.bungee.metrics.MetricsLite;
@@ -21,7 +22,7 @@ import java.util.concurrent.TimeUnit;
* @author KennyTV
* @since 1.0
*/
public final class MaintenanceBungeePlugin extends MaintenanceModePlugin implements IMaintenance {
public final class MaintenanceBungeePlugin extends MaintenanceModePlugin {
private final MaintenanceBungeeBase plugin;
private final SettingsBungee settings;
@@ -36,7 +37,8 @@ public final class MaintenanceBungeePlugin extends MaintenanceModePlugin impleme
final PluginManager pm = getProxy().getPluginManager();
pm.registerListener(plugin, new PostLoginListener(this, settings));
pm.registerListener(plugin, new ProxyPingListener(plugin, settings));
pm.registerCommand(plugin, new MaintenanceBungeeCommand(this, settings));
final MaintenanceBungeeCommand maintenanceCommand = new MaintenanceBungeeCommand(this, settings);
pm.registerCommand(plugin, new MaintenanceBungeeCommandBase(maintenanceCommand));
new MetricsLite(plugin);
@@ -44,23 +46,18 @@ public final class MaintenanceBungeePlugin extends MaintenanceModePlugin impleme
final Plugin serverListPlus = pm.getPlugin("ServerListPlus");
if (serverListPlus != null) {
serverListPlusHook = new ServerListPlusHook(((ServerListPlusPlugin) serverListPlus).getCore());
serverListPlusHook.setEnabled(!settings.isMaintenance());
plugin.getLogger().info("Enabled ServerListPlus integration!");
}
}
@Override
public void onDisable() {
if (settings.getMySQL() != null)
settings.getMySQL().close();
}
@Override
public void setMaintenance(final boolean maintenance) {
if (settings.getMySQL() != null) {
settings.setMaintenanceToSQL(maintenance);
} else {
settings.setMaintenance(maintenance);
settings.setConfigBoolean("enable-maintenance-mode", maintenance);
settings.setToConfig("enable-maintenance-mode", maintenance);
settings.saveConfig();
settings.reloadConfigs();
}
@@ -1,6 +1,5 @@
package eu.kennytv.maintenance.bungee;
import eu.kennytv.maintenance.api.ISettings;
import eu.kennytv.maintenance.bungee.mysql.MySQL;
import eu.kennytv.maintenance.core.Settings;
import net.md_5.bungee.api.ChatColor;
@@ -13,13 +12,12 @@ import java.sql.SQLException;
import java.util.List;
import java.util.UUID;
public final class SettingsBungee extends Settings implements ISettings {
private static final String UPDATE = "INSERT INTO %s (setting, value) VALUES (?, ?) ON DUPLICATE KEY UPDATE value = ?";
private final MaintenanceBungeeBase plugin;
public final class SettingsBungee extends Settings {
private final String updateQuery;
private final String maintenanceQuery;
private final MySQL mySQL;
private final String mySQLTable;
private final MaintenanceBungeeBase plugin;
private Configuration config;
private Configuration whitelist;
@@ -29,18 +27,23 @@ public final class SettingsBungee extends Settings implements ISettings {
final Configuration mySQLSection = config.getSection("mysql");
if (mySQLSection.getBoolean("use-mysql", false)) {
// Needed: One column named "setting" (primary key), another named "value".
plugin.getLogger().info("Trying to open database connection...");
mySQL = new MySQL(mySQLSection.getString("host"),
mySQLSection.getInt("port"),
mySQLSection.getString("username"),
mySQLSection.getString("password"),
mySQLSection.getString("database"));
mySQLTable = mySQLSection.getString("table");
// Varchar as the value regarding the possibility of saving stuff like the motd as well in future updates
final String mySQLTable = mySQLSection.getString("table");
mySQL.executeUpdate("CREATE TABLE IF NOT EXISTS " + mySQLTable + " (setting VARCHAR(16) PRIMARY KEY, value VARCHAR(255))");
updateQuery = "INSERT INTO " + mySQLTable + " (setting, value) VALUES (?, ?) ON DUPLICATE KEY UPDATE value = ?";
maintenanceQuery = "SELECT * FROM " + mySQLTable + " WHERE setting = ?";
plugin.getLogger().info("Done!");
} else {
mySQL = null;
mySQLTable = null;
updateQuery = null;
maintenanceQuery = null;
}
}
@@ -141,16 +144,18 @@ public final class SettingsBungee extends Settings implements ISettings {
}
@Override
public void setConfigBoolean(final String path, final boolean var) {
public void setToConfig(final String path, final Object var) {
config.set(path, var);
}
@Override
public boolean isMaintenance() {
if (mySQL != null) {
mySQL.executeQuery("SELECT * FROM " + mySQLTable + " WHERE setting LIKE ?", rs -> {
mySQL.executeQuery(maintenanceQuery, rs -> {
try {
maintenance = rs.next() && Boolean.parseBoolean(rs.getString("value"));
if (rs.next())
maintenance = Boolean.parseBoolean(rs.getString("value"));
rs.close();
} catch (final SQLException e) {
e.printStackTrace();
}
@@ -161,9 +166,10 @@ public final class SettingsBungee extends Settings implements ISettings {
}
public void setMaintenanceToSQL(final boolean maintenance) {
plugin.getProxy().getScheduler().runAsync(plugin, () ->
mySQL.executeUpdate(String.format(UPDATE, mySQLTable), res -> {
}, "maintenance", String.valueOf(maintenance), String.valueOf(maintenance)));
plugin.getProxy().getScheduler().runAsync(plugin, () -> {
final String s = String.valueOf(maintenance);
mySQL.executeUpdate(updateQuery, "maintenance", s, s);
});
this.maintenance = maintenance;
}
@@ -0,0 +1,72 @@
package eu.kennytv.maintenance.bungee.command;
import eu.kennytv.maintenance.bungee.MaintenanceBungeePlugin;
import eu.kennytv.maintenance.bungee.SettingsBungee;
import eu.kennytv.maintenance.bungee.util.ProxiedSenderInfo;
import eu.kennytv.maintenance.core.command.MaintenanceCommand;
import eu.kennytv.maintenance.core.util.SenderInfo;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.ProxiedPlayer;
public final class MaintenanceBungeeCommand extends MaintenanceCommand {
public MaintenanceBungeeCommand(final MaintenanceBungeePlugin plugin, final SettingsBungee settings) {
super(plugin, settings, "MaintenanceBungee");
}
@Override
protected void addPlayerToWhitelist(final SenderInfo sender, final String name) {
final ProxiedPlayer selected = ProxyServer.getInstance().getPlayer(name);
if (selected == null) {
sender.sendMessage(plugin.getPrefix() + "§cThere's no player online with that name.");
return;
}
if (settings.addWhitelistedPlayer(selected.getUniqueId(), selected.getName()))
sender.sendMessage(plugin.getPrefix() + "§aAdded §b" + selected.getName() + " §ato the maintenance whitelist!");
else
sender.sendMessage(plugin.getPrefix() + "§b" + selected.getName() + " §calready is in the maintenance whitelist!");
}
@Override
protected void removePlayerFromWhitelist(final SenderInfo sender, final String name) {
final ProxiedPlayer selected = ProxyServer.getInstance().getPlayer(name);
if (selected == null) {
if (settings.removeWhitelistedPlayer(name.toLowerCase()))
sender.sendMessage(plugin.getPrefix() + "§aRemoved §b" + name.toLowerCase() + " §afrom the maintenance whitelist!");
else
sender.sendMessage(plugin.getPrefix() + "§cThere is no player with that name in the maintenance whitelist!");
return;
}
if (settings.removeWhitelistedPlayer(selected.getUniqueId()))
sender.sendMessage(plugin.getPrefix() + "§aRemoved §b" + selected.getName() + " §afrom the maintenance whitelist!");
else
sender.sendMessage(plugin.getPrefix() + "§cThis player is not in the maintenance whitelist!");
}
@Override
protected void checkForUpdate(final SenderInfo sender) {
if (plugin.updateAvailable()) {
sender.sendMessage(plugin.getPrefix() + "§cNewest version available: §aVersion " + plugin.getNewestVersion() + "§c, you're still on §a" + plugin.getVersion());
sender.sendMessage(plugin.getPrefix() + "§c§lWARNING: §cYou will have to restart the proxy to prevent further issues and to complete the update!" +
" If you can't do that, don't update!");
final TextComponent tc = new TextComponent("§6× §8[§aUpdate§8]");
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/maintenance forceupdate"));
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText("§aClick here to update the plugin")));
tc.addExtra(" §8< §7Or use the command §c/maintenace forceupdate");
((ProxiedSenderInfo) sender).sendMessage(tc);
} else
sender.sendMessage(plugin.getPrefix() + "§aYou already have the latest version of the plugin!");
}
@Override
protected String getColoredString(final String message) {
return ChatColor.translateAlternateColorCodes('&', message);
}
}
@@ -0,0 +1,19 @@
package eu.kennytv.maintenance.bungee.command;
import eu.kennytv.maintenance.bungee.util.ProxiedSenderInfo;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.plugin.Command;
public final class MaintenanceBungeeCommandBase extends Command {
private final MaintenanceBungeeCommand command;
public MaintenanceBungeeCommandBase(final MaintenanceBungeeCommand command) {
super("maintenance", "", "maintenancebungee");
this.command = command;
}
@Override
public void execute(final CommandSender sender, final String[] args) {
command.execute(new ProxiedSenderInfo(sender), args);
}
}
@@ -42,7 +42,7 @@ public final class ProxyPingListener implements Listener {
else {
try {
favicon = Favicon.create(ImageIO.read(icon));
} catch (IOException | IllegalArgumentException e) {
} catch (final IOException | IllegalArgumentException e) {
plugin.getLogger().warning("§4Could not load 'maintenance-icon.png' - did you create one in your Bungee folder (not the plugins folder)?");
}
}
@@ -12,6 +12,7 @@ import java.util.function.Consumer;
public final class MySQL {
private final HikariDataSource hikariDataSource;
// Excuse me and everything to do with the MySQL stuff, I have little to no idea of how to use databases
public MySQL(final String hostname, final int port, final String username, final String password, final String database) {
final HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setMaximumPoolSize(10);
@@ -60,6 +61,11 @@ public final class MySQL {
}
}
public void executeUpdate(final String query, final Object... objects) {
executeUpdate(query, res -> {
}, objects);
}
public void close() {
if (hikariDataSource != null && !hikariDataSource.isClosed())
hikariDataSource.close();
@@ -0,0 +1,40 @@
package eu.kennytv.maintenance.bungee.util;
import eu.kennytv.maintenance.core.util.SenderInfo;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.util.UUID;
public final class ProxiedSenderInfo extends SenderInfo {
private final CommandSender sender;
public ProxiedSenderInfo(final CommandSender sender) {
this.sender = sender;
}
@Override
public UUID getUuid() {
return sender instanceof ProxiedPlayer ? ((ProxiedPlayer) sender).getUniqueId() : null;
}
@Override
public String getName() {
return sender.getName();
}
@Override
public boolean hasPermission(final String permission) {
return sender.hasPermission(permission);
}
@Override
public void sendMessage(final String message) {
sender.sendMessage(message);
}
public void sendMessage(final TextComponent textComponent) {
sender.sendMessage(textComponent);
}
}
@@ -44,6 +44,7 @@ mysql:
host: host
port: 3306
database: database
table: tablename
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
+2 -2
View File
@@ -6,7 +6,7 @@
<parent>
<artifactId>maintenance-base</artifactId>
<groupId>eu.kennytv</groupId>
<version>2.2</version>
<version>2.2.1</version>
</parent>
<artifactId>maintenance-core</artifactId>
@@ -28,7 +28,7 @@
<dependency>
<groupId>eu.kennytv</groupId>
<artifactId>maintenance-api</artifactId>
<version>2.2</version>
<version>${parent.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
@@ -1,5 +1,6 @@
package eu.kennytv.maintenance.core;
import eu.kennytv.maintenance.api.IMaintenance;
import eu.kennytv.maintenance.core.hook.ServerListPlusHook;
import java.io.*;
@@ -8,7 +9,7 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public abstract class MaintenanceModePlugin {
public abstract class MaintenanceModePlugin implements IMaintenance {
protected final String version;
protected int taskId;
protected ServerListPlusHook serverListPlusHook;
@@ -20,14 +21,12 @@ public abstract class MaintenanceModePlugin {
this.version = version;
}
public abstract void onDisable();
public abstract void setMaintenance(boolean maintenance);
@Override
public String getVersion() {
return version;
}
@Override
public boolean isTaskRunning() {
return taskId != 0;
}
@@ -57,7 +56,7 @@ public abstract class MaintenanceModePlugin {
public boolean updateAvailable() {
try {
final HttpURLConnection c = (HttpURLConnection) new URL("https://api.spigotmc.org/legacy/update.php?resource=40699").openConnection();
final String newVersion = new BufferedReader(new InputStreamReader(c.getInputStream())).readLine().replaceAll("[a-zA-Z ]", "");
final String newVersion = new BufferedReader(new InputStreamReader(c.getInputStream())).readLine().replaceAll("[a-zA-Z -]", "");
final boolean available = !newVersion.equals(version);
if (available)
@@ -2,13 +2,14 @@ package eu.kennytv.maintenance.core;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import eu.kennytv.maintenance.api.ISettings;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
public abstract class Settings {
public abstract class Settings implements ISettings {
protected final Map<UUID, String> whitelistedPlayers = Maps.newHashMap();
protected boolean maintenance;
private Set<Integer> broadcastIntervalls;
@@ -62,7 +63,7 @@ public abstract class Settings {
public abstract void reloadConfigs();
public abstract void setConfigBoolean(String path, boolean boo);
public abstract void setToConfig(String path, Object var);
public String getTimerBroadcastMessage() {
return timerBroadcastMessage;
@@ -108,14 +109,17 @@ public abstract class Settings {
this.maintenance = maintenance;
}
@Override
public boolean isMaintenance() {
return maintenance;
}
@Override
public boolean isJoinNotifications() {
return joinNotifications;
}
@Override
public boolean hasCustomIcon() {
return customMaintenanceIcon;
}
@@ -124,10 +128,12 @@ public abstract class Settings {
return broadcastIntervalls;
}
@Override
public Map<UUID, String> getWhitelistedPlayers() {
return whitelistedPlayers;
}
@Override
public boolean removeWhitelistedPlayer(final UUID uuid) {
if (!whitelistedPlayers.containsKey(uuid)) return false;
whitelistedPlayers.remove(uuid);
@@ -137,6 +143,7 @@ public abstract class Settings {
}
@Deprecated
@Override
public boolean removeWhitelistedPlayer(final String name) {
if (!whitelistedPlayers.containsValue(name)) return false;
final UUID uuid = whitelistedPlayers.entrySet().stream().filter(entry -> entry.getValue().equals(name)).findFirst().get().getKey();
@@ -146,6 +153,7 @@ public abstract class Settings {
return true;
}
@Override
public boolean addWhitelistedPlayer(final UUID uuid, final String name) {
final boolean contains = !whitelistedPlayers.containsKey(uuid);
whitelistedPlayers.put(uuid, name);
@@ -1,30 +1,27 @@
package eu.kennytv.maintenance.bungee.command;
package eu.kennytv.maintenance.core.command;
import eu.kennytv.maintenance.bungee.MaintenanceBungeePlugin;
import eu.kennytv.maintenance.bungee.SettingsBungee;
import eu.kennytv.maintenance.core.MaintenanceModePlugin;
import eu.kennytv.maintenance.core.Settings;
import eu.kennytv.maintenance.core.runnable.MaintenanceRunnable;
import eu.kennytv.maintenance.core.util.MessageUtil;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Command;
import eu.kennytv.maintenance.core.util.SenderInfo;
import java.util.Arrays;
import java.util.Map;
import java.util.UUID;
public final class MaintenanceBungeeCommand extends Command {
private final MaintenanceBungeePlugin plugin;
private final SettingsBungee settings;
public abstract class MaintenanceCommand {
protected final MaintenanceModePlugin plugin;
protected final Settings settings;
private final String name;
public MaintenanceBungeeCommand(final MaintenanceBungeePlugin plugin, final SettingsBungee settings) {
super("maintenance", "", "maintenancebungee");
protected MaintenanceCommand(final MaintenanceModePlugin plugin, final Settings settings, final String name) {
this.plugin = plugin;
this.settings = settings;
this.name = name;
}
public void execute(final CommandSender sender, final String[] args) {
public void execute(final SenderInfo sender, final String[] args) {
if (!sender.hasPermission("maintenance.admin")) {
sender.sendMessage(settings.getNoPermMessage());
return;
@@ -115,7 +112,7 @@ public final class MaintenanceBungeeCommand extends Command {
return;
}
if (minutes < 1) {
sender.sendMessage(plugin.getPrefix() + "§cThink about running a timer for a negative amount of minutes. Doesn't work §othat §r§cwell.");
sender.sendMessage(plugin.getPrefix() + "§cThink about running a timer for a negative amount of minutes. Doesn't work §othat §cwell.");
return;
}
@@ -133,42 +130,51 @@ public final class MaintenanceBungeeCommand extends Command {
} else
sendUsage(sender);
} else if (args[0].equalsIgnoreCase("add")) {
final ProxiedPlayer player = plugin.getProxy().getPlayer(args[1]);
if (player == null) {
sender.sendMessage(plugin.getPrefix() + "§cThere's no player online with that name.");
return;
}
if (settings.addWhitelistedPlayer(player.getUniqueId(), player.getName()))
sender.sendMessage(plugin.getPrefix() + "§aAdded §b" + player.getName() + " §ato the maintenance whitelist!");
else
sender.sendMessage(plugin.getPrefix() + "§b" + player.getName() + " §calready is in the maintenance whitelist!");
addPlayerToWhitelist(sender, args[1]);
} else if (args[0].equalsIgnoreCase("remove")) {
final ProxiedPlayer player = plugin.getProxy().getPlayer(args[1]);
if (player == null) {
if (settings.removeWhitelistedPlayer(args[1].toLowerCase()))
sender.sendMessage(plugin.getPrefix() + "§aRemoved §b" + args[1].toLowerCase() + " §afrom the maintenance whitelist!");
else
sender.sendMessage(plugin.getPrefix() + "§cThere is no player with that name in the maintenance whitelist!");
removePlayerFromWhitelist(sender, args[1]);
} else
sendUsage(sender);
} else if (args.length == 3) {
if (args[0].equalsIgnoreCase("setmotd")) {
if (!MessageUtil.isNumeric(args[1])) {
sender.sendMessage(plugin.getPrefix() + "§cThe first argument has to be numeric!");
return;
}
if (settings.removeWhitelistedPlayer(player.getUniqueId()))
sender.sendMessage(plugin.getPrefix() + "§aRemoved §b" + player.getName() + " §afrom the maintenance whitelist!");
final int line = Integer.parseInt(args[1]);
if (line < 1 || line > 2) {
sender.sendMessage(plugin.getPrefix() + "§cThe first argument has to be a 1 or a 2!");
return;
}
final String message = getColoredString(String.join(" ", Arrays.copyOfRange(args, 2, args.length)));
final String oldMessage = settings.getConfigString("pingmessage");
final String newMessage;
if (line == 1)
newMessage = oldMessage.contains("%NEWLINE%") ?
message + "%NEWLINE%" + oldMessage.split("%NEWLINE%", 2)[1] : message;
else
sender.sendMessage(plugin.getPrefix() + "§cThis player is not in the maintenance whitelist!");
newMessage = oldMessage.contains("%NEWLINE%") ?
oldMessage.split("%NEWLINE%", 2)[0] + "%NEWLINE%" + message : oldMessage + "%NEWLINE%" + message;
settings.setToConfig("pingmessage", newMessage);
settings.saveConfig();
settings.reloadConfigs();
sender.sendMessage(plugin.getPrefix() + "§aSet line " + line + " of the maintenance motd to §f" + message);
} else
sendUsage(sender);
} else
sendUsage(sender);
}
private void sendUsage(final CommandSender sender) {
private void sendUsage(final SenderInfo sender) {
sender.sendMessage("");
sender.sendMessage("§8===========[ §eMaintenanceBungee §8| §eVersion: §e" + plugin.getVersion() + " §8]===========");
sender.sendMessage("§8===========[ §e" + name + " §8| §eVersion: §e" + plugin.getVersion() + " §8]===========");
sender.sendMessage("§6/maintenance reload §7(Reloads the config file)");
sender.sendMessage("§6/maintenance on §7(Enables maintenance mode");
sender.sendMessage("§6/maintenance off §7(Disables maintenance mode)");
sender.sendMessage("§6/maintenance setmotd <1/2> <message> §7(Sets the motd for maintenance mode)");
sender.sendMessage("§6/maintenance starttimer <minutes> §7(After the given time in minutes, maintenance mode will be enabled. Broadcast settings for the timer can be found in the config)");
sender.sendMessage("§6/maintenance endtimer <minutes> §7(Enables maintenance mode. After the given time in minutes, maintenance mode will be disabled)");
sender.sendMessage("§6/maintenance timer abort §7(If running, the current timer will be aborted)");
@@ -177,22 +183,15 @@ public final class MaintenanceBungeeCommand extends Command {
sender.sendMessage("§6/maintenance whitelist §7(Shows all whitelisted players for the maintenance mode)");
sender.sendMessage("§6/maintenance update §7(Remotely downloads the newest version of the plugin onto your server)");
sender.sendMessage("§9Created by: KennyTV");
sender.sendMessage("§8===========[ §eMaintenanceBungee §8| §eVersion: §e" + plugin.getVersion() + " §8]===========");
sender.sendMessage("§8===========[ §e" + name + " §8| §eVersion: §e" + plugin.getVersion() + " §8]===========");
sender.sendMessage("");
}
private void checkForUpdate(final CommandSender sender) {
if (plugin.updateAvailable()) {
sender.sendMessage(plugin.getPrefix() + "§cNewest version available: §aVersion " + plugin.getNewestVersion() + "§c, you're still on §a" + plugin.getVersion());
sender.sendMessage(plugin.getPrefix() + "§c§lWARNING: §cYou will have to restart the proxy to prevent further issues and to complete the update!" +
" If you can't do that, don't update!");
final TextComponent tc = new TextComponent("§6× §8[§aUpdate§8]");
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/maintenance forceupdate"));
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText("§aClick here to update the plugin")));
tc.addExtra(" §8< §7Or use the command §c/maintenace forceupdate");
protected abstract void addPlayerToWhitelist(SenderInfo sender, String name);
sender.sendMessage(tc);
} else
sender.sendMessage(plugin.getPrefix() + "§aYou already have the latest version of the plugin!");
}
protected abstract void removePlayerFromWhitelist(SenderInfo sender, String name);
protected abstract void checkForUpdate(SenderInfo sender);
protected abstract String getColoredString(String message);
}
@@ -20,8 +20,8 @@ public final class MaintenanceRunnable implements Runnable {
public void run() {
if (minutes <= 0) {
plugin.setMaintenance(enable);
plugin.cancelTask();
if (plugin.isTaskRunning())
plugin.cancelTask();
} else if (settings.getBroadcastIntervalls().contains(minutes)) {
if (enable)
plugin.broadcast(settings.getTimerBroadcastMessage().replaceAll("%MINUTES%", String.valueOf(minutes)));
@@ -0,0 +1,14 @@
package eu.kennytv.maintenance.core.util;
import java.util.UUID;
public abstract class SenderInfo {
public abstract UUID getUuid();
public abstract String getName();
public abstract boolean hasPermission(String permission);
public abstract void sendMessage(String message);
}
@@ -6,29 +6,29 @@
<parent>
<artifactId>maintenance-base</artifactId>
<groupId>eu.kennytv</groupId>
<version>2.2</version>
<version>2.2.1</version>
</parent>
<artifactId>maintenance</artifactId>
<artifactId>maintenance-parent</artifactId>
<name>Maintenance</name>
<dependencies>
<dependency>
<groupId>eu.kennytv</groupId>
<artifactId>maintenance-core</artifactId>
<version>2.2</version>
<version>${parent.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>eu.kennytv</groupId>
<artifactId>maintenancebungee</artifactId>
<version>2.2</version>
<artifactId>maintenance-bungee</artifactId>
<version>${parent.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>eu.kennytv</groupId>
<artifactId>maintenancespigot</artifactId>
<version>2.2</version>
<artifactId>maintenance-spigot</artifactId>
<version>${parent.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
@@ -7,10 +7,10 @@
<parent>
<groupId>eu.kennytv</groupId>
<artifactId>maintenance-base</artifactId>
<version>2.2</version>
<version>2.2.1</version>
</parent>
<artifactId>maintenancespigot</artifactId>
<artifactId>maintenance-spigot</artifactId>
<name>MaintenanceSpigot</name>
<repositories>
@@ -28,7 +28,7 @@
<dependency>
<groupId>eu.kennytv</groupId>
<artifactId>maintenance-core</artifactId>
<version>2.2</version>
<version>${parent.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -9,16 +9,10 @@ import java.io.File;
* @since 2.1
*/
public final class MaintenanceSpigotBase extends JavaPlugin {
private MaintenanceSpigotPlugin plugin;
@Override
public void onEnable() {
plugin = new MaintenanceSpigotPlugin(this);
}
@Override
public void onDisable() {
plugin.onDisable();
new MaintenanceSpigotPlugin(this);
}
File getPluginFile() {
@@ -21,17 +21,17 @@ import java.io.File;
* @author KennyTV
* @since 1.0
*/
public final class MaintenanceSpigotPlugin extends MaintenanceModePlugin implements IMaintenance {
public final class MaintenanceSpigotPlugin extends MaintenanceModePlugin {
private final MaintenanceSpigotBase plugin;
private final SettingsSpigot settings;
// Great update for the Spigot version of the plugin as well as performance improvements and bugfixes in both versions!
// If you have ProtocolLib installed, you can set a custom server icon while maintenance is enabled, also the playercount-message and the playercount-hover-message are now available (as it has already been in the Bungee version)!
// The Spigot version is now much more compatible with other motd-changing plugins, such as SexyMotd!
// In the BungeeCord version of the plugin, the "/maintenance remove <player>" command now also works for offline players
// Fixed some other issues with the ProtocolLib integration
// Minor textfix for the updatemessage in the Spigot version
// General performance improvements
// Added "/maintenance setmotd <1/2> <message>" command to edit the maintenance mode motd via a command
// The Bungee version of the plugin will now automatically create a MySQL table if it is enabled, so you won't have to manually create one anymore
// Fixed the ServerListPlus motd only changing on using the command, but not on the server startup
// Fixed an error with canceling the start-/endtimer in the Bungee version
// Fixed an error with removing players from the whitelist in the Spigot version
// Fixed some other minor bugs
// Some internal code cleanup
MaintenanceSpigotPlugin(final MaintenanceSpigotBase plugin) {
super("§8[§eMaintenanceSpigot§8] ", plugin.getDescription().getVersion());
@@ -56,20 +56,15 @@ public final class MaintenanceSpigotPlugin extends MaintenanceModePlugin impleme
final Plugin serverListPlus = pm.getPlugin("ServerListPlus");
if (serverListPlus != null) {
serverListPlusHook = new ServerListPlusHook(((ServerListPlusPlugin) serverListPlus).getCore());
serverListPlusHook.setEnabled(!settings.isMaintenance());
plugin.getLogger().info("Enabled ServerListPlus integration!");
}
}
@Override
public void onDisable() {
if (!getServer().getOnlinePlayers().isEmpty())
plugin.getLogger().warning("This plugin does not fully support reloads, consider restarting the server as soon as possible.");
}
@Override
public void setMaintenance(final boolean maintenance) {
settings.setMaintenance(maintenance);
settings.setConfigBoolean("enable-maintenance-mode", maintenance);
settings.setToConfig("enable-maintenance-mode", maintenance);
settings.saveConfig();
settings.reloadConfigs();
@@ -1,6 +1,5 @@
package eu.kennytv.maintenance.spigot;
import eu.kennytv.maintenance.api.ISettings;
import eu.kennytv.maintenance.core.Settings;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
@@ -11,7 +10,7 @@ import java.nio.file.Files;
import java.util.List;
import java.util.UUID;
public final class SettingsSpigot extends Settings implements ISettings {
public final class SettingsSpigot extends Settings {
private final MaintenanceSpigotBase plugin;
private FileConfiguration config;
private FileConfiguration whitelist;
@@ -105,7 +104,7 @@ public final class SettingsSpigot extends Settings implements ISettings {
}
@Override
public void setConfigBoolean(final String path, final boolean var) {
public void setToConfig(final String path, final Object var) {
config.set(path, var);
}
}
@@ -0,0 +1,85 @@
package eu.kennytv.maintenance.spigot.command;
import eu.kennytv.maintenance.core.command.MaintenanceCommand;
import eu.kennytv.maintenance.core.util.SenderInfo;
import eu.kennytv.maintenance.spigot.MaintenanceSpigotPlugin;
import eu.kennytv.maintenance.spigot.SettingsSpigot;
import eu.kennytv.maintenance.spigot.util.BukkitSenderInfo;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public final class MaintenanceSpigotCommand extends MaintenanceCommand implements CommandExecutor {
public MaintenanceSpigotCommand(final MaintenanceSpigotPlugin plugin, final SettingsSpigot settings) {
super(plugin, settings, "MaintenanceSpigot");
}
@Override
public boolean onCommand(final CommandSender sender, final Command cmd, final String s, final String[] args) {
execute(new BukkitSenderInfo(sender), args);
return true;
}
@Override
protected void addPlayerToWhitelist(final SenderInfo sender, final String name) {
final Player selected = Bukkit.getPlayer(name);
if (selected != null) {
settings.addWhitelistedPlayer(selected.getUniqueId(), selected.getName());
sender.sendMessage(plugin.getPrefix() + "§aAdded §b" + selected.getName() + " §ato the maintenance whitelist!");
return;
}
final OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(name);
if (!offlinePlayer.hasPlayedBefore()) {
sender.sendMessage(plugin.getPrefix() + "§cNo player with this name has played on this server before.");
return;
}
if (settings.addWhitelistedPlayer(offlinePlayer.getUniqueId(), offlinePlayer.getName()))
sender.sendMessage(plugin.getPrefix() + "§aAdded §b" + offlinePlayer.getName() + " §ato the maintenance whitelist!");
else
sender.sendMessage(plugin.getPrefix() + "§b" + offlinePlayer.getName() + " §calready is in the maintenance whitelist!");
}
@Override
protected void removePlayerFromWhitelist(final SenderInfo sender, final String name) {
final Player selected = Bukkit.getPlayer(name);
if (selected != null) {
settings.removeWhitelistedPlayer(selected.getUniqueId());
sender.sendMessage(plugin.getPrefix() + "§aRemoved §b" + selected.getName() + " §afrom the maintenance whitelist!");
return;
}
final OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(name);
if (!offlinePlayer.hasPlayedBefore()) {
sender.sendMessage(plugin.getPrefix() + "§cNo player with this name has played on this server before.");
return;
}
if (settings.removeWhitelistedPlayer(offlinePlayer.getUniqueId()))
sender.sendMessage(plugin.getPrefix() + "§aRemoved §b" + offlinePlayer.getName() + " §afrom the maintenance whitelist!");
else
sender.sendMessage(plugin.getPrefix() + "§cThis player is not in the maintenance whitelist!");
}
@Override
protected void checkForUpdate(final SenderInfo sender) {
if (plugin.updateAvailable()) {
sender.sendMessage(plugin.getPrefix() + "§cNewest version available: §aVersion " + plugin.getNewestVersion() + "§c, you're still on §a" + plugin.getVersion());
sender.sendMessage(plugin.getPrefix() + "§c§lWARNING: §cYou will have to restart the server to prevent further issues and to complete the update!" +
" If you can't do that, don't update!");
sender.sendMessage(plugin.getPrefix() + "§eUse §c§l/maintenance forceupdate §eto update!");
} else
sender.sendMessage(plugin.getPrefix() + "§aYou already have the latest version of the plugin!");
}
@Override
protected String getColoredString(final String message) {
return ChatColor.translateAlternateColorCodes('&', message);
}
}
@@ -39,16 +39,15 @@ public final class PacketListener {
players.add(new WrappedGameProfile(UUID.randomUUID(), string));
ping.setPlayers(players);
if (settings.hasCustomIcon()) {
if (image != null)
ping.setFavicon(image);
else {
try {
image = WrappedServerPing.CompressedImage.fromPng(ImageIO.read(icon));
} catch (final Exception e) {
pl.getServer().getLogger().warning("§4Could not load 'maintenance-icon.png' - did you create one in your Spigot/Bukkit folder (not the plugins folder)?");
}
}
if (!settings.hasCustomIcon()) return;
if (image != null) {
ping.setFavicon(image);
return;
}
try {
image = WrappedServerPing.CompressedImage.fromPng(ImageIO.read(icon));
} catch (final Exception e) {
pl.getServer().getLogger().warning("§4Could not load 'maintenance-icon.png' - did you create one in your Spigot/Bukkit folder (not the plugins folder)?");
}
}
});
@@ -0,0 +1,35 @@
package eu.kennytv.maintenance.spigot.util;
import eu.kennytv.maintenance.core.util.SenderInfo;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.UUID;
public final class BukkitSenderInfo extends SenderInfo {
private final CommandSender sender;
public BukkitSenderInfo(final CommandSender sender) {
this.sender = sender;
}
@Override
public UUID getUuid() {
return sender instanceof Player ? ((Player) sender).getUniqueId() : null;
}
@Override
public String getName() {
return sender.getName();
}
@Override
public boolean hasPermission(final String permission) {
return sender.hasPermission(permission);
}
@Override
public void sendMessage(final String message) {
sender.sendMessage(message);
}
}
@@ -1,206 +0,0 @@
package eu.kennytv.maintenance.spigot.command;
import eu.kennytv.maintenance.core.runnable.MaintenanceRunnable;
import eu.kennytv.maintenance.core.util.MessageUtil;
import eu.kennytv.maintenance.spigot.MaintenanceSpigotPlugin;
import eu.kennytv.maintenance.spigot.SettingsSpigot;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Map;
import java.util.UUID;
public final class MaintenanceSpigotCommand implements CommandExecutor {
private final MaintenanceSpigotPlugin plugin;
private final SettingsSpigot settings;
public MaintenanceSpigotCommand(final MaintenanceSpigotPlugin plugin, final SettingsSpigot settings) {
this.plugin = plugin;
this.settings = settings;
}
@Override
public boolean onCommand(final CommandSender sender, final Command cmd, final String s, final String[] args) {
if (!sender.hasPermission("maintenance.admin")) {
sender.sendMessage(settings.getNoPermMessage());
return true;
}
if (args.length == 1) {
if (args[0].equalsIgnoreCase("on")) {
plugin.setMaintenance(true);
} else if (args[0].equalsIgnoreCase("off")) {
plugin.setMaintenance(false);
} else if (args[0].equalsIgnoreCase("reload")) {
if (!sender.hasPermission("maintenance.reload")) {
sender.sendMessage(settings.getNoPermMessage());
return true;
}
settings.reloadConfigs();
sender.sendMessage(plugin.getPrefix() + "§aReloaded spigot-config.yml");
} else if (args[0].equalsIgnoreCase("update")) {
if (!sender.hasPermission("maintenance.admin")) {
sender.sendMessage(settings.getNoPermMessage());
return true;
}
checkForUpdate(sender);
} else if (args[0].equals("forceupdate")) {
if (!sender.hasPermission("maintenance.admin")) {
sender.sendMessage(settings.getNoPermMessage());
return true;
}
sender.sendMessage(plugin.getPrefix() + "§c§lDownloading update...");
if (plugin.installUpdate())
sender.sendMessage(plugin.getPrefix() + "§a§lThe update was successful! To prevent issues with tasks and to complete the update, you have to restart the server!");
else
sender.sendMessage(plugin.getPrefix() + "§4Failed!");
} else if (args[0].equalsIgnoreCase("whitelist")) {
final Map<UUID, String> players = settings.getWhitelistedPlayers();
if (players.isEmpty()) {
sender.sendMessage(plugin.getPrefix() + "§cThe maintenance whitelist is empty! Use \"/maintenance add <player>\" to add someone!");
} else if (players.size() == 1 && players.containsKey(UUID.fromString("a8179ff3-c201-4a75-bdaa-9d14aca6f83f"))) {
sender.sendMessage(plugin.getPrefix() + "§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!");
} else {
sender.sendMessage("§6Whitelisted players for maintenance:");
players.forEach((key, value) -> sender.sendMessage("§8- §e" + value));
sender.sendMessage("");
}
} else
sendUsage(sender);
} else if (args.length == 2) {
if (args[0].equalsIgnoreCase("endtimer")) {
if (!MessageUtil.isNumeric(args[1])) {
sender.sendMessage(plugin.getPrefix() + "§6/maintenance timer endtimer <minutes>");
return true;
}
if (plugin.isTaskRunning()) {
sender.sendMessage(plugin.getPrefix() + "§cThere's already a starttimer scheduled!");
return true;
}
final int minutes = Integer.parseInt(args[1]);
if (minutes > 40320) {
sender.sendMessage(plugin.getPrefix() + "§cThe number has to be less than 40320 (28 days)!");
return true;
}
if (minutes < 1) {
sender.sendMessage(plugin.getPrefix() + "§cThink about running a timer for a negative amount of minutes. Doesn't work §othat §r§cwell.");
return true;
}
plugin.setMaintenance(true);
sender.sendMessage(plugin.getPrefix() + "§aStarted timer: §7Maintenance mode will be deactivated in §6" + minutes + " minutes§7.");
plugin.setTaskId(plugin.schedule(new MaintenanceRunnable(plugin, settings, minutes, false)));
} else if (args[0].equalsIgnoreCase("starttimer")) {
if (!MessageUtil.isNumeric(args[1])) {
sender.sendMessage(plugin.getPrefix() + "§6/maintenance timer starttimer <minutes>");
return true;
}
if (plugin.isTaskRunning()) {
sender.sendMessage(plugin.getPrefix() + "§cThere's already running a timer!");
return true;
}
final int minutes = Integer.parseInt(args[1]);
if (minutes > 40320) {
sender.sendMessage(plugin.getPrefix() + "§cThe number has to be less than 40320 (28 days)!");
return true;
}
if (minutes < 1) {
sender.sendMessage(plugin.getPrefix() + "§cThink about running a timer for a negative amount of minutes. Doesn't work §othat §r§cwell.");
return true;
}
sender.sendMessage(plugin.getPrefix() + "§aStarted timer: §7Maintenance mode will be activated in §6" + minutes + " minutes§7.");
plugin.setTaskId(plugin.schedule(new MaintenanceRunnable(plugin, settings, minutes, true)));
} else if (args[0].equalsIgnoreCase("timer")) {
if (args[1].equalsIgnoreCase("abort") || args[1].equalsIgnoreCase("stop") || args[1].equalsIgnoreCase("cancel")) {
if (!plugin.isTaskRunning()) {
sender.sendMessage(plugin.getPrefix() + "§cThere's currently no running timer.");
return true;
}
plugin.cancelTask();
sender.sendMessage(plugin.getPrefix() + "§cThe timer has been disabled.");
} else
sendUsage(sender);
} else if (args[0].equalsIgnoreCase("add")) {
final Player player = Bukkit.getPlayer(args[1]);
if (player != null) {
settings.addWhitelistedPlayer(player.getUniqueId(), player.getName());
sender.sendMessage(plugin.getPrefix() + "§aAdded §b" + player.getName() + " §ato the maintenance whitelist!");
return true;
}
final OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(args[1]);
if (!offlinePlayer.hasPlayedBefore()) {
sender.sendMessage(plugin.getPrefix() + "§cNo player with this name has played on this server before.");
return true;
}
if (settings.addWhitelistedPlayer(offlinePlayer.getUniqueId(), offlinePlayer.getName()))
sender.sendMessage(plugin.getPrefix() + "§aAdded §b" + offlinePlayer.getName() + " §ato the maintenance whitelist!");
else
sender.sendMessage(plugin.getPrefix() + "§b" + player.getName() + " §calready is in the maintenance whitelist!");
} else if (args[0].equalsIgnoreCase("remove")) {
final Player player = Bukkit.getPlayer(args[1]);
if (player != null) {
settings.removeWhitelistedPlayer(player.getUniqueId());
sender.sendMessage(plugin.getPrefix() + "§aRemoved §b" + player.getName() + " §afrom the maintenance whitelist!");
return true;
}
final OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(args[1]);
if (!offlinePlayer.hasPlayedBefore()) {
sender.sendMessage(plugin.getPrefix() + "§cNo player with this name has played on this server before.");
return true;
}
if (settings.removeWhitelistedPlayer(offlinePlayer.getUniqueId()))
sender.sendMessage(plugin.getPrefix() + "§aRemoved §b" + offlinePlayer.getName() + " §afrom the maintenance whitelist!");
else
sender.sendMessage(plugin.getPrefix() + "§cThis player is not in the maintenance whitelist!");
} else
sendUsage(sender);
} else
sendUsage(sender);
return true;
}
private void sendUsage(final CommandSender sender) {
sender.sendMessage("");
sender.sendMessage("§8===========[ §eMaintenanceSpigot §8| §eVersion: §e" + plugin.getVersion() + " §8]===========");
sender.sendMessage("§6/maintenance reload §7(Reloads the config file)");
sender.sendMessage("§6/maintenance on §7(Enables maintenance mode");
sender.sendMessage("§6/maintenance off §7(Disables maintenance mode)");
sender.sendMessage("§6/maintenance starttimer <minutes> §7(After the given time in minutes, maintenance mode will be enabled. Broadcast settings for the timer can be found in the config)");
sender.sendMessage("§6/maintenance endtimer <minutes> §7(Enables maintenance mode. After the given time in minutes, maintenance mode will be disabled)");
sender.sendMessage("§6/maintenance timer abort §7(If running, the current timer will be aborted)");
sender.sendMessage("§6/maintenance add <player> §7(Adds the player to the maintenance whitelist, so they can join the server even though maintenance is enabled)");
sender.sendMessage("§6/maintenance remove <player> §7(Removes the player from the maintenance whitelist)");
sender.sendMessage("§6/maintenance whitelist §7(Shows all whitelisted players for the maintenance mode)");
sender.sendMessage("§6/maintenance update §7(Remotely downloads the newest version of the plugin onto your server)");
sender.sendMessage("§9Created by: KennyTV");
sender.sendMessage("§8===========[ §eMaintenanceSpigot §8| §eVersion: §e" + plugin.getVersion() + " §8]===========");
sender.sendMessage("");
}
private void checkForUpdate(final CommandSender sender) {
if (plugin.updateAvailable()) {
sender.sendMessage(plugin.getPrefix() + "§cNewest version available: §aVersion " + plugin.getNewestVersion() + "§c, you're still on §a" + plugin.getVersion());
sender.sendMessage(plugin.getPrefix() + "§c§lWARNING: §cYou will have to restart the server to prevent further issues and to complete the update!" +
" If you can't do that, don't update!");
sender.sendMessage(plugin.getPrefix() + "§eUse §c§l/maintenance forceupdate §eto update!");
} else
sender.sendMessage(plugin.getPrefix() + "§aYou already have the latest version of the plugin!");
}
}
+2 -2
View File
@@ -12,5 +12,5 @@ Issues can be created here: https://github.com/KennyTV/Maintenance/issues
### MaintenanceMode API
There's no official repo, yet, but you can manually add the Maintenance-API.jar file to your library (can be downloaded in the code section, https://github.com/KennyTV/Maintenance/raw/master/Maintenance-API.jar).
By using MaintenanceBungeeAPI#getAPI or MaintenanceSpigotAPI#getAPI (depending on what server you are using the plugin) you can get some base methods. Documentation and/or a repo might come, if a few people ask me to.
There's no official maven repo, yet, but you can manually add the Maintenance-API.jar file to your library (can be downloaded in the code section, https://github.com/KennyTV/Maintenance/raw/master/Maintenance-API.jar).
By using MaintenanceBungeeAPI#getAPI or MaintenanceSpigotAPI#getAPI (depending on what server you are using the plugin) you can get some base methods. A rough documentation can be found here https://github.com/KennyTV/Maintenance/tree/master/Maintenance-API/src/main/java/eu/kennytv/maintenance/api
+4 -4
View File
@@ -7,14 +7,14 @@
<groupId>eu.kennytv</groupId>
<artifactId>maintenance-base</artifactId>
<packaging>pom</packaging>
<version>2.2</version>
<version>2.2.1</version>
<name>Maintenance</name>
<modules>
<module>maintenance</module>
<module>maintenance-parent</module>
<module>maintenance-core</module>
<module>maintenancespigot</module>
<module>maintenancebungee</module>
<module>maintenance-spigot</module>
<module>maintenance-bungee</module>
<module>maintenance-api</module>
</modules>