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, andDUMMYtemplate bot types
Command Structure
Player Commands
/pb/practicebot/spawnbot normal/spawnbot crystal
Admin Commands
/pbadmin/practicebot-admin
Template Commands
All template/admin spawn commands work from console, command blocks, Skript, and other plugin-driven execution.
/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>
New Template System
Templates now live inbot_templates.ymland support:
- Template name
- NPC display name
- Skin
- Bot type:
NORMAL,CPVP,DUMMY- Target binding:
REQUIREDorNONE- Death mode:
REMOVEorRESPAWN- 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
0totems for no offhand totem usage- Separate
helmet,chestplate,leggings, andbootsmaterials- Armor enchant cycle:
Protection,Blast Protection,None- Any trim pattern/material directly from the cursor
Supported armor material toggles:
leathercoppergoldchainirondiamondnetherite
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 awarm-up-secondsoption.
Example:
0= attack immediately3= 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.spawntemplatepracticebot.admin.despawnpracticebot.admin.template.createpracticebot.admin.template.editpracticebot.admin.template.cancelpracticebot.admin.template.delete
Compatibility
- Existing
/pband/practicebotplayer flow stays intact- Existing
/spawnbotplayer 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 asrgb:R,G,B
Example:rgb:85,255,85 This is bright green!
Bukkit Hex Format — Standard&x&R&R&G&G&B&Bformat
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
![]()
• /bot, /spawnbot, and /pb spawn now open the bot type selection GUI for Normal and Crystal PvP bots
![]()
• 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.
![]()
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![]()
![]()
![]()
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
![]()
![]()
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/
![]()
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!
1.21.11 SUPPORT!
- 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
