PracticeBot | Advanced PvP Training Bot v1.8.5

Advanced Citizens-powered PvP training bots with templates, Developer API support and etc.
This update turns PracticeBot into a much more complete template-driven PvP bot system while keeping the original player bot workflow intact.

Main Changes
  • Split normal player commands and admin commands cleanly
  • Added full bot templates system
  • Added NORMAL, CPVP, and DUMMY template bot types

Command Structure
Player Commands
  • /pb
  • /practicebot
  • /spawnbot normal
  • /spawnbot crystal

Admin Commands
  • /pbadmin
  • /practicebot-admin

Template Commands
  • /pbadmin spawntemplate <template> <world> <x> <y> <z> <pitch> <yaw>
  • /pbadmin spawntemplate <template> <target> <world> <x> <y> <z> <pitch> <yaw>
  • /pbadmin despawn <world>
  • /pbadmin despawn <world> <bot>
  • /pbadmin createtemplate <name>
  • /pbadmin edittemplate <name>
  • /pbadmin canceltemplate
  • /pbadmin deletetemplate <name>
All template/admin spawn commands work from console, command blocks, Skript, and other plugin-driven execution.

New Template System
Templates now live in bot_templates.yml and support:
  • Template name
  • NPC display name
  • Skin
  • Bot type: NORMAL, CPVP, DUMMY
  • Target binding: REQUIRED or NONE
  • Death mode: REMOVE or RESPAWN
  • Respawn delay
  • Warm-up duration before the bot starts attacking
  • Normal PvP settings
  • Crystal PvP settings
  • Behavior-only dummy templates
  • Full inventory and armor setup
  • Custom main-hand items
  • Totem count including 0
  • Per-piece armor materials
  • Per-piece trims
  • Per-piece enchant selection

Inventory Customization
Template inventory editing is now fully live and preview-safe.
Admins can now configure:
  • Any main-hand tool, weapon, or item
  • 0 totems for no offhand totem usage
  • Separate helmet, chestplate, leggings, and boots materials
  • Armor enchant cycle: Protection, Blast Protection, None
  • Any trim pattern/material directly from the cursor

Supported armor material toggles:
  • leather
  • copper
  • gold
  • chain
  • iron
  • diamond
  • netherite

Live Template Editor
The in-game template editor uses a dedicated preview NPC that is isolated from the normal bot lifecycle.

Preview NPC Safety
The editor preview NPC:
  • Spawns in front of the creator
  • Faces the creator correctly
  • Uses a stable default preview skin
  • Never behaves like a live PvP bot
  • Does not pathfind, attack, target, or run normal combat ticks
  • Does not get removed by normal bot owner logic
  • Cleans up safely on cancel, logout, world change, world unload, plugin disable, or NPC removal


Warm-Up System
Templates support a warm-up-seconds option.

Example:
  • 0 = attack immediately
  • 3 = wait 3 seconds after spawn before attacking


Cleanup Rules
  • Manual despawn cancels pending respawns
  • Plugin disable removes preview sessions and active PracticeBot NPCs safely
  • World unload cleans relevant template bots safely
  • Template deletion removes all active bots from that template
  • Deleted templates no longer respawn afterward

Permissions
Admin/template permissions now include:
  • practicebot.admin.spawntemplate
  • practicebot.admin.despawn
  • practicebot.admin.template.create
  • practicebot.admin.template.edit
  • practicebot.admin.template.cancel
  • practicebot.admin.template.delete

Compatibility
  • Existing /pb and /practicebot player flow stays intact
  • Existing /spawnbot player spawning stays intact
  • Existing GUIs stay intact
  • Old template configs still load with fallback compatibility
  • Older shared armor fields still load into the new per-piece armor model

Summary
This update is focused on quality-of-life, safer admin tooling, and much deeper template control.
This update focuses heavily on unifying combat mechanics and finalizing jitter-free, realistic bot behaviors for both Normal and CPVP modes!

