Documentation

ItemsCore

Build fully custom items, armor sets and talismans for your server - with no Java and no recompiling. Design everything in an in-game editor with a coding-like interface that gives you zero limitations, or let an AI write items for you. Works on Minecraft 1.8 - 26.2.

Minecraft 1.8 - 26.2 No coding required AI-ready Free & Premium
CUSTOM ACTIONS
A visual action builder. Chain methods, operators and nested values - no syntax to memorise.
PARTICLE SYSTEM
Circles, helixes, beams and equation-driven projectiles built in.
STATS & EVENTS
A custom stat system, talisman items and a custom events system built on 50+ server events.
AI-READY
A local MCP server lets any AI read this exact API and build items for you.

It also ships dupe detection, multi-server data sync and a player-inventory moderation tool for staff.

Installation

  1. Drop ItemsCore.jar into your server's plugins/ folder.
  2. Start the server once. The config and an items/ folder are generated in plugins/ItemsCore/.
  3. Run /itemeditor to open the item browser, or /itemeditor <name> to edit a specific item.

Optional integrations are detected automatically if installed: PlaceholderAPI, Vault and AuraSkills.

iThe old web-based item editor is no longer supported. Everything is done in the in-game /itemeditor GUI now.

Free vs Premium

Both editions are identical in features. The only difference is how many custom items can be loaded, so the free version is a real, full-featured trial.

EditionLoaded itemsFeatures
Free1 item at a timeEverything.
PremiumUnlimitedEverything.
iThe edition is compiled into the jar, so the free limit cannot be unlocked by editing files. Upgrade by swapping in the Premium jar.

Editor basics

Open the editor with /itemeditor (or /itemeditor <name> to edit one). Everything below is set from a single item screen. Colours use & codes, and on supporting versions hex with &#rrggbb.

OptionWhat it does
Item MaterialHold the item you want and click the button - it copies your held item.
IdentifierThe internal id used in config files and commands. No spaces. Also stored on the item with a generated UUID for dupe detection.
Fancy NameThe coloured display name shown in-game.
LoreEdit a line, right-click to remove it, shift-click for the next/new line, shift-right-click for the previous.
EnchantmentsOpens a GUI of every enchantment; click one and enter a level. Click an added enchant to remove it.
FlagsToggle Bukkit item flags on and off (e.g. hide attributes).
Custom Model DataFor resource-pack models.

Click type & heads

The click type controls when click / right-click actions are allowed to run:

Click typeRuns when the player clicks…
BLOCKonly a block
AIRonly air (empty space)
BOTHeither - the default

This is set per action, so one item can have a right-click ability that only triggers in the air and a separate block interaction.

Skull owner

When the item is a player head, set Skull Owner to a username to use that player's skin as the texture.

Custom model data

Set Custom Model Data to a number to point the item at a model in your resource pack. Combined with a base material this is how most servers render fully custom item textures while keeping a normal Minecraft item underneath. The value is just an integer your pack maps to a model.

Actions

An action is behaviour attached to a trigger - for example "when the player right-clicks". You build it visually in three steps:

  1. Pick an action or event. Choose the trigger (left-click, right-click, etc). One item can have many actions. You can also click Create new custom event and build your own from 50+ supported server events, each with its player variables.
  2. Add methods. Click Click to add a method and pick from the categories. Right-click an empty method slot to load a saved template, right-click a built method to save it as a template, and right-click a category to set a method from it directly.
  3. Fill parameters. Simple types (text, numbers, booleans) are typed in directly. Right-click a parameter to open the methods menu and use another method's result as the value. Middle-click switches a parameter to chest mode for list/array values.

Methods run top to bottom. Between two methods you can drop an operator to build maths or conditions; leave it on None for the normal "run one after another" case. See the Triggers reference for what each trigger exposes, and Methods for everything you can call.

The method icon tells you what it does: command block = an action (returns nothing), paper = returns a value you can pass on, grey dye = an inherited Java method that is rarely useful.

Crafting recipes

Give a custom item a shaped crafting recipe so players can craft it at a normal crafting table. Open the recipe GUI from the item editor and place ingredients in the 3x3 grid exactly as they should be laid out.

  • Vanilla ingredients - any normal Minecraft material.
  • Custom ingredients - another ItemsCore item can be required in a slot, matched by its identity, not just its material.
  • Amounts - a slot can require more than one of an ingredient. Crafting consumes the exact amount you set, and the result only appears when enough is present.
An AI can author recipes too. The clean item JSON has a recipe field (a 9-slot grid), so a helper-built item can ship with its recipe ready to import.

Stats

Stats are named numbers you define once and then attach to items. Create and manage them with /stats (permission itemscore.stats). In an item's stats GUI you pick from your created stats and set the value for that specific item.

Read a stat inside an action with core.getItemStatValue(item, "strength") or a player's combined stat with core.getPlayerStatValue(player, "strength"), and expose stats through PlaceholderAPI.

Talismans

The talisman toggle changes when an item's stats and actions apply:

  • Normal item - effects apply while it is equipped as armor or held in hand.
  • Talisman - effects apply while the item simply sits anywhere in the player's inventory.

Talismans are perfect for passive bonuses that should not cost an armor or hotbar slot. Check it from code with core.isTalisman(item).

How the code works

Every action compiles to a small script. The visual builder writes it for you, so you never have to type it, but the shape is simple:

// right-click: heal 4 and tell the player core.heal(player, 4); core.sendColorMessage(player, "&aHealed!");

A handful of variables are always available depending on the trigger: core, particles, values, api and item always; player on most triggers; event for cancelling; and others like shooter, victim or arrow on the relevant triggers. The core toolbox covers messaging, movement, combat, world edits, sounds, particles, projectiles, timing, player variables and (with Vault) economy.

  • Use core.doIf / core.doIfElse / core.chanceOf for conditions.
  • Use core.runCodeLater and core.loop for delays and repetition.
  • Strings are encoded safely behind the scenes, so quotes inside quotes never break - even for deeply nested abilities.

Events

Events are the same idea as actions, but separated out because they react to things happening to the player rather than a direct click. Each exposes its own variables, and you can stop the event with core.cancelEvent(event).

