Content generated with AI — it may contain mistakes.

Configuring

Menus

The two editable menu files, what each button is wired to, the full action vocabulary and the placeholders a menu can read.

/bot opens one screen and that screen opens one more. Both are YAML files you own:

FileScreen
plugins/ExyliaPracticeBotV3/menus/user/main.ymlThe hub /bot opens: mode, difficulty, armour, hands, potions and the spawn buttons.
plugins/ExyliaPracticeBotV3/menus/user/advanced.ymlFine tuning: the numeric sliders and the sandbox toggles.

They are copied out of the jar the first time the plugin starts and never overwritten after that, so your edits survive an update. /bot reload re-reads both, along with config.yml and messages.yml. The format is ExyliaLib's declarative menu YAML — see the library's menus page for the item keys, the filler block, sounds and animations.

The user/ folder is deliberate

Menu ids are the path under menus/ without the extension, which is why both files live in user/. It is the layout every Exylia plugin uses, and it leaves room for an admin/ tree later. Moving a file out of user/ changes its id and the plugin will not find it.

main.yml

size: 54, type: SIMPLE, a grey glass filler, and refresh ON_CLICK so a button shows its new value the moment you click it.

ItemSlotLeft-clickRight-click
mode3cycle modecycle mode back
difficulty4cycle difficultycycle difficulty back
advanced5open_advanced_settings
helmet10cycle helmetcycle helmet_enchant
chestplate19cycle chestplatecycle chestplate_enchant
leggings28cycle leggingscycle leggings_enchant
boots37cycle bootscycle boots_enchant
main-hand16cycle main_handcycle knockback
off-hand25cycle off_hand
potions34cycle strengthcycle speed
teleport43tp_to_bottp_bot_to_me
toggle-attack22toggle attack
toggle-follow31toggle follow
spawn48spawn
reset49reset_settings
remove50remove

advanced.yml

The same shell, plus parent: "user/main" — which is what makes the Back button at slot 49 work.

ItemSlotLeft-clickRight-click
attack-damage10adjust attack_damage 0.5adjust attack_damage -0.5
toggle-anti-knockback13toggle anti_knockback
follow-distance16adjust follow_distance 0.5adjust follow_distance -0.5
attack-reach19adjust attack_reach 0.1adjust attack_reach -0.1
toggle-slow-falling22toggle slow_falling
max-health25adjust max_health 2adjust max_health -2
attack-speed28adjust attack_speed 0.1adjust attack_speed -0.1
toggle-fire-resistance31toggle fire_resistance
shield-disable34adjust shield_disable 0.5adjust shield_disable -0.5
movement-speed37adjust movement_speed 0.1adjust movement_speed -0.1
totems40adjust totems 1adjust totems -1
toggle-invincible43toggle invincible
back49back

back is ExyliaLib's own action, not this plugin's; it needs the parent key above it and nothing else.

Writing an action

Actions go in an item's actions list, optionally prefixed with the click that fires them:

actions:
  - "left: cycle helmet"
  - "right: cycle helmet_enchant"

An entry with no prefix fires on any click. Actions are written unprefixed and resolve in this plugin's practicebot namespace, so cycle mode and practicebot:cycle mode are the same thing.

The full vocabulary

ActionWhat it does
spawnSpawns the player's bot where they stand. Refuses in a world outside worlds, and refuses if they already have one.
removeSends the bot away.
tp_to_botTeleports the player to their bot.
tp_bot_to_meTeleports the bot to the player.
open_advanced_settingsOpens user/advanced.
reset_settingsPuts every setting back to the server default, kit included.
set_mode <mode>Sets the mode outright. Unrecognised names fall back to NONE.
set_difficulty <difficulty>Sets the difficulty outright. Unrecognised names fall back to NORMAL.
toggle <field>Flips one boolean.
cycle <field> [back]Steps one setting to its next value, or its previous with back.
adjust <field> <delta>Adds delta to one number, clamped and rounded.

set_mode and set_difficulty are there for a menu that wants one button per mode instead of one cycling button. See Modes and Difficulty for the names they accept.

The field lists are closed

toggle, cycle and adjust each accept exactly the fields below. A name that is not on its list fails the action — the click does nothing and the setting is untouched. There is no way to add a field from YAML.

toggle <field>

FieldSetting
attackWhether the bot fights back at all.
followWhether it follows its owner.
invincibleNever dies.
anti_knockbackIgnores knockback entirely.
slow_fallingPermanent Slow Falling.
fire_resistancePermanent Fire Resistance.

cycle <field> [back]