[Bot Stability Fixes - ALL MODES]
* Fixed a major issue causing weird head/body movements and bots freezing mid-air on specific servers. Physics and tracking are now smoother across all server environments.

[CPVP Bot Improvements]
  • Crystal Combo Focus: Added aerial-target guards. When you are knocked up by crystal spam, the bot will now dynamically hold its ground beneath you to focus 100% on crystal spamming rather than jittering or executing useless jumps.
  • Ender Pearl Head Tracking: Throwing an ender pearl now perfectly syncs with the bot's smooth aim, completely eliminating the bug where the bot's head would snap unnaturally backward after throwing.

[Normal Bot Improvements]
  • Jitter-Free Chase System: Major engine overhaul to separate close-combat yaw/pitch assignment from the Citizens Navigator. Head and body movements while chasing are now realistic and smooth without rapid snapping.
  • GUI Combat Pause integration: Unified GUI safety checks. If you open any of the bot menus (Bot Settings, PvP Settings, Bot Editing), the bot will immediately halt navigation and stop attacking until you close the menu.
  • Crit & W-Tap Stability: Resolved conflicts with hit-timing schedulers to ensure Critical Hits and W-Tap knockback evaluate correctly and consistently.

Enjoy the massively improved bot realism!
Full Color Code Support

Previously the plugin only supported legacy Minecraft color codes (&a, &c, &6, etc.). This update adds full support for all Minecraft color formats across every configurable message, GUI title, item name, and lore line.


What's New

Hex Color Support
— Use any of 16 million colors with &#RRGGBB
Example: &#FF5555This is coral red!

RGB Color Support — Specify colors as rgb:R,G,B
Example: rgb:85,255,85 This is bright green!

Bukkit Hex Format — Standard &x&R&R&G&G&B&B format
Example: &x&F&F&5&5&5&5

Gradient Text — Apply smooth gradients across text
Example: <gradient:#FF0000:#0000FF>Rainbow text!</gradient>

Legacy codes still fully supported - &a, &b, &l, &o, &r, etc. all work exactly as before.


Bot Nameplate Hologram Fix

When the bot's display name (prefix + player name) exceeded 16 characters, Citizens2 would automatically switch from the native player nameplate to a hologram-based nameplate (ArmorStand). This hologram appears with a visible delay and looks different from a real player nameplate.


What Was Changed
messages.yml
config.yml
gui/settings_menu.yml
gui/pvp_settings.yml
gui/bot_inventory.yml
gui/cpvp_settings.yml
gui/admin_inventory.yml
gui/editor_menu.yml
gui/editor_item.yml
BOT DESPAWN ON OWNER DEATH:
• Bot will now automatically despawn if it kills its owner
• Configurable in config.yml: general.despawn-on-owner-death
- true (default) = bot despawns when it kills owner
- false = bot stays spawned after killing owner
• Configurable message in messages.yml: "bot-despawned-owner-death"
• Prevents awkward situations where your bot keeps attacking
your corpse or other players after killing you

DISABLED WORLDS FOR BOT SPAWNING:
• New config option: general.disabled-worlds (list)
• Players cannot spawn bots in specified worlds
• Useful for lobby worlds, minigame worlds, etc.
• Configurable error message in messages.yml: "errors.world-disabled"
• Supports {world} placeholder for world name display

MESSAGES NOW CONFIGURABLE IN messages.yml:
• Crystal PvP bot spawn message
• Crystal PvP bot despawn message
• Spawn cooldown message
• Bot initialization error message
• Bot despawned by owner death message (NEW)
• World disabled error message (NEW)

GUI ITEMS NOW EDITABLE IN cpvp_settings.yml:
• "Bot Inventory" button (slot 38)
• "Despawn Bot" button (slot 42)

GUI ITEMS NOW EDITABLE IN bot_inventory.yml:
• Main Hand item display (name, lore, slot)
• Off Hand/Totem item display (name, lore, slot)

