Plugin Development Workflow
Setting Up a New Plugin Project
Copy
# 1. Create project directory
mkdir my-plugin
cd my-plugin
# 2. Download latest Paper server for testing
mcmp tool paper download --interactive
# 3. Add Bukkit API dependency
mcmp add org.bukkit:bukkit --version 1.21.1-R0.1-SNAPSHOT
# 4. Create your plugin structure
mkdir -p src/main/java/com/example/plugin
Development with Watch Mode
Copy
# Terminal 1: Auto-compile your plugin
mcmp build --watch --target jar --main-class com.example.plugin.MyPlugin
# Terminal 2: Auto-restart your test server
mcmp run --watch --jvm-args "-Xmx2G"
Complete Plugin Development Setup
Copy
# 1. Initialize project
mkdir my-awesome-plugin
cd my-awesome-plugin
# 2. Add dependencies
mcmp add org.bukkit:bukkit --version 1.21.1-R0.1-SNAPSHOT
mcmp add org.spigotmc:spigot-api --version 1.21.1-R0.1-SNAPSHOT
mcmp add junit --version 5.9.2 --scope test
# 3. Add Maven Central repository
mcmp repo central --url https://repo1.maven.org/maven2/
# 4. Download Paper server for testing
mcmp tool paper download --project paper --version 1.21.1 --output ./server/
# 5. Start development
mcmp build --watch --target jar --main-class com.example.MyPlugin
Server Management
Automated Server Updates
Copy
#!/bin/bash
# update-server.sh
# Get latest Paper version
LATEST_VERSION=$(mcmp tool paper versions paper --flatten --number 1 | jq -r '.[0]')
# Get latest build for that version
LATEST_BUILD=$(mcmp tool paper latest paper $LATEST_VERSION --output json | jq -r '.build')
# Download to server directory
mcmp tool paper download \
--project paper \
--version $LATEST_VERSION \
--build $LATEST_BUILD \
--output ./server/
echo "Updated to Paper $LATEST_VERSION build $LATEST_BUILD"
Multi-Server Setup
Copy
# Create multiple server instances
for version in 1.20.4 1.21.1; do
mkdir -p servers/paper-$version
mcmp tool paper download \
--project paper \
--version $version \
--output servers/paper-$version/
done
CI/CD Integration
GitHub Actions Example
Copy
name: Build and Test Plugin
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install MCMP CLI
run: cargo install mcmp_cli
- name: Download Paper Server
run: mcmp tool paper download --project paper --version 1.21.1 --output ./server/
- name: Build Plugin
run: mcmp build --target jar --main-class com.example.MyPlugin
- name: Test Plugin
run: mcmp run --classpath ./target/classes:./server/paper-1.21.1.jar
Docker Integration
Copy
FROM openjdk:17-jdk-slim
# Install MCMP CLI
RUN cargo install mcmp_cli
# Set working directory
WORKDIR /app
# Copy project files
COPY . .
# Build the project
RUN mcmp build --target jar --main-class com.example.MyPlugin
# Download Paper server
RUN mcmp tool paper download --project paper --version 1.21.1 --output ./server/
# Expose port
EXPOSE 25565
# Start server
CMD ["mcmp", "run", "--classpath", "./target/classes:./server/paper-1.21.1.jar"]
Advanced Usage
Custom Build Scripts
Copy
#!/bin/bash
# build-plugin.sh
PLUGIN_NAME="MyPlugin"
VERSION="1.0.0"
MAIN_CLASS="com.example.MyPlugin"
# Build the plugin
mcmp build \
--target jar \
--main-class $MAIN_CLASS \
--jar-name ${PLUGIN_NAME}-${VERSION}.jar
# Create plugin.yml
cat > plugin.yml << EOF
name: $PLUGIN_NAME
version: $VERSION
main: $MAIN_CLASS
api-version: 1.21
EOF
# Package everything
mkdir -p dist
cp target/${PLUGIN_NAME}-${VERSION}.jar dist/
cp plugin.yml dist/
echo "Plugin built: dist/${PLUGIN_NAME}-${VERSION}.jar"
Dependency Management
Copy
# Add multiple dependencies at once
mcmp add org.bukkit:bukkit --version 1.21.1-R0.1-SNAPSHOT
mcmp add org.spigotmc:spigot-api --version 1.21.1-R0.1-SNAPSHOT
mcmp add com.google.guava:guava --version 32.1.2-jre
mcmp add org.slf4j:slf4j-api --version 2.0.7
# Add test dependencies
mcmp add junit --version 5.9.2 --scope test
mcmp add org.mockito:mockito-core --version 5.3.1 --scope test
# View dependency tree
mcmp tree
Server Configuration
Copy
# Download and configure server
mcmp tool paper download --project paper --version 1.21.1 --output ./server/
# Create server.properties
cat > server/server.properties << EOF
server-port=25565
max-players=20
motd=My Awesome Server
gamemode=survival
difficulty=normal
level-name=world
EOF
# Create eula.txt
echo "eula=true" > server/eula.txt
# Start server
cd server
mcmp run --jvm-args "-Xmx2G -Xms1G"
Troubleshooting
Common Issues
Build fails with classpath errors:Copy
# Check dependencies
mcmp tree
# Add missing dependency
mcmp add org.bukkit:bukkit --version 1.21.1-R0.1-SNAPSHOT
Copy
# Check Java version
java -version
# Run with debug output
mcmp run --jvm-args "-Xmx2G -Ddebug=true"
Copy
# Use interactive mode for better error messages
mcmp tool paper download --interactive
# Check available versions
mcmp tool paper versions paper
Performance Tips
For large projects:Copy
# Use incremental compilation
mcmp build --watch
# Optimize JVM settings
mcmp run --jvm-args "-Xmx4G -Xms2G -XX:+UseG1GC"
Copy
# Use watch mode for rapid iteration
mcmp build --watch &
mcmp run --watch
Integration with Other Tools
VS Code Integration
Create.vscode/tasks.json:
Copy
{
"version": "2.0.0",
"tasks": [
{
"label": "Build Plugin",
"type": "shell",
"command": "mcmp",
"args": ["build", "--target", "jar", "--main-class", "com.example.MyPlugin"],
"group": "build"
},
{
"label": "Run Server",
"type": "shell",
"command": "mcmp",
"args": ["run", "--jvm-args", "-Xmx2G"],
"group": "test"
}
]
}
Makefile Integration
Copy
.PHONY: build run clean test
build:
mcmp build --target jar --main-class com.example.MyPlugin
run:
mcmp run --jvm-args "-Xmx2G"
clean:
rm -rf target/
test:
mcmp run --classpath ./target/classes:./server/paper-1.21.1.jar
download-server:
mcmp tool paper download --project paper --version 1.21.1 --output ./server/