English
EmakiCoreLib
EmakiCoreLib is the shared runtime core that every Emaki Series business plugin runs on. It does not ship a full gameplay loop by itself. Instead it gives every plugin the same reusable foundations: actions, GUI templates, item-source resolution, PDC (plugin-defined data, the hidden fields a plugin writes onto an item), item assembly, conditions, expressions, economy bridges, weighted random utilities, scheduler compatibility, and shared bStats runtime
NOTE
Sectioning rule: only capabilities that all plugins can reuse are in scope for CoreLib's documentation. Actions, APIs, configuration fields, and gameplay flows registered by Attribute, Forge, Strengthen, Cooking, Gem, Skills, Item, or Level belong to the corresponding plugin documentation
Basic information
| Item | Value |
|---|---|
| Version | 4.8.36 |
| API jar | emaki-corelib-api-4.8.28.jar |
| Runtime plugin jar | EmakiCoreLib-4.8.36.jar |
| Main class | emaki.jiuwu.craft.corelib.EmakiCoreLibPlugin |
| Java | 25 |
| Paper API | 26.1.2.build.74-stable |
| paper-plugin.yml api-version | 26.1 |
| folia-supported | true |
| Hard dependencies | None |
| Soft dependencies | Vault, ExcellentEconomy, PlaceholderAPI, MMOItems, MythicMobs, ItemsAdder, Nexo, Oraxen, EcoItems, NeigeItems, CraftEngine, PacketEvents |
| Main command | /emakicorelib (aliases /corelib, /emakicore) |
| Permissions | emakicorelib.admin, emakicorelib.reload |
CoreLib must load first, because every business plugin depends on the services it provides. If CoreLib fails to start, fix CoreLib first, then move on to the other modules
Installation boundary
Install only the runtime plugin jar on your server:
text
plugins/
├── EmakiCoreLib-4.8.36.jar
└── EmakiAttribute-4.8.7.jar / EmakiForge-4.8.8.jar / ...Never put emaki-corelib-api-*.jar into your server's plugins/ directory. API jars exist for third-party developers to use as a Maven provided or Gradle compileOnly dependency; you do not need one to run the server
What CoreLib provides
Shared action system
The action system lets you run messages, sounds, particles, commands, economy operations, experience operations, temporary items, blocks, teleporting, and action templates directly from YAML. See Actions for the syntax, control prefixes, CoreLib built-in actions, and the /corelib action list|run admin command; for the grouped list of all 131 built-in stages (source/gate/action) with jump targets, see the Stage ID table
Business plugins append their own actions to the same registry. Level exp actions, Attribute stat actions, and Skills skill actions are documented on their own plugin pages instead of being listed here
GUI system
The GUI system gives you menu templates, slot parsing, buttons, click handling, sessions, item-source resolution, and dynamic rendering foundations. You only declare your own GUI files and runtime flows, and the system takes care of the rest. See GUI
Item Source
The Item Source system resolves Vanilla, CraftEngine, ItemsAdder, Nexo, Oraxen, EcoItems, MMOItems, NeigeItems, EmakiItem, and other providers in one place, so recipes, materials, rewards, and GUI slots rely on stable IDs instead of display names or lore. See Item Source
Item Matcher
On top of item sources, a matcher (matcher) adds component, PDC, lore, and expression conditions to decide whether an incoming item counts as material. All nine modules share the same syntax at their input-matching points. See Item Matcher
PDC and item assembly
CoreLib wraps Bukkit PersistentDataContainer (the vanilla container for attaching custom data to items, players, and more) and uses Assembly to merge the layers written by different modules into the final item name and lore. Forge, Strengthen, Gem, Item, Attribute, and other modules rely on this chain so they never overwrite each other's presentation. See PDC, Assembly, and Name & Lore Operations
Shared gameplay events
CoreLib normalizes selected Bukkit / MythicMobs gameplay events into the event IDs you use in configuration, reused by EmakiLevel experience sources and EmakiCodex advancement triggers. See Gameplay Event IDs for the IDs and variables you can fill in
Conditions, expressions, economy, and weights
- Condition: shared condition expressions and condition groups
- Expression: formulas for cost, chance, level, damage, and configuration values
- Economy: Vault / ExcellentEconomy providers and dynamic provider enumeration
- Weight: reusable tools for random pools, quality pools, reward pools, and pity systems
Recommended reading order
Server owners / configuration maintainers
- Item Source: learn how to reference materials and rewards reliably
- Item Matcher: narrow input matching further by component, PDC, and more
- Actions: learn success/failure/reward/feedback calls
- Condition: configure permission, item, state, and expression checks
- Expression: write cost, chance, and numeric formulas
- GUI: adjust menu layout and button behavior
- The corresponding business plugin pages for actual gameplay configuration
Third-party developers
- PDC: understand shared data boundaries
- Assembly: understand multi-module presentation merging
- The corresponding plugin API pages: call public APIs, not implementation classes
Default runtime folder
text
plugins/EmakiCoreLib/
├── config.yml
└── lang/
├── zh_CN.yml
└── en_US.ymlconfig.yml controls language, the GUI backend, shared gameplay events, action loops and action templates, and global Debug. Set debug.global_all to true when you want Debug output from every Emaki module that uses CoreLib's DebugLogger. Administrators can also toggle it temporarily with /corelib debug all on|off|status, and a CoreLib reload restores the configured value. lang/ stores CoreLib's own messages. Business plugins generate their own folders, so do not mix business configuration into CoreLib
Main configuration reference
The keys in plugins/EmakiCoreLib/config.yml that do not belong to another page are listed below. gui.* is documented on GUI and gameplay_events.* on Gameplay Event IDs. The "Values" column only states constraints that really exist in the source; — means the value is not validated
Top level
| Field | Type | Required | Default | Values | Description |
|---|---|---|---|---|---|
version | string | No | "4.8.36" | — | Resource version kept in sync with the module version. It is a resource marker only; the code never reads it |
language | string | No | "zh_CN" | — | Selects lang/<language>.yml, which holds CoreLib's own messages |
debug
| Field | Type | Required | Default | Values | Description |
|---|---|---|---|---|---|
debug.global_all | boolean | No | false | true / false | Whether every module using CoreLib's DebugLogger emits Debug output by default. Override it at runtime with /corelib debug all on|off|status; a reload restores this value |
minimessage
| Field | Type | Required | Default | Values | Description |
|---|---|---|---|---|---|
minimessage.default_no_italic | boolean | No | true | true / false | Removes italics from text that does not explicitly declare it (menu item names and lore, menu titles, chat messages, dialogs). It only changes the default: an explicit <i> / <italic> still applies |
vanilla_language
| Field | Type | Required | Default | Values | Description |
|---|---|---|---|---|---|
vanilla_language.enabled | boolean | No | false | true / false | Whether the vanilla language table is downloaded and cached. A missing first-time cache triggers a Mojang resource-index request; the cache lives in plugins/EmakiCoreLib/lang-cache/, and localisation features are unavailable if the download fails |
vanilla_language.locale | string | No | "zh_cn" | A vanilla language ID such as zh_cn, en_us, or zh_tw | Vanilla language ID matching the client language file name. It is normalised to lowercase when read, and falls back to zh_cn when blank |
dialog
| Field | Type | Required | Default | Values | Description |
|---|---|---|---|---|---|
dialog.enabled | boolean | No | true | true / false | Master switch. When disabled, dialog definitions are not loaded and DialogApi is unavailable |
dialog.directory | string | No | "dialogs" | — | Definition directory relative to plugins/EmakiCoreLib/; .yml files inside are loaded. Blank falls back to dialogs |
display
| Field | Type | Required | Default | Values | Description |
|---|---|---|---|---|---|
display.backend | string | No | "auto" | bukkit / packet / auto / inherit | Display-entity rendering backend shared by damage floats, station text, and item displays. inherit follows gui.backend; an unknown value is treated as auto, and packet falls back to bukkit when unavailable |
display.view_distance_blocks | integer | No | 48 | ≥ 1 | Visibility distance for the packet backend, in blocks; values below 1 are treated as 1 |
display.refresh_interval_ticks | integer | No | 20 | ≥ 1 | Visibility recomputation interval for the packet backend, in ticks; values below 1 are treated as 1 |
Shipped defaults:
yaml
version: "4.8.36"
language: "zh_CN"
debug:
global_all: false
minimessage:
default_no_italic: true
vanilla_language:
enabled: false
locale: "zh_cn"
dialog:
enabled: true
directory: "dialogs"
display:
backend: "auto"
view_distance_blocks: 48
refresh_interval_ticks: 20Example (enable the vanilla language table and switch the display backend to packet):
yaml
vanilla_language:
enabled: true
locale: "zh_cn"
display:
backend: "packet"
view_distance_blocks: 64
refresh_interval_ticks: 10