NEW PLACEHOLDERS FOR bot_inventory.yml:
• {mainhand_type} - Current main hand item name
• {mainhand_item} - Same as above
• {totem_count} - Number of totems
• {offhand_count} - Same as totem_count
• {offhand_type} - Off hand item type

NEW CONFIG OPTIONS IN config.yml:
• added CPvP bot settings and you can set default settings for it
• general.despawn-on-owner-death - Whether bot despawns
when it kills its owner (default: true)
• general.disabled-worlds - List of worlds where bots can't spawn
Example:
disabled-worlds:
- "world"

NEW MESSAGES IN messages.yml:
• bot-despawned-owner-death: "&cYour Practice Bot has been
despawned because it killed you."
• errors.world-disabled: "&cBot spawning is disabled in
this world: &e{world}"


NOTE: Delete your old config files and restart to get
the new default values, or manually add the new keys.


new config.yml example:

Code:
# ==========================================================
#  PracticeBot - Configuration
#  Author: SHELDERA
# ==========================================================

# ----------------------------------------------------------
#  DEFAULT SETTINGS
# ----------------------------------------------------------
default:
  # Bot health in hearts (20.0 = 10 hearts like a player)
  bot-health: 20.0

  # Whether bots can be pushed by entities
  collidable: true

  # Make bots completely invulnerable to damage
  bot-invulnerable: false

  # Allow players to spawn multiple bots at once
  allow-multiple-bots: false

  # Prefix for bot names (shown above their head)
  # Use color codes like "&6[BOT] " for colored prefixes
  bot-prefix: ""

  # Despawn the bot when it kills its owner
  # true = bot despawns when it kills owner (default)
  # false = bot stays spawned after killing owner
  despawn-on-owner-death: true

  # List of worlds where bot spawning is disabled
  # Players cannot spawn bots in these worlds
  disabled-worlds:
    - "example_world"
    # Add more worlds as needed


# ----------------------------------------------------------
#  BEHAVIOUR DEFAULTS
#  Default settings when a bot is spawned
# ----------------------------------------------------------
default-behaviour:
  # Bot looks at owner when nearby
  look-at-owner: false

  # Bot follows owner around
  follow-owner: false

  # Bot walks randomly when idle
  random-walk: false

  # Bot holds a shield (visual only)
  hold-shield: false

  # Bot actively uses shield to block attacks
  use-shield: false

  # Bot attacks players in range
  pvp-enabled: false


# ----------------------------------------------------------
#  CRYSTAL PVP BOT SETTINGS
# ----------------------------------------------------------
cpvp:
  # Default settings when a CPVP bot is spawned
  # These are applied when a new CPVP bot is created
  defaults:
    # Starting skill level: EASY, MEDIUM, HARD, or PRO
    skill-level: EASY

    # How aggressive the bot is (0.5 - 2.0)
    # Higher = more aggressive crystal placement/breaking
    aggression-weight: 0.7

    # How much the bot values its own safety (0.5 - 2.0)
    # Higher = more cautious about self-damage
    risk-weight: 1.5

    # Whether bot uses ender pearls for mobility
    use-pearls: true

    # Whether bot uses mace for aerial attacks
    use-mace: false

    # Whether bot eats golden apples to heal
    use-golden-apples: false

    # Whether bot places obsidian for crystal bases
    place-obsidian: true

    # Whether bot strafes during combat
    strafing-enabled: false

    # Health percentage to start healing (0.2 - 0.8)
    heal-threshold: 0.4

    # Pearl cooldown in milliseconds (500 - 3000)
    pearl-cooldown-ms: 1800

  # ----------------------------------------
  # DIFFICULTY LEVELS
  # Admins can customize all values below
  # You can also add custom difficulty levels!
  # ----------------------------------------
  difficulty-levels:
    EASY:
      # Combat weights
      aggression-weight: 0.7
      risk-weight: 1.5
      # Timing (in milliseconds)
      place-delay-ms: 250
      break-delay-ms: 150
      sword-delay-ms: 800

    MEDIUM:
      aggression-weight: 1.3
      risk-weight: 1.0
      place-delay-ms: 150
      break-delay-ms: 100
      sword-delay-ms: 600

    HARD:
      aggression-weight: 1.5
      risk-weight: 0.8
      place-delay-ms: 25
      break-delay-ms: 18
      sword-delay-ms: 500

    PRO:
      aggression-weight: 2.0
      risk-weight: 0.5
      place-delay-ms: 5
      break-delay-ms: 3
      sword-delay-ms: 500

    # ----------------------------------------
    # CUSTOM DIFFICULTY EXAMPLE (uncomment to use)
    # ----------------------------------------
    # GODLIKE:
    #   aggression-weight: 2.5
    #   risk-weight: 0.3
    #   place-delay-ms: 1
    #   break-delay-ms: 1
    #   sword-delay-ms: 400


