Minecraft Configuration Specialist - Technical Submission

Lootbox & Boss
Encounter System

Technical documentation for the RIVRS case study: a key purchase interface, a weighted crate system, and a custom boss encounter named Ace - built on top of DeluxeMenus, CrazyCrates, and MythicMobs with a consistent infernal visual palette throughout the system.

Candidate
Dwiky
Environment
PaperMC 1.21.x (server build 26.1.2)
Server Ref
RIVRS - Test Configuration 2026
Palette
#FF6B35 · #FFB627 · #C1272D · #1B1A20
§ 01

Executive Summary

A summary of the goals, scope, and technical philosophy behind this project - written for reviewers who want to understand the full context before diving into configuration details.

Project Objectives
Build an end-to-end RPG module (purchase → lootbox → boss encounter) on top of a PaperMC plugin stack connected through a single economy flow, while demonstrating the ability to translate recruiter requirements into production-level configuration.
Scope
Covers the three required modules (Purchase Interface, Loot Box, Boss Entity) along with complete configuration documentation based on the actual files in the My Server project. The web dashboard feature and further integration via RIVRSBridge are positioned as an additional foundation.
Architecture Philosophy
Each plugin is chosen based on a single responsibility and connected via placeholders or command bridges, not source code modification. This principle keeps the system modular, easy to diagnose per component, and safe to reload without stopping the server.
Technical Decisions
Economy validation is delegated to DeluxeMenus' built-in click_requirement instead of a custom command, lootbox drop rates are aligned directly with the requested percentages, and the boss is designed around timer triggers and a WorldGuard region so its behavior stays deterministic when retested.
Assignment Goals
Demonstrate production-level plugin configuration competence - custom GUI, weighted reward system, custom boss skills - along with the ability to document technical decisions professionally.
Final Deliverables
This document, the server archive (plugins, configs, resource pack), a live demo server directly accessible for verification, and a gallery of screenshots and videos attached to the final submission.
§ 02

Table of Contents

A complete map of this document. Quick navigation is also available in the left sidebar.

§ 03

Live Demo

Reviewers can connect directly to the running demonstration server to verify the configuration described in this document, without needing to deploy the project archive first.

Minecraft Java
mark-webpage.gl.joinmc.link
Connect via Multiplayer → Add Server on the Java 1.21.x client.
Minecraft Bedrock
mark-webpage.gl.at.ply.gg:12177
A separate port for the Bedrock client, bridged via Geyser/Floodgate.
Bedrock - Alternative
147.185.221.225:12177
Direct IP:port as a fallback if the domain above is unreachable.
Note: all main modules in this documentation are aligned with the actual configuration in the My Server project. Verification of in-game behavior still follows testing on the live server.
§ 04

Project Resources

The complete project archive is provided for technical review needs beyond the live demo - allowing reviewers to inspect the configuration files directly.

Server Package - Full Project Archive
ZIP · plugins, configs, resource pack, custom models, custom items, menus, lootbox & boss configs, documentation
Download Server Package

This archive contains the server project exactly as used during development, including the entire plugins/ and configs/ folders, the ItemsAdder resource pack, custom ModelEngine models, custom item definitions, menu configuration, lootbox and boss configuration, and a copy of this documentation. The archive is intended specifically for technical review purposes, not for direct production deployment.

§ 05

Server Environment

Complete specification of the environment where all modules were developed and tested.

Minecraft Version
1.21.x
Paper Build
26.1.2
Java Version
Java 21 (LTS)
Operating System
Windows 11
Memory Allocation
Follows the active server runtime (not fixed in server.properties)
Plugin Count
21 plugins listed in the documentation
Premium Plugin Count
2 (MythicMobs Premium, ModelEngine)
Custom Plugin Count
1 (RIVRSBridge)
Server Type
PaperMC (Spigot API compatible)
Cross Platform
Java + Bedrock
Bedrock Support
Active - Geyser + Floodgate
Network
Domain configuration + direct IP available
§ 06

Project Structure

Server directory structure, simplified to highlight the files relevant to the three assignment modules.

# Server directory structure (condensed)
RIVRS-Server/
├── plugins/
│   ├── DeluxeMenus/
│   │   ├── config.yml
│   │   └── gui_menus/
│   │       ├── lootbox_shop.yml
│   │       ├── lootbox_confirm.yml
│   │       └── boss_menu.yml
│   ├── CrazyCrates/
│   │   └── crates/
│   │       └── Lootbox.yml
│   ├── MythicMobs/
│   │   ├── mobs/
│   │   │   └── Ace.yml
│   │   ├── skills/
│   │   │   └── AceSkills.yml
│   │   └── items/
│   │       └── AceItems.yml
│   ├── ModelEngine/
│   │   └── models/
│   │       └── ace.emo.bbmodel
│   ├── ItemsAdder/
│   │   └── contents/rivrs/
│   ├── RIVRSBridge/
│   │   ├── config.yml
│   │   └── messages.yml
│   ├── LuckPerms/
│   ├── WorldGuard/
│   └── ... (other plugins - see Plugin Reference)
├── configs/
│   └── backup-yaml/          # config snapshot before major changes
├── world/
│   └── (WorldGuard region: arena_ace)
└── index.php                  # this document
  • plugins/ - all binaries and default plugin configuration, one subfolder per plugin.
  • configs/backup-yaml/ - manual snapshot before major structural changes, used for quick rollback during testing.
  • world/ - the main world, including the WorldGuard region arena_ace that bounds the boss fight area.
  • index.php - the main documentation at the project root, displaying a configuration summary on the web.
§ 07

Architecture Summary

All three systems are connected within a single economy flow: players buy a key, open a crate, and potentially gain access to the boss fight as the top reward. The diagram below breaks this flow down from several technical angles.

Primary Flow

Step 1
Boutique GUI
DeluxeMenus
Step 2
Buy Key ($100)
Vault / Essentials
Step 3
Open Lootbox
CrazyCrates
Step 4
Reward / Boss Egg
MythicMobs

Plugin Dependency Graph

Core API
Vault · PlaceholderAPI
Foundation layer
Feature Plugins
DeluxeMenus · CrazyCrates · MythicMobs
Consume core API
Asset Providers
ModelEngine · ItemsAdder
Custom visuals

Economy Flow

Check
Vault Balance Check
click_requirement
Deduct
EssentialsX Deduct $100
left_click_commands
Grant
CrazyCrates Give Key
console command

Gameplay Flow

Spawn
Player Spawn
EssentialsX Spawn
Guide
NPC Interaction
Citizens
Shop
Boutique & Lootbox
DeluxeMenus / CrazyCrates
Combat
Boss Arena
WorldGuard region

Configuration Flow