EventFires whenKey variables
DamageEventthe item is used to attack an entityattacker victim cause damage
PlayerDamageEventthe holder/wearer takes damageplayer cause damage
ProjectileHitEntityEventa shootProjectile projectile hits an entityshooter victim lastLocation
ProjectileHitBlockEventthat projectile hits a blockshooter lastLocation
ArmorEquipEventthe armor is equippedplayer item
ArmorUnEquipEventthe armor is unequippedplayer item
PlayerMoveEventthe player moves holding/wearing the itemplayer item

Beyond these, the Create new custom event button lets you react to any of 50+ Bukkit events directly, each with the player it resolves and the raw event object.

Cooldowns

Each action can have its own per-player cooldown. Open the cooldown clock in the action's GUI and type any duration - a number with a unit, like 5s, 90s, 2m or 1h (a bare number means seconds). While the cooldown is active that action will not run for that player.

On-cooldown message

You can also send the player a message when they try to use the action too soon. Shift-click the cooldown clock to set the message; shift-right-click clears it. The message supports & colours and these time-left placeholders:

PlaceholderBecomes
%remaining_seconds%whole seconds left, rounded up
%remaining_minutes%whole minutes left, rounded up
%remaining_hours%whole hours left, rounded up
%remaining%formatted time, e.g. 1m 30s
%remaining_millis%milliseconds left
// example on-cooldown message &cWait %remaining_seconds%s before using this again.
iThe message only does anything when a cooldown is set on that action. An AI helper can set both the cooldown and its message for you.

Examples

Fire burst (left-click)

particles.filledCircle(5, 50, 0.3, particles.withLocation(particles.of("FLAME"), player.getLocation())); core.playSound(player, player.getLocation(), core.getSound("ENTITY_BLAZE_SHOOT"), 1, 1); core.splashDamage(player, 4, 5, 5, 5);

Particle projectile (right-click)

core.shootProjectile(player, core.getEyeLocation(player), "particle", particles.colored(255, 80, 0, 3), 60, true, core.createEquationVector("t * 0.4", "0", "0"));

25% chance to strike lightning

core.doIf(core.chanceOf(25), "core.summonLightningByLocation(player.getLocation())");

Supported plugins & addons

ItemsCore detects these automatically when they are installed:

PluginWhat it unlocks
VaultConnect to the server economy - core.balance, core.deposit, core.withdraw.
PlaceholderAPIParse placeholders in strings with core.parsePlaceholder(player, text), and expose item stats (see Placeholders).
AuraSkillsSkills, mana and stats - pairs well with custom items for RPG servers.

Developers can extend ItemsCore further with addons that add their own methods, attributes, listeners and actions. See the Developer Documentation.

Placeholders

With PlaceholderAPI installed, ItemsCore registers the itemscore expansion so you can show item stats in scoreboards, holograms, tab lists and anywhere else placeholders are parsed.

