logo Pustalorc

portfolio

Project Portfolio

DbConnection Wrapper

MIT

A NuGet library that provides abstractions for any ADO.NET database connection to reduce boilerplate.

Read more

This project was split from MySqlConnectorWrapper as to provide a fully globally compatible wrapper for any database connection libraries that inherit from ADO.NET's DbConnection class. It currently supports running all queries asynchronously, running queries in parallel, automatic rollbacks on transactions in the case of an issue, and a conversion from an open reader to in memory structured data of a reader's result.

View source

Base Clustering

LGPL-3.0

An Unturned Plugin that groups up barricades & structures around the map to define a player built base.

Read more

This project was meant to provide the ability to define, use, interact, and modify as one wants a player built base within the game 'Unturned'. It uses primitive clustering methods, as none of the objects are linked or related, so all of them have to be investigated.

View source

Logging Library

MIT

A custom C#/.NET logging library that supports static calling and multiple log targets with pipes.

Read more

This project was made due to the requirements from Log4Net and other logging libraries to use dependency injection with services, which is not available within Unturned or RocketMod. The library allows for full customization of logging capabilities, including multiple log targets (console, file, void, and can be extended) and piping logs to multiple targets at once.

View source

MySqlConnectorWrapper

MIT

A NuGet library that wraps both MySql.Data (Connector/NET) and MySqlConnector to remove duplicate boilerplate.

Read more

This library reduces the duplicate code needed to interact with either of .NET's two main MySQL connector packages, building on top of DbConnectionWrapper for the underlying ADO.NET abstractions. It's used across most of my other .NET projects that need a MySQL connection.

View source

Unturned Server Manager

GPL-3.0

A lightweight Windows application to make creating, running, and modifying Unturned servers a simple user experience.

Read more

This project is one of my first C#/.NET projects and I have used it to show my learning progress with .NET, as well as with programming in general. The program still functions as intended, but might have some slight issues, as it is currently unmaintained.

View source

RocketMod Commands Extended

LGPL-3.0

A NuGet library that is meant to provide abstractions to improve and extend RocketMod's commands.

Read more

This project is made to standarize commands, as well as make them a lot easier to work with. It brings translations built into the commands themselves, multithreading and asynchronous support, and automatic parsing of commands into them. This allows a developer to significantly speed up development of commands, as they no longer have to write multiple if statements and custom checks for the command arguments, the translations, or if their code needs to run on a separate thread.

View source

AsyncTaskDispatcher

LGPL-3.0

An Unturned Plugin to allow developers to queue asynchronous tasks on a separate thread, like RocketMod's TaskDispatcher.

Read more

This plugin mirrors RocketMod's own TaskDispatcher, but lets developers queue asynchronous work onto a separate thread instead of the main thread, with configurable delays for empty or not-yet-ready queues.

View source

Async Threading Utils

MIT

A .NET library that adds a BackgroundWorker and TaskQueue with Async support.

Read more

.NET provides a BackgroundWorker to work on a separate thread but with non async code. There was a need for async support whilst still working on a separate thread without needing to run Task.Run or similar, so this was developed. Additionally, a TaskQueue which uses the BackgroundWorker was added so one can queue a lot of asynchronous tasks and execute them sequentally.

View source

RocketMod Services

MIT

RocketMod Service System, with an event bus included. Fully static and meant as a library.

Read more

A small static service-locator library for RocketMod, with a built-in event bus, letting plugins register and retrieve shared services without tight coupling between plugins.

View source

Frequency Cache

MIT

Cache system with focus on keeping frequently used elements.

Read more

A lightweight in-memory cache library whose eviction strategy favours elements that are both frequently and recently used, aiming for better hit rates than a plain LRU cache with minimal performance overhead.

View source

Buildable Abstractions

LGPL-3.0

Buildable Abstractions library for Unturned, with some commands included for plugin functionality.

Read more

A library that abstracts every buildable (barricade and structure) in Unturned behind a single consistent API, including a sample plugin with commands to find and remove buildables by filter. The abstraction layer here became the basis for the buildable events and grouping optimizations I later upstreamed into OpenMod.

View source

OpenMod

MIT/Custom

Contributed to the OpenMod project.

Read more

OpenMod is best described by the creators: 'OpenMod is a plugin framework for .NET. It supports authorization, plugin configurations, internalization, command handling and much more. OpenMod can be used for games, bot frameworks, web servers or anything else.' I landed five merged pull requests: the initial abstraction of buildables for Unturned, universal buildable events, transform-related buildable events, a buildable-destruction bug fix, and a performance optimization for buildable grouping — building directly on the abstraction work from my own Buildable Abstractions library.

View source

Rocket.Unturned

MIT

Contributed fixes to the original RocketMod implementation for Unturned.

Read more

Rocket.Unturned is the Unturned 3 implementation of RocketMod, the .NET game server plugin framework that predates OpenMod. I contributed a fix restoring vanish and other player-manager functionality that had regressed on the legacy branch, and fixed a bug in UnturnedPlayerManager.Ban().

View source