Edit
Edit File YAML
configs/
Reload
/cc reload · /mm reload
Hot reload
Verify
In-Game Verification
Manual test
Snapshot
Backup to configs/backup-yaml/
Manual versioning

Boss System Flow

Trigger
Boss Egg Used
CrazyCrates reward
Spawn
Mob Spawn + Model Bind
MythicMobs / ModelEngine
Combat
Skill Timer Loop
~onTimer
Resolve
Death Trigger + Drop
~onDeath
§ 08 - Module 01

Purchase Interface

DeluxeMenus · Vault · PlaceholderAPI

Boutique - Buy Lootbox Key

File: gui_menus/lootbox_shop.yml, gui_menus/lootbox_confirm.yml
Done

The main menu shows the Lootbox Key icon in the center slot, an info button (hover lore) explaining the crate mechanics, and a buy button that opens a separate confirmation screen before the transaction is executed.

The snippet below is read directly from the actual configuration file at configs/DeluxeMenus/gui_menus/ - not manually written in this document, so it always stays in sync with the file actually used by the server.

lootbox_shop.yml - Boutique Menu

register_command: true
update_interval: 20

menu_title: '&#FF7A00&lINFERNAL &#FFD700&lLOOTBOX'

open_command:
  - lootbox

size: 27

items:

  border:
    material: BLACK_STAINED_GLASS_PANE
    display_name: " "
    slots:
      - 0-9
      - 17-26

  left_border:
    material: GRAY_STAINED_GLASS_PANE
    display_name: " "
    slots:
      - 18

  right_border:
    material: GRAY_STAINED_GLASS_PANE
    display_name: " "
    slots:
      - 26

  balance:

    material: SUNFLOWER
    slot: 10

    display_name: '&#FFD700&lYOUR BALANCE'

    lore:
      - ''
      - '&7Current Money'
      - ''
      - '&e$%vault_eco_balance_formatted%'
      - ''
      - '&8Updates automatically.'

  key:

    material: ominous_trial_key
    slot: 13

    enchantments:
      - DURABILITY;1

    item_flags:
      - HIDE_ENCHANTS

    display_name: '&#FF6A00&lINFERNAL LOOTBOX KEY'

    lore:
      - ''
      - '&7A physical key used to'
      - '&7open the Infernal Lootbox.'
      - ''
      - '&fPrice'
      - '&a$100'
      - ''
      - '&7Click &aPurchase &7to continue.'

  buy:

    material: LIME_CONCRETE
    slot: 15

    display_name: '&#55FF55&l▶ PURCHASE ◀'

    lore:
      - ''
      - '&7Buy one Infernal Lootbox Key'
      - ''
      - '&fCost'
      - '&a$100'
      - ''
      - '&aClick to continue.'

    left_click_commands:
      - '[sound] UI_BUTTON_CLICK'
      - '[openguimenu] lootbox_confirm'

  info:

    material: BOOK
    slot: 11

    display_name: '&#00D4FF&lLOOTBOX INFORMATION'

    lore:
      - ''
      - '&#FFD700Possible Rewards'
      - ''
      - '&a$5,000 Cash'
      - '&bDiamond Sword'
      - '&dEpic Armor'
      - '&6Boss Egg'
      - ''
      - '&7All rewards are random.'
      - '&7Use your key on the crate.'

  close:

    material: BARRIER
    slot: 16

    display_name: '&#FF5555&lCLOSE MENU'

    lore:
      - ''
      - '&7Return to the game.'

    left_click_commands:
      - '[sound] BLOCK_CHEST_CLOSE'
      - '[close]'

lootbox_confirm.yml - Confirmation & Balance Validation

register_command: true
update_interval: 20

menu_title: '&#FF5555&lCONFIRM PURCHASE'

open_command:
  - lootbox_confirm

size: 27

items:

  border:
    material: BLACK_STAINED_GLASS_PANE
    display_name: " "
    slots:
      - 0-9
      - 17-26

  side_left:
    material: GRAY_STAINED_GLASS_PANE
    display_name: " "
    slots:
      - 18

  side_right:
    material: GRAY_STAINED_GLASS_PANE
    display_name: " "
    slots:
      - 26

  balance:
    material: SUNFLOWER
    slot: 10
    display_name: '&#FFD700&lYOUR BALANCE'
    lore:
      - ''
      - '&e$%vault_eco_balance_formatted%'
      - ''
      - '&8Updated live.'

  key:
    material: ominous_trial_key
    slot: 13

    enchantments:
      - DURABILITY;1

    item_flags:
      - HIDE_ENCHANTS

    display_name: '&#FF6A00&lINFERNAL LOOTBOX KEY'

    lore:
      - ''
      - '&7You are about to purchase'
      - '&f1x Infernal Lootbox Key'
      - ''
      - '&fPrice'
      - '&a$100'
      - ''
      - '&7This purchase cannot be refunded.'

  confirm:
    material: LIME_CONCRETE
    slot: 15

    display_name: '&#55FF55&l✔ CONFIRM'

    lore:
      - ''
      - '&7Purchase one key'
      - ''
      - '&fCost'
      - '&a$100'
      - ''
      - '&aClick to confirm.'

    left_click_requirement:
      requirements:
        hasmoney:
          type: has money
          amount: 100

      deny_commands:
        - '[sound] ENTITY_VILLAGER_NO'
        - '[message] &#FF5555You do not have enough money.'
        - '[close]'

    left_click_commands:
      - '[player] eco take %player_name% 100'
      - '[console] crazycrates give physical Lootbox 1 %player_name%'
      - '[sound] ENTITY_PLAYER_LEVELUP'
      - '[message] &#55FF55Purchase successful!'
      - '[message] &7Your Lootbox Key has been added.'
      - '[close]'

  cancel:
    material: BARRIER
    slot: 11

    display_name: '&#FF5555&l✖ CANCEL'

    lore:
      - ''
      - '&7Return to Lootbox Shop.'

    left_click_commands:
      - '[sound] UI_BUTTON_CLICK'
      - '[openguimenu] lootbox_shop'

Design note: balance validation is handled via DeluxeMenus' built-in click_requirement (type has money) so failed-requirement logic and rejection messages stay consistent without any extra commands outside the provided plugins.

§ 09 - Module 02

Loot Box System

CrazyCrates · PlaceholderAPI

Lootbox - CSGO Crate Type

File: plugins/CrazyCrates/crates/Lootbox.yml
Done

A CSGO-type crate with an active preview, active hologram, and 4 weighted rewards at 40/35/20/5. RequiredKeys is currently set to 0 in the configuration, but a physical key is still used in the purchase flow through DeluxeMenus.

$5,000 Cash
Emerald
40%
Dirt x64
Dirt
35%
Sharpness V Sword
Diamond Sword
20%
Boss Egg
Dragon Egg
5%

