Source-checkedLibraries & compatibility

VampireCommandFramework

by deca · for V Rising

Command framework for developers to easily create universal commands for their plugins.

104KDownloads
6 mo agoLast updated
BepInExLoaders
ThunderstoreSource

About VampireCommandFramework

From Thunderstore

Command framework for developers to easily create universal commands for their plugins.

VampireCommandFramework

A comprehensive framework for V Rising mod developers to easily build commands with advanced features like command overloading, history, smart matching, and plugin-specific execution.

Usage

For Server Operators

This plugin should be installed into the BepInEx/plugins folder and be kept up to date. It is required by other plugins for commands.

For Plugin Developers

How to use

1. Add a reference to the plugin

>dotnet add package VRising.VampireCommandFramework

2. Add the plugin as a dependency by setting this attribute on your plugin class

>[BepInDependency("gg.deca.VampireCommandFramework")]

3. Register your plugin when you're done loading:

>CommandRegistry.RegisterAll()

4. Write commands

[Command("foo")]
public void Foo(ICommandContext ctx, int count, string orValues = "with defaults", float someFloat = 3f) 
    => ctx.Reply($"You'd do stuff here with your parsed {count} and stuff");

This command would execute for:

  • .foo 5
  • .foo 5 works
  • .foo 5 "or really fancy" 3.145

But if you typed .foo 5.123 you'd see a generated usage message like: >


### This simple example provides
- **Automatic help listings** - your command appears in `.help`
- **Parameter parsing** - `count`, `orValues`, and `someFloat` are automatically converted
- **Usage text generation** - help shows `(count) [orValues="with defaults"] [someFloat=3]`
- **Default parameter handling** - optional parameters work seamlessly
- **Type conversion** - strings become integers, floats, etc.

### More Examples

The framework handles these additional command patterns:

**Command with parameters:**

[Command("give")] public void GiveItem(ICommandContext ctx, string item, int count = 1) => ctx.Reply($"Gave {count} {item}");

- Executes with: `.give sword`, `.give sword 5`

**Command groups:**

[CommandGroup("admin")] public class AdminCommands { [Command("ban")] public void Ban(ICommandContext ctx, string player) => ctx.Reply($"Banned {player}"); }

- Executes with: `.admin ban PlayerName`

## Remainder Parameters
For commands that take free-form text (a message, a reason, a timezone ID), mark the final `string` parameter with `[Remainder]` to capture everything the user typed after the preceding arguments, with spacing and quotes preserved.

[Command("say")] public void Say(ICommandContext ctx, string channel, [Remainder] string message) => ctx.Reply($"[{channel}] {message}");


- `.say global hello everyone` → `channel = "global"`, `message = "hello everyone"`
- `.say global "hello, friends!"` → `message = "\"hello, friends!\""` (quotes kept as typed)

**Rules:**
- Must be the **last** parameter. Violations are rejected at registration time.
- Must be of type `string`.
- Captures the rest of the raw input verbatim, including quotes, whitespace, and special characters.
- Can be optional with a default value: `[Remainder] string reason = null`.
- Parameters before the remainder are parsed normally: type conversion, defaults, and custom converters all still apply.
- Composes with overloading: the framework picks a remainder variant when enough preceding arguments are present.

Auto-generated `.help` output renders a remainder parameter as `<name...>`, distinct from `(name)` for required and `[name=default]` for optional, so users get a visual cue for free, unless you supply a manual `usage:` string on `[Command]`.

## Command Overloading
You can now create multiple commands with the same name but different parameter types:

[Command("teleport")] public void TeleportToPlayer(ICommandContext ctx, string playerName) => ctx.Reply($"Teleporting to {playerName}");

[Command("teleport")] public void TeleportToCoords(ICommandContext ctx, float x, float y) => ctx.Reply($"Teleporting to {x}, {y}");


When there's ambiguity, players will be presented with options and can select using `.1`, `.2`, etc.

## Middleware

All commands execute through a middleware pipeline. You can add your own middleware by implementing `ICommandMiddleware` and adding it to the `CommandRegistry.Middlewares` list. 

Middleware is perfect for implementing permissions and roles, cooldowns, logging, command costs, rate limiting, and other cross-cutting concerns that should apply across commands even from other VCF plugins.

 [V Roles](https://github.com/Odjit/VRoles) is an example of a Middleware plugin for VCF that adds in roles that commands and users can get assigned.

Example middleware:

public class CooldownMiddleware : CommandMiddleware { public override bool CanExecute(ICommandContext ctx, CommandAttribute cmd, MethodInfo method) { // Your cooldown logic here return !IsOnCooldown(ctx.Name, cmd.Name); } }


## Response and Formatting Utilities

The framework includes rich formatting utilities for enhanced chat responses:

// Text formatting ctx.Reply($"{"Important".Bold()} message with {"emphasis".Italic()}"); ctx.Reply($"{"Warning".Underline()} - please read carefully");

// Colors (using predefined color constants) ctx.Reply($"{"Error".Color(Color.Red)} - something went wrong"); ctx.Reply($"{"Success".Color(Color.Green)} - command completed"); ctx.Reply($"{"Info".Color(Color.LightBlue)} message");

// Text sizing ctx.Reply($"{"Large Header".Large()} with {"small details".Small()}");

// Combining formatting ctx.Reply($"{"Critical".Bold().Color(Color.Red).Large()} system alert!");

// Paginated replies for long content var longText = "Very long text that might exceed chat limits...";

Read the full description on Thunderstore →

Highlights

From source data

Loaders

Runs on BepInEx.

Footprint

Rated a light load on a server.

Last update

Its author last shipped an update 6 mo ago.

VampireCommandFramework on Nxeon

From our catalogue
One-click install
Not available. One-click install isn't available for this game's mods yet. Download it and upload it to your server in Files.
Server type needed
BepInEx
Server load
light
Smallest plan we suggest
V Rising — 6 GB (6 GB RAM). This follows our own load rating above, not a benchmark.
Latest build
0.11.0, released 2026-04-15

Game versions by loader

LoaderGame versionsNewest
BepInEx

From 8 recorded builds of VampireCommandFramework.

Recent builds

BuildReleasedGame versionsLoaders
0.11.02026-04-15n/aBepInEx
0.10.42025-06-20n/aBepInEx
0.10.32025-05-31n/aBepInEx
0.10.22025-05-17n/aBepInEx
0.9.02024-05-26n/aBepInEx
0.8.22023-08-10n/aBepInEx

Dependencies

Declared by the newest build that lists any. Required ones are installed with it on one-click installs.

Run VampireCommandFramework on a V Rising server

Deploy a server above, then upload the file in Files.

What kind of mod it is

From the catalog
Listed on Thunderstore as “Content”

Libraries & compatibility

Foundations and fixes other mods build on. Usually installed because something else needs it.

Compatibility

Game
V Rising
Loaders
BepInEx
Requires
One-click install needs a BepInEx server.

Verified at the source

  • ✓ThunderstoreOfficial listing, checked 2026-10-02Open ↗
  • ✓Authordeca, as published on Thunderstore
  • ✓LicenseNot published by the sourceFree

VampireCommandFramework, answered

Generated from the mod’s own source data.

Which loaders does it support?

BepInEx.

Is it free?

Yes. VampireCommandFramework is free to download from Thunderstore.

How do I add it to my Nxeon server?

One-click install isn't available for this game's mods yet. Download VampireCommandFramework from Thunderstore and upload it to your Nxeon V Rising server in Files.

NxLabs

Run VampireCommandFramework on a V Rising server.

Deploy in about a minute from $12.00 a month, then upload VampireCommandFramework in Files.