Skip to content

Integrations

Dan Alexander edited this page Nov 3, 2026 · 1 revision

Optional integrations

VoxelCore works without these optional integrations. Only install a third-party plugin when you actually use the corresponding feature.

Home · Installation · UI, Fonts and Glyphs · Currencies

PlaceholderAPI fonts

When PlaceholderAPI is installed, VoxelCore registers an optional persistent voxelcore expansion. %voxelcore_font_staff% resolves exactly like :staff:, including GUI spacing behavior, while %voxelcore_font_voxel/staff% selects the explicit voxel:staff ContentID when aliases are ambiguous. Font names may contain underscores. Unknown or ambiguous names remain unresolved, and VoxelCore continues to work without PlaceholderAPI installed.

ShopGUI+ custom items and UI placeholders

When ShopGUI+ is installed, VoxelCore registers an optional custom-item provider during ShopGUI+'s supported post-enable lifecycle. A shop entry can reference any concrete VoxelCore item by ContentID:

1:
  type: item
  item:
    voxelcore: "voxel:item"
  buyPrice: 50
  sellPrice: 25
  slot: 0

ShopGUI+ creates the same persistent item stack as /vc admin item give voxel:item for purchasable/sellable shop inventory. Buying, selling, and comparison use the VoxelCore ContentID rather than display name, lore, material, or model data. Abstract IDs are still rejected for tradeable shop entries. VoxelCore continues to work when ShopGUI+ is absent.

ShopGUI+ GUI icons are different from shop stock. The global ShopGUI+ buttons.<buttonName>.item, nested GUI <guiSection>.buttons.<buttonName>.item (such as amountSelectionGUI.buttons.set1.item and amountSelectionGUIBulkBuy.buttons.buy1.item), and shopMenuItems.<entry>.item entries may use renderable abstract VoxelCore item definitions as decorative icons:

# plugins/ShopGUIPlus/config.yml — GUI-only button
buttons:
  goBack:
    item:
      voxelcore: "voxel:ui-blank"

At these display-only paths VoxelCore uses ItemManager.createRenderItem, which accepts an abstract definition only when it has an inherited or declared material and render.model. This does not make ui-blank giveable or purchasable. The nested-button rule recognizes GUI section names containing GUI (including bulk buy/sell variants), without hardcoding individual buttons. In contrast, shops.<shop>.items.<slot>.item and other inventory/trading contexts continue through createItem and reject abstract IDs as before. Invalid IDs or missing render assets still fail at the actual config path instead of creating a broken empty GUI button.

The value normally uses the exact key beneath items: (for example voxel:ui-blank). ShopGUI+ configurations may also use resource-style slash shorthand such as voxel:ui/blank; the provider resolves that to the hyphenated VoxelCore ContentID. A present but invalid voxelcore: reference fails immediately with its configuration path instead of leaving ShopGUI+ with a null button or shop item.

VoxelCore also resolves :font_name: and offset placeholders recursively throughout ShopGUI+'s live main, language, price-modifier, and shop configurations before shops are loaded. This includes strings nested in lore lists and maps, so the same syntax works in item names, lore, menu text, and language messages. The resolution is performed in memory—the authored ShopGUI+ YAML files retain their readable placeholders—and is repeated after ShopGUI+ shop reloads.

Because some ShopGUI+ releases do not expose their individual shop-file configuration through the published API, VoxelCore also resolves the compiled shop titles, per-page titles, fill items, shop-item names/lore, and placeholder items after every shop load. Configuration capabilities are detected at runtime so an API mismatch disables only the unavailable source rather than interrupting ShopGUI+ startup.

Player-specific lore that ShopGUI+ generates while opening a menu (including calculated buy/sell prices and currency suffixes) is resolved on the live top inventory across a short ten-tick render window. Inventory clicks and drags start another bounded render pass so buy/sell amount controls cannot restore unresolved text when they rebuild their preview stack. ShopGUI+'s live economy-provider prefixes and suffixes are also resolved after startup and reload, covering currency glyphs copied out of YAML before transaction messages or lore are assembled. Both legacy string metadata and modern Paper Adventure item components are supported. Only text containing a registered VoxelCore placeholder changes. ShopGUI+ language values are accessed through runtime-compatible configuration discovery and reprocessed after shop reloads, covering command confirmations and transaction messages without intercepting unrelated server chat.

Integration boundaries

  • Item and block identity, resource packs and GUI glyph definitions remain VoxelCore responsibilities.
  • PlaceholderAPI and ShopGUI+ are optional; their absence must not prevent VoxelCore from loading.
  • Abstract definitions can be used for render-only ShopGUI+ buttons when they have the required model/material, not as items sold or given to players.
  • For the independent optional VaultUnlocked-backed currency provider, see Currencies.

Clone this wiki locally