The snippet below is read directly from configs/CrazyCrates/crates/Lootbox.yml - the actual crate configuration file used by the server, not a manual copy.

Crate:
  # https://docs.crazycrew.us/mods/crazycrates/faq/#5-what-are-the-crate-types


  # Make sure to check out the wiki for anything not explained here.

  # https://docs.crazycrew.us/mods/crazycrates/


  # See CosmicCrate.yml or CasinoCrate.yml to see how the Cosmic/Casino CrateType works.

  CrateType: CSGO
  # Starting amount of keys when the player 1st joins.

  StartingKeys: 0
  # The amount of keys required to use the crate.

  RequiredKeys: 0
  # Max amount of crates that can be opened at once using /crates mass-open

  Max-Mass-Open: 10
  # If the crate shows in the /crates.

  # If the type is QuickCrate/CrateOnTheGo/FireCracker, They will not work as they require a Physical Crate.

  InGUI: true
  # Slot the item is in the GUI.

  Slot: 11
  # Enables/Disables the Broadcasts message when they open a crate.

  OpeningBroadCast: true
  # Message that is broadcast when opening the crate.

  BroadCast: "%prefix%<bold><gold>%player%</bold><reset> <gray>is opening a <bold><green>RIVRS Crate.</bold>"
  # This section is related to commands opening when a crate is opened.

  opening-command:
    # If the commands should be sent or not.

    toggle: false
    # Available Placeholders: %prefix%, %player% (PlaceholderAPI included)

    commands:
      - "lootbox"
  sound:
    # The sound options when the animation is cycling.

    cycle-sound:
      # If sound should be enabled or not.

      toggle: true
      # The type of sound to use.

      # https://minecraft.wiki/w/Sounds.json#Java_Edition_values

      value: "block.note_block.xylophone"
      # The volume of the pitch.

      volume: 1.0
      # The speed of the sound.

      pitch: 1.0
    # The sound options when an item is clicked.

    click-sound:
      # If sound should be enabled or not.

      toggle: true
      # The type of sound to use. Custom sounds from texture packs are supported!

      # https://minecraft.wiki/w/Sounds.json#Java_Edition_values

      value: "ui.button.click"
      # The volume of the pitch.

      volume: 1.0
      # The speed of the sound.

      pitch: 1.0
    # The sound options when a crate ends.

    stop-sound:
      # If sound should be enabled or not.

      toggle: true
      # The type of sound to use. Custom sounds from texture packs are supported!

      # https://minecraft.wiki/w/Sounds.json#Java_Edition_values

      value: "entity.player.levelup"
      # The volume of the pitch.

      volume: 1.0
      # The speed of the sound.

      pitch: 1.0
  # A default message if the prize doesn't have any Messages

  # i.e. Messages: [] or the value isn't there.

  Prize-Message:
    - "<gray>You have won <red>%reward% <gray>from <red>%crate%."
  # A list of commands to run by default on every prize.

  # If you do not want these commands to run, set this to []

  Prize-Commands: []
  # Global Settings

  Settings:
    # This defines whether we should track how many times players opened this crate

    # True means track, False means don't track.

    Tracking-Crate-Opening: false
    # Handles settings related to the border

    Border:
      # Settings related to the glass border

      Glass-Border:
        Toggle: true "c"># Should the glass border be enabled?

    # Broadcast a message to the server

    Broadcast:
      # If the messages should be sent.

      Toggle: false
      # The messages to broadcast.

      Messages:
        - "<red>%player% won the prize <yellow>%reward%."
      # If the player has this permission, they don't get the broadcast.

      Permission: ""
    # Settings related to rewards.

    Rewards:
      # Should a yes/no popup be made, to ask if they want to keep the prize?

      Re-Roll-Spin: false
      # Should there be a limit to how many times they can re-roll?

      Permission:
        # Should this be enabled?

        Toggle: false
        # Should this persist restarts? i.e. writes to disk the amount of respins, and reads the amount of respins.

        Persist: false
        # This will define how many permissions will be registered to the server per crate.

        # i.e. crazycrates.respin.<crate_name>.1-20

        # It will simply register multiple permissions, so it shows up in things like LuckPerms.

        Max-Cap: 20
  # Item the crate is in the GUI

  Item: "diamond"
  # This allows use of the components list below.

  Hide-Flags: false
  # The types of components to hide.

  # https://jd.papermc.io/paper/io/papermc/paper/registry/keys/DataComponentTypeKeys.html, Grab the value from the description without minecraft:

  Components:
    - "enchantments"
  # The custom model data of the item, -1 is disabled.

  Custom-Model-Data: -1
  # The item model, Mojang introduced this in 1.21.4... this replaces custom model data!

  # Set this to blank for it to do nothing.

  Model:
    # The namespace i.e. nexo

    Namespace: ""
    # The id i.e. emerald_helmet

    Id: ""
  # Should the item glow?

  # Available Types: add_glow, remove_glow, none

  Glowing: "none"
  # Name of the item in the GUI.

  Name: "<bold><green>RIVRS Crate</bold>"
  # The lore of the item in the GUI.

  Lore:
    - "<gray>This crate contains strange objects."
    - "<gray>You have <gold>%keys% keys <gray>to open this crate with."
    - "<gray>You have opened this crate: <gold>%crate_opened% times"
    - "<gray>(<yellow>!<gray>) Right click to view rewards."
  Preview:
    # The name of the inventory for the preview menu.

    Name: "<green>RIVRS Crate Preview"
    # Turn on and off the preview for this crate.

    Toggle: true
    # How many rows should the preview be? You can use 1-6.

    Rows: 4
    # Settings related to the glass in the preview.

    Glass:
      # Turn the glass border in the preview on and off.

      Toggle: true
      # The name of the border item.

      Name: " "
      # The item that shows in the border. Can be glass or any other item.

      Item: "gray_stained_glass_pane"
      # The custom model data of the item, -1 is disabled.

      Custom-Model-Data: -1
      # The item model, Mojang introduced this in 1.21.4... this replaces custom model data!

      # Set this to blank for it to do nothing.

      Model:
        # The namespace i.e. nexo

        Namespace: ""
        # The id i.e. emerald_helmet

        Id: ""
  # Settings related to animations...

  Animation:
    # This is only when an animation starts.

    # Set this to empty if you don't want to change it.

    Name: "Rolling your prize..."
    # The glass animation settings.

    Glass-Frame:
      # Should the glass animation be enabled?

      Toggle: true
      # If the glass animation option is set to false above, We will use static items.

      # If this is empty, We will use nothing.

      Items:
        "1":
          # The name of the item to display.

          name: " "
          # The lore of the item to display.

          lore: [ ]
          # The material to display.

          material: "gold_ingot"
          # The amount to display.

          amount: 1
      # The random settings for the glass animation.

      Random:
        # Should the animation be random?

        Toggle: true
        # A list of items to use, If the list is empty. We will use glass panes internally.

        Items:
          "1":
            # The name of the item to display.

            name: " "
            # The lore of the item to display.

            lore: [ ]
            # The material to display.

            material: "gold_ingot"
            # The amount to display.

            amount: 1
          "2":
            # The name of the item to display.

            name: " "
            # The lore of the item to display.

            lore: [ ]
            # The material to display.

            material: "iron_ingot"
            # The amount to display.

            amount: 1
  # Settings related to physical keys.

  PhysicalKey:
    # Name of the Key.

    Name: "<bold><green>RIVRS crate Key</bold>"
    # Lore of the Key.

    Lore:
      - "<gray>A special Key"
      - "<gray>For a special RIVRS Lootbox."
    # The item the key is.

    Item: "ominous_trial_key"
    # The custom model data of the item, -1 is disabled.

    Custom-Model-Data: -1
    # The item model, Mojang introduced this in 1.21.4... this replaces custom model data!

    # Set this to blank for it to do nothing.

    Model:
      # The namespace i.e. nexo

      Namespace: ""
      # The id i.e. emerald_helmet

      Id: ""
    # Should the item glow?

    # Available Types: add_glow, remove_glow, none

    Glowing: "add_glow"
    # Settings related to item flags.

    flags:
      # A list of components to hide on the key! I've linked a more detailed explanation below!

      # https://docs.crazycrew.us/mods/crazycrates/faq/#2-hideitemflags-no-longer-works-what-do-i-use-now

      components: []
  # Settings for the holograms.

  Hologram:
    # Toggle on and off the holograms for the crates.

    Toggle: true
    # The height of the hologram above the crate.

    Height: 1.5
    # The distance the hologram can be seen.

    Range: 8
    # How often should the hologram update? -1 is disabled.

    Update-Interval: -1
    # The background color of the hologram. It uses hex colors. This only works with CMI/FancyHolograms

    # Set the color to transparent if you don't want any color.

    Color: "transparent"
    # Whether to apply text shadow (FancyHolograms only)

    TextShadow: false
    # The message that will be displayed above the crate.

    # Note: MiniMessage or Color Codes being supported is depending on the 'holograms' plugin.

    Message:
      - "§a§lRIVRS Crate"
  # All the prizes that can be obtained in the Crate.

  # These prizes do not require any extra configuration

  # They will give the prizes based on what's already below.

  # See the AdvancedExample.yml for a more advanced crate.

  Prizes:
    "1":
      DisplayName: "<green>$5,000"
      DisplayItem: "emerald"
      DisplayAmount: 1
      Weight: 40.0
      DisplayLore:
        - "<gray>Receive $5,000"
        - ""
        - "<gold>Chance: 40%"
      Commands:
        - "eco give %player% 5000"

    "2":
      DisplayName: "<white>Dirt x64"
      DisplayItem: "dirt"
      DisplayAmount: 64
      Weight: 35.0
      DisplayLore:
        - "<gray>64 Dirt Blocks"
        - ""
        - "<gold>Chance: 35%"
      Items:
        "1":
          material: "dirt"
          amount: 64

    "3":
      DisplayName: "<aqua>Sharpness V Sword"
      DisplayItem: "diamond_sword"
      DisplayAmount: 1
      DisplayEnchantments:
        - "sharpness:5"
      Weight: 20.0
      DisplayLore:
        - "<gray>Diamond Sword"
        - "<gray>Sharpness V"
        - ""
        - "<gold>Chance: 20%"
      Items:
        "1":
          material: "diamond_sword"
          enchantments:
            sharpness: 5

    "4":
      DisplayName: "<#ff6600>Boss Egg"
      DisplayItem: "dragon_egg"
      DisplayAmount: 1
      Weight: 5.0
      DisplayLore:
        - "<gray>Summons Ace Boss"
        - ""
        - "<gold>Chance: 5%"
      Commands:
        - "ia give %player% boss_egg 1"
