Skip to content
This repository was archived by the owner on Oct 13, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/build-1218.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build Nycticorax 1.21.8
name: Build Sapling 1.21.8

on:
push:
Expand Down Expand Up @@ -85,9 +85,9 @@ jobs:
run: ./gradlew createMojmapPaperclipJar --stacktrace --parallel --no-daemon

- name: Rename Paperclip JARs
run: mv nycticorax-server/build/libs/nycticorax-paperclip-1.21.8-R0.1-SNAPSHOT-mojmap.jar ./nycticorax-1.21.8.jar
run: mv sapling-server/build/libs/sapling-paperclip-1.21.8-R0.1-SNAPSHOT-mojmap.jar ./sapling-1.21.8.jar
- name: Upload Leaf as build artifact
uses: actions/upload-artifact@v4
with:
name: Nycticorax 1.21.8
path: ./nycticorax-1.21.8.jar
name: Sapling 1.21.8
path: ./sapling-1.21.8.jar
6 changes: 3 additions & 3 deletions .github/workflows/build-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ jobs:
run: ./gradlew -Dorg.gradle.jvmargs="${{ env.GRAALVM_ARGS }}" createMojmapPaperclipJar --stacktrace --no-daemon

- name: Rename Paperclip JARs
run: mv nycticorax-server/build/libs/nycticorax-paperclip-1.21.8-R0.1-SNAPSHOT-mojmap.jar ./nycticorax-1.21.8.jar
run: mv sapling-server/build/libs/sapling-paperclip-1.21.8-R0.1-SNAPSHOT-mojmap.jar ./sapling-1.21.8.jar
- name: Upload Leaf as build artifact
uses: actions/upload-artifact@v4
with:
name: Nycticorax 1.21.8
path: ./nycticorax-1.21.8.jar
name: Sapling 1.21.8
path: ./sapling-1.21.8.jar
6 changes: 3 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ leaf-server/
paper-api/
paper-server/

nycticorax-api/build.gradle.kts
nycticorax-server/build.gradle.kts
sapling-api/build.gradle.kts
sapling-server/build.gradle.kts

nycticorax-server/src/minecraft
sapling-server/src/minecraft
13 changes: 5 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
## Nycticorax
## Sapling

