The beating (molten) heart of the RisingV ecosystem.
“RisingV.Core is a core mod for V Rising that allows you to use RisingV mods.
It provides a set of APIs and utilities that make it easier to create and manage mods for V Rising.”
Features
Feature | Link | Description |
---|---|---|
Plugin lifecycle | Docs | deterministic load / unload / reload with safe dependency ordering using RisingPlugin |
Aspect abstraction | Docs | Aspect (a.k.a. Aspecting) is the pattern this SDK uses to give a domain object or ECS entity one or more typed views without polluting the underlying model with cross-cutting concerns. |
Engine modules | Docs | modular architecture for loading/unloading systems, processors and hooks like DamageEngine, DeathEngine, StatEngine, etc. |
Harmony Patches | Docs | a set of Harmony patches for common game hooks like DeathHook, StatChangeSystemHook, etc. The hooks all publish to the event bus, so you can subscribe to them without needing to patch the game code directly. |
Processors | Docs | a high-level abstraction for processing game objects/events in a type-safe manner, allowing you to create custom processors that can be registered with the engine. Mostly used in Harmony patches. |
Systems | Docs | a set of systems for common game mechanics like LootSystem, DamageTrackingSystem, ChatSystem, etc. These systems can be registered in your plugin or sometimes are pre-registered in an Engine. |
Event bus | Docs | decoupled, async pub-sub pipeline for game-wide events. |
Loot System | Docs | a system for managing item drops, including support for custom drop tables and loot generation. |
Extensions | Docs | Class extensions for common operations on Entity, PrefabGUID, and more. |
Note: This may not be the entire list—refer to the API docs for every class, interface, and extension method that RisingV.Core provides.
Installation
- Dependencies – ensure the following are installed:
- Download the latest
RisingV.Core.<version>.zip
from Releases - Extract the zip file into your
BepInEx
directory. - Restart your dedicated server or client.
Installing Engines
You can find the stock standard core engines in /Engines to find out which ones you need.
- Download the latest engine zip from Releases
- Extract the zip file into your
BepInEx
directory. - Restart your dedicated server or client.
- (Optional) You can make your engines a plugin dependency like so:
[BepInDependency("RisingV.Core.DamageEngine", SoftDependency)]
, marking this withSoftDependency
will ensure that your plugin doesn't brick if you remove the engine DLL's (which is recommended), you can adjust this as you require.
Development
- Add NuGet package
dotnet add package RisingV.Core
to your project. - Add
[BepInDependency("RisingV.Core")]
BepInEx dependency.
Using Aspects
If you want to make use of the aspects you just need to make sure you have the following:
- For default component control you need to install the
DefaultComponentEngine
(see: Installing Engines)- This is a drop-in engine that sets up the
DefaultComponentMonolith
- This is a drop-in engine that sets up the
- For custom component control you just need to make sure you provide your custom
ComponentMonolith
(see the default above)- Register your ComponentMonolith using the static
ComponentMonolith.CustomDefault = typeof(MyComponentMonolith)
- Register your ComponentMonolith using the static
Plugin quick start
using BepInEx;
using RisingV.Shared.Plugins;
using RisingV.Shared.Engines;
using RisingV.Core.Engines;
public class MyCoolPluginConfig() : PluginConfig(MyPluginInfo.PLUGIN_GUID, MyPluginInfo.PLUGIN_GUID)
{
public ConfigEntry<float> AttackModifier { get; set; } =
new("Gameplay", "AttackModifier", 1f, "Modifier for attack damage");
}
public class MyCoolPluginContext() : PluginContext(typeof(MyPluginInfo), new MyCoolPluginConfig());
[BepInPlugin(MyPluginInfo.PLUGIN_GUID, MyPluginInfo.PLUGIN_NAME, MyPluginInfo.PLUGIN_VERSION)]
[BepInDependency("RisingV.Core")]
public class Plugin : RisingPlugin<MyCoolPluginContext>
{
protected override void OnInitialize()
{
// Manually adding engines, you don't need to do this if you have `AutoLoadEngines` enabled (default: true).
EngineManager.AddEngine<ScriptingEngine>(this);
EngineManager.AddEngine<DamageEngine>(this);
EngineManager.AddEngine<DeathEngine>(this);
}
protected override void OnLoad()
{
// Plugin startup logic (pre-initialization)
}
protected override bool OnUnload()
{
return true;
}
// You can also override other methods to register systems, processors, databases, etc.
}
Configurations
RisingV.Core uses the RisingV.Shared.Config
base class for configuration management. This allows you to define your plugin's configuration in a type-safe manner, with support for hot-reloading and easy access to configuration values. It also means that majority of the systems/components in the RisingV ecosystem can be configured via json files.
BepInEx/configs
└── RisingV.Core
├── Engines
│ ├── AchievementEngine.cfg
│ ├── AdminEngine.cfg
│ ├── BuffEngine.cfg
│ ├── CastleEngine.cfg
│ ├── ClanEngine.cfg
│ ├── DamageEngine.cfg
│ ├── DeathEngine.cfg
│ ├── EquipmentEngine.cfg
│ ├── ItemEngine.cfg
│ ├── LootEngine.cfg
│ ├── SaveEngine.cfg
│ ├── SpawnEngine.cfg
│ └── StatEngine.cfg
├── RisingV.Core.cfg
├── Systems
│ ├── DamageTrackingSystem.cfg
│ └── LootSystem.cfg
└── RisingV.Core.cfg
Docs
For a deeper dive, API reference, and design docs see https://docs.risingv.dev/core.
Contributing
PRs that add new functionality—or improve existing ones—are warmly welcomed. Please open an issue first if you plan a large refactor. See CONTRIBUTING.md for more information.
Community
Join the V Rising Mod Community Discord for modding support, updates, and discussions!
License
GNU GPL-3.0. See LICENSE for details.