Delta banner + DeltaBuild

This commit is contained in:
SashegDev
2026-09-30 09:16:06 +00:00
parent a87830e51f
commit a56c29c3fd
2 changed files with 79 additions and 3 deletions
@@ -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<String> 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
}
}
@@ -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 для узких задач.
*
* <p>Совместимость намеренно полная: группа и версия артефакта остаются
* стоковыми ({@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<String, Supplier<String>> FEATURES = new LinkedHashMap<>();
/**
* Зарегистрировать кастомную фичу ядра. Вызывается из инициализаторов
* модулей до {@link #startupMessages(ServerBuildInfo)}.
*/
public static synchronized void register(final String name, final Supplier<String> status) {
FEATURES.put(name, status);
}
/** Баннер + предупреждение, которые печатаются в лог при старте. */
public static List<String> startupMessages(final ServerBuildInfo buildInfo) {
final List<String> 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;
}
}