![I'm penguin](public/image/impenguin.png)

[![Github Actions Build](https://img.shields.io/github/actions/workflow/status/Winds-Studio/Nycticorax/build-1218.yml?&style=for-the-badge&colorA=19201a&colorB=298046)](https://github.com/Winds-Studio/Leaf/actions)⠀

**Nycticorax** is an experimental fork of [Leaf](https://leafmc.one/).
[![Github Actions Build](https://img.shields.io/github/actions/workflow/status/Winds-Studio/Sapling/build-1218.yml?&style=for-the-badge&colorA=19201a&colorB=298046)](https://github.com/Winds-Studio/Sapling/actions)

**Sapling** is an experimental fork of [Leaf](https://leafmc.one/).

> [!WARNING]
> Nycticorax is an experimental fork, DO NOT use in production, use as your own risk.
> Sapling is an experimental fork, DO NOT use in production, use as your own risk.

**English** | [中文](public/readme/README_CN.md)

Expand All @@ -17,4 +14,4 @@
- QQ Group: `619278377`

## ⚖️ License
See Leaf's [License](https://github.com/Winds-Studio/Leaf?tab=readme-ov-file#%EF%B8%8F-license)
Sapling is a subproject of Leaf that uses same [License](https://github.com/Winds-Studio/Leaf?tab=readme-ov-file#%EF%B8%8F-license).
12 changes: 6 additions & 6 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -68,23 +68,23 @@ paperweight {

patchFile {
path = "leaf-server/build.gradle.kts"
outputFile = file("nycticorax-server/build.gradle.kts")
patchFile = file("nycticorax-server/build.gradle.kts.patch")
outputFile = file("sapling-server/build.gradle.kts")
patchFile = file("sapling-server/build.gradle.kts.patch")
}
patchFile {
path = "leaf-api/build.gradle.kts"
outputFile = file("nycticorax-api/build.gradle.kts")
patchFile = file("nycticorax-api/build.gradle.kts.patch")
outputFile = file("sapling-api/build.gradle.kts")
patchFile = file("sapling-api/build.gradle.kts.patch")
}
patchRepo("paperApi") {
upstreamPath = "paper-api"
patchesDir = file("nycticorax-api/paper-patches")
patchesDir = file("sapling-api/paper-patches")
outputDir = file("paper-api")
}
patchDir("leafApi") {
upstreamPath = "leaf-api"
excludes = listOf("build.gradle.kts", "build.gradle.kts.patch", "paper-patches")
patchesDir = file("nycticorax-api/leaf-patches")
patchesDir = file("sapling-api/leaf-patches")
outputDir = file("leaf-api")
}
}
Expand Down
Binary file removed public/image/impenguin.png
Binary file not shown.
11 changes: 5 additions & 6 deletions public/readme/README_CN.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
## Nycticorax
## Sapling

![我是企鹅](../image/impenguin.png)
[![Github Actions 构建](https://img.shields.io/github/actions/workflow/status/Winds-Studio/Sapling/build-1218.yml?label=%e6%9e%84%e5%bb%ba&style=for-the-badge&colorA=19201a&colorB=298046)](https://github.com/Winds-Studio/Sapling/actions)

[![Github Actions 构建](https://img.shields.io/github/actions/workflow/status/Winds-Studio/Nycticorax/build-1218.yml?label=%e6%9e%84%e5%bb%ba&style=for-the-badge&colorA=19201a&colorB=298046)](https://github.com/Winds-Studio/Leaf/actions)⠀

**Nycticorax** 是 [Leaf](https://leafmc.one/) 的实验性分支。
**Sapling** 是 [Leaf](https://leafmc.one/) 的实验性分支。

> [!WARNING]
> Nycticorax 是实验性分支, 不要在生产环境中使用, 风险自负。
> Sapling 是实验性分支, 不要在生产环境中使用, 风险自负。

[English](../../README.md) | **中文**

Expand All @@ -16,4 +15,4 @@
- QQ社区群: `619278377`

## ⚖️ 许可证
请参阅 Leaf [许可](https://github.com/Winds-Studio/Leaf?tab=readme-ov-file#%EF%B8%8F-license)
Sapling 是 Leaf 的子项目, 使用和 Leaf 相同的 [许可](https://github.com/Winds-Studio/Leaf?tab=readme-ov-file#%EF%B8%8F-license).
24 changes: 24 additions & 0 deletions sapling-api/paper-patches/features/0001-Rebrand.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Pascalpex <[email protected]>
Date: Tue, 22 Jul 2025 08:58:30 +0200
Subject: [PATCH] Rebrand


diff --git a/src/main/java/io/papermc/paper/ServerBuildInfo.java b/src/main/java/io/papermc/paper/ServerBuildInfo.java
index c198304386e83edc2ec582fdf66d97d624004771..8a7936606873a09c222746b5b90ec1e2049a6f9a 100644
--- a/src/main/java/io/papermc/paper/ServerBuildInfo.java
+++ b/src/main/java/io/papermc/paper/ServerBuildInfo.java
@@ -41,6 +41,13 @@ public interface ServerBuildInfo {
Key BRAND_LEAF_ID = Key.key("winds-studio", "leaf");
// Leaf end - Rebrand

+ // Sapling start - Rebrand
+ /**
+ * The brand id for Sapling.
+ */
+ Key BRAND_NYCTICORAX_ID = Key.key("winds-studio", "sapling");
+ // Sapling end - Rebrand
+
/**
* Gets the {@code ServerBuildInfo}.
*
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
}

- activeFork = leaf
+ // Nycticorax start - project setup
+ val nycticorax = forks.register("nycticorax") {
+ // Sapling start - project setup
+ val sapling = forks.register("sapling") {
+ forks = leaf
+ upstream.patchRepo("paperServer") {
+ upstreamRepo = leaf.patchedRepo("paperServer")
+ patchesDir = rootDirectory.dir("nycticorax-server/paper-patches")
+ patchesDir = rootDirectory.dir("sapling-server/paper-patches")
+ outputDir = rootDirectory.dir("paper-server")
+ }
+ upstream.patchDir("leafServer") {
Expand All @@ -22,28 +22,28 @@
+ "build.gradle.kts",
+ "build.gradle.kts.patch"
+ )
+ patchesDir = rootDirectory.dir("nycticorax-server/leaf-patches")
+ patchesDir = rootDirectory.dir("sapling-server/leaf-patches")
+ outputDir = rootDirectory.dir("leaf-server")
+ }
+ }
+
+ activeFork = nycticorax
+ // Nycticorax end - project setup
+ activeFork = sapling
+ // Sapling end - project setup
// Leaf end - project setup

spigot {
@@ -127,10 +_,14 @@
main {
java { srcDir("../paper-server/src/main/java") }
resources { srcDir("../paper-server/src/main/resources") }
+ java { srcDir("../leaf-server/src/main/java") } // Nycticorax - project setup
+ resources { srcDir("../leaf-server/src/main/resources") } // Nycticorax - project setup
+ java { srcDir("../leaf-server/src/main/java") } // Sapling - project setup
+ resources { srcDir("../leaf-server/src/main/resources") } // Sapling - project setup
}
test {
java { srcDir("../paper-server/src/test/java") }
resources { srcDir("../paper-server/src/test/resources") }
+ java { srcDir("../leaf-server/src/test/java") } // Nycticorax - project setup
+ resources { srcDir("../leaf-server/src/test/resources") } // Nycticorax - project setup
+ java { srcDir("../leaf-server/src/test/java") } // Sapling - project setup
+ resources { srcDir("../leaf-server/src/test/resources") } // Sapling - project setup
}
}

Expand All @@ -52,7 +52,7 @@

dependencies {
- implementation(project(":leaf-api")) // Leaf - project setup
+ implementation(project(":nycticorax-api")) // Leaf - project setup // Nycticorax - project setup
+ implementation(project(":sapling-api")) // Leaf - project setup // Sapling - project setup

// Leaf start - Libraries
implementation("com.github.thatsmusic99:ConfigurationMaster-API:v2.0.0-rc.3") { // Leaf config
Expand All @@ -61,17 +61,17 @@
attributes(
"Main-Class" to "org.bukkit.craftbukkit.Main",
- "Implementation-Title" to "Leaf", // Leaf - Rebrand
+ "Implementation-Title" to "Nycticorax", // Leaf - Rebrand // Nycticorax - Rebrand
+ "Implementation-Title" to "Sapling", // Leaf - Rebrand // Sapling - Rebrand
"Implementation-Version" to implementationVersion,
"Implementation-Vendor" to date,
- "Specification-Title" to "Leaf", // Leaf - Rebrand
+ "Specification-Title" to "Nycticorax", // Leaf - Rebrand // Nycticorax - Rebrand
+ "Specification-Title" to "Sapling", // Leaf - Rebrand // Sapling - Rebrand
"Specification-Version" to project.version,
"Specification-Vendor" to "Winds Studio", // Leaf - Rebrand
- "Brand-Id" to "winds-studio:leaf", // Leaf - Rebrand
- "Brand-Name" to "Leaf", // Leaf - Rebrand
+ "Brand-Id" to "winds-studio:nycticorax", // Leaf - Rebrand // Nycticorax - Rebrand
+ "Brand-Name" to "Nycticorax", // Leaf - Rebrand // Nycticorax - Rebrand
+ "Brand-Id" to "winds-studio:sapling", // Leaf - Rebrand // Sapling - Rebrand
+ "Brand-Name" to "Sapling", // Leaf - Rebrand // Sapling - Rebrand
"Build-Number" to (build ?: ""),
"Build-Time" to buildTime.toString(),
"Git-Branch" to gitBranch,
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Pascalpex <[email protected]>
Date: Tue, 22 Jul 2025 09:26:45 +0200
Subject: [PATCH] Version fetcher without build number


diff --git a/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java b/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java
index 4c69c10f6b4dacb33ed3eb55437ec88422792f71..07dc01376499fed82bdb7e8982afb5b500f66fce 100644
--- a/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java
+++ b/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java
@@ -66,7 +66,7 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher {
public @NotNull Component getVersionMessage() {
final Component updateMessage;
final ServerBuildInfo build = ServerBuildInfo.buildInfo();
- if (build.buildNumber().isEmpty() || build.gitCommit().isEmpty()) { // Gale - branding changes - version fetcher
+ if (build.buildNumber().isEmpty() && build.gitCommit().isEmpty()) { // Gale - branding changes - version fetcher // Nycticorax - do not require build number
updateMessage = text("You are running a development version without access to version information", color(0xFF5300));
} else {
updateMessage = getUpdateStatusMessage(this.gitHubOrganizationName + "/" + this.gitHubRepoName, build); // Gale - branding changes - version fetcher
45 changes: 45 additions & 0 deletions sapling-server/minecraft-patches/features/0001-Rebrand.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Pascalpex <[email protected]>
Date: Tue, 22 Jul 2025 09:18:37 +0200
Subject: [PATCH] Rebrand


diff --git a/net/minecraft/CrashReport.java b/net/minecraft/CrashReport.java
index 18e63dca2a315ad01fa5b80ec126f4eac71f45fd..d1aa941a91836fa1da52f5d4b2b6c71531d52082 100644
--- a/net/minecraft/CrashReport.java
+++ b/net/minecraft/CrashReport.java
@@ -30,7 +30,7 @@ public class CrashReport {
private boolean trackingStackTrace = true;
private StackTraceElement[] uncategorizedStackTrace = new StackTraceElement[0];
private final SystemReport systemReport = new SystemReport();
- private List<String> extraInfo = List.of("", "DO NOT REPORT THIS TO PAPER! REPORT TO LEAF INSTEAD!", ""); // Leaf - Rebrand
+ private List<String> extraInfo = List.of("", "DO NOT REPORT THIS TO PAPER! REPORT TO NYCTICORYX INSTEAD!", ""); // Leaf - Rebrand // Sapling - Rebrand

public CrashReport(String title, Throwable exception) {
io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(exception); // Paper
diff --git a/net/minecraft/world/damagesource/DamageSource.java b/net/minecraft/world/damagesource/DamageSource.java
index 5a663f66820d95449ccf9117e72159a10bcd04d6..abd0dbc1e409162f381d9866047b4ba84b44c4c1 100644
--- a/net/minecraft/world/damagesource/DamageSource.java
+++ b/net/minecraft/world/damagesource/DamageSource.java
@@ -75,7 +75,7 @@ public class DamageSource {

public DamageSource eventEntityDamager(final Entity entity) {
if (this.directEntity != null) {
- throw new IllegalStateException("Cannot set an event damager when a direct entity is already set (if you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues)"); // Leaf - Rebrand
+ throw new IllegalStateException("Cannot set an event damager when a direct entity is already set (if you think this is a Sapling bug, please report it at https://github.com/Winds-Studio/Sapling/issues)"); // Leaf - Rebrand // Sapling - Rebrand
}
final DamageSource damageSource = this.copy();
damageSource.eventEntityDamager = entity;
diff --git a/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
index 3634d68c77ee99567b51a9a848d7cbbb218a0ba7..cb5607073234dc8a66167125f051f850eaa2c97a 100644
--- a/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
+++ b/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
@@ -308,7 +308,7 @@ public class RegionFileStorage implements AutoCloseable, ca.spottedleaf.moonrise

// Paper start
private static void printOversizedLog(String msg, Path file, int x, int z) {
- org.apache.logging.log4j.LogManager.getLogger().fatal(msg + " (" + file.toString().replaceAll(".+[\\\\/]", "") + " - " + x + "," + z + ") Go clean it up to remove this message. /minecraft:tp " + (x<<4)+" 128 "+(z<<4) + " - DO NOT REPORT THIS TO PAPER OR LEAF - You may ask for help on Discord, but do not file an issue. These error messages can not be removed. - If you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues)"); // Leaf - Rebrand
+ org.apache.logging.log4j.LogManager.getLogger().fatal(msg + " (" + file.toString().replaceAll(".+[\\\\/]", "") + " - " + x + "," + z + ") Go clean it up to remove this message. /minecraft:tp " + (x<<4)+" 128 "+(z<<4) + " - DO NOT REPORT THIS TO PAPER OR LEAF - You may ask for help on Discord, but do not file an issue. These error messages can not be removed. - If you think this is a Sapling bug, please report it at https://github.com/Winds-Studio/Sapling/issues)"); // Leaf - Rebrand // Sapling - Rebrand
}

private static CompoundTag readOversizedChunk(RegionFile regionfile, ChunkPos chunkCoordinate) throws IOException {
Loading