# ----------------------------------------------------------
#  TICK / AI SETTINGS
# ----------------------------------------------------------
ai:
  # How often bot AI updates (in ticks, 1 = every tick)
  # Lower = more responsive, Higher = better performance
  tick-interval: 1

  # Maximum distance bot can walk from spawn point when random walking
  random-walk-radius: 6.0


# ----------------------------------------------------------
#  PVP SETTINGS
# ----------------------------------------------------------
pvp:
  # Base attack cooldown in milliseconds (without crits)
  base-cooldown-ms: 500

  # Cooldown when using critical hits (by crit speed setting)
  crit-cooldowns:
    slow: 550      # More careful, harder hits
    normal: 440    # Balanced timing
    fast: 340      # Aggressive rapid crits

  # Cooldown multipliers for aggression levels
  # Higher value = slower attacks for that aggression level
  aggression-cooldown-multipliers:
    low: 1.5       # 50% slower (more defensive)
    medium: 1.2    # 20% slower (balanced)
    high: 1.0      # Normal speed (aggressive)

  # Damage multipliers based on aggression level
  # To enable: Add getter methods to ConfigManager.java
  aggression-damage-modifiers:
    low: 1.0       # Normal damage
    medium: 1.05   # 5% more damage
    high: 1.1      # 10% more damage

  # Critical hit damage multiplier (Minecraft default is 1.5)
  crit-multiplier: 1.5

  # Reach distances in blocks for different reach modes
  reach-distances:
    short: 2.0      # Conservative reach
    normal: 3.0     # Vanilla Minecraft reach
    extended: 3.5   # Slightly extended
    advanced: 4.0   # Maximum reach

  # Chase/navigation speed for different aggression levels
  chase-speeds:
    low: 1.0        # Normal walking speed
    medium: 1.2     # 20% faster
    high: 1.4       # 40% faster

  # ----------------------------------------
  # KNOCKBACK SETTINGS
  # ----------------------------------------
  knockback:
    # Base horizontal knockback multiplier
    horizontal: 0.4

    # Base vertical knockback multiplier
    vertical: 0.36

    # W-tap knockback multiplier
    wtap-multiplier: 1.0

    # Additional knockback bonus when w-tapping
    wtap-bonus: 0.3

  # ----------------------------------------
  # STRAFE SETTINGS (combat strafe)
  # Applied when in active combat with target
  # ----------------------------------------
  strafe:
    # Strafe movement speed (blocks per tick)
    speeds:
      low: 0.16       # Slow, predictable
      medium: 0.20    # Balanced
      high: 0.24      # Fast, hard to hit

    # How often bot changes strafe direction (milliseconds)
    switch-intervals:
      low: 800        # Slow direction changes
      medium: 550     # Moderate changes
      high: 350       # Rapid direction changes

  # ----------------------------------------
  # APPROACH STRAFE SETTINGS
  # Applied when bot is closing distance to target
  # ----------------------------------------
  approach-strafe:
    # Approach strafe speed
    speeds:
      low: 0.10
      medium: 0.13
      high: 0.16

    # Direction change interval while approaching
    switch-intervals:
      low: 700
      medium: 500
      high: 350

    # Chase speed while approaching target
    chase-speeds:
      low: 0.16
      medium: 0.20
      high: 0.24


