package de.lucadev.plugin;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class LicenseManager {
public static boolean checkLicense(JavaPlugin plugin) {
File dataFolder = plugin.getDataFolder();
File licenseFile = new File(dataFolder, "license.yml");
// 1. license.yml erstellen
if (!licenseFile.exists()) {
if (!dataFolder.exists()) dataFolder.mkdirs();
YamlConfiguration config = new YamlConfiguration();
config.set("license-key", "HIER_KEY_EINTRAGEN");
try { config.save(licenseFile); } catch (Exception ignored) {}
plugin.getLogger().warning("Bitte trage deinen Lizenz-Key in plugins/" + plugin.getName() + "/license.yml ein!");
Bukkit.getPluginManager().disablePlugin(plugin);
return false;
}
// 2. Key lesen
YamlConfiguration config = YamlConfiguration.loadConfiguration(licenseFile);
String licenseKey = config.getString("license-key", "").trim();
if (licenseKey.isEmpty() || licenseKey.equalsIgnoreCase("HIER_KEY_EINTRAGEN")) {
plugin.getLogger().severe("[LIZENZ] Kein gueltiger Key in license.yml eingetragen!");
Bukkit.getPluginManager().disablePlugin(plugin);
return false;
}
// 3. Server-Telemetrie erfassen (IP:Port, Server-Version, Java-Version)
String host = "unknown";
try { host = InetAddress.getLocalHost().getHostAddress(); } catch (Exception ignored) {}
int port = Bukkit.getPort();
String serverIpPort = host + ":" + port;
String serverId = host + "-" + port;
String serverVersion = Bukkit.getName() + " " + Bukkit.getVersion();
String javaVersion = "Java " + System.getProperty("java.version");
// 4. API-Anfrage
try {
URL url = new URL("https://api.lucadev.dev/api/license/activate");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
conn.setRequestProperty("Accept", "application/json");
conn.setConnectTimeout(8000);
conn.setReadTimeout(8000);
conn.setDoOutput(true);
String jsonPayload = String.format(
"{\"licenseKey\":\"%s\",\"serverId\":\"%s\",\"serverIp\":\"%s\",\"serverVersion\":\"%s\",\"javaVersion\":\"%s\"}",
licenseKey, serverId, serverIpPort, serverVersion, javaVersion
);
byte[] input = jsonPayload.getBytes(StandardCharsets.UTF_8);
try (OutputStream os = conn.getOutputStream()) { os.write(input, 0, input.length); }
int code = conn.getResponseCode();
BufferedReader in = new BufferedReader(new InputStreamReader(
code >= 200 && code < 300 ? conn.getInputStream() : conn.getErrorStream(),
StandardCharsets.UTF_8
));
StringBuilder sb = new StringBuilder();
String line;
while ((line = in.readLine()) != null) sb.append(line);
in.close();
if (code == 200 && sb.toString().contains("\"valid\":true")) {
plugin.getLogger().info("§a[Lizenz] Lizenz erfolgreich verifiziert!");
return true;
}
} catch (Exception e) {
plugin.getLogger().severe("[Lizenz] Fehler beim Erreichen des Lizenzservers: " + e.getMessage());
Bukkit.getPluginManager().disablePlugin(plugin);
return false;
}
plugin.getLogger().severe("§c[Lizenz] Ungueltig oder bereits auf einem anderen Server aktiv!");
Bukkit.getPluginManager().disablePlugin(plugin);
return false;
}
}