NOROMC Plugin Suite

The full documentation for every NOROMC feature: Citizens-backed NPCs with branching dialogue and in-game quest authoring, the chunk claiming economy, jump pads, the AdvancedEnchantments keybind system, and the ender dragon spectate ride. Every feature documented here exists both in the combined NOROMC plugin and, where noted, as its own focused standalone plugin (NORONPCs, NOROMCClaims, NOROMCEconomy, NOROMCJumpPads) with the exact same commands and file formats.

PluginFeatureDepends on
NOROMC.jarEverything on this page, combined.AdvancedEnchantments (hard); Citizens, Vault (soft)
NORONPCs.jarNPCs, dialogue, quests only.Citizens (hard); Vault (soft)
NOROMCClaims.jarChunk claiming only.Vault (soft, for money purchases)
NOROMCEconomy.jarMinimal Vault economy provider.Vault (hard)
NOROMCJumpPads.jarJump pads only.none
ItemEditFull.jarItem editing, custom weapons, and 150+ bindable abilities.none
Design goal: hand-edit the YAML, not the chat window. Every dialogue and quest command has an equivalent line in dialogues.yml or quest-definitions.yml. For anything more than a one-off tweak, it's almost always faster to open the file, paste from the examples on this page, and run /noronpc dialogue reload or /noronpc quest reload than to type a long chat command.

Getting Started

  1. Install Citizens on your server. It's a hard dependency for the standalone NORONPCs plugin, and a soft dependency for the main NOROMC plugin (if it's missing, NOROMC just disables /noronpc and keeps everything else running).
  2. Optionally install Vault plus an economy plugin (EssentialsX, etc.) if you want quest rewards to actually pay out. Without one, quests still complete, the payout is just skipped with a console note.
  3. Drop the plugin jar in your server's plugins/ folder and start the server. Two data files get created on first run: data/dialogues.yml and data/quest-definitions.yml (the latter seeded with 5 example quests so there's something to look at immediately). ItemEdit is bundled inside the main NOROMC jar, so /ie works right away without a separate download.
  4. Stand where you want your first NPC and run /noronpc create Guide.

Permissions

NodeDefaultCovers
noromc.npc.admin op Everything that authors or edits state: create, skin, mobtype, scale, goto, all dialogue subcommands, all record subcommands, quest create, quest delete, quest reload.
noromc.npc.quest true (everyone) Read-only/self-service quest actions: quest list, quest start, quest progress.
noromc.claims.use true (everyone) /claims, in both the main NOROMC plugin and the standalone NOROMCClaims plugin.
noromc.claims.admin op /claimsadmin (standalone NOROMCClaims plugin only; the combined NOROMC plugin uses noromc.admin instead, below).
noromc.bind true (everyone) /bind, the AdvancedEnchantments keybind menu.
noromc.enderdragon.admin op /enderdragonsetspawn, /enderdragonspectate.
noromc.admin op Main NOROMC plugin's /admin: Claim Chunk balance management and /admin givejumpad.
noromc.economy.admin op /economy (alias /eco), standalone NOROMCEconomy plugin.
noromc.economy.balance true (everyone) /balance (alias /bal), standalone NOROMCEconomy plugin.
jumpad.admin op /givejumpad, standalone NOROMCJumpPads plugin only.
itemedit.use true (everyone) /ie, the visual item editor and all subcommands.
itemedit.admin op /ie reload, ability configuration reload.

Creating & Customizing NPCs

An NPC starts as a copy of you: a PLAYER-type entity wearing your name. From there you can reskin it as any player, turn it into any mob, lock it as a baby, and resize it.

# Spawn an NPC named "Guide" at your feet
/noronpc create Guide

# Give it a real player's skin
/noronpc skin Guide Notch

# ...or turn it into a mob instead
/noronpc mobtype Guide zombie
/noronpc mobtype Guide cow baby   # baby/adult variant, locked so it won't grow up

# Resize it (1.0 = vanilla size, works on mobs AND player-skinned NPCs)
/noronpc scale Guide 1.6
Baby/adult only works on Ageable mobs. Trying mobtype <name> player baby is rejected: players don't have a baby variant. The command tells you if the entity type doesn't support it.

Movement: goto vs record

There are two completely different movement systems, built for two different jobs. Picking the right one matters.

/noronpc goto <npcName>

