Skip to content

Commit

Permalink
implement runner and separate http transfer logic
Browse files Browse the repository at this point in the history
  • Loading branch information
alex2276564 committed Feb 6, 2025
1 parent e67425e commit 7b9d5a2
Show file tree
Hide file tree
Showing 5 changed files with 151 additions and 23 deletions.
17 changes: 16 additions & 1 deletion src/main/java/uz/alex2276564/leverlock/LeverLock.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,32 @@
import org.bukkit.plugin.java.JavaPlugin;
import uz.alex2276564.leverlock.commands.reloadcommand.ReloadCommand;
import uz.alex2276564.leverlock.listeners.PlayerLeverClickListener;
import uz.alex2276564.leverlock.task.BukkitRunner;
import uz.alex2276564.leverlock.task.Runner;
import uz.alex2276564.leverlock.utils.ConfigManager;
import uz.alex2276564.leverlock.utils.UpdateChecker;

public final class LeverLock extends JavaPlugin {
@Getter
private static LeverLock instance;

@Getter
private Runner runner;

@Override
public void onEnable() {
instance = this;
setupRunner();
registerListeners();
registerCommands();
loadUtils();
checkUpdates();
}

private void setupRunner() {
runner = new BukkitRunner(this);
}

private void registerListeners() {
getServer().getPluginManager().registerEvents(new PlayerLeverClickListener(this), this);
}
Expand All @@ -33,8 +43,13 @@ private void loadUtils() {
}

private void checkUpdates() {
UpdateChecker updateChecker = new UpdateChecker(this, "alex2276564/LeverLock");
UpdateChecker updateChecker = new UpdateChecker(this, "alex2276564/LeverLock", runner);
updateChecker.checkForUpdates();
}

@Override
public void onDisable() {
runner.cancelTasks();
}

}
51 changes: 51 additions & 0 deletions src/main/java/uz/alex2276564/leverlock/task/BukkitRunner.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package uz.alex2276564.leverlock.task;

import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitScheduler;
import org.jetbrains.annotations.NotNull;

public class BukkitRunner implements Runner {

private final JavaPlugin plugin;
private final BukkitScheduler scheduler;

public BukkitRunner(JavaPlugin plugin) {
this.plugin = plugin;
this.scheduler = plugin.getServer().getScheduler();
}

@Override
public void run(@NotNull Runnable task) {
scheduler.runTask(plugin, task);
}

@Override
public void runAsync(@NotNull Runnable task) {
scheduler.runTaskAsynchronously(plugin, task);
}

@Override
public void runDelayed(@NotNull Runnable task, long delayTicks) {
scheduler.runTaskLater(plugin, task, delayTicks);
}

@Override
public void runDelayedAsync(@NotNull Runnable task, long delayTicks) {
scheduler.runTaskLaterAsynchronously(plugin, task, delayTicks);
}

@Override
public void runPeriodical(@NotNull Runnable task, long delayTicks, long periodTicks) {
scheduler.runTaskTimer(plugin, task, delayTicks, periodTicks);
}

@Override
public void runPeriodicalAsync(@NotNull Runnable task, long delayTicks, long periodTicks) {
scheduler.runTaskTimerAsynchronously(plugin, task, delayTicks, periodTicks);
}

@Override
public void cancelTasks() {
scheduler.cancelTasks(plugin);
}
}
20 changes: 20 additions & 0 deletions src/main/java/uz/alex2276564/leverlock/task/Runner.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package uz.alex2276564.leverlock.task;

import org.jetbrains.annotations.NotNull;

public interface Runner {

void run(@NotNull Runnable task);

void runAsync(@NotNull Runnable task);

void runDelayed(@NotNull Runnable task, long delayTicks);

void runDelayedAsync(@NotNull Runnable task, long delayTicks);

void runPeriodical(@NotNull Runnable task, long delayTicks, long periodTicks);

void runPeriodicalAsync(@NotNull Runnable task, long delayTicks, long periodTicks);

void cancelTasks();
}
51 changes: 51 additions & 0 deletions src/main/java/uz/alex2276564/leverlock/utils/HttpUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package uz.alex2276564.leverlock.utils;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import lombok.Getter;

import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public class HttpUtils {

@Getter
public static class HttpResponse {
private final int responseCode;
private final JsonObject jsonBody;

public HttpResponse(int responseCode, JsonObject jsonBody) {
this.responseCode = responseCode;
this.jsonBody = jsonBody;
}
}

/**
* Executes a GET request and returns an HttpResponse containing the response code and JSON body.
*
* @param urlString URL for the request.
* @param userAgent User-Agent for the header (you can pass null if not needed).
* @return HttpResponse containing the response code and JSON body.
* @throws Exception if the request fails.
*/
public static HttpResponse getResponse(String urlString, String userAgent) throws Exception {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setRequestMethod("GET");
if (userAgent != null) {
connection.setRequestProperty("User-Agent", userAgent);
}

try (InputStreamReader reader = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)) {
int responseCode = connection.getResponseCode();
JsonObject jsonBody = JsonParser.parseReader(reader).getAsJsonObject();

return new HttpResponse(responseCode, jsonBody);
} finally {
connection.disconnect();
}
}
}
35 changes: 13 additions & 22 deletions src/main/java/uz/alex2276564/leverlock/utils/UpdateChecker.java
Original file line number Diff line number Diff line change
@@ -1,30 +1,27 @@
package uz.alex2276564.leverlock.utils;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
import uz.alex2276564.leverlock.task.Runner;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class UpdateChecker {
private final JavaPlugin plugin;
private final String githubRepo;
private final Runner runner;

public UpdateChecker(JavaPlugin plugin, String githubRepo) {
public UpdateChecker(JavaPlugin plugin, String githubRepo, Runner runner) {
this.plugin = plugin;
this.githubRepo = githubRepo;
this.runner = runner;
}

public void checkForUpdates() {
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
runner.runAsync(() -> {
try {
String latestVersion = getLatestVersion();
if (latestVersion != null && !latestVersion.equals(plugin.getDescription().getVersion())) {
if (!latestVersion.equals(plugin.getDescription().getVersion())) {
plugin.getLogger().info("");
plugin.getLogger().info("New version available: " + latestVersion);
plugin.getLogger().info("You are running version: " + plugin.getDescription().getVersion());
Expand All @@ -33,27 +30,21 @@ public void checkForUpdates() {
} else {
plugin.getLogger().info("You are running the latest version of " + plugin.getDescription().getName());
}
} catch (IOException e) {
} catch (Exception e) {
plugin.getLogger().warning("Failed to check for updates: " + e.getMessage());
}
});
}

private String getLatestVersion() throws IOException {
private String getLatestVersion() throws Exception {
String apiUrl = "https://api.github.com/repos/" + githubRepo + "/releases/latest";
URL url = new URL(apiUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
HttpUtils.HttpResponse response = HttpUtils.getResponse(apiUrl, "MinecraftPlugin");

connection.setRequestMethod("GET");
connection.setRequestProperty("User-Agent", "MinecraftPlugin");

if (connection.getResponseCode() != 200) {
throw new IOException("Failed to check for updates: HTTP " + connection.getResponseCode());
}

try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
JsonObject jsonObject = JsonParser.parseReader(reader).getAsJsonObject();
if (response.getResponseCode() == HttpURLConnection.HTTP_OK) {
JsonObject jsonObject = response.getJsonBody();
return jsonObject.get("tag_name").getAsString();
} else {
throw new Exception("GitHub API returned HTTP " + response.getResponseCode());
}
}
}

0 comments on commit 7b9d5a2

Please sign in to comment.