mirror of
https://github.com/plexusorg/Plex.git
synced 2024-12-23 09:37:37 +00:00
Revamp update checker
This commit is contained in:
parent
8ebb1c91a0
commit
9ebbeb3c15
@ -106,7 +106,7 @@ public class Plex extends JavaPlugin
|
|||||||
|
|
||||||
moduleManager.enableModules();
|
moduleManager.enableModules();
|
||||||
|
|
||||||
system = config.getString("commands.permissions");
|
system = config.getString("system");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -28,7 +28,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = RequiredCommandSource.ANY)
|
@CommandPermissions(level = Rank.OP, source = RequiredCommandSource.ANY)
|
||||||
@CommandParameters(name = "admin", usage = "/<command> <add <player> | remove <player> | setrank <player> <rank> | list>", aliases = "saconfig,slconfig,adminconfig,adminmanage", description = "Manage all admins")
|
@CommandParameters(name = "admin", usage = "/<command> <add <player> | remove <player> | setrank <player> <rank> | list>", aliases = "saconfig,slconfig,adminconfig,adminmanage", description = "Manage all admins")
|
||||||
@System("ranks")
|
@System(value = "ranks")
|
||||||
public class AdminCMD extends PlexCommand
|
public class AdminCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
//TODO: Better return messages
|
//TODO: Better return messages
|
||||||
|
@ -15,7 +15,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
@CommandParameters(name = "deopall", description = "Deop everyone on the server", aliases = "deopa")
|
@CommandParameters(name = "deopall", description = "Deop everyone on the server", aliases = "deopa")
|
||||||
@CommandPermissions(level = Rank.ADMIN)
|
@CommandPermissions(level = Rank.ADMIN)
|
||||||
@System("ranks")
|
@System(value = "ranks")
|
||||||
public class DeopAllCMD extends PlexCommand
|
public class DeopAllCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
@ -16,7 +16,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
@CommandParameters(name = "deop", description = "Deop a player on the server", usage = "/<command> <player>")
|
@CommandParameters(name = "deop", description = "Deop a player on the server", usage = "/<command> <player>")
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.deop")
|
@CommandPermissions(level = Rank.ADMIN, permission = "plex.deop")
|
||||||
@System("ranks")
|
@System(value = "ranks")
|
||||||
public class DeopCMD extends PlexCommand
|
public class DeopCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
@ -17,7 +17,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
@CommandParameters(name = "list", description = "Show a list of all online players")
|
@CommandParameters(name = "list", description = "Show a list of all online players")
|
||||||
@CommandPermissions(level = Rank.OP, permission = "plex.list")
|
@CommandPermissions(level = Rank.OP, permission = "plex.list")
|
||||||
@System("ranks")
|
@System(value = "ranks")
|
||||||
public class ListCMD extends PlexCommand
|
public class ListCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
@ -15,7 +15,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
@CommandParameters(name = "opall", description = "Op everyone on the server", aliases = "opa")
|
@CommandParameters(name = "opall", description = "Op everyone on the server", aliases = "opa")
|
||||||
@CommandPermissions(level = Rank.ADMIN)
|
@CommandPermissions(level = Rank.ADMIN)
|
||||||
@System("ranks")
|
@System(value = "ranks")
|
||||||
public class OpAllCMD extends PlexCommand
|
public class OpAllCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
@ -16,7 +16,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
@CommandParameters(name = "op", description = "Op a player on the server", usage = "/<command> <player>")
|
@CommandParameters(name = "op", description = "Op a player on the server", usage = "/<command> <player>")
|
||||||
@CommandPermissions(level = Rank.OP)
|
@CommandPermissions(level = Rank.OP)
|
||||||
@System("ranks")
|
@System(value = "ranks")
|
||||||
public class OpCMD extends PlexCommand
|
public class OpCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
@ -15,7 +15,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, permission = "plex.rank", source = RequiredCommandSource.ANY)
|
@CommandPermissions(level = Rank.OP, permission = "plex.rank", source = RequiredCommandSource.ANY)
|
||||||
@CommandParameters(name = "rank", description = "Displays your rank")
|
@CommandParameters(name = "rank", description = "Displays your rank")
|
||||||
@System("ranks")
|
@System(value = "ranks")
|
||||||
public class RankCMD extends PlexCommand
|
public class RankCMD extends PlexCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
@ -22,22 +22,26 @@ public class CommandHandler extends PlexBase
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
System annotation = clazz.getDeclaredAnnotation(System.class);
|
System annotation = clazz.getDeclaredAnnotation(System.class);
|
||||||
|
// TODO: Annotations are always null?
|
||||||
if (annotation != null)
|
if (annotation != null)
|
||||||
{
|
{
|
||||||
if (annotation.value().equalsIgnoreCase(plugin.getSystem()))
|
PlexLog.debug(clazz.getName() + " has annotations");
|
||||||
|
if (annotation.value().equalsIgnoreCase(plugin.getSystem().toLowerCase()))
|
||||||
{
|
{
|
||||||
commands.add(clazz.getConstructor().newInstance());
|
commands.add(clazz.getConstructor().newInstance());
|
||||||
return;
|
PlexLog.debug("Adding " + clazz.getName() + " as a rank command");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.config.getBoolean("debug") && annotation.debug())
|
if (plugin.config.getBoolean("debug") && annotation.debug())
|
||||||
{
|
{
|
||||||
commands.add(clazz.getConstructor().newInstance());
|
commands.add(clazz.getConstructor().newInstance());
|
||||||
|
PlexLog.debug("Adding " + clazz.getName() + " as a debug command");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
commands.add(clazz.getConstructor().newInstance());
|
commands.add(clazz.getConstructor().newInstance());
|
||||||
|
// PlexLog.debug("Adding command normally " + clazz.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (InvocationTargetException | InstantiationException | IllegalAccessException | NoSuchMethodException ex)
|
catch (InvocationTargetException | InstantiationException | IllegalAccessException | NoSuchMethodException ex)
|
||||||
@ -46,6 +50,7 @@ public class CommandHandler extends PlexBase
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
PlexLog.debug("Test");
|
||||||
PlexLog.log(String.format("Registered %s commands from %s classes!", commands.size(), commandSet.size()));
|
PlexLog.log(String.format("Registered %s commands from %s classes!", commands.size(), commandSet.size()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ public class UpdateCheckerService extends AbstractService
|
|||||||
{
|
{
|
||||||
if (!newVersion)
|
if (!newVersion)
|
||||||
{
|
{
|
||||||
if (plugin.getUpdateChecker().check())
|
if (plugin.getUpdateChecker().getUpdateStatusMessage("plexusorg/Plex", "master"))
|
||||||
{
|
{
|
||||||
newVersion = true;
|
newVersion = true;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package dev.plex.util;
|
package dev.plex.util;
|
||||||
|
|
||||||
import dev.plex.Plex;
|
import dev.plex.Plex;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
|
||||||
@ -18,6 +20,11 @@ public class PlexLog
|
|||||||
Bukkit.getConsoleSender().sendMessage(String.format(ChatColor.YELLOW + "[Plex] " + ChatColor.GRAY + "%s", message));
|
Bukkit.getConsoleSender().sendMessage(String.format(ChatColor.YELLOW + "[Plex] " + ChatColor.GRAY + "%s", message));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void log(Component component)
|
||||||
|
{
|
||||||
|
Bukkit.getConsoleSender().sendMessage(Component.text("[Plex] ").color(NamedTextColor.YELLOW).append(component).colorIfAbsent(NamedTextColor.GRAY));
|
||||||
|
}
|
||||||
|
|
||||||
public static void error(String message, Object... strings)
|
public static void error(String message, Object... strings)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < strings.length; i++)
|
for (int i = 0; i < strings.length; i++)
|
||||||
|
@ -1,52 +1,86 @@
|
|||||||
package dev.plex.util;
|
package dev.plex.util;
|
||||||
|
|
||||||
|
import com.google.common.base.Charsets;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonSyntaxException;
|
||||||
|
import dev.plex.Plex;
|
||||||
import dev.plex.PlexBase;
|
import dev.plex.PlexBase;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLConnection;
|
import javax.annotation.Nonnull;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
|
||||||
public class UpdateChecker extends PlexBase
|
public class UpdateChecker extends PlexBase
|
||||||
{
|
{
|
||||||
private final String currentVersion = plugin.getDescription().getVersion();
|
private static final String DOWNLOAD_PAGE = "https://ci.plex.us.org/job/Plex/";
|
||||||
|
|
||||||
public boolean check()
|
// Adapted from Paper
|
||||||
|
private int fetchDistanceFromGitHub(@Nonnull String repo, @Nonnull String branch, @Nonnull String hash)
|
||||||
{
|
{
|
||||||
if (currentVersion.contains("-SNAPSHOT"))
|
|
||||||
{
|
|
||||||
PlexLog.log("Snapshot version detected, not checking for updates.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
String versionLink = "https://plex.us.org/updater/check/";
|
HttpURLConnection connection = (HttpURLConnection)new URL("https://api.github.com/repos/" + repo + "/compare/" + branch + "..." + hash).openConnection();
|
||||||
URL url = new URL(versionLink);
|
connection.connect();
|
||||||
URLConnection con = url.openConnection();
|
if (connection.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND)
|
||||||
InputStreamReader isr = new InputStreamReader(con.getInputStream());
|
|
||||||
BufferedReader reader = new BufferedReader(isr);
|
|
||||||
if (!reader.ready())
|
|
||||||
{
|
{
|
||||||
return false;
|
return -2; // Unknown commit
|
||||||
}
|
}
|
||||||
String newVersion = reader.readLine();
|
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), Charsets.UTF_8)))
|
||||||
reader.close();
|
|
||||||
|
|
||||||
if (!newVersion.equals(currentVersion))
|
|
||||||
{
|
{
|
||||||
PlexLog.log(ChatColor.RED + "There is a new version of Plex available: " + newVersion);
|
JsonObject obj = new Gson().fromJson(reader, JsonObject.class);
|
||||||
return true;
|
String status = obj.get("status").getAsString();
|
||||||
|
return switch (status)
|
||||||
|
{
|
||||||
|
case "identical" -> 0;
|
||||||
|
case "behind" -> obj.get("behind_by").getAsInt();
|
||||||
|
default -> -1;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
else
|
catch (JsonSyntaxException | NumberFormatException e)
|
||||||
{
|
{
|
||||||
return false;
|
e.printStackTrace();
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (IOException e)
|
catch (IOException e)
|
||||||
{
|
{
|
||||||
PlexLog.error("There was an error checking for updates!");
|
e.printStackTrace();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getUpdateStatusMessage(@Nonnull String repo, @Nonnull String branch)
|
||||||
|
{
|
||||||
|
int distance;
|
||||||
|
distance = fetchDistanceFromGitHub(repo, branch, Plex.build.head);
|
||||||
|
|
||||||
|
switch (distance)
|
||||||
|
{
|
||||||
|
case -1 -> {
|
||||||
|
PlexLog.log(ChatColor.RED + "There was an error checking for updates.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
case 0 -> {
|
||||||
|
PlexLog.log(ChatColor.GREEN + "Your version of Plex is up to date!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case -2 -> {
|
||||||
|
PlexLog.log(ChatColor.RED + "Unknown version, unable to check for updates.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
default -> {
|
||||||
|
PlexLog.log(Component.text("Your version of Plex is not up to date!", NamedTextColor.RED)
|
||||||
|
.append(Component.newline())
|
||||||
|
.append(Component.text("Download the new version at: ")
|
||||||
|
.append(Component.text(DOWNLOAD_PAGE, NamedTextColor.RED))));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,10 +26,9 @@ chat:
|
|||||||
# Color code for name color
|
# Color code for name color
|
||||||
name-color: 'f'
|
name-color: 'f'
|
||||||
|
|
||||||
# Settings for commands relating to Plex
|
# Should Plex use a "true op" system with ranks or only permission nodes
|
||||||
commands:
|
# Options are "permissions" or "ranks"
|
||||||
# Should Plex use a "true op" system with ranks or only permission nodes
|
system: ranks
|
||||||
permissions: ranks
|
|
||||||
|
|
||||||
data:
|
data:
|
||||||
central:
|
central:
|
||||||
|
Loading…
Reference in New Issue
Block a user