Java Integration

Panduan lengkap untuk mengintegrasikan NxGate ke plugin Minecraft Java Anda.

Instalasi

Maven

pom.xml
1<repositories>
2 <repository>
3 <id>github</id>
4 <url>https://maven.pkg.github.com/NoxlyDev/NxGate-Library</url>
5 </repository>
6</repositories>
7
8<dependencies>
9 <dependency>
10 <groupId>xyz.noxlydev.nxgate</groupId>
11 <artifactId>nxgate</artifactId>
12 <version>1.0.0</version>
13 </dependency>
14</dependencies>

Gradle (Kotlin DSL)

build.gradle.kts
1repositories {
2 maven {
3 url = uri("https://maven.pkg.github.com/NoxlyDev/NxGate-Library")
4 credentials {
5 username = project.findProperty("gpr.user") ?: System.getenv("GITHUB_USERNAME")
6 password = project.findProperty("gpr.token") ?: System.getenv("GITHUB_TOKEN")
7 }
8 }
9}
10
11dependencies {
12 implementation 'xyz.noxlydev.nxgate:nxgate:1.0.0'
13}

Penting: GitHub Token Required

Library NxGate di-host di GitHub Packages. Anda HARUS menambahkan GitHub token dengan scope read:packages di file ~/.m2/settings.xml.

~/.m2/settings.xml
1<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
4 http://maven.apache.org/xsd/settings-1.0.0.xsd">
5 <servers>
6 <server>
7 <id>github</id>
8 <username>YOUR_GITHUB_USERNAME</username>
9 <password>YOUR_GITHUB_TOKEN</password>
10 </server>
11 </servers>
12</settings>

Penggunaan Dasar

Berikut contoh implementasi dasar NxGate di plugin Minecraft:

1. Konfigurasi config.yml

config.yml
1# NxGate License Configuration
2license-key: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

2. Main.java

Main.java
1import xyz.noxlydev.nxgate.NxGateClient;
2import xyz.noxlydev.nxgate.VerificationResult;
3
4public class Main extends JavaPlugin {
5
6 @Override
7 public void onEnable() {
8 // Ambil license key dari config
9 saveDefaultConfig();
10 String licenseKey = getConfig().getString("license-key");
11
12 // Inisialisasi client dengan user ID dan license key
13 NxGateClient client = new NxGateClient("YOUR_USER_ID", licenseKey);
14
15 // Verifikasi lisensi
16 VerificationResult result = client.verify();
17
18 if (result.isValid()) {
19 getLogger().info("License verified successfully!");
20 // Plugin berjalan normal
21 } else {
22 getLogger().severe("License verification failed: " + result.getResult());
23 getLogger().severe("Disabling plugin...");
24 getServer().getPluginManager().disablePlugin(this);
25 }
26 }
27}

Langkah-langkah

  1. Ambil license key dari config.yml
  2. Inisialisasi NxGateClient dengan user ID dan license key
  3. Panggil method verify() untuk memverifikasi
  4. Handle hasil verifikasi (valid/invalid)

Penggunaan Advanced

Untuk fitur lebih lengkap seperti offline mode, RSA challenge, dan custom configuration:

Main.java (Advanced)
1import xyz.noxlydev.nxgate.NxGateClient;
2import xyz.noxlydev.nxgate.VerificationResult;
3import xyz.noxlydev.nxgate.NxGateConfig;
4
5public class Main extends JavaPlugin {
6
7 private NxGateClient client;
8
9 @Override
10 public void onEnable() {
11 saveDefaultConfig();
12 String licenseKey = getConfig().getString("license-key");
13
14 // Konfigurasi advanced dengan custom settings
15 NxGateConfig config = new NxGateConfig()
16 .setUserId("YOUR_USER_ID")
17 .setLicenseKey(licenseKey)
18 .setServerUrl("https://api.nxgate.noxly.dev") // Custom server jika self-host
19 .setScope("minecraft-server") // Optional: untuk license scope
20 .setTimeout(5000) // Timeout dalam ms
21 .enableOfflineMode(true); // Enable offline caching
22
23 client = new NxGateClient(config);
24
25 // Verifikasi dengan RSA challenge untuk keamanan tambahan
26 VerificationResult result = client.verifyWithChallenge();
27
28 switch (result.getResult()) {
29 case VALID:
30 getLogger().info("✓ License valid!");
31 break;
32 case INVALID:
33 getLogger().severe("✗ License key tidak valid");
34 disablePlugin();
35 break;
36 case EXPIRED:
37 getLogger().severe("✗ License sudah expired");
38 disablePlugin();
39 break;
40 case RATE_LIMITED:
41 getLogger().warning("âš  Rate limit tercapai, menggunakan cache");
42 break;
43 case IP_LIMIT_EXCEEDED:
44 getLogger().severe("✗ IP limit terlampaui");
45 disablePlugin();
46 break;
47 case SCOPE_MISMATCH:
48 getLogger().severe("✗ License scope tidak cocok");
49 disablePlugin();
50 break;
51 case CONNECTION_ERROR:
52 if (config.isOfflineModeEnabled()) {
53 getLogger().warning("âš  Tidak dapat terhubung, menggunakan cache");
54 } else {
55 getLogger().severe("✗ Gagal terhubung ke server");
56 disablePlugin();
57 }
58 break;
59 default:
60 getLogger().severe("✗ Error tidak dikenal: " + result.getMessage());
61 disablePlugin();
62 }
63 }
64
65 private void disablePlugin() {
66 getServer().getPluginManager().disablePlugin(this);
67 }
68
69 @Override
70 public void onDisable() {
71 if (client != null) {
72 client.close();
73 }
74 }
75}

Maven Shade Plugin

Wajib: Shade Library

Anda HARUS menggunakan maven-shade-plugin untuk memasukkan library NxGate ke dalam JAR plugin Anda. Jika tidak, Anda akan mendapat ClassNotFoundException saat runtime.

pom.xml
1<build>
2 <plugins>
3 <plugin>
4 <groupId>org.apache.maven.plugins</groupId>
5 <artifactId>maven-shade-plugin</artifactId>
6 <version>3.5.1</version>
7 <executions>
8 <execution>
9 <phase>package</phase>
10 <goals>
11 <goal>shade</goal>
12 </goals>
13 <configuration>
14 <relocations>
15 <relocation>
16 <pattern>xyz.noxlydev.nxgate</pattern>
17 <shadedPattern>your.plugin.package.libs.nxgate</shadedPattern>
18 </relocation>
19 </relocations>
20 </configuration>
21 </execution>
22 </executions>
23 </plugin>
24 </plugins>
25</build>

Relocation package penting untuk menghindari konflik dengan plugin lain yang mungkin menggunakan versi NxGate berbeda.

Langkah Selanjutnya