Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a3b836b1c5 | ||
|
|
1eca6c81ad | ||
|
|
b9b4a78b5c | ||
|
|
fda23c5539 | ||
|
|
8297321971 | ||
|
|
cfeaf00f26 | ||
|
|
5ee1b32249 | ||
|
|
b69f0dc90e | ||
|
|
fe6cae4e47 | ||
|
|
b494b5c23c | ||
|
|
3bd3395128 | ||
|
|
3e3f63220d | ||
|
|
ccba0f042f | ||
|
|
abdd89259d | ||
|
|
256f203c48 | ||
|
|
205412b02c | ||
|
|
990289feb2 | ||
|
|
44b1ff1a1f | ||
|
|
f9e11bb9e5 | ||
|
|
eef1584b1c | ||
|
|
937dd84d1c | ||
|
|
80b9fe280b | ||
|
|
3892892792 | ||
|
|
519551e76c | ||
|
|
b30476ae3f | ||
|
|
9d417a12f1 | ||
|
|
fd5406b95d | ||
|
|
0ef59e557d | ||
|
|
15ed1db347 | ||
|
|
429d5b90d4 | ||
|
|
b3ab931aca | ||
|
|
21b42d0c72 | ||
|
|
7b1e1a27ba | ||
|
|
fb7b1e791f | ||
|
|
eecd59b387 | ||
|
|
ff7d8e0293 | ||
|
|
19c6d77a2c | ||
|
|
e002aa34e9 | ||
|
|
865e53a4a8 | ||
|
|
b8c652b7fb | ||
|
|
c4080f82dc | ||
|
|
1a33497e8f | ||
|
|
f8353b8eda | ||
|
|
4980ad54ec | ||
|
|
5363305411 | ||
|
|
6ff47619ad | ||
|
|
69315a3f74 | ||
|
|
8b1ddba672 | ||
|
|
bf63f0e209 | ||
|
|
450c923d24 | ||
|
|
9a922a6df5 | ||
|
|
08a5a9a021 | ||
|
|
61ad7d8533 | ||
|
|
52d2b3c096 | ||
|
|
b0a69cc048 | ||
|
|
74e445a62e | ||
|
|
91219202b2 | ||
|
|
a3545c83a0 | ||
|
|
31baf91e8f | ||
|
|
214cd53751 | ||
|
|
2be16882c7 | ||
|
|
75e2264b44 | ||
|
|
fd7a0eb6a5 | ||
|
|
177115f144 | ||
|
|
edbe31dc9c | ||
|
|
21a2f9ef2f |
No files matched your search
@@ -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**: <>
|
||||
@@ -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.
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<artifactId>maintenance-base</artifactId>
|
||||
<groupId>eu.kennytv</groupId>
|
||||
<version>2.2</version>
|
||||
<version>2.3</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>maintenance-api</artifactId>
|
||||
@@ -22,7 +22,7 @@
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>1.10.2-R0.1-SNAPSHOT</version>
|
||||
<version>1.12.2-R0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
package eu.kennytv.maintenance.api;
|
||||
|
||||
/**
|
||||
* @author KennyTV
|
||||
* @since 2.1
|
||||
*/
|
||||
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,
|
||||
@@ -15,7 +19,7 @@ public interface IMaintenance {
|
||||
void setMaintenance(boolean maintenance);
|
||||
|
||||
/**
|
||||
* @return true if maintenance is enabled on the proxy
|
||||
* @return true if maintenance is currently enabled
|
||||
*/
|
||||
boolean isMaintenance();
|
||||
|
||||
@@ -30,7 +34,7 @@ public interface IMaintenance {
|
||||
String getVersion();
|
||||
|
||||
/**
|
||||
* @return {@link ISettings} for more options
|
||||
* @return {@link ISettings} for options regarding configuration files
|
||||
*/
|
||||
ISettings getSettings();
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package eu.kennytv.maintenance.api;
|
||||
|
||||
/**
|
||||
* @author KennyTV
|
||||
* @since 2.2.2
|
||||
*/
|
||||
public interface IMaintenanceBase {
|
||||
|
||||
/**
|
||||
* Returns API instance of IMaintenance.
|
||||
*
|
||||
* @return {@link IMaintenance} instance
|
||||
*/
|
||||
IMaintenance getApi();
|
||||
}
|
||||
@@ -3,10 +3,14 @@ package eu.kennytv.maintenance.api;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author KennyTV
|
||||
* @since 2.1
|
||||
*/
|
||||
public interface ISettings {
|
||||
|
||||
/**
|
||||
* @return true if maintenance is enabled on the proxy
|
||||
* @return true if maintenance is currently enabled
|
||||
*/
|
||||
boolean isMaintenance();
|
||||
|
||||
@@ -21,9 +25,7 @@ public interface ISettings {
|
||||
boolean hasCustomIcon();
|
||||
|
||||
/**
|
||||
* The keyset of the map contains the uuids as a string, the values the names of the players.
|
||||
*
|
||||
* @return map of uuids of whitelisted players with their last seen names
|
||||
* @return map of uuids of whitelisted players with their given names
|
||||
*/
|
||||
Map<UUID, String> getWhitelistedPlayers();
|
||||
|
||||
@@ -40,7 +42,10 @@ public interface ISettings {
|
||||
*
|
||||
* @param name name of the player to remove in lowercase letters
|
||||
* @return true if removing the player was successful
|
||||
* @see #removeWhitelistedPlayer(UUID)
|
||||
* @deprecated if a player changes their name, the list will still contain the old one and thus this might not work
|
||||
*/
|
||||
@Deprecated
|
||||
boolean removeWhitelistedPlayer(String name);
|
||||
|
||||
/**
|
||||
@@ -51,4 +56,11 @@ public interface ISettings {
|
||||
* @return true if adding the player was successful
|
||||
*/
|
||||
boolean addWhitelistedPlayer(UUID uuid, String name);
|
||||
|
||||
/**
|
||||
* Reloads the maintenance-icon.png image from the server folder.
|
||||
*
|
||||
* @return true if loading the image was successful
|
||||
*/
|
||||
boolean reloadMaintenanceIcon();
|
||||
}
|
||||
@@ -10,7 +10,7 @@ import net.md_5.bungee.api.plugin.Plugin;
|
||||
* </p>
|
||||
*
|
||||
* @author KennyTV
|
||||
* @since 1.0
|
||||
* @since 2.1
|
||||
*/
|
||||
public final class MaintenanceBungeeAPI {
|
||||
|
||||
@@ -24,6 +24,6 @@ public final class MaintenanceBungeeAPI {
|
||||
if (maintenance == null)
|
||||
ProxyServer.getInstance().getLogger().warning("Could not get instance of MaintenanceBungee!");
|
||||
|
||||
return (IMaintenance) maintenance;
|
||||
return ((IMaintenanceBase) maintenance).getApi();
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
@@ -9,7 +10,7 @@ import org.bukkit.Bukkit;
|
||||
* </p>
|
||||
*
|
||||
* @author KennyTV
|
||||
* @since 1.0
|
||||
* @since 2.1
|
||||
*/
|
||||
public final class MaintenanceSpigotAPI {
|
||||
|
||||
@@ -19,10 +20,10 @@ 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!");
|
||||
|
||||
return (IMaintenance) maintenance;
|
||||
return ((IMaintenanceBase) maintenance).getApi();
|
||||
}
|
||||
}
|
||||
@@ -3,14 +3,13 @@
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>eu.kennytv</groupId>
|
||||
<artifactId>maintenance-base</artifactId>
|
||||
<version>2.2</version>
|
||||
<groupId>eu.kennytv</groupId>
|
||||
<version>2.3</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>maintenancebungee</artifactId>
|
||||
<artifactId>maintenance-bungee</artifactId>
|
||||
<name>MaintenanceBungee</name>
|
||||
|
||||
<repositories>
|
||||
@@ -24,7 +23,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 +41,7 @@
|
||||
<dependency>
|
||||
<groupId>com.zaxxer</groupId>
|
||||
<artifactId>HikariCP</artifactId>
|
||||
<version>2.7.8</version>
|
||||
<version>3.1.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package eu.kennytv.maintenance.bungee;
|
||||
|
||||
import eu.kennytv.maintenance.api.IMaintenance;
|
||||
import eu.kennytv.maintenance.api.IMaintenanceBase;
|
||||
import net.md_5.bungee.api.plugin.Plugin;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public final class MaintenanceBungeeBase extends Plugin implements IMaintenanceBase {
|
||||
private IMaintenance maintenance;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
maintenance = new MaintenanceBungeePlugin(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMaintenance getApi() {
|
||||
return maintenance;
|
||||
}
|
||||
|
||||
File getPluginFile() {
|
||||
return getFile();
|
||||
}
|
||||
}
|
||||
+6
-16
@@ -4,8 +4,8 @@ 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;
|
||||
import eu.kennytv.maintenance.core.MaintenanceModePlugin;
|
||||
import eu.kennytv.maintenance.core.hook.ServerListPlusHook;
|
||||
@@ -21,7 +21,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;
|
||||
|
||||
@@ -35,8 +35,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 +44,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();
|
||||
}
|
||||
@@ -80,11 +75,6 @@ public final class MaintenanceBungeePlugin extends MaintenanceModePlugin impleme
|
||||
getProxy().broadcast(settings.getMaintenanceDeactivated());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMaintenance() {
|
||||
return settings.isMaintenance();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int schedule(final Runnable runnable) {
|
||||
return getProxy().getScheduler().schedule(plugin, runnable, 0, 1, TimeUnit.MINUTES).getId();
|
||||
+57
-17
@@ -1,9 +1,12 @@
|
||||
package eu.kennytv.maintenance.bungee;
|
||||
|
||||
import eu.kennytv.maintenance.api.ISettings;
|
||||
import com.google.common.collect.Lists;
|
||||
import eu.kennytv.maintenance.bungee.listener.ProxyPingListener;
|
||||
import eu.kennytv.maintenance.bungee.mysql.MySQL;
|
||||
import eu.kennytv.maintenance.core.Settings;
|
||||
import eu.kennytv.maintenance.core.listener.IPingListener;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.plugin.PluginManager;
|
||||
import net.md_5.bungee.config.Configuration;
|
||||
import net.md_5.bungee.config.YamlConfiguration;
|
||||
|
||||
@@ -13,34 +16,45 @@ 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 final IPingListener pingListener;
|
||||
private Configuration config;
|
||||
private Configuration whitelist;
|
||||
|
||||
SettingsBungee(final MaintenanceBungeeBase plugin) {
|
||||
this.plugin = plugin;
|
||||
|
||||
final PluginManager pm = plugin.getProxy().getPluginManager();
|
||||
final ProxyPingListener listener = new ProxyPingListener(plugin, this);
|
||||
pm.registerListener(plugin, listener);
|
||||
pingListener = listener;
|
||||
|
||||
reloadConfigs(createFiles());
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +73,14 @@ public final class SettingsBungee extends Settings implements ISettings {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateConfig() {
|
||||
if (!config.contains("pingmessage")) return;
|
||||
config.set("pingmessages", Lists.newArrayList(getConfigString("pingmessage")));
|
||||
config.set("pingmessage", null);
|
||||
saveConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveWhitelistedPlayers() {
|
||||
final File file = new File(plugin.getDataFolder(), "WhitelistedPlayers.yml");
|
||||
@@ -136,21 +158,33 @@ public final class SettingsBungee extends Settings implements ISettings {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Integer> getBroadcastIntervallList() {
|
||||
return config.getIntList("timer-broadcasts-for-minutes");
|
||||
public List<Integer> getConfigIntList(final String path) {
|
||||
return config.getIntList(path);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConfigBoolean(final String path, final boolean var) {
|
||||
public List<String> getConfigList(final String path) {
|
||||
return config.getStringList(path);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setToConfig(final String path, final Object var) {
|
||||
config.set(path, var);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getColoredString(final String message) {
|
||||
return ChatColor.translateAlternateColorCodes('&', message);
|
||||
}
|
||||
|
||||
@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();
|
||||
}
|
||||
@@ -160,10 +194,16 @@ public final class SettingsBungee extends Settings implements ISettings {
|
||||
return maintenance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean reloadMaintenanceIcon() {
|
||||
return pingListener.loadIcon();
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
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.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/maintenance forceupdate");
|
||||
|
||||
((ProxiedSenderInfo) sender).sendMessage(tc);
|
||||
} else
|
||||
sender.sendMessage(plugin.getPrefix() + "§aYou already have the latest version of the plugin!");
|
||||
}
|
||||
}
|
||||
+19
@@ -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);
|
||||
}
|
||||
}
|
||||
File renamed without changes.
+21
-17
@@ -2,6 +2,7 @@ package eu.kennytv.maintenance.bungee.listener;
|
||||
|
||||
import eu.kennytv.maintenance.bungee.MaintenanceBungeeBase;
|
||||
import eu.kennytv.maintenance.bungee.SettingsBungee;
|
||||
import eu.kennytv.maintenance.core.listener.IPingListener;
|
||||
import net.md_5.bungee.api.Favicon;
|
||||
import net.md_5.bungee.api.ServerPing;
|
||||
import net.md_5.bungee.api.event.ProxyPingEvent;
|
||||
@@ -13,16 +14,14 @@ import javax.imageio.ImageIO;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public final class ProxyPingListener implements Listener {
|
||||
public final class ProxyPingListener implements Listener, IPingListener {
|
||||
private final MaintenanceBungeeBase plugin;
|
||||
private final SettingsBungee settings;
|
||||
private final File icon;
|
||||
private Favicon favicon;
|
||||
|
||||
public ProxyPingListener(final MaintenanceBungeeBase plugin, final SettingsBungee settings) {
|
||||
this.plugin = plugin;
|
||||
this.settings = settings;
|
||||
icon = new File("maintenance-icon.png");
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
@@ -30,22 +29,27 @@ public final class ProxyPingListener implements Listener {
|
||||
if (!settings.isMaintenance()) return;
|
||||
|
||||
final ServerPing ping = event.getResponse();
|
||||
ping.setVersion(new ServerPing.Protocol(settings.getPlayerCountMessage(), 1));
|
||||
ping.setDescription(settings.getPingMessage().replace("%NEWLINE%", "\n"));
|
||||
ping.setPlayers(new ServerPing.Players(0, 0, new ServerPing.PlayerInfo[]{
|
||||
ping.getVersion().setProtocol(1);
|
||||
ping.getVersion().setName(settings.getPlayerCountMessage());
|
||||
ping.setDescription(settings.getRandomPingMessage());
|
||||
ping.getPlayers().setOnline(0);
|
||||
ping.getPlayers().setMax(0);
|
||||
ping.getPlayers().setSample(new ServerPing.PlayerInfo[]{
|
||||
new ServerPing.PlayerInfo(settings.getPlayerCountHoverMessage().replace("%NEWLINE%", "\n"), "")
|
||||
}));
|
||||
});
|
||||
|
||||
if (settings.hasCustomIcon()) {
|
||||
if (favicon != null)
|
||||
ping.setFavicon(favicon);
|
||||
else {
|
||||
try {
|
||||
favicon = Favicon.create(ImageIO.read(icon));
|
||||
} catch (IOException | IllegalArgumentException e) {
|
||||
plugin.getLogger().warning("§4Could not load 'maintenance-icon.png' - did you create one in your Bungee folder (not the plugins folder)?");
|
||||
}
|
||||
}
|
||||
if (settings.hasCustomIcon() && favicon != null)
|
||||
ping.setFavicon(favicon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean loadIcon() {
|
||||
try {
|
||||
favicon = Favicon.create(ImageIO.read(new File("maintenance-icon.png")));
|
||||
} 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)?");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
File renamed without changes.
+6
@@ -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();
|
||||
+40
@@ -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);
|
||||
}
|
||||
}
|
||||
+6
-3
@@ -5,7 +5,10 @@
|
||||
enable-maintenance-mode: false
|
||||
|
||||
# The message shown in the multiplayer server list motd.
|
||||
pingmessage: "&cMaintenance mode!%NEWLINE%&6We will be back soon!"
|
||||
# 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"
|
||||
|
||||
# Is shown at the top right corner of the server in the serverlist,
|
||||
# where the playercount would normally be displayed.
|
||||
@@ -38,12 +41,12 @@ join-notification: "&e%PLAYER% &ctried to join the server."
|
||||
custom-maintenance-icon: false
|
||||
|
||||
# Only enable MySQL if you really know what you are doing.
|
||||
# You need to have a table with the two following columns: 'setting' and 'value'.
|
||||
mysql:
|
||||
use-mysql: false
|
||||
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
|
||||
File renamed without changes.
@@ -6,19 +6,13 @@
|
||||
<parent>
|
||||
<artifactId>maintenance-base</artifactId>
|
||||
<groupId>eu.kennytv</groupId>
|
||||
<version>2.2</version>
|
||||
<version>2.3</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>maintenance-core</artifactId>
|
||||
<name>Maintenance-Core</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>1.12.2-R0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.minecrell</groupId>
|
||||
<artifactId>ServerListPlus</artifactId>
|
||||
@@ -28,7 +22,7 @@
|
||||
<dependency>
|
||||
<groupId>eu.kennytv</groupId>
|
||||
<artifactId>maintenance-api</artifactId>
|
||||
<version>2.2</version>
|
||||
<version>${parent.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
+9
-5
@@ -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,17 @@ public abstract class MaintenanceModePlugin {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public abstract void onDisable();
|
||||
|
||||
public abstract void setMaintenance(boolean maintenance);
|
||||
@Override
|
||||
public boolean isMaintenance() {
|
||||
return getSettings().isMaintenance();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTaskRunning() {
|
||||
return taskId != 0;
|
||||
}
|
||||
@@ -57,7 +61,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)
|
||||
|
||||
@@ -1,20 +1,17 @@
|
||||
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;
|
||||
import java.util.*;
|
||||
|
||||
public abstract class Settings {
|
||||
protected final Map<UUID, String> whitelistedPlayers = Maps.newHashMap();
|
||||
public abstract class Settings implements ISettings {
|
||||
private static final Random RANDOM = new Random();
|
||||
protected final Map<UUID, String> whitelistedPlayers = new HashMap<>();
|
||||
protected boolean maintenance;
|
||||
private Set<Integer> broadcastIntervalls;
|
||||
private List<String> pingMessages;
|
||||
private String timerBroadcastMessage;
|
||||
private String endtimerBroadcastMessage;
|
||||
private String pingMessage;
|
||||
private String kickMessage;
|
||||
private String joinNotification;
|
||||
private String noPermMessage;
|
||||
@@ -26,9 +23,11 @@ public abstract class Settings {
|
||||
private boolean customMaintenanceIcon;
|
||||
|
||||
protected void loadSettings() {
|
||||
updateConfig();
|
||||
|
||||
pingMessages = getConfigList("pingmessages");
|
||||
timerBroadcastMessage = getConfigString("starttimer-broadcast-mesage");
|
||||
endtimerBroadcastMessage = getConfigString("endtimer-broadcast-mesage");
|
||||
pingMessage = getConfigString("pingmessage");
|
||||
kickMessage = getConfigString("kickmessage");
|
||||
joinNotification = getConfigString("join-notification");
|
||||
noPermMessage = getConfigString("no-permission");
|
||||
@@ -37,13 +36,18 @@ public abstract class Settings {
|
||||
maintenance = getConfigBoolean("enable-maintenance-mode");
|
||||
joinNotifications = getConfigBoolean("send-join-notification");
|
||||
customMaintenanceIcon = getConfigBoolean("custom-maintenance-icon");
|
||||
broadcastIntervalls = Sets.newHashSet(getBroadcastIntervallList());
|
||||
broadcastIntervalls = new HashSet<>(getConfigIntList("timer-broadcasts-for-minutes"));
|
||||
playerCountMessage = getConfigString("playercountmessage");
|
||||
playerCountHoverMessage = getConfigString("playercounthovermessage");
|
||||
if (hasCustomIcon())
|
||||
reloadMaintenanceIcon();
|
||||
|
||||
loadExtraSettings();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public abstract void updateConfig();
|
||||
|
||||
public abstract void saveWhitelistedPlayers();
|
||||
|
||||
public abstract boolean createFiles();
|
||||
@@ -52,7 +56,9 @@ public abstract class Settings {
|
||||
|
||||
public abstract boolean getConfigBoolean(String path);
|
||||
|
||||
public abstract List<Integer> getBroadcastIntervallList();
|
||||
public abstract List<Integer> getConfigIntList(String path);
|
||||
|
||||
public abstract List<String> getConfigList(String path);
|
||||
|
||||
public abstract void loadExtraSettings();
|
||||
|
||||
@@ -62,7 +68,17 @@ 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 abstract String getColoredString(String s);
|
||||
|
||||
public List<String> getPingMessages() {
|
||||
return pingMessages;
|
||||
}
|
||||
|
||||
public Set<Integer> getBroadcastIntervalls() {
|
||||
return broadcastIntervalls;
|
||||
}
|
||||
|
||||
public String getTimerBroadcastMessage() {
|
||||
return timerBroadcastMessage;
|
||||
@@ -72,10 +88,6 @@ public abstract class Settings {
|
||||
return endtimerBroadcastMessage;
|
||||
}
|
||||
|
||||
public String getPingMessage() {
|
||||
return pingMessage;
|
||||
}
|
||||
|
||||
public String getKickMessage() {
|
||||
return kickMessage;
|
||||
}
|
||||
@@ -108,26 +120,32 @@ public abstract class Settings {
|
||||
this.maintenance = maintenance;
|
||||
}
|
||||
|
||||
public String getRandomPingMessage() {
|
||||
final String s = pingMessages.size() > 1 ? pingMessages.get(RANDOM.nextInt(pingMessages.size())) : pingMessages.get(0);
|
||||
return getColoredString(s.replace("%NEWLINE%", "\n"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMaintenance() {
|
||||
return maintenance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isJoinNotifications() {
|
||||
return joinNotifications;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasCustomIcon() {
|
||||
return customMaintenanceIcon;
|
||||
}
|
||||
|
||||
public Set<Integer> getBroadcastIntervalls() {
|
||||
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 +155,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 +165,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);
|
||||
|
||||
+114
-84
@@ -1,61 +1,43 @@
|
||||
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) {
|
||||
if (!sender.hasPermission("maintenance.admin")) {
|
||||
sender.sendMessage(settings.getNoPermMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
public void execute(final SenderInfo sender, final String[] args) {
|
||||
if (checkPermission(sender, "command")) return;
|
||||
if (args.length == 1) {
|
||||
if (args[0].equalsIgnoreCase("on")) {
|
||||
if (checkPermission(sender, "toggle")) return;
|
||||
plugin.setMaintenance(true);
|
||||
} else if (args[0].equalsIgnoreCase("off")) {
|
||||
if (checkPermission(sender, "toggle")) return;
|
||||
plugin.setMaintenance(false);
|
||||
} else if (args[0].equalsIgnoreCase("reload")) {
|
||||
if (!sender.hasPermission("maintenance.reload")) {
|
||||
sender.sendMessage(settings.getNoPermMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
if (checkPermission(sender, "reload")) return;
|
||||
settings.reloadConfigs();
|
||||
sender.sendMessage(plugin.getPrefix() + "§aReloaded config.yml");
|
||||
sender.sendMessage(plugin.getPrefix() + "§aReloaded config, whitelistedplayers and the maintenance icon");
|
||||
} else if (args[0].equalsIgnoreCase("update")) {
|
||||
if (!sender.hasPermission("maintenance.admin")) {
|
||||
sender.sendMessage(settings.getNoPermMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
if (checkPermission(sender, "update")) return;
|
||||
checkForUpdate(sender);
|
||||
} else if (args[0].equals("forceupdate")) {
|
||||
if (!sender.hasPermission("maintenance.admin")) {
|
||||
sender.sendMessage(settings.getNoPermMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
if (checkPermission(sender, "update")) return;
|
||||
sender.sendMessage(plugin.getPrefix() + "§c§lDownloading update...");
|
||||
|
||||
if (plugin.installUpdate())
|
||||
@@ -63,6 +45,7 @@ public final class MaintenanceBungeeCommand extends Command {
|
||||
else
|
||||
sender.sendMessage(plugin.getPrefix() + "§4Failed!");
|
||||
} else if (args[0].equalsIgnoreCase("whitelist")) {
|
||||
if (checkPermission(sender, "whitelist.list")) return;
|
||||
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!");
|
||||
@@ -70,15 +53,26 @@ public final class MaintenanceBungeeCommand extends Command {
|
||||
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));
|
||||
players.forEach((key, value) -> sender.sendMessage("§8- §e" + value + " §8(§7" + key + "§8)"));
|
||||
sender.sendMessage("");
|
||||
}
|
||||
} else if (args[0].equalsIgnoreCase("motd")) {
|
||||
if (checkPermission(sender, "motd")) return;
|
||||
sender.sendMessage(plugin.getPrefix() + "§7List of your maintenance motds:");
|
||||
for (int i = 0; i < settings.getPingMessages().size(); i++) {
|
||||
sender.sendMessage("§b" + (i + 1) + "§8§m---------");
|
||||
for (final String motd : settings.getColoredString(settings.getPingMessages().get(i)).split("%NEWLINE%")) {
|
||||
sender.sendMessage(motd);
|
||||
}
|
||||
}
|
||||
sender.sendMessage("§8§m----------");
|
||||
} 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>");
|
||||
if (checkPermission(sender, "timer")) return;
|
||||
if (!isNumeric(args[1])) {
|
||||
sender.sendMessage(plugin.getPrefix() + "§6/maintenance endtimer <minutes>");
|
||||
return;
|
||||
}
|
||||
if (plugin.isTaskRunning()) {
|
||||
@@ -100,8 +94,9 @@ public final class MaintenanceBungeeCommand extends Command {
|
||||
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>");
|
||||
if (checkPermission(sender, "timer")) return;
|
||||
if (!isNumeric(args[1])) {
|
||||
sender.sendMessage(plugin.getPrefix() + "§6/maintenance starttimer <minutes>");
|
||||
return;
|
||||
}
|
||||
if (plugin.isTaskRunning()) {
|
||||
@@ -115,7 +110,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;
|
||||
}
|
||||
|
||||
@@ -123,6 +118,7 @@ public final class MaintenanceBungeeCommand extends Command {
|
||||
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 (checkPermission(sender, "timer")) return;
|
||||
if (!plugin.isTaskRunning()) {
|
||||
sender.sendMessage(plugin.getPrefix() + "§cThere's currently no running timer.");
|
||||
return;
|
||||
@@ -133,66 +129,100 @@ 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!");
|
||||
if (checkPermission(sender, "whitelist.add")) return;
|
||||
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!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (settings.removeWhitelistedPlayer(player.getUniqueId()))
|
||||
sender.sendMessage(plugin.getPrefix() + "§aRemoved §b" + player.getName() + " §afrom the maintenance whitelist!");
|
||||
else
|
||||
sender.sendMessage(plugin.getPrefix() + "§cThis player is not in the maintenance whitelist!");
|
||||
if (checkPermission(sender, "whitelist.remove")) return;
|
||||
removePlayerFromWhitelist(sender, args[1]);
|
||||
} else
|
||||
sendUsage(sender);
|
||||
} else if (args.length > 3 && args[0].equalsIgnoreCase("setmotd")) {
|
||||
if (checkPermission(sender, "setmotd")) return;
|
||||
if (!isNumeric(args[1])) {
|
||||
sender.sendMessage(plugin.getPrefix() + "§cThe first argument has to be the motd index!");
|
||||
return;
|
||||
}
|
||||
|
||||
final int index = Integer.parseInt(args[1]);
|
||||
if (index < 1 || index > settings.getPingMessages().size() + 1) {
|
||||
sender.sendMessage(plugin.getPrefix() + "§cYou currently have " + settings.getPingMessages().size()
|
||||
+ " motds, so you have to pick a number between 1 and " + (settings.getPingMessages().size() + 1));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isNumeric(args[2])) {
|
||||
sender.sendMessage(plugin.getPrefix() + "§cThe second argument has to be the line number (1 or 2)!");
|
||||
return;
|
||||
}
|
||||
|
||||
final int line = Integer.parseInt(args[2]);
|
||||
if (line != 1 && line != 2) {
|
||||
sender.sendMessage(plugin.getPrefix() + "§cThe second argument has to be the line number (1 or 2)!");
|
||||
return;
|
||||
}
|
||||
|
||||
final String message = String.join(" ", Arrays.copyOfRange(args, 3, args.length));
|
||||
final String oldMessage = index > settings.getPingMessages().size() ? "" : settings.getPingMessages().get(index - 1);
|
||||
final String newMessage;
|
||||
if (line == 1)
|
||||
newMessage = oldMessage.contains("%NEWLINE%") ?
|
||||
message + "%NEWLINE%" + oldMessage.split("%NEWLINE%", 2)[1] : message;
|
||||
else
|
||||
newMessage = oldMessage.contains("%NEWLINE%") ?
|
||||
oldMessage.split("%NEWLINE%", 2)[0] + "%NEWLINE%" + message : oldMessage + "%NEWLINE%" + message;
|
||||
|
||||
if (index > settings.getPingMessages().size())
|
||||
settings.getPingMessages().add(newMessage);
|
||||
else
|
||||
settings.getPingMessages().set(index - 1, newMessage);
|
||||
settings.setToConfig("pingmessages", settings.getPingMessages());
|
||||
settings.saveConfig();
|
||||
settings.reloadConfigs();
|
||||
sender.sendMessage(plugin.getPrefix() + "§aSet line " + line + " of the " + index + ". maintenance motd to §f" + settings.getColoredString(message));
|
||||
} 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("§6/maintenance reload §7(Reloads the config file)");
|
||||
sender.sendMessage("§8===========[ §e" + name + " §8| §eVersion: §e" + plugin.getVersion() + " §8]===========");
|
||||
sender.sendMessage("§6/maintenance reload §7(Reloads the config file, whitelist file and the server-icon)");
|
||||
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 whitelist §7(Shows all whitelisted players for the maintenance mode)");
|
||||
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 setmotd <index> <1/2> <message> §7(Sets a motd for maintenance mode)");
|
||||
sender.sendMessage("§6/maintenance motd §7(Lists the currently set maintenance motds)");
|
||||
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");
|
||||
|
||||
sender.sendMessage(tc);
|
||||
} else
|
||||
sender.sendMessage(plugin.getPrefix() + "§aYou already have the latest version of the plugin!");
|
||||
private boolean checkPermission(final SenderInfo sender, final String permission) {
|
||||
if (!sender.hasPermission("maintenance." + permission)) {
|
||||
sender.sendMessage(settings.getNoPermMessage());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isNumeric(final String string) {
|
||||
try {
|
||||
Integer.parseInt(string);
|
||||
} catch (final NumberFormatException nfe) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
protected abstract void addPlayerToWhitelist(SenderInfo sender, String name);
|
||||
|
||||
protected abstract void removePlayerFromWhitelist(SenderInfo sender, String name);
|
||||
|
||||
protected abstract void checkForUpdate(SenderInfo sender);
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package eu.kennytv.maintenance.core.listener;
|
||||
|
||||
public interface IPingListener {
|
||||
|
||||
boolean loadIcon();
|
||||
}
|
||||
+2
-2
@@ -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)));
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
package eu.kennytv.maintenance.core.util;
|
||||
|
||||
public final class MessageUtil {
|
||||
|
||||
public static boolean isNumeric(final String string) {
|
||||
try {
|
||||
Integer.parseInt(string);
|
||||
} catch (final NumberFormatException nfe) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -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.3</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>
|
||||
File renamed without changes.
File renamed without changes.
@@ -3,14 +3,13 @@
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>eu.kennytv</groupId>
|
||||
<artifactId>maintenance-base</artifactId>
|
||||
<version>2.2</version>
|
||||
<groupId>eu.kennytv</groupId>
|
||||
<version>2.3</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>maintenancespigot</artifactId>
|
||||
<artifactId>maintenance-spigot</artifactId>
|
||||
<name>MaintenanceSpigot</name>
|
||||
|
||||
<repositories>
|
||||
@@ -28,7 +27,7 @@
|
||||
<dependency>
|
||||
<groupId>eu.kennytv</groupId>
|
||||
<artifactId>maintenance-core</artifactId>
|
||||
<version>2.2</version>
|
||||
<version>${parent.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package eu.kennytv.maintenance.spigot;
|
||||
|
||||
import eu.kennytv.maintenance.api.IMaintenance;
|
||||
import eu.kennytv.maintenance.api.IMaintenanceBase;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public final class MaintenanceSpigotBase extends JavaPlugin implements IMaintenanceBase {
|
||||
private IMaintenance maintenance;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
maintenance = new MaintenanceSpigotPlugin(this);
|
||||
}
|
||||
|
||||
File getPluginFile() {
|
||||
return getFile();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMaintenance getApi() {
|
||||
return maintenance;
|
||||
}
|
||||
}
|
||||
+4
-29
@@ -6,9 +6,7 @@ import eu.kennytv.maintenance.api.MaintenanceSpigotAPI;
|
||||
import eu.kennytv.maintenance.core.MaintenanceModePlugin;
|
||||
import eu.kennytv.maintenance.core.hook.ServerListPlusHook;
|
||||
import eu.kennytv.maintenance.spigot.command.MaintenanceSpigotCommand;
|
||||
import eu.kennytv.maintenance.spigot.listener.PacketListener;
|
||||
import eu.kennytv.maintenance.spigot.listener.PlayerLoginListener;
|
||||
import eu.kennytv.maintenance.spigot.listener.ServerListPingListener;
|
||||
import eu.kennytv.maintenance.spigot.metrics.MetricsLite;
|
||||
import net.minecrell.serverlistplus.core.plugin.ServerListPlusPlugin;
|
||||
import org.bukkit.Server;
|
||||
@@ -19,20 +17,12 @@ import java.io.File;
|
||||
|
||||
/**
|
||||
* @author KennyTV
|
||||
* @since 1.0
|
||||
* @since 2.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
|
||||
|
||||
MaintenanceSpigotPlugin(final MaintenanceSpigotBase plugin) {
|
||||
super("§8[§eMaintenanceSpigot§8] ", plugin.getDescription().getVersion());
|
||||
|
||||
@@ -47,29 +37,19 @@ public final class MaintenanceSpigotPlugin extends MaintenanceModePlugin impleme
|
||||
|
||||
new MetricsLite(plugin);
|
||||
|
||||
if (pm.getPlugin("ProtocolLib") != null)
|
||||
new PacketListener(this, plugin, settings);
|
||||
else
|
||||
pm.registerEvents(new ServerListPingListener(plugin, settings), plugin);
|
||||
|
||||
// ServerListPlus integration
|
||||
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();
|
||||
|
||||
@@ -88,11 +68,6 @@ public final class MaintenanceSpigotPlugin extends MaintenanceModePlugin impleme
|
||||
getServer().broadcastMessage(settings.getMaintenanceDeactivated());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMaintenance() {
|
||||
return settings.isMaintenance();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int schedule(final Runnable runnable) {
|
||||
return getServer().getScheduler().scheduleSyncRepeatingTask(plugin, runnable, 0, 1200);
|
||||
+43
-5
@@ -1,23 +1,38 @@
|
||||
package eu.kennytv.maintenance.spigot;
|
||||
|
||||
import eu.kennytv.maintenance.api.ISettings;
|
||||
import com.google.common.collect.Lists;
|
||||
import eu.kennytv.maintenance.core.Settings;
|
||||
import eu.kennytv.maintenance.core.listener.IPingListener;
|
||||
import eu.kennytv.maintenance.spigot.listener.PacketListener;
|
||||
import eu.kennytv.maintenance.spigot.listener.ServerListPingListener;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
|
||||
import java.io.*;
|
||||
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 final IPingListener pingListener;
|
||||
private FileConfiguration config;
|
||||
private FileConfiguration whitelist;
|
||||
|
||||
SettingsSpigot(final MaintenanceSpigotBase plugin) {
|
||||
this.plugin = plugin;
|
||||
|
||||
final PluginManager pm = plugin.getServer().getPluginManager();
|
||||
if (pm.getPlugin("ProtocolLib") != null) {
|
||||
pingListener = new PacketListener(plugin, this);
|
||||
} else {
|
||||
final ServerListPingListener listener = new ServerListPingListener(plugin, this);
|
||||
pm.registerEvents(listener, plugin);
|
||||
pingListener = listener;
|
||||
}
|
||||
|
||||
createFiles();
|
||||
reloadConfigs();
|
||||
}
|
||||
@@ -31,6 +46,14 @@ public final class SettingsSpigot extends Settings implements ISettings {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateConfig() {
|
||||
if (!config.contains("pingmessage")) return;
|
||||
config.set("pingmessages", Lists.newArrayList(getConfigString("pingmessage")));
|
||||
config.set("pingmessage", null);
|
||||
saveConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveWhitelistedPlayers() {
|
||||
try {
|
||||
@@ -100,12 +123,27 @@ public final class SettingsSpigot extends Settings implements ISettings {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Integer> getBroadcastIntervallList() {
|
||||
return config.getIntegerList("timer-broadcasts-for-minutes");
|
||||
public List<Integer> getConfigIntList(final String path) {
|
||||
return config.getIntegerList(path);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConfigBoolean(final String path, final boolean var) {
|
||||
public List<String> getConfigList(final String path) {
|
||||
return config.getStringList(path);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setToConfig(final String path, final Object var) {
|
||||
config.set(path, var);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getColoredString(final String message) {
|
||||
return ChatColor.translateAlternateColorCodes('&', message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean reloadMaintenanceIcon() {
|
||||
return pingListener.loadIcon();
|
||||
}
|
||||
}
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
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.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!");
|
||||
}
|
||||
}
|
||||
+20
-18
@@ -8,8 +8,8 @@ import com.comphenix.protocol.events.PacketEvent;
|
||||
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
||||
import com.comphenix.protocol.wrappers.WrappedServerPing;
|
||||
import com.google.common.collect.Lists;
|
||||
import eu.kennytv.maintenance.core.listener.IPingListener;
|
||||
import eu.kennytv.maintenance.spigot.MaintenanceSpigotBase;
|
||||
import eu.kennytv.maintenance.spigot.MaintenanceSpigotPlugin;
|
||||
import eu.kennytv.maintenance.spigot.SettingsSpigot;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
@@ -17,21 +17,21 @@ import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public final class PacketListener {
|
||||
private final File icon;
|
||||
public final class PacketListener implements IPingListener {
|
||||
private final MaintenanceSpigotBase pl;
|
||||
private WrappedServerPing.CompressedImage image;
|
||||
|
||||
public PacketListener(final MaintenanceSpigotPlugin pl, final MaintenanceSpigotBase base, final SettingsSpigot settings) {
|
||||
icon = new File("maintenance-icon.png");
|
||||
public PacketListener(final MaintenanceSpigotBase base, final SettingsSpigot settings) {
|
||||
this.pl = base;
|
||||
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(base, ListenerPriority.HIGHEST,
|
||||
PacketType.Status.Server.OUT_SERVER_INFO) {
|
||||
@Override
|
||||
public void onPacketSending(final PacketEvent event) {
|
||||
if (!pl.isMaintenance()) return;
|
||||
if (!settings.isMaintenance()) return;
|
||||
|
||||
final WrappedServerPing ping = event.getPacket().getServerPings().read(0);
|
||||
ping.setVersionProtocol(0);
|
||||
ping.setMotD(settings.getPingMessage().replace("%NEWLINE%", "\n"));
|
||||
ping.setMotD(settings.getRandomPingMessage());
|
||||
ping.setVersionName(settings.getPlayerCountMessage());
|
||||
|
||||
final List<WrappedGameProfile> players = Lists.newArrayList();
|
||||
@@ -39,18 +39,20 @@ 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() && image != null)
|
||||
ping.setFavicon(image);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean loadIcon() {
|
||||
try {
|
||||
image = WrappedServerPing.CompressedImage.fromPng(ImageIO.read(new File("maintenance-icon.png")));
|
||||
} catch (final Exception e) {
|
||||
pl.getLogger().warning("§4Could not load 'maintenance-icon.png' - did you create one in your Spigot folder (not the plugins folder)?");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
File renamed without changes.
+15
-15
@@ -1,8 +1,8 @@
|
||||
package eu.kennytv.maintenance.spigot.listener;
|
||||
|
||||
import eu.kennytv.maintenance.core.listener.IPingListener;
|
||||
import eu.kennytv.maintenance.spigot.MaintenanceSpigotBase;
|
||||
import eu.kennytv.maintenance.spigot.SettingsSpigot;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
@@ -12,16 +12,14 @@ import org.bukkit.util.CachedServerIcon;
|
||||
import javax.imageio.ImageIO;
|
||||
import java.io.File;
|
||||
|
||||
public final class ServerListPingListener implements Listener {
|
||||
public final class ServerListPingListener implements Listener, IPingListener {
|
||||
private final MaintenanceSpigotBase plugin;
|
||||
private final SettingsSpigot settings;
|
||||
private final File icon;
|
||||
private CachedServerIcon serverIcon;
|
||||
|
||||
public ServerListPingListener(final MaintenanceSpigotBase plugin, final SettingsSpigot settings) {
|
||||
this.plugin = plugin;
|
||||
this.settings = settings;
|
||||
icon = new File("maintenance-icon.png");
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
@@ -29,18 +27,20 @@ public final class ServerListPingListener implements Listener {
|
||||
if (!settings.isMaintenance()) return;
|
||||
|
||||
event.setMaxPlayers(0);
|
||||
event.setMotd(settings.getPingMessage().replace("%NEWLINE%", "\n"));
|
||||
event.setMotd(settings.getRandomPingMessage());
|
||||
|
||||
if (settings.hasCustomIcon()) {
|
||||
if (serverIcon != null)
|
||||
event.setServerIcon(serverIcon);
|
||||
else {
|
||||
try {
|
||||
serverIcon = Bukkit.loadServerIcon(ImageIO.read(icon));
|
||||
} catch (final Exception e) {
|
||||
plugin.getLogger().warning("§4Could not load 'maintenance-icon.png' - did you create one in your Spigot/Bukkit folder (not the plugins folder)?");
|
||||
}
|
||||
}
|
||||
if (settings.hasCustomIcon() && serverIcon != null)
|
||||
event.setServerIcon(serverIcon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean loadIcon() {
|
||||
try {
|
||||
serverIcon = plugin.getServer().loadServerIcon(ImageIO.read(new File("maintenance-icon.png")));
|
||||
} catch (final Exception e) {
|
||||
plugin.getLogger().warning("§4Could not load 'maintenance-icon.png' - did you create one in your Spigot folder (not the plugins folder)?");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
File renamed without changes.
+35
@@ -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);
|
||||
}
|
||||
}
|
||||
File renamed without changes.
+4
-1
@@ -5,7 +5,10 @@
|
||||
enable-maintenance-mode: false
|
||||
|
||||
# The message shown in the multiplayer server list motd.
|
||||
pingmessage: "&cMaintenance mode!%NEWLINE%&6We will be back soon!"
|
||||
# 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"
|
||||
|
||||
# Is shown at the top right corner of the server in the serverlist,
|
||||
# where the playercount would normally be displayed.
|
||||
-27
@@ -1,27 +0,0 @@
|
||||
package eu.kennytv.maintenance.bungee;
|
||||
|
||||
import net.md_5.bungee.api.plugin.Plugin;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* @author KennyTV
|
||||
* @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();
|
||||
}
|
||||
|
||||
File getPluginFile() {
|
||||
return getFile();
|
||||
}
|
||||
}
|
||||
-27
@@ -1,27 +0,0 @@
|
||||
package eu.kennytv.maintenance.spigot;
|
||||
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* @author KennyTV
|
||||
* @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();
|
||||
}
|
||||
|
||||
File getPluginFile() {
|
||||
return getFile();
|
||||
}
|
||||
}
|
||||
-206
@@ -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!");
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -6,15 +6,15 @@
|
||||
|
||||
<groupId>eu.kennytv</groupId>
|
||||
<artifactId>maintenance-base</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<version>2.2</version>
|
||||
<version>2.3</version>
|
||||
<name>Maintenance</name>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<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>
|
||||
|
||||
|
||||
Reference in new issue
Block a user