# ----------------------------------------------------------
#  SHIELD SYSTEM
# ----------------------------------------------------------
shield:
  # How long shield is disabled after axe break (milliseconds)
  # Vanilla Minecraft = 5000ms (5 seconds)
  stun-duration-ms: 5000

  # Angle in degrees where shield can block attacks
  # 180 = front hemisphere, 360 = all directions
  block-angle: 180.0

  # Delay before bot raises shield after detecting threat (ms)
  block-delay-ms: 100


# ----------------------------------------------------------
#  COMMAND SETTINGS
# ----------------------------------------------------------
commands:
  # Permission required for admin commands
  # (/pb reload, /pb inventory, /pb egui)
  admin-permission: "practicebot.admin"

  # Generic permission that grants access to spawn any bot type
  # Individual permissions: practicebot.spawn.normal, practicebot.spawn.cpvp
  spawnbot-permission: "practicebot.spawn"


# ----------------------------------------------------------
#  GUI SETTINGS
# ----------------------------------------------------------
gui:
  # GUI inventory titles (supports color codes with &)
  settings-title: "Practice Bot Settings"
  pvp-settings-title: "Bot PvP Settings"
  bot-inventory-title: "Bot Inventory"
  default-inventory-title: "Default Bot Inventory"

  # Sound effects for GUI interactions
  # Use Minecraft sound names (e.g., BLOCK_NOTE_BLOCK_PLING)
  sounds:
    open: "BLOCK_CHEST_OPEN"
    close: "BLOCK_CHEST_CLOSE"
    click: "UI_BUTTON_CLICK"


# ----------------------------------------------------------
#  DEBUG OPTIONS
# ----------------------------------------------------------
debug:
  # Print detailed AI behavior to console
  verbose-ai: false

  # Print detailed PvP mechanics to console
  verbose-pvp: false


# ----------------------------------------------------------
#  LICENSE
# ----------------------------------------------------------
license:
  # PracticeBot license code
  # Contact support if you need assistance
  code: "YOUR_LICENSE_CODE"


New messages.yml file:

Code:
# ==========================================================
#  PracticeBot - Messages Configuration
#  All messages support color codes with &
#  Placeholders are shown in {brackets}
# ==========================================================

prefix: "&7[&bPracticeBot&7] "

# ==========================================================
#  GENERAL MESSAGES
# ==========================================================

# Shown when console tries to use player-only commands
player-only: "&cThis command can only be used by players."

# Permission denied message
no-permission: "&cYou do not have permission to use this command."

# When player tries to interact with another player's bot
not-your-bot: "&cThis is not your bot."

# Citizens dependency messages
citizens-not-loaded: "&cCitizens is not loaded. Bot spawning is unavailable."
npc-provider-not-selected: "&cNo NPC provider selected. Please wait for initialization."

# ==========================================================
#  BOT MESSAGES
# ==========================================================

bot-spawned: "&aYour Practice Bot has been spawned!"
cpvp-bot-spawned: "&d&lCrystal PvP Bot &aspawned!"
bot-despawned: "&cYour Practice Bot has been despawned."
cpvp-bot-despawned: "&c&lCrystal PvP Bot despawned!"
bot-removed-all: "&aAll practice bots have been removed."
bot-despawned-owner-death: "&cYour Practice Bot has been despawned because it killed you."

open-inventory: "&aOpening bot inventory..."
save-default-inventory: "&aDefault bot inventory saved."

# ==========================================================
#  COMMAND USAGE (shown for invalid subcommands)
# ==========================================================

invalid-usage:
  practicebot: "&eUnknown command. Use &6/pb help &efor a list of commands."
  spawnbot: "&eUsage: &6/spawnbot [normal|cpvp]"