§ 10 - Module 03

Boss Entity - Ace

MythicMobs · ModelEngine · ItemsAdder

Ace - 1v1 Boss Encounter

File: plugins/MythicMobs/mobs/Ace.yml
Active

The AceBoss is defined in MythicMobs with the Zombie type, 50 HP, 2 damage, an active BossBar, the ace_boss model via ModelEngine, and a full skill set: spawn intro, idle loop, random attack selector, phase 2/3, hurt reaction, and death skill.

Guaranteed Rewards

  • Random money $1,000 – $5,000
  • 200 experience points
  • 3–5x Flame Fragment (custom item)

Bonus Rewards

60% Flame Essence - Common
30% Flame Essence - Rare
10% Flame Essence - Epic

Current implementation: the random skill selector is active via AceAttackSelector (FireSlash/Fireball/Dash/FlameWave), phase triggers are active at <70% and <40% health, and the death sequence is active via AceDeathSkill in plugins/MythicMobs/skills/AceSkills.yml.

The files below are read directly from configs/DeluxeMenus/ and configs/MythicMobs/ - not manually rewritten in this document.

boss_menu.yml - Boss Arena Entry Point

menu_title: '&cAce Boss Arena'
open_command:
  - bossmenu
size: 9
items:
  'start_boss':
    material: DIAMOND_SWORD
    slot: 4
    display_name: '&c&lStart 1v1 Battle'
    lore:
      - '&7Click to spawn Ace!'
    left_click_commands:
      - '[console] mm mobs spawn AceBoss %player_name%'
      - '[player] closemenu'

Ace.yml - Mob Definition

AceBoss:
  Type: ZOMBIE

  Display: '&4&l✦ ACE, LORD OF FLAMES ✦'

  Health: 50
  Damage: 2

  AIGoalSelectors:
    - clear
    - meleeattack
    - randomstroll
    - lookatplayers
    - float

  AITargetSelectors:
    - clear
    - players

  Options:

    AlwaysShowName: true

    PreventOtherDrops: true

    PreventRandomEquipment: true

    Silent: true

    KnockbackResistance: 1

    MovementSpeed: 0.32

    FollowRange: 40

    MaxCombatDistance: 35

    Despawn: false

    PreventSunburn: true

    PreventTransformation: true

    PreventMobKillDrops: true

  BossBar:

    Enabled: true

    Title: '&c☠ ACE - LORD OF FLAMES'

    Color: RED

    Style: SEGMENTED_10

    Range: 50

  Model:

    Engine: ModelEngine

    Model: ace_boss

    Invisible: true

    Hitbox: true

  Skills:

##################################################

# SPAWN

##################################################

  - model{mid=ace_boss} @self ~onSpawn
  - skill{s=AceSpawnIntro} @self ~onSpawn

##################################################

# IDLE

##################################################


  - skill{s=AceIdleLoop} @self ~onTimer:20

