Dit is een template project om je eigen PlugModCore modules te maken. Volg deze stappen om aan de slag te gaan.
# Copy deze folder en hernoem naar je module naam
cp -r TemplateModule MyAwesomeModule
cd MyAwesomeModuleStap 1: Update pom.xml
<artifactId>MyAwesomeModule</artifactId> <!-- Hernoem dit -->
<version>1.0.0</version> <!-- Versie aanpassen -->Stap 2: Update src/main/resources/module.info.yml
id: myawesomemodule # Unieke module ID (lowercase, no spaces)
name: My Awesome Module # Display naam
version: 1.0.0 # Versie
main: org.wannes.MyAwesomeModule # Main class locatie
description: "Wat doet je module?"Stap 3: Hernoem Java klasse
# Hernoem TemplateModule.java naar je module naam
# Bijv. MyAwesomeModule.java
mv src/main/java/org/wannes/TemplateModule.java src/main/java/org/wannes/MyAwesomeModule.javaUpdate als de class reference in de file:
public class MyAwesomeModule implements Module {
// ...
}Open src/main/java/org/wannes/MyAwesomeModule.java en voeg je logica toe:
@Override
public void onEnable(ModuleContext context) {
// Hier wordt je module gestart
// - Config files laden
// - Event listeners registreren
// - Commands setup
// - Database init
// etc
}
@Override
public void onDisable() {
// Hier wordt je module gestopt
// - Resources opschonen
// - Threads stoppen
// - Database sluiten
}# In de TemplateModule folder
mvn clean packageDit creΓ«ert target/MyAwesomeModule-1.0-SNAPSHOT.jar
Copy de JAR naar PlugModCore:
cp target/MyAwesomeModule-1.0-SNAPSHOT.jar ../path/to/server/plugins/PlugModCore/modules/In-game (als je server draait):
/module load myawesomemodule
Of automatisch bij startup (Module wordt opgeslagen als geladen)
MyAwesomeModule/
βββ pom.xml # Maven build configuratie
βββ src/
β βββ main/
β β βββ java/org/wannes/
β β β βββ MyAwesomeModule.java # Je module klasse
β β βββ resources/
β β βββ module.info.yml # Module metadata
β β βββ web/ # (optioneel) Web UI assets
β β βββ index.html
β β βββ styles.css
β β βββ script.js
β βββ test/
β βββ java/org/wannes/ # Tests (optioneel)
βββ target/
βββ MyAwesomeModule-1.0-SNAPSHOT.jar # Gecompileerde JAR
PlugModCore Start
β
Scan modules/ folder
β
Lees module.info.yml
β
Load JAR (URLClassLoader)
β
Instantieer MyAwesomeModule() β no-args constructor!
β
Call onEnable(ModuleContext)
β
Module is actief!
β
On demand: onDisable()
BELANGRIJK: Je class moet een no-args (lege) constructor hebben!
public class MyAwesomeModule implements Module {
public MyAwesomeModule() { // β Dit MOET leeg zijn!
// Niets hier
}
}import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
public class PlayerListener implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
event.getPlayer().sendMessage("Welkom!");
}
}
// In je MyAwesomeModule.java:
@Override
public void onEnable(ModuleContext context) {
Bukkit.getPluginManager().registerEvents(
new PlayerListener(),
Bukkit.getPluginManager().getPlugin("PlugModCore")
);
}@Override
public void onEnable(ModuleContext context) {
// DataFolder is: plugins/PlugModCore/module-data/myawesomemodule/
File configFile = new File(context.getDataFolder(), "config.yml");
if (!configFile.exists()) {
// Copy default config als het niet bestaat
// Maak src/main/resources/config.yml
try {
context.getDataFolder().mkdirs();
Files.copy(
getClass().getResourceAsStream("/config.yml"),
configFile.toPath()
);
} catch (IOException e) {
context.getLogger().severe("Config error!");
}
}
// Nu kun je config.yml laden met YAML parser
// (bijv. SnakeYAML library)
}- Enable web in
module.info.yml:
website:
enabled: true
entry: web/index.html
title: "My Awesome Dashboard"-
Zet files in
src/main/resources/web/:index.html- Je web pagestyles.css- Stylingscript.js- JavaScript logica
-
Web API:
- Je files worden served op:
http://server:port/modules/myawesomemodule/web/ - Je kunt API calls doen naar PlugModCore web endpoints (zie PlugModCore documentatie)
- Je files worden served op:
ModuleContext context = ...;
Logger logger = context.getLogger();
logger.info("Module started");
logger.warning("Dit is een waarschuwing");
logger.severe("Dit is een error");public interface Module {
/**
* Called when module is enabled
* @param context - gives access to logger, dataFolder, module info, etc
*/
void onEnable(ModuleContext context);
/**
* Called when module is disabled
* Do cleanup here!
*/
void onDisable();
}String getModuleId() // "myawesomemodule"
String getModuleName() // "My Awesome Module"
String getVersion() // "1.0.0"
Logger getLogger() // Module logger
File getDataFolder() // plugins/PlugModCore/module-data/myawesomemodule/Oorzaak: Waarschijnlijk een ClassNotFoundException of NoSuchMethodException
Oplossing:
- Check of je class naam in
module.info.ymlcorrect is - Zorg dat je klasse een no-args constructor heeft
- Controleer dependencies in
pom.xml - Kijk in logs:
plugins/PlugModCore/logs/
Oorzaak: Waarschijnlijk je onEnable() is leeg of heeft errors
Oplossing:
- Voeg logging toe aan
onEnable()om te zien wat gebeurt - Check logger output in server console
- Zorg dat alle try-catch blocks niet errors verbergen
Oorzaak: Maven build ging fout
Oplossing:
mvn clean package -X # -X = debug outputVoeg dependencies toe in pom.xml:
<dependencies>
<!-- Bukkit/Paper API (al standaard voor ServerMod modules) -->
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.21.11-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- JSON parsing (voorbeeld) -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
<!-- GUI Library (voorbeeld) -->
<dependency>
<groupId>org.example</groupId>
<artifactId>some-library</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>-
module.info.ymlis correct ingevuld -
pom.xmlhas correct<main>class path - Java class has no-args constructor
-
onEnable()enonDisable()zijn geΓ―mplementeerd - Module is getest (draait zonder errors)
- JAR file is gegenereerd (
target/*.jar) - Alle exceptions zijn gehandeld in try-catch blokken
- Logger is gebruikt ipv System.out.println()
Kijk naar voorbeeldmodules:
- ScoreBoard - Eenvoudig voorbeeld met Bukkit integration
- Kijk naar PlugModCore source code voor web API endpoints
Veel succes met je module! π