# ==========================================================
#  HELP COMMAND (/practicebot help)
# ==========================================================

help:
  header: "&r &6&lPracticeBot Help"

  # Shown to all players with spawn permission
  spawn-commands:
    - "&e/pb spawn &8- &7Open bot type selection GUI"
    - "&e/pb normal &8- &7Spawn a Normal PvP bot"
    - "&e/pb pvp &8- &7Spawn a Normal PvP bot (alias)"
    - "&e/pb cpvp &8- &7Spawn a Crystal PvP bot"
    - "&e/pb crystal &8- &7Spawn a Crystal PvP bot (alias)"
    - "&e/pb info &8- &7Show plugin information"
    - "&e/pb help &8- &7Show this help menu"

  # Only shown to players with practicebot.admin permission
  admin-commands:
    - ""
    - "&c&lAdmin Commands:"
    - "&e/pb inventory &8- &7Edit default bot inventory"
    - "&e/pb egui &8- &7Open the GUI editor"
    - "&e/pb reload &8- &7Reload all configurations"

  footer: ""

# ==========================================================
#  INFO COMMAND (/practicebot info)
# ==========================================================

info:
  header: "&r &b&lPracticeBot Info"

  lines:
    - ""
    - "&7Plugin: &bPracticeBot &7(Premium)"
    - "&7Author: &f{author}"
    - ""
    - "&7Bot Types: &eNormal PvP&7, &eCrystal PvP"
    - "&7Citizens: {citizens_status}"
    - ""

  footer: ""

  # Status indicators for Citizens
  citizens-ready: "&aReady"
  citizens-not-ready: "&cNot Ready"

# ==========================================================
#  CONFIG MESSAGES
# ==========================================================

config-reloaded: "&aConfiguration reloaded successfully!"

# ==========================================================
#  ERROR MESSAGES
# ==========================================================

errors:
  bot-not-exist: "&cBot does not exist."
  bot-not-spawned: "&cBot is not spawned."
  spawn-cooldown: "&cWait {time}s before spawning another bot."
  trait-failed: "&cFailed to initialize bot. Please try again."
  world-disabled: "&cBot spawning is disabled in this world: &e{world}"

# ==========================================================
#  LICENSE MESSAGES
# ==========================================================

license-invalid: "&cLicense invalid or not registered for this server IP."
license-missing: "&cNo license code configured."
license-valid: "&aLicense verified successfully!"
license-checking: "&7Verifying license..."

# ==========================================================
#  SHIELD MESSAGES
# ==========================================================

shield-blocked: "&7Shield blocked the attack!"
shield-broken: "&cYour bot's shield has been broken!"
shield-disabled: "&eYour bot's shield has been disabled temporarily!"

# ==========================================================
#  GUI EDITOR MESSAGES
#  Used by the /practicebot egui command
#  Note: These use their own styled prefix for consistency
# ==========================================================

gui-editor:
  config-not-found: "&c&l[PracticeBot] &7GUI config not found: &f{gui}"
  gui-not-found: "&c&l[PracticeBot] &7GUI not found."
  configs-reloaded: "&a&l[PracticeBot] &7All GUI configs reloaded!"
  gui-saved: "&a&l[PracticeBot] &7GUI &f{gui} &7saved successfully!"
  gui-reset: "&a&l[PracticeBot] &7GUI &f{gui} &7reset to default!"
  item-saved: "&a&l[PracticeBot] &7Item saved!"
  item-moved: "&a&l[PracticeBot] &7Item moved to slot &f{slot}&7!"
  select-new-slot: "&e&l[PracticeBot] &7Click an empty slot to place the item."
  enter-material: "&e&l[PracticeBot] &7Enter a material name in chat (e.g., DIAMOND, GOLD_INGOT):"
  enter-name: "&e&l[PracticeBot] &7Enter the new item name in chat (use & for colors):"
  enter-lore: "&e&l[PracticeBot] &7Enter a lore line in chat (use & for colors):"
  enter-amount: "&e&l[PracticeBot] &7Enter the item amount (1-64):"
  input-cancelled: "&c&l[PracticeBot] &7Input cancelled."
  material-set: "&a&l[PracticeBot] &7Material set to: &f{material}"
  invalid-material: "&c&l[PracticeBot] &7Invalid material: &f{material}"
  name-set: "&a&l[PracticeBot] &7Item name updated!"
  lore-added: "&a&l[PracticeBot] &7Lore line added!"
  lore-cleared: "&a&l[PracticeBot] &7Lore cleared!"
  amount-set: "&a&l[PracticeBot] &7Amount set to: &f{amount}"
  invalid-amount: "&c&l[PracticeBot] &7Invalid amount. Must be 1-64."

