Version Numbering Converter

# VNC (Version Numbering Converter)

Version Numbering Converter (VNC) is a Java library for working with Minecraft versions across both numbering families:

– Classic Java-style versions such as `1.20.6` and `1.21.11`
– Year-based drop versions such as `24.1`, `25.4`, and `26.1.1`

It covers two use cases:

– Pure version modeling and conversion through `MinecraftVersion`, `VersionScheme`, and `MappingTable`
– Bukkit/Paper runtime detection through `VNC`, including server constants, player version resolution, protocol lookup, and version comparisons

## Highlights

– Exact historic mappings from `1.0.0` through `1.21.11`
– Drop support for current lines such as `25.4`, `26.1`, and `26.1.1`
– Protocol lookup for exact releases and published snapshots
– A runtime bridge for Bukkit/Paper with legacy-compatible constants like `SERVER_VERSION`
– String-based comparisons that correctly handle patch-sensitive boundaries like `1.20.5`

## Core API

### 1. Parse and inspect versions

“`java
MinecraftVersion classic = MinecraftVersion.parse(“1.21.11”);
MinecraftVersion drop = MinecraftVersion.parse(“26.1”);

classic.isClassic(); // true
classic.getVersion(); // “1.21.11”
classic.getProtocol(); // 774
classic.supportsHex(); // true

drop.isClassic(); // false
drop.getVersion(); // “26.1”
drop.getProtocol(); // 775
“`

### 2. Convert between numbering schemes

“`java
String dropName = VersionScheme.MOJANG.toDrop(“1.20.3”); // “23.2”
String classicName = VersionScheme.MOJANG.toClassic(“25.2.2”); // “1.21.8”

String customClassic = VersionScheme.CROA_CUSTOM.toClassic(“25.4”); // “1.22”
String customDrop = VersionScheme.CROA_CUSTOM.toDrop(“1.22.1”); // “25.4.1”
“`

### 3. Create your own mapping scheme

“`java
MappingTable table = new MappingTable()
.registerLine(30, 1, “1.50”, “1.50.1”)
.registerMapping(“1.51”, “30.2”);

VersionScheme scheme = VersionScheme.mapped(table);

scheme.toDrop(“1.50.1”); // “30.1.1”
scheme.toClassic(“30.2”); // “1.51”
“`

### 4. Resolve protocols

“`java
Integer protocol = MinecraftVersion.protocolForIdentifier(“1.20.6”); // 766
Integer snapshot = MinecraftVersion.protocolForIdentifier(“26.2-snapshot-3”);

MinecraftVersion newest = MinecraftVersion.fromProtocol(754); // 1.16.5
List all = MinecraftVersion.versionsForProtocol(767); // 1.21, 1.21.1
“`

## Bukkit / Paper runtime API

`VNC` exposes a runtime snapshot of the current server:

“`java
MinecraftVersion server = VNC.SERVER_MINECRAFT_VERSION;
String classic = VNC.SERVER_CLASSIC_VERSION;
String drop = VNC.SERVER_DROP_VERSION;
int protocol = VNC.SERVER_PROTOCOL;
double legacy = VNC.SERVER_VERSION;

boolean modernRegistry = VNC.isAtLeast(“1.20.5”);
boolean legacyCommands = VNC.isBefore(“1.13”);
boolean inRange = VNC.isBetween(“1.19”, “1.21.11”);
“`

Player version resolution uses ViaVersion when present and falls back to the server version otherwise:

“`java
MinecraftVersion playerVersion = VNC.player(player);

if (playerVersion.supportsHex()) {
// Safe to send RGB formatting to this player
}
“`

## Why use the string helpers?

`SERVER_VERSION` is still available for compatibility with older plugins, but patch-sensitive checks should prefer:

“`java
VNC.isAtLeast(“1.20.5”);
VNC.isBefore(“1.21.9”);
VNC.compare(VNC.SERVER_MINECRAFT_VERSION, “26.1”);
“`

That avoids the common limitations of comparing versions only as `double`.

## Requirements

– Java 8+
– For the Bukkit runtime helpers: a Bukkit/Paper-compatible runtime on the classpath
– Optional: ViaVersion, if you want `VNC.player(…)` to resolve the effective client version instead of the server version

Nilcord

What started as a niche project for a niche modloader for a niche Minecraft version has now been extended to all Minecraft versions (that I personally care about)!

# Nilcord | Yet another Discord bridge for Minecraft

