Kit Setup
How to create, update, and manage kits that players use during matches.
Creating a Kit
- Equip your full layout: place the items in your inventory and hotbar, wear your armor, and assign offhand items.
- Run the command:
/kit create KitNameto save your current inventory configuration. - (Optional) Hold the item you want to represent the kit in selection GUIs and run:
/kit seticon KitName
NoDebuff and nodebuff are handled as two distinct kit profiles.
Updating an Existing Kit
To overwrite a kit's item slots, arrange the new layout in your inventory and execute:
/kit setinv KitName
To modify only the GUI icon representation:
# Hold the new icon item in your main hand, then:
/kit seticon KitName
Build Mode (Kit and Arena Must Match)
Build mode marks whether a kit is used for block-building matches. Set it with:
/kit build <name> <true|false>
This must match the linked arena's build mode (/arena build). If they differ, matchmaking ignores the arena and players may see No arenas available for this kit.
- Build kit + build arena:
/kit build Bridge trueand/arena build BridgeArena true - Non-build kit + non-build arena:
/kit build NoDebuff falseand/arena build Arena1 false
/kit info <name> to check the kit's build mode. Setting /kit build <name> false also clears the block whitelist.
Build-Compatible Kits (Block Whitelist)
For build kits, you can optionally restrict which block types players may place and break:
/kit build Bridge true
# Hold the whitelist block (e.g. sandstone, glass) and run:
/kit allowblock Bridge
# Repeat for each block type you wish to whitelist
/kit allowblock also enables build mode automatically. If the whitelist is empty, any block can be placed in a build-enabled arena. If blocks are whitelisted, only those types are allowed during combat.
FLINT_AND_STEEL, FIRE_CHARGE, FIRE, SOUL_FIRE, or TNT also permits ignition. This applies to both duels and FFA build arenas.
Kit Auto-Ignition (TNT & Creepers)
Enable automatic ignition for kit matches using:
/kit autoignite <name> [true|false]
When auto-ignite is enabled for a kit:
- TNT Blocks: Placing a TNT block instantly primes it into a live
TNTPrimedentity (80 ticks fuse countdown, primed sound, and damage attributed directly to the placing player). - Creeper Spawn Eggs: Spawning a Creeper instantly ignites it into its white-flashing explosion countdown, and awards kill credit to the spawner if the blast eliminates an opponent.
No Fall Damage & Crafting Settings
/kit nofalldamage <name> [true|false]: Toggles whether players take fall damage during matches using this kit./kit crafttable <name>: Toggles crafting table usability during matches with this kit./kit bedwars <name> [true|false]: Enables BedFight mechanics (also auto-enables build) for this kit./kit nohunger <name> [true|false]: Toggles hunger suppression./kit bridge <name> [true|false]: Toggles Bridge scoring mechanics./kit disablenaturalregen <name> [true|false]: Disables natural health regeneration./kit nohealthindicator <name> [true|false]: Hides below-name health indicator and refreshes nametags./kit uhcgaps | uhcgaps <name> [true|false]: Toggles UHC gap apple handling.
BedFight Kits (How Matches Play)
Turn any kit into a BedFight kit with /kit bedwars <name> [true|false] (this also auto-enables build mode for the kit). The master switch is bedfight.enabled; names listed under bedfight.kits get their kit flag set automatically on enable. See Configuration Files for the full bedfight.* block and Advancements for the BED_* triggers.
- Beds: both team beds are scanned around the spawns when the match starts. Breaking your own bed is blocked and beds are immune to explosions.
- Fireballs: right-click to launch (consume on use,
fireball.cooldown-secondscooldown). Kills from impact or knockback count as fireball kills. - TNT: placed TNT auto-primes when
tnt.auto-igniteis true (fuse-ticks: 80default). - Deaths: dying while your bed is alive starts a respawn countdown (
respawn-countdown-time: 3) with temporary invulnerability. Dying after your bed is destroyed eliminates you. Win by eliminating the whole enemy team; winning after losing your own bed counts as a comeback. - Void: falling below the arena void level triggers the void watcher (async poll, 2-second debounce per player).
- Commands:
bedfight.bed-break-commandsruns console commands on every bed break (%player%,%team%,%enemyTeam%). Party FFA matches never run BedFight logic.
Bridge Kits (How Matches Play)
Turn any kit into a Bridge kit with /kit bridge <name> [true|false]. Unlike BedFight there is no bridge.kits list: a duel becomes a Bridge duel only when the kit flag is on. See Configuration Files for the full bridge.* block and Advancements for the BRIDGE_* triggers.
- Scoring: leap into the enemy-side portal to score (checked in an 8-block radius with a center-plane fallback). Scoring freezes the match and ends the round; the registry is reset for the next round.
- Respawns: deaths and void falls respawn after
respawn-countdown-time: 3inside a spawn cage with movement locked (lock-to-spawn-during-countdown,spawn-cage) and temporary invulnerability. - Bow cooldown: bridge bow shots apply
bow-cooldown-seconds: 4.0shown on the XP bar. - Void: the void watcher ignores portal blocks so goal areas never cause false void kills.
- Shutouts: winning 5-0 without conceding fires shutout logic (used by Flawless Defense and Clean Sweep style advancements).
Kit Editor GUI (For Players)
Players can customize and rearrange item placements within their personal copy of a kit layout. This does not alter the base kit template generated by the administrator. Open the layout editor using:
/kiteditor # Opens the kit selector GUI
/kiteditor NoDebuff # Directly launches the editor workspace for NoDebuff
This editor provides a drag-and-drop workspace where players can save custom layouts for matchmaking queues.
VIP Preferences inside the Kit Editor
- Armor Trimmer: Customizes patterns on armor pieces (Requires
shyamduels.practice.armortrimmer.use). - Shield Customizer: Applies layers and banner pattern options to shields (Requires
shyamduels.practice.shieldcustomizer.use). - Shulker Box Editor: Edits the items inside shulker boxes (Requires
shyamduels.practice.shulkereditor.use). - Virtual Enchanting: Applies enchants to gear (Requires
shyamduels.practice.enchanttable.use).
All virtual practice features can be inherited by granting the parent permission node shyamduels.vip.
Custom Kits Builder
The Custom Kits builder system enables players to assemble personalized kits from category selections. It matches players using base configs defined in the configuration files.
- Players build customized configurations via
/kitcreator. - Players choose or modify their custom profiles using
/customkits. - Admins configure GUI categories and items via
/shyamduels customkits edit-category.
Exhaustive Kit Setup Command Reference
Below is a complete reference guide of commands for registering, editing, and deleting kit configurations (requires shyamduels.admin):
| Command | Syntax / Parameters | Functional Behavior |
|---|---|---|
/kit create |
/kit create <name> |
Saves your current inventory, armor slots, offhand, and active effects as a new kit profile. |
/kit delete |
/kit delete <name> |
Deletes the kit profile, clears linked arenas, and removes player customized layouts. |
/kit setinv |
/kit setinv <name> |
Overwrites the kit's inventory items and armor layout to match your current inventory contents. |
/kit seticon |
/kit seticon <name> |
Configures the GUI selection icon to your held item. |
/kit allowblock |
/kit allowblock <name> |
Whitelists your held block material and enables build mode for the kit. |
/kit removeblock |
/kit removeblock <name> |
Removes your held block material from the build whitelist. Disables build mode when the list is empty. |
/kit build |
/kit build <name> <true/false> |
Enables or disables build mode for the kit. Must match the linked arena (/arena build). false clears the block whitelist. |
/kit setdisplayname |
/kit setdisplayname <name> <displayname> |
Configures the GUI display name of the kit (supports Kyori MiniMessage formatting). |
/kit setitem |
/kit setitem <name> |
Sets the kit icon to your held item (including its display name) - the display name syncs from the held item. |
/kit list |
/kit list |
Lists all registered kit configurations. |
/kit info |
/kit info <name> |
Displays details about the kit, including inventory slots and whitelisted block list. |
/kit matchstartpots |
enable|disable|scan|list <name> |
Controls match-start auto-potion scanning for a kit. Automatically splashes kit buffs (Speed II, Fire Resistance, etc.) on countdown start without consuming items from player inventory (see match-start-potions.take-from-inventory in config.yml). |
/kit queuerounds |
/kit queuerounds <name> <rounds> |
Sets default round count when this kit is queued. |
/kit kitroom |
/kit kitroom <name> |
Toggles whether this kit uses the Kit Room feature (players can grab extra items from a virtual chest during practice). Prints the current list of Kit Room kits. |
/kit give |
/kit give <name> <player> |
Applies a kit to a player's inventory. |
/kit load |
/kit load <name> |
Loads the kit into your inventory for editing. |
/kit deleteeditedkits |
/kit deleteeditedkits <name> |
Clears all player-edited layouts saved for this kit. |
/kit setsaturation |
/kit setsaturation <name> <value> |
Sets food saturation applied when the kit is given. |
/kit autoignite |
/kit autoignite <name> [true|false] |
Toggles or sets automatic TNT priming and Creeper ignition for matches using this kit. |
/kit nofalldamage |
/kit nofalldamage <name> [true|false] |
Toggles or sets fall damage immunity for players fighting with this kit. |
/kit crafttable |
/kit crafttable <name> |
Toggles crafting table usability during matches using this kit. |
/kit bedwars |
/kit bedwars <name> [true|false] |
Toggles BedWars mechanics for this kit (auto-enables build when enabling). Requires kit build flag. |
/kit nohunger |
/kit nohunger <name> [true|false] |
Toggles hunger drain suppression during matches. |
/kit bridge |
/kit bridge <name> [true|false] |
Toggles Bridge scoring/respawn mechanics for this kit. |
/kit disablenaturalregen |
/kit disablenaturalregen <name> [true|false] |
Toggles natural health regeneration suppression (food-based healing). |
/kit nohealthindicator |
/kit nohealthindicator <name> [true|false] |
Hides below-name health displays for this kit; refreshes nametags. |
/kit uhcGaps | uhcgaps |
/kit uhcgaps <name> [true|false] |
Toggles UHC golden-apple gap handling for this kit. |
Kit Categories System
An enterprise-grade hierarchical categorization and auto-pagination system designed to declutter large kit rosters, streamline matchmaking navigation, and provide a polished user experience across all kit-related menus.
1. Architectural Overview & Design Philosophy
Modern competitive PvP servers often feature dozens of distinct game modes and loadouts (such as NoDebuff, Debuff, Gapple, Combo, Sumo, BuildUHC, Boxing, FinalUHC, BedFight, Bridge, and Bow). Presenting 30+ kits in a single unorganized menu overwhelms players and impairs navigation speed.
The Kit Category System introduces a structured Two-Tier Hierarchy:
- Tier 1 (Root Menu): Displays top-level Category Items (e.g.
PotPvP,Sword PvP,UHC & Rod,Modern Combat) alongside any remaining Uncategorized Kits. - Tier 2 (Category Sub-Menu): Clicking a category item opens a dedicated sub-menu rendering only the kits assigned to that specific category, equipped with live queue statistics, sub-menu pagination, and a context-aware
◀ BACKnavigation button.
plugins/ShyamDuels/categories.yml starts completely empty (categories: {}). When no categories are configured, all GUIs throughout the plugin automatically render in standard 1-level mode with zero overhead or configuration changes required.
2. Comprehensive GUI Integrations
The Category System is deeply integrated across all player-facing and administrative interfaces in ShyamDuels:
| Interface | Trigger Command | Category Behavior & Features |
|---|---|---|
| Matchmaking Queue GUI | /queue, /duels |
|
| Direct Duel Kit Selection | /duel <player>, /1v1 |
|
| Kit Editor Kit Picker | /kiteditor (aliases: /editkit, /kitedit) |
|
| Party Duel & Battle Selection | /party duel, /party vs |
|
Which Sub-GUI Opens & Where to Edit Its Layout
When a player clicks a category item, a dedicated sub-menu opens displaying the kits linked to that category. You can customize the sub-menu layout either globally via the menu YAML files or per-category directly inside each category's own YAML file:
| Menu Trigger | Sub-GUI Opened on Category Click | Global Layout File | Per-Category Customization File |
|---|---|---|---|
/queue |
Category Queue Sub-Menu | plugins/ShyamDuels/menus/queue-kit.yml |
plugins/ShyamDuels/categories/<category>.yml |
/duel <player> |
Category Duel Sub-Menu | plugins/ShyamDuels/menus/duel.yml |
plugins/ShyamDuels/categories/<category>.yml |
/kiteditor |
Category Kit Picker | plugins/ShyamDuels/menus/kiteditor.yml |
plugins/ShyamDuels/categories/<category>.yml |
/party duel |
Party Category Selection | plugins/ShyamDuels/menus/public-kits.yml |
plugins/ShyamDuels/categories/<category>.yml |
| Category Display & Details | Category Icons & Details | - | plugins/ShyamDuels/categories/<category>.yml |
plugins/ShyamDuels/categories/potpvp.yml). You can customize the icon, title, lore, linked kits, and optionally specify unique sub-menu settings (custom title, custom GUI size, custom glass border color, and custom slots) for that specific category!
How to Toggle Between Global and Per-Category Layout
You can easily switch any category between the Global Default Layout (configured in menus/queue-kit.yml and menus/duel.yml) and a Per-Category Custom Layout in two ways:
Method 1: The sub-menu.enabled Toggle (Recommended)
Inside plugins/ShyamDuels/categories/<category_id>.yml, use the enabled boolean:
A. To use the Global Default Layout:
yaml# Global Mode: Inherits global theme from menus/queue-kit.yml
sub-menu:
enabled: false
B. To use a Custom Per-Category Layout:
yaml# Per-Category Mode: Activates unique design overrides for this category
sub-menu:
enabled: true
title: "<gradient:#FF1D54:#FF7B00>PotPvP Queue</gradient> &8| &7<mode>"
size: 54
border: RED_STAINED_GLASS_PANE
kit-slots: [10, 11, 12, 13, 14, 15, 16]
Method 2: Omit or Include the sub-menu: Section
- Global Mode: Simply do not include the
sub-menu:section in the category's YAML file. It will automatically inherit all global styles. - Custom Mode: Add the
sub-menu:section whenever you want custom borders, sizes, or slots for that category.
/kit category reload
3. Auto-Pagination Engine
Both root menus and category sub-menus are powered by an intelligent, mathematical pagination engine (GuiPagination):
- Dynamic Page Calculation: Computes
totalPages = ceil(itemCount / contentSlotsPerPage)on the fly based on the target menu's configured slot array. - Safe Page Clamping: Automatically bounds the requested page between
0andtotalPages - 1, preventing out-of-bounds GUI exceptions. - Adaptive Navigation Bar:
- When total pages > 1, renders Previous Page (
◀), Page Information indicator (Page X of Y), and Next Page (▶) controls in their configured slots. - When inside a category sub-menu, automatically injects a
◀ BACKbutton allowing players to instantly return to the root category selection.
- When total pages > 1, renders Previous Page (
4. Hierarchical Depth & Sub-Category Support
A frequent question among server administrators is whether categories can contain sub-categories:
- The 2-Level Standard: In competitive Minecraft PvP, player UX research overwhelmingly indicates that a 2-Tier Hierarchy (Root Categories → Kits) provides the highest retention and lowest bounce rate. Players can navigate to any kit within exactly two clicks (Click Category → Click Kit to Queue).
- Sub-Category Compatibility: The underlying
KitCategoryarchitecture supports arbitrary hierarchical grouping. If your network requires multi-level nested folders (e.g.Competitive→PotPvP→NoDebuff), each category ID acts as a distinct routing node.
5. Step-by-Step: Creating & Designing Category UI
Follow these steps to create, style, and populate your kit categories with custom icons, colors, and live counter lores:
-
Create the Category:
Execute the creation command specifying a unique identifier key and initial display name:/kit category create potpvp FF5555&lPotPvP &7Kits -
Set the Category GUI Icon:
Hold any item in your main hand (including Nexo 3D custom items, items with CustomModelData, or custom heads) and execute:/kit category seticon potpvp -
Style the Display Name (Gradients & Hex Colors):
You can update the category title at any time using MiniMessage tags or Hex codes:/kit category setname potpvp <gradient:#FF1D54:#FF7B00><b>PotPvP Modes</b></gradient> -
Link Kits to the Category:
Add existing registered kits into this category:/kit category addkit potpvp NoDebuff /kit category addkit potpvp Debuff /kit category addkit potpvp Gapple -
Customize Lore & UI Appearance in
categories.yml:
Openplugins/ShyamDuels/categories.ymlto fine-tune lore lines, add live counter placeholders, and specify fixed GUI slots:yaml
categories: potpvp: display-name: "<gradient:#FF1D54:#FF7B00><b>PotPvP Modes</b></gradient>" icon: material: SPLASH_POTION custom-model-data: 1001 # nexo: "potpvp_icon" slot: 11 # Specific slot in GUI (or -1 for automatic placement) lore: - "&7Competitive potion combat modes." - "" - "&fKits Included: &e<kits_count>" - "&fQueued: &a<queued> &7| &fPlaying: &b<playing>" - "" - "&eClick to browse kits!" kits: - "nodebuff" - "debuff" - "gapple" -
Reload and Verify:
Apply configuration changes instantly in-game without rebooting:
Open/kit category reload/queueor/duel <player>to test your new category layout.
5. How Kit and Category Ordering Works (Replacing data/order.yml)
You can easily control how normal kits, categories, and glass panes look in every GUI using clean YAML files:
| What You Want to Do | How to Configure It | Example |
|---|---|---|
| Set Category Slot in Main Menus | Set slot: <number> in categories/<id>.yml or use /kit category setslot. Use -1 for automatic order. |
/kit category setslot potpvp 11 |
| Order Kits Inside a Category | The list order under kits: inside categories/<id>.yml directly controls the slot order inside the sub-menu. |
yaml |
| Normal (Uncategorized) Kits (Hybrid Mode) | Kits not assigned to any category appear directly in the main menu alongside category folders. Clicking a normal kit starts the match immediately without opening a sub-menu. | Main Menu: [PotPvP Category] [Sumo (Normal Kit)] |
| Alternating Slots (Kit → Glass Pane → Kit) | In menus/queue-kit.yml (or in category sub-menu.kit-slots), list only alternate slot numbers. Extra slots will stay as glass panes! |
yaml |
1-Click Migration from data/order.yml |
Run /kit category importorder <id> [name]. It reads your old order from data/order.yml and creates a category with that exact kit order. |
/kit category importorder ranked Ranked Kits |
6. In-Game Admin Command Reference
All category administration is managed under the base command /kit category (or aliases /kits category, /shyamkits category). All arguments feature intelligent context-aware tab completion:
| Command Syntax | Permission | Description & Examples |
|---|---|---|
/kit category create <id> <displayName> |
shyamduels.admin |
Creates a new category. Display names support MiniMessage tags, Hex codes (RRGGBB), and legacy color codes (&c).Example: /kit category create potpvp &c&lPotPvP &7Kits
|
/kit category delete <category> |
shyamduels.admin |
Deletes the specified category. Any kits linked to the category are safely detached and return to uncategorized status without data loss. Example: /kit category delete potpvp
|
/kit category setname <category> <displayName> (alias: rename) |
shyamduels.admin |
Renames an existing category's formatted display title. Example: /kit category setname potpvp <gradient:#FF1D54:#FF7B00><b>Ranked PotPvP</b></gradient>
|
/kit category seticon <category> |
shyamduels.admin |
Sets the category icon to the item you are holding in your hand (supports custom 3D models). Example: Hold a potion and type /kit category seticon potpvp
|
/kit category setpermission <category> <perm|none> (alias: setperm) |
shyamduels.admin |
Sets a permission required for players to open this category in Queue, Duel, Kit Editor, and Party menus. Use none to remove permission requirement.Example: /kit category setpermission potpvp shyamduels.category.potpvp
|
/kit category addkit <category> <kit> |
shyamduels.admin |
Adds a kit into a category. Example: /kit category addkit potpvp NoDebuff
|
/kit category removekit <category> <kit> |
shyamduels.admin |
Removes a kit from a category. Example: /kit category removekit potpvp NoDebuff
|
/kit category setslot <category> <slot> |
shyamduels.admin |
Pins a category to an exact slot in the main selection GUI (use -1 for auto placement).Example: /kit category setslot potpvp 11
|
/kit category importorder <category> [display] |
shyamduels.admin |
Automatically migrates your existing kit order from data/order.yml into a new category file.Example: /kit category importorder ranked Ranked Kits
|
/kit category list |
shyamduels.admin |
Shows all categories and their kits in chat. |
/kit category reload |
shyamduels.admin |
Reloads all category files instantly without restarting server. |
/kit category help |
shyamduels.admin |
Shows category command help in chat. |
7. Per-Category Configuration File Structure (categories/<id>.yml)
Each category is saved in its own file under plugins/ShyamDuels/categories/<id>.yml. Below is an easy example configuration:
yaml# ==============================================================================
# Category Configuration: potpvp.yml
# Path: plugins/ShyamDuels/categories/potpvp.yml
# ==============================================================================
id: "potpvp"
display-name: "<gradient:#FF1D54:#FF7B00><b>PotPvP Modes</b></gradient>"
slot: 11 # Slot in main menu (-1 for auto placement)
# Optional Permission: Players need this permission to open this category (leave blank for everyone)
permission: "shyamduels.category.potpvp"
# Category Icon (supports Nexo 3D items, CustomModelData, or regular items):
icon:
material: SPLASH_POTION
custom-model-data: 1001
# nexo: "potpvp_icon"
# item-model: "minecraft:custom_potion"
# Lore shown on the category item in the menu:
lore:
- "&7Competitive potion fighting modes."
- ""
- "&fKits: &e<kits_count>"
- "&fQueued: &a<queued> &7| &fPlaying: &b<playing>"
- ""
- "&eClick to view kits!"
# List of kits inside this category:
kits:
- "NoDebuff"
- "Debuff"
- "Gapple"
# Optional Custom Sub-Menu Design (leave out to use default menus/queue-kit.yml):
sub-menu:
enabled: true
title: "<gradient:#FF1D54:#FF7B00>PotPvP Queue</gradient> &8| &7<mode>"
size: 54
border: RED_STAINED_GLASS_PANE
kit-slots:
- 10
- 11
- 12
- 13
- 14
- 15
- 16
8. Supported Placeholders in Category Lore
The following dynamic placeholders are evaluated at runtime when category items are rendered in menus:
| Placeholder | Replacement Value | Example Output |
|---|---|---|
<category_name>, <name> |
The formatted display name of the category. | PotPvP Kits |
<category_id>, <id> |
The internal YAML identifier key of the category. | potpvp |
<kits_count>, <count> |
The total count of registered public kits in the category. | 3 |
<queued> |
The live sum of all players queued across all kits in this category. | 12 |
<playing> |
The live sum of all players actively in matches across all kits in this category. | 28 |
<opponent> |
The opponent player's name (active in Duel Kit Selection). | Player123 |
<rounds> |
The currently selected duel round count (active in Duel Kit Selection). | 3 |