[JAVA] Création de plugins Spigot à l'aide d'Eclipse

Choses à faire

スクリーンショット 2019-08-12 23.00.57.png Je vais implémenter un plug-in super simple qui affiche le journal lorsque le plug-in est activé comme ça. Si vous le faites correctement, cela prendra moins de 15 minutes.

Public cible

  1. Le serveur minecraft spigot a déjà été construit.

Environnement de l'écrivain

macOS Mojave La dernière version: 10.14.6

Macbook Pro (15-inch, 2018) Processeur: Intel Core i7 à 2,2 GHz Mémoire: 16 Go de DDR4 à 2400 MHz Disque de démarrage: Macintosh HD Graphiques: Radeon Pro 555X 4GB Intel UHD Graphics 630 1536MB

Introduction d'un environnement de développement complet (éclipse)

Accédez au Site de téléchargement. Ensuite, vous devriez pouvoir accéder aux sites suivants. Pour le moment, j'ai choisi la dernière version. スクリーンショット 2019-08-12 18.15.35.png

Ensuite, installez la «édition complète» de «Java» dans ce fichier. Il semble qu'il n'y ait pas de problème avec "Standard Edition", mais j'ai utilisé "Full Edition" car il n'y a aucune raison de la choisir. スクリーンショット 2019-08-12 18.17.15.png

Cependant, pour une raison quelconque, il était joué par la sécurité Mac, je l'ai donc résolu en me référant au site suivant. (Peut-être que la dernière version d'Eclipse n'était pas certifiée côté Mac?) Mac-Autoriser toutes les applications à s'exécuter

Créer un projet

Tout d'abord, sélectionnez Fichier-> Nouveau-> Projet Maven. スクリーンショット 2019-08-12 18.31.41.png

Ensuite, l'écran suivant s'affichera: Mettez un mandrin dans "Créer un projet unique (sauter la sélection d'architecture)" et cliquez sur "Suivant>". スクリーンショット 2019-08-12 18.37.27.png

Vient ensuite l'écran de saisie des informations sur le projet. (Qiita est juste ma faute de frappe ...) スクリーンショット 2019-08-12 18.42.35.png "ID de groupe" est le nom du créateur. "Artifact Id" est le nom du projet = nom du plug-in. Vous pouvez le nommer comme vous le souhaitez. «Version» est le numéro de version. Vous pouvez nommer cela comme vous le souhaitez. Réglez ces trois. D'autres ne devraient pas avoir besoin d'être modifiés.

Ceci termine la création du projet!

Définition de pon.xml

Ensuite, nous allons définir les paramètres de configuration du plug-in. Ici, préparez "ce dont vous avez besoin (dépendance)". Je pense que c'est l'état initial.

<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.github.kubota</groupId>
  <artifactId>QiitaSample</artifactId>
  <version>1.0.0</version>
</project>

Les paramètres relatifs au spigot sont décrits ici. Vous pouvez utiliser 'API Bukkit' en ajoutant 'spigot-repository' et 'Spigot-API' comme indiqué ci-dessous.

<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.github.kubota</groupId>
  <artifactId>QiitaSample</artifactId>
  <version>1.0.0</version>

  <!-- ↓ Spigot-repository -->
  <repositories>
    <repository>
      <id>spigot-repo</id>
      <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
    </repository>
  </repositories>

  <!-- ↓ Spigot-API -->
  <dependencies>
    <dependency>
      <groupId>org.spigotmc</groupId>
      <artifactId>spigot-api</artifactId>

      <!-- ↓ (Version Minecraft)-R0.1-SNAPSHOT -->
      <version>1.13.2-R0.1-SNAPSHOT</version>

      <scope>provided</scope>
    </dependency>
  </dependencies>
</project>

Cependant, cela seul ne fonctionnera pas selon la version de Minecraft, alors décrivez les propriétés comme suit.

