Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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.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>
|
||||
+1
-7
@@ -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() {
|
||||
+6
-9
@@ -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();
|
||||
}
|
||||
+21
-15
@@ -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;
|
||||
}
|
||||
|
||||
+72
@@ -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);
|
||||
}
|
||||
}
|
||||
+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.
+1
-1
@@ -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)?");
|
||||
}
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -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
|
||||
File renamed without changes.
@@ -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>
|
||||
|
||||
+5
-6
@@ -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);
|
||||
|
||||
+50
-51
@@ -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);
|
||||
}
|
||||
+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)));
|
||||
|
||||
@@ -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>
|
||||
File renamed without changes.
File renamed without changes.
@@ -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>
|
||||
+1
-7
@@ -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() {
|
||||
+10
-15
@@ -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();
|
||||
|
||||
+2
-3
@@ -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);
|
||||
}
|
||||
}
|
||||
+85
@@ -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);
|
||||
}
|
||||
}
|
||||
+9
-10
@@ -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)?");
|
||||
}
|
||||
}
|
||||
});
|
||||
File renamed without changes.
File renamed without changes.
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.
File renamed without changes.
-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
|
||||
@@ -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>
|
||||
|
||||
|
||||
Reference in new issue
Block a user