Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
e1ff91f1d8 | |||
56e0c8f22a |
22
.vscode/launch.json
vendored
Normal file
22
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "java",
|
||||
"name": "Launch App",
|
||||
"request": "launch",
|
||||
"mainClass": "net.reslate.mcswebapi.App",
|
||||
"projectName": "mcswebapi"
|
||||
},
|
||||
{
|
||||
"type": "java",
|
||||
"name": "Attach",
|
||||
"request": "attach",
|
||||
"hostName": "localhost",
|
||||
"port": "25577"
|
||||
}
|
||||
]
|
||||
}
|
11
.vscode/settings.json
vendored
Normal file
11
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"java.configuration.updateBuildConfiguration": "automatic",
|
||||
"yaml.schemas": {
|
||||
"https://json.schemastore.org/bukkit-plugin.json": "file:///home/ydeng/MCSWebAPI/plugin.yml"
|
||||
},
|
||||
"cSpell.words": [
|
||||
"Javalin",
|
||||
"mcswebapi"
|
||||
],
|
||||
"java.compile.nullAnalysis.mode": "automatic"
|
||||
}
|
45
.vscode/tasks.json
vendored
Normal file
45
.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
{
|
||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||
// for the documentation about the tasks.json format
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "verify",
|
||||
"type": "shell",
|
||||
"command": "mvn -B verify",
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "package",
|
||||
"type": "shell",
|
||||
"command": "mvn -B package",
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "test",
|
||||
"type": "shell",
|
||||
"command": "mvn -B test",
|
||||
"group": "test"
|
||||
},
|
||||
{
|
||||
"label": "load latest build",
|
||||
"type": "shell",
|
||||
"command": "python3",
|
||||
"args": [
|
||||
"${workspaceFolder}/SpigotPluginBaseTools/load_plugin.py"
|
||||
],
|
||||
"dependsOn": "package",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "launch dev. server",
|
||||
"type": "shell",
|
||||
"command": "python3",
|
||||
"dependsOn": "load latest build",
|
||||
"args": [
|
||||
"${workspaceFolder}/SpigotPluginBaseTools/start_server.py"
|
||||
],
|
||||
"problemMatcher": []
|
||||
},
|
||||
]
|
||||
}
|
10
Jenkinsfile
vendored
Normal file
10
Jenkinsfile
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
pipeline {
|
||||
agent any
|
||||
stages {
|
||||
stage('tests') {
|
||||
steps {
|
||||
sh 'mvn -B test'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
6
environment.yml
Normal file
6
environment.yml
Normal file
@ -0,0 +1,6 @@
|
||||
name: mcswebapi
|
||||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- openjdk=17.0.*
|
||||
- maven=3.8.*
|
@ -1,17 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>xyz.reslate.mcswebapi</groupId>
|
||||
<artifactId>mcswebapi</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<name>mcswebapi</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency><groupId>org.spigotmc</groupId><artifactId>spigot-api</artifactId><version>LATEST</version><type>jar</type><scope>provided</scope></dependency></dependencies>
|
||||
<repositories><repository><id>spigot-repo</id><url>https://hub.spigotmc.org/nexus/content/repositories/public/</url></repository></repositories></project>
|
@ -1,13 +0,0 @@
|
||||
package xyz.reslate.mcswebapi;
|
||||
|
||||
/**
|
||||
* Hello world!
|
||||
*
|
||||
*/
|
||||
public class App
|
||||
{
|
||||
public static void main( String[] args )
|
||||
{
|
||||
System.out.println( "Hello World!" );
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
package xyz.reslate.mcswebapi;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* Unit test for simple App.
|
||||
*/
|
||||
public class AppTest
|
||||
extends TestCase
|
||||
{
|
||||
/**
|
||||
* Create the test case
|
||||
*
|
||||
* @param testName name of the test case
|
||||
*/
|
||||
public AppTest( String testName )
|
||||
{
|
||||
super( testName );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the suite of tests being tested
|
||||
*/
|
||||
public static Test suite()
|
||||
{
|
||||
return new TestSuite( AppTest.class );
|
||||
}
|
||||
|
||||
/**
|
||||
* Rigourous Test :-)
|
||||
*/
|
||||
public void testApp()
|
||||
{
|
||||
assertTrue( true );
|
||||
}
|
||||
}
|
65
pom.xml
Normal file
65
pom.xml
Normal file
@ -0,0 +1,65 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>net.reslate.mcswebapi</groupId>
|
||||
<artifactId>mcswebapi</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<properties>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
</properties>
|
||||
<name>mcswebapi</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.reflections</groupId>
|
||||
<artifactId>reflections</artifactId>
|
||||
<version>0.10.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.pac4j</groupId>
|
||||
<artifactId>javalin-pac4j</artifactId>
|
||||
<version>5.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.javalin</groupId>
|
||||
<artifactId>javalin</artifactId>
|
||||
<version>5.2.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.pac4j</groupId>
|
||||
<artifactId>pac4j-oauth</artifactId>
|
||||
<version>5.5.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter</artifactId>
|
||||
<version>5.8.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>1.19.2-R0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>2.22.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-failsafe-plugin</artifactId>
|
||||
<version>2.22.2</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>spigot-repo</id>
|
||||
<url>https://hub.spigotmc.org/nexus/content/repositories/public/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
</project>
|
43
src/main/java/net/reslate/mcswebapi/MCSWebAPI.java
Normal file
43
src/main/java/net/reslate/mcswebapi/MCSWebAPI.java
Normal file
@ -0,0 +1,43 @@
|
||||
package net.reslate.mcswebapi;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import io.javalin.Javalin;
|
||||
import net.reslate.mcswebapi.controllers.ControllerGroup;
|
||||
import net.reslate.mcswebapi.controllers.PublicServerInformation;
|
||||
|
||||
public class MCSWebAPI extends JavaPlugin
|
||||
{
|
||||
private Javalin javalin;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
Logger logger = getLogger();
|
||||
logger.info("Enabling MCSWebAPI...");
|
||||
javalin = Javalin.create();
|
||||
javalin.start(8080);
|
||||
prepareControllers(javalin);
|
||||
super.onEnable();
|
||||
logger.info("Enabled MCSWebAPI.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
Logger logger = getLogger();
|
||||
logger.info("Disabling MCSWebAPI...");
|
||||
javalin.close();
|
||||
super.onDisable();
|
||||
logger.info("Disabled MCSWebAPI.");
|
||||
}
|
||||
|
||||
|
||||
public void prepareControllers(Javalin javalin) {
|
||||
ControllerGroup controllerGroup = new ControllerGroup(javalin,
|
||||
new PublicServerInformation()
|
||||
);
|
||||
controllerGroup.loadAll();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package net.reslate.mcswebapi.controllers;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
|
||||
import io.javalin.Javalin;
|
||||
|
||||
public class ControllerGroup {
|
||||
private final HashSet<WebControllable> controllers;
|
||||
private final Javalin javalin;
|
||||
public ControllerGroup(Javalin javalin, WebControllable... controllers) {
|
||||
super();
|
||||
this.javalin = javalin;
|
||||
this.controllers = new HashSet<>(Arrays.asList(controllers));
|
||||
}
|
||||
|
||||
public void loadAll() {
|
||||
for (WebControllable controller : controllers) {
|
||||
controller.register(javalin);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package net.reslate.mcswebapi.controllers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import io.javalin.Javalin;
|
||||
import io.javalin.http.Context;
|
||||
|
||||
public class PublicServerInformation implements WebControllable {
|
||||
private String route = "/api/GeneralServerInfo";
|
||||
|
||||
public void getNumPlayersOnline(Context ctx) {
|
||||
ctx.json(Bukkit.getOnlinePlayers().size());
|
||||
}
|
||||
|
||||
public void getMaximumNumPlayers(Context ctx) {
|
||||
ctx.json(Bukkit.getMaxPlayers());
|
||||
}
|
||||
|
||||
public void getServerVersion(Context ctx) {
|
||||
ctx.json(Bukkit.getBukkitVersion());
|
||||
}
|
||||
|
||||
public void getWhitelistedPlayers(Context ctx) {
|
||||
ArrayList<String> playerNames = new ArrayList<>();
|
||||
Bukkit.getWhitelistedPlayers().forEach(player -> playerNames.add(player.getName()));
|
||||
ctx.json(playerNames);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(Javalin javalin) {
|
||||
javalin.get(route + "/numPlayersOnline", this::getNumPlayersOnline);
|
||||
javalin.get(route + "/maximumNumPlayers", this::getMaximumNumPlayers);
|
||||
javalin.get(route + "/serverVersion", this::getServerVersion);
|
||||
javalin.get(route + "/whitelistedPlayernames", this::getWhitelistedPlayers);
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package net.reslate.mcswebapi.controllers;
|
||||
|
||||
import io.javalin.Javalin;
|
||||
|
||||
public interface WebControllable {
|
||||
/**
|
||||
* Register the endpoints with their respective functions.
|
||||
* @param javalin The running Javalin instance these endpoints will be hosted on.
|
||||
*/
|
||||
public void register(Javalin javalin);
|
||||
}
|
5
src/main/resources/plugin.yml
Normal file
5
src/main/resources/plugin.yml
Normal file
@ -0,0 +1,5 @@
|
||||
main: net.reslate.mcswebapi.MCSWebAPI
|
||||
name: MCSWebAPI
|
||||
version: 0.0.1
|
||||
author: Reslate
|
||||
description: "A Minecraft Server Web API."
|
14
src/test/java/net/reslate/mcswebapi/AppTest.java
Normal file
14
src/test/java/net/reslate/mcswebapi/AppTest.java
Normal file
@ -0,0 +1,14 @@
|
||||
package net.reslate.mcswebapi;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class MyFirstJUnitJupiterTests {
|
||||
|
||||
@Test
|
||||
void testCase() {
|
||||
assertEquals(2, 2);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user