<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.github.kubota</groupId>
  <artifactId>QiitaSample</artifactId>
  <version>1.0.0</version>

  <!-- ↓ Spigot-repository -->
  <repositories>
    <repository>
      <id>spigot-repo</id>
      <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
    </repository>
  </repositories>

  <!-- ↓ Spigot-API -->
  <dependencies>
    <dependency>
      <groupId>org.spigotmc</groupId>
      <artifactId>spigot-api</artifactId>

      <!-- ↓ (Version Minecraft)-R0.1-SNAPSHOT -->
      <version>1.13.2-R0.1-SNAPSHOT</version>

      <scope>provided</scope>
    </dependency>
  </dependencies>

  <!--↓ Paramètre de propriété-->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!-- ↓ Java version 12 -->
    <maven.compiler.source>12</maven.compiler.source>
    <maven.compiler.target>12</maven.compiler.target>
  </properties>
</project>

Aussi, actuellement, changez comme suit pour faciliter la coopération avec plugin.yml qui sera ajouté plus tard.

<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.github.kubota</groupId>
  <artifactId>QiitaSample</artifactId>
  <version>1.0.0</version>

  <!-- ↓ Spigot-repository -->
  <repositories>
    <repository>
      <id>spigot-repo</id>
      <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
    </repository>
  </repositories>

  <!-- ↓ Spigot-API -->
  <dependencies>
    <dependency>
      <groupId>org.spigotmc</groupId>
      <artifactId>spigot-api</artifactId>

      <!-- ↓ (Version Minecraft)-R0.1-SNAPSHOT -->
      <version>1.13.2-R0.1-SNAPSHOT</version>

      <scope>provided</scope>
    </dependency>
  </dependencies>

  <!--↓ Paramètre de propriété-->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!-- ↓ Java version 12 -->
    <maven.compiler.source>12</maven.compiler.source>
    <maven.compiler.target>12</maven.compiler.target>
  </properties>

  <!-- plugin.yml à pom.Lien avec xml-->
  <build>
    <resources>
      <resource>
        <targetPath>.</targetPath>
        <filtering>true</filtering>
        <directory>src/main/resources/</directory>
      </resource>
    </resources>
  </build>

</project>

Ceci termine la modification de pom.xml.

Mise à jour du projet

La dépendance a un peu changé en raison du changement de pom.xml, il est donc nécessaire de la mettre à jour. Pour ce faire, cliquez avec le bouton droit de la souris sur le projet créé (QiitaSample est applicable sur mon écran) et sélectionnez Maven-> Mettre à jour le projet. Cela commencera à mettre à jour les dépendances (cela n'a pas pris longtemps). スクリーンショット 2019-08-12 20.07.21.png

Ensuite, vous verrez l'écran suivant. (Dans le cas de l'auteur, il y aura des projets créés avant, mais s'il s'agit de la première création, il n'y en aura qu'un) スクリーンショット 2019-08-12 20.12.35.png Chuck le projet créé cette fois-ci et appuyez sur OK, Ceci termine la mise à jour!

Créer un plug-in

Maintenant que les dépendances de l'API Bukkit ont été définies, vous pouvez commencer à créer le plugin lui-même.

Créer une classe principale

Cliquez-droit sur src / main / java sous le projet créé et sélectionnez [Nouveau] → [Package]. スクリーンショット 2019-08-12 20.16.00.png

Ensuite, utilisons le nom du package ** qui est l'ID du groupe et le nom de la prise connectés par. (Dot) **. Dans le cas de l'auteur, l'ID de groupe est «com.github.kubota» et le nom du plug-in est «QiitaSample», qui est «com.gtihub.kubota.qiitasample». Certaines modifications sont dues au fait que ce nom de package ne peut pas être utilisé en majuscules, il est donc remplacé par la partie inférieure, et - (trait d'union) ne peut pas être utilisé, il est donc remplacé par _ (trait de soulignement).

Ensuite, faites un clic droit sur le package créé et sélectionnez "Nouveau" -> "Classe". スクリーンショット 2019-08-12 20.26.40.png