##################################################

# BASIC ATTACK

##################################################


  - skill{s=AceAttackSelector} @target ~onTimer:60

##################################################

# PHASE SYSTEM

##################################################


  - skill{s=AcePhase2} @self ~onDamaged ?health{h=<0.7}

  - skill{s=AcePhase3} @self ~onDamaged ?health{h=<0.4}

  # - skill{s=AceUltimatePhase} @self ~onDamaged ?health{h=<0.15}


##################################################

# DEATH

##################################################


  - skill{s=AceDeathSkill} @self ~onDeath

##################################################

# HURT

##################################################


  - skill{s=AceHurtReaction} @self ~onDamaged

AceSkills.yml - Skill List

########################################################

################## ACE BOSS SKILLS #####################

########################################################

# Model animations available: walk, idle, attack1, attack2, attack3, attack4

# walk/idle are handled automatically by ModelEngine's built-in state machine

# based on mob movement. Only attack1-4 are manually triggered here.

########################################################


########################################################

# SPAWN

########################################################


AceSpawnIntro:
  Cooldown: 99999
  Skills:
    - state{s=idle} @self
    - sound{s=entity.wither.spawn;v=1;p=1} @PlayersInRadius{r=40}
    - delay 10
    - effect:particles{p=flame;amount=250;hS=1;vS=2} @self
    - delay 10
    - effect:particles{p=lava;amount=60;hS=1;vS=1} @self
    - delay 20
    - effect:explosion @self
    - message{msg="&4&lACE &7» &cWho dares disturb my eternal flame?"} @PlayersInRadius{r=40}

########################################################

# IDLE

########################################################


AceIdleLoop:
  Skills:
    - state{s=idle} @self

########################################################

# HURT

########################################################


AceHurtReaction:
  Cooldown: 20
  Skills:
    - sound{s=entity.blaze.hurt} @self
    - effect:particles{p=ash;amount=20} @self

########################################################

# ATTACK SELECTOR

########################################################


AceAttackSelector:
  Skills:
    - randomskill{
        skills=
        AceFireSlash,
        AceFireball,
        AceDash,
        AceFlameWave
      }

########################################################

# FIRE SLASH (attack1)

########################################################


AceFireSlash:
  Cooldown: 60
  Skills:
    - state{s=attack1} @self
    - sound{s=entity.player.attack.sweep} @self
    - delay 8
    - effect:particles{p=sweep_attack;amount=1} @self
    - effect:particles{p=flame;amount=60;hS=1.5;vS=.3} @Forward{f=2}
    - damage{a=14} @PlayersInRadius{r=3}
    - ignite{ticks=80} @PlayersInRadius{r=3}

########################################################

# FIREBALL (attack2)

########################################################


AceFireball:
  Cooldown: 120
  Skills:
    - state{s=attack2} @self
    - sound{s=entity.blaze.shoot} @self
    - delay 15
    - projectile{
        bulletType=FIREBALL;
        velocity=1.5;
        gravity=0;
        onTick=AceFireTrail;
        onHit=AceExplosion
      }

AceFireTrail:
  Skills:
    - effect:particles{p=flame;amount=5} @origin

AceExplosion:
  Skills:
    - effect:explosion
    - effect:particles{p=explosion_emitter;amount=1}
    - effect:particles{p=flame;amount=100}
    - effect:particles{p=lava;amount=40}
    - damage{a=18}
    - ignite{ticks=100}

########################################################

# DASH (attack3)

########################################################


AceDash:
  Cooldown: 140
  Skills:
    - state{s=attack3} @self
    - sound{s=entity.blaze.shoot} @self
    - effect:particles{p=smoke;amount=50} @self
    - leap{velocity=2} @target
    - delay 5
    - effect:particles{p=flame;amount=80} @self
    - damage{a=10} @PlayersInRadius{r=2}

########################################################

# FLAME WAVE (attack4)

########################################################


AceFlameWave:
  Cooldown: 160
  Skills:
    - state{s=attack4} @self
    - delay 20
    - sound{s=entity.generic.explode} @self
    - effect:particles{p=flame;amount=200;hS=6;vS=.2} @self
    - damage{a=15} @PlayersInRadius{r=6}
    - ignite{ticks=120} @PlayersInRadius{r=6}

########################################################

# PHASE 2

########################################################


AcePhase2:
  Cooldown: 99999
  Skills:
    - message{msg="&6ACE &7» &cFeel the flames!"} @PlayersInRadius{r=40}
    - potion{type=SPEED;duration=999999;level=1} @self
    - potion{type=STRENGTH;duration=999999;level=1} @self
    - effect:particles{p=flame;amount=300;hS=2;vS=2} @self

########################################################

# PHASE 3

########################################################


AcePhase3:
  Cooldown: 99999
  Skills:
    - message{msg="&4ACE &7» &4YOU WILL ALL BURN!"} @PlayersInRadius{r=40}
    - effect:particles{p=lava;amount=250;hS=3;vS=2} @self
    - potion{type=SPEED;duration=999999;level=2} @self
    - potion{type=STRENGTH;duration=999999;level=2} @self

########################################################

# ULTIMATE (attack4 reused for max impact)

########################################################


AceUltimatePhase:
  Cooldown: 99999
  Skills:
    - message{msg="&c&lACE IS UNLEASHING INFERNO!!"} @PlayersInRadius{r=60}
    - state{s=attack4} @self
    - delay 30
    - effect:particles{p=explosion_emitter;amount=10} @self
    - effect:particles{p=flame;amount=500;hS=8;vS=3} @self
    - damage{a=30} @PlayersInRadius{r=8}
    - ignite{ticks=200} @PlayersInRadius{r=8}

########################################################

# DEATH

########################################################


AceDeathSkill:
  Skills:
    - sound{s=entity.wither.death} @self
    - delay 20
    - effect:particles{p=ash;amount=200} @self
    - effect:particles{p=smoke;amount=200} @self
    - delay 20
    - effect:explosion @self

AceItems.yml - Reward Drops

flame_fragment:
  Id: blaze_powder
  Display: '&6Flame Fragment'
  Lore:
  - '&7Material used for crafting.'

common_flame_essence:
  Id: magma_cream
  Display: '&fCommon Flame Essence'

rare_flame_essence:
  Id: magma_cream
  Display: '&bRare Flame Essence'

epic_flame_essence:
  Id: magma_cream
  Display: '&5Epic Flame Essence'
§ 11

Plugin Reference

Technical documentation for the core plugins that make up the three modules above - covering the selection rationale, dependencies, configuration location, and interaction with other plugins.

DeluxeMenus