One-off, dynamic pathing. Sends the NPC to your current position using Citizens' real pathfinder. It dynamically routes around whatever's in the way right now: swims through water, takes stairs and doors, avoids walls. Good for "send this NPC over here" on demand.

/noronpc goto Guide stop cancels it mid-walk.

/noronpc record

Exact, looping motion capture. Records your exact position every single tick while you walk/jump/fly/swim/fall, then replays those same frames on a loop forever by teleporting the NPC through them, with no pathfinding involved, so it reproduces literally anything you did, including things Citizens' navigator could never compute on its own (a jump across a gap, a flight path, going underwater).

/noronpc record start
# ... walk/fly/jump/swim the route you want the NPC to loop ...
/noronpc record stop Guide
# or: /noronpc record status   (check progress mid-recording)
# or: /noronpc record abort    (discard without applying it anywhere)

Recording captures every tick, so a route is dense and precise but not tiny: it caps at roughly 20 minutes (24,000 waypoints) with a chat warning once you're close, just so a forgotten open recording can't grow forever.

NPC Command Reference

CommandAccessNotes
/noronpc create <name>adminSpawns at your location.
/noronpc skin <npc> <playerName>adminForces the NPC to PLAYER type first.
/noronpc mobtype <npc> <entityType> [baby|adult]adminAny Bukkit EntityType name.
/noronpc scale <npc> <value>admin0.0625 to 16, 1.0 = normal size.
/noronpc goto <npc> [stop]adminReal-time pathfind to you, or cancel.
/noronpc dialogue create <id>adminEmpty dialogue, ready for lines.
/noronpc dialogue addline <id> <text...>adminAppends one line. Supports & colour codes.
/noronpc dialogue addchoice <id> <targetId|end> <label...>adminClickable response, offered after the lines finish.
/noronpc dialogue assign <npc> <id>adminWhat plays on right-click.
/noronpc dialogue reloadadminRe-reads dialogues.yml from disk.
/noronpc record startadminBegins capturing your movement.
/noronpc record stop <npc>adminApplies the capture to that NPC as a looping path.
/noronpc record abortadminDiscards the in-progress capture.
/noronpc record statusadminWaypoint count / elapsed time so far.
/noronpc record cancel <npc>adminClears an NPC's stored path entirely.
/noronpc quest create talk <id> <npcName> <reward> <name...>adminTalk-to-NPC objective.
/noronpc quest create kill <id> <entityType> <amount> <reward> <name...>adminKill-N-mobs objective.
/noronpc quest create collect <id> <material> <amount> <reward> <name...>adminHold-N-items objective.
/noronpc quest create reach <id> <radius> <reward> <name...>adminUses your current position as the target.
/noronpc quest delete <id>adminRemoves a quest definition.
/noronpc quest assign <npc> <id>adminMakes that NPC hand out (auto-start) the quest on talk.
/noronpc quest reloadadminRe-reads quest-definitions.yml from disk.
/noronpc quest listplayerEvery defined quest with its id and reward.
/noronpc quest start <id>playerBegins tracking progress for that player.
/noronpc quest progressplayerYour active/completed quests.

Writing Dialogue

A dialogue is an ordered list of lines, played one at a time on a configurable delay (npc.dialogue-line-delay-ticks in config.yml, 20 ticks = 1 second by default). Lines support vanilla & colour codes and are only parsed at send time, so the raw text you type is exactly what's stored.

/noronpc dialogue create hello
/noronpc dialogue addline hello &eWelcome, traveler.
/noronpc dialogue addline hello &eI don't get many visitors out here.
/noronpc dialogue assign Guide hello

Right-clicking the assigned NPC now plays those lines in order, in chat and in the action bar (see Action Bar Mirror), and turns the NPC to face whoever it's talking to.

Branching Choices

A dialogue can end in one or more clickable responses instead of just stopping. Each choice either jumps into another dialogue (which can itself end in more choices, letting you build a real conversation tree by chaining dialogues together) or ends the conversation.

/noronpc dialogue create hello
/noronpc dialogue addline hello &eWelcome, traveler. Care to hear about work?
/noronpc dialogue addchoice hello quest_offer &aTell me more
/noronpc dialogue addchoice hello end &7No thanks

/noronpc dialogue create quest_offer
/noronpc dialogue addline quest_offer &eThere's a pest problem in the fields.
/noronpc dialogue addline quest_offer &eKill a few zombies and I'll make it worth your while.

/noronpc dialogue assign Guide hello