Ensuite, l'écran suivant s'affichera, alors saisissons le nom de la classe qui y fleurira. Le nom peut être n'importe quoi, mais par souci de clarté, utilisons le nom du projet actuel ou Main. (C'est ma faute de frappe que Qiita ici est QIita ...) スクリーンショット 2019-08-12 20.32.30.png

Lorsque vous l'ouvrez, cela devrait ressembler à ceci:

package com.github.kubota.qiitasample;

public class QIitaPlugin {

}

Modifions cela comme suit.

package com.github.kubota.qiitasample;
import org.bukkit.plugin.java.JavaPlugin;

public class QIitaPlugin extends JavaPlugin{
	//↓ onEnable est une méthode qui est exécutée lorsqu'elle est chargée
	@Override
	public void onEnable() {
		//↓ Laisser un journal sur le serveur
		getLogger().info("Hello, Qiita!");
	}
}

Ensuite, j'expliquerai chaque partie modifiée une par une.

import org.bukkit.plugin.java.JavaPlugin;

Cette ligne importe les fonctionnalités nécessaires pour créer un plugin.

public class QIitaPlugin extends JavaPlugin{

Avec ʻexetends JavaPlugin` ajouté à ce stade, il est possible de créer en ajoutant des fonctions à la classe dans laquelle les fonctions de base de Minecraft sont déjà implémentées.

public class QIitaPlugin extends JavaPlugin{
	//↓ onEnable est une méthode qui est exécutée lorsqu'elle est chargée
	@Override
	public void onEnable() {
		//↓ Laisser un journal sur le serveur
		getLogger().info("Hello, Qiita!");
	}
}

Voici une brève explication de la méthode ʻonEnable. L'endroit appelé «@ Override» indique que la méthode de la classe «Javaplugin» est écrasée. La cible d'écrasement est la méthode ʻonEnable. La méthode ʻonEnable` est une méthode qui est automatiquement exécutée lorsque le plug-in est activé. Le traitement ici n'a aucune fonction tant qu'il n'est pas écrasé.

Donc, comme processus d'écrasement, ajoutez quelque chose qui s'appelle "Hello, Qiita!" À la console avec la méthode'getLogger (). Info () '. Par ce processus d'écrasement, il est devenu une méthode avec une fonction appelée ** qui affiche automatiquement "Hello, Qiita!" Sur la console lorsque le plug-in est activé.

Création de plugin.yml

Cliquez avec le bouton droit sur src / main / resources et sélectionnez Nouveau> Fichier. スクリーンショット 2019-08-12 20.51.55.png Créez ensuite un fichier nommé plugin.yml. スクリーンショット 2019-08-12 20.53.35.png Si les quatre suivants sont décrits.

name: "Classe principale"
version: "version"
main: "Classe principale"
api-version: "Version de l'API Bukkit""

name décrit le nom du plug-in. version est la version du plug-in. Cependant, cette version est OK si vous écrivez $ {project.version} car plugin.yml est lié à pom.xml cette fois. main décrit le nom du package de la classe principale et le nom de la classe reliés par des points. ʻApi-version` n'est pas strictement requis, mais c'est presque obligatoire, alors mentionnons-le.

Cela répertorie les versions d'API Bukkit prises en charge. Par exemple, 1.13 ou 1.13.2 vaut 1.13, 1.14 ou 1.14.2 vaut 1.14, et ainsi de suite.

name: "QiitaSample"
version: "${project.version}"
main: "com.github.kubota.qiitasample.QiitaSample"
api-version: "1.13"

Compilation du plug-in

Cela termine presque la mise en œuvre. Tout ce que vous avez à faire est de compiler. Pour ce faire, faites un clic droit sur le nom du projet et sélectionnez "Exécuter" -> "Maven install". スクリーンショット 2019-08-12 21.14.55.png

Lorsque vous faites cela, le résultat sera affiché sur l'écran de la console. S'il est affiché comme «BUILD SUCCESS», il réussit.

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.762 s
[INFO] Finished at: 2019-08-12T21:15:44+09:00
[INFO] ------------------------------------------------------------------------

Ensuite, le fichier Jar doit être ajouté à terget. スクリーンショット 2019-08-12 21.18.52.png

Si vous ajoutez ce fichier Jar aux Plugins du répertoire du serveur qui a été créé à l'origine et que vous l'exécutez, Plugin commencera à fonctionner. (Le nom du plug est QiitaTest pour diverses raisons, mais j'ai confirmé qu'il fonctionne normalement selon la procédure ci-dessus) スクリーンショット 2019-08-12 23.00.57.png

C'est la fin de ce contenu. J'ai développé le plug-in sous l'environnement Mac, mais je pense que ce sera utile car l'utilisation d'Eclipse elle-même est la même pour Windows. (Bien que la disposition des boutons puisse être légèrement différente ...)

A continué

Acceptez la commande [MineCraft plug-in] et déclenchez un événement

Où je suis resté coincé

name: "SampleProject"
version: "${project.version}"
main: "com.github.kubota.sampleproject.SampleProject"
api-version: "1.13"

Bien qu'il soit décrit dans plugin.yml de la partie principale. J'ai mal compris qu'il n'y a pas de problème avec uniquement le nom du paquet à cet endroit principal et je l'ai décrit comme suit.

name: "SampleProject"
version: "${project.version}"
main: "com.github.kubota.sampleproject"
api-version: "1.13"

Par conséquent, le fichier SampleProject n'a pas pu être référencé et l'erreur suivante a été générée.

[16:11:39 ERROR]: Could not load 'plugins/SampleProject' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Cannot find main class `com.github.kubota.sampleproject'
	at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:62) ~[spigot-1.13.2.jar:git-Spigot-1a3504a-dfa7583]
	at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:135) ~[spigot-1.13.2.jar:git-Spigot-1a3504a-dfa7583]
	at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:332) ~[spigot-1.13.2.jar:git-Spigot-1a3504a-dfa7583]
	at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:252) [spigot-1.13.2.jar:git-Spigot-1a3504a-dfa7583]
	at org.bukkit.craftbukkit.v1_13_R2.CraftServer.loadPlugins(CraftServer.java:325) [spigot-1.13.2.jar:git-Spigot-1a3504a-dfa7583]
	at net.minecraft.server.v1_13_R2.DedicatedServer.init(DedicatedServer.java:213) [spigot-1.13.2.jar:git-Spigot-1a3504a-dfa7583]
	at net.minecraft.server.v1_13_R2.MinecraftServer.run(MinecraftServer.java:698) [spigot-1.13.2.jar:git-Spigot-1a3504a-dfa7583]
	at java.lang.Thread.run(Thread.java:835) [?:?]
Caused by: java.lang.ClassNotFoundException: com.github.kubota.projectsample
	at java.net.URLClassLoader.findClass(URLClassLoader.java:436) ~[?:?]
	at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:136) ~[spigot-1.13.2.jar:git-Spigot-1a3504a-dfa7583]
	at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:82) ~[spigot-1.13.2.jar:git-Spigot-1a3504a-dfa7583]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:588) ~[?:?]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
	at java.lang.Class.forName0(Native Method) ~[?:?]
	at java.lang.Class.forName(Class.java:415) ~[?:?]
	at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:60) ~[spigot-1.13.2.jar:git-Spigot-1a3504a-dfa7583]
	... 7 more

Les références

Recommended Posts

Création de plugins Spigot à l'aide d'Eclipse
Créer des plug-ins asynchrones avec neovim
Créer une application Web avec Flask ②
Créer un tableau simple à l'aide de prettytable
Créer une application Web avec Flask ①
Créer un modèle d'apprentissage à l'aide de MNIST
Créer une application Web avec Flask ③
Créer une application Web avec Flask ④