From 5d25d0d240453188dc8f6fdece7f1ca02ca4f458 Mon Sep 17 00:00:00 2001 From: delta Date: Wed, 30 Sep 2026 08:30:06 +0000 Subject: [PATCH] Delta banner + DeltaBuild --- .../java/io/papermc/paper/PaperBootstrap.java | 15 ++++- .../java/me/sashegdev/delta/DeltaBuild.java | 67 +++++++++++++++++++ 2 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 paper-server/src/main/java/me/sashegdev/delta/DeltaBuild.java diff --git a/paper-server/src/main/java/io/papermc/paper/PaperBootstrap.java b/paper-server/src/main/java/io/papermc/paper/PaperBootstrap.java index d543b1b10..4c7639f31 100644 --- a/paper-server/src/main/java/io/papermc/paper/PaperBootstrap.java +++ b/paper-server/src/main/java/io/papermc/paper/PaperBootstrap.java @@ -1,7 +1,9 @@ package io.papermc.paper; +import java.util.ArrayList; import java.util.List; import joptsimple.OptionSet; +import me.sashegdev.delta.DeltaBuild; import net.minecraft.SharedConstants; import net.minecraft.server.Main; import org.slf4j.Logger; @@ -32,7 +34,9 @@ public final class PaperBootstrap { final String osArch = System.getProperty("os.arch"); final ServerBuildInfo bi = ServerBuildInfo.buildInfo(); - return List.of( + // Delta start - experimental core banner + final List messages = new ArrayList<>(4 + 16); + messages.add( String.format( "Running Java %s (%s %s; %s %s) on %s %s (%s)", javaSpecVersion, @@ -43,7 +47,9 @@ public final class PaperBootstrap { osName, osVersion, osArch - ), + ) + ); + messages.add( String.format( "Loading %s %s for Minecraft %s", bi.brandName(), @@ -51,5 +57,8 @@ public final class PaperBootstrap { bi.minecraftVersionId() ) ); + messages.addAll(DeltaBuild.startupMessages(bi)); + return List.copyOf(messages); + // Delta end } -} +} \ No newline at end of file diff --git a/paper-server/src/main/java/me/sashegdev/delta/DeltaBuild.java b/paper-server/src/main/java/me/sashegdev/delta/DeltaBuild.java new file mode 100644 index 000000000..9c30db65f --- /dev/null +++ b/paper-server/src/main/java/me/sashegdev/delta/DeltaBuild.java @@ -0,0 +1,67 @@ +package me.sashegdev.delta; + +import io.papermc.paper.ServerBuildInfo; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; + +/** + * Delta — экспериментальное ядро на базе Paper для узких задач. + * + *

Совместимость намеренно полная: группа и версия артефакта остаются + * стоковыми ({@code io.papermc.paper} / {@code 1.21.8-R0.1-SNAPSHOT}), все + * публичные пакеты Bukkit/Paper на месте. Отличие — только брендинг + * ({@code Brand-Name} => Delta, видно в F3 как {@code server: Delta}) + * и набор патчей, перечисленных ниже. + */ +public final class DeltaBuild { + + public static final String BRAND = "Delta"; + public static final String PACKAGE = "me.sashegdev.delta"; + + private DeltaBuild() { + } + + /** Зарегистрированные кастомные возможности: имя -> краткое описание состояния. */ + private static final Map> FEATURES = new LinkedHashMap<>(); + + /** + * Зарегистрировать кастомную фичу ядра. Вызывается из инициализаторов + * модулей до {@link #startupMessages(ServerBuildInfo)}. + */ + public static synchronized void register(final String name, final Supplier status) { + FEATURES.put(name, status); + } + + /** Баннер + предупреждение, которые печатаются в лог при старте. */ + public static List startupMessages(final ServerBuildInfo buildInfo) { + final List lines = new ArrayList<>(); + lines.add("-----------------------------------------------------"); + lines.add(" " + BRAND + " - experimental server core"); + lines.add(" version : " + buildInfo.brandName() + " " + buildInfo.asString(ServerBuildInfo.StringRepresentation.VERSION_FULL)); + lines.add(" mc : " + buildInfo.minecraftVersionId()); + lines.add(" api : " + buildInfo.brandId().asString()); + lines.add(" built : " + buildInfo.buildTime()); + if (buildInfo.gitCommit().isPresent()) { + lines.add(" commit : " + buildInfo.gitCommit().get() + + (buildInfo.gitBranch().isPresent() ? " (" + buildInfo.gitBranch().get() + ")" : "")); + } + lines.add(" NOTE : this core is built for a specific workload and is"); + lines.add(" NOT intended for public/general distribution."); + lines.add(" No stability or security guarantees are provided."); + lines.add("-----------------------------------------------------"); + if (FEATURES.isEmpty()) { + lines.add(" delta : no custom features registered"); + } else { + lines.add(" delta : custom features enabled"); + synchronized (DeltaBuild.class) { + FEATURES.forEach((name, status) -> lines.add(" - " + name + ": " + status.get())); + } + } + lines.add("-----------------------------------------------------"); + return lines; + } +} \ No newline at end of file