Init
This commit is contained in:
212
content/reference/manifest-schema.en.md
Normal file
212
content/reference/manifest-schema.en.md
Normal file
@@ -0,0 +1,212 @@
|
||||
---
|
||||
title: Manifest Schema
|
||||
type: docs
|
||||
weight: 1
|
||||
---
|
||||
|
||||
The `manifest.json` file defines your plugin's metadata and configuration.
|
||||
|
||||
## Basic Structure
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "MyPlugin",
|
||||
"version": "1.0.0",
|
||||
"main": "com.example.MyPlugin",
|
||||
"dependencies": []
|
||||
}
|
||||
```
|
||||
|
||||
## Required Fields
|
||||
|
||||
### name
|
||||
**Type:** `string`
|
||||
|
||||
The unique identifier for your plugin. Used for logging and dependency resolution.
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "MyAwesomePlugin"
|
||||
}
|
||||
```
|
||||
|
||||
### version
|
||||
**Type:** `string`
|
||||
|
||||
The plugin version following semantic versioning (recommended).
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "1.0.0"
|
||||
}
|
||||
```
|
||||
|
||||
### main
|
||||
**Type:** `string`
|
||||
|
||||
The fully qualified class name of your main plugin class. This class must extend `JavaPlugin`.
|
||||
|
||||
```json
|
||||
{
|
||||
"main": "com.example.myplugin.MyPlugin"
|
||||
}
|
||||
```
|
||||
|
||||
## Optional Fields
|
||||
|
||||
### dependencies
|
||||
**Type:** `string[]`
|
||||
|
||||
List of plugin names this plugin depends on. Dependent plugins will be loaded first.
|
||||
|
||||
```json
|
||||
{
|
||||
"dependencies": ["CoreLib", "DatabasePlugin"]
|
||||
}
|
||||
```
|
||||
|
||||
### description
|
||||
**Type:** `string`
|
||||
|
||||
A brief description of your plugin.
|
||||
|
||||
```json
|
||||
{
|
||||
"description": "Adds awesome features to the server"
|
||||
}
|
||||
```
|
||||
|
||||
### author
|
||||
**Type:** `string`
|
||||
|
||||
The plugin author or team name.
|
||||
|
||||
```json
|
||||
{
|
||||
"author": "YourName"
|
||||
}
|
||||
```
|
||||
|
||||
### authors
|
||||
**Type:** `string[]`
|
||||
|
||||
List of plugin authors for team projects.
|
||||
|
||||
```json
|
||||
{
|
||||
"authors": ["Developer1", "Developer2"]
|
||||
}
|
||||
```
|
||||
|
||||
### website
|
||||
**Type:** `string`
|
||||
|
||||
Plugin homepage or documentation URL.
|
||||
|
||||
```json
|
||||
{
|
||||
"website": "https://example.com/myplugin"
|
||||
}
|
||||
```
|
||||
|
||||
## Complete Example
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "EconomyPlugin",
|
||||
"version": "2.1.0",
|
||||
"main": "com.example.economy.EconomyPlugin",
|
||||
"description": "A comprehensive economy system for Hytale servers",
|
||||
"author": "GameDev",
|
||||
"authors": ["GameDev", "Contributor1"],
|
||||
"website": "https://github.com/example/economy",
|
||||
"dependencies": ["DatabaseLib"]
|
||||
}
|
||||
```
|
||||
|
||||
## File Location
|
||||
|
||||
The `manifest.json` must be placed in the root of your plugin JAR file:
|
||||
|
||||
```
|
||||
MyPlugin.jar
|
||||
├── manifest.json
|
||||
├── com/
|
||||
│ └── example/
|
||||
│ └── myplugin/
|
||||
│ └── MyPlugin.class
|
||||
└── resources/
|
||||
└── config.yml
|
||||
```
|
||||
|
||||
## Validation
|
||||
|
||||
{{< callout type="warning" >}}
|
||||
The server validates manifest.json on startup. Invalid manifests will prevent your plugin from loading.
|
||||
|
||||
Common issues:
|
||||
- Missing required fields (name, version, main)
|
||||
- Invalid JSON syntax
|
||||
- Main class not found in JAR
|
||||
- Circular dependencies
|
||||
{{< /callout >}}
|
||||
|
||||
## Main Class Requirements
|
||||
|
||||
Your main class specified in `main` must:
|
||||
|
||||
1. Extend `JavaPlugin`
|
||||
2. Have a public no-argument constructor
|
||||
3. Be accessible in the JAR classpath
|
||||
|
||||
```java
|
||||
package com.example.myplugin;
|
||||
|
||||
import com.hypixel.hytale.server.core.plugin.JavaPlugin;
|
||||
|
||||
public class MyPlugin extends JavaPlugin {
|
||||
@Override
|
||||
public void start() {
|
||||
// Plugin enabled - register events, commands, etc.
|
||||
getLogger().at(Level.INFO).log("Plugin started!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void shutdown() {
|
||||
// Plugin disabled - cleanup resources
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Dependency Resolution
|
||||
|
||||
Dependencies are loaded in order:
|
||||
|
||||
1. All dependencies must be present and valid
|
||||
2. Circular dependencies cause load failure
|
||||
3. Missing dependencies cause load failure
|
||||
|
||||
```
|
||||
LoadOrder:
|
||||
1. DatabaseLib (no dependencies)
|
||||
2. CoreLib (depends on DatabaseLib)
|
||||
3. MyPlugin (depends on CoreLib)
|
||||
```
|
||||
|
||||
## Version Compatibility
|
||||
|
||||
{{< callout type="info" >}}
|
||||
Consider versioning your plugin API if other plugins depend on you:
|
||||
- Major: Breaking changes
|
||||
- Minor: New features, backward compatible
|
||||
- Patch: Bug fixes
|
||||
{{< /callout >}}
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "MyAPI",
|
||||
"version": "2.0.0"
|
||||
}
|
||||
```
|
||||
|
||||
Dependent plugins can then specify minimum versions in their documentation.
|
||||
Reference in New Issue
Block a user