The target of a choice must already exist (or be the literal word end); the command validates this and refuses to save a choice pointing nowhere.

Restarting is safe. Right-clicking an NPC while a conversation with it is already mid-line cancels the old one cleanly and starts fresh, instead of stacking overlapping messages.

dialogues.yml Reference

This is exactly what the commands above produce. Hand-editing this file and running /noronpc dialogue reload is usually the fastest way to write more than a couple of lines.

dialogues:
  hello:
    lines:
    - "&eWelcome, traveler. Care to hear about work?"
    choices:
    - label: "&aTell me more"
      target: quest_offer
    - label: "&7No thanks"
      # no "target" key = ends the conversation
  quest_offer:
    lines:
    - "&eThere's a pest problem in the fields."
    - "&eKill a few zombies and I'll make it worth your while."
    choices: []
FieldTypeMeaning
lineslist of stringsPlayed in order, one per tick-delay interval.
choiceslistOptional. Presented once lines finishes.
choices[].labelstringThe clickable text shown to the player.
choices[].targetstring, optionalAnother dialogue id to chain into. Omit to end the conversation.

Action Bar Mirror

Every dialogue line is sent to both chat and the action bar, formatted as:

[EntityType] Name&8:&r Message

The [EntityType] tag (e.g. [Zombie]) is shown for mob-type NPCs and skipped entirely for PLAYER-skinned NPCs, since the name alone already reads as a person.

Why not a real head icon? Action bars can only render plain text components. An actual item/head texture requires a custom resource pack with a font-glyph provider mapping unicode codepoints to textures, which the server would then need to host and force onto every client. That's a separate infrastructure project on its own, so the entity-type text tag is the practical equivalent here.

Creating Quests