# ==========================================================
#  PLACEHOLDER REFERENCE
#
#  Available placeholders (context-dependent):
#
#  General:
#    {player_name} - Player's display name
#    {version} - Plugin version
#    {author} - Plugin author(s)
#
#  GUI Editor:
#    {gui} - GUI display name
#    {material} - Material name
#    {amount} - Item amount
#    {slot} - Inventory slot number
#
#  Status:
#    {citizens_status} - Citizens ready status
#    {status} - Generic on/off status
# ==========================================================
NEW FEATURES
• /practicebot info - View plugin information and status
• /practicebot help - Show comprehensive help menu
• Improved help system with configurable messages
• Enhanced tab completion with permission awareness
• Admins can now open and manage any bot GUI
• Added rate limiting for safer and more controlled interactions
• Added blast protection toggle support for all armor parts
• Added new Crystal PvP mode
1773512843299.png

• /bot, /spawnbot, and /pb spawn now open the bot type selection GUI for Normal and Crystal PvP bots
1773512822729.png

• Added new commands: /bot cpvp, /bot crystal, /bot normal, /bot pvp, /spawnbot normal, /spawnbot pvp

BUG FIXES
• Fixed /pb reload not properly reloading messages
• Fixed unsafe command registration causing potential crashes
• Fixed help text showing non-existent commands
• Fixed console players getting wrong error message
• Fixed CPvP bots targeting or hitting spectator players
• Fixed armor trims not syncing correctly on CPvP bots

IMPROVEMENTS
• Refactored command system for better maintainability
• Centralized permission checking logic
• Cleaner code architecture and reduced duplication
• Modes are now more strictly regulated for better consistency
• Bots no longer activate while the settings menu is open
• Improved Normal mode GUI sound behavior for a cleaner feel
• Updated PvP combat settings menu

CONFIGURATION
• Updated messages.yml with new command messages
• Added info and help message customization
• Enhanced config.yml with detailed comments
• Removed references to unimplemented features
• Updated bot_inventory.yml
• Updated pvp_settings.yml
• Updated settings_menu.yml

TECHNICAL
• Fixed GUI config initialization order
• Improved MessageManager with reload support
• Added list message support for multi-line content
• Added protections against rapid repeated actions

Tested on 1.21.11 Paper.

If you have nay problem with GUI, please delete old changed yml files that is listed in changelog.
Added MainHand and OffHand Configurations in Bot Inventory.
Now you can replace bot sword with any sword and change totem count in bot inventory.


If you already had plugin, make sure you have deleted gui/bot_inventory.yml to update new inventory.
1772063719667.png
PracticeBot v0.8

The ultimate PvP practice companion!

New Features

🎨 Full GUI Customization System
  • In-game GUI Editor - /practicebot egui
  • Move, swap, and edit items
  • Change materials, names, lore, glow effects
  • Individual lore line management
  • Reset to default with one click​
1.1.gif
2.gif

3.gif


🛡️ Shield Hand Toggle
  • Hold shield in main hand or off hand
  • Left-Click: Toggle on/off
  • Right-Click: Switch hand