PlaceholderReturns
%itemscore_statValue_<stat>_<item>%the raw stat value for that item, e.g. 50
%itemscore_statFancyName_<stat>%the stat's display name
%itemscore_statFancyValue_<stat>_<item>%the formatted value (the stat's value template with the number filled in)
%itemscore_statFancyString_<stat>_<item>%the display name and formatted value together

Replace <stat> with the stat name and <item> with the item identifier, for example %itemscore_statValue_damage_magic_sword%.

!These placeholders are split on _, so avoid underscores inside stat and item names if you plan to use them in placeholders.

AI helper

You can let an AI build and edit ItemsCore items for you, with no coding. To keep it in one place and always up to date, the whole thing - a one-paste setup prompt, the local MCP server, and the full guide - lives in the helper repo: github.com/Core-Pluginss/ItemsCore-Helper. Open it, copy the prompt into your AI, and it sets itself up and builds your item.

The AI reads this exact API, validates what it writes, and hands you a .import file. Importing it rebuilds a normal, GUI-editable item - so anything the AI makes you can still tweak by hand in the editor.

Commands

Run /ic (or its full alias /itemscore) on its own to see the command list. Run a subcommand on its own, like /ic database, to see just that group's commands.

CommandDescription
/itemeditor [name]Open the item browser, or edit a specific item.
/icShow the full command list.
/ic menuOpen the items menu. Left-click an item to edit it, right-click to give / set recipe / delete, or use the button to create a brand new item. (/ic gui still works.)
/ic reload [item]Reload all items, or one item. Returns a success / error list and retries previously-failed items.
/ic export <item>Export an item to clean JSON (exports/).
/ic import <file>Import a clean JSON from imports/ as a live, GUI-editable item.
/ic adopt <item>Make a code-only item editable in the GUI.
/ic delete <item> confirmDelete a custom item (removes it from memory, its file, and the database if enabled).
/ic exportapiWrite the machine-readable API manifest (itemscore-api.json).
/ic databaseMulti-server sync tools (see below): status, migrate, restore.
/ic librariesShow the status of the runtime-downloaded MongoDB / Redis drivers. /ic libraries verify downloads or repairs them.
/statsCreate and manage custom stats.
/addonsOpen the addons menu to browse the ItemsCore addons installed on the server.
/playerinventory <player>Open a player's inventory for moderation.
/toggledupealerts  /tdaToggle the dupe-detection alerts staff receive in chat when a duplicated item is found.
A broken item no longer disables the whole plugin - only that item is skipped, and /ic reload shows you exactly what failed and why.

Permissions

PermissionGrants
itemscore.admingui/ic / /itemscore and every subcommand
itemscore.itemeditor/itemeditor
itemscore.stats/stats
itemscore.addons/addons
itemscore.playerinventory/playerinventory
itemscore.toggledupealerts/toggledupealerts (/tda)

Multi-server sync

Running a network? ItemsCore can keep data consistent across servers using a shared MongoDB database, with optional Redis for instant propagation. Each category is configured independently in config.yml under database - keep it in files (the default) or make it database-wide:

CategoryWhat syncs
itemsyour custom items
global-variablesserver-wide variables
player-variablesper-player variables
configthe whole config (except the database section, which stays local)
  • Set your MongoDB URI and database name, then enable the categories you want - or flip enable-all to turn on every category at once.
  • The database stays fully off until you enable at least one category, so single-server setups are unaffected.
  • Redis is optional. With it, changes propagate instantly; without it, servers poll on an interval. ItemsCore always falls back to files if the database is unreachable - a bad connection never takes the plugin down.

Migrating

CommandDescription
/ic database statusShow the connection state and which categories are database-wide.
/ic database migrate confirmPush your current file data up into the database.
/ic database restore confirmPull the database data back down into files.
idb works as a shorthand for database in all of these.

Triggers

A trigger is when an action fires. Each one exposes the variables listed here.

TriggerFires whenVariables
leftActionPlayer left-clicks while holding the item.playeritemevent
leftSActionPlayer sneak + left-clicks while holding the item.playeritemevent
rightActionPlayer right-clicks while holding the item.playeritemevent
rightSActionPlayer sneak + right-clicks while holding the item.playeritemevent
shiftActionPlayer starts sneaking while holding or wearing the item.playeritemevent
dropActionPlayer drops the item (the drop is cancelled).playeritemevent
swapActionPlayer swaps hands (F key) with the item.playeritemevent
shootActionPlayer shoots a projectile while holding the item.shooteritemevent
pickupActionPlayer picks up the item.playeritemevent
arrowLandActionAn arrow shot while holding the item lands.shooteritemarrowlandLocationevent
armorEquipEventThe item (armor) is equipped.playeritemevent
armorUnEquipEventThe item (armor) is unequipped.playeritemevent
playerMoveEventPlayer moves while holding or wearing the item.playeritemevent
playerDamageEventPlayer holding or wearing the item takes damage.playeritemevent
projectileHitEntityEventA custom projectile from this item hits an entity.shootervictimitemlastLocationevent
projectileHitBlockEventA custom projectile from this item hits a block.shooteritemlastLocationevent

Variables

Values you can use directly inside an action.

VariableTypeAvailable
coreActionCore$CoreAlways available.
particlesActionCore$ParticlesAlways available.
valuesActionCore$CustomValuesAlways available.
apiItemsCoreAPIAlways available.
itemItemAlways available (the custom item this action belongs to).
eventEventAlways available (the Bukkit event; cancel with core.cancelEvent(event)).
playerPlayerMost triggers.
shooterLivingEntityshootAction, arrowLandAction, projectile hit events.
victimEntityprojectileHitEntityEvent.
arrowEntityarrowLandAction.
landLocationLocationarrowLandAction.
lastLocationLocationprojectile hit events.

Methods

Everything you can call in an action, generated directly from the plugin so it always matches your version. Pick a binding, browse by category, or search.

all164core100particles56values2api6

coreMain toolbox. Most actions live here: damage, teleport, sounds, projectiles, variables, loops, conditionals.

Blocks10
core.breakBlock(Block block)action

Breaks a block naturally, dropping its normal loot.

core.breakBlock(core.getBlockAtByLocation(player.getLocation()))
core.breakBlockWithItem(Block block, Item item)action

Breaks a block naturally as if mined with the given custom item, dropping its loot.

core.breakBlockWithItem(core.getBlockAtByLocation(player.getLocation()), item)
core.changeBlock(Block block, String material)action

Changes a block into the material with the given name.

core.changeBlock(core.getBlockAtByLocation(player.getLocation()), "GOLD_BLOCK")
core.changeBlockByMaterial(Block block, Material material)action

Changes a block into the given material.

core.changeBlockByMaterial(core.getBlockAtByLocation(player.getLocation()), core.getMaterial("GOLD_BLOCK"))
core.getBlockAt(World world, int x, int y, int z)returns Block

Gets the block at the given x, y, z coordinates in a world.

core.getBlockAt(player.getWorld(), 100, 64, -200)
core.getBlockAtByLocation(Location location)returns Block

Gets the block at a given location.

core.getBlockAtByLocation(player.getLocation())
core.getBlocksInRadius(Location startLoc, int x, int y, int z)returns Block[]

Returns all blocks in a box around a location, reaching the given distance on each axis.

core.getBlocksInRadius(player.getLocation(), 3, 3, 3)
core.getType(Block block)returns Material

Returns the material (type) of a block.

core.getType(core.getBlockAtByLocation(player.getLocation()))
core.removeBlock(Block block)action

Turns a block into air, making it disappear without drops.

core.removeBlock(core.getBlockAtByLocation(player.getLocation()))
core.removeBlocks(Block[] blocks)action

Removes a whole list of blocks at once, turning them all to air.

core.removeBlocks(core.getBlocksInRadius(player.getLocation(), 3, 3, 3))
Combat6
core.damage(Entity v, double v1)action

Deals the given amount of damage to a living entity (half a heart = 1).

core.damage(victim, 6)
core.damageWithAttacker(Entity v, double v1, Entity v2)action

Damages a living entity and credits the damage to an attacker, so kills are attributed correctly.

core.damageWithAttacker(victim, 6, player)
core.heal(Player player, double amount)action

Heals a player by the given amount, capped at their max health (half a heart = 1).

core.heal(player, 4)
core.knockback(Entity entity, Location from, double multiplier)action

Knocks an entity away from a location, with extra strength set by the multiplier.

core.knockback(victim, player.getLocation(), 2)
core.setHealth(Player player, double health)action

Sets a player's health to an exact amount (half a heart = 1).

core.setHealth(player, 20)
core.splashDamage(Player player, double damage, double x, double y, double z)action

Damages every entity near a player (except the player) within the given x, y, z range.

core.splashDamage(player, 6, 3, 3, 3)
Economy3
core.balance(Player player)returns double

Returns a player's money balance (requires the Vault plugin).

core.balance(player)
core.deposit(Player player, double amount)returns boolean

Adds money to a player's balance and returns whether it succeeded (requires the Vault plugin).

core.deposit(player, 100)
core.withdraw(Player player, double amount)returns boolean

Removes money from a player's balance and returns whether it succeeded (requires the Vault plugin).

core.withdraw(player, 100)
Effects1
core.giveEffect(Player player, String effect, int duration, int amplifier, boolean ambient, boolean particles)action

Gives a player a potion effect for a duration (in ticks) at the given strength level.

core.giveEffect(player, "SPEED", 200, 1, false, true)
Entities5
core.getEntityById(World world, int id)returns Entity

Finds an entity in a world by its numeric entity id, or nothing if not found.

core.getEntityById(player.getWorld(), 1234)
core.getEntityByUUID(World world, String uuid)returns Entity

Finds an entity in a world by its UUID text, or nothing if not found.

core.getEntityByUUID(player.getWorld(), "069a79f4-44e9-4726-a5be-fca90e38aaf5")
core.getNearbyEntities(Player player, double v, double v1, double v2)returns List

Returns all entities near a player within the given x, y, z distances.

core.getNearbyEntities(player, 5, 5, 5)
core.killEntity(Entity entity)action

Removes an entity from the world (kills it without drops).

core.killEntity(victim)
core.summonEntity(World world, String type, double x, double y, double z)returns String

Spawns an entity of the given type at the x, y, z position and returns its UUID as text.

core.summonEntity(player.getWorld(), "ZOMBIE", 100, 65, -200)
Items17
core.clearInventory(Player player)action

Empties a player's entire inventory.

core.clearInventory(player)
core.dropItem(ItemStack item, Location location)action

Drops an item on the ground at a location.

core.dropItem(core.getItemStack(item), player.getLocation())
core.dropItemByMaterial(Material material, Location location)action

Drops the given material on the ground at a location.

core.dropItemByMaterial(core.getMaterial("DIAMOND"), player.getLocation())
core.getBoots(Player player)returns ItemStack

Returns the boots a player is wearing.

core.getBoots(player)
core.getChestplate(Player player)returns ItemStack

Returns the chestplate a player is wearing.

core.getChestplate(player)
core.getHelmet(Player player)returns ItemStack

Returns the helmet a player is wearing.

core.getHelmet(player)
core.getItemBySlot(Player player, int slot)returns ItemStack

Returns the item in a specific inventory slot of a player.

core.getItemBySlot(player, 0)
core.getItemStack(Item item)returns ItemStack

Builds the actual in-game ItemStack for one of your custom items.

core.getItemStack(item)
core.getItemStatValue(Item item, String statName)returns int

Returns the value of one of a custom item's stats by name, or 0 if the item does not have it.

core.getItemStatValue(item, "damage")
core.getLeggings(Player player)returns ItemStack

Returns the leggings a player is wearing.

core.getLeggings(player)
core.getMaterial(String materialName)returns Material

Looks up a Minecraft material (block or item type) by its name.

core.getMaterial("DIAMOND_SWORD")
core.giveItem(Player player, Material material)action

Gives a player one of the given material as an item.

core.giveItem(player, core.getMaterial("DIAMOND"))
core.hasId(ItemStack stack, String id)returns boolean

Checks whether an item is a custom ItemsCore item with the given id.

core.hasId(player.getItemInHand(), "magic_sword")
core.isTalisman(Item item)returns boolean

Checks whether a custom item is a talisman (a passive item kept in the inventory).

core.isTalisman(item)
core.newPlayerHead(String playerName)returns ItemStack

Creates a new player head item showing the given player's skin.

core.newPlayerHead(player.getName())
core.playerHead(String playerName, ItemStack itemStack)returns ItemStack

Sets an existing player-head item to show the given player's skin.

core.playerHead(player.getName(), core.getItemBySlot(player, 0))
core.removeHeldItem(Player player)action

Removes one of the item the player is currently holding from their hand.

core.removeHeldItem(player)
Logic6
core.cancelEvent(Cancellable e)action

Cancels the current event so the normal action (like the block break or damage) does not happen.

core.cancelEvent(event)
core.chanceOf(double chance)returns boolean

Returns true with the given percent chance (0-100). Great for random ability procs.

core.doIf(core.chanceOf(25), "core.summonLightningByLocation(player.getLocation())")
core.doIf(boolean condition, String action)action

Runs a piece of script code only if the condition is true.

core.doIf(core.chanceOf(25), "core.heal(player, 4)")
core.doIfElse(boolean condition, String action, String elseAction)action

Runs one piece of script code if the condition is true, otherwise runs the other piece.

core.doIfElse(core.chanceOf(50), "core.heal(player, 4)", "core.damage(player, 4)")
core.runCode(String code)action

Runs a piece of script code right now.

core.runCode("core.heal(player, 4)")
core.runCodeLater(String code, int ticks)action

Runs a piece of script code after a delay measured in ticks (20 ticks = 1 second).

core.runCodeLater("core.heal(player, 4)", 40)
Loops4
core.loop(String action, int totalTimes, int period)action

Repeatedly runs a piece of script code a set number of times, waiting the given ticks between each run (-1 times means forever). The current loop number is available as tIndex.

core.loop("core.damage(victim, 1)", 5, 20)
core.loopThrough(String action, Object[] array, int period)action

Runs a piece of script code once for each item in an array, with the current item available as currentArrayObject.

core.loopThrough("core.damage(currentArrayObject, 2)", core.getNearbyEntities(player, 5, 5, 5).toArray(), 5)
core.runUntil(String code, String conditionCode, int period)action

Keeps running a piece of script code every few ticks while a condition stays true.

core.runUntil("core.damage(victim, 1)", "victim.getHealth() > 5", 20)
core.waitUntil(String code, String conditionCode, int period, int safe)action

Waits until a condition becomes true, then runs a piece of script code (the safe value limits how long it waits).

core.waitUntil("core.heal(player, 4)", "player.isOnGround()", 20, 100)
Messaging3
core.broadcastMessage(String msg)action

Broadcasts a message to every player on the server.

core.broadcastMessage("Hello everyone!")
core.colorString(String s)returns String

Turns & color codes in a piece of text into real Minecraft colors.

core.colorString("&aHello!")
core.sendColorMessage(Player player, String message)action

Sends a chat message to one player, supporting & color codes and hex (&#rrggbb).

core.sendColorMessage(player, "&aYou used the ability!")
Movement11
core.createVector(String x, String y, String z)returns Vector

Builds a direction/velocity vector from x, y, z math expressions.

core.createVector("0", "1", "0")
core.disableFly(Player player)action

Stops a player from flying.

core.disableFly(player)
core.enableFly(Player player)action

Lets a player fly.

core.enableFly(player)
core.freeze(Entity target, long duration)action

Freezes an entity in place for the given duration (in ticks) by keeping it at its current spot.

core.freeze(victim, 60)
core.setRotation(Entity entity, float y, float p)action

Turns an entity to face the given yaw and pitch without moving it.

core.setRotation(player, 90, 0)
core.setVelocity(Player player, String x, String y, String z)action

Pushes a player using x, y, z math expressions as the velocity direction and strength.

core.setVelocity(player, "0", "1.5", "0")
core.setVelocityByVector(Player player, Vector vector)action

Pushes a player using a ready-made velocity vector.

core.setVelocityByVector(player, player.getLocation().getDirection())
core.teleport(Entity entity, double x, double y, double z)action

Teleports an entity to the given x, y, z in its current world (keeps its facing direction).

core.teleport(player, 100, 65, -200)
core.teleportForward(Player player, double range, boolean skipBlocks)action

Dashes a player forward in the direction they are looking, up to the given range (skipBlocks=true lets them pass through walls).

core.teleportForward(player, 10, false)
core.teleportToEntity(Entity v, Entity v1)action

Teleports one entity directly to another entity's position.

core.teleportToEntity(player, victim)
core.teleportToLocation(Entity v, Location v1)action

Teleports an entity to a specific location.

core.teleportToLocation(player, victim.getLocation())
Particles2
core.createParticle(World world, double x, double y, double z, ParticleDisplay particle, int speed, int amount, int lastForTicks)action

Spawns a particle effect at the x, y, z position every tick for the given number of ticks.

core.createParticle(player.getWorld(), 100, 65, -200, particles.colored(255, 0, 0, 1), 0, 1, 40)
core.createParticleByLocation(Location location, ParticleDisplay particle, int speed, int amount, int lastForTicks)action

Spawns a particle effect at a location every tick for the given number of ticks.

core.createParticleByLocation(player.getLocation(), particles.colored(255, 0, 0, 1), 0, 1, 40)
Players12
core.executeCommand(Player player, String command)action

Makes a player run a command as if they typed it in chat.

core.executeCommand(player, "spawn")
core.getEyeLocation(Player player)returns Location

Returns the location of a player's eyes (their head, where they are looking from).

core.getEyeLocation(player)
core.getPlayerByName(String name)returns Player

Finds an online player by their name, or returns nothing if they are offline.

core.getPlayerByName("Notch")
core.getPlayerByUUID(UUID uuid)returns Player

Finds an online player by their UUID.

core.getPlayerByUUID(player.getUniqueId())
core.getPlayerByUUIDString(String uuid)returns Player

Finds an online player by their UUID written as text.

core.getPlayerByUUIDString("069a79f4-44e9-4726-a5be-fca90e38aaf5")
core.getPlayerStatValue(Player player, String statName)returns int

Returns the value of one of a player's custom stats by name.

core.getPlayerStatValue(player, "mana")
core.hidePlayer(Player player)action

Hides a player so no other online player can see them.

core.hidePlayer(player)
core.hidePlayerDuration(Player player, long duration)action

Hides a player from everyone, then makes them visible again after the given number of ticks.

core.hidePlayerDuration(player, 100)
core.onlinePlayers()returns List

Returns the list of all players currently online on the server.

core.onlinePlayers()
core.setGamemode(Player player, String gamemode)action

Changes a player's game mode (survival, creative, adventure, spectator).

core.setGamemode(player, "creative")
core.showPlayer(Player player)action

Makes a hidden player visible to everyone again.

core.showPlayer(player)
core.showPlayerDuration(Player player, long duration)action

Makes a player visible to everyone, then hides them again after the given number of ticks.

core.showPlayerDuration(player, 100)
Projectiles3
core.createEquationVector(String x, String y, String z)returns EquationVector

Builds a movement equation (using 't' for time in ticks) that shapes a custom projectile path. Axes are relative to the shooter's facing: X = forward (the way they look), Y = up, Z = left. A normal forward-flying projectile puts the motion on X, e.g. createEquationVector("t * 0.4", "0", "0"); use Y for arc and Z to curve sideways.

core.createEquationVector("cos(t)", "0", "sin(t)")
core.shootArrow(Player player)returns Arrow

Makes a player shoot an arrow in the direction they are looking.

core.shootArrow(player)
core.shootProjectile(Player player, Location location, String type, Object val, int timeAliveTicks, boolean splashHit, EquationVector equationVector)action

Fires a custom ItemsCore projectile from a player, following the given path equation for a set number of ticks. The equation axes are relative to where the player looks: X is forward, Y is up, Z is left - so a straight forward shot puts the motion on X.

core.shootProjectile(player, player.getEyeLocation(), "FIREBALL", null, 60, true, core.createEquationVector("t", "0", "t"))
Sound2
core.getSound(String string)returns Sound

Looks up a Minecraft sound by its name.

core.getSound("ENTITY_GENERIC_EXPLODE")
core.playSound(Player player, Location location, Sound sound, double volume, double pitch)action

Plays a sound to a player at a location with the given volume and pitch.

core.playSound(player, player.getLocation(), core.getSound("ENTITY_GENERIC_EXPLODE"), 1, 1)
Utility2
core.getCurrentTimeMs()returns long

Returns the current system time in milliseconds, handy for cooldowns.

core.getCurrentTimeMs()
core.parsePlaceholder(Player player, String string)returns String

Replaces PlaceholderAPI placeholders in text with their real values for a player.

core.parsePlaceholder(player, "%player_name%")
Variables5
core.getGlobalVariable(String variable)returns Object

Reads a global (server-wide) saved variable by name, creating it empty if it does not exist.

core.getGlobalVariable("boss_spawned")
core.getPlayerVariable(Player player, String variable, boolean temp)returns Object

Reads a saved variable stored on a player, creating it empty if missing (use temp=true for variables cleared on logout).

core.getPlayerVariable(player, "kills", false)
core.getPlayerVariableOrDefault(Player player, String variable, Object def, boolean temp)returns Object

Reads a player's saved variable, or sets and returns a default value if it does not exist yet.

core.getPlayerVariableOrDefault(player, "kills", 0, false)
core.setGlobalVariable(String variable, Object value)action

Saves a global (server-wide) variable by name so it persists and can be read later.

core.setGlobalVariable("boss_spawned", true)
core.setPlayerVariable(Player player, String variable, Object value, boolean temp)action

Saves a variable on a player (use temp=true for variables cleared when they log out).

core.setPlayerVariable(player, "kills", 5, false)
World8
core.addToLocation(Location location, double x, double y, double z)returns Location

Returns a new location shifted by the given x, y, z amounts.

core.addToLocation(player.getLocation(), 0, 5, 0)
core.cloneLocation(Location location)returns Location

Makes a copy of a location so you can change it without affecting the original.

core.cloneLocation(player.getLocation())
core.createExplosion(World world, double x, double y, double z, int power)action

Creates an explosion of the given power at the x, y, z position in a world.

core.createExplosion(player.getWorld(), 100, 65, -200, 4)
core.createExplosionByLocation(Location location, int power)action

Creates an explosion of the given power at a location.

core.createExplosionByLocation(victim.getLocation(), 4)
core.getLocation(World world, double x, double y, double z)returns Location

Builds a location object from a world and x, y, z coordinates.

core.getLocation(player.getWorld(), 100, 65, -200)
core.getWorld(String worldName)returns World

Gets a world by its name, or nothing if no world has that name.

core.getWorld("world")
core.summonLightning(World world, double x, double y, double z)action

Strikes lightning at the given x, y, z position in a world.

core.summonLightning(player.getWorld(), 100, 65, -200)
core.summonLightningByLocation(Location location)action

Strikes lightning at a location.

core.summonLightningByLocation(victim.getLocation())

particlesParticle shapes and displays (circles, helixes, custom particles).

Particle Shapes48
particles.atom(int orbits, double radius, double rate, ParticleDisplay orbit, ParticleDisplay nucleus)action

Draws a static atom with orbit rings and a nucleus of particles at the display's location.

particles.atom(3, 2, 30, particles.colored(0, 255, 255, 1), particles.colored(255, 0, 0, 1))
particles.atomic(int orbits, double radius, double rate, int lifetime, ParticleDisplay orbit)action

Animates an atom with spinning orbit rings of particles at the display's location for a number of ticks.

particles.atomic(3, 2, 30, 200, particles.colored(0, 255, 255, 1))
particles.blackSun(double radius, double radiusRate, double rate, double rateChange, ParticleDisplay display)action

Draws a black sun shape made of shrinking circles at the display's location.

particles.blackSun(3, 0.5, 60, 2, particles.colored(0, 0, 0, 1))
particles.blackhole(int points, double radius, double rate, int mode, int time, ParticleDisplay display)action

Animates a swirling blackhole of particles at the display's location for a number of ticks (mode changes the shape).

particles.blackhole(8, 2, 30, 1, 200, particles.colored(75, 0, 130, 1))
particles.cage(Location start, Location end, double rate, double barRate, ParticleDisplay display)action

Draws a cage of vertical particle bars between two corner locations, useful for trapping effects.

particles.cage(player.getLocation(), player.getLocation().add(3, 0, 3), 0.5, 3, particles.colored(255, 255, 255, 1))
particles.chaoticDoublePendulum(double radius, double gravity, double length, double length2, double mass1, double mass2, boolean dimension3, int speed, int lifetime, ParticleDisplay display)action

Animates a chaotic double-pendulum swing of particles at the display's location for a number of ticks.

particles.chaoticDoublePendulum(3, 1, 1, 1, 1, 1, false, 2, 200, particles.colored(255, 255, 255, 1))
particles.circle(double radius, double radius2, double extension, double rate, double limit, ParticleDisplay display)action

Draws a circle (or oval) of particles at the display's location.

particles.circle(2, 2, 1, 60, 0, particles.colored(255, 0, 0, 1))
particles.circularBeam(double maxRadius, double rate, double radiusRate, double extend, int lifetime, ParticleDisplay display)action

Draws a moving beam of pulsing circles that travels forward in the display's direction for a number of ticks.

particles.circularBeam(2, 30, 20, 0.5, 40, particles.colored(255, 255, 0, 1))
particles.cloud(ParticleDisplay cloud, ParticleDisplay rain)action

Continuously spawns a raincloud effect using the two given particle displays.

particles.cloud(particles.withLocation(particles.colored(200, 200, 200, 2), player.getLocation()), particles.withLocation(particles.colored(0, 0, 255, 1), player.getLocation()))
particles.cone(double height, double radius, double rate, double circleRate, ParticleDisplay display)action

Draws a cone of particles standing up from the display's location.

particles.cone(3, 2, 0.1, 60, particles.colored(255, 128, 0, 1))
particles.crescent(double radius, double rate, ParticleDisplay display)action

Draws a crescent moon shape of particles at the display's location.

particles.crescent(2, 30, particles.colored(255, 255, 0, 1))
particles.cube(Location start, Location end, double rate, ParticleDisplay display)action

Draws a hollow cube (all six faces filled) of particles between two corner locations.

particles.cube(player.getLocation(), player.getLocation().add(2, 2, 2), 0.5, particles.colored(0, 255, 0, 1))
particles.cylinder(double height, double radius, double rate, ParticleDisplay display)action

Draws a cylinder of particles standing up from the display's location.

particles.cylinder(3, 2, 30, particles.colored(0, 255, 0, 1))
particles.diamond(double radiusRate, double rate, double height, ParticleDisplay display)action

Draws a diamond (rotated square) shape of particles standing up at the display's location.

particles.diamond(0.2, 0.1, 2, particles.colored(0, 255, 255, 1))
particles.dna(double radius, double rate, double extension, int height, int hydrogenBondDist, ParticleDisplay display, ParticleDisplay hydrogenBondDisplay)action

Draws a DNA double-helix of particles rising from the display's location, with bond lines between the strands.

particles.dna(1.5, 0.1, 0.5, 10, 3, particles.colored(0, 0, 255, 1), particles.colored(255, 255, 255, 1))
particles.dnaReplication(double radius, double rate, int speed, double extension, int height, int hydrogenBondDist, ParticleDisplay display)action

Animates a growing DNA strand with colored nucleotide bonds rising from the display's location.

particles.dnaReplication(1.5, 0.1, 2, 0.5, 10, 3, particles.colored(255, 255, 255, 1))
particles.drawLine(Player player, double length, double rate, ParticleDisplay display)action

Draws a straight line of particles out from a player's eyes in the direction they are looking.

particles.drawLine(player, 10, 0.2, particles.colored(255, 0, 0, 1))
particles.ellipse(double start, double end, double rate, double radius, double otherRadius, ParticleDisplay display)action

Draws an ellipse (oval) arc of particles between the start and end angles at the display's location.

particles.ellipse(0, 6.28, 0.1, 3, 2, particles.colored(0, 255, 0, 1))
particles.explosionWave(double rate, ParticleDisplay display, ParticleDisplay secDisplay)action

Animates an expanding explosion shockwave of particles at the display's location.

particles.explosionWave(30, particles.colored(255, 128, 0, 1), particles.colored(255, 0, 0, 1))
particles.eye(double radius, double radius2, double rate, double extension, ParticleDisplay display)action

Draws an eye shape of particles at the display's location.

particles.eye(1, 1, 30, 1, particles.colored(255, 255, 255, 1))
particles.filledCircle(double radius, double rate, double radiusRate, ParticleDisplay display)action

Draws a solid filled disc of particles at the display's location.

particles.filledCircle(3, 60, 0.2, particles.colored(255, 0, 0, 1))
particles.filledCube(Location start, Location end, double rate, ParticleDisplay display)action

Draws a fully solid cube of particles between two corner locations.

particles.filledCube(player.getLocation(), player.getLocation().add(2, 2, 2), 0.5, particles.colored(255, 0, 0, 1))
particles.flower(int count, double radius, ParticleDisplay display, Runnable runnable)action

Draws a flower-petal pattern, running the given task at each petal point around the display's location.

particles.heart(double cut, double cutAngle, double depth, double compressHeight, double rate, ParticleDisplay display)action

Draws a heart shape of particles at the display's location.

particles.heart(2, 4, 2, 3, 40, particles.colored(255, 0, 100, 1))
particles.helix(int strings, double radius, double rate, double extension, double length, double speed, double rotationRate, boolean fadeUp, boolean fadeDown, ParticleDisplay display)action

Animates a spiral helix of particles rising in the display's direction (fadeUp and fadeDown taper the ends).

particles.helix(2, 2, 30, 1, 10, 0.1, 5, true, true, particles.colored(0, 255, 0, 1))
particles.hypercube(Location startOrigin, Location endOrigin, double rate, double sizeRate, int cubes, ParticleDisplay display)action

Draws nested wireframe cubes connected like a 4D hypercube between two corner locations.

particles.hypercube(player.getLocation(), player.getLocation().add(2, 2, 2), 0.3, 0.5, 2, particles.colored(128, 0, 255, 1))
particles.illuminati(double size, double extension, ParticleDisplay display)action

Draws an illuminati triangle-with-an-eye symbol of particles at the display's location.

particles.illuminati(2, 1, particles.colored(255, 255, 0, 1))
particles.infinity(double radius, double rate, ParticleDisplay display)action

Draws an infinity (figure-eight) symbol of particles at the display's location.

particles.infinity(2, 30, particles.colored(0, 255, 255, 1))
particles.julia(double size, double zoom, int colorScheme, double moveX, double moveY, ParticleDisplay display)action

Draws a flat Julia-set fractal pattern of particles at the display's location.

particles.julia(3, 1, 50, 0, 0, particles.colored(255, 255, 255, 1))
particles.lightning(Location start, Vector direction, int entries, int branches, double radius, double offset, double offsetRate, double length, double lengthRate, double branch, double branchRate, ParticleDisplay display)action

Draws a jagged branching lightning bolt of particles from a start point in a direction.

particles.lightning(player.getEyeLocation(), player.getLocation().getDirection(), 5, 3, 0.5, 1, 0.8, 3, 0.7, 0.5, 0.7, particles.colored(255, 255, 0, 1))
particles.line(Location start, Location end, double rate, ParticleDisplay display)action

Draws a straight line of particles between two locations.

particles.line(player.getLocation(), victim.getLocation(), 0.2, particles.colored(255, 0, 0, 1))
particles.magicCircles(double radius, double rate, double radiusRate, double distance, ParticleDisplay display)action

Continuously draws growing magic circles that travel forward in the display's direction.

particles.magicCircles(1, 30, 20, 0.2, particles.colored(128, 0, 255, 1))
particles.mandelbrot(double size, double zoom, double rate, double x0, double y0, int color, ParticleDisplay display)action

Draws a flat Mandelbrot fractal pattern of particles at the display's location.

particles.mandelbrot(3, 1, 0.1, 0, 0, 50, particles.colored(255, 255, 255, 1))
particles.neopaganPentagram(double size, double rate, double extend, ParticleDisplay star, ParticleDisplay circle)action

Draws a pentagram star inside a circle at the display's location.

particles.neopaganPentagram(2, 0.05, 0, particles.colored(255, 0, 0, 1), particles.colored(255, 255, 255, 1))
particles.polygon(int points, int connection, double size, double rate, double extend, ParticleDisplay display)action

Draws a polygon outline of particles with the given number of points at the display's location (use connection to make stars).

particles.polygon(5, 1, 2, 0.05, 0, particles.colored(0, 255, 0, 1))
particles.rainbow(double radius, double rate, double curve, double layers, double compact, ParticleDisplay display)action

Draws a multi-colored rainbow arc of particles at the display's location.

particles.rainbow(3, 30, 0.6, 2, 0.1, particles.colored(255, 0, 0, 1))
particles.rectangle(Location start, Location end, double rate, ParticleDisplay display)action

Draws a filled flat rectangle of particles between two corner locations.

particles.rectangle(player.getLocation(), player.getLocation().add(3, 3, 0), 0.3, particles.colored(0, 255, 0, 1))
particles.ring(double rate, double radius, double tubeRadius, ParticleDisplay display)action

Draws a ring (donut/torus) shape of particles at the display's location.

particles.ring(30, 2, 0.5, particles.colored(0, 255, 255, 1))
particles.slash(double size, boolean useWideSide, ParticleDisplay display)action

Draws a sword-slash arc of particles at the display's location (useWideSide makes the wider half of the swing).

particles.slash(2, false, particles.colored(255, 255, 255, 1))
particles.slash(Plugin plugin, double distance, boolean useWideSide, Supplier size, Supplier speed, ParticleDisplay display)action

Draws an animated sword slash that travels forward in the display's direction over a distance.

particles.sphere(double radius, double rate, ParticleDisplay display)action

Draws a hollow sphere of particles at the display's location.

particles.sphere(2, 30, particles.colored(255, 0, 0, 1))
particles.spikeSphere(double radius, double rate, int chance, double minRandomDistance, double maxRandomDistance, ParticleDisplay display)action

Draws a spiky ball of particles (a sphere with random spikes sticking out) at the display's location.

particles.spikeSphere(2, 30, 5, 0.5, 1.5, particles.colored(255, 0, 0, 1))
particles.spread(int amount, int rate, Location start, Location originEnd, double offsetx, double offsety, double offsetz, ParticleDisplay display)action

Animates scattering lines of particles from a start point toward a randomly spread end area.

particles.spread(100, 5, player.getLocation(), victim.getLocation(), 1, 1, 1, particles.colored(255, 0, 0, 1))
particles.star(int points, int spikes, double rate, double spikeLength, double coreRadius, double neuron, boolean prototype, int speed, ParticleDisplay display)action

Animates a spiky star burst of particles at the display's location.

particles.star(5, 8, 30, 1.5, 1, 0.1, false, 2, particles.colored(255, 255, 0, 1))
particles.structuredCube(Location start, Location end, double rate, ParticleDisplay display)action

Draws only the edges (wireframe) of a cube of particles between two corner locations.

particles.structuredCube(player.getLocation(), player.getLocation().add(2, 2, 2), 0.3, particles.colored(0, 255, 255, 1))
particles.tesseract(double size, double rate, double speed, long ticks, ParticleDisplay display)action

Animates a rotating 4D tesseract of particles at the display's location for a number of ticks.

particles.tesseract(2, 0.3, 0.05, 200, particles.colored(0, 255, 255, 1))
particles.vortex(int points, double rate, int lifetime, ParticleDisplay display)action

Animates a spinning vortex of spreading particles at the display's location for a number of ticks.

particles.vortex(8, 30, 200, particles.colored(128, 0, 255, 1))
particles.waveFunction(double extend, double heightRange, double size, double rate, ParticleDisplay display)action

Draws a wavy rippling surface of particles at the display's location.

particles.waveFunction(0.2, 2, 1, 30, particles.colored(0, 128, 255, 1))
Particles8
particles.colored(int r, int g, int b, float size)returns ParticleDisplay

Creates a colored dust particle display from red, green, blue (0-255) and a size.

particles.colored(255, 0, 0, 1)
particles.createCustomParticle(String particle, int count, double extra, boolean force, String offset, String direction, double size, String color, String blockdata, String itemstack, String materialdata)returns CustomParticle

Builds a fully customized particle definition (count, size, color, block/item data and more) to turn into a display.

particles.custom(particles.createCustomParticle("DUST", 1, 0, false, "0,0,0", "0,0,0", 1, "255,0,0", "", "", ""))
particles.custom(CustomParticle customParticle)returns ParticleDisplay

Turns a custom particle definition into a particle display you can use in shapes.

particles.custom(particles.createCustomParticle("FLAME", 1, 0, false, "0,0,0", "0,0,0", 1, "", "", "", ""))
particles.of(String particle)returns ParticleDisplay

Creates a particle display from a particle name, used as the look for particle shapes.

particles.of("FLAME")
particles.randInt(int min, int max)returns int

Returns a random whole number between the two values (both ends included).

particles.randInt(1, 10)
particles.random(double min, double max)returns double

Returns a random decimal number between the two values.

particles.random(0.5, 2.0)
particles.withDirection(ParticleDisplay particleDisplay, Vector direction)returns ParticleDisplay

Sets the direction a particle display points in.

particles.withDirection(particles.colored(255, 0, 0, 1), player.getLocation().getDirection())
particles.withLocation(ParticleDisplay particleDisplay, Location location)returns ParticleDisplay

Sets the location where a particle display will be drawn.

particles.withLocation(particles.colored(255, 0, 0, 1), player.getLocation())

valuesConstant and value helpers usable as method arguments.

Variables2
values.value(String input)returns Object

Turns a piece of text into its real type (number, true/false, or text) automatically.

values.value("42")
values.variable(String name)returns Object

Reads a script variable that is currently available by its name.

values.variable("player")

apiItemsCore API accessors usable from actions.

Economy1
api.isUsingVault()returns boolean

Checks whether the Vault economy plugin is installed and available.

api.isUsingVault()
Items4
api.getItemByName(String name)returns Item

Finds one of your custom items by its name, or nothing if no item has that name.

api.getItemByName("magic_sword")
api.getItemName(ItemStack stack)returns String

Returns the custom name of an item stack.

api.getItemName(player.getItemInHand())
api.giveItem(Player player, Item item)action

Gives a player one of your custom items.

api.giveItem(player, api.getItemByName("magic_sword"))
api.tryGetItemFromPlayerHand(Player player)returns Item

Returns the custom item a player is holding, or nothing if it is not an ItemsCore item.

api.tryGetItemFromPlayerHand(player)
Players1
api.getInput()returns PlayerInput

Returns the helper used to ask a player for typed chat input.

api.getInput()
iWriting a Java addon? The Developer Documentation covers the API and how to add your own methods, attributes, listeners and actions.