Quests are authored entirely in-game or via YAML; nothing requires touching Java code or restarting the server. Every quest boils down to four things: an id (a short, unique, lowercase key you invent, like welcome or pest-control), an objective (what the player has to do), a reward (in whatever currency Vault is hooked up to), and an optional name (what's actually shown to players). There are four objective types, each with its own quest create variant, covered one at a time below.

The name is optional. Really. Skip it and the id becomes the name automatically: pest-control turns into "Pest Control" with no extra typing. That means the shortest possible quest is just an id, a target, and one or two numbers, nothing else. Type a name only when you actually want something different from the id.

1. Talk to an NPC

Syntax: /noronpc quest create talk <id> <npcName> <reward> [name...]

# Full form, with a custom display name
/noronpc quest create talk welcome Guide 100 &6A Warm Welcome

# Shortest form: name is skipped, so it becomes "Welcome" automatically
/noronpc quest create talk welcome Guide 100

2. Kill N of a mob type

Syntax: /noronpc quest create kill <id> <entityType> <amount> <reward> [name...]

# "pest-control" becomes the name "Pest Control" automatically
/noronpc quest create kill pest-control zombie 10 250

3. Hold N of an item at once

Syntax: /noronpc quest create collect <id> <material> <amount> <reward> [name...]

/noronpc quest create collect treasure-hunt diamond 5 500

4. Reach a location

Syntax: /noronpc quest create reach <id> <radius> <reward> [name...]. Stand exactly where you want the target to be before running this: it uses your current position, there's no separate "set location" step.

/noronpc quest create reach long-walk 10 750

Whichever way you write it, the description shown in /noronpc quest list is generated automatically from the objective (e.g. "Kill 10 zombies."); there's no separate description field to keep in sync either.

Made a mistake? Just delete it and try again.

/noronpc quest delete pest-control
/noronpc quest create kill pest-control zombie 15 300

Prefer editing a file over typing commands?

Every quest created this way is just a normal entry in data/quest-definitions.yml (see the reference below). For more than a couple of quests, open that file directly, copy an existing entry, tweak the values, and run /noronpc quest reload to pick up the change with no restart. Commands and hand-editing are two doors into the exact same data; use whichever is faster for what you're doing right now.

Tab-completion only suggests what actually makes sense

Typing /noronpc quest create kill <id> and pressing tab now only suggests actual living mobs (zombies, cows, skeletons, etc.) instead of every single EntityType Minecraft has, including boats, minecarts, item frames and the like, that could never be "killed" for a quest anyway. The amount and reward arguments also suggest a handful of sensible numbers (1, 5, 10, 25, 64 and 50, 100, 250, 500, 1000) so you can tab through a whole quest without typing a single digit, while still being free to type any custom number instead.

Linking an NPC as a quest giver

/noronpc quest assign <npcName> <questId> makes that NPC hand the quest out itself: the first time a player talks to it, if they haven't already started that quest, it auto-starts for them (right alongside whatever dialogue is assigned) and they get the usual "Quest started" message. No more needing to already know a quest's id and type /noronpc quest start yourself — talking to the right NPC is enough.

/noronpc quest create talk welcome Guide 100 &6A Warm Welcome
/noronpc quest assign Guide welcome

Live Quest Bossbar

Every online player with at least one active (started, not yet completed) quest sees a bossbar across the top of their screen showing that quest's name and progress, e.g. Pest Control (4/10). It refreshes once a second, so a kill, a picked-up item, or reaching a marked location shows up on the bar within a second — no need to run /noronpc quest progress to check.

If a player has more than one quest active at once, the bar cycles between them every 5 seconds instead of only ever showing one. The bar disappears entirely once a player has no active quests, and is cleaned up automatically when they log out.

Objective Types

TypeTargetCompleted when…Checked
TALK_TO_NPCan NPC namethe player right-clicks that NPC.on right-click
KILL_ENTITYan EntityTypethe player's kill count on that mob reaches the amount.on EntityDeathEvent
COLLECT_ITEMa Materialthe player is holding that many at once (not consumed).polled once/second
REACH_LOCATIONworld + x/y/z + radiusthe player stands within radius blocks.polled once/second

quest-definitions.yml Reference

quests:
  welcome:
    name: A Warm Welcome
    description: Talk to Guide.
    objective-type: TALK_TO_NPC
    objective-target: Guide
    objective-amount: 1
    reward-amount: 100

  pest-control:
    name: Pest Control
    description: Kill 10 zombies.
    objective-type: KILL_ENTITY
    objective-target: ZOMBIE
    objective-amount: 10
    reward-amount: 250

  long-walk:
    name: The Long Walk
    description: Travel to the marked location.
    objective-type: REACH_LOCATION
    objective-amount: 1
    reward-amount: 750
    world: world
    x: 0.0
    y: 64.0
    z: 0.0
    radius: 10.0
FieldApplies toNotes
nameallShown in quest list / progress.
descriptionallFree text; the in-game command auto-generates this, but hand-edits are respected.
objective-typeallOne of TALK_TO_NPC, KILL_ENTITY, COLLECT_ITEM, REACH_LOCATION.
objective-targetall except REACH_LOCATIONNPC name / EntityType / Material name, matching objective-type.
objective-amountallHow many kills/items/talks needed. Always 1 for talk & reach.
reward-amountallPaid via Vault on completion; skipped (with a console note) if no economy plugin is installed.
world, x, y, z, radiusREACH_LOCATION onlyThe target point and how close counts as "there."
Quest ids are unique keys. Editing the file directly and reusing an existing key overwrites that quest on reload; adding a brand new key adds a brand new quest. No restart needed either way.

Full Examples

Everything from the default seed data, ready to copy into quest-definitions.yml:

quests:
  welcome:
    name: A Warm Welcome
    description: Talk to Guide.
    objective-type: TALK_TO_NPC
    objective-target: Guide
    objective-amount: 1
    reward-amount: 100

  pest-control:
    name: Pest Control
    description: Kill 10 zombies.
    objective-type: KILL_ENTITY
    objective-target: ZOMBIE
    objective-amount: 10
    reward-amount: 250

  treasure-hunt:
    name: Treasure Hunt
    description: Collect 5 diamonds.
    objective-type: COLLECT_ITEM
    objective-target: DIAMOND
    objective-amount: 5
    reward-amount: 500

  delivery-run:
    name: Delivery Run
    description: Bring an emerald to Courier.
    objective-type: TALK_TO_NPC
    objective-target: Courier
    objective-amount: 1
    reward-amount: 400

  long-walk:
    name: The Long Walk
    description: Travel to the marked location.
    objective-type: REACH_LOCATION
    objective-amount: 1
    reward-amount: 750
    world: world
    x: 0.0
    y: 64.0
    z: 0.0
    radius: 10.0

Claims: Claim Chunks & Currency

A chunk-claiming system with its own virtual currency, "Claim Chunks," separate from any server economy. Available as part of the main NOROMC plugin or as the standalone NOROMCClaims plugin; both use identical commands and data formats.

Setting (config.yml under claims:)DefaultMeaning
starting-balance25Claim Chunks a new player starts with.
base-cost1Claim Chunks to claim one chunk.
cost-increase-per-claim0Extra cost per chunk already owned (0 = flat cost for every claim).
max-claims-per-player2Hard cap on separate claims a player can own. Applies equally to everyone, no op/staff bypass.
purchase-base-price5000Real-money starting price for buying Claim Chunks via Vault.
purchase-price-multiplier2Multiplier applied to the price for every Claim Chunk already held/claimed (exponential climb).
Two currencies, two purposes. Claim Chunks are what you actually spend to claim a chunk. Real server money (via Vault) can optionally buy more Claim Chunks, at a price that climbs the more you already own, but money never claims a chunk directly.

The /claims GUI: "Nearby Chunk Claims"

Permission noromc.claims.use (default true). A 54-slot (6 rows × 9 columns) GUI: the top 5 rows are a spatial chunk grid, the bottom row is a fixed control bar.

The chunk grid

Each pane is exactly one chunk, laid out relative to the direction you were facing when you opened the menu (snapped to the nearest cardinal direction). It does not re-rotate live while the menu stays open; reopen it after turning to reorient.

PaneMeaning
Nether StarYour current chunk, whatever its claim status.
Trial Spawner iconA Trial Chamber chunk. Cannot be claimed.
Light gray paneUnclaimed: shows coordinates, cost, and your balance.
Lime paneClaimed by you. Click to open its management menu.
Orange paneClaimed by someone else.

Footer control bar (row 6)

SlotItemOpens
3Your player headPurchase Claim Chunks menu (real money via Vault).
5"Claiming With"Which claim newly-claimed chunks get added to.
7"Your Claims (N)"Every claim you own or are a member of.
9"Claim Trading"Server-wide marketplace of claims listed for sale.

Purchasing Claim Chunks with real money

Requires Vault plus an economy provider (EssentialsX, NOROMCEconomy, etc.). Without one, the menu still opens but blocks the purchase. Buying more than one at once prices every unit in the batch at the same rate as the last one, so buying in bulk is never cheaper per-unit than buying one at a time.

Managing a Claim

Opened by clicking your own claimed chunk, or from "Your Claims." A 4-row (36-slot) menu:

SlotItemDoes
1BarrierBack to the grid.
5Slime blockCenter coordinates, chunk count, owner, your rank, member list.
9EmeraldOpens the trading menu.
11BedTeleport to the claim's home.
13Ender pearlClaim warps (currently just "Home").
21Gold ingotShard Bank balance (N/500).
25Owner's headRead-only member/rank list.
28TNTDelete just the chunk you opened this menu from.
36Oak doorDelete the entire claim, all chunks included.
Not yet implemented. Claiming a chunk currently doesn't enforce any protection (block break/place, PvP, container access). The claiming/browsing/trading UI is real; enforcement rules are a separate, not-yet-built layer.

Trading & Marketplace

A claim's Trading menu shows Status: Unlisted or Status: Listed plus a category. Listing walks you through a Category picker (Farm / Mob Grinder / Home, easily extended); once listed, it shows up in every player's /claims marketplace browse menu (slot 9 of the footer). The marketplace is currently read-only: browsing works, but ownership transfer plus payment isn't wired up yet.

Borders & Entry/Exit Subtitles

Claiming a chunk starts a particle wall around it that runs indefinitely (survives server restarts). Green sparkles for your own claim, purple dust for someone else's. Adjacent claimed chunks in the same claim merge into one outline around the whole connected cluster instead of drawing a border around every individual chunk.

Walking across a claim boundary shows a subtitle (no title line):

EventText
Entering your own claim♦ Entering your claimed land ♦
Exiting your own claim♦ Exiting your claimed land ♦
Entering someone else's claim♦ Entering <owner>'s claimed land ♦
Exiting someone else's claim♦ Exiting <owner>'s claimed land ♦

Claims Admin Commands

CommandPluginPermission
/admin claims add <username> <count>NOROMC (combined)noromc.admin
/admin claims remove <username> <count>NOROMC (combined)noromc.admin
/admin claims set <username> <count>NOROMC (combined)noromc.admin
/claimsadmin <add|remove|set> <username> <count>NOROMCClaims (standalone)noromc.claims.admin

All work on offline players (via Bukkit.getOfflinePlayer) as long as they've played on the server before, and count must be a non-negative whole number.

Economy (Vault Provider)

The standalone NOROMCEconomy plugin: a minimal Vault Economy implementation, just a flat per-player money balance with no banks, shops, homes, kits, warps, or multi-world balances. Exists purely so NOROMC's Purchase Claim Chunks menu (and anything else reading Vault's Economy service) has a real currency to charge against.