Nilcord connects the chat of your Minecraft server to a specified [Discord](https://en.wikipedia.org/wiki/Discord) text channel, using a Discord bot and (optionally) webhook.

## Installation

To get the mod set up, simply place the mod file in the `mods` directory (or `nilmods` with [NilLoader](https://git.sleeping.town/Nil/NilLoader)), start your Minecraft server, and wait for it to generate the config file (and crash because it’s not yet populated).

The config file, named `nilcord.toml`, is found in the `config` folder, and is pretty self-explanatory.

(default configuration)

“`toml
# Settings pertaining to Discord itself
[discord]
# The Discord bot token to use
# default: EMPTY
token = “EMPTY”
# The Discord channel ID for the bot to send messages to / receive messages from
# default: EMPTY
channel_id = “EMPTY”

# Settings pertaining to the Discord webhook
[discord.webhook]
# Whether to use a webhook for sending players’ chat messages to Discord
# default: false
enabled = false
# The webhook URL to use
# default: EMPTY
url = “EMPTY”

# Settings pertaining to Minecraft itself
[minecraft]
# Whether to allow mentioning Discord users from Minecraft
# default: false
enable_mentions = false
# Whether to allow mentioning @everyone and @here from Minecraft
# default: false
enable_everyone_and_here = false
# Whether to show Discord message attachments in-game
# default: true
show_attachments = true
# Whether to show messages from other Discord bots in-game
# default: false
show_bot_messages = false

# Settings pertaining to message formatting
[formatting]

# Settings pertaining to messages visible in Discord
# Available placeholders:
[formatting.discord]
# Server start message
# Available placeholders: N/A
# default: **Server started!**
server_start_message = “**Server started!**”
# Server stop message
# Available placeholders: N/A
# default: **Server stopped!**
server_stop_message = “**Server stopped!**”
# Player chat messages
# Additional placeholders:
# default: **<>**
chat_message = “**<>**
# Player join messages
# Additional placeholders: N/A
# default: > ** joined the game**
join_message = “> ** joined the game**”
# Player leave messages
# Additional placeholders: N/A
# default: > ** left the game**
leave_message = “> ** left the game**”
# Player advancement messages
# Additional placeholders:
# default: > **** has just earned the achievement **[]**n> > __
advancement_fallback_message = “> **** has just earned the achievement **[]**n> \> __”
# default: > **** has completed the challenge **[]**n> > __
advancement_challenge_message = “> **** has completed the challenge **[]**n> \> __”
# default: > **** has reached the goal **[]**n> > __
advancement_goal_message = “> **** has reached the goal **[]**n> \> __”
# default: > **** has made the advancement **[]**n> > __
advancement_task_message = “> **** has made the advancement **[]**n> \> __”
# Player death messages
# Additional placeholders:
# default: ** died:** __
death_message = “** died:** __”

# Settings pertaining to messages sent from the webhook, if enabled
[formatting.discord.webhook]
# The URL to use for the webhook’s avatar
# Additional placeholders:
# default: https://visage.surgeplay.com/bust/128/
avatar_url = “https://visage.surgeplay.com/bust/128/
# The webhook’s username
# Additional placeholders: N/A
# default:
username = “
# Player chat messages
# Additional placeholders:
# default:
chat_message = “

# Settings pertaining to messages visible in Minecraft
# Available placeholders:
[formatting.minecraft]
# Discord messages
# Additional placeholders:
# default: [Discord] ‘><>
discord_message = “[Discord] ‘><>
# Username format
# Additional placeholders: N/A
# default: ‘>‘>
username_format = “‘>‘>
# Mention format
# Additional placeholders: N/A
# default: ‘>@
mention_format = “‘>@
# Reply format
# Additional placeholders:
# default: ‘>: ‘>[‘>]
reply_format = “‘>: ‘>[‘>] ”
# Attachment format
# Additional placeholders:
# default: ‘>[Attachment]
attachment_format = “‘>[Attachment]”
“`

(Note that this is the config file for Nilcord `2.1.0+1.20.4+fabric`. It may look different on other versions.)

Only the `token` and `channel_id` fields (under the `discord` category) are *strictly required* to be filled out; the mod falls back to sensible defaults for everything else. But feel free to change it to your liking!

## Notes

For setting up a Discord application (to get a bot token), follow discord.js’ guide: [Setting up a bot application | discord.js Guide](https://discordjs.guide/preparations/setting-up-a-bot-application.html)

For finding a Discord channel’s “Channel ID”, follow Discord’s guide: [Where can I find my User/Server/Message ID? – Discord](https://support.discord.com/hc/en-us/articles/206346498-Where-can-I-find-my-User-Server-Message-ID#h_01HRSTXPS5FMK2A5SMVSX4JW4E)

With 1.21.1 and below, the Fabric (and NeoForge!?) versions can also make use of the [Simplified Text Format](https://placeholders.pb4.eu/user/text-format/), as well as placeholders supplied by [Text Placeholder API](https://modrinth.com/mod/placeholder-api) and the various mods that support it.

With 1.21.2 and above, the Fabric versions allow using [QuickText](https://placeholders.pb4.eu/user/quicktext/) as well.

The Forge 1.7.10 version has additional support for [ChromatiCraft](https://www.curseforge.com/minecraft/mc-mods/chromaticraft)’s progression messages, as well as [ServerUtilities](https://github.com/GTNewHorizons/ServerUtilities)’ AFK messages.

***

Comments? Questions? Suggestions? Demands? Open an issue on the [issue tracker](https://github.com/unilock/nilcord/issues)!

Let Your Friend Eating!

# Let Your Friend Eating!










Bukkit Plugin

### Description

**Let Your Friend Eating!** adds a simple but fun mechanic to Minecraft:
You can feed other players directly by right-clicking them while holding food.
The target instantly consumes the item and receives all associated hunger, saturation, effects, and sounds.

Let Your Friends Eat! Banner

———-


Feeding a friend in Minecraft

### Features

– **Player Feeding**
Right-click another player with food to feed them immediately.

– **Food Effects Transfer**
Any status effects from the food (such as golden apples or suspicious stews) are applied to the target.

– **Audio Feedback**
Eating and burping sounds play during the interaction.

– **Hunger & Saturation Gain**
The target receives proper hunger and saturation values from the item.

– **Particle Effects**
Optional positive particle effects appear when feeding.

– **Cooldown System**
Prevents rapid feeding; fully configurable.

– **Feeding Statistics**
Track how many times you’ve fed others using `/feedfriend stats`.

– **Toggle Controls**
Players can enable or disable being fed using `/feedfriend toggle`.

– **Configuration Support**
Clean and organized configuration UI via Cloth Config (where supported).

———-

### Config (1.0.4 LTS)

– **Fabric**
Configurable through Mod Menu, commands, and `config/letyourfriendeating.toml`

– **Forge**

– Version 1.0.4: `saves//serverconfig/letyourfriendeating-server.toml`

– Version 1.0.4-1: `config/letyourfriendeating-settings.json`

———-

### Version Feature Matrix

| Version | Feed | Food Effects | Sound | Particle | Command | Config |
| :-: | :-: | :-: | :-: | :-: | :-: | :-: |
| **1.0.0** | Yes | No | No | No | No | No |
| **1.0.1** | Yes | Yes | Yes | Yes | No | No |
| **1.0.2** | Yes | Yes | Yes | Yes | No | No |
| **1.0.3** | Yes | Yes | Yes | Yes | Yes | No |
| **1.0.4 (LTS)** | Yes | Yes | Yes | Yes | Yes | Yes |
| **1.1.0+ (Refactor)** | Yes | Yes | Yes | Yes | Yes | Yes |
| **Beta** | Yes | No | Partial | Partial | Partial | No |
| **Alpha** | Partial | No | Partial | No | Partial | No |

———-

### How to Use

1. Hold any food item.

2. Right-click another player.

3. They instantly consume the food and gain all effects.

———-

### Compatibility

– Works in both **Singleplayer** and **Multiplayer**

– Compatible with **Fabric**, **Quilt**, **Forge**, and **NeoForge**

– Supported Minecraft versions:
`1.10.2`, `1.11.2`, `1.12.2`, `1.13.x`, `1.14.x`, `1.15.x`, `1.16.x`, `1.17x`, `1.18.x`, `1.19.x`, `1.20.x`, `1.21.x`

– Ongoing cross-mod compatibility improvements (1.0.4-hotfix)

– If you want to run mods on **Quilt**, you can use the **Fabric** version, but compatibility and functionality are not guaranteed.

———-

### Links

– [GitHub Source](https://github.com/TamKungZ/letyourfriendeating)

– [CurseForge Project](https://www.curseforge.com/minecraft/mc-mods/let-your-friend-eating)

———-

### License Notice

Starting **May 10, 2025**, this project uses the **Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 (CC BY-NC-ND 4.0)** license.

Under this license:

– Attribution is required

– Commercial use is not allowed

– Modifications and derivatives are not permitted

Versions released **before May 10, 2025** remain under the MIT License.

Details: [https://creativecommons.org/licenses/by-nc-nd/4.0/](https://creativecommons.org/licenses/by-nc-nd/4.0/)

———-


By

Half-Life Menu

## Half-Life Menu
This mod replaces the title screen with the one from Half-Life 1’s “steam-legacy” build and replaces the background on all menus that have the panorama with the stretched image of Gordon Freeman. It also replaces the loading and resource reload screens with ones from Half-Life 1 (does not work on forge!)
![TitleScreen](https://cdn.modrinth.com/data/oTMKcnZa/images/1f9845c249b0ff7edaf9d61e18511f78b8076ab4.png)

Old v2.1 builds have been removed due to barely working (ex. missing textures on all versions besides forge) and being ugly

Agenta

# Agenta

A authserver and skin fix for legacy versions of minecraft.

# Compatibility

Requires Java 7. (In theory this can be built for Java 5, but I lack the build tools required for that.)
If running this on Java 12 and newer, please add the following JVM argument: `–add-exports java.base/sun.net.www.protocol.http=ALL-UNNAMED`

1. As a mod: The same Jar will run on forge, bukkit and Risugami’s modloader for Minecaft versions Alpha 1.0.4 to Minecraft release 1.7.10 (These are merely the versions I tested)
2. As a JavaAgent: Add the following JVM argument: `-javaagent:{path}/agent.jar` (replace path with the location of the agent.jar)
3. Inline/static: In this setup, Agenta is essentially taking over the role of Launching minecraft. Add the following JVM argument and change out `{mainClass}` as needed depending on which minecraft version you are launching: `-Dagenta.main.class={mainClass}`
4. As a Bukkit plugin (Tested with bukkit for Minecraft Beta 1.2_01)

# JVM/Congig settings

Non of these are needed to launch Agenta. The available contexts are
“*” => ALL
“static” => When Agenta is launched as the main class with the expectation of chainloading another class manually.
“config” => Only appears in the config file.

Context property Argument description
* agenta.assets.fml -Dagenta.assets.fml={value} A link to an archive Agenta should forward legacy forge download requests to
* agenta.assets.index -Dagenta.assets.index={value} The URL for the asset index Agenta should use as a base
* agenta.assets.routing -Dagenta.assets.routing=true Should agenta reroute requests the mojang’s asset servers? (default: “true”)
* agenta.assets.url -Dagenta.assets.url={value} The URL for the resource server Agenta should pull assets from
* agenta.prt.color -Dagenta.prt.color=false Pass the value ‘false’ to disable colour printing.
* agenta.prt.debug -Dagenta.prt.debug=false Should agenta show debug messages?
* agenta.save.file -Dagenta.save.file=saves.json When handling saving for certain versions of old Minecraft that relied on long dead mojang endpoints, what should agenta call the save file? (default: “saves.json”)
* agenta.skin.resize -Dagenta.skin.resize=true Should agenta try to resize skins from 64×64 to 64×32 for better compatibility? (default: “true”)
* agenta.skin.merge -Dagenta.skin.merge=true Should Agenta take multi layered skins and attempt to flatten the layers down? (default: “true”)
* agenta.skin.cache -Dagenta.skin.cache=true Should agenta cache skin lookups? (default: “true”)
config agenta.config.version The version of agenta that generated a set config file. Will be used to detect if agenta should upgrade a set config file
static agenta.main.class -Dagenta.main.class={value} The class Agenta should try to load next when running in static/inline mode

# Fixes

– Skin support for pre 1.7.10 versions
– Cape support for pre 1.7.10 versions
– Sound for versions of the game that predate 1.6
– World savings for certain pre-alpha builds (experimental)
– Forge 1.5.2 being unable to fetch it’s library files (experimental)

# Note

– The same jar will work for almost every version of minecraft that predates Release 1.8
– Any miscellaneous fabric based modloader _should_ be supported.
– NilLoader can load Agenta. (Agenta doesn’t meet the criteria of a [NilLoader mod](https://git.sleeping.town/Nil/NilLoader#:~:text=A%20NilLoader%20mod%20includes%20a%20complete%20copy%20of%20NilLoader%20within%20itself))
– Some ancient versions of Forge/modloader may require you to load Agenta as a jar mod.
– LiteLoader inforces compatibility checks and so can never be fully supported