v1.14.2 DEV-213 · WesJD / helpch.at
Dependency
PlaceholderAPI (optional), Vault (optional)
Configuration Location
plugins/DeluxeMenus/gui_menus/*.yml
Reason for Selection
The most flexible GUI for YAML-based menus without needing to compile a custom plugin; the built-in click_requirement simplifies balance validation.
Interaction
Triggers CrazyCrates console commands and reads Vault/PlaceholderAPI placeholders to display the player balance in real time.
Notes
Used for lootbox_shop.yml, lootbox_confirm.yml, and boss_menu.yml.

CrazyCrates

v5.1.0 · Crazy Crates Team
Dependency
Vault (economy, optional)
Configuration Location
plugins/CrazyCrates/crates/Lootbox.yml
Reason for Selection
Supports the CSGO crate type with a built-in drop-rate preview, well suited for the weighted lootbox requirement without building a custom animation from scratch.
Interaction
Called from DeluxeMenus after a successful purchase validation; the top reward triggers a boss spawn via MythicMobs.
Notes
Reward weights are aligned 1:1 with the percentages requested by the recruiter.

MythicMobs Premium

v5.13.0-SNAPSHOT · MythicCraft
Dependency
ModelEngine, ItemsAdder (for custom assets)
Configuration Location
plugins/MythicMobs/mobs/Ace.yml
Reason for Selection
The industry standard for custom bosses/mobs with a trigger-based skill system, far more maintainable than command blocks.
Interaction
Reads models from ModelEngine, item drops from ItemsAdder, and the combat region from WorldGuard.
Notes
The boss skills use ~onTimer and ~onDeath triggers.

ModelEngine

vR4.1.0 · Sabertooth Studios
Dependency
MythicMobs (for entity binding)
Configuration Location
plugins/ModelEngine/models/ace.emo.bbmodel
Reason for Selection
Enables a custom 3D model for the Ace boss without a separate resource pack for the entity, keeping the visual identity consistent.
Interaction
The model is bound to the MythicMobs mob definition via the Model: option.
Notes
Exported from Blockbench, tested on the Java client before binding.

ItemsAdder

v4.0.17 · ItemsAdder Team
Dependency
ProtocolLib, PlaceholderAPI
Configuration Location
plugins/ItemsAdder/contents/rivrs/
Reason for Selection
Provides a custom item/furniture/block system with an integrated resource pack generator, used for the Flame Fragment/Essence.
Interaction
Custom items are referenced as reward drops in MythicMobs and as the DisplayItem in CrazyCrates.
Notes
The resource pack is auto-hosted and distributed to the client on join.

Citizens

v2.0.43-b4213 · CitizensNPCs
Dependency
CitizensCMD (internal addon)
Configuration Location
plugins/Citizens/saves.yml
Reason for Selection
Interactive NPC to direct players to the boutique/lootbox without needing a sign or static hologram.
Interaction
The NPC command opens the DeluxeMenus menu via CitizensCMD.
Notes
Placed in the spawn area near the boutique.

ProtocolLib

vLatest · dmulloy2
Dependency
- (base library)
Configuration Location
- (no main config file)
Reason for Selection
A required dependency for ItemsAdder and several packet-level UI effects; avoids duplicating libraries across plugins.
Interaction
Used internally by ItemsAdder and several other visual plugins.
Notes
No manual configuration required.

Vault

vLatest · MilkBowl
Dependency
Economy provider (EssentialsX)
Configuration Location
plugins/Vault/config.yml
Reason for Selection
The standard economy/permission API bridge read by almost every plugin in this stack, avoiding vendor lock-in to a single economy plugin.
Interaction
Acts as an intermediary between EssentialsX (economy provider) and DeluxeMenus/CrazyCrates (consumers).
Notes
Active economy provider: EssentialsX.

PlaceholderAPI

v2.12.2 · PlaceholderAPI Team
Dependency
Per-plugin expansion (Vault, MythicMobs, etc.)
Configuration Location
plugins/PlaceholderAPI/expansions/
Reason for Selection
The de facto standard for cross-plugin placeholders; lets menus dynamically display balance, boss name, and lootbox status.
Interaction
Bridges nearly all GUI plugins with real-time data from other plugins.
Notes
Active expansions: Vault, Player, Server.
§ 12

Custom Plugin - RIVRSBridge

RIVRSBridge is an internal plugin developed entirely by the candidate, beyond the required scope of the assignment, to demonstrate engineering initiative and an understanding of architecture that can be extended in the future.

Internal · Custom Plugin

RIVRSBridge - Web Integration Layer

File: config.yml, messages.yml
Active

RIVRSBridge acts as a bridge between the Minecraft server and external web services. Based on plugins/RIVRSBridge/config.yml, the active endpoint is https://rivrs.ourprojects.id/dashboard/index.php?action=update with a 10-second snapshot interval and the economy/lootbox/boss-kills features enabled.

Capabilities & Design Goals

  • Communication bridge between the Minecraft server and external web services
  • Foundation for future dashboard integration
  • REST communication support
  • WebSocket communication support
  • Telemetry data collection
  • Real-time server statistics
  • Player data synchronization
  • Moderation log
  • Event auditing
  • Economy data synchronization
  • Webhook integration
  • Foundation for future authentication
  • Foundation for future Discord integration
  • Live monitoring
  • API-first architecture
Important note: RIVRSBridge is intentionally designed to be lightweight, non-invasive, and independent - it does not modify any plugin provided by the recruiter, and can be fully disabled without affecting the functionality of the Purchase Interface, Loot Box, or Boss Entity. The features listed above represent the architectural foundation supporting further development; not all of them are fully implemented in the current version, and this documentation does not claim otherwise. Its main purpose is to show how a gameplay system can be designed to be scalable and ready to integrate with external services in the future.

Read directly from configs/RIVRSBridge/:

config.yml

# ================================
# RIVRSBridge - Professional Config
# Paper 1.21.x Data Reporter
# ================================

# ------------------------------------------------------------
# connection-settings
# - Mengatur URL endpoint dan timeout jaringan.
# ------------------------------------------------------------
connection-settings:
  # Endpoint PHP yang akan menerima POST JSON.
  # Contoh: https://domain.tld/dashboard/index.php?action=update
  api:
    endpoint: "https://rivrs.ourprojects.id/dashboard/index.php?action=update" "c"># <-- Ganti ke endpoint Anda

  timeouts:
    # Timeout koneksi ke server (connect). Jika web mati atau lambat, request akan gagal cepat.
    connect-timeout-ms: 60000 "c"># 5 detik

    # Guard timeout untuk read/response. Di HttpClient Java, guard ini biasanya diterapkan via request timeout.
    # Tujuannya: mencegah request menggantung.
    read-timeout-ms: 60000 "c"># 5 detik

    # Timeout total untuk sebuah request HTTP.
    # Recommended: sedikit lebih besar dari connect-timeout.
    request-timeout-ms: 65000 "c"># 8 detik


# ------------------------------------------------------------
# monitoring-intervals
# - Mengatur seberapa sering server mengirim snapshot.
# ------------------------------------------------------------
monitoring-intervals:
  # Interval pengiriman snapshot ke endpoint.
  # Semakin kecil: data lebih realtime, namun makin banyak request.
  # Recommended untuk produksi: 10-60 detik.
  snapshot-interval-seconds: 10 "c"># Kirim setiap 10 detik


# ------------------------------------------------------------
# features-enabled
# - Mengaktifkan/nonaktifkan fitur pengumpulan data.
# ------------------------------------------------------------
features-enabled:
  # Mengaktifkan logging debug internal.
  # Jika true, akan lebih banyak log dari ReporterService.
  debug: false

  # Mengaktifkan integrasi ekonomi via Vault.
  vault-economy:
    enabled: true

  # Mengaktifkan pengumpulan data lootbox.
  # Catatan: Implementasi event lootbox tergantung API plugin lootbox (contoh: CrazyCrates).
  lootbox:
    enabled: true

  # Mengaktifkan pengumpulan data boss kills via MythicMobs.
  boss-kills:
    enabled: true


# ------------------------------------------------------------
# security-settings
# - Keamanan untuk akses endpoint eksternal.
# ------------------------------------------------------------
security-settings:
  # API Key yang akan dikirim via header HTTP:
  #   X-API-KEY: <api-key>
  api-key: "Asdd220805!?" "c"># <-- Ganti dengan API key Anda

  retry:
    # Max percobaan pengiriman snapshot.
    # Requirement: maksimal 3 kali.
    max-attempts: 1

    initial-backoff-ms: 250000

messages.yml

# messages.yml
# RIVRSBridge — Pesan pemain & sistem (Custom Plugin)

errors:
  insufficient_funds: "&cTransaksi gagal: saldo tidak mencukupi."
  endpoint_unreachable: "&8[RIVRSBridge] &7Endpoint tidak dapat dijangkau, snapshot dilewati."
  invalid_response: "&8[RIVRSBridge] &7Respons endpoint tidak valid."

reward:
  received: "&aKamu menerima reward: %reward_name%"
  boss_drop: "&6Ace menjatuhkan %item_name%!"

boss:
  spawn_announce: "&4&lAce &7has entered the arena!"
  death_announce: "&4&lAce &7has been defeated!"

system:
  startup: "&8[RIVRSBridge] &7Bridge aktif — snapshot tiap %interval% detik."
  shutdown: "&8[RIVRSBridge] &7Bridge dinonaktifkan."
§ 13

Extra Plugins Rationale

Several additional plugins were installed beyond the list provided by the recruiter. This section explains the technical reasoning behind them.

  • Improves maintainability - plugins like DecentHolograms avoid the need for manual armor-stand-based holograms.
  • Improves interoperability - ProtocolLib is provided as a common dependency for packet-level effects used by other plugins.
  • Improves the debugging and configuration workflow - ConditionalEvents makes it easier to test conditions without command blocks.
  • Improves long-term scalability - RIVRSBridge as a foundation for external integration.
  • Improves the quality of the technical presentation - CitizensCMD for a more interactive NPC in the boutique area.
  • Improves client compatibility - ViaVersion, Geyser-Spigot, and Floodgate extend cross-version and cross-platform testing coverage.
Note: adding these plugins does not change the core assignment requirements. The implementation of the Purchase Interface, Loot Box System, and Boss Entity still fully follows the specification given by the recruiter; the additional plugins are supplementary for development experience quality and presentation.
§ 14

Configuration Documentation

A summary of the function and key configuration keys of each YAML file making up the three modules, including the RIVRSBridge configuration files.

lootbox_shop.yml

Defines the boutique GUI layout: item slot, info lore, and the buy button that opens lootbox_confirm.

menu_title open_command size items.buy.left_click_commands
lootbox_confirm.yml

Handles balance validation via left_click_requirement and executes the transaction (eco take + give physical key).

left_click_requirement.requirements.hasmoney left_click_requirement.deny_commands left_click_commands
Lootbox.yml

CrazyCrates crate definition: CSGO type, weighted reward list, and preview display.

CrateType Prizes Weight DisplayItem
Ace.yml

MythicMobs mob definition for the Ace boss: base stats, model binding, skill list, and drop table.

Type Model Health Skills Drops
config.yml

Global RIVRSBridge configuration: API endpoint, telemetry interval, and per-module feature toggles.

api.endpoint telemetry.interval features.economy_sync
messages.yml

Collection of player messages for failed validation, reward notifications, and other system messages.

errors.insufficient_funds reward.received boss.spawn_announce
§ 15

Plugin Compatibility Matrix

Compatibility of core plugins with the Paper version, Java client, Bedrock client, and hot-reload capability without a server restart.

PluginPaper 1.21.xJava ClientBedrock ClientHot Reload
DeluxeMenus ✓ (via Geyser)
CrazyCrates ✓ (via Geyser)
MythicMobs Partial (limited VFX skills)
ModelEngine ✗ (custom model is Java-only) Restart required
ItemsAdder ✓ (resource pack auto-convert)
RIVRSBridge ✓ (platform agnostic)
§ 18

Integration Notes - Plugin Stack

Complete list of plugins installed on the local server, including those provided by the recruiter and personal additions to support cross-system integration.

PluginVersionCategoryFunction
CrazyCrates 5.1.0 Reward Crate, key, and reward system.
Citizens 2.0.43-b4213 NPC Creates interactive NPCs.
CitizensCMD 2.7.2 NPC Addon Runs commands through Citizens NPCs.
ConditionalEvents 4.78.1 Automation Runs events based on specific conditions.
DecentHolograms 2.10.1 Visual Displays holograms and floating text.
DeluxeMenus 1.14.2 DEV-213 GUI Creates custom GUIs/menus.
EssentialsX 2.22.0 Core Basic server commands: /spawn, /home, /warp.
EssentialsX Spawn 2.22.0 Spawn Manages the server spawn point.
Floodgate Latest Bedrock Support Allows Bedrock players without a Java account.
Geyser-Spigot Latest Bedrock Support Bridges Bedrock to Java Edition.
ItemsAdder 4.0.17 Custom Content Custom items, furniture, blocks, resource packs.
LuckPerms 5.5.59 Permission Permission and group system.
ModelEngine R4.1.0 Custom Model 3D models for mobs and NPCs.
MythicMobs Premium 5.13.0-SNAPSHOT RPG Custom mobs, bosses, skills, AI, RPG mechanics.
PlaceholderAPI 2.12.2 API Cross-plugin placeholders.
ProtocolLib Latest Library Network packet manipulation.
RIVRSBridge 1.0.0 Custom Plugin Internal bridge/integration for the RIVRS system.
Vault Latest API Economy, Permission, and Chat API.
ViaVersion 5.10.0 Compatibility Supports newer client versions.
WorldEdit 7.4.4 Building Fast world editing via commands.
WorldGuard 7.0.17 Protection Region protection & area flags.

Additional justification: RIVRSBridge is used as an internal bridge for server telemetry/monitoring purposes; not required for this case study but still actively running alongside it. ProtocolLib is added as a common dependency for several of the GUI/particle plugins above.

§ 19

Testing & Validation

An engineering validation matrix replaces a simple checklist, recording test scenarios, expected results, actual results, status, and additional notes.

ScenarioExpectedActualStatusNotes
Purchase - open /lootbox and click purchase Confirm menu opens from lootbox_shop Matches configuration Pass Command open: lootbox
Confirm Purchase - balance >= 100 eco take + give physical key + success message Matches configuration Pass left_click_requirement has money=100
Confirm Purchase - balance < 100 deny message & close Matches configuration Pass Message: You do not have enough money
Crate Prize Weight 40/35/20/5 Matches Lootbox.yml Pass Prize 1-4
Boss Spawn via boss_menu mm mobs spawn AceBoss %player_name% Matches configuration Pass open_command: bossmenu
AceBoss Model Binding ace_boss model attached on spawn Matches configuration Pass ModelEngine + skill onSpawn
Ace Skills Selector Random skill: FireSlash/Fireball/Dash/FlameWave Matches configuration Pass AceAttackSelector
Ace Phase Trigger Phase2 <70%, Phase3 <40% Matches configuration Pass onDamaged health condition
RIVRSBridge Endpoint Push POST snapshot every 10 seconds to the endpoint Matches configuration Pass snapshot-interval-seconds: 10
ConditionalEvents /announce Requires $500 + 15s cooldown Matches configuration Pass event9
§ 20

Known Issues

Currently known limitations, along with workarounds, risk levels, and mitigation steps.

IssueWorkaroundRiskMitigation
The Ace boss has not gone through full combat testing The implementation plan is already documented in Module 03 Medium Testing is scheduled before final submission; the results will update the Testing & Validation section.
The ModelEngine custom model does not display on the Bedrock client Bedrock can still interact with the vanilla mob hitbox Low A platform limitation (ModelEngine is Java-only), not a configuration bug.
Reloading ModelEngine requires a server restart Model changes are scheduled outside active testing hours Low Documented in the Compatibility Matrix, does not affect other modules.
The RIVRSBridge dashboard is still a prototype The endpoint is available for demonstration, not yet for production Low Explicitly documented as a foundation, not a required deliverable.
§ 21

Roadmap

Further development plans beyond the assignment scope, showing the long-term direction of the architecture already laid down through RIVRSBridge.

Version

v1.1

  • Read-only live dashboard for server statistics
  • Database-backed player data storage (SQLite → MySQL)
  • Player statistics sync via RIVRSBridge
Version

v1.2

  • Basic analytics (retention, actual drop rate vs config)
  • Discord notification integration for boss events
  • Moderation audit log via webhook
Version

v2.0

  • Daily & weekly bosses with scaled rewards
  • Multi-player raid boss
  • Scheduled dynamic events based on configuration
§ 22

Performance Considerations

Design decisions made to maintain TPS stability and server memory consumption when all modules are active simultaneously.

TPS

Boss skills are scheduled with separate cooldowns to avoid tick spikes when several skills trigger at once.

Memory

6 GB heap allocation with Aikar GC flags to reduce micro-stutter when the ItemsAdder resource pack loads.

Boss Optimization

The boss ~onTimer trigger is radius-limited so it does not compute pathfinding when the area is empty.

Model Optimization

The ModelEngine model uses the minimum bone count needed for combat animation, avoiding render overhead.

ItemsAdder Optimization

The resource pack is compressed and auto-hosted to speed up client download time.

Chunk Loading

The boss arena sits in a pre-generated area so it does not trigger on-demand chunk generation during combat.

§ 23

Security Considerations

Permission design and validation principles applied to maintain server integrity during and after the testing process.

Permission Design

All sensitive commands are restricted via LuckPerms groups following the least-privilege principle - default players have no access to admin commands.

Command Restrictions

Console commands from DeluxeMenus/CrazyCrates are executed in a console context, not as an operator, to prevent accidental privilege escalation.

Operator Safety

The operator account is kept separate from the daily testing account to reduce the risk of configuration mistakes on the live server.

Economy Validation

Balance validation is performed server-side via click_requirement, not dependent on client state.

Server Integrity

RIVRSBridge runs as a non-invasive process and can be fully disabled without affecting the core assignment modules.

§ 24

Conclusion

The Purchase Interface, Loot Box System, and Boss Entity (Ace) modules are already synced with the actual configuration of the My Server project and are ready for review. Further updates are optional, for enriching media documentation (screenshots/videos) and gameplay balancing iterations.

Beyond the three required modules, this project also demonstrates a broader engineering mindset: structured documentation, a custom plugin (RIVRSBridge) as a foundation for future integration, and an environment directly verifiable through the live demo and project archive. The goal isn't just to meet the requirements, but to show how those requirements can be built on a scalable and maintainable foundation.

§ 25

Appendix

Official Plugin Documentation

Server Access

  • Java: mark-webpage.gl.joinmc.link
  • Bedrock: mark-webpage.gl.at.ply.gg:12177
  • Bedrock (alternative): 147.185.221.225:12177

Dashboard & Downloads

Configuration File Index

  • lootbox_shop.yml - Defines the boutique GUI layout: item slot, info lore, and the buy button that opens lootbox_confirm.
  • lootbox_confirm.yml - Handles balance validation via left_click_requirement and executes the transaction (eco take + give physical key).
  • Lootbox.yml - CrazyCrates crate definition: CSGO type, weighted reward list, and preview display.
  • Ace.yml - MythicMobs mob definition for the Ace boss: base stats, model binding, skill list, and drop table.
  • config.yml - Global RIVRSBridge configuration: API endpoint, telemetry interval, and per-module feature toggles.
  • messages.yml - Collection of player messages for failed validation, reward notifications, and other system messages.

Version History

VersionTimelineNotes
v0.1 Initial session Server setup, basic plugin installation, folder structure.
v0.5 Mid-progress lootbox_shop.yml & lootbox_confirm.yml completed and passed testing.
v0.8 Later stage Lootbox.yml completed, drop-rate aligned, animation tested.
v0.9 Current Documentation expanded into full engineering documentation; Ace.yml in progress.

Credits

All configuration, documentation, and the custom plugin (RIVRSBridge) in this project were prepared by Dwiky as part of the Minecraft Configuration Specialist - Technical Case Study. Third-party plugins remain the copyright of their respective developers as listed in the Plugin Reference.