-1

How to best way to receive info to cite from minecraft plugin? Maybe used simple http servlet, but how start him without Tomcat? Or, maybe, better to use websockets?

I'm creating a project used plugin "Minecraft" like spigot plugin and try to add spring boot web starter but i don't know how to connect him to plugin.

I've added dependencies and change plugin to:

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.sniklz</groupId>
    <artifactId>snikkzPlugin</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>SnikkzPlugin</name>

    <description>asdasd</description>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>papermc-repo</id>
            <url>https://repo.papermc.io/repository/maven-public/</url>
        </repository>
        <repository>
            <id>sonatype</id>
            <url>https://oss.sonatype.org/content/groups/public/</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>io.papermc.paper</groupId>
            <artifactId>paper-api</artifactId>
            <version>1.18.2-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>3.0.1</version>
        </dependency>
    </dependencies>
</project>

SniklzPlugin.class:

package com.sniklz.snikkzplugin;

import org.bukkit.plugin.java.JavaPlugin;

public final class SnikkzPlugin extends JavaPlugin {

    @Override
    public void onEnable() {
        // Plugin startup logic
        new Thread(() -> {
            SniklzPluginApp.start();
        }).start();
    }

    @Override
    public void onDisable() {
        // Plugin shutdown logic
    }
}

sniklzPluginApp.class:

package com.sniklz.snikkzplugin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class SniklzPluginApp {

    public static void start() {
        SpringApplication.run(SniklzPluginApp.class);
    }
}

controller->firstController.class:

package com.sniklz.snikkzplugin.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/home")
public class FirstContoller {

    @GetMapping
    public String homeController() {
        System.out.println("Hello World");
        return "Hello world";
    }
}

But when I build the plugin and start it from server, I get this error:

Exception in thread "Thread-6" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
[09:02:43 WARN]:        at snikkzPlugin-1.0-SNAPSHOT.jar//com.sniklz.snikkzplugin.SniklzPluginApp.start(SniklzPluginApp.java:14)
[09:02:43 WARN]:        at snikkzPlugin-1.0-SNAPSHOT.jar//com.sniklz.snikkzplugin.SnikkzPlugin.lambda$onEnable$0(SnikkzPlugin.java:11)
[09:02:43 WARN]:        at java.base/java.lang.Thread.run(Thread.java:833)
[09:02:43 WARN]: Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
[09:02:43 WARN]:        at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:151)
[09:02:43 WARN]:        at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:103)
[09:02:43 WARN]:        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Igor Bukur
  • 21
  • 4

1 Answers1

0

The issue come from that you don't have the spring code with your plugin. To fix this, you should include dependencies as jar.

You can also add a jar of spring in the class loader.

Finally, you can do new Thread(SniklzPluginApp::start).start(); for a one-line starter

Elikill58
  • 4,050
  • 24
  • 23
  • 45