📦 Redesigned Bot Inventory
  • Separate armor material toggle
  • Independent leggings enchant toggle
  • Independent leggings material toggle
  • Armor trims in /pbadmin inventory
4.gif
5.gif


Bug Fixes

🔄 NPC Persistence Fix
NPCs no longer persist after server restart. All bots are properly cleaned up.

🚫 Removed Fancy NPC
Removed experimental feature causing compatibility issues.



New Config Files

Location: plugins/PracticeBot/gui/
1769774577845.png


GUI Editor Guide

Hotbar Controls:
  • Slot 1: Back
  • Slot 3: Cancel Move
  • Slot 5: Save
  • Slot 9: Reset

Item Editing:
  • Click to select and move
  • Shift+Right-Click to edit
  • Left-Click lore line to edit
  • Right-Click lore line to delete
  • Shift+Click lore line to insert above



Thank you for using PracticeBot!

⭐ Please leave a review if you enjoy the plugin! ⭐
  • GUI Fixes — Resolved multiple interface bugs and improved overall stability
  • Bot Statistics — Bot kills and deaths no longer affect player statistics
  • Bot Swimming — Bots can now properly swim, chase players in water, and climb out onto land
  • Offhand Inventory — Fixed issue where players could take stacked items (e.g., 99 Totems) from bot inventory
  • Offhand Persistence — Offhand items no longer disappear when toggling Shield Mode on/off
1.21.11 SUPPORT!
Buy a license now
$15.99
EULA
Standard EULA
Use on any projects you own with attribution
Support
Standard
Includes:
Download the resource
Access new updates
Support from the creator
Support duration
1 month
3 months
+ $9.99
Lifetime
+ $14.99
Extras
SorceCode
+ $249.99
Share and earn
Refer this resource and earn a 10% commission.
8,333 Views
33 Purchases
35 Downloads
Dec 4, 2025 Published
Jun 23, 2026 Updated
5.00 star(s)
Average rating (4)
610.7 KB File size
Open source
  1. No
DRM-free
  1. No
Unobfuscated
  1. No
Type
  1. Gameplay
  1. GUI
  1. Fun
Game mode
  1. Practice
Supported software
  1. Bukkit
  1. Spigot
  1. Paper
  1. Purpur
Supported versions
  1. 1.21.11
  1. 1.21.8
  1. 1.21.5
  1. 1.21.4
  1. 1.21.2
  1. 1.21
Supported languages
  1. English
Creator
Recommended for you
This plugin resets kit in FFA after killing players.
Not yet rated
5 purchases
GUI kits, vouchers, Vault prices, starter auto-kits, PAPI, SQL storage and importers.
Not yet rated
2 purchases
Secure premium & cracked authentication for Paper, Folia, Velocity and BungeeCord networks.
Not yet rated
0 purchases
Not yet rated
3 purchases
Share and earn
Refer this resource and earn a 10% commission.
8,333 Views
33 Purchases
35 Downloads
Dec 4, 2025 Published
Jun 23, 2026 Updated
5.00 star(s)
Average rating (4)
610.7 KB File size
Open source
  1. No
DRM-free
  1. No
Unobfuscated
  1. No
Type
  1. Gameplay
  1. GUI
  1. Fun
Game mode
  1. Practice
Supported software
  1. Bukkit
  1. Spigot
  1. Paper
  1. Purpur
Supported versions
  1. 1.21.11
  1. 1.21.8
  1. 1.21.5
  1. 1.21.4
  1. 1.21.2
  1. 1.21
Supported languages
  1. English
Creator
Recommended for you
This plugin resets kit in FFA after killing players.
Not yet rated
5 purchases
GUI kits, vouchers, Vault prices, starter auto-kits, PAPI, SQL storage and importers.
Not yet rated
2 purchases
Secure premium & cracked authentication for Paper, Folia, Velocity and BungeeCord networks.
Not yet rated
0 purchases
Not yet rated
3 purchases
Top