Version Numbering Converter

Вам не нравится новая система нумерации версий, похожая на систему Apple? Нам тоже! Нравится? Неважно! Вас волнует нумерация версий и как конвертировать старые версии в новые или наоборот? Тогда этот проект для вас!

173

Быстрое задание

Как далеко вы сможете убежать, прежде чем вас поймают толпы?

Version Numbering Converter

VNC (конвертер номеров версий)

Version Numbering Converter (VNC) — это Java-библиотека для работы с версиями Minecraft в обоих семействах нумерации:

- Классические версии в стиле Java, такие как `1.20.6` и `1.21.11` - Версии, обновляемые по годам, такие как `24.1`, `25.4` и `26.1.1`

Он охватывает два варианта использования:

- Моделирование и преобразование версий с помощью `MinecraftVersion`, `VersionScheme` и `MappingTable`. - Определение среды выполнения Bukkit/Paper с помощью `VNC`, включая константы сервера, определение версии игрока, поиск протокола и сравнение версий.

Основные моменты:

- Точные исторические сопоставления версий от `1.0.0` до `1.21.11` - Отказ от поддержки текущих версий, таких как `25.4`, `26.1` и `26.1.1` - Поиск по протоколу для точных релизов и опубликованных снимков - Мост среды выполнения для Bukkit/Paper с совместимыми с устаревшими версиями константами, такими как `SERVER_VERSION` - Сравнения на основе строк, корректно обрабатывающие границы, чувствительные к патчам, например, `1.20.5`

Основной API

1. Анализ и проверка версий.

```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. Преобразование между схемами нумерации.

```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. Создайте собственную схему сопоставления.

```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. Разрешение протоколов

```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 all = MinecraftVersion.versionsForProtocol(767); // 1.21, 1.21.1 ```

API среды выполнения Bukkit / Paper

VNC предоставляет снимок текущего состояния сервера во время выполнения:

```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"); ```

При определении версии плеера используется ViaVersion, если эта функция присутствует, в противном случае используется версия сервера:

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

if (playerVersion.supportsHex()) { // Безопасно отправлять формат RGB этому плееру } ```

Зачем использовать вспомогательные функции для работы со строками?

Параметр `SERVER_VERSION` по-прежнему доступен для обеспечения совместимости со старыми плагинами, но при проверке на чувствительность к патчам следует отдавать предпочтение следующим параметрам:

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

Это позволяет избежать распространенных ограничений, связанных со сравнением версий только как «двойных».

Требования

- Java 8+ - Для вспомогательных функций среды выполнения Bukkit: среда выполнения, совместимая с Bukkit/Paper, в classpath - Необязательно: ViaVersion, если вы хотите, чтобы `VNC.player(...)` определял эффективную версию клиента вместо версии сервера

ОБЪЯВЛЕНИЯ
RU — Russian