Skip to content

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 ​

ItemValue
Version4.8.36
API jaremaki-corelib-api-4.8.28.jar
Runtime plugin jarEmakiCoreLib-4.8.36.jar
Main classemaki.jiuwu.craft.corelib.EmakiCoreLibPlugin
Java25
Paper API26.1.2.build.74-stable
paper-plugin.yml api-version26.1
folia-supportedtrue
Hard dependenciesNone
Soft dependenciesVault, ExcellentEconomy, PlaceholderAPI, MMOItems, MythicMobs, ItemsAdder, Nexo, Oraxen, EcoItems, NeigeItems, CraftEngine, PacketEvents
Main command/emakicorelib (aliases /corelib, /emakicore)
Permissionsemakicorelib.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

Server owners / configuration maintainers ​

  1. Item Source: learn how to reference materials and rewards reliably
  2. Item Matcher: narrow input matching further by component, PDC, and more
  3. Actions: learn success/failure/reward/feedback calls
  4. Condition: configure permission, item, state, and expression checks
  5. Expression: write cost, chance, and numeric formulas
  6. GUI: adjust menu layout and button behavior
  7. The corresponding business plugin pages for actual gameplay configuration

Third-party developers ​

  1. PDC: understand shared data boundaries
  2. Assembly: understand multi-module presentation merging
  3. 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.yml

config.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 ​

FieldTypeRequiredDefaultValuesDescription
versionstringNo"4.8.36"—Resource version kept in sync with the module version. It is a resource marker only; the code never reads it
languagestringNo"zh_CN"—Selects lang/<language>.yml, which holds CoreLib's own messages

debug ​

FieldTypeRequiredDefaultValuesDescription
debug.global_allbooleanNofalsetrue / falseWhether 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 ​

FieldTypeRequiredDefaultValuesDescription
minimessage.default_no_italicbooleanNotruetrue / falseRemoves 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 ​

FieldTypeRequiredDefaultValuesDescription
vanilla_language.enabledbooleanNofalsetrue / falseWhether 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.localestringNo"zh_cn"A vanilla language ID such as zh_cn, en_us, or zh_twVanilla language ID matching the client language file name. It is normalised to lowercase when read, and falls back to zh_cn when blank

dialog ​

FieldTypeRequiredDefaultValuesDescription
dialog.enabledbooleanNotruetrue / falseMaster switch. When disabled, dialog definitions are not loaded and DialogApi is unavailable
dialog.directorystringNo"dialogs"—Definition directory relative to plugins/EmakiCoreLib/; .yml files inside are loaded. Blank falls back to dialogs

display ​

FieldTypeRequiredDefaultValuesDescription
display.backendstringNo"auto"bukkit / packet / auto / inheritDisplay-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_blocksintegerNo48≥ 1Visibility distance for the packet backend, in blocks; values below 1 are treated as 1
display.refresh_interval_ticksintegerNo20≥ 1Visibility 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: 20

Example (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