FieldSteps through
helmet, chestplate, leggings, bootsNONE → DIAMOND → NETHERITE
helmet_enchant, chestplate_enchant, leggings_enchant, boots_enchantNONE → PROTECTION → BLAST_PROTECTION
main_handSWORD → AXE → MACE → TOTEM
off_handNONE → TOTEM → SHIELD
knockbackNONE → KNOCKBACK_1 → KNOCKBACK_2
strengthNONE → STRENGTH_1 → STRENGTH_2
speedNONE → SPEED_1 → SPEED_2
modeThe seven combat modes
difficultyThe five difficulties

Every list wraps around at the end. back only means anything for mode and difficulty — everything else is short enough that forward is the only direction anybody needs, and the argument is ignored there.

adjust <field> <delta>

FieldSetting
attack_damageDamage of a fully charged, non-critical hit.
attack_reachBlocks it can hit from.
attack_speedMultiplier on the cadence the mode chose.
movement_speedMultiplier on walk and sprint speed.
follow_distanceHow close it stays when it is not fighting.
max_healthMaximum health, in half-hearts.
totemsSpare totems per life.
shield_disableSeconds an axe hit keeps its shield down.

delta may be negative, and that is how the shipped files write their decrease buttons. Every result is clamped to the matching pair in the limits block of config.yml and then rounded to one decimal, so a button with a delta finer than 0.1 will appear to do nothing. totems is rounded to a whole number after the clamp. See Limits.

Placeholders

A menu file can read the player's current settings through these names. %name% is the label to print, %name_material% is the icon to draw — which is how the armour column shows the actual piece the bot is wearing and changes under the cursor.

PlaceholderHolds
%bot_active%Whether the player has a bot out, as ON or OFF.
%mode%The mode's label.
%mode_material%The item the mode is drawn with.
%mode_summary%The one line explaining what the mode fights with.
%difficulty%The difficulty's label.
%difficulty_material%The item the difficulty is drawn with.
%difficulty_summary%The one line explaining what the difficulty changes.
%attack_mode%Whether the bot fights back, as ON or OFF.
%follow_owner%Whether it follows its owner, as ON or OFF.
%invincible%Whether it can die, as ON or OFF.
%anti_knockback%Whether it ignores knockback, as ON or OFF.
%slow_falling%Whether it has permanent Slow Falling, as ON or OFF.
%fire_resistance%Whether it has permanent Fire Resistance, as ON or OFF.
%helmet%The helmet's label.
%helmet_material%The helmet the bot is actually wearing, as an item.
%helmet_enchant%The helmet enchantment's label.
%helmet_enchant_material%That enchantment's icon.
%chestplate%The chestplate's label.
%chestplate_material%The chestplate the bot is actually wearing, as an item.
%chestplate_enchant%The chestplate enchantment's label.
%chestplate_enchant_material%That enchantment's icon.
%leggings%The leggings' label.
%leggings_material%The leggings the bot is actually wearing, as an item.
%leggings_enchant%The leggings enchantment's label.
%leggings_enchant_material%That enchantment's icon.
%boots%The boots' label.
%boots_material%The boots the bot is actually wearing, as an item.
%boots_enchant%The boots enchantment's label.
%boots_enchant_material%That enchantment's icon.
%main_hand%The weapon's label.
%main_hand_material%The weapon as an item.
%off_hand%The off hand's label.
%off_hand_material%The off hand as an item. A barrier when it is empty.
%knockback%The weapon's Knockback level, as a label.
%strength%The Strength level, as a label.
%speed%The Speed level, as a label.
%attack_damage%Damage of a fully charged hit, to one decimal.
%attack_reach%Attack reach in blocks, to one decimal.
%attack_speed%The attack speed multiplier, to one decimal.
%movement_speed%The movement speed multiplier, to one decimal.
%follow_distance%Follow distance in blocks, to one decimal.
%max_health%Maximum health in half-hearts, to one decimal.
%shield_disable%Seconds an axe hit keeps a shield down, to one decimal.
%totems%The totem reserve, or the unlimited label when it is below zero.

Every label comes from the placeholders block of messages.yml, so renaming Diamond or recolouring Strength II is that file's job and never this one's. %bot_active% is not used by either shipped file; it is there for an owner who wants Spawn and Remove to say what state they are in.

These are menu placeholders only

The plugin registers no PlaceholderAPI expansion. Every name above is resolved by the menu that is being drawn and exists nowhere else — not on a scoreboard, not in a hologram, not in another plugin's message. There is no %practicebot_...% to put anywhere.

Something missing on this page? Tell us on Discord