CommandAliasPermissionDoes
/economy <give|take|set> <username> <amount>/econoromc.economy.admin (op)Admin balance management.
/balance [username]/balnoromc.economy.balance (true)Check your own balance, or anyone else's with the argument.
starting-balance: 0
currency-symbol: "$"
currency-name-singular: "Dollar"
currency-name-plural: "Dollars"

Data lives in data/balances.yml (UUID to balance), managed automatically and not meant for hand-editing while the server runs.

Jump Pads

Available as part of the main NOROMC plugin (/admin givejumpad) or as the standalone NOROMCJumpPads plugin (/givejumpad, permission jumpad.admin). Both behave identically.

Command syntax

# Vertical-only pad: <block> <up_force>
/admin givejumpad stone 32

# Directional pad: <block> <horizontal_blocks> <direction> [up_force]
# If up_force is omitted, the configured default-upward-force is used.
/admin givejumpad stone 32 north 16

# Standalone plugin uses the same arguments:
/givejumpad stone 32 north

Placing that item registers the block's exact location, jump force, and direction. Walking or jumping onto it launches the player. With no direction set, horizontal velocity is left untouched; with a direction set, the player is pushed the requested number of horizontal blocks while in the air, capped by horizontal-speed.

gravity: 0.08                     # converts up_force into launch velocity
horizontal-speed: 3.6            # max horizontal blocks/tick for directional pads
default-horizontal-blocks: 32    # horizontal distance if none is given per-item
default-upward-force: 16         # up force if a directional pad omits the 4th arg
relaunch-cooldown-ms: 500
ambient-particle: CLOUD
ambient-particle-interval-ticks: 20
launch-particle: CLOUD
launch-particle-count: 20
launch-sound: ENTITY_SLIME_JUMP
launch-sound-volume: 1.0
launch-sound-pitch: 1.0
No fall damage after a launch. Each launch grants one-time fall-damage immunity, consumed the next time that player takes fall damage. Unrelated falls still hurt normally.

/bind Keybind Abilities

Main NOROMC plugin only, permission noromc.bind (default true). Lets a player open a GUI, pick hotbar keys 1–9, and bind an AdvancedEnchantments ability detected on their currently equipped gear to that key. Pressing the bound number afterwards fires the ability without changing their held item.

  1. /bind: a 3-row GUI opens, slots 1–9 in the middle row (gray = unbound).
  2. Click an unbound slot: a picker lists AE abilities currently on your gear.
  3. Click one: it's bound, and that slot turns lime green.
  4. Press the corresponding number key: the ability fires, your held item never visibly changes.

Config (config.yml): whitelist-mode (default true) restricts binding to the keybind-enchants list; set false to allow any AE ability on the player's gear, including passive ones.

Ender Dragon Spectate Ride

Main NOROMC plugin only, permission noromc.enderdragon.admin (default op). Puts a player on a rideable, harmless ender dragon using ordinary vanilla creative-flight controls (WASD, Space, Sneak), since a real passenger seat doesn't work for a dragon (EntityDamageByEntityEvent, block-break, and explosion events are all cancelled for it, so it can't hurt anyone or break terrain).

# Set the one global spawn point for future rides
/enderdragonsetspawn

# Spawn a dragon there and put a player on it; run again on the same player to end the ride
/enderdragonspectate Notch

Combat Feedback

Main NOROMC plugin only, no permission gate (applies to all combat). Two passive visual effects, no commands involved:

ItemEdit (Custom Items)

Main NOROMC plugin only (also available as the standalone ItemEditFull plugin). Permission itemedit.use (default true). Lets players and admins build custom items with lore, enchantments, attributes, flags, and over 150 bindable abilities pulled from the abilities/ and config.yml files.

Quick commands

/ie                          # Opens the visual editing GUI
/ie rename <name>            # Supports & color codes and MiniMessage tags
/ie lore add <text>
/ie lore set <line> <text>
/ie lore remove <line>
/ie lore clear
/ie enchant <enchantment> <level>
/ie unbreakable <true|false>
/ie flag <add|remove|clear> <flag>
/ie attribute <add|remove|clear> <attr> [val]
/ie hidetooltips [true|false]
/ie give [player] <weapon_key>
/ie reload                   # Reload config, weapon.yml, and abilities (itemedit.admin)

Abilities

Abilities are split into four categories: attack, defense, mining, and passive. You can stack up to 10 non-attack abilities on an item, and up to 255 attack abilities for massive scaling.

/ie ability list
/ie ability add <attack|defense|mining|passive> <ability> [count]
/ie ability remove <ability>
/ie ability clear

Per-item ability tuning

Override any ability parameter on the held item without touching the global config.

/ie custom <ability> <param> <value>
# Example: make this item's lava_spit cooldown 2.5 seconds
/ie custom lava_spit cooldown 2.5

weapon.yml template

Define premade weapons that can be given with /ie give <weapon_key>.

weapons:
  ember_blade:
    material: BLAZE_ROD
    display-name: "&6Ember Blade"
    lore:
      - "&7Forged in magma."
    custom-model-data: 1
    abilities:
      - lava_spit
      - fire_aura
Huge ability roster. The plugin ships over 150 abilities across lava, warden, undead, end, nether, ocean, sky, sculk, ice, desert, illager, and legendary combat schools. See the abilities/*.yml files and the abilities: section of config.yml for every cooldown, damage, radius, and duration value.

Walkthrough: A Complete Quest Chain

Putting NPCs, branching dialogue, and quests together: a guide who offers a job, and a courier who pays out once you deliver.

# 1. Spawn the two NPCs
/noronpc create Guide
/noronpc skin Guide Notch
# walk to where Courier should stand, then:
/noronpc create Courier

# 2. Write Guide's branching dialogue
/noronpc dialogue create guide_hello
/noronpc dialogue addline guide_hello &eWelcome, traveler. Care to hear about work?
/noronpc dialogue addchoice guide_hello guide_offer &aTell me more
/noronpc dialogue addchoice guide_hello end &7No thanks

/noronpc dialogue create guide_offer
/noronpc dialogue addline guide_offer &eBring an emerald to Courier and you'll be rewarded.
/noronpc dialogue assign Guide guide_hello

# 3. Write Courier's dialogue
/noronpc dialogue create courier_hello
/noronpc dialogue addline courier_hello &eGot that emerald for me?
/noronpc dialogue assign Courier courier_hello

# 4. Create the quest (talking to Courier completes it, but only if
#    the player is holding an emerald at that moment)
/noronpc quest create talk delivery-run Courier 400 &6Delivery Run

# 5. Players start it themselves
/noronpc quest start delivery-run
The delivery-run hand-in rule is built in. TALK_TO_NPC quests whose id is exactly delivery-run require an emerald in the player's inventory at click time (it's never consumed), a small hardcoded example of how "hand something over" objectives can layer on top of the base talk-to-npc check.

config.yml Reference

npc:
  # Ticks between each line of an NPC's dialogue when a player right-clicks it (20 = 1s).
  dialogue-line-delay-ticks: 20

Building & ProGuard

All plugins build with mvn clean package. The main NOROMC plugin's pom.xml now runs ProGuard during the package phase to obfuscate class and member names. Shrinking and optimization are disabled; only renaming runs, because Bukkit and AdvancedEnchantments access large parts of the plugin through reflection and static analysis can't see those entry points.

Local dependencies that must be installed first

AdvancedEnchantments and Citizens are not on public Maven repositories, so install them into your local Maven repo once per machine:

mvn install:install-file -Dfile="AdvancedEnchantments-9.22.7.jar" ^
    -DgroupId=net.advancedplugins -DartifactId=AdvancedEnchantments -Dversion=9.22.7 -Dpackaging=jar

mvn install:install-file -Dfile="Citizens-2.0.43-b4228.jar" ^
    -DgroupId=net.citizensnpcs -DartifactId=citizensapi -Dversion=2.0.43-b4228 -Dpackaging=jar

ProGuard JDK home

ProGuard needs a JDK that ships jmods. The pom.xml sets a default proguard.jdk.home; override it on other machines with:

mvn clean package -Dproguard.jdk.home=C:/Path/To/JDK
Why obfuscate? The built jar is distributed to players. Renaming internal class/method names makes decompiled output far less useful without touching any public API